/**
 * Skipped minification because the original files appears to be already minified.
 * Original file: /npm/node-mailjet@6.0.11/mailjet.web.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
/*! For license information please see mailjet.web.js.LICENSE.txt */
define((function(){return function(){var e={13:function(e,t,n){var r=n(372).stringify,o=n(146);e.exports=function(e){return{parse:o(e),stringify:r}},e.exports.parse=o(),e.exports.stringify=r},25:function(e,t){"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),function(e){e.Get="get",e.Post="post",e.Put="put",e.Delete="delete"}(n||(n={})),t.default=n},30:function(e,t){"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)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"object"===n(e)&&null!==e&&(Object.getPrototypeOf(e)===Object.prototype||null===Object.getPrototypeOf(e))}},52:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=t.DNS=t.Sender=t.Webhook=t.Statistic=t.Template=t.Segmentation=t.SentCampaign=t.DraftCampaign=t.ContactProperties=t.BulkContactManagement=t.Message=t.SendEmailV3_1=t.Common=void 0;var r=n(311);Object.defineProperty(t,"Common",{enumerable:!0,get:function(){return r.Common}});var o=n(842);Object.defineProperty(t,"SendEmailV3_1",{enumerable:!0,get:function(){return o.SendEmailV3_1}});var i=n(375);Object.defineProperty(t,"Message",{enumerable:!0,get:function(){return i.Message}});var s=n(696);Object.defineProperty(t,"BulkContactManagement",{enumerable:!0,get:function(){return s.BulkContactManagement}}),Object.defineProperty(t,"ContactProperties",{enumerable:!0,get:function(){return s.ContactProperties}});var a=n(64);Object.defineProperty(t,"DraftCampaign",{enumerable:!0,get:function(){return a.DraftCampaign}}),Object.defineProperty(t,"SentCampaign",{enumerable:!0,get:function(){return a.SentCampaign}});var u=n(948);Object.defineProperty(t,"Segmentation",{enumerable:!0,get:function(){return u.Segmentation}});var c=n(580);Object.defineProperty(t,"Template",{enumerable:!0,get:function(){return c.Template}});var l=n(254);Object.defineProperty(t,"Statistic",{enumerable:!0,get:function(){return l.Statistic}});var f=n(193);Object.defineProperty(t,"Webhook",{enumerable:!0,get:function(){return f.Webhook}});var p=n(382);Object.defineProperty(t,"Sender",{enumerable:!0,get:function(){return p.Sender}}),Object.defineProperty(t,"DNS",{enumerable:!0,get:function(){return p.DNS}});var d=n(380);Object.defineProperty(t,"APIKeyConfiguration",{enumerable:!0,get:function(){return d.APIKeyConfiguration}})},64:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SentCampaign=t.DraftCampaign=void 0,function(e){!function(e){e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.EditMode||(e.EditMode={})),function(e){e[e.AXCanceled=-3]="AXCanceled",e[e.Deleted=-2]="Deleted",e[e.Archived=-1]="Archived",e[e.Draft=0]="Draft",e[e.Programmed=1]="Programmed",e[e.Sent=2]="Sent",e[e.AXTested=3]="AXTested",e[e.AXSelected=4]="AXSelected"}(e.CampaignDraftStatus||(e.CampaignDraftStatus={})),function(e){e.AXCancelled="AXCancelled",e.Deleted="Deleted",e.Archived="Archived",e.Draft="Draft",e.Programmed="Programmed",e.Sent="Sent",e.AXTested="AXTested",e.AXSelected="AXSelected"}(e.CampaignDraftSendingStatus||(e.CampaignDraftSendingStatus={}))}(t.DraftCampaign||(t.DraftCampaign={})),function(e){!function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.CampaignType||(e.CampaignType={}))}(t.SentCampaign||(t.SentCampaign={}))},81:function(e,t,n){"use strict";var r,o=this&&this.__extends||(r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)},function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}),i=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||i(t,e,n)},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.HttpMethods=t.Request=t.Client=void 0;var u=a(n(25));t.HttpMethods=u.default;var c=a(n(251));t.Request=c.default;var l=a(n(865));t.Client=l.default;var f=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return o(t,e),t.Request=c.default,t.HttpMethods=u.default,t.Client=l.default,t}(l.default);s(n(52),t),t.default=f},88:function(e,t){"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)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return"object"===n(e)&&null!==e&&Object.getPrototypeOf(e)===Object.prototype&&Object.keys(e).length>0}},146:function(e,t,n){var r=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,a,u,c,l={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:"\n",r:"\r",t:"\t"},f=function(e){throw{name:"SyntaxError",message:e,at:s,text:u}},p=function(e){return e&&e!==a&&f("Expected '"+e+"' instead of '"+a+"'"),a=u.charAt(s),s+=1,a},d=function(){var e,o="";for("-"===a&&(o="-",p("-"));a>="0"&&a<="9";)o+=a,p();if("."===a)for(o+=".";p()&&a>="0"&&a<="9";)o+=a;if("e"===a||"E"===a)for(o+=a,p(),"-"!==a&&"+"!==a||(o+=a,p());a>="0"&&a<="9";)o+=a,p();if(e=+o,isFinite(e))return null==r&&(r=n(594)),o.length>15?t.storeAsString?o:t.useNativeBigInt?BigInt(o):new r(o):t.alwaysParseAsBig?t.useNativeBigInt?BigInt(e):new r(e):e;f("Bad number")},h=function(){var e,t,n,r="";if('"'===a)for(var o=s;p();){if('"'===a)return s-1>o&&(r+=u.substring(o,s-1)),p(),r;if("\\"===a){if(s-1>o&&(r+=u.substring(o,s-1)),p(),"u"===a){for(n=0,t=0;t<4&&(e=parseInt(p(),16),isFinite(e));t+=1)n=16*n+e;r+=String.fromCharCode(n)}else{if("string"!=typeof l[a])break;r+=l[a]}o=s}}f("Bad string")},m=function(){for(;a&&a<=" ";)p()};return c=function(){switch(m(),a){case"{":return function(){var e,n=Object.create(null);if("{"===a){if(p("{"),m(),"}"===a)return p("}"),n;for(;a;){if(e=h(),m(),p(":"),!0===t.strict&&Object.hasOwnProperty.call(n,e)&&f('Duplicate key "'+e+'"'),!0===o.test(e)?"error"===t.protoAction?f("Object contains forbidden prototype property"):"ignore"===t.protoAction?c():n[e]=c():!0===i.test(e)?"error"===t.constructorAction?f("Object contains forbidden constructor property"):"ignore"===t.constructorAction?c():n[e]=c():n[e]=c(),m(),"}"===a)return p("}"),n;p(","),m()}}f("Bad object")}();case"[":return function(){var e=[];if("["===a){if(p("["),m(),"]"===a)return p("]"),e;for(;a;){if(e.push(c()),m(),"]"===a)return p("]"),e;p(","),m()}}f("Bad array")}();case'"':return h();case"-":return d();default:return a>="0"&&a<="9"?d():function(){switch(a){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}f("Unexpected '"+a+"'")}()}},function(e,t){var n;return u=e+"",s=0,a=" ",n=c(),m(),a&&f("Syntax error"),"function"==typeof t?function e(n,r){var o,i=n[r];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(n,r,i)}({"":n},""):n}}},191:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isValidJson=t.setValueIfNotNil=t.isNonEmptyObject=t.isPureObject=t.isUndefined=t.isNull=t.isNil=void 0;var o=r(n(476));t.isNil=o.default;var i=r(n(750));t.isNull=i.default;var s=r(n(235));t.isUndefined=s.default;var a=r(n(30));t.isPureObject=a.default;var u=r(n(457));t.setValueIfNotNil=u.default;var c=r(n(88));t.isNonEmptyObject=c.default;var l=r(n(275));t.isValidJson=l.default},193:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Webhook=void 0,function(e){!function(e){e.Open="open",e.Click="click",e.Bounce="bounce",e.Spam="spam",e.Blocked="blocked",e.UnSub="unsub",e.Sent="sent"}(e.EventType||(e.EventType={})),function(e){e[e.Click=1]="Click",e[e.Bounce=2]="Bounce",e[e.Spam=3]="Spam",e[e.Blocked=4]="Blocked",e[e.Unsubscribe=5]="Unsubscribe",e[e.Open=6]="Open",e[e.Sent=7]="Sent"}(e.EventTypeValue||(e.EventTypeValue={})),function(e){e.Dead="dead",e.Alive="alive"}(e.Status||(e.Status={}))}(t.Webhook||(t.Webhook={}))},235:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return void 0===e}},251:function(e,t,n){"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)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},o.apply(this,arguments)},i=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),s=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&i(t,e,n);return s(t,e),t},u=this&&this.__awaiter||function(e,t,n,r){return new(n||(n=Promise))((function(o,i){function s(e){try{u(r.next(e))}catch(e){i(e)}}function a(e){try{u(r.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}u((r=r.apply(e,t||[])).next())}))},c=this&&this.__generator||function(e,t){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var f=l(n(469)),p=l(n(13)),d=a(n(425)),h=n(191),m=l(n(25)),g=l(n(865)),y=(0,p.default)({storeAsString:!0}),b=function(){function e(e,t,n,r){if(!(e instanceof g.default))throw new Error('Argument "client" must be instance of Client');if(!Object.values(m.default).includes(t))throw new Error('Argument "method" must be one of supported methods: get, post, put, delete');if("string"!=typeof n)throw new Error('Argument "resource" must be string');this.client=e,this.method=t,this.url=n.toLowerCase(),this.resource=n.toLowerCase(),this.subPath=this.buildSubPath(),this.actionPath=null,this.config=o({},r)}return e.prototype.getUserAgent=function(){return"mailjet-api-v3-nodejs/".concat(this.client.getPackageVersion())},e.prototype.getCredentials=function(){return{apiToken:this.client.getAPIToken(),apiKey:this.client.getAPIKey(),apiSecret:this.client.getAPISecret()}},e.prototype.getContentType=function(e){if("string"!=typeof e)throw new Error('Argument "url" must be string');return e.indexOf("text:plain")>-1?"text/plain":"application/json"},e.prototype.getRequestBody=function(e){return[m.default.Put,m.default.Post,m.default.Delete].includes(this.method)?e:void 0},e.prototype.buildFullUrl=function(){var t,n,r=this.client.getConfig(),o=null!==(t=this.config.host)&&void 0!==t?t:r.host,i=null!==(n=this.config.version)&&void 0!==n?n:r.version;return(0,f.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 n="send"===this.resource,r=this.resource.indexOf("sms")>-1;return n||r?"":"REST"},e.prototype.makeRequest=function(t,n,r){var i,s={url:t,params:r,data:this.getRequestBody(n),method:this.method,responseType:"json",headers:{"User-Agent":this.getUserAgent(),"Content-Type":this.getContentType(t)},transformResponse:function(t){var n="string"==typeof t,r="json"===this.responseType;return t&&n&&r?e.parseToJSONb(t):t}};e.isBrowser()&&(s.headers["X-User-Agent"]=s.headers["User-Agent"]);var a=this.getCredentials();a.apiToken?s.headers.Authorization="Bearer ".concat(a.apiToken):s.auth={username:a.apiKey,password:a.apiSecret};var u=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 l=null!==(i=this.config.output)&&void 0!==i?i:u.output;return l&&(s.responseType=l),c.maxBodyLength&&(s.maxBodyLength=c.maxBodyLength),c.maxContentLength&&(s.maxContentLength=c.maxContentLength),(0,d.default)(s)},e.prototype.setBaseURL=function(e){return this.url=e.toLowerCase(),this},e.prototype.id=function(e){if(!["string","number"].includes(r(e)))throw new Error('Argument "value" must be string or number');return this.url=(0,f.default)(this.url,e.toString()),this},e.prototype.action=function(e){if("string"!=typeof e)throw new Error("action method should be called with argument of type 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,f.default)(this.url,this.actionPath),this.subPath=this.buildSubPath(),this},e.prototype.request=function(e,t,n){var r,o,i,s,a;return void 0===e&&(e={}),void 0===t&&(t={}),void 0===n&&(n=!0),u(this,void 0,void 0,(function(){var u,l,f,p,m,g,y,b,v,w;return c(this,(function(c){switch(c.label){case 0:if(u=this.buildFullUrl(),this.setBaseURL(this.resource),this.actionPath&&this.validateActionData(this.actionPath,e),!n)return[2,{body:b=this.getRequestBody(e),params:t,url:u}];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,this.makeRequest(u,e,t)];case 2:return[2,{response:l=c.sent(),body:l.data}];case 3:if((f=c.sent())instanceof d.AxiosError)throw(p=new Error).code=f.code,p.config=f.config,f.response?(m=f.response,g=m.status,y=m.statusText,b=m.data,p.response=f.response,p.statusCode=g,p.statusText=y,v=null!==(r=null==b?void 0:b.ErrorMessage)&&void 0!==r?r:f.message,p.originalMessage=v,p.message='Unsuccessful: Status Code: "'.concat(p.statusCode,'" Message: "').concat(v,'"'),b&&("string"==typeof(w=null===(a=null===(s=null===(i=null===(o=b.Messages)||void 0===o?void 0:o[0])||void 0===i?void 0:i.Errors)||void 0===s?void 0:s[0])||void 0===a?void 0:a.ErrorMessage)&&(p.message+=";\n".concat(w)),(0,h.setValueIfNotNil)(p,"ErrorMessage",b.ErrorMessage),(0,h.setValueIfNotNil)(p,"ErrorCode",b.ErrorCode),(0,h.setValueIfNotNil)(p,"ErrorIdentifier",b.ErrorIdentifier),(0,h.setValueIfNotNil)(p,"ErrorRelatedTo",b.ErrorRelatedTo))):(p.response=null,p.statusCode=null,p.statusText=null,p.originalMessage=f.message,p.message='Unsuccessful: Error Code: "'.concat(p.code,'" Message: "').concat(f.message,'"')),p;throw f;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":r(window))},e.prototype.validateActionData=function(e,t){var n={managecontact:function(e){if("object"===r(e)){if(!(0,h.isNonEmptyObject)(e))throw new Error('"managecontact" action expects request body to be not empty object');if(!(0,h.isValidJson)(e))throw new Error('"managecontact" action expects request body to be valid JSON object');if("Properties"in e){if("string"==typeof e.Properties)throw new Error('"managecontact" action expects Properties value to be an object');if("object"===r(e.Properties)&&!(0,h.isNull)(e.Properties)&&!(0,h.isValidJson)(e.Properties))throw new Error('"managecontact" action expects Properties value to be valid JSON object')}}}};e in n&&n[e](t)},e.protocol="https://",e}();t.default=b},254:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Statistic=void 0,function(e){!function(e){e.SentCampaign="Campaign",e.ABTesting="AX",e.Draft="NL"}(e.CampaignOverviewIDType||(e.CampaignOverviewIDType={})),function(e){e.Tool="tool",e.HTML="html",e.Tool2="tool2",e.HTML2="html2",e.MJML="mjml"}(e.CampaignOverviewEditMode||(e.CampaignOverviewEditMode={})),function(e){e.Full="full",e.Unknown="unknown"}(e.CampaignOverviewEditType||(e.CampaignOverviewEditType={})),function(e){e.Campaign="Campaign",e.APIKey="APIKey",e.List="List",e.Sender="Sender"}(e.CounterSource||(e.CounterSource={})),function(e){e.Highest="Highest",e.Hour="Hour",e.Day="Day",e.Lifetime="Lifetime"}(e.CounterResolution||(e.CounterResolution={})),function(e){e.Message="Message",e.Event="Event"}(e.CounterTiming||(e.CounterTiming={})),function(e){e.Open="open",e.Click="click"}(e.EmailEvent||(e.EmailEvent={}))}(t.Statistic||(t.Statistic={}))},275:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){try{return JSON.stringify(e),!0}catch(e){return!1}}},311:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Common=void 0,function(e){!function(e){e.Day="Day",e.Week="Week",e.Month="Month",e.Year="Year"}(e.Period||(e.Period={}))}(t.Common||(t.Common={}))},330:function(e){"use strict";e.exports=JSON.parse('{"name":"node-mailjet","version":"6.0.11","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":"^1.12.0","json-bigint":"^1.0.0","url-join":"^4.0.0"},"devDependencies":{"@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":"^11.1.0","nock":"^13.2.4","nyc":"^15.1.0","qs":"^6.5.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.76.0","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 <arnaud@mailjet.com> (https://github.com/arnaudbreton)","Nicholas Smith <nicksmith.biz@gmail.com> (https://github.com/safani)","Jérémie Parker <jeremie@vizeat.com> (https://github.com/p-j)"]}')},372:function(e,t,n){var r=n(594),o=e.exports;!function(){"use strict";var e,t,n,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 a(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 u(o,i){var s,c,l,f,p,d=e,h=i[o],m=null!=h&&(h instanceof r||r.isBigNumber(h));switch(h&&"object"==typeof h&&"function"==typeof h.toJSON&&(h=h.toJSON(o)),"function"==typeof n&&(h=n.call(i,o,h)),typeof h){case"string":return m?h:a(h);case"number":return isFinite(h)?String(h):"null";case"boolean":case"null":case"bigint":return String(h);case"object":if(!h)return"null";if(e+=t,p=[],"[object Array]"===Object.prototype.toString.apply(h)){for(f=h.length,s=0;s<f;s+=1)p[s]=u(s,h)||"null";return l=0===p.length?"[]":e?"[\n"+e+p.join(",\n"+e)+"\n"+d+"]":"["+p.join(",")+"]",e=d,l}if(n&&"object"==typeof n)for(f=n.length,s=0;s<f;s+=1)"string"==typeof n[s]&&(l=u(c=n[s],h))&&p.push(a(c)+(e?": ":":")+l);else Object.keys(h).forEach((function(t){var n=u(t,h);n&&p.push(a(t)+(e?": ":":")+n)}));return l=0===p.length?"{}":e?"{\n"+e+p.join(",\n"+e)+"\n"+d+"}":"{"+p.join(",")+"}",e=d,l}}"function"!=typeof o.stringify&&(o.stringify=function(r,o,i){var s;if(e="",t="","number"==typeof i)for(s=0;s<i;s+=1)t+=" ";else"string"==typeof i&&(t=i);if(n=o,o&&"function"!=typeof o&&("object"!=typeof o||"number"!=typeof o.length))throw new Error("JSON.stringify");return u("",{"":r})})}()},375:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Message=void 0,function(e){!function(e){e[e.UserUnknown=1]="UserUnknown",e[e.MailboxInactive=2]="MailboxInactive",e[e.QuotaExceeded=3]="QuotaExceeded",e[e.InvalidDomain=4]="InvalidDomain",e[e.NoMailHost=5]="NoMailHost",e[e.RelayOrAccessDenied=6]="RelayOrAccessDenied",e[e.SenderBlocked=7]="SenderBlocked",e[e.ContentBlocked=8]="ContentBlocked",e[e.PolicyIssue=9]="PolicyIssue",e[e.SystemIssue=10]="SystemIssue",e[e.ProtocolIssue=11]="ProtocolIssue",e[e.ConnectionIssue=12]="ConnectionIssue",e[e.GreyListed=13]="GreyListed",e[e.PreBlocked=14]="PreBlocked",e[e.DuplicateInCampaign=15]="DuplicateInCampaign",e[e.SpamPreBlocked=16]="SpamPreBlocked",e[e.BadOrEmptyTemplate=17]="BadOrEmptyTemplate",e[e.ErrorInTemplateLanguage=18]="ErrorInTemplateLanguage",e[e.TypoFix=19]="TypoFix",e[e.BlackListed=20]="BlackListed",e[e.SpamReporter=21]="SpamReporter"}(e.MessageState||(e.MessageState={})),function(e){e[e.Transactional=1]="Transactional",e[e.Marketing=2]="Marketing",e[e.Unknown=3]="Unknown"}(e.FromType||(e.FromType={})),function(e){e[e.Processed=0]="Processed",e[e.Queued=1]="Queued",e[e.Sent=2]="Sent",e[e.Opened=3]="Opened",e[e.Clicked=4]="Clicked",e[e.Bounce=5]="Bounce",e[e.Spam=6]="Spam",e[e.Unsub=7]="Unsub",e[e.Blocked=8]="Blocked",e[e.SoftBounce=9]="SoftBounce",e[e.HardBounce=10]="HardBounce",e[e.Deferred=11]="Deferred"}(e.MessageStatus||(e.MessageStatus={})),function(e){e.Unknown="unknown",e.Queued="queued",e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounce="bounce",e.Spam="spam",e.Unsub="unsub",e.Blocked="blocked",e.HardBounced="hardbounced",e.SoftBounced="softbounced",e.Deferred="deferred"}(e.CurrentMessageStatus||(e.CurrentMessageStatus={})),function(e){e.Sent="sent",e.Opened="opened",e.Clicked="clicked",e.Bounced="bounced",e.Blocked="blocked",e.Unsub="unsub",e.Spam="spam"}(e.EventType||(e.EventType={}))}(t.Message||(t.Message={}))},380:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.APIKeyConfiguration=void 0,function(e){!function(e){e.Normal="Normal",e.SoftLock="Softlock",e.HardLock="Hardlock"}(e.RunLevel||(e.RunLevel={}))}(t.APIKeyConfiguration||(t.APIKeyConfiguration={}))},382:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DNS=t.Sender=void 0,function(e){!function(e){e.Transactional="transactional",e.Bulk="bulk",e.Unknown="unknown"}(e.EmailType||(e.EmailType={})),function(e){e.Inactive="Inactive",e.Active="Active",e.Deleted="Deleted"}(e.SenderStatus||(e.SenderStatus={}))}(t.Sender||(t.Sender={})),function(e){!function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked"}(e.DKIMConfigurationCheckStatus||(e.DKIMConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.DKIMConfigurationStatus||(e.DKIMConfigurationStatus={})),function(e){e.OK="OK",e.Error="Error",e.NotChecked="Not checked",e.NotFound="Not found"}(e.SPFConfigurationCheckStatus||(e.SPFConfigurationCheckStatus={})),function(e){e.OK="OK",e.Error="Error"}(e.SPFConfigurationStatus||(e.SPFConfigurationStatus={}))}(t.DNS||(t.DNS={}))},425:function(e,t,n){"use strict";function r(e,t){return function(){return e.apply(t,arguments)}}const{toString:o}=Object.prototype,{getPrototypeOf:i}=Object,{iterator:s,toStringTag:a}=Symbol,u=(c=Object.create(null),e=>{const t=o.call(e);return c[t]||(c[t]=t.slice(8,-1).toLowerCase())});var c;const l=e=>(e=e.toLowerCase(),t=>u(t)===e),f=e=>t=>typeof t===e,{isArray:p}=Array,d=f("undefined");function h(e){return null!==e&&!d(e)&&null!==e.constructor&&!d(e.constructor)&&y(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const m=l("ArrayBuffer");const g=f("string"),y=f("function"),b=f("number"),v=e=>null!==e&&"object"==typeof e,w=e=>{if("object"!==u(e))return!1;const t=i(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||a in e||s in e)},S=l("Date"),O=l("File"),E=l("Blob"),A=l("FileList"),C=l("URLSearchParams"),[j,P,T,k]=["ReadableStream","Request","Response","Headers"].map(l);function _(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),p(e))for(r=0,o=e.length;r<o;r++)t.call(null,e[r],r,e);else{if(h(e))return;const o=n?Object.getOwnPropertyNames(e):Object.keys(e),i=o.length;let s;for(r=0;r<i;r++)s=o[r],t.call(null,e[s],s,e)}}function N(e,t){if(h(e))return null;t=t.toLowerCase();const n=Object.keys(e);let r,o=n.length;for(;o-- >0;)if(r=n[o],t===r.toLowerCase())return r;return null}const R="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:n.g,x=e=>!d(e)&&e!==R;const B=(M="undefined"!=typeof Uint8Array&&i(Uint8Array),e=>M&&e instanceof M);var M;const D=l("HTMLFormElement"),U=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),L=l("RegExp"),I=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};_(n,((n,o)=>{let i;!1!==(i=t(n,o,e))&&(r[o]=i||n)})),Object.defineProperties(e,r)};const F=l("AsyncFunction"),q=(H="function"==typeof setImmediate,V=y(R.postMessage),H?setImmediate:V?(K=`axios@${Math.random()}`,J=[],R.addEventListener("message",(({source:e,data:t})=>{e===R&&t===K&&J.length&&J.shift()()}),!1),e=>{J.push(e),R.postMessage(K,"*")}):e=>setTimeout(e));var H,V,K,J;const z="undefined"!=typeof queueMicrotask?queueMicrotask.bind(R):"undefined"!=typeof process&&process.nextTick||q;var W={isArray:p,isArrayBuffer:m,isBuffer:h,isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||y(e.append)&&("formdata"===(t=u(e))||"object"===t&&y(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&m(e.buffer),t},isString:g,isNumber:b,isBoolean:e=>!0===e||!1===e,isObject:v,isPlainObject:w,isEmptyObject:e=>{if(!v(e)||h(e))return!1;try{return 0===Object.keys(e).length&&Object.getPrototypeOf(e)===Object.prototype}catch(e){return!1}},isReadableStream:j,isRequest:P,isResponse:T,isHeaders:k,isUndefined:d,isDate:S,isFile:O,isBlob:E,isRegExp:L,isFunction:y,isStream:e=>v(e)&&y(e.pipe),isURLSearchParams:C,isTypedArray:B,isFileList:A,forEach:_,merge:function e(){const{caseless:t,skipUndefined:n}=x(this)&&this||{},r={},o=(o,i)=>{const s=t&&N(r,i)||i;w(r[s])&&w(o)?r[s]=e(r[s],o):w(o)?r[s]=e({},o):p(o)?r[s]=o.slice():n&&d(o)||(r[s]=o)};for(let e=0,t=arguments.length;e<t;e++)arguments[e]&&_(arguments[e],o);return r},extend:(e,t,n,{allOwnKeys:o}={})=>(_(t,((t,o)=>{n&&y(t)?e[o]=r(t,n):e[o]=t}),{allOwnKeys:o}),e),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,n,r)=>{let o,s,a;const u={};if(t=t||{},null==e)return t;do{for(o=Object.getOwnPropertyNames(e),s=o.length;s-- >0;)a=o[s],r&&!r(a,e,t)||u[a]||(t[a]=e[a],u[a]=!0);e=!1!==n&&i(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:u,kindOfTest:l,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(p(e))return e;let t=e.length;if(!b(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[s]).call(e);let r;for(;(r=n.next())&&!r.done;){const n=r.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:D,hasOwnProperty:U,hasOwnProp:U,reduceDescriptors:I,freezeMethods:e=>{I(e,((t,n)=>{if(y(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];y(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return p(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:N,global:R,isContextDefined:x,isSpecCompliantForm:function(e){return!!(e&&y(e.append)&&"FormData"===e[a]&&e[s])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(v(e)){if(t.indexOf(e)>=0)return;if(h(e))return e;if(!("toJSON"in e)){t[r]=e;const o=p(e)?[]:{};return _(e,((e,t)=>{const i=n(e,r+1);!d(i)&&(o[t]=i)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:F,isThenable:e=>e&&(v(e)||y(e))&&y(e.then)&&y(e.catch),setImmediate:q,asap:z,isIterable:e=>null!=e&&y(e[s])};function $(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}W.inherits($,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:W.toJSONObject(this.config),code:this.code,status:this.status}}});const G=$.prototype,X={};["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","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{X[e]={value:e}})),Object.defineProperties($,X),Object.defineProperty(G,"isAxiosError",{value:!0}),$.from=(e,t,n,r,o,i)=>{const s=Object.create(G);W.toFlatObject(e,s,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e));const a=e&&e.message?e.message:"Error",u=null==t&&e?e.code:t;return $.call(s,a,u,n,r,o),e&&null==s.cause&&Object.defineProperty(s,"cause",{value:e,configurable:!0}),s.name=e&&e.name||"Error",i&&Object.assign(s,i),s};function Q(e){return W.isPlainObject(e)||W.isArray(e)}function Y(e){return W.endsWith(e,"[]")?e.slice(0,-2):e}function Z(e,t,n){return e?e.concat(t).map((function(e,t){return e=Y(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const ee=W.toFlatObject(W,{},null,(function(e){return/^is[A-Z]/.test(e)}));function te(e,t,n){if(!W.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=W.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!W.isUndefined(t[e])}))).metaTokens,o=n.visitor||c,i=n.dots,s=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&W.isSpecCompliantForm(t);if(!W.isFunction(o))throw new TypeError("visitor must be a function");function u(e){if(null===e)return"";if(W.isDate(e))return e.toISOString();if(W.isBoolean(e))return e.toString();if(!a&&W.isBlob(e))throw new $("Blob is not supported. Use a Buffer instead.");return W.isArrayBuffer(e)||W.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,n,o){let a=e;if(e&&!o&&"object"==typeof e)if(W.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(W.isArray(e)&&function(e){return W.isArray(e)&&!e.some(Q)}(e)||(W.isFileList(e)||W.endsWith(n,"[]"))&&(a=W.toArray(e)))return n=Y(n),a.forEach((function(e,r){!W.isUndefined(e)&&null!==e&&t.append(!0===s?Z([n],r,i):null===s?n:n+"[]",u(e))})),!1;return!!Q(e)||(t.append(Z(o,n,i),u(e)),!1)}const l=[],f=Object.assign(ee,{defaultVisitor:c,convertValue:u,isVisitable:Q});if(!W.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!W.isUndefined(n)){if(-1!==l.indexOf(n))throw Error("Circular reference detected in "+r.join("."));l.push(n),W.forEach(n,(function(n,i){!0===(!(W.isUndefined(n)||null===n)&&o.call(t,n,W.isString(i)?i.trim():i,r,f))&&e(n,r?r.concat(i):[i])})),l.pop()}}(e),t}function ne(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function re(e,t){this._pairs=[],e&&te(e,this,t)}const oe=re.prototype;function ie(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function se(e,t,n){if(!t)return e;const r=n&&n.encode||ie;W.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let i;if(i=o?o(t,n):W.isURLSearchParams(t)?t.toString():new re(t,n).toString(r),i){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+i}return e}oe.append=function(e,t){this._pairs.push([e,t])},oe.toString=function(e){const t=e?function(t){return e.call(this,t,ne)}:ne;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var ae=class InterceptorManager{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){W.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},ue={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},ce={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:re,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]};const le="undefined"!=typeof window&&"undefined"!=typeof document,fe="object"==typeof navigator&&navigator||void 0,pe=le&&(!fe||["ReactNative","NativeScript","NS"].indexOf(fe.product)<0),de="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,he=le&&window.location.href||"http://localhost";var me={...Object.freeze({__proto__:null,hasBrowserEnv:le,hasStandardBrowserWebWorkerEnv:de,hasStandardBrowserEnv:pe,navigator:fe,origin:he}),...ce};function ge(e){function t(e,n,r,o){let i=e[o++];if("__proto__"===i)return!0;const s=Number.isFinite(+i),a=o>=e.length;if(i=!i&&W.isArray(r)?r.length:i,a)return W.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!s;r[i]&&W.isObject(r[i])||(r[i]=[]);return t(e,n,r[i],o)&&W.isArray(r[i])&&(r[i]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let i;for(r=0;r<o;r++)i=n[r],t[i]=e[i];return t}(r[i])),!s}if(W.isFormData(e)&&W.isFunction(e.entries)){const n={};return W.forEachEntry(e,((e,r)=>{t(function(e){return W.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null}const ye={transitional:ue,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=W.isObject(e);o&&W.isHTMLForm(e)&&(e=new FormData(e));if(W.isFormData(e))return r?JSON.stringify(ge(e)):e;if(W.isArrayBuffer(e)||W.isBuffer(e)||W.isStream(e)||W.isFile(e)||W.isBlob(e)||W.isReadableStream(e))return e;if(W.isArrayBufferView(e))return e.buffer;if(W.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let i;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return te(e,new me.classes.URLSearchParams,{visitor:function(e,t,n,r){return me.isNode&&W.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)},...t})}(e,this.formSerializer).toString();if((i=W.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return te(i?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(W.isString(e))try{return(t||JSON.parse)(e),W.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||ye.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(W.isResponse(e)||W.isReadableStream(e))return e;if(e&&W.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e,this.parseReviver)}catch(e){if(n){if("SyntaxError"===e.name)throw $.from(e,$.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:me.classes.FormData,Blob:me.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};W.forEach(["delete","get","head","post","put","patch"],(e=>{ye.headers[e]={}}));var be=ye;const ve=W.toObjectSet(["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"]);const we=Symbol("internals");function Se(e){return e&&String(e).trim().toLowerCase()}function Oe(e){return!1===e||null==e?e:W.isArray(e)?e.map(Oe):String(e)}function Ee(e,t,n,r,o){return W.isFunction(r)?r.call(this,t,n):(o&&(t=n),W.isString(t)?W.isString(r)?-1!==t.indexOf(r):W.isRegExp(r)?r.test(t):void 0:void 0)}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=Se(t);if(!o)throw new Error("header name must be a non-empty string");const i=W.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=Oe(e))}const i=(e,t)=>W.forEach(e,((e,n)=>o(e,n,t)));if(W.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(W.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&ve[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(W.isObject(e)&&W.isIterable(e)){let n,r,o={};for(const t of e){if(!W.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?W.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}i(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=Se(e)){const n=W.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(W.isFunction(t))return t.call(this,e,n);if(W.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=Se(e)){const n=W.findKey(this,e);return!(!n||void 0===this[n]||t&&!Ee(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=Se(e)){const o=W.findKey(n,e);!o||t&&!Ee(0,n[o],o,t)||(delete n[o],r=!0)}}return W.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!Ee(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return W.forEach(this,((r,o)=>{const i=W.findKey(n,o);if(i)return t[i]=Oe(r),void delete t[o];const s=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();s!==o&&delete t[o],t[s]=Oe(r),n[s]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return W.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&W.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[we]=this[we]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=Se(e);t[r]||(!function(e,t){const n=W.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return W.isArray(e)?e.forEach(r):r(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),W.reduceDescriptors(AxiosHeaders.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),W.freezeMethods(AxiosHeaders);var Ae=AxiosHeaders;function Ce(e,t){const n=this||be,r=t||n,o=Ae.from(r.headers);let i=r.data;return W.forEach(e,(function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)})),o.normalize(),i}function je(e){return!(!e||!e.__CANCEL__)}function Pe(e,t,n){$.call(this,null==e?"canceled":e,$.ERR_CANCELED,t,n),this.name="CanceledError"}function Te(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new $("Request failed with status code "+n.status,[$.ERR_BAD_REQUEST,$.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}W.inherits(Pe,$,{__CANCEL__:!0});const ke=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,i=0,s=0;return t=void 0!==t?t:1e3,function(a){const u=Date.now(),c=r[s];o||(o=u),n[i]=a,r[i]=u;let l=s,f=0;for(;l!==i;)f+=n[l++],l%=e;if(i=(i+1)%e,i===s&&(s=(s+1)%e),u-o<t)return;const p=c&&u-c;return p?Math.round(1e3*f/p):void 0}}(50,250);return function(e,t){let n,r,o=0,i=1e3/t;const s=(t,i=Date.now())=>{o=i,n=null,r&&(clearTimeout(r),r=null),e(...t)};return[(...e)=>{const t=Date.now(),a=t-o;a>=i?s(e,t):(n=e,r||(r=setTimeout((()=>{r=null,s(n)}),i-a)))},()=>n&&s(n)]}((n=>{const i=n.loaded,s=n.lengthComputable?n.total:void 0,a=i-r,u=o(a);r=i;e({loaded:i,total:s,progress:s?i/s:void 0,bytes:a,rate:u||void 0,estimated:u&&s&&i<=s?(s-i)/u:void 0,event:n,lengthComputable:null!=s,[t?"download":"upload"]:!0})}),n)},_e=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Ne=e=>(...t)=>W.asap((()=>e(...t)));var Re=me.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,me.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(me.origin),me.navigator&&/(msie|trident)/i.test(me.navigator.userAgent)):()=>!0,xe=me.hasStandardBrowserEnv?{write(e,t,n,r,o,i){const s=[e+"="+encodeURIComponent(t)];W.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),W.isString(r)&&s.push("path="+r),W.isString(o)&&s.push("domain="+o),!0===i&&s.push("secure"),document.cookie=s.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function Be(e,t,n){let r=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Me=e=>e instanceof Ae?{...e}:e;function De(e,t){t=t||{};const n={};function r(e,t,n,r){return W.isPlainObject(e)&&W.isPlainObject(t)?W.merge.call({caseless:r},e,t):W.isPlainObject(t)?W.merge({},t):W.isArray(t)?t.slice():t}function o(e,t,n,o){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function i(e,t){if(!W.isUndefined(t))return r(void 0,t)}function s(e,t){return W.isUndefined(t)?W.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function a(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}const u={url:i,method:i,data:i,baseURL:s,transformRequest:s,transformResponse:s,paramsSerializer:s,timeout:s,timeoutMessage:s,withCredentials:s,withXSRFToken:s,adapter:s,responseType:s,xsrfCookieName:s,xsrfHeaderName:s,onUploadProgress:s,onDownloadProgress:s,decompress:s,maxContentLength:s,maxBodyLength:s,beforeRedirect:s,transport:s,httpAgent:s,httpsAgent:s,cancelToken:s,socketPath:s,responseEncoding:s,validateStatus:a,headers:(e,t,n)=>o(Me(e),Me(t),0,!0)};return W.forEach(Object.keys({...e,...t}),(function(r){const i=u[r]||o,s=i(e[r],t[r],r);W.isUndefined(s)&&i!==a||(n[r]=s)})),n}var Ue=e=>{const t=De({},e);let{data:n,withXSRFToken:r,xsrfHeaderName:o,xsrfCookieName:i,headers:s,auth:a}=t;if(t.headers=s=Ae.from(s),t.url=se(Be(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),a&&s.set("Authorization","Basic "+btoa((a.username||"")+":"+(a.password?unescape(encodeURIComponent(a.password)):""))),W.isFormData(n))if(me.hasStandardBrowserEnv||me.hasStandardBrowserWebWorkerEnv)s.setContentType(void 0);else if(W.isFunction(n.getHeaders)){const e=n.getHeaders(),t=["content-type","content-length"];Object.entries(e).forEach((([e,n])=>{t.includes(e.toLowerCase())&&s.set(e,n)}))}if(me.hasStandardBrowserEnv&&(r&&W.isFunction(r)&&(r=r(t)),r||!1!==r&&Re(t.url))){const e=o&&i&&xe.read(i);e&&s.set(o,e)}return t};var Le="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=Ue(e);let o=r.data;const i=Ae.from(r.headers).normalize();let s,a,u,c,l,{responseType:f,onUploadProgress:p,onDownloadProgress:d}=r;function h(){c&&c(),l&&l(),r.cancelToken&&r.cancelToken.unsubscribe(s),r.signal&&r.signal.removeEventListener("abort",s)}let m=new XMLHttpRequest;function g(){if(!m)return;const r=Ae.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());Te((function(e){t(e),h()}),(function(e){n(e),h()}),{data:f&&"text"!==f&&"json"!==f?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=g:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(g)},m.onabort=function(){m&&(n(new $("Request aborted",$.ECONNABORTED,e,m)),m=null)},m.onerror=function(t){const r=new $(t&&t.message?t.message:"Network Error",$.ERR_NETWORK,e,m);r.event=t||null,n(r),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||ue;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new $(t,o.clarifyTimeoutError?$.ETIMEDOUT:$.ECONNABORTED,e,m)),m=null},void 0===o&&i.setContentType(null),"setRequestHeader"in m&&W.forEach(i.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),W.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),f&&"json"!==f&&(m.responseType=r.responseType),d&&([u,l]=ke(d,!0),m.addEventListener("progress",u)),p&&m.upload&&([a,c]=ke(p),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",c)),(r.cancelToken||r.signal)&&(s=t=>{m&&(n(!t||t.type?new Pe(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(s),r.signal&&(r.signal.aborted?s():r.signal.addEventListener("abort",s)));const y=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);y&&-1===me.protocols.indexOf(y)?n(new $("Unsupported protocol "+y+":",$.ERR_BAD_REQUEST,e)):m.send(o||null)}))};var Ie=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,s();const t=e instanceof Error?e:this.reason;r.abort(t instanceof $?t:new Pe(t instanceof Error?t.message:t))}};let i=t&&setTimeout((()=>{i=null,o(new $(`timeout ${t} of ms exceeded`,$.ETIMEDOUT))}),t);const s=()=>{e&&(i&&clearTimeout(i),i=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)})),e=null)};e.forEach((e=>e.addEventListener("abort",o)));const{signal:a}=r;return a.unsubscribe=()=>W.asap(s),a}};const Fe=function*(e,t){let n=e.byteLength;if(!t||n<t)return void(yield e);let r,o=0;for(;o<n;)r=o+t,yield e.slice(o,r),o=r},qe=async function*(e){if(e[Symbol.asyncIterator])return void(yield*e);const t=e.getReader();try{for(;;){const{done:e,value:n}=await t.read();if(e)break;yield n}}finally{await t.cancel()}},He=(e,t,n,r)=>{const o=async function*(e,t){for await(const n of qe(e))yield*Fe(n,t)}(e,t);let i,s=0,a=e=>{i||(i=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return a(),void e.close();let i=r.byteLength;if(n){let e=s+=i;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw a(e),e}},cancel(e){return a(e),o.return()}},{highWaterMark:2})},{isFunction:Ve}=W,Ke=(({Request:e,Response:t})=>({Request:e,Response:t}))(W.global),{ReadableStream:Je,TextEncoder:ze}=W.global,We=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},$e=e=>{e=W.merge.call({skipUndefined:!0},Ke,e);const{fetch:t,Request:n,Response:r}=e,o=t?Ve(t):"function"==typeof fetch,i=Ve(n),s=Ve(r);if(!o)return!1;const a=o&&Ve(Je),u=o&&("function"==typeof ze?(c=new ze,e=>c.encode(e)):async e=>new Uint8Array(await new n(e).arrayBuffer()));var c;const l=i&&a&&We((()=>{let e=!1;const t=new n(me.origin,{body:new Je,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),f=s&&a&&We((()=>W.isReadableStream(new r("").body))),p={stream:f&&(e=>e.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!p[e]&&(p[e]=(t,n)=>{let r=t&&t[e];if(r)return r.call(t);throw new $(`Response type '${e}' is not supported`,$.ERR_NOT_SUPPORT,n)})}));const d=async(e,t)=>{const r=W.toFiniteNumber(e.getContentLength());return null==r?(async e=>{if(null==e)return 0;if(W.isBlob(e))return e.size;if(W.isSpecCompliantForm(e)){const t=new n(me.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return W.isArrayBufferView(e)||W.isArrayBuffer(e)?e.byteLength:(W.isURLSearchParams(e)&&(e+=""),W.isString(e)?(await u(e)).byteLength:void 0)})(t):r};return async e=>{let{url:o,method:s,data:a,signal:u,cancelToken:c,timeout:h,onDownloadProgress:m,onUploadProgress:g,responseType:y,headers:b,withCredentials:v="same-origin",fetchOptions:w}=Ue(e),S=t||fetch;y=y?(y+"").toLowerCase():"text";let O=Ie([u,c&&c.toAbortSignal()],h),E=null;const A=O&&O.unsubscribe&&(()=>{O.unsubscribe()});let C;try{if(g&&l&&"get"!==s&&"head"!==s&&0!==(C=await d(b,a))){let e,t=new n(o,{method:"POST",body:a,duplex:"half"});if(W.isFormData(a)&&(e=t.headers.get("content-type"))&&b.setContentType(e),t.body){const[e,n]=_e(C,ke(Ne(g)));a=He(t.body,65536,e,n)}}W.isString(v)||(v=v?"include":"omit");const t=i&&"credentials"in n.prototype,u={...w,signal:O,method:s.toUpperCase(),headers:b.normalize().toJSON(),body:a,duplex:"half",credentials:t?v:void 0};E=i&&new n(o,u);let c=await(i?S(E,w):S(o,u));const h=f&&("stream"===y||"response"===y);if(f&&(m||h&&A)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=c[t]}));const t=W.toFiniteNumber(c.headers.get("content-length")),[n,o]=m&&_e(t,ke(Ne(m),!0))||[];c=new r(He(c.body,65536,n,(()=>{o&&o(),A&&A()})),e)}y=y||"text";let j=await p[W.findKey(p,y)||"text"](c,e);return!h&&A&&A(),await new Promise(((t,n)=>{Te(t,n,{data:j,headers:Ae.from(c.headers),status:c.status,statusText:c.statusText,config:e,request:E})}))}catch(t){if(A&&A(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new $("Network Error",$.ERR_NETWORK,e,E),{cause:t.cause||t});throw $.from(t,t&&t.code,e,E)}}},Ge=new Map,Xe=e=>{let t=e?e.env:{};const{fetch:n,Request:r,Response:o}=t,i=[r,o,n];let s,a,u=i.length,c=Ge;for(;u--;)s=i[u],a=c.get(s),void 0===a&&c.set(s,a=u?new Map:$e(t)),c=a;return a};Xe();const Qe={http:null,xhr:Le,fetch:{get:Xe}};W.forEach(Qe,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Ye=e=>`- ${e}`,Ze=e=>W.isFunction(e)||null===e||!1===e;var et=(e,t)=>{e=W.isArray(e)?e:[e];const{length:n}=e;let r,o;const i={};for(let s=0;s<n;s++){let n;if(r=e[s],o=r,!Ze(r)&&(o=Qe[(n=String(r)).toLowerCase()],void 0===o))throw new $(`Unknown adapter '${n}'`);if(o&&(W.isFunction(o)||(o=o.get(t))))break;i[n||"#"+s]=o}if(!o){const e=Object.entries(i).map((([e,t])=>`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new $("There is no suitable adapter to dispatch the request "+(n?e.length>1?"since :\n"+e.map(Ye).join("\n"):" "+Ye(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return o};function tt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Pe(null,e)}function nt(e){tt(e),e.headers=Ae.from(e.headers),e.data=Ce.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return et(e.adapter||be.adapter,e)(e).then((function(t){return tt(e),t.data=Ce.call(e,e.transformResponse,t),t.headers=Ae.from(t.headers),t}),(function(t){return je(t)||(tt(e),t&&t.response&&(t.response.data=Ce.call(e,e.transformResponse,t.response),t.response.headers=Ae.from(t.response.headers))),Promise.reject(t)}))}const rt="1.12.2",ot={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{ot[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const it={};ot.transitional=function(e,t,n){function r(e,t){return"[Axios v"+rt+"] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,i)=>{if(!1===e)throw new $(r(o," has been removed"+(t?" in "+t:"")),$.ERR_DEPRECATED);return t&&!it[o]&&(it[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,i)}},ot.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};var st={assertOptions:function(e,t,n){if("object"!=typeof e)throw new $("options must be an object",$.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const i=r[o],s=t[i];if(s){const t=e[i],n=void 0===t||s(t,i,e);if(!0!==n)throw new $("option "+i+" must be "+n,$.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new $("Unknown option "+i,$.ERR_BAD_OPTION)}},validators:ot};const at=st.validators;class Axios{constructor(e){this.defaults=e||{},this.interceptors={request:new ae,response:new ae}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=De(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&st.assertOptions(n,{silentJSONParsing:at.transitional(at.boolean),forcedJSONParsing:at.transitional(at.boolean),clarifyTimeoutError:at.transitional(at.boolean)},!1),null!=r&&(W.isFunction(r)?t.paramsSerializer={serialize:r}:st.assertOptions(r,{encode:at.function,serialize:at.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),st.assertOptions(t,{baseUrl:at.spelling("baseURL"),withXsrfToken:at.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let i=o&&W.merge(o.common,o[t.method]);o&&W.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Ae.concat(i,o);const s=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));const u=[];let c;this.interceptors.response.forEach((function(e){u.push(e.fulfilled,e.rejected)}));let l,f=0;if(!a){const e=[nt.bind(this),void 0];for(e.unshift(...s),e.push(...u),l=e.length,c=Promise.resolve(t);f<l;)c=c.then(e[f++],e[f++]);return c}l=s.length;let p=t;for(;f<l;){const e=s[f++],t=s[f++];try{p=e(p)}catch(e){t.call(this,e);break}}try{c=nt.call(this,p)}catch(e){return Promise.reject(e)}for(f=0,l=u.length;f<l;)c=c.then(u[f++],u[f++]);return c}getUri(e){return se(Be((e=De(this.defaults,e)).baseURL,e.url,e.allowAbsoluteUrls),e.params,e.paramsSerializer)}}W.forEach(["delete","get","head","options"],(function(e){Axios.prototype[e]=function(t,n){return this.request(De(n||{},{method:e,url:t,data:(n||{}).data}))}})),W.forEach(["post","put","patch"],(function(e){function t(t){return function(n,r,o){return this.request(De(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:n,data:r}))}}Axios.prototype[e]=t(),Axios.prototype[e+"Form"]=t(!0)}));var ut=Axios;class CancelToken{constructor(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");let t;this.promise=new Promise((function(e){t=e}));const n=this;this.promise.then((e=>{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new Pe(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new CancelToken((function(t){e=t})),cancel:e}}}var ct=CancelToken;const lt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(lt).forEach((([e,t])=>{lt[t]=e}));var ft=lt;const pt=function e(t){const n=new ut(t),o=r(ut.prototype.request,n);return W.extend(o,ut.prototype,n,{allOwnKeys:!0}),W.extend(o,n,null,{allOwnKeys:!0}),o.create=function(n){return e(De(t,n))},o}(be);pt.Axios=ut,pt.CanceledError=Pe,pt.CancelToken=ct,pt.isCancel=je,pt.VERSION=rt,pt.toFormData=te,pt.AxiosError=$,pt.Cancel=pt.CanceledError,pt.all=function(e){return Promise.all(e)},pt.spread=function(e){return function(t){return e.apply(null,t)}},pt.isAxiosError=function(e){return W.isObject(e)&&!0===e.isAxiosError},pt.mergeConfig=De,pt.AxiosHeaders=Ae,pt.formToJSON=e=>ge(W.isHTMLForm(e)?new FormData(e):e),pt.getAdapter=et,pt.HttpStatusCode=ft,pt.default=pt,e.exports=pt},457:function(e,t,n){"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)}var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=o(n(476)),s=o(n(750));t.default=function(e,t,n){if("object"!==r(e)||(0,s.default)(e))throw Error('Argument "targetObject" is not object');if(!t)throw Error('Argument "path" is required');(0,i.default)(n)||(e[t]=n)}},469:function(e,t,n){var r,o,i;i=function(){return function(){return function(e){var t=[];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 n=e.shift();e[0]=n+e[0]}e[0].match(/^file:\/\/\//)?e[0]=e[0].replace(/^([^/:]+):\/*/,"$1:///"):e[0]=e[0].replace(/^([^/:]+):\/*/,"$1://");for(var r=0;r<e.length;r++){var o=e[r];if("string"!=typeof o)throw new TypeError("Url must be a string. Received "+o);""!==o&&(r>0&&(o=o.replace(/^[\/]+/,"")),o=r<e.length-1?o.replace(/[\/]+$/,""):o.replace(/[\/]+$/,"/"),t.push(o))}var i=t.join("/"),s=(i=i.replace(/\/(\?|&|#[^!])/g,"$1")).split("?");return s.shift()+(s.length>0?"?":"")+s.join("&")}("object"==typeof arguments[0]?arguments[0]:[].slice.call(arguments))}},e.exports?e.exports=i():void 0===(o="function"==typeof(r=i)?r.call(t,n,t,e):r)||(e.exports=o)},476:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(750)),i=r(n(235));t.default=function(e){return(0,i.default)(e)||(0,o.default)(e)}},580:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Template=void 0,function(e){!function(e){e.Full="full",e.Basic="basic",e.NewsLetter="newsletter",e.ECommerce="e-commerce",e.Events="events",e.Travel="travel",e.Sports="sports",e.Welcome="welcome",e.ContactPropertyUpdate="contact-property-update",e.Support="support",e.Invoice="invoice",e.Anniversary="anniversary",e.Account="account",e.Activation="activation"}(e.Categories||(e.Categories={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.CategoriesSelectionMethod||(e.CategoriesSelectionMethod={})),function(e){e[e.DragAndDropBuilder=1]="DragAndDropBuilder",e[e.HTMLBuilder=2]="HTMLBuilder",e[e.SavedSectionBuilder=3]="SavedSectionBuilder",e[e.MJMLBuilder=4]="MJMLBuilder"}(e.EditMode||(e.EditMode={})),function(e){e.ApiKey="apikey",e.User="user",e.Global="global"}(e.OwnerType||(e.OwnerType={})),function(e){e.Marketing="marketing",e.Transactional="transactional",e.Automation="automation"}(e.Purposes||(e.Purposes={})),function(e){e.ContainsAny="containsany",e.ContainsAll="containsall",e.IsSubSet="issubset"}(e.PurposesSelectionMethod||(e.PurposesSelectionMethod={}))}(t.Template||(t.Template={}))},594:function(e,t,n){var r;!function(){"use strict";var o,i=/^-?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?$/i,s=Math.ceil,a=Math.floor,u="[BigNumber Error] ",c=u+"Number primitive has more than 15 significant digits: ",l=1e14,f=14,p=9007199254740991,d=[1,10,100,1e3,1e4,1e5,1e6,1e7,1e8,1e9,1e10,1e11,1e12,1e13],h=1e7,m=1e9;function g(e){var t=0|e;return e>0||e===t?t:t-1}function y(e){for(var t,n,r=1,o=e.length,i=e[0]+"";r<o;){for(t=e[r++]+"",n=f-t.length;n--;t="0"+t);i+=t}for(o=i.length;48===i.charCodeAt(--o););return i.slice(0,o+1||1)}function b(e,t){var n,r,o=e.c,i=t.c,s=e.s,a=t.s,u=e.e,c=t.e;if(!s||!a)return null;if(n=o&&!o[0],r=i&&!i[0],n||r)return n?r?0:-a:s;if(s!=a)return s;if(n=s<0,r=u==c,!o||!i)return r?0:!o^n?1:-1;if(!r)return u>c^n?1:-1;for(a=(u=o.length)<(c=i.length)?u:c,s=0;s<a;s++)if(o[s]!=i[s])return o[s]>i[s]^n?1:-1;return u==c?0:u>c^n?1:-1}function v(e,t,n,r){if(e<t||e>n||e!==a(e))throw Error(u+(r||"Argument")+("number"==typeof e?e<t||e>n?" out of range: ":" not an integer: ":" not a primitive number: ")+String(e))}function w(e){var t=e.c.length-1;return g(e.e/f)==t&&e.c[t]%2!=0}function S(e,t){return(e.length>1?e.charAt(0)+"."+e.slice(1):e)+(t<0?"e":"e+")+t}function O(e,t,n){var r,o;if(t<0){for(o=n+".";++t;o+=n);e=o+e}else if(++t>(r=e.length)){for(o=n,t-=r;--t;o+=n);e+=o}else t<r&&(e=e.slice(0,t)+"."+e.slice(t));return e}o=function e(t){var n,r,o,E,A,C,j,P,T,k,_=V.prototype={constructor:V,toString:null,valueOf:null},N=new V(1),R=20,x=4,B=-7,M=21,D=-1e7,U=1e7,L=!1,I=1,F=0,q={prefix:"",groupSize:3,secondaryGroupSize:0,groupSeparator:",",decimalSeparator:".",fractionGroupSize:0,fractionGroupSeparator:" ",suffix:""},H="0123456789abcdefghijklmnopqrstuvwxyz";function V(e,t){var n,s,u,l,d,h,m,g,y=this;if(!(y instanceof V))return new V(e,t);if(null==t){if(e&&!0===e._isBigNumber)return y.s=e.s,void(!e.c||e.e>U?y.c=y.e=null:e.e<D?y.c=[y.e=0]:(y.e=e.e,y.c=e.c.slice()));if((h="number"==typeof e)&&0*e==0){if(y.s=1/e<0?(e=-e,-1):1,e===~~e){for(l=0,d=e;d>=10;d/=10,l++);return void(l>U?y.c=y.e=null:(y.e=l,y.c=[e]))}g=String(e)}else{if(!i.test(g=String(e)))return o(y,g,h);y.s=45==g.charCodeAt(0)?(g=g.slice(1),-1):1}(l=g.indexOf("."))>-1&&(g=g.replace(".","")),(d=g.search(/e/i))>0?(l<0&&(l=d),l+=+g.slice(d+1),g=g.substring(0,d)):l<0&&(l=g.length)}else{if(v(t,2,H.length,"Base"),10==t)return W(y=new V(e),R+y.e+1,x);if(g=String(e),h="number"==typeof e){if(0*e!=0)return o(y,g,h,t);if(y.s=1/e<0?(g=g.slice(1),-1):1,V.DEBUG&&g.replace(/^0\.0*|\./,"").length>15)throw Error(c+e)}else y.s=45===g.charCodeAt(0)?(g=g.slice(1),-1):1;for(n=H.slice(0,t),l=d=0,m=g.length;d<m;d++)if(n.indexOf(s=g.charAt(d))<0){if("."==s){if(d>l){l=m;continue}}else if(!u&&(g==g.toUpperCase()&&(g=g.toLowerCase())||g==g.toLowerCase()&&(g=g.toUpperCase()))){u=!0,d=-1,l=0;continue}return o(y,String(e),h,t)}h=!1,(l=(g=r(g,t,10,y.s)).indexOf("."))>-1?g=g.replace(".",""):l=g.length}for(d=0;48===g.charCodeAt(d);d++);for(m=g.length;48===g.charCodeAt(--m););if(g=g.slice(d,++m)){if(m-=d,h&&V.DEBUG&&m>15&&(e>p||e!==a(e)))throw Error(c+y.s*e);if((l=l-d-1)>U)y.c=y.e=null;else if(l<D)y.c=[y.e=0];else{if(y.e=l,y.c=[],d=(l+1)%f,l<0&&(d+=f),d<m){for(d&&y.c.push(+g.slice(0,d)),m-=f;d<m;)y.c.push(+g.slice(d,d+=f));d=f-(g=g.slice(d)).length}else d-=m;for(;d--;g+="0");y.c.push(+g)}}else y.c=[y.e=0]}function K(e,t,n,r){var o,i,s,a,u;if(null==n?n=x:v(n,0,8),!e.c)return e.toString();if(o=e.c[0],s=e.e,null==t)u=y(e.c),u=1==r||2==r&&(s<=B||s>=M)?S(u,s):O(u,s,"0");else if(i=(e=W(new V(e),t,n)).e,a=(u=y(e.c)).length,1==r||2==r&&(t<=i||i<=B)){for(;a<t;u+="0",a++);u=S(u,i)}else if(t-=s,u=O(u,i,"0"),i+1>a){if(--t>0)for(u+=".";t--;u+="0");}else if((t+=i-a)>0)for(i+1==a&&(u+=".");t--;u+="0");return e.s<0&&o?"-"+u:u}function J(e,t){for(var n,r=1,o=new V(e[0]);r<e.length;r++){if(!(n=new V(e[r])).s){o=n;break}t.call(o,n)&&(o=n)}return o}function z(e,t,n){for(var r=1,o=t.length;!t[--o];t.pop());for(o=t[0];o>=10;o/=10,r++);return(n=r+n*f-1)>U?e.c=e.e=null:n<D?e.c=[e.e=0]:(e.e=n,e.c=t),e}function W(e,t,n,r){var o,i,u,c,p,h,m,g=e.c,y=d;if(g){e:{for(o=1,c=g[0];c>=10;c/=10,o++);if((i=t-o)<0)i+=f,u=t,m=(p=g[h=0])/y[o-u-1]%10|0;else if((h=s((i+1)/f))>=g.length){if(!r)break e;for(;g.length<=h;g.push(0));p=m=0,o=1,u=(i%=f)-f+1}else{for(p=c=g[h],o=1;c>=10;c/=10,o++);m=(u=(i%=f)-f+o)<0?0:p/y[o-u-1]%10|0}if(r=r||t<0||null!=g[h+1]||(u<0?p:p%y[o-u-1]),r=n<4?(m||r)&&(0==n||n==(e.s<0?3:2)):m>5||5==m&&(4==n||r||6==n&&(i>0?u>0?p/y[o-u]:0:g[h-1])%10&1||n==(e.s<0?8:7)),t<1||!g[0])return g.length=0,r?(t-=e.e+1,g[0]=y[(f-t%f)%f],e.e=-t||0):g[0]=e.e=0,e;if(0==i?(g.length=h,c=1,h--):(g.length=h+1,c=y[f-i],g[h]=u>0?a(p/y[o-u]%y[u])*c:0),r)for(;;){if(0==h){for(i=1,u=g[0];u>=10;u/=10,i++);for(u=g[0]+=c,c=1;u>=10;u/=10,c++);i!=c&&(e.e++,g[0]==l&&(g[0]=1));break}if(g[h]+=c,g[h]!=l)break;g[h--]=0,c=1}for(i=g.length;0===g[--i];g.pop());}e.e>U?e.c=e.e=null:e.e<D&&(e.c=[e.e=0])}return e}function $(e){var t,n=e.e;return null===n?e.toString():(t=y(e.c),t=n<=B||n>=M?S(t,n):O(t,n,"0"),e.s<0?"-"+t:t)}return V.clone=e,V.ROUND_UP=0,V.ROUND_DOWN=1,V.ROUND_CEIL=2,V.ROUND_FLOOR=3,V.ROUND_HALF_UP=4,V.ROUND_HALF_DOWN=5,V.ROUND_HALF_EVEN=6,V.ROUND_HALF_CEIL=7,V.ROUND_HALF_FLOOR=8,V.EUCLID=9,V.config=V.set=function(e){var t,n;if(null!=e){if("object"!=typeof e)throw Error(u+"Object expected: "+e);if(e.hasOwnProperty(t="DECIMAL_PLACES")&&(v(n=e[t],0,m,t),R=n),e.hasOwnProperty(t="ROUNDING_MODE")&&(v(n=e[t],0,8,t),x=n),e.hasOwnProperty(t="EXPONENTIAL_AT")&&((n=e[t])&&n.pop?(v(n[0],-m,0,t),v(n[1],0,m,t),B=n[0],M=n[1]):(v(n,-m,m,t),B=-(M=n<0?-n:n))),e.hasOwnProperty(t="RANGE"))if((n=e[t])&&n.pop)v(n[0],-m,-1,t),v(n[1],1,m,t),D=n[0],U=n[1];else{if(v(n,-m,m,t),!n)throw Error(u+t+" cannot be zero: "+n);D=-(U=n<0?-n:n)}if(e.hasOwnProperty(t="CRYPTO")){if((n=e[t])!==!!n)throw Error(u+t+" not true or false: "+n);if(n){if("undefined"==typeof crypto||!crypto||!crypto.getRandomValues&&!crypto.randomBytes)throw L=!n,Error(u+"crypto unavailable");L=n}else L=n}if(e.hasOwnProperty(t="MODULO_MODE")&&(v(n=e[t],0,9,t),I=n),e.hasOwnProperty(t="POW_PRECISION")&&(v(n=e[t],0,m,t),F=n),e.hasOwnProperty(t="FORMAT")){if("object"!=typeof(n=e[t]))throw Error(u+t+" not an object: "+n);q=n}if(e.hasOwnProperty(t="ALPHABET")){if("string"!=typeof(n=e[t])||/^.?$|[+\-.\s]|(.).*\1/.test(n))throw Error(u+t+" invalid: "+n);H=n}}return{DECIMAL_PLACES:R,ROUNDING_MODE:x,EXPONENTIAL_AT:[B,M],RANGE:[D,U],CRYPTO:L,MODULO_MODE:I,POW_PRECISION:F,FORMAT:q,ALPHABET:H}},V.isBigNumber=function(e){if(!e||!0!==e._isBigNumber)return!1;if(!V.DEBUG)return!0;var t,n,r=e.c,o=e.e,i=e.s;e:if("[object Array]"=={}.toString.call(r)){if((1===i||-1===i)&&o>=-m&&o<=m&&o===a(o)){if(0===r[0]){if(0===o&&1===r.length)return!0;break e}if((t=(o+1)%f)<1&&(t+=f),String(r[0]).length==t){for(t=0;t<r.length;t++)if((n=r[t])<0||n>=l||n!==a(n))break e;if(0!==n)return!0}}}else if(null===r&&null===o&&(null===i||1===i||-1===i))return!0;throw Error(u+"Invalid BigNumber: "+e)},V.maximum=V.max=function(){return J(arguments,_.lt)},V.minimum=V.min=function(){return J(arguments,_.gt)},V.random=(E=9007199254740992,A=Math.random()*E&2097151?function(){return a(Math.random()*E)}:function(){return 8388608*(1073741824*Math.random()|0)+(8388608*Math.random()|0)},function(e){var t,n,r,o,i,c=0,l=[],p=new V(N);if(null==e?e=R:v(e,0,m),o=s(e/f),L)if(crypto.getRandomValues){for(t=crypto.getRandomValues(new Uint32Array(o*=2));c<o;)(i=131072*t[c]+(t[c+1]>>>11))>=9e15?(n=crypto.getRandomValues(new Uint32Array(2)),t[c]=n[0],t[c+1]=n[1]):(l.push(i%1e14),c+=2);c=o/2}else{if(!crypto.randomBytes)throw L=!1,Error(u+"crypto unavailable");for(t=crypto.randomBytes(o*=7);c<o;)(i=281474976710656*(31&t[c])+1099511627776*t[c+1]+4294967296*t[c+2]+16777216*t[c+3]+(t[c+4]<<16)+(t[c+5]<<8)+t[c+6])>=9e15?crypto.randomBytes(7).copy(t,c):(l.push(i%1e14),c+=7);c=o/7}if(!L)for(;c<o;)(i=A())<9e15&&(l[c++]=i%1e14);for(o=l[--c],e%=f,o&&e&&(i=d[f-e],l[c]=a(o/i)*i);0===l[c];l.pop(),c--);if(c<0)l=[r=0];else{for(r=-1;0===l[0];l.splice(0,1),r-=f);for(c=1,i=l[0];i>=10;i/=10,c++);c<f&&(r-=f-c)}return p.e=r,p.c=l,p}),V.sum=function(){for(var e=1,t=arguments,n=new V(t[0]);e<t.length;)n=n.plus(t[e++]);return n},r=function(){var e="0123456789";function t(e,t,n,r){for(var o,i,s=[0],a=0,u=e.length;a<u;){for(i=s.length;i--;s[i]*=t);for(s[0]+=r.indexOf(e.charAt(a++)),o=0;o<s.length;o++)s[o]>n-1&&(null==s[o+1]&&(s[o+1]=0),s[o+1]+=s[o]/n|0,s[o]%=n)}return s.reverse()}return function(r,o,i,s,a){var u,c,l,f,p,d,h,m,g=r.indexOf("."),b=R,v=x;for(g>=0&&(f=F,F=0,r=r.replace(".",""),d=(m=new V(o)).pow(r.length-g),F=f,m.c=t(O(y(d.c),d.e,"0"),10,i,e),m.e=m.c.length),l=f=(h=t(r,o,i,a?(u=H,e):(u=e,H))).length;0==h[--f];h.pop());if(!h[0])return u.charAt(0);if(g<0?--l:(d.c=h,d.e=l,d.s=s,h=(d=n(d,m,b,v,i)).c,p=d.r,l=d.e),g=h[c=l+b+1],f=i/2,p=p||c<0||null!=h[c+1],p=v<4?(null!=g||p)&&(0==v||v==(d.s<0?3:2)):g>f||g==f&&(4==v||p||6==v&&1&h[c-1]||v==(d.s<0?8:7)),c<1||!h[0])r=p?O(u.charAt(1),-b,u.charAt(0)):u.charAt(0);else{if(h.length=c,p)for(--i;++h[--c]>i;)h[c]=0,c||(++l,h=[1].concat(h));for(f=h.length;!h[--f];);for(g=0,r="";g<=f;r+=u.charAt(h[g++]));r=O(r,l,u.charAt(0))}return r}}(),n=function(){function e(e,t,n){var r,o,i,s,a=0,u=e.length,c=t%h,l=t/h|0;for(e=e.slice();u--;)a=((o=c*(i=e[u]%h)+(r=l*i+(s=e[u]/h|0)*c)%h*h+a)/n|0)+(r/h|0)+l*s,e[u]=o%n;return a&&(e=[a].concat(e)),e}function t(e,t,n,r){var o,i;if(n!=r)i=n>r?1:-1;else for(o=i=0;o<n;o++)if(e[o]!=t[o]){i=e[o]>t[o]?1:-1;break}return i}function n(e,t,n,r){for(var o=0;n--;)e[n]-=o,o=e[n]<t[n]?1:0,e[n]=o*r+e[n]-t[n];for(;!e[0]&&e.length>1;e.splice(0,1));}return function(r,o,i,s,u){var c,p,d,h,m,y,b,v,w,S,O,E,A,C,j,P,T,k=r.s==o.s?1:-1,_=r.c,N=o.c;if(!(_&&_[0]&&N&&N[0]))return new V(r.s&&o.s&&(_?!N||_[0]!=N[0]:N)?_&&0==_[0]||!N?0*k:k/0:NaN);for(w=(v=new V(k)).c=[],k=i+(p=r.e-o.e)+1,u||(u=l,p=g(r.e/f)-g(o.e/f),k=k/f|0),d=0;N[d]==(_[d]||0);d++);if(N[d]>(_[d]||0)&&p--,k<0)w.push(1),h=!0;else{for(C=_.length,P=N.length,d=0,k+=2,(m=a(u/(N[0]+1)))>1&&(N=e(N,m,u),_=e(_,m,u),P=N.length,C=_.length),A=P,O=(S=_.slice(0,P)).length;O<P;S[O++]=0);T=N.slice(),T=[0].concat(T),j=N[0],N[1]>=u/2&&j++;do{if(m=0,(c=t(N,S,P,O))<0){if(E=S[0],P!=O&&(E=E*u+(S[1]||0)),(m=a(E/j))>1)for(m>=u&&(m=u-1),b=(y=e(N,m,u)).length,O=S.length;1==t(y,S,b,O);)m--,n(y,P<b?T:N,b,u),b=y.length,c=1;else 0==m&&(c=m=1),b=(y=N.slice()).length;if(b<O&&(y=[0].concat(y)),n(S,y,O,u),O=S.length,-1==c)for(;t(N,S,P,O)<1;)m++,n(S,P<O?T:N,O,u),O=S.length}else 0===c&&(m++,S=[0]);w[d++]=m,S[0]?S[O++]=_[A]||0:(S=[_[A]],O=1)}while((A++<C||null!=S[0])&&k--);h=null!=S[0],w[0]||w.splice(0,1)}if(u==l){for(d=1,k=w[0];k>=10;k/=10,d++);W(v,i+(v.e=d+p*f-1)+1,s,h)}else v.e=p,v.r=+h;return v}}(),C=/^(-?)0([xbo])(?=\w[\w.]*$)/i,j=/^([^.]+)\.$/,P=/^\.([^.]+)$/,T=/^-?(Infinity|NaN)$/,k=/^\s*\+(?=[\w.])|^\s+|\s+$/g,o=function(e,t,n,r){var o,i=n?t:t.replace(k,"");if(T.test(i))e.s=isNaN(i)?null:i<0?-1:1;else{if(!n&&(i=i.replace(C,(function(e,t,n){return o="x"==(n=n.toLowerCase())?16:"b"==n?2:8,r&&r!=o?e:t})),r&&(o=r,i=i.replace(j,"$1").replace(P,"0.$1")),t!=i))return new V(i,o);if(V.DEBUG)throw Error(u+"Not a"+(r?" base "+r:"")+" number: "+t);e.s=null}e.c=e.e=null},_.absoluteValue=_.abs=function(){var e=new V(this);return e.s<0&&(e.s=1),e},_.comparedTo=function(e,t){return b(this,new V(e,t))},_.decimalPlaces=_.dp=function(e,t){var n,r,o,i=this;if(null!=e)return v(e,0,m),null==t?t=x:v(t,0,8),W(new V(i),e+i.e+1,t);if(!(n=i.c))return null;if(r=((o=n.length-1)-g(this.e/f))*f,o=n[o])for(;o%10==0;o/=10,r--);return r<0&&(r=0),r},_.dividedBy=_.div=function(e,t){return n(this,new V(e,t),R,x)},_.dividedToIntegerBy=_.idiv=function(e,t){return n(this,new V(e,t),0,1)},_.exponentiatedBy=_.pow=function(e,t){var n,r,o,i,c,l,p,d,h=this;if((e=new V(e)).c&&!e.isInteger())throw Error(u+"Exponent not an integer: "+$(e));if(null!=t&&(t=new V(t)),c=e.e>14,!h.c||!h.c[0]||1==h.c[0]&&!h.e&&1==h.c.length||!e.c||!e.c[0])return d=new V(Math.pow(+$(h),c?2-w(e):+$(e))),t?d.mod(t):d;if(l=e.s<0,t){if(t.c?!t.c[0]:!t.s)return new V(NaN);(r=!l&&h.isInteger()&&t.isInteger())&&(h=h.mod(t))}else{if(e.e>9&&(h.e>0||h.e<-1||(0==h.e?h.c[0]>1||c&&h.c[1]>=24e7:h.c[0]<8e13||c&&h.c[0]<=9999975e7)))return i=h.s<0&&w(e)?-0:0,h.e>-1&&(i=1/i),new V(l?1/i:i);F&&(i=s(F/f+2))}for(c?(n=new V(.5),l&&(e.s=1),p=w(e)):p=(o=Math.abs(+$(e)))%2,d=new V(N);;){if(p){if(!(d=d.times(h)).c)break;i?d.c.length>i&&(d.c.length=i):r&&(d=d.mod(t))}if(o){if(0===(o=a(o/2)))break;p=o%2}else if(W(e=e.times(n),e.e+1,1),e.e>14)p=w(e);else{if(0===(o=+$(e)))break;p=o%2}h=h.times(h),i?h.c&&h.c.length>i&&(h.c.length=i):r&&(h=h.mod(t))}return r?d:(l&&(d=N.div(d)),t?d.mod(t):i?W(d,F,x,undefined):d)},_.integerValue=function(e){var t=new V(this);return null==e?e=x:v(e,0,8),W(t,t.e+1,e)},_.isEqualTo=_.eq=function(e,t){return 0===b(this,new V(e,t))},_.isFinite=function(){return!!this.c},_.isGreaterThan=_.gt=function(e,t){return b(this,new V(e,t))>0},_.isGreaterThanOrEqualTo=_.gte=function(e,t){return 1===(t=b(this,new V(e,t)))||0===t},_.isInteger=function(){return!!this.c&&g(this.e/f)>this.c.length-2},_.isLessThan=_.lt=function(e,t){return b(this,new V(e,t))<0},_.isLessThanOrEqualTo=_.lte=function(e,t){return-1===(t=b(this,new V(e,t)))||0===t},_.isNaN=function(){return!this.s},_.isNegative=function(){return this.s<0},_.isPositive=function(){return this.s>0},_.isZero=function(){return!!this.c&&0==this.c[0]},_.minus=function(e,t){var n,r,o,i,s=this,a=s.s;if(t=(e=new V(e,t)).s,!a||!t)return new V(NaN);if(a!=t)return e.s=-t,s.plus(e);var u=s.e/f,c=e.e/f,p=s.c,d=e.c;if(!u||!c){if(!p||!d)return p?(e.s=-t,e):new V(d?s:NaN);if(!p[0]||!d[0])return d[0]?(e.s=-t,e):new V(p[0]?s:3==x?-0:0)}if(u=g(u),c=g(c),p=p.slice(),a=u-c){for((i=a<0)?(a=-a,o=p):(c=u,o=d),o.reverse(),t=a;t--;o.push(0));o.reverse()}else for(r=(i=(a=p.length)<(t=d.length))?a:t,a=t=0;t<r;t++)if(p[t]!=d[t]){i=p[t]<d[t];break}if(i&&(o=p,p=d,d=o,e.s=-e.s),(t=(r=d.length)-(n=p.length))>0)for(;t--;p[n++]=0);for(t=l-1;r>a;){if(p[--r]<d[r]){for(n=r;n&&!p[--n];p[n]=t);--p[n],p[r]+=l}p[r]-=d[r]}for(;0==p[0];p.splice(0,1),--c);return p[0]?z(e,p,c):(e.s=3==x?-1:1,e.c=[e.e=0],e)},_.modulo=_.mod=function(e,t){var r,o,i=this;return e=new V(e,t),!i.c||!e.s||e.c&&!e.c[0]?new V(NaN):!e.c||i.c&&!i.c[0]?new V(i):(9==I?(o=e.s,e.s=1,r=n(i,e,0,3),e.s=o,r.s*=o):r=n(i,e,0,I),(e=i.minus(r.times(e))).c[0]||1!=I||(e.s=i.s),e)},_.multipliedBy=_.times=function(e,t){var n,r,o,i,s,a,u,c,p,d,m,y,b,v,w,S=this,O=S.c,E=(e=new V(e,t)).c;if(!(O&&E&&O[0]&&E[0]))return!S.s||!e.s||O&&!O[0]&&!E||E&&!E[0]&&!O?e.c=e.e=e.s=null:(e.s*=S.s,O&&E?(e.c=[0],e.e=0):e.c=e.e=null),e;for(r=g(S.e/f)+g(e.e/f),e.s*=S.s,(u=O.length)<(d=E.length)&&(b=O,O=E,E=b,o=u,u=d,d=o),o=u+d,b=[];o--;b.push(0));for(v=l,w=h,o=d;--o>=0;){for(n=0,m=E[o]%w,y=E[o]/w|0,i=o+(s=u);i>o;)n=((c=m*(c=O[--s]%w)+(a=y*c+(p=O[s]/w|0)*m)%w*w+b[i]+n)/v|0)+(a/w|0)+y*p,b[i--]=c%v;b[i]=n}return n?++r:b.splice(0,1),z(e,b,r)},_.negated=function(){var e=new V(this);return e.s=-e.s||null,e},_.plus=function(e,t){var n,r=this,o=r.s;if(t=(e=new V(e,t)).s,!o||!t)return new V(NaN);if(o!=t)return e.s=-t,r.minus(e);var i=r.e/f,s=e.e/f,a=r.c,u=e.c;if(!i||!s){if(!a||!u)return new V(o/0);if(!a[0]||!u[0])return u[0]?e:new V(a[0]?r:0*o)}if(i=g(i),s=g(s),a=a.slice(),o=i-s){for(o>0?(s=i,n=u):(o=-o,n=a),n.reverse();o--;n.push(0));n.reverse()}for((o=a.length)-(t=u.length)<0&&(n=u,u=a,a=n,t=o),o=0;t;)o=(a[--t]=a[t]+u[t]+o)/l|0,a[t]=l===a[t]?0:a[t]%l;return o&&(a=[o].concat(a),++s),z(e,a,s)},_.precision=_.sd=function(e,t){var n,r,o,i=this;if(null!=e&&e!==!!e)return v(e,1,m),null==t?t=x:v(t,0,8),W(new V(i),e,t);if(!(n=i.c))return null;if(r=(o=n.length-1)*f+1,o=n[o]){for(;o%10==0;o/=10,r--);for(o=n[0];o>=10;o/=10,r++);}return e&&i.e+1>r&&(r=i.e+1),r},_.shiftedBy=function(e){return v(e,-9007199254740991,p),this.times("1e"+e)},_.squareRoot=_.sqrt=function(){var e,t,r,o,i,s=this,a=s.c,u=s.s,c=s.e,l=R+4,f=new V("0.5");if(1!==u||!a||!a[0])return new V(!u||u<0&&(!a||a[0])?NaN:a?s:1/0);if(0==(u=Math.sqrt(+$(s)))||u==1/0?(((t=y(a)).length+c)%2==0&&(t+="0"),u=Math.sqrt(+t),c=g((c+1)/2)-(c<0||c%2),r=new V(t=u==1/0?"5e"+c:(t=u.toExponential()).slice(0,t.indexOf("e")+1)+c)):r=new V(u+""),r.c[0])for((u=(c=r.e)+l)<3&&(u=0);;)if(i=r,r=f.times(i.plus(n(s,i,l,1))),y(i.c).slice(0,u)===(t=y(r.c)).slice(0,u)){if(r.e<c&&--u,"9999"!=(t=t.slice(u-3,u+1))&&(o||"4999"!=t)){+t&&(+t.slice(1)||"5"!=t.charAt(0))||(W(r,r.e+R+2,1),e=!r.times(r).eq(s));break}if(!o&&(W(i,i.e+R+2,0),i.times(i).eq(s))){r=i;break}l+=4,u+=4,o=1}return W(r,r.e+R+1,x,e)},_.toExponential=function(e,t){return null!=e&&(v(e,0,m),e++),K(this,e,t,1)},_.toFixed=function(e,t){return null!=e&&(v(e,0,m),e=e+this.e+1),K(this,e,t)},_.toFormat=function(e,t,n){var r,o=this;if(null==n)null!=e&&t&&"object"==typeof t?(n=t,t=null):e&&"object"==typeof e?(n=e,e=t=null):n=q;else if("object"!=typeof n)throw Error(u+"Argument not an object: "+n);if(r=o.toFixed(e,t),o.c){var i,s=r.split("."),a=+n.groupSize,c=+n.secondaryGroupSize,l=n.groupSeparator||"",f=s[0],p=s[1],d=o.s<0,h=d?f.slice(1):f,m=h.length;if(c&&(i=a,a=c,c=i,m-=i),a>0&&m>0){for(i=m%a||a,f=h.substr(0,i);i<m;i+=a)f+=l+h.substr(i,a);c>0&&(f+=l+h.slice(i)),d&&(f="-"+f)}r=p?f+(n.decimalSeparator||"")+((c=+n.fractionGroupSize)?p.replace(new RegExp("\\d{"+c+"}\\B","g"),"$&"+(n.fractionGroupSeparator||"")):p):f}return(n.prefix||"")+r+(n.suffix||"")},_.toFraction=function(e){var t,r,o,i,s,a,c,l,p,h,m,g,b=this,v=b.c;if(null!=e&&(!(c=new V(e)).isInteger()&&(c.c||1!==c.s)||c.lt(N)))throw Error(u+"Argument "+(c.isInteger()?"out of range: ":"not an integer: ")+$(c));if(!v)return new V(b);for(t=new V(N),p=r=new V(N),o=l=new V(N),g=y(v),s=t.e=g.length-b.e-1,t.c[0]=d[(a=s%f)<0?f+a:a],e=!e||c.comparedTo(t)>0?s>0?t:p:c,a=U,U=1/0,c=new V(g),l.c[0]=0;h=n(c,t,0,1),1!=(i=r.plus(h.times(o))).comparedTo(e);)r=o,o=i,p=l.plus(h.times(i=p)),l=i,t=c.minus(h.times(i=t)),c=i;return i=n(e.minus(r),o,0,1),l=l.plus(i.times(p)),r=r.plus(i.times(o)),l.s=p.s=b.s,m=n(p,o,s*=2,x).minus(b).abs().comparedTo(n(l,r,s,x).minus(b).abs())<1?[p,o]:[l,r],U=a,m},_.toNumber=function(){return+$(this)},_.toPrecision=function(e,t){return null!=e&&v(e,1,m),K(this,e,t,2)},_.toString=function(e){var t,n=this,o=n.s,i=n.e;return null===i?o?(t="Infinity",o<0&&(t="-"+t)):t="NaN":(null==e?t=i<=B||i>=M?S(y(n.c),i):O(y(n.c),i,"0"):10===e?t=O(y((n=W(new V(n),R+i+1,x)).c),n.e,"0"):(v(e,2,H.length,"Base"),t=r(O(y(n.c),i,"0"),10,e,o,!0)),o<0&&n.c[0]&&(t="-"+t)),t},_.valueOf=_.toJSON=function(){return $(this)},_._isBigNumber=!0,null!=t&&V.set(t),V}(),o.default=o.BigNumber=o,void 0===(r=function(){return o}.call(t,n,t,e))||(e.exports=r)}()},696:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ContactProperties=t.BulkContactManagement=void 0,function(e){!function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub"}(e.ManageContactsAction||(e.ManageContactsAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.UnSub="unsub",e.DuplicateOverride="duplicate-override",e.DuplicateNoOverride="duplicate-no-override"}(e.ImportListAction||(e.ImportListAction={})),function(e){e.AddForce="addforce",e.AddNoForce="addnoforce",e.Remove="remove",e.UnSub="unsub",e.ExcludeMarketing="excludemarketing",e.IncludeMarketing="includemarketing"}(e.ImportCSVMethod||(e.ImportCSVMethod={})),function(e){e.Upload="Upload",e.Completed="Completed",e.Abort="Abort"}(e.CSVImportStatus||(e.CSVImportStatus={})),function(e){e.Completed="Completed",e.InProgress="In Progress",e.Error="Error"}(e.JobStatus||(e.JobStatus={}))}(t.BulkContactManagement||(t.BulkContactManagement={})),function(e){!function(e){e.Str="str",e.Int="int",e.Float="float",e.Bool="bool",e.DateTime="datetime"}(e.DataType||(e.DataType={})),function(e){e.Static="static",e.Historic="historic"}(e.NameSpace||(e.NameSpace={}))}(t.ContactProperties||(t.ContactProperties={}))},750:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){return null===e}},842:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SendEmailV3_1=void 0,function(e){!function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackOpens||(e.TrackOpens={})),function(e){e.AccountDefault="account_default",e.Disabled="disabled",e.Enabled="enabled"}(e.TrackClicks||(e.TrackClicks={})),function(e){e.Success="success",e.Error="error"}(e.ResponseStatus||(e.ResponseStatus={}))}(t.SendEmailV3_1||(t.SendEmailV3_1={}))},865:function(e,t,n){"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)}var o=this&&this.__assign||function(){return o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},o.apply(this,arguments)},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var s=n(191),a=i(n(25)),u=i(n(251)),c=i(n(330)),l=function(){function e(e){if(!(0,s.isPureObject)(e))throw new Error('Argument "params" must be object');this.init(this.cloneParams(e))}return e.prototype.getPackageVersion=function(){return this.version},e.prototype.getAPIKey=function(){return this.apiKey},e.prototype.getAPISecret=function(){return this.apiSecret},e.prototype.getAPIToken=function(){return this.apiToken},e.prototype.getConfig=function(){return o({},this.config)},e.prototype.getOptions=function(){return o({},this.options)},e.prototype.get=function(e,t){return new u.default(this,a.default.Get,e,t)},e.prototype.post=function(e,t){return new u.default(this,a.default.Post,e,t)},e.prototype.put=function(e,t){return new u.default(this,a.default.Put,e,t)},e.prototype.delete=function(e,t){return new u.default(this,a.default.Delete,e,t)},e.prototype.init=function(t){if(!(0,s.isPureObject)(t))throw new Error('Argument "params" must be object');var n=t.apiToken,r=t.apiKey,o=t.apiSecret,i=t.options,a=t.config;return this.version=e.packageJSON.version,this.setConfig(null!=a?a:null),this.setOptions(null!=i?i:null),"apiToken"in t?this.tokenConnectStrategy(n):this.basicConnectStrategy(r,o)},e.prototype.cloneParams=function(e){if(!(0,s.isPureObject)(e))throw new Error('Argument "params" must be object');var t=o({},e);return e.config&&(t.config=o({},e.config)),e.options&&(t.options=o({},e.options),t.options.proxy&&(t.options.proxy=o({},t.options.proxy)),t.options.headers&&(t.options.headers=o({},t.options.headers))),t},e.prototype.setConfig=function(t){if("object"!==r(t))throw new Error('Argument "customConfig" must be object or null');var n=o({},e.config);return null!==t&&((0,s.setValueIfNotNil)(n,"host",t.host),(0,s.setValueIfNotNil)(n,"output",t.output),(0,s.setValueIfNotNil)(n,"version",t.version)),this.config=n,this},e.prototype.setOptions=function(e){if("object"!==r(e))throw new Error('Argument "options" must be object or null');return this.options=null!=e?e:{},this},e.prototype.tokenConnectStrategy=function(e){if(!e)throw new Error("Mailjet API_TOKEN is required");return this.apiToken=e,this},e.prototype.basicConnectStrategy=function(e,t){if(!e)throw new Error("Mailjet API_KEY is required");if(!t)throw new Error("Mailjet API_SECRET is required");return this.apiKey=e,this.apiSecret=t,this},e.apiConnect=function(t,n,r){return new e(o({apiKey:t,apiSecret:n},r))},e.smsConnect=function(t,n){return new e(o({apiToken:t},n))},e.config=Object.freeze({host:"api.mailjet.com",version:"v3",output:"json"}),e.packageJSON=Object.freeze(o({},c.default)),e}();t.default=l},948:function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Segmentation=void 0,function(e){!function(e){e.Used="used",e.UnUsed="unused",e.Deleted="deleted"}(e.SegmentStatus||(e.SegmentStatus={}))}(t.Segmentation||(t.Segmentation={}))}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var i=t[r]={exports:{}};return e[r].call(i.exports,i,i.exports,n),i.exports}return n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(81)}()}));
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFTRCxFQUFRQSxFQUFPQyxRQUFTdXBDLEdBR3BFeHBDLEVBQU9DLE9BQ2YsUUN0QkF1cEMsRUFBb0J4M0IsRUFBSSxXQUN2QixHQUEwQixpQkFBZkYsV0FBeUIsT0FBT0EsV0FDM0MsSUFDQyxPQUFPM0ssTUFBUSxJQUFJeWlDLFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU96OUIsR0FDUixHQUFzQixpQkFBWEMsT0FBcUIsT0FBT0EsTUFDeEMsQ0FDQSxDQVB1QixHQ0dFbzlCLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbm9kZV9tb2R1bGVzL2pzb24tYmlnaW50L2luZGV4LmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L0h0dHBNZXRob2RzLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc1B1cmVPYmplY3QudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9pbmRleC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL0NhbXBhaWduLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9pbmRleC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNOb25FbXB0eU9iamVjdC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3BhcnNlLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pbmRleC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1dlYmhvb2sudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3V0aWxzL2lzVW5kZWZpbmVkLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9yZXF1ZXN0L2luZGV4LnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU3RhdGlzdGljLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc1ZhbGlkSnNvbi50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL0NvbW1vbi50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvanNvbi1iaWdpbnQvbGliL3N0cmluZ2lmeS5qcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL01lc3NhZ2UudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZXR0aW5nLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU2VuZGVyQWRkcmVzc0FuZERvbWFpbi50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvYXhpb3MvZGlzdC9icm93c2VyL2F4aW9zLmNqcyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvc2V0VmFsdWVJZk5vdE5pbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9ub2RlX21vZHVsZXMvdXJsLWpvaW4vbGliL3VybC1qb2luLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi91dGlscy9pc05pbC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdHlwZXMvYXBpL1RlbXBsYXRlLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL25vZGVfbW9kdWxlcy9iaWdudW1iZXIuanMvYmlnbnVtYmVyLmpzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvQ29udGFjdC50cyIsIndlYnBhY2s6Ly9ub2RlLW1haWxqZXQvLi9saWIvdXRpbHMvaXNOdWxsLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi90eXBlcy9hcGkvU2VuZEVtYWlsLnRzIiwid2VicGFjazovL25vZGUtbWFpbGpldC8uL2xpYi9jbGllbnQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0Ly4vbGliL3R5cGVzL2FwaS9TZWdtZW50YXRpb24udHMiLCJ3ZWJwYWNrOi8vbm9kZS1tYWlsamV0L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL3J1bnRpbWUvZ2xvYmFsIiwid2VicGFjazovL25vZGUtbWFpbGpldC93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIGpzb25fc3RyaW5naWZ5ID0gcmVxdWlyZSgnLi9saWIvc3RyaW5naWZ5LmpzJykuc3RyaW5naWZ5O1xudmFyIGpzb25fcGFyc2UgICAgID0gcmVxdWlyZSgnLi9saWIvcGFyc2UuanMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG4gICAgcmV0dXJuICB7XG4gICAgICAgIHBhcnNlOiBqc29uX3BhcnNlKG9wdGlvbnMpLFxuICAgICAgICBzdHJpbmdpZnk6IGpzb25fc3RyaW5naWZ5XG4gICAgfVxufTtcbi8vY3JlYXRlIHRoZSBkZWZhdWx0IG1ldGhvZCBtZW1iZXJzIHdpdGggbm8gb3B0aW9ucyBhcHBsaWVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBqc29uX3BhcnNlKCk7XG5tb2R1bGUuZXhwb3J0cy5zdHJpbmdpZnkgPSBqc29uX3N0cmluZ2lmeTtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmVudW0gSHR0cE1ldGhvZHMge1xuICBHZXQgPSAnZ2V0JyxcbiAgUG9zdCA9ICdwb3N0JyxcbiAgUHV0ID0gJ3B1dCcsXG4gIERlbGV0ZSA9ICdkZWxldGUnXG59XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBNZXRob2RzO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG4vKmxpYiovXG4vKm90aGVyKi9cblxuZnVuY3Rpb24gaXNQdXJlT2JqZWN0KHZhbHVlOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgdmFsdWUgIT09IG51bGxcbiAgICAmJiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09PSBudWxsKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNQdXJlT2JqZWN0O1xuIiwiLy8gQ09NTU9OXG5leHBvcnQgeyBMaWJyYXJ5UmVzcG9uc2UsIExpYnJhcnlMb2NhbFJlc3BvbnNlIH0gZnJvbSAnLi9MaWJyYXJ5UmVzcG9uc2UnO1xuZXhwb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG4vLyBTRU5EXG5leHBvcnQge1xuICBTZW5kRW1haWxWMyxcbiAgU2VuZEVtYWlsVjNfMSxcbn0gZnJvbSAnLi9TZW5kRW1haWwnO1xuXG4vLyBBUElcbmV4cG9ydCB7IE1lc3NhZ2UgfSBmcm9tICcuL01lc3NhZ2UnO1xuZXhwb3J0IHtcbiAgQ29udGFjdCxcbiAgQ29udGFjdExpc3QsXG4gIEJ1bGtDb250YWN0TWFuYWdlbWVudCxcbiAgQ29udGFjdFByb3BlcnRpZXMsXG4gIENvbnRhY3RTdWJzY3JpcHRpb24sXG4gIENvbnRhY3RWZXJpZmljYXRpb24sXG59IGZyb20gJy4vQ29udGFjdCc7XG5leHBvcnQge1xuICBEcmFmdENhbXBhaWduLFxuICBTZW50Q2FtcGFpZ24sXG59IGZyb20gJy4vQ2FtcGFpZ24nO1xuZXhwb3J0IHsgU2VnbWVudGF0aW9uIH0gZnJvbSAnLi9TZWdtZW50YXRpb24nO1xuZXhwb3J0IHsgVGVtcGxhdGUgfSBmcm9tICcuL1RlbXBsYXRlJztcbmV4cG9ydCB7IFN0YXRpc3RpYyB9IGZyb20gJy4vU3RhdGlzdGljJztcbmV4cG9ydCB7IE1lc3NhZ2VFdmVudCB9IGZyb20gJy4vTWVzc2FnZUV2ZW50JztcbmV4cG9ydCB7IFdlYmhvb2sgfSBmcm9tICcuL1dlYmhvb2snO1xuZXhwb3J0IHsgUGFyc2UgfSBmcm9tICcuL1BhcnNlJztcbmV4cG9ydCB7XG4gIFNlbmRlcixcbiAgTWV0YXNlbmRlcixcbiAgRE5TLFxufSBmcm9tICcuL1NlbmRlckFkZHJlc3NBbmREb21haW4nO1xuZXhwb3J0IHtcbiAgQVBJS2V5Q29uZmlndXJhdGlvbixcbiAgQWNjb3VudFNldHRpbmcsXG59IGZyb20gJy4vU2V0dGluZyc7XG5cbi8vIFNNU1xuZXhwb3J0IHsgU2VuZE1lc3NhZ2UgfSBmcm9tICcuL1NlbmRNZXNzYWdlJztcbmV4cG9ydCB7IFNNU01lc3NhZ2UgfSBmcm9tICcuL1NNU01lc3NhZ2UnO1xuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIERyYWZ0Q2FtcGFpZ24ge1xuICBleHBvcnQgZW51bSBFZGl0TW9kZSB7XG4gICAgVG9vbDIgPSAndG9vbDInLFxuICAgIEhUTUwyID0gJ2h0bWwyJyxcbiAgICBNSk1MID0gJ21qbWwnXG4gIH1cblxuICBleHBvcnQgZW51bSBDYW1wYWlnbkRyYWZ0U3RhdHVzIHtcbiAgICBBWENhbmNlbGVkID0gLTMsXG4gICAgRGVsZXRlZCA9IC0yLFxuICAgIEFyY2hpdmVkID0gLTEsXG4gICAgRHJhZnQgPSAwLFxuICAgIFByb2dyYW1tZWQgPSAxLFxuICAgIFNlbnQgPSAyLFxuICAgIEFYVGVzdGVkID0gMyxcbiAgICBBWFNlbGVjdGVkID0gNFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25EcmFmdFNlbmRpbmdTdGF0dXMge1xuICAgIEFYQ2FuY2VsbGVkID0gJ0FYQ2FuY2VsbGVkJyxcbiAgICBEZWxldGVkID0gJ0RlbGV0ZWQnLFxuICAgIEFyY2hpdmVkID0gJ0FyY2hpdmVkJyxcbiAgICBEcmFmdCA9ICdEcmFmdCcsXG4gICAgUHJvZ3JhbW1lZCA9ICdQcm9ncmFtbWVkJyxcbiAgICBTZW50ID0gJ1NlbnQnLFxuICAgIEFYVGVzdGVkID0gJ0FYVGVzdGVkJyxcbiAgICBBWFNlbGVjdGVkID0gJ0FYU2VsZWN0ZWQnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnQ8QVhUZXN0aW5nID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFYRnJhY3Rpb246IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uTmFtZTogc3RyaW5nO1xuICAgIEFYVGVzdGluZzogQVhUZXN0aW5nO1xuICAgIEN1cnJlbnQ6IG51bWJlcjtcbiAgICBFZGl0TW9kZTogRWRpdE1vZGU7XG4gICAgSXNTdGFycmVkOiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRJbmNsdWRlZDogYm9vbGVhbjtcbiAgICBSZXBseUVtYWlsOiBzdHJpbmc7XG4gICAgU2VuZGVyTmFtZTogc3RyaW5nO1xuICAgIFRlbXBsYXRlSUQ6IG51bWJlcjtcbiAgICBUaXRsZTogc3RyaW5nO1xuICAgIENhbXBhaWduSUQ6IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RJRDogbnVtYmVyO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIERlbGl2ZXJlZEF0OiBzdHJpbmc7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgTW9kaWZpZWRBdDogc3RyaW5nO1xuICAgIFByZXNldDogc3RyaW5nO1xuICAgIFNlZ21lbnRhdGlvbklEOiBudW1iZXI7XG4gICAgU2VuZGVyOiBzdHJpbmc7XG4gICAgU2VuZGVyRW1haWw6IHN0cmluZztcbiAgICBTdGF0dXM6IENhbXBhaWduRHJhZnRTdGF0dXM7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuICAgIFVybDogc3RyaW5nO1xuICAgIFVzZWQ6IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50PEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEhlYWRlcnM6IEhlYWRlcnM7XG4gICAgJ0h0bWwtcGFydCc6IHN0cmluZztcbiAgICAnVGV4dC1wYXJ0Jzogc3RyaW5nO1xuICAgIE1KTUxDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduRHJhZnRTY2hlZHVsZSB7XG4gICAgRGF0ZTogc3RyaW5nO1xuICAgIFN0YXR1czogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3RpbmcgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgU3ViamVjdDogc3RyaW5nO1xuXG4gICAgQVhGcmFjdGlvbj86IG51bWJlcjtcbiAgICBBWEZyYWN0aW9uTmFtZT86IHN0cmluZztcbiAgICBBWFRlc3Rpbmc/OiBBWFRlc3Rpbmc7XG4gICAgQ3VycmVudD86IG51bWJlcjtcbiAgICBFZGl0TW9kZT86IEVkaXRNb2RlO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgSXNUZXh0UGFydEluY2x1ZGVkPzogYm9vbGVhbjtcbiAgICBSZXBseUVtYWlsPzogc3RyaW5nO1xuICAgIFNlbmRlck5hbWU/OiBzdHJpbmc7XG4gICAgVGVtcGxhdGVJRD86IG51bWJlcjtcbiAgICBUaXRsZT86IHN0cmluZztcbiAgICBDb250YWN0c0xpc3RJRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RBbHQ/OiBzdHJpbmc7XG4gICAgU2VnbWVudGF0aW9uSUQ/OiBudW1iZXI7XG4gICAgU2VnbWVudGF0aW9uQWx0Pzogc3RyaW5nO1xuICAgIFNlbmRlcj86IHN0cmluZztcbiAgICBTZW5kZXJFbWFpbD86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRCb2R5PEFYVGVzdGluZyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgT21pdDxQYXJ0aWFsPFBvc3RDYW1wYWlnbkRyYWZ0Qm9keTxBWFRlc3Rpbmc+PiwgJ0NvbnRhY3RzTGlzdEFsdCc+ICZcbiAge1xuICAgIFN0YXR1cz86IENhbXBhaWduRHJhZnRTdGF0dXNcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEFYVGVzdGluZz86IG51bWJlcjtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQXQ/OiBzdHJpbmc7XG4gICAgRWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgICBJc0FyY2hpdmVkPzogYm9vbGVhbjtcbiAgICBJc0NhbXBhaWduPzogYm9vbGVhbjtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzSGFuZGxlZD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNb2RpZmllZD86IGJvb2xlYW47XG4gICAgTmV3c0xldHRlclRlbXBsYXRlPzogbnVtYmVyO1xuICAgIFN0YXR1cz86IENhbXBhaWduRHJhZnRTdGF0dXM7XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICBUZW1wbGF0ZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudEJvZHk8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgUGFydGlhbDxDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudDxIZWFkZXJzPj5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keSA9IHtcbiAgICBEYXRlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVCb2R5ID0gUGFydGlhbDxQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlQm9keT5cblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFRlc3RCb2R5ID0ge1xuICAgIFJlY2lwaWVudHM6IFJlY2lwaWVudFtdXG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduRHJhZnRbXT47XG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q2FtcGFpZ25EcmFmdFNjaGVkdWxlW10+O1xuICB0eXBlIENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50PEhlYWRlcnM+Pj47XG4gIHR5cGUgQ2FtcGFpZ25EcmFmdFN0YXR1c1Jlc3BvbnNlID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8eyBTdGF0dXM6IENhbXBhaWduRHJhZnRTZW5kaW5nU3RhdHVzIH0+PjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduRHJhZnRSZXNwb25zZSA9IENhbXBhaWduRHJhZnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnbkRyYWZ0UmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0UmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2UgPSBDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnbkRyYWZ0U2NoZWR1bGVSZXNwb25zZSA9IENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnRTY2hlZHVsZVJlc3BvbnNlID0gQ2FtcGFpZ25EcmFmdFNjaGVkdWxlUmVzcG9uc2VcblxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzID0gQ29tbW9uLlVua25vd25SZWM+ID1cbiAgICBDYW1wYWlnbkRyYWZ0RGV0YWlsQ29udGVudFJlc3BvbnNlPEhlYWRlcnM+XG4gIGV4cG9ydCB0eXBlIEdldENhbXBhaWduRHJhZnREZXRhaWxDb250ZW50UmVzcG9uc2U8SGVhZGVycyA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ2FtcGFpZ25EcmFmdERldGFpbENvbnRlbnRSZXNwb25zZTxIZWFkZXJzPlxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDYW1wYWlnbkRyYWZ0U2VuZCA9IENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQb3N0Q2FtcGFpZ25EcmFmdFRlc3QgPSBDYW1wYWlnbkRyYWZ0U3RhdHVzUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25EcmFmdFN0YXR1cyA9IENhbXBhaWduRHJhZnRTdGF0dXNSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbnRDYW1wYWlnbiB7XG4gIGV4cG9ydCBlbnVtIENhbXBhaWduVHlwZSB7XG4gICAgVHJhbnNhY3Rpb25hbCA9IDEsXG4gICAgTWFya2V0aW5nID0gMixcbiAgICBVbmtub3duID0gMyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ2FtcGFpZ24ge1xuICAgIElEOiBudW1iZXI7XG4gICAgSXNEZWxldGVkOiBib29sZWFuO1xuICAgIElzU3RhcnJlZDogYm9vbGVhbjtcbiAgICBDYW1wYWlnblR5cGU6IENhbXBhaWduVHlwZTtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBDdXN0b21WYWx1ZTogc3RyaW5nO1xuICAgIEZpcnN0TWVzc2FnZUlEOiBudW1iZXI7XG4gICAgRnJvbUVtYWlsOiBzdHJpbmc7XG4gICAgRnJvbUlEOiBudW1iZXI7XG4gICAgRnJvbU5hbWU6IHN0cmluZztcbiAgICBIYXNIdG1sQ291bnQ6IG51bWJlcjtcbiAgICBIYXNUeHRDb3VudDogbnVtYmVyO1xuICAgIExpc3RJRDogbnVtYmVyO1xuICAgIE5ld3NMZXR0ZXJJRDogbnVtYmVyO1xuICAgIFNlZ21lbnRhdGlvbklEOiBudW1iZXI7XG4gICAgU2VuZEVuZEF0OiBzdHJpbmc7XG4gICAgU2VuZFN0YXJ0QXQ6IHN0cmluZztcbiAgICBTcGFtYXNzU2NvcmU6IG51bWJlcjtcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgV29ya2Zsb3dJRDogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFB1dENhbXBhaWduQm9keSA9IHtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnblF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3RJRD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogQ2FtcGFpZ25UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICAgIFdvcmtmbG93SUQ/OiBudW1iZXI7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ2FtcGFpZ25SZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDYW1wYWlnbltdPjtcblxuICBleHBvcnQgdHlwZSBQdXRDYW1wYWlnblJlc3BvbnNlID0gQ2FtcGFpZ25SZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDYW1wYWlnblJlc3BvbnNlID0gQ2FtcGFpZ25SZXNwb25zZVxufVxuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuLyp0eXBlcyovXG5pbXBvcnQgSHR0cE1ldGhvZHMgZnJvbSAnLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbi8qbGliKi9cbmltcG9ydCBSZXF1ZXN0IGZyb20gJy4vcmVxdWVzdC9pbmRleCc7XG5pbXBvcnQgQ2xpZW50IGZyb20gJy4vY2xpZW50L2luZGV4Jztcbi8qb3RoZXIqL1xuXG5jbGFzcyBNYWlsamV0IGV4dGVuZHMgQ2xpZW50IHtcbiAgc3RhdGljIFJlcXVlc3QgPSBSZXF1ZXN0O1xuICBzdGF0aWMgSHR0cE1ldGhvZHMgPSBIdHRwTWV0aG9kcztcbiAgc3RhdGljIENsaWVudCA9IENsaWVudDtcbn1cblxuZXhwb3J0ICogZnJvbSAnLi90eXBlcy9hcGknO1xuZXhwb3J0IHsgQ2xpZW50LCBSZXF1ZXN0LCBIdHRwTWV0aG9kcyB9O1xuZXhwb3J0IGRlZmF1bHQgTWFpbGpldDtcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzTm9uRW1wdHlPYmplY3QodmFsdWU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnXG4gICAgJiYgdmFsdWUgIT09IG51bGxcbiAgICAmJiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PT0gT2JqZWN0LnByb3RvdHlwZSlcbiAgICAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID4gMDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgaXNOb25FbXB0eU9iamVjdDtcbiIsInZhciBCaWdOdW1iZXIgPSBudWxsO1xuXG4vLyByZWdleHB4cyBleHRyYWN0ZWQgZnJvbVxuLy8gKGMpIEJTRC0zLUNsYXVzZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zhc3RpZnkvc2VjdXJlLWpzb24tcGFyc2UvZ3JhcGhzL2NvbnRyaWJ1dG9ycyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2hhcGlqcy9ib3VybmUvZ3JhcGhzL2NvbnRyaWJ1dG9yc1xuXG5jb25zdCBzdXNwZWN0UHJvdG9SeCA9IC8oPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpwfFxcXFx1MDA3MCkoPzpyfFxcXFx1MDA3MikoPzpvfFxcXFx1MDA2W0ZmXSkoPzp0fFxcXFx1MDA3NCkoPzpvfFxcXFx1MDA2W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkoPzpffFxcXFx1MDA1W0ZmXSkvO1xuY29uc3Qgc3VzcGVjdENvbnN0cnVjdG9yUnggPSAvKD86Y3xcXFxcdTAwNjMpKD86b3xcXFxcdTAwNltGZl0pKD86bnxcXFxcdTAwNltFZV0pKD86c3xcXFxcdTAwNzMpKD86dHxcXFxcdTAwNzQpKD86cnxcXFxcdTAwNzIpKD86dXxcXFxcdTAwNzUpKD86Y3xcXFxcdTAwNjMpKD86dHxcXFxcdTAwNzQpKD86b3xcXFxcdTAwNltGZl0pKD86cnxcXFxcdTAwNzIpLztcblxuLypcbiAgICBqc29uX3BhcnNlLmpzXG4gICAgMjAxMi0wNi0yMFxuXG4gICAgUHVibGljIERvbWFpbi5cblxuICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQgWU9VUiBPV04gUklTSy5cblxuICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEganNvbl9wYXJzZSBmdW5jdGlvbi5cbiAgICBEdXJpbmcgY3JlYXRlIHlvdSBjYW4gKG9wdGlvbmFsbHkpIHNwZWNpZnkgc29tZSBiZWhhdmlvdXJhbCBzd2l0Y2hlc1xuXG4gICAgICAgIHJlcXVpcmUoJ2pzb24tYmlnaW50Jykob3B0aW9ucylcblxuICAgICAgICAgICAgVGhlIG9wdGlvbmFsIG9wdGlvbnMgcGFyYW1ldGVyIGhvbGRzIHN3aXRjaGVzIHRoYXQgZHJpdmUgY2VydGFpblxuICAgICAgICAgICAgYXNwZWN0cyBvZiB0aGUgcGFyc2luZyBwcm9jZXNzOlxuICAgICAgICAgICAgKiBvcHRpb25zLnN0cmljdCA9IHRydWUgd2lsbCB3YXJuIGFib3V0IGR1cGxpY2F0ZS1rZXkgdXNhZ2UgaW4gdGhlIGpzb24uXG4gICAgICAgICAgICAgIFRoZSBkZWZhdWx0IChzdHJpY3QgPSBmYWxzZSkgd2lsbCBzaWxlbnRseSBpZ25vcmUgdGhvc2UgYW5kIG92ZXJ3cml0ZVxuICAgICAgICAgICAgICB2YWx1ZXMgZm9yIGtleXMgdGhhdCBhcmUgaW4gZHVwbGljYXRlIHVzZS5cblxuICAgIFRoZSByZXN1bHRpbmcgZnVuY3Rpb24gZm9sbG93cyB0aGlzIHNpZ25hdHVyZTpcbiAgICAgICAganNvbl9wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IGpzb25fcGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgVGhpcyBpcyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgb3JcbiAgICByZWRpc3RyaWJ1dGUuXG5cbiAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlmaWVkIGJlZm9yZSBkZXBsb3ltZW50LlxuICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2ZvcmQuY29tL2pzbWluLmh0bWxcblxuICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1FTFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPXG4gICAgTk9UIENPTlRST0wuXG4qL1xuXG4vKm1lbWJlcnMgXCJcIiwgXCJcXFwiXCIsIFwiXFwvXCIsIFwiXFxcXFwiLCBhdCwgYiwgY2FsbCwgY2hhckF0LCBmLCBmcm9tQ2hhckNvZGUsXG4gICAgaGFzT3duUHJvcGVydHksIG1lc3NhZ2UsIG4sIG5hbWUsIHByb3RvdHlwZSwgcHVzaCwgciwgdCwgdGV4dFxuKi9cblxudmFyIGpzb25fcGFyc2UgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gVGhpcyBpcyBhIGZ1bmN0aW9uIHRoYXQgY2FuIHBhcnNlIGEgSlNPTiB0ZXh0LCBwcm9kdWNpbmcgYSBKYXZhU2NyaXB0XG4gIC8vIGRhdGEgc3RydWN0dXJlLiBJdCBpcyBhIHNpbXBsZSwgcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2VyLiBJdCBkb2VzIG5vdCB1c2VcbiAgLy8gZXZhbCBvciByZWd1bGFyIGV4cHJlc3Npb25zLCBzbyBpdCBjYW4gYmUgdXNlZCBhcyBhIG1vZGVsIGZvciBpbXBsZW1lbnRpbmdcbiAgLy8gYSBKU09OIHBhcnNlciBpbiBvdGhlciBsYW5ndWFnZXMuXG5cbiAgLy8gV2UgYXJlIGRlZmluaW5nIHRoZSBmdW5jdGlvbiBpbnNpZGUgb2YgYW5vdGhlciBmdW5jdGlvbiB0byBhdm9pZCBjcmVhdGluZ1xuICAvLyBnbG9iYWwgdmFyaWFibGVzLlxuXG4gIC8vIERlZmF1bHQgb3B0aW9ucyBvbmUgY2FuIG92ZXJyaWRlIGJ5IHBhc3Npbmcgb3B0aW9ucyB0byB0aGUgcGFyc2UoKVxuICB2YXIgX29wdGlvbnMgPSB7XG4gICAgc3RyaWN0OiBmYWxzZSwgLy8gbm90IGJlaW5nIHN0cmljdCBtZWFucyBkbyBub3QgZ2VuZXJhdGUgc3ludGF4IGVycm9ycyBmb3IgXCJkdXBsaWNhdGUga2V5XCJcbiAgICBzdG9yZUFzU3RyaW5nOiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRoZSB2YWx1ZXMgc2hvdWxkIGJlIHN0b3JlZCBhcyBCaWdOdW1iZXIgKGRlZmF1bHQpIG9yIGEgc3RyaW5nXG4gICAgYWx3YXlzUGFyc2VBc0JpZzogZmFsc2UsIC8vIHRvZ2dsZXMgd2hldGhlciBhbGwgbnVtYmVycyBzaG91bGQgYmUgQmlnXG4gICAgdXNlTmF0aXZlQmlnSW50OiBmYWxzZSwgLy8gdG9nZ2xlcyB3aGV0aGVyIHRvIHVzZSBuYXRpdmUgQmlnSW50IGluc3RlYWQgb2YgYmlnbnVtYmVyLmpzXG4gICAgcHJvdG9BY3Rpb246ICdlcnJvcicsXG4gICAgY29uc3RydWN0b3JBY3Rpb246ICdlcnJvcicsXG4gIH07XG5cbiAgLy8gSWYgdGhlcmUgYXJlIG9wdGlvbnMsIHRoZW4gdXNlIHRoZW0gdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgX29wdGlvbnNcbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgaWYgKG9wdGlvbnMuc3RyaWN0ID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdHJpY3QgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5zdG9yZUFzU3RyaW5nID09PSB0cnVlKSB7XG4gICAgICBfb3B0aW9ucy5zdG9yZUFzU3RyaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgX29wdGlvbnMuYWx3YXlzUGFyc2VBc0JpZyA9XG4gICAgICBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgPT09IHRydWUgPyBvcHRpb25zLmFsd2F5c1BhcnNlQXNCaWcgOiBmYWxzZTtcbiAgICBfb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPVxuICAgICAgb3B0aW9ucy51c2VOYXRpdmVCaWdJbnQgPT09IHRydWUgPyBvcHRpb25zLnVzZU5hdGl2ZUJpZ0ludCA6IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdpZ25vcmUnIHx8XG4gICAgICAgIG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb24gPT09ICdwcmVzZXJ2ZSdcbiAgICAgICkge1xuICAgICAgICBfb3B0aW9ucy5jb25zdHJ1Y3RvckFjdGlvbiA9IG9wdGlvbnMuY29uc3RydWN0b3JBY3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYEluY29ycmVjdCB2YWx1ZSBmb3IgY29uc3RydWN0b3JBY3Rpb24gb3B0aW9uLCBtdXN0IGJlIFwiZXJyb3JcIiwgXCJpZ25vcmVcIiBvciB1bmRlZmluZWQgYnV0IHBhc3NlZCAke29wdGlvbnMuY29uc3RydWN0b3JBY3Rpb259YFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5wcm90b0FjdGlvbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmIChcbiAgICAgICAgb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2Vycm9yJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAnaWdub3JlJyB8fFxuICAgICAgICBvcHRpb25zLnByb3RvQWN0aW9uID09PSAncHJlc2VydmUnXG4gICAgICApIHtcbiAgICAgICAgX29wdGlvbnMucHJvdG9BY3Rpb24gPSBvcHRpb25zLnByb3RvQWN0aW9uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBJbmNvcnJlY3QgdmFsdWUgZm9yIHByb3RvQWN0aW9uIG9wdGlvbiwgbXVzdCBiZSBcImVycm9yXCIsIFwiaWdub3JlXCIgb3IgdW5kZWZpbmVkIGJ1dCBwYXNzZWQgJHtvcHRpb25zLnByb3RvQWN0aW9ufWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICdcIic6ICdcIicsXG4gICAgICAnXFxcXCc6ICdcXFxcJyxcbiAgICAgICcvJzogJy8nLFxuICAgICAgYjogJ1xcYicsXG4gICAgICBmOiAnXFxmJyxcbiAgICAgIG46ICdcXG4nLFxuICAgICAgcjogJ1xccicsXG4gICAgICB0OiAnXFx0JyxcbiAgICB9LFxuICAgIHRleHQsXG4gICAgZXJyb3IgPSBmdW5jdGlvbiAobSkge1xuICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cblxuICAgICAgdGhyb3cge1xuICAgICAgICBuYW1lOiAnU3ludGF4RXJyb3InLFxuICAgICAgICBtZXNzYWdlOiBtLFxuICAgICAgICBhdDogYXQsXG4gICAgICAgIHRleHQ6IHRleHQsXG4gICAgICB9O1xuICAgIH0sXG4gICAgbmV4dCA9IGZ1bmN0aW9uIChjKSB7XG4gICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cblxuICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgZXJyb3IoXCJFeHBlY3RlZCAnXCIgKyBjICsgXCInIGluc3RlYWQgb2YgJ1wiICsgY2ggKyBcIidcIik7XG4gICAgICB9XG5cbiAgICAgIC8vIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIuIFdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgY2hhcmFjdGVycyxcbiAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgICBjaCA9IHRleHQuY2hhckF0KGF0KTtcbiAgICAgIGF0ICs9IDE7XG4gICAgICByZXR1cm4gY2g7XG4gICAgfSxcbiAgICBudW1iZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIG51bWJlciB2YWx1ZS5cblxuICAgICAgdmFyIG51bWJlcixcbiAgICAgICAgc3RyaW5nID0gJyc7XG5cbiAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgIHN0cmluZyA9ICctJztcbiAgICAgICAgbmV4dCgnLScpO1xuICAgICAgfVxuICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICBzdHJpbmcgKz0gJy4nO1xuICAgICAgICB3aGlsZSAobmV4dCgpICYmIGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHtcbiAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIGlmIChjaCA9PT0gJy0nIHx8IGNoID09PSAnKycpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbnVtYmVyID0gK3N0cmluZztcbiAgICAgIGlmICghaXNGaW5pdGUobnVtYmVyKSkge1xuICAgICAgICBlcnJvcignQmFkIG51bWJlcicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKEJpZ051bWJlciA9PSBudWxsKSBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcbiAgICAgICAgLy9pZiAobnVtYmVyID4gOTAwNzE5OTI1NDc0MDk5MiB8fCBudW1iZXIgPCAtOTAwNzE5OTI1NDc0MDk5MilcbiAgICAgICAgLy8gQmlnbnVtYmVyIGhhcyBzdHJpY3RlciBjaGVjazogZXZlcnl0aGluZyB3aXRoIGxlbmd0aCA+IDE1IGRpZ2l0cyBkaXNhbGxvd2VkXG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMTUpXG4gICAgICAgICAgcmV0dXJuIF9vcHRpb25zLnN0b3JlQXNTdHJpbmdcbiAgICAgICAgICAgID8gc3RyaW5nXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQoc3RyaW5nKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKHN0cmluZyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByZXR1cm4gIV9vcHRpb25zLmFsd2F5c1BhcnNlQXNCaWdcbiAgICAgICAgICAgID8gbnVtYmVyXG4gICAgICAgICAgICA6IF9vcHRpb25zLnVzZU5hdGl2ZUJpZ0ludFxuICAgICAgICAgICAgPyBCaWdJbnQobnVtYmVyKVxuICAgICAgICAgICAgOiBuZXcgQmlnTnVtYmVyKG51bWJlcik7XG4gICAgICB9XG4gICAgfSxcbiAgICBzdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBQYXJzZSBhIHN0cmluZyB2YWx1ZS5cblxuICAgICAgdmFyIGhleCxcbiAgICAgICAgaSxcbiAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgIHVmZmZmO1xuXG4gICAgICAvLyBXaGVuIHBhcnNpbmcgZm9yIHN0cmluZyB2YWx1ZXMsIHdlIG11c3QgbG9vayBmb3IgXCIgYW5kIFxcIGNoYXJhY3RlcnMuXG5cbiAgICAgIGlmIChjaCA9PT0gJ1wiJykge1xuICAgICAgICB2YXIgc3RhcnRBdCA9IGF0O1xuICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICBpZiAoYXQgLSAxID4gc3RhcnRBdCkgc3RyaW5nICs9IHRleHQuc3Vic3RyaW5nKHN0YXJ0QXQsIGF0IC0gMSk7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2ggPT09ICdcXFxcJykge1xuICAgICAgICAgICAgaWYgKGF0IC0gMSA+IHN0YXJ0QXQpIHN0cmluZyArPSB0ZXh0LnN1YnN0cmluZyhzdGFydEF0LCBhdCAtIDEpO1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAndScpIHtcbiAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gcGFyc2VJbnQobmV4dCgpLCAxNik7XG4gICAgICAgICAgICAgICAgaWYgKCFpc0Zpbml0ZShoZXgpKSB7XG4gICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHVmZmZmKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVzY2FwZWVbY2hdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBzdHJpbmcgKz0gZXNjYXBlZVtjaF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0YXJ0QXQgPSBhdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgc3RyaW5nJyk7XG4gICAgfSxcbiAgICB3aGl0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFNraXAgd2hpdGVzcGFjZS5cblxuICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB3b3JkID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gdHJ1ZSwgZmFsc2UsIG9yIG51bGwuXG5cbiAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgbmV4dCgndCcpO1xuICAgICAgICAgIG5leHQoJ3InKTtcbiAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgbmV4dCgnYScpO1xuICAgICAgICAgIG5leHQoJ2wnKTtcbiAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgbmV4dCgnZScpO1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY2FzZSAnbic6XG4gICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgIG5leHQoJ3UnKTtcbiAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG4gICAgdmFsdWUsIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuICAgIGFycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gUGFyc2UgYW4gYXJyYXkgdmFsdWUuXG5cbiAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICBpZiAoY2ggPT09ICdbJykge1xuICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgIHdoaXRlKCk7XG4gICAgICAgIGlmIChjaCA9PT0gJ10nKSB7XG4gICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgIHJldHVybiBhcnJheTsgLy8gZW1wdHkgYXJyYXlcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgIG5leHQoJ10nKTtcbiAgICAgICAgICAgIHJldHVybiBhcnJheTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgYXJyYXknKTtcbiAgICB9LFxuICAgIG9iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgdmFyIGtleSxcbiAgICAgICAgb2JqZWN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgbmV4dCgneycpO1xuICAgICAgICB3aGl0ZSgpO1xuICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICByZXR1cm4gb2JqZWN0OyAvLyBlbXB0eSBvYmplY3RcbiAgICAgICAgfVxuICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICBrZXkgPSBzdHJpbmcoKTtcbiAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgIG5leHQoJzonKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBfb3B0aW9ucy5zdHJpY3QgPT09IHRydWUgJiZcbiAgICAgICAgICAgIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXJyb3IoJ0R1cGxpY2F0ZSBrZXkgXCInICsga2V5ICsgJ1wiJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1c3BlY3RQcm90b1J4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLnByb3RvQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIHByb3RvdHlwZSBwcm9wZXJ0eScpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChfb3B0aW9ucy5wcm90b0FjdGlvbiA9PT0gJ2lnbm9yZScpIHtcbiAgICAgICAgICAgICAgdmFsdWUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iamVjdFtrZXldID0gdmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHN1c3BlY3RDb25zdHJ1Y3RvclJ4LnRlc3Qoa2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdPYmplY3QgY29udGFpbnMgZm9yYmlkZGVuIGNvbnN0cnVjdG9yIHByb3BlcnR5Jyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKF9vcHRpb25zLmNvbnN0cnVjdG9yQWN0aW9uID09PSAnaWdub3JlJykge1xuICAgICAgICAgICAgICB2YWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmplY3Rba2V5XSA9IHZhbHVlKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dCgnLCcpO1xuICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVycm9yKCdCYWQgb2JqZWN0Jyk7XG4gICAgfTtcblxuICB2YWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBQYXJzZSBhIEpTT04gdmFsdWUuIEl0IGNvdWxkIGJlIGFuIG9iamVjdCwgYW4gYXJyYXksIGEgc3RyaW5nLCBhIG51bWJlcixcbiAgICAvLyBvciBhIHdvcmQuXG5cbiAgICB3aGl0ZSgpO1xuICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgIGNhc2UgJ3snOlxuICAgICAgICByZXR1cm4gb2JqZWN0KCk7XG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgICBjYXNlICdcIic6XG4gICAgICAgIHJldHVybiBzdHJpbmcoKTtcbiAgICAgIGNhc2UgJy0nOlxuICAgICAgICByZXR1cm4gbnVtYmVyKCk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZXR1cm4gdGhlIGpzb25fcGFyc2UgZnVuY3Rpb24uIEl0IHdpbGwgaGF2ZSBhY2Nlc3MgdG8gYWxsIG9mIHRoZSBhYm92ZVxuICAvLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxuICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgcmV2aXZlcikge1xuICAgIHZhciByZXN1bHQ7XG5cbiAgICB0ZXh0ID0gc291cmNlICsgJyc7XG4gICAgYXQgPSAwO1xuICAgIGNoID0gJyAnO1xuICAgIHJlc3VsdCA9IHZhbHVlKCk7XG4gICAgd2hpdGUoKTtcbiAgICBpZiAoY2gpIHtcbiAgICAgIGVycm9yKCdTeW50YXggZXJyb3InKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIG5ldyBzdHJ1Y3R1cmUsXG4gICAgLy8gcGFzc2luZyBlYWNoIG5hbWUvdmFsdWUgcGFpciB0byB0aGUgcmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGVcbiAgICAvLyB0cmFuc2Zvcm1hdGlvbiwgc3RhcnRpbmcgd2l0aCBhIHRlbXBvcmFyeSByb290IG9iamVjdCB0aGF0IGhvbGRzIHRoZSByZXN1bHRcbiAgICAvLyBpbiBhbiBlbXB0eSBrZXkuIElmIHRoZXJlIGlzIG5vdCBhIHJldml2ZXIgZnVuY3Rpb24sIHdlIHNpbXBseSByZXR1cm4gdGhlXG4gICAgLy8gcmVzdWx0LlxuXG4gICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nXG4gICAgICA/IChmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7XG4gICAgICAgICAgdmFyIGssXG4gICAgICAgICAgICB2LFxuICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspO1xuICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtrXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICAgICAgfSkoeyAnJzogcmVzdWx0IH0sICcnKVxuICAgICAgOiByZXN1bHQ7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGpzb25fcGFyc2U7XG4iLCJpbXBvcnQgaXNOaWwgZnJvbSAnLi9pc05pbCc7XG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbmltcG9ydCBpc1B1cmVPYmplY3QgZnJvbSAnLi9pc1B1cmVPYmplY3QnO1xuaW1wb3J0IHNldFZhbHVlSWZOb3ROaWwgZnJvbSAnLi9zZXRWYWx1ZUlmTm90TmlsJztcbmltcG9ydCBpc05vbkVtcHR5T2JqZWN0IGZyb20gJy4vaXNOb25FbXB0eU9iamVjdCc7XG5pbXBvcnQgaXNWYWxpZEpzb24gZnJvbSAnLi9pc1ZhbGlkSnNvbic7XG5cbmV4cG9ydCB7XG4gIGlzTmlsLFxuICBpc051bGwsXG4gIGlzVW5kZWZpbmVkLFxuICBpc1B1cmVPYmplY3QsXG4gIGlzTm9uRW1wdHlPYmplY3QsXG4gIHNldFZhbHVlSWZOb3ROaWwsXG4gIGlzVmFsaWRKc29uLFxufTtcbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBXZWJob29rIHtcbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBPcGVuID0gJ29wZW4nLFxuICAgIENsaWNrID0gJ2NsaWNrJyxcbiAgICBCb3VuY2UgPSAnYm91bmNlJyxcbiAgICBTcGFtID0gJ3NwYW0nLFxuICAgIEJsb2NrZWQgPSAnYmxvY2tlZCcsXG4gICAgVW5TdWIgPSAndW5zdWInLFxuICAgIFNlbnQgPSAnc2VudCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBFdmVudFR5cGVWYWx1ZSB7XG4gICAgQ2xpY2sgPSAxLFxuICAgIEJvdW5jZSA9IDIsXG4gICAgU3BhbSA9IDMsXG4gICAgQmxvY2tlZCA9IDQsXG4gICAgVW5zdWJzY3JpYmUgPSA1LFxuICAgIE9wZW4gPSA2LFxuICAgIFNlbnQgPSA3LFxuICB9XG5cbiAgZXhwb3J0IGVudW0gU3RhdHVzIHtcbiAgICBEZWFkID0gJ2RlYWQnLFxuICAgIEFsaXZlID0gJ2FsaXZlJ1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgVmVyc2lvbiA9IDEgfCAyO1xuXG4gIGV4cG9ydCBpbnRlcmZhY2UgRXZlbnRDYWxsYmFja1VybCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFdmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgICBJc0JhY2t1cDogYm9vbGVhbjtcbiAgICBTdGF0dXM6IFN0YXR1cztcbiAgICBBUElLZXlJRDogbnVtYmVyO1xuICAgIFZlcnNpb246IFZlcnNpb247XG4gICAgVXJsOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdEV2ZW50Q2FsbGJhY2tVcmxCb2R5ID0ge1xuICAgIFVybDogc3RyaW5nO1xuICAgIEV2ZW50VHlwZT86IEV2ZW50VHlwZTtcbiAgICBJc0JhY2t1cD86IGJvb2xlYW47XG4gICAgU3RhdHVzPzogU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0RXZlbnRDYWxsYmFja1VybEJvZHkgPSBQYXJ0aWFsPFBvc3RFdmVudENhbGxiYWNrVXJsQm9keT5cblxuICBleHBvcnQgdHlwZSBHZXRFdmVudENhbGxiYWNrVXJsUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBCYWNrdXA/OiBib29sZWFuO1xuICAgIEV2ZW50VHlwZT86IEV2ZW50VHlwZVZhbHVlO1xuICAgIFN0YXR1cz86IHN0cmluZztcbiAgICBWZXJzaW9uPzogVmVyc2lvbjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSB7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBUb3RhbDogbnVtYmVyO1xuICAgIERhdGE6IEV2ZW50Q2FsbGJhY2tVcmxbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBQb3N0RXZlbnRDYWxsYmFja1VybFJlc3BvbnNlID0gRXZlbnRDYWxsYmFja1VybFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZSA9IEV2ZW50Q2FsbGJhY2tVcmxSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRFdmVudENhbGxiYWNrVXJsUmVzcG9uc2UgPSBFdmVudENhbGxiYWNrVXJsUmVzcG9uc2Vcbn1cbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbi8qdXRpbHMqL1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzVW5kZWZpbmVkO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbmltcG9ydCB1cmxKb2luIGZyb20gJ3VybC1qb2luJztcbmltcG9ydCBKU09OQmlnSW50IGZyb20gJ2pzb24tYmlnaW50JztcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yIH0gZnJvbSAnYXhpb3MnO1xuLyp1dGlscyovXG5pbXBvcnQgeyBpc05vbkVtcHR5T2JqZWN0LCBpc051bGwsIGlzUHVyZU9iamVjdCwgaXNWYWxpZEpzb24sIHNldFZhbHVlSWZOb3ROaWwgfSBmcm9tICcuLi91dGlscy9pbmRleCc7XG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBMaWJyYXJ5UmVzcG9uc2UsIExpYnJhcnlMb2NhbFJlc3BvbnNlIH0gZnJvbSAnLi4vdHlwZXMvYXBpJztcbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuL0h0dHBNZXRob2RzJztcbmltcG9ydCB7XG4gIFJlcXVlc3RDb25maWcsXG4gIFJlcXVlc3REYXRhLFxuICBSZXF1ZXN0UGFyYW1zLFxuICBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcsXG4gIFJlcXVlc3RBeGlvc0NvbmZpZyxcbiAgU3ViUGF0aCxcbn0gZnJvbSAnLi9SZXF1ZXN0Jztcbi8qbGliKi9cbmltcG9ydCBDbGllbnQgZnJvbSAnLi4vY2xpZW50Jztcbi8qb3RoZXIqL1xuXG50eXBlIFVua25vd25SZWMgPSBUT2JqZWN0LlVua25vd25SZWNcblxuY29uc3QgSlNPTmIgPSBKU09OQmlnSW50KHsgc3RvcmVBc1N0cmluZzogdHJ1ZSB9KTtcblxuY2xhc3MgUmVxdWVzdCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xpZW50OiBDbGllbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgbWV0aG9kOiBIdHRwTWV0aG9kcztcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFBhcnRpYWw8UmVxdWVzdENvbmZpZz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IHN0cmluZztcblxuICBwcml2YXRlIHVybDogc3RyaW5nO1xuICBwcml2YXRlIHN1YlBhdGg6IFN1YlBhdGg7XG4gIHByaXZhdGUgYWN0aW9uUGF0aDogc3RyaW5nIHwgbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBjbGllbnQ6IENsaWVudCxcbiAgICBtZXRob2Q6IEh0dHBNZXRob2RzLFxuICAgIHJlc291cmNlOiBzdHJpbmcsXG4gICAgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnLFxuICApIHtcbiAgICBpZiAoIShjbGllbnQgaW5zdGFuY2VvZiBDbGllbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiY2xpZW50XCIgbXVzdCBiZSBpbnN0YW5jZSBvZiBDbGllbnQnKTtcbiAgICB9XG5cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoSHR0cE1ldGhvZHMpLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJtZXRob2RcIiBtdXN0IGJlIG9uZSBvZiBzdXBwb3J0ZWQgbWV0aG9kczogZ2V0LCBwb3N0LCBwdXQsIGRlbGV0ZScpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcmVzb3VyY2UgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicmVzb3VyY2VcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2Q7XG4gICAgdGhpcy51cmwgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMucmVzb3VyY2UgPSByZXNvdXJjZS50b0xvd2VyQ2FzZSgpO1xuICAgIHRoaXMuc3ViUGF0aCA9IHRoaXMuYnVpbGRTdWJQYXRoKCk7XG4gICAgdGhpcy5hY3Rpb25QYXRoID0gbnVsbDtcblxuICAgIHRoaXMuY29uZmlnID0geyAuLi5jb25maWcgfTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRVc2VyQWdlbnQoKSB7XG4gICAgcmV0dXJuIGBtYWlsamV0LWFwaS12My1ub2RlanMvJHt0aGlzLmNsaWVudC5nZXRQYWNrYWdlVmVyc2lvbigpfWA7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q3JlZGVudGlhbHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwaVRva2VuOiB0aGlzLmNsaWVudC5nZXRBUElUb2tlbigpLFxuICAgICAgYXBpS2V5OiB0aGlzLmNsaWVudC5nZXRBUElLZXkoKSxcbiAgICAgIGFwaVNlY3JldDogdGhpcy5jbGllbnQuZ2V0QVBJU2VjcmV0KCksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29udGVudFR5cGUodXJsOiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ1cmxcIiBtdXN0IGJlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmwuaW5kZXhPZigndGV4dDpwbGFpbicpID4gLTFcbiAgICAgID8gJ3RleHQvcGxhaW4nXG4gICAgICA6ICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UmVxdWVzdEJvZHkoZGF0YTogUmVxdWVzdERhdGEpIHtcbiAgICByZXR1cm4gW1xuICAgICAgSHR0cE1ldGhvZHMuUHV0LFxuICAgICAgSHR0cE1ldGhvZHMuUG9zdCxcbiAgICAgIEh0dHBNZXRob2RzLkRlbGV0ZSxcbiAgICBdLmluY2x1ZGVzKHRoaXMubWV0aG9kKSA/IGRhdGEgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRnVsbFVybCgpIHtcbiAgICBjb25zdCBjbGllbnRDb25maWcgPSB0aGlzLmNsaWVudC5nZXRDb25maWcoKTtcblxuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNvbmZpZy5ob3N0ID8/IGNsaWVudENvbmZpZy5ob3N0O1xuICAgIGNvbnN0IHZlcnNpb24gPSB0aGlzLmNvbmZpZy52ZXJzaW9uID8/IGNsaWVudENvbmZpZy52ZXJzaW9uO1xuXG4gICAgcmV0dXJuIHVybEpvaW4oUmVxdWVzdC5wcm90b2NvbCwgaG9zdCwgdmVyc2lvbiwgdGhpcy5zdWJQYXRoLCB0aGlzLnVybCk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3ViUGF0aCgpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjb25zdCBpc0NvbnRhY3RMaXN0V2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdjb250YWN0c2xpc3QnICYmIHRoaXMuYWN0aW9uUGF0aCA9PT0gJ2NzdmRhdGEvdGV4dDpwbGFpbic7XG4gICAgICBjb25zdCBpc0JhdGNoSm9iV2l0aENTViA9IHRoaXMucmVzb3VyY2UgPT09ICdiYXRjaGpvYicgJiYgdGhpcy5hY3Rpb25QYXRoID09PSAnY3N2ZXJyb3IvdGV4dDpjc3YnO1xuXG4gICAgICByZXR1cm4gKGlzQ29udGFjdExpc3RXaXRoQ1NWIHx8IGlzQmF0Y2hKb2JXaXRoQ1NWKSA/ICdEQVRBJyA6IHRoaXMuc3ViUGF0aDtcbiAgICB9XG4gICAgY29uc3QgaXNTZW5kUmVzb3VyY2UgPSB0aGlzLnJlc291cmNlID09PSAnc2VuZCc7XG4gICAgY29uc3QgcmVzb3VyY2VDb250YWluU01TID0gdGhpcy5yZXNvdXJjZS5pbmRleE9mKCdzbXMnKSA+IC0xO1xuXG4gICAgcmV0dXJuICghaXNTZW5kUmVzb3VyY2UgJiYgIXJlc291cmNlQ29udGFpblNNUykgPyAnUkVTVCcgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgbWFrZVJlcXVlc3QodXJsOiBzdHJpbmcsIGRhdGE6IFJlcXVlc3REYXRhLCBwYXJhbXM6IFJlcXVlc3RQYXJhbXMpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYXhpb3MvYXhpb3MjcmVxdWVzdC1jb25maWdcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnOiBSZXF1ZXN0QXhpb3NDb25maWcgPSB7XG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICBkYXRhOiB0aGlzLmdldFJlcXVlc3RCb2R5KGRhdGEpLFxuICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2pzb24nLFxuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IHRoaXMuZ2V0VXNlckFnZW50KCksXG4gICAgICAgICdDb250ZW50LVR5cGUnOiB0aGlzLmdldENvbnRlbnRUeXBlKHVybCksXG4gICAgICB9LFxuICAgICAgdHJhbnNmb3JtUmVzcG9uc2UocmVzcG9uc2VEYXRhOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnN0IGRhdGFJc1N0cmluZyA9IHR5cGVvZiByZXNwb25zZURhdGEgPT09ICdzdHJpbmcnO1xuICAgICAgICBjb25zdCBpc0pTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgICAgIGlmIChyZXNwb25zZURhdGEgJiYgZGF0YUlzU3RyaW5nICYmIGlzSlNPTlJlcXVlc3RlZCkge1xuICAgICAgICAgIHJldHVybiBSZXF1ZXN0LnBhcnNlVG9KU09OYihyZXNwb25zZURhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlRGF0YTtcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIC8vIEJST1dTRVIgU0lERVxuICAgIGlmIChSZXF1ZXN0LmlzQnJvd3NlcigpKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ1gtVXNlci1BZ2VudCddID0gcmVxdWVzdENvbmZpZy5oZWFkZXJzWydVc2VyLUFnZW50J107XG4gICAgfVxuXG4gICAgLy8gQVVUSFxuICAgIGNvbnN0IGNyZWRlbnRpYWxzID0gdGhpcy5nZXRDcmVkZW50aWFscygpO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzLmFwaVRva2VuKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnNbJ0F1dGhvcml6YXRpb24nXSA9IGBCZWFyZXIgJHtjcmVkZW50aWFscy5hcGlUb2tlbn1gO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLmF1dGggPSB7XG4gICAgICAgIHVzZXJuYW1lOiBjcmVkZW50aWFscy5hcGlLZXkgYXMgc3RyaW5nLFxuICAgICAgICBwYXNzd29yZDogY3JlZGVudGlhbHMuYXBpU2VjcmV0IGFzIHN0cmluZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gT1BUSU9OU1xuICAgIGNvbnN0IGNsaWVudENvbmZpZyA9IHRoaXMuY2xpZW50LmdldENvbmZpZygpO1xuICAgIGNvbnN0IGNsaWVudE9wdGlvbnMgPSB0aGlzLmNsaWVudC5nZXRPcHRpb25zKCk7XG5cbiAgICAvLyAxLiBUaW1lb3V0XG4gICAgaWYgKGNsaWVudE9wdGlvbnMudGltZW91dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy50aW1lb3V0ID0gY2xpZW50T3B0aW9ucy50aW1lb3V0O1xuICAgIH1cblxuICAgIC8vIDIuIFByb3h5XG4gICAgaWYgKGNsaWVudE9wdGlvbnMucHJveHkpIHtcbiAgICAgIHJlcXVlc3RDb25maWcucHJveHkgPSBjbGllbnRPcHRpb25zLnByb3h5O1xuICAgIH1cblxuICAgIC8vIDMuIEhlYWRlcnNcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5oZWFkZXJzICYmIE9iamVjdC5rZXlzKGNsaWVudE9wdGlvbnMuaGVhZGVycykubGVuZ3RoID4gMCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzID0ge1xuICAgICAgICAuLi5yZXF1ZXN0Q29uZmlnLmhlYWRlcnMsXG4gICAgICAgIC4uLmNsaWVudE9wdGlvbnMuaGVhZGVycyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gNC4gT3V0cHV0XG4gICAgY29uc3Qgb3V0cHV0ID0gdGhpcy5jb25maWcub3V0cHV0ID8/IGNsaWVudENvbmZpZy5vdXRwdXQ7XG4gICAgaWYgKG91dHB1dCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5yZXNwb25zZVR5cGUgPSBvdXRwdXQ7XG4gICAgfVxuXG4gICAgLy8gTk9ERSBTSURFXG4gICAgLy8gNS4gTWF4IHJlcXVlc3QgY29udGVudCBzaXplXG4gICAgaWYgKGNsaWVudE9wdGlvbnMubWF4Qm9keUxlbmd0aCkge1xuICAgICAgcmVxdWVzdENvbmZpZy5tYXhCb2R5TGVuZ3RoID0gY2xpZW50T3B0aW9ucy5tYXhCb2R5TGVuZ3RoO1xuICAgIH1cblxuICAgIC8vIE5PREUgU0lERVxuICAgIC8vIDYuIE1heCByZXNwb25zZSBjb250ZW50IHNpemVcbiAgICBpZiAoY2xpZW50T3B0aW9ucy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICByZXF1ZXN0Q29uZmlnLm1heENvbnRlbnRMZW5ndGggPSBjbGllbnRPcHRpb25zLm1heENvbnRlbnRMZW5ndGg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF4aW9zKHJlcXVlc3RDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRCYXNlVVJMKGJhc2VVcmw6IHN0cmluZykge1xuICAgIHRoaXMudXJsID0gYmFzZVVybC50b0xvd2VyQ2FzZSgpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIGlkKHZhbHVlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBpZiAoIVsnc3RyaW5nJywgJ251bWJlciddLmluY2x1ZGVzKHR5cGVvZiB2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJ2YWx1ZVwiIG11c3QgYmUgc3RyaW5nIG9yIG51bWJlcicpO1xuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdmFsdWUudG9TdHJpbmcoKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHB1YmxpYyBhY3Rpb24obmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdhY3Rpb24gbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBhcmd1bWVudCBvZiB0eXBlIHN0cmluZycpO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uUGF0aCA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIHN3aXRjaCAodGhpcy5hY3Rpb25QYXRoKSB7XG4gICAgICBjYXNlICdjc3ZkYXRhJzoge1xuICAgICAgICB0aGlzLmFjdGlvblBhdGggPSAnY3N2ZGF0YS90ZXh0OnBsYWluJztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdjc3ZlcnJvcic6IHtcbiAgICAgICAgdGhpcy5hY3Rpb25QYXRoID0gJ2NzdmVycm9yL3RleHQ6Y3N2JztcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXJsID0gdXJsSm9pbih0aGlzLnVybCwgdGhpcy5hY3Rpb25QYXRoKTtcbiAgICB0aGlzLnN1YlBhdGggPSB0aGlzLmJ1aWxkU3ViUGF0aCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcmVxdWVzdDxCb2R5IGV4dGVuZHMgUmVxdWVzdERhdGE+KFxuICAgIGRhdGE/OiBSZXF1ZXN0RGF0YSxcbiAgICBwYXJhbXM/OiBSZXF1ZXN0UGFyYW1zLFxuICAgIHBlcmZvcm1BUElDYWxsPzogdHJ1ZSxcbiAgKTogUHJvbWlzZTxMaWJyYXJ5UmVzcG9uc2U8Qm9keT4+XG5cbiAgcHVibGljIGFzeW5jIHJlcXVlc3Q8Qm9keSBleHRlbmRzIFJlcXVlc3REYXRhLCBQYXJhbXMgZXh0ZW5kcyBVbmtub3duUmVjPihcbiAgICBkYXRhPzogQm9keSxcbiAgICBwYXJhbXM/OiBQYXJhbXMsXG4gICAgcGVyZm9ybUFQSUNhbGw/OiBmYWxzZSxcbiAgKTogUHJvbWlzZTxMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+PlxuXG4gIHB1YmxpYyBhc3luYyByZXF1ZXN0PEJvZHkgZXh0ZW5kcyBSZXF1ZXN0RGF0YSwgUGFyYW1zIGV4dGVuZHMgVW5rbm93blJlYz4oXG4gICAgZGF0YTogUmVxdWVzdERhdGEgfCBCb2R5ID0ge30sXG4gICAgcGFyYW1zOiBSZXF1ZXN0UGFyYW1zIHwgUGFyYW1zID0ge30sXG4gICAgcGVyZm9ybUFQSUNhbGwgPSB0cnVlLFxuICApOiBQcm9taXNlPExpYnJhcnlSZXNwb25zZTxCb2R5PiB8IExpYnJhcnlMb2NhbFJlc3BvbnNlPEJvZHksIFBhcmFtcz4+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkRnVsbFVybCgpO1xuICAgIHRoaXMuc2V0QmFzZVVSTCh0aGlzLnJlc291cmNlKTtcblxuICAgIGlmICh0aGlzLmFjdGlvblBhdGgpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVBY3Rpb25EYXRhKHRoaXMuYWN0aW9uUGF0aCwgZGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKCFwZXJmb3JtQVBJQ2FsbCkge1xuICAgICAgY29uc3QgYm9keSA9IHRoaXMuZ2V0UmVxdWVzdEJvZHkoZGF0YSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHksXG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdXJsLFxuICAgICAgfSBhcyBMaWJyYXJ5TG9jYWxSZXNwb25zZTxCb2R5LCBQYXJhbXM+O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMubWFrZVJlcXVlc3QodXJsLCBkYXRhLCBwYXJhbXMpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgIGJvZHk6IHJlc3BvbnNlLmRhdGEsXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycjogdW5rbm93bikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IpIHtcbiAgICAgICAgY29uc3QgZXJyb3I6IGFueSA9IG5ldyBFcnJvcigpO1xuXG4gICAgICAgIGVycm9yLmNvZGUgPSBlcnIuY29kZTtcbiAgICAgICAgZXJyb3IuY29uZmlnID0gZXJyLmNvbmZpZztcblxuICAgICAgICBpZiAoZXJyLnJlc3BvbnNlKSB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGRhdGE6IGJvZHksXG4gICAgICAgICAgfSA9IGVyci5yZXNwb25zZTtcblxuICAgICAgICAgIGVycm9yLnJlc3BvbnNlID0gZXJyLnJlc3BvbnNlO1xuXG4gICAgICAgICAgZXJyb3Iuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gc3RhdHVzVGV4dDtcblxuICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGJvZHk/LkVycm9yTWVzc2FnZSA/PyBlcnIubWVzc2FnZTtcbiAgICAgICAgICBlcnJvci5vcmlnaW5hbE1lc3NhZ2UgPSBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgZXJyb3IubWVzc2FnZSA9IGBVbnN1Y2Nlc3NmdWw6IFN0YXR1cyBDb2RlOiBcIiR7ZXJyb3Iuc3RhdHVzQ29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyb3JNZXNzYWdlfVwiYDtcblxuICAgICAgICAgIGlmIChib2R5KSB7XG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzZW5kLWluLWJ1bGtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gYm9keS5NZXNzYWdlcz8uWzBdPy5FcnJvcnM/LlswXT8uRXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBmdWxsTWVzc2FnZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgZXJyb3IubWVzc2FnZSArPSBgO1xcbiR7ZnVsbE1lc3NhZ2V9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gdjMuMSBjYXNlXG4gICAgICAgICAgICAvLyBodHRwczovL2Rldi5tYWlsamV0LmNvbS9lbWFpbC9ndWlkZXMvc2VuZC1hcGktdjMxLyNzYW5kYm94LW1vZGVcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvck1lc3NhZ2UnLCBib2R5LkVycm9yTWVzc2FnZSk7XG4gICAgICAgICAgICBzZXRWYWx1ZUlmTm90TmlsKGVycm9yLCAnRXJyb3JDb2RlJywgYm9keS5FcnJvckNvZGUpO1xuICAgICAgICAgICAgc2V0VmFsdWVJZk5vdE5pbChlcnJvciwgJ0Vycm9ySWRlbnRpZmllcicsIGJvZHkuRXJyb3JJZGVudGlmaWVyKTtcbiAgICAgICAgICAgIHNldFZhbHVlSWZOb3ROaWwoZXJyb3IsICdFcnJvclJlbGF0ZWRUbycsIGJvZHkuRXJyb3JSZWxhdGVkVG8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvci5yZXNwb25zZSA9IG51bGw7XG5cbiAgICAgICAgICBlcnJvci5zdGF0dXNDb2RlID0gbnVsbDtcbiAgICAgICAgICBlcnJvci5zdGF0dXNUZXh0ID0gbnVsbDtcblxuICAgICAgICAgIGVycm9yLm9yaWdpbmFsTWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgVW5zdWNjZXNzZnVsOiBFcnJvciBDb2RlOiBcIiR7ZXJyb3IuY29kZX1cIiBNZXNzYWdlOiBcIiR7ZXJyLm1lc3NhZ2V9XCJgO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG5cbiAgICAgIHRocm93IGVycjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIHByb3RvY29sID0gJ2h0dHBzOi8vJyBhcyBjb25zdDtcblxuICBwdWJsaWMgc3RhdGljIHBhcnNlVG9KU09OYih0ZXh0OiBzdHJpbmcpIHtcbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwidGV4dFwiIG11c3QgYmUgc3RyaW5nJyk7XG4gICAgfVxuXG4gICAgbGV0IGJvZHk7XG4gICAgdHJ5IHtcbiAgICAgIGJvZHkgPSBKU09OYi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBib2R5ID0ge307XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvZHk7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGlzQnJvd3NlcigpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCc7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlQWN0aW9uRGF0YShhY3Rpb25QYXRoOiBzdHJpbmcsIGRhdGE6IFJlcXVlc3REYXRhIHwgQm9keSkge1xuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB7XG4gICAgICBtYW5hZ2Vjb250YWN0OiAoZGF0YTogUmVxdWVzdERhdGEgfCBCb2R5KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHsgLy8gb25seSBpZiBib2R5IGlzIG5vdCBKU09OLnN0cmluZ2lmaWVkIGJ5IHVzZXJcbiAgICAgICAgICBpZiAoIWlzTm9uRW1wdHlPYmplY3QoZGF0YSBhcyBVbmtub3duUmVjKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm1hbmFnZWNvbnRhY3RcIiBhY3Rpb24gZXhwZWN0cyByZXF1ZXN0IGJvZHkgdG8gYmUgbm90IGVtcHR5IG9iamVjdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWlzVmFsaWRKc29uKGRhdGEpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wibWFuYWdlY29udGFjdFwiIGFjdGlvbiBleHBlY3RzIHJlcXVlc3QgYm9keSB0byBiZSB2YWxpZCBKU09OIG9iamVjdCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJ1Byb3BlcnRpZXMnIGluIGRhdGEpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZGF0YS5Qcm9wZXJ0aWVzID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1wibWFuYWdlY29udGFjdFwiIGFjdGlvbiBleHBlY3RzIFByb3BlcnRpZXMgdmFsdWUgdG8gYmUgYW4gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGEuUHJvcGVydGllcyA9PT0gJ29iamVjdCcgJiYgIWlzTnVsbChkYXRhLlByb3BlcnRpZXMpICYmICFpc1ZhbGlkSnNvbigoZGF0YS5Qcm9wZXJ0aWVzKSkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdcIm1hbmFnZWNvbnRhY3RcIiBhY3Rpb24gZXhwZWN0cyBQcm9wZXJ0aWVzIHZhbHVlIHRvIGJlIHZhbGlkIEpTT04gb2JqZWN0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LFxuICAgIH07XG5cbiAgICBpZiAoYWN0aW9uUGF0aCBpbiB2YWxpZGF0b3JzKSB7XG4gICAgICB2YWxpZGF0b3JzW2FjdGlvblBhdGggYXMga2V5b2YgdHlwZW9mIHZhbGlkYXRvcnNdKGRhdGEpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBSZXF1ZXN0O1xuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuaW1wb3J0IHsgTWVzc2FnZSB9IGZyb20gJy4vTWVzc2FnZSc7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU3RhdGlzdGljIHtcbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0lEVHlwZSB7XG4gICAgU2VudENhbXBhaWduID0gJ0NhbXBhaWduJyxcbiAgICBBQlRlc3RpbmcgPSAnQVgnLFxuICAgIERyYWZ0ID0gJ05MJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0VkaXRNb2RlIHtcbiAgICBUb29sID0gJ3Rvb2wnLFxuICAgIEhUTUwgPSAnaHRtbCcsXG4gICAgVG9vbDIgPSAndG9vbDInLFxuICAgIEhUTUwyID0gJ2h0bWwyJyxcbiAgICBNSk1MID0gJ21qbWwnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gQ2FtcGFpZ25PdmVydmlld0VkaXRUeXBlIHtcbiAgICBGdWxsID0gJ2Z1bGwnLFxuICAgIFVua25vd24gPSAndW5rbm93bidcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIENvdW50ZXJTb3VyY2Uge1xuICAgIENhbXBhaWduID0gJ0NhbXBhaWduJyxcbiAgICBBUElLZXkgPSAnQVBJS2V5JyxcbiAgICBMaXN0ID0gJ0xpc3QnLFxuICAgIFNlbmRlciA9ICdTZW5kZXInXG4gIH1cblxuICBleHBvcnQgZW51bSBDb3VudGVyUmVzb2x1dGlvbiB7XG4gICAgSGlnaGVzdCA9ICdIaWdoZXN0JyxcbiAgICBIb3VyID0gJ0hvdXInLFxuICAgIERheSA9ICdEYXknLFxuICAgIExpZmV0aW1lID0gJ0xpZmV0aW1lJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ291bnRlclRpbWluZyB7XG4gICAgTWVzc2FnZSA9ICdNZXNzYWdlJyxcbiAgICBFdmVudCA9ICdFdmVudCdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEVtYWlsRXZlbnQge1xuICAgIE9wZW4gPSAnb3BlbicsXG4gICAgQ2xpY2sgPSAnY2xpY2snXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENhbXBhaWduT3ZlcnZpZXcge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgRWRpdE1vZGU6IENhbXBhaWduT3ZlcnZpZXdFZGl0TW9kZTtcbiAgICBFZGl0VHlwZTogQ2FtcGFpZ25PdmVydmlld0VkaXRUeXBlO1xuICAgIElEOiBudW1iZXI7XG4gICAgSURUeXBlOiBDYW1wYWlnbk92ZXJ2aWV3SURUeXBlO1xuICAgIE9wZW5lZENvdW50OiBudW1iZXI7XG4gICAgUHJvY2Vzc2VkQ291bnQ6IG51bWJlcjtcbiAgICBTZW5kVGltZVN0YXJ0OiBudW1iZXI7XG4gICAgU3RhcnJlZDogYm9vbGVhbjtcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVGl0bGU6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdFN0YXRpc3RpYyB7XG4gICAgQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgRGVmZXJyZWRDb3VudDogbnVtYmVyO1xuICAgIERlbGl2ZXJlZENvdW50OiBudW1iZXI7XG4gICAgSGFyZGJvdW5jZWRDb3VudDogbnVtYmVyO1xuICAgIExhc3RBY3Rpdml0eUF0OiBzdHJpbmc7XG4gICAgTWFya2V0aW5nQ29udGFjdHM6IG51bWJlcjtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByb2Nlc3NlZENvdW50OiBudW1iZXI7XG4gICAgUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBTb2Z0Ym91bmNlZENvdW50OiBudW1iZXI7XG4gICAgU3BhbUNvbXBsYWludENvdW50OiBudW1iZXI7XG4gICAgVW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBVc2VyTWFya2V0aW5nQ29udGFjdHM6IG51bWJlcjtcbiAgICBXb3JrRmxvd0V4aXRlZENvdW50OiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEdFT1N0YXRpc3RpYyB7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBDb3VudHJ5OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExpc3RSZWNpcGllbnRTdGF0aXN0aWM8RGF0YSA9IEFycmF5PHVua25vd24+PiB7XG4gICAgQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgQm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZENvdW50OiBudW1iZXI7XG4gICAgRGF0YTogRGF0YTtcbiAgICBEZWZlcnJlZENvdW50OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBIYXJkYm91bmNlZENvdW50OiBudW1iZXI7XG4gICAgTGFzdEFjdGl2aXR5QXQ6IHN0cmluZztcbiAgICBMaXN0UmVjaXBpZW50SUQ6IG51bWJlcjtcbiAgICBPcGVuZWRDb3VudDogbnVtYmVyO1xuICAgIFByZVF1ZXVlZENvdW50OiBudW1iZXI7XG4gICAgUHJvY2Vzc2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNvZnRib3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBTcGFtQ29tcGxhaW50Q291bnQ6IG51bWJlcjtcbiAgICBVbnN1YnNjcmliZWRDb3VudDogbnVtYmVyO1xuICAgIFdvcmtGbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgU3RhdENvdW50ZXIge1xuICAgIEFQSUtleUlEOiBudW1iZXI7XG4gICAgRXZlbnRDbGlja0RlbGF5OiBudW1iZXI7XG4gICAgRXZlbnRDbGlja2VkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudE9wZW5EZWxheTogbnVtYmVyO1xuICAgIEV2ZW50T3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFNwYW1Db3VudDogbnVtYmVyO1xuICAgIEV2ZW50VW5zdWJzY3JpYmVkQ291bnQ6IG51bWJlcjtcbiAgICBFdmVudFdvcmtmbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlQmxvY2tlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUNsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIE1lc3NhZ2VEZWZlcnJlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZUhhcmRCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlT3BlbmVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlUXVldWVkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlU2VudENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVNvZnRCb3VuY2VkQ291bnQ6IG51bWJlcjtcbiAgICBNZXNzYWdlU3BhbUNvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVVuc3Vic2NyaWJlZENvdW50OiBudW1iZXI7XG4gICAgTWVzc2FnZVdvcmtGbG93RXhpdGVkQ291bnQ6IG51bWJlcjtcbiAgICBTb3VyY2VJRDogbnVtYmVyO1xuICAgIFRpbWVzbGljZTogc3RyaW5nO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIExpbmtDbGlja1N0YXRpc3RpYyB7XG4gICAgQ2xpY2tlZEV2ZW50c0NvdW50OiBudW1iZXI7XG4gICAgQ2xpY2tlZE1lc3NhZ2VzQ291bnQ6IG51bWJlcjtcbiAgICBQb3NpdGlvbkluZGV4OiBudW1iZXI7XG4gICAgVVJMOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudEVTUFN0YXRpc3RpYyB7XG4gICAgQXR0ZW1wdGVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBDbGlja2VkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBEZWZlcnJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRGVsaXZlcmVkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBIYXJkQm91bmNlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgRVNQTmFtZT86IHN0cmluZztcbiAgICBPcGVuZWRNZXNzYWdlc0NvdW50PzogbnVtYmVyO1xuICAgIFNvZnRCb3VuY2VkTWVzc2FnZXNDb3VudD86IG51bWJlcjtcbiAgICBTcGFtUmVwb3J0c0NvdW50PzogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZE1lc3NhZ2VzQ291bnQ/OiBudW1iZXI7XG4gICAgT3BlblJhdGU/OiBudW1iZXI7XG4gICAgQ2xpY2tUaHJvdWdoUmF0ZT86IG51bWJlcjtcbiAgICBTb2Z0Qm91bmNlZFJhdGU/OiBudW1iZXI7XG4gICAgSGFyZEJvdW5jZWRSYXRlPzogbnVtYmVyO1xuICAgIFVuc3Vic2NyaWJlZFJhdGU/OiBudW1iZXI7XG4gICAgU3BhbVJlcG9ydHNSYXRlPzogbnVtYmVyO1xuICAgIERlZmVycmVkUmF0ZT86IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVG9wTGlua0NsaWNrZWQge1xuICAgIENsaWNrZWRDb3VudDogbnVtYmVyO1xuICAgIExpbmtJZDogbnVtYmVyO1xuICAgIFVybDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBVc2VyQWdlbnRTdGF0aXN0aWMge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgRGlzdGluY3RDb3VudDogbnVtYmVyO1xuICAgIFBsYXRmb3JtOiBzdHJpbmc7XG4gICAgVXNlckFnZW50OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25PdmVydmlld1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQWxsPzogYm9vbGVhbjtcbiAgICBBcmNoaXZlZD86IGJvb2xlYW47XG4gICAgRHJhZnRzPzogYm9vbGVhbjtcbiAgICBJRD86IG51bWJlcjtcbiAgICBJRFR5cGU/OiBDYW1wYWlnbk92ZXJ2aWV3SURUeXBlO1xuICAgIFByb2dyYW1tZWQ/OiBib29sZWFuO1xuICAgIFNlbnQ/OiBib29sZWFuO1xuICAgIFN0YXJyZWQ/OiBib29sZWFuO1xuICAgIFN1YmplY3Q/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQm91bmNlZD86IGJvb2xlYW47XG4gICAgQ2xpY2s/OiBib29sZWFuO1xuICAgIERlZmVycmVkPzogYm9vbGVhbjtcbiAgICBIYXJkYm91bmNlZD86IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4TGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgT3Blbj86IGJvb2xlYW47XG4gICAgUXVldWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTcGFtPzogYm9vbGVhbjtcbiAgICBTb2Z0Ym91bmNlZD86IGJvb2xlYW47XG4gICAgVW5zdWJzY3JpYmVkPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldEdFT1N0YXRpc3RpY3NRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBNZXNzYWdlLkZyb21UeXBlO1xuICAgIElzRGVsZXRlZD86IGJvb2xlYW47XG4gICAgSXNOZXdzbGV0dGVyVG9vbD86IGJvb2xlYW47XG4gICAgSXNTdGFycmVkPzogYm9vbGVhbjtcbiAgICBNZXNzYWdlU3RhdHVzPzogTWVzc2FnZS5NZXNzYWdlU3RhdHVzO1xuICAgIFBlcmlvZD86IENvbW1vbi5QZXJpb2Q7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRMaXN0UmVjaXBpZW50U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQm91bmNlZD86IGJvb2xlYW47XG4gICAgQ2xpY2s/OiBib29sZWFuO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gICAgTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4TGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWluTGFzdEFjdGl2aXR5QXQ/OiBzdHJpbmc7XG4gICAgTWF4VW5zdWJzY3JpYmVkQXQ/OiBzdHJpbmc7XG4gICAgTWluVW5zdWJzY3JpYmVkQXQ/OiBzdHJpbmc7XG4gICAgT3Blbj86IGJvb2xlYW47XG4gICAgUXVldWVkPzogYm9vbGVhbjtcbiAgICBTZW50PzogYm9vbGVhbjtcbiAgICBTaG93RXh0cmFEYXRhPzogYm9vbGVhbjtcbiAgICBTcGFtPzogYm9vbGVhbjtcbiAgICBUaW1lWm9uZT86IHN0cmluZztcbiAgICBVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0U3RhdENvdW50ZXJzUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5UaW1lc3RhbXBQZXJpb2Q+ICZcbiAgICBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmXG4gIHtcbiAgICBDb3VudGVyU291cmNlOiBDb3VudGVyU291cmNlO1xuICAgIENvdW50ZXJSZXNvbHV0aW9uOiBDb3VudGVyUmVzb2x1dGlvbjtcbiAgICBDb3VudGVyVGltaW5nOiBDb3VudGVyVGltaW5nO1xuICAgIFNvdXJjZUlEPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlua0NsaWNrU3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ2FtcGFpZ25JRDogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0UmVjaXBpZW50RVNQU3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gR2V0TGlua0NsaWNrU3RhdGlzdGljc1F1ZXJ5UGFyYW1zICZcbiAge1xuICAgIEVTUF9OYW1lPzogbnVtYmVyO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0VG9wTGlua0NsaWNrZWRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIEFjdHVhbENsaWNrcz86IGJvb2xlYW47XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0PzogbnVtYmVyO1xuICAgIENvbnRhY3RzTGlzdD86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZT86IG51bWJlcjtcbiAgICBQZXJpb2Q/OiBDb21tb24uUGVyaW9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0VXNlckFnZW50U3RhdGlzdGljc1F1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uVGltZXN0YW1wUGVyaW9kPiAmXG4gICAgUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJlxuICB7XG4gICAgQ2FtcGFpZ25JRD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tQ2FtcGFpZ24/OiBzdHJpbmc7XG4gICAgRXZlbnQ/OiBFbWFpbEV2ZW50O1xuICAgIEV4Y2x1ZGVQbGF0Zm9ybT86IHN0cmluZztcbiAgICBGcm9tPzogc3RyaW5nO1xuICAgIEZyb21Eb21haW4/OiBzdHJpbmc7XG4gICAgRnJvbUlEPzogbnVtYmVyO1xuICAgIEZyb21UeXBlPzogTWVzc2FnZS5Gcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgICBQbGF0Zm9ybT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0Q2FtcGFpZ25PdmVydmlld1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENhbXBhaWduT3ZlcnZpZXdbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0U3RhdGlzdGljW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldEdFT1N0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxHRU9TdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFN0YXRpc3RpY3NSZXNwb25zZTxEYXRhID0gQXJyYXk8dW5rbm93bj4+ID1cbiAgICBDb21tb24uUmVzcG9uc2U8QXJyYXk8TGlzdFJlY2lwaWVudFN0YXRpc3RpYzxEYXRhPj4+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFN0YXRDb3VudGVyc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFN0YXRDb3VudGVyW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldExpbmtDbGlja1N0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxMaW5rQ2xpY2tTdGF0aXN0aWNbXT47XG5cbiAgZXhwb3J0IHR5cGUgR2V0UmVjaXBpZW50RVNQU3RhdGlzdGljc1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFJlY2lwaWVudEVTUFN0YXRpc3RpY1tdPjtcblxuICBleHBvcnQgdHlwZSBHZXRUb3BMaW5rQ2xpY2tlZFJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPFRvcExpbmtDbGlja2VkW10+O1xuXG4gIGV4cG9ydCB0eXBlIEdldFVzZXJBZ2VudFN0YXRpc3RpY3NSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxVc2VyQWdlbnRTdGF0aXN0aWNbXT47XG59XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkSnNvbih2YWx1ZTogb2JqZWN0KTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBpc1ZhbGlkSnNvbjtcbiIsImV4cG9ydCBuYW1lc3BhY2UgQ29tbW9uIHtcbiAgZXhwb3J0IHR5cGUgVW5rbm93blJlYyA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG5cbiAgZXhwb3J0IGludGVyZmFjZSBQYWdpbmF0aW9uIHtcbiAgICBjb3VudE9ubHk6IGJvb2xlYW47XG5cbiAgICBMaW1pdDogbnVtYmVyO1xuICAgIE9mZnNldDogbnVtYmVyO1xuICAgIFNvcnQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVGltZXN0YW1wUGVyaW9kIHtcbiAgICBGcm9tVFM6IHN0cmluZyB8IG51bWJlcjtcbiAgICBUb1RTOiBzdHJpbmcgfCBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZTxFbnRpdHk+ID0ge1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgVG90YWw6IG51bWJlcjtcbiAgICBEYXRhOiBFbnRpdHk7XG4gIH1cblxuICBleHBvcnQgZW51bSBQZXJpb2Qge1xuICAgIERheSA9ICdEYXknLFxuICAgIFdlZWsgPSAnV2VlaycsXG4gICAgTW9udGggPSAnTW9udGgnLFxuICAgIFllYXIgPSAnWWVhcicsXG4gIH1cbn1cbiIsInZhciBCaWdOdW1iZXIgPSByZXF1aXJlKCdiaWdudW1iZXIuanMnKTtcblxuLypcbiAgICBqc29uMi5qc1xuICAgIDIwMTMtMDUtMjZcblxuICAgIFB1YmxpYyBEb21haW4uXG5cbiAgICBOTyBXQVJSQU5UWSBFWFBSRVNTRUQgT1IgSU1QTElFRC4gVVNFIEFUIFlPVVIgT1dOIFJJU0suXG5cbiAgICBTZWUgaHR0cDovL3d3dy5KU09OLm9yZy9qcy5odG1sXG5cblxuICAgIFRoaXMgY29kZSBzaG91bGQgYmUgbWluaWZpZWQgYmVmb3JlIGRlcGxveW1lbnQuXG4gICAgU2VlIGh0dHA6Ly9qYXZhc2NyaXB0LmNyb2NrZm9yZC5jb20vanNtaW4uaHRtbFxuXG4gICAgVVNFIFlPVVIgT1dOIENPUFkuIElUIElTIEVYVFJFTUVMWSBVTldJU0UgVE8gTE9BRCBDT0RFIEZST00gU0VSVkVSUyBZT1UgRE9cbiAgICBOT1QgQ09OVFJPTC5cblxuXG4gICAgVGhpcyBmaWxlIGNyZWF0ZXMgYSBnbG9iYWwgSlNPTiBvYmplY3QgY29udGFpbmluZyB0d28gbWV0aG9kczogc3RyaW5naWZ5XG4gICAgYW5kIHBhcnNlLlxuXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpXG4gICAgICAgICAgICB2YWx1ZSAgICAgICBhbnkgSmF2YVNjcmlwdCB2YWx1ZSwgdXN1YWxseSBhbiBvYmplY3Qgb3IgYXJyYXkuXG5cbiAgICAgICAgICAgIHJlcGxhY2VyICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGRldGVybWluZXMgaG93IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBzdHJpbmdpZmllZCBmb3Igb2JqZWN0cy4gSXQgY2FuIGJlIGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG5cbiAgICAgICAgICAgIHNwYWNlICAgICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IHNwZWNpZmllcyB0aGUgaW5kZW50YXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIG5lc3RlZCBzdHJ1Y3R1cmVzLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUgdGV4dCB3aWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBiZSBwYWNrZWQgd2l0aG91dCBleHRyYSB3aGl0ZXNwYWNlLiBJZiBpdCBpcyBhIG51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0IHdpbGwgc3BlY2lmeSB0aGUgbnVtYmVyIG9mIHNwYWNlcyB0byBpbmRlbnQgYXQgZWFjaFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWwuIElmIGl0IGlzIGEgc3RyaW5nIChzdWNoIGFzICdcXHQnIG9yICcmbmJzcDsnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIHVzZWQgdG8gaW5kZW50IGF0IGVhY2ggbGV2ZWwuXG5cbiAgICAgICAgICAgIFRoaXMgbWV0aG9kIHByb2R1Y2VzIGEgSlNPTiB0ZXh0IGZyb20gYSBKYXZhU2NyaXB0IHZhbHVlLlxuXG4gICAgICAgICAgICBXaGVuIGFuIG9iamVjdCB2YWx1ZSBpcyBmb3VuZCwgaWYgdGhlIG9iamVjdCBjb250YWlucyBhIHRvSlNPTlxuICAgICAgICAgICAgbWV0aG9kLCBpdHMgdG9KU09OIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIHJlc3VsdCB3aWxsIGJlXG4gICAgICAgICAgICBzdHJpbmdpZmllZC4gQSB0b0pTT04gbWV0aG9kIGRvZXMgbm90IHNlcmlhbGl6ZTogaXQgcmV0dXJucyB0aGVcbiAgICAgICAgICAgIHZhbHVlIHJlcHJlc2VudGVkIGJ5IHRoZSBuYW1lL3ZhbHVlIHBhaXIgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZCxcbiAgICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiBub3RoaW5nIHNob3VsZCBiZSBzZXJpYWxpemVkLiBUaGUgdG9KU09OIG1ldGhvZFxuICAgICAgICAgICAgd2lsbCBiZSBwYXNzZWQgdGhlIGtleSBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbHVlLCBhbmQgdGhpcyB3aWxsIGJlXG4gICAgICAgICAgICBib3VuZCB0byB0aGUgdmFsdWVcblxuICAgICAgICAgICAgRm9yIGV4YW1wbGUsIHRoaXMgd291bGQgc2VyaWFsaXplIERhdGVzIGFzIElTTyBzdHJpbmdzLlxuXG4gICAgICAgICAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBmKG4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVVENGdWxsWWVhcigpICAgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNb250aCgpICsgMSkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENEYXRlKCkpICAgICAgKyAnVCcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENIb3VycygpKSAgICAgKyAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNaW51dGVzKCkpICAgKyAnOicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWic7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIHJlcGxhY2VyIG1ldGhvZC4gSXQgd2lsbCBiZSBwYXNzZWQgdGhlXG4gICAgICAgICAgICBrZXkgYW5kIHZhbHVlIG9mIGVhY2ggbWVtYmVyLCB3aXRoIHRoaXMgYm91bmQgdG8gdGhlIGNvbnRhaW5pbmdcbiAgICAgICAgICAgIG9iamVjdC4gVGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB5b3VyIG1ldGhvZCB3aWxsIGJlXG4gICAgICAgICAgICBzZXJpYWxpemVkLiBJZiB5b3VyIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZCwgdGhlbiB0aGUgbWVtYmVyIHdpbGxcbiAgICAgICAgICAgIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNlcmlhbGl6YXRpb24uXG5cbiAgICAgICAgICAgIElmIHRoZSByZXBsYWNlciBwYXJhbWV0ZXIgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncywgdGhlbiBpdCB3aWxsIGJlXG4gICAgICAgICAgICB1c2VkIHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzZXJpYWxpemVkLiBJdCBmaWx0ZXJzIHRoZSByZXN1bHRzXG4gICAgICAgICAgICBzdWNoIHRoYXQgb25seSBtZW1iZXJzIHdpdGgga2V5cyBsaXN0ZWQgaW4gdGhlIHJlcGxhY2VyIGFycmF5IGFyZVxuICAgICAgICAgICAgc3RyaW5naWZpZWQuXG5cbiAgICAgICAgICAgIFZhbHVlcyB0aGF0IGRvIG5vdCBoYXZlIEpTT04gcmVwcmVzZW50YXRpb25zLCBzdWNoIGFzIHVuZGVmaW5lZCBvclxuICAgICAgICAgICAgZnVuY3Rpb25zLCB3aWxsIG5vdCBiZSBzZXJpYWxpemVkLiBTdWNoIHZhbHVlcyBpbiBvYmplY3RzIHdpbGwgYmVcbiAgICAgICAgICAgIGRyb3BwZWQ7IGluIGFycmF5cyB0aGV5IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBudWxsLiBZb3UgY2FuIHVzZVxuICAgICAgICAgICAgYSByZXBsYWNlciBmdW5jdGlvbiB0byByZXBsYWNlIHRob3NlIHdpdGggSlNPTiB2YWx1ZXMuXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh1bmRlZmluZWQpIHJldHVybnMgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgc3BhY2UgcGFyYW1ldGVyIHByb2R1Y2VzIGEgc3RyaW5naWZpY2F0aW9uIG9mIHRoZVxuICAgICAgICAgICAgdmFsdWUgdGhhdCBpcyBmaWxsZWQgd2l0aCBsaW5lIGJyZWFrcyBhbmQgaW5kZW50YXRpb24gdG8gbWFrZSBpdFxuICAgICAgICAgICAgZWFzaWVyIHRvIHJlYWQuXG5cbiAgICAgICAgICAgIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBub24tZW1wdHkgc3RyaW5nLCB0aGVuIHRoYXQgc3RyaW5nIHdpbGxcbiAgICAgICAgICAgIGJlIHVzZWQgZm9yIGluZGVudGF0aW9uLiBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCB0aGVuXG4gICAgICAgICAgICB0aGUgaW5kZW50YXRpb24gd2lsbCBiZSB0aGF0IG1hbnkgc3BhY2VzLlxuXG4gICAgICAgICAgICBFeGFtcGxlOlxuXG4gICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXCJlXCIse1wicGx1cmlidXNcIjpcInVudW1cIn1dJ1xuXG5cbiAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmluZ2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dLCBudWxsLCAnXFx0Jyk7XG4gICAgICAgICAgICAvLyB0ZXh0IGlzICdbXFxuXFx0XCJlXCIsXFxuXFx0e1xcblxcdFxcdFwicGx1cmlidXNcIjogXCJ1bnVtXCJcXG5cXHR9XFxuXSdcblxuICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFtuZXcgRGF0ZSgpXSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trZXldIGluc3RhbmNlb2YgRGF0ZSA/XG4gICAgICAgICAgICAgICAgICAgICdEYXRlKCcgKyB0aGlzW2tleV0gKyAnKScgOiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gdGV4dCBpcyAnW1wiRGF0ZSgtLS1jdXJyZW50IHRpbWUtLS0pXCJdJ1xuXG5cbiAgICAgICAgSlNPTi5wYXJzZSh0ZXh0LCByZXZpdmVyKVxuICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEgSlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LlxuICAgICAgICAgICAgSXQgY2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLlxuXG4gICAgICAgICAgICBUaGUgb3B0aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5kXG4gICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2YgdGhlIGtleXMgYW5kIHZhbHVlcyxcbiAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZpZWQuXG4gICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIgaXMgZGVsZXRlZC5cblxuICAgICAgICAgICAgRXhhbXBsZTpcblxuICAgICAgICAgICAgLy8gUGFyc2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGxcbiAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuXG5cbiAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBhID1cbi9eKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSg/OlxcLlxcZCopPylaJC8uZXhlYyh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoK2FbMV0sICthWzJdIC0gMSwgK2FbM10sICthWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICthWzVdLCArYVs2XSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBteURhdGEgPSBKU09OLnBhcnNlKCdbXCJEYXRlKDA5LzA5LzIwMDEpXCJdJywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZDtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgNSkgPT09ICdEYXRlKCcgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKC0xKSA9PT0gJyknKSB7XG4gICAgICAgICAgICAgICAgICAgIGQgPSBuZXcgRGF0ZSh2YWx1ZS5zbGljZSg1LCAtMSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSk7XG5cblxuICAgIFRoaXMgaXMgYSByZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9yXG4gICAgcmVkaXN0cmlidXRlLlxuKi9cblxuLypqc2xpbnQgZXZpbDogdHJ1ZSwgcmVnZXhwOiB0cnVlICovXG5cbi8qbWVtYmVycyBcIlwiLCBcIlxcYlwiLCBcIlxcdFwiLCBcIlxcblwiLCBcIlxcZlwiLCBcIlxcclwiLCBcIlxcXCJcIiwgSlNPTiwgXCJcXFxcXCIsIGFwcGx5LFxuICAgIGNhbGwsIGNoYXJDb2RlQXQsIGdldFVUQ0RhdGUsIGdldFVUQ0Z1bGxZZWFyLCBnZXRVVENIb3VycyxcbiAgICBnZXRVVENNaW51dGVzLCBnZXRVVENNb250aCwgZ2V0VVRDU2Vjb25kcywgaGFzT3duUHJvcGVydHksIGpvaW4sXG4gICAgbGFzdEluZGV4LCBsZW5ndGgsIHBhcnNlLCBwcm90b3R5cGUsIHB1c2gsIHJlcGxhY2UsIHNsaWNlLCBzdHJpbmdpZnksXG4gICAgdGVzdCwgdG9KU09OLCB0b1N0cmluZywgdmFsdWVPZlxuKi9cblxuXG4vLyBDcmVhdGUgYSBKU09OIG9iamVjdCBvbmx5IGlmIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LiBXZSBjcmVhdGUgdGhlXG4vLyBtZXRob2RzIGluIGEgY2xvc3VyZSB0byBhdm9pZCBjcmVhdGluZyBnbG9iYWwgdmFyaWFibGVzLlxuXG52YXIgSlNPTiA9IG1vZHVsZS5leHBvcnRzO1xuXG4oZnVuY3Rpb24gKCkge1xuICAgICd1c2Ugc3RyaWN0JztcblxuICAgIGZ1bmN0aW9uIGYobikge1xuICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLlxuICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47XG4gICAgfVxuXG4gICAgdmFyIGN4ID0gL1tcXHUwMDAwXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgICAgIGdhcCxcbiAgICAgICAgaW5kZW50LFxuICAgICAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uc1xuICAgICAgICAgICAgJ1xcYic6ICdcXFxcYicsXG4gICAgICAgICAgICAnXFx0JzogJ1xcXFx0JyxcbiAgICAgICAgICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICAgICAgICAgJ1xcZic6ICdcXFxcZicsXG4gICAgICAgICAgICAnXFxyJzogJ1xcXFxyJyxcbiAgICAgICAgICAgICdcIicgOiAnXFxcXFwiJyxcbiAgICAgICAgICAgICdcXFxcJzogJ1xcXFxcXFxcJ1xuICAgICAgICB9LFxuICAgICAgICByZXA7XG5cblxuICAgIGZ1bmN0aW9uIHF1b3RlKHN0cmluZykge1xuXG4vLyBJZiB0aGUgc3RyaW5nIGNvbnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5vXG4vLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LlxuLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBvZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlXG4vLyBzZXF1ZW5jZXMuXG5cbiAgICAgICAgZXNjYXBhYmxlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBlc2NhcGFibGUudGVzdChzdHJpbmcpID8gJ1wiJyArIHN0cmluZy5yZXBsYWNlKGVzY2FwYWJsZSwgZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgICAgIHZhciBjID0gbWV0YVthXTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgICAgICA/IGNcbiAgICAgICAgICAgICAgICA6ICdcXFxcdScgKyAoJzAwMDAnICsgYS5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpO1xuICAgICAgICB9KSArICdcIicgOiAnXCInICsgc3RyaW5nICsgJ1wiJztcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikge1xuXG4vLyBQcm9kdWNlIGEgc3RyaW5nIGZyb20gaG9sZGVyW2tleV0uXG5cbiAgICAgICAgdmFyIGksICAgICAgICAgIC8vIFRoZSBsb29wIGNvdW50ZXIuXG4gICAgICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS5cbiAgICAgICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuXG4gICAgICAgICAgICBsZW5ndGgsXG4gICAgICAgICAgICBtaW5kID0gZ2FwLFxuICAgICAgICAgICAgcGFydGlhbCxcbiAgICAgICAgICAgIHZhbHVlID0gaG9sZGVyW2tleV0sXG4gICAgICAgICAgICBpc0JpZ051bWJlciA9IHZhbHVlICE9IG51bGwgJiYgKHZhbHVlIGluc3RhbmNlb2YgQmlnTnVtYmVyIHx8IEJpZ051bWJlci5pc0JpZ051bWJlcih2YWx1ZSkpO1xuXG4vLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cblxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7XG4gICAgICAgIH1cblxuLy8gSWYgd2Ugd2VyZSBjYWxsZWQgd2l0aCBhIHJlcGxhY2VyIGZ1bmN0aW9uLCB0aGVuIGNhbGwgdGhlIHJlcGxhY2VyIHRvXG4vLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cblxuICAgICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpO1xuICAgICAgICB9XG5cbi8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS5cblxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgaWYgKGlzQmlnTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ251bWJlcic6XG5cbi8vIEpTT04gbnVtYmVycyBtdXN0IGJlIGZpbml0ZS4gRW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLlxuXG4gICAgICAgICAgICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gU3RyaW5nKHZhbHVlKSA6ICdudWxsJztcblxuICAgICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgY2FzZSAnbnVsbCc6XG4gICAgICAgIGNhc2UgJ2JpZ2ludCc6XG5cbi8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4gb3IgbnVsbCwgY29udmVydCBpdCB0byBhIHN0cmluZy4gTm90ZTpcbi8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHByb2R1Y2UgJ251bGwnLiBUaGUgY2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluXG4vLyB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMgZ2V0cyBmaXhlZCBzb21lZGF5LlxuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcblxuLy8gSWYgdGhlIHR5cGUgaXMgJ29iamVjdCcsIHdlIG1pZ2h0IGJlIGRlYWxpbmcgd2l0aCBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgb3Jcbi8vIG51bGwuXG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuLy8gRHVlIHRvIGEgc3BlY2lmaWNhdGlvbiBibHVuZGVyIGluIEVDTUFTY3JpcHQsIHR5cGVvZiBudWxsIGlzICdvYmplY3QnLFxuLy8gc28gd2F0Y2ggb3V0IGZvciB0aGF0IGNhc2UuXG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgICAgICAgICAgfVxuXG4vLyBNYWtlIGFuIGFycmF5IHRvIGhvbGQgdGhlIHBhcnRpYWwgcmVzdWx0cyBvZiBzdHJpbmdpZnlpbmcgdGhpcyBvYmplY3QgdmFsdWUuXG5cbiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7XG4gICAgICAgICAgICBwYXJ0aWFsID0gW107XG5cbi8vIElzIHRoZSB2YWx1ZSBhbiBhcnJheT9cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cbi8vIFRoZSB2YWx1ZSBpcyBhbiBhcnJheS4gU3RyaW5naWZ5IGV2ZXJ5IGVsZW1lbnQuIFVzZSBudWxsIGFzIGEgcGxhY2Vob2xkZXJcbi8vIGZvciBub24tSlNPTiB2YWx1ZXMuXG5cbiAgICAgICAgICAgICAgICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpYWxbaV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJztcbiAgICAgICAgICAgICAgICB9XG5cbi8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLCBhbmQgd3JhcCB0aGVtIGluXG4vLyBicmFja2V0cy5cblxuICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMFxuICAgICAgICAgICAgICAgICAgICA/ICdbXSdcbiAgICAgICAgICAgICAgICAgICAgOiBnYXBcbiAgICAgICAgICAgICAgICAgICAgPyAnW1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICddJ1xuICAgICAgICAgICAgICAgICAgICA6ICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nO1xuICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG5cbi8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZSBzdHJpbmdpZmllZC5cblxuICAgICAgICAgICAgaWYgKHJlcCAmJiB0eXBlb2YgcmVwID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHJlcC5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwW2ldID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG5cbi8vIE90aGVyd2lzZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0aGUgb2JqZWN0LlxuXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4vLyBKb2luIGFsbCBvZiB0aGUgbWVtYmVyIHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsXG4vLyBhbmQgd3JhcCB0aGVtIGluIGJyYWNlcy5cblxuICAgICAgICAgICAgdiA9IHBhcnRpYWwubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyAne30nXG4gICAgICAgICAgICAgICAgOiBnYXBcbiAgICAgICAgICAgICAgICA/ICd7XFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ30nXG4gICAgICAgICAgICAgICAgOiAneycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICd9JztcbiAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgIH1cblxuLy8gSWYgdGhlIEpTT04gb2JqZWN0IGRvZXMgbm90IHlldCBoYXZlIGEgc3RyaW5naWZ5IG1ldGhvZCwgZ2l2ZSBpdCBvbmUuXG5cbiAgICBpZiAodHlwZW9mIEpTT04uc3RyaW5naWZ5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5ID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHtcblxuLy8gVGhlIHN0cmluZ2lmeSBtZXRob2QgdGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFjZXIsIGFuZCBhbiBvcHRpb25hbFxuLy8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpTT04gdGV4dC4gVGhlIHJlcGxhY2VyIGNhbiBiZSBhIGZ1bmN0aW9uXG4vLyB0aGF0IGNhbiByZXBsYWNlIHZhbHVlcywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBrZXlzLlxuLy8gQSBkZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBvZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGNhblxuLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBlYXNpbHkgcmVhZGFibGUuXG5cbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZ2FwID0gJyc7XG4gICAgICAgICAgICBpbmRlbnQgPSAnJztcblxuLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5pbmcgdGhhdFxuLy8gbWFueSBzcGFjZXMuXG5cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICcgJztcbiAgICAgICAgICAgICAgICB9XG5cbi8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy5cblxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7XG4gICAgICAgICAgICB9XG5cbi8vIElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS5cbi8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuXG5cbiAgICAgICAgICAgIHJlcCA9IHJlcGxhY2VyO1xuICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJlcGxhY2VyICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVwbGFjZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7XG4gICAgICAgICAgICB9XG5cbi8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycuXG4vLyBSZXR1cm4gdGhlIHJlc3VsdCBvZiBzdHJpbmdpZnlpbmcgdGhlIHZhbHVlLlxuXG4gICAgICAgICAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7XG4gICAgICAgIH07XG4gICAgfVxufSgpKTtcbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBNZXNzYWdlIHtcbiAgZXhwb3J0IGVudW0gTWVzc2FnZVN0YXRlIHtcbiAgICBVc2VyVW5rbm93biA9IDEsXG4gICAgTWFpbGJveEluYWN0aXZlID0gMixcbiAgICBRdW90YUV4Y2VlZGVkID0gMyxcbiAgICBJbnZhbGlkRG9tYWluID0gNCxcbiAgICBOb01haWxIb3N0ID0gNSxcbiAgICBSZWxheU9yQWNjZXNzRGVuaWVkID0gNixcbiAgICBTZW5kZXJCbG9ja2VkID0gNyxcbiAgICBDb250ZW50QmxvY2tlZCA9IDgsXG4gICAgUG9saWN5SXNzdWUgPSA5LFxuICAgIFN5c3RlbUlzc3VlID0gMTAsXG4gICAgUHJvdG9jb2xJc3N1ZSA9IDExLFxuICAgIENvbm5lY3Rpb25Jc3N1ZSA9IDEyLFxuICAgIEdyZXlMaXN0ZWQgPSAxMyxcbiAgICBQcmVCbG9ja2VkID0gMTQsXG4gICAgRHVwbGljYXRlSW5DYW1wYWlnbiA9IDE1LFxuICAgIFNwYW1QcmVCbG9ja2VkID0gMTYsXG4gICAgQmFkT3JFbXB0eVRlbXBsYXRlID0gMTcsXG4gICAgRXJyb3JJblRlbXBsYXRlTGFuZ3VhZ2UgPSAxOCxcbiAgICBUeXBvRml4ID0gMTksXG4gICAgQmxhY2tMaXN0ZWQgPSAyMCxcbiAgICBTcGFtUmVwb3J0ZXIgPSAyMVxuICB9XG5cbiAgZXhwb3J0IGVudW0gRnJvbVR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAxLFxuICAgIE1hcmtldGluZyA9IDIsXG4gICAgVW5rbm93biA9IDMsXG4gIH1cblxuICBleHBvcnQgZW51bSBNZXNzYWdlU3RhdHVzIHtcbiAgICBQcm9jZXNzZWQgPSAwLFxuICAgIFF1ZXVlZCA9IDEsXG4gICAgU2VudCA9IDIsXG4gICAgT3BlbmVkID0gMyxcbiAgICBDbGlja2VkID0gNCxcbiAgICBCb3VuY2UgPSA1LFxuICAgIFNwYW0gPSA2LFxuICAgIFVuc3ViID0gNyxcbiAgICBCbG9ja2VkID0gOCxcbiAgICBTb2Z0Qm91bmNlID0gOSxcbiAgICBIYXJkQm91bmNlID0gMTAsXG4gICAgRGVmZXJyZWQgPSAxMSxcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEN1cnJlbnRNZXNzYWdlU3RhdHVzIHtcbiAgICBVbmtub3duID0gJ3Vua25vd24nLFxuICAgIFF1ZXVlZCA9ICdxdWV1ZWQnLFxuICAgIFNlbnQgPSAnc2VudCcsXG4gICAgT3BlbmVkID0gJ29wZW5lZCcsXG4gICAgQ2xpY2tlZCA9ICdjbGlja2VkJyxcbiAgICBCb3VuY2UgPSAnYm91bmNlJyxcbiAgICBTcGFtID0gJ3NwYW0nLFxuICAgIFVuc3ViID0gJ3Vuc3ViJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIEhhcmRCb3VuY2VkID0gJ2hhcmRib3VuY2VkJyxcbiAgICBTb2Z0Qm91bmNlZCA9ICdzb2Z0Ym91bmNlZCcsXG4gICAgRGVmZXJyZWQgPSAnZGVmZXJyZWQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gRXZlbnRUeXBlIHtcbiAgICBTZW50ID0gJ3NlbnQnLFxuICAgIE9wZW5lZCA9ICdvcGVuZWQnLFxuICAgIENsaWNrZWQgPSAnY2xpY2tlZCcsXG4gICAgQm91bmNlZCA9ICdib3VuY2VkJyxcbiAgICBCbG9ja2VkID0gJ2Jsb2NrZWQnLFxuICAgIFVuc3ViID0gJ3Vuc3ViJyxcbiAgICBTcGFtID0gJ3NwYW0nXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VUcmFja2VkIHtcbiAgICBJc0NsaWNrVHJhY2tlZDogYm9vbGVhbjtcbiAgICBJc0hUTUxQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgSXNPcGVuVHJhY2tlZDogYm9vbGVhbjtcbiAgICBJc1RleHRQYXJ0SW5jbHVkZWQ6IGJvb2xlYW47XG4gICAgSXNVbnN1YlRyYWNrZWQ6IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2UgZXh0ZW5kcyBNZXNzYWdlVHJhY2tlZCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBcnJpdmVkQXQ6IHN0cmluZztcbiAgICBBdHRhY2htZW50Q291bnQ6IG51bWJlcjtcbiAgICBBdHRlbXB0Q291bnQ6IG51bWJlcjtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ29udGFjdEFsdDogc3RyaW5nO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERlbGF5OiBudW1iZXI7XG4gICAgRGVzdGluYXRpb25JRDogbnVtYmVyO1xuICAgIEZpbHRlclRpbWU6IG51bWJlcjtcbiAgICBNZXNzYWdlU2l6ZTogbnVtYmVyO1xuICAgIFNlbmRlcklEOiBudW1iZXI7XG4gICAgU3BhbWFzc2Fzc2luU2NvcmU6IG51bWJlcjtcbiAgICBTcGFtYXNzUnVsZXM6IHN0cmluZztcbiAgICBTdGF0ZUlEOiBNZXNzYWdlU3RhdGU7XG4gICAgU3RhdGVQZXJtYW5lbnQ6IGJvb2xlYW47XG4gICAgU3RhdHVzOiBDdXJyZW50TWVzc2FnZVN0YXR1cztcbiAgICBTdWJqZWN0OiBzdHJpbmc7XG4gICAgVVVJRDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlSGlzdG9yeSB7XG4gICAgQ29tbWVudDogc3RyaW5nO1xuICAgIEV2ZW50QXQ6IG51bWJlcjtcbiAgICBFdmVudFR5cGU6IEV2ZW50VHlwZTtcbiAgICBTdGF0ZTogc3RyaW5nO1xuICAgIFVzZXJhZ2VudDogc3RyaW5nO1xuICAgIFVzZXJhZ2VudElEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIE1lc3NhZ2VJbmZvcm1hdGlvbjxSdWxlcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBDYW1wYWlnbklEOiBudW1iZXI7XG4gICAgQ2xpY2tUcmFja2VkQ291bnQ6IG51bWJlcjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBNZXNzYWdlU2l6ZTogbnVtYmVyO1xuICAgIE9wZW5UcmFja2VkQ291bnQ6IG51bWJlcjtcbiAgICBRdWV1ZWRDb3VudDogbnVtYmVyO1xuICAgIFNlbmRFbmRBdDogc3RyaW5nO1xuICAgIFNlbnRDb3VudDogbnVtYmVyO1xuICAgIFNwYW1Bc3Nhc3NpblJ1bGVzOiBSdWxlcztcbiAgICBTcGFtQXNzYXNzaW5TY29yZTogbnVtYmVyO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduPzogbnVtYmVyO1xuICAgIENvbnRhY3Q/OiBudW1iZXI7XG4gICAgQ3VzdG9tSUQ/OiBzdHJpbmc7XG4gICAgRGVzdGluYXRpb24/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBGcm9tVHlwZTtcbiAgICBNZXNzYWdlU3RhdGU/OiBNZXNzYWdlU3RhdGU7XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2VTdGF0dXM7XG4gICAgUGxhblN1YnNjcmlwdGlvbj86IG51bWJlcjtcbiAgICBTZW5kZXJJRD86IG51bWJlcjtcbiAgICBTaG93Q29udGFjdEFsdD86IGJvb2xlYW47XG4gICAgU2hvd0N1c3RvbUlEPzogYm9vbGVhbjtcbiAgICBTaG93U3ViamVjdD86IGJvb2xlYW47XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRNZXNzYWdlSW5mb3JtYXRpb25RdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlRpbWVzdGFtcFBlcmlvZD4gJlxuICAgIFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICZcbiAge1xuICAgIENhbXBhaWduSUQ/OiBudW1iZXI7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEN1c3RvbUNhbXBhaWduPzogc3RyaW5nO1xuICAgIEZyb20/OiBzdHJpbmc7XG4gICAgRnJvbURvbWFpbj86IHN0cmluZztcbiAgICBGcm9tSUQ/OiBudW1iZXI7XG4gICAgRnJvbVR5cGU/OiBGcm9tVHlwZTtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzTmV3c2xldHRlclRvb2w/OiBib29sZWFuO1xuICAgIElzU3RhcnJlZD86IGJvb2xlYW47XG4gICAgTWVzc2FnZVN0YXR1cz86IE1lc3NhZ2VTdGF0dXM7XG4gICAgUGVyaW9kPzogQ29tbW9uLlBlcmlvZDtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZXNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxNZXNzYWdlW10+XG4gIGV4cG9ydCB0eXBlIEdldE1lc3NhZ2VIaXN0b3J5UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWVzc2FnZUhpc3RvcnlbXT5cbiAgZXhwb3J0IHR5cGUgR2V0TWVzc2FnZUluZm9ybWF0aW9uUmVzcG9uc2U8UnVsZXMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PE1lc3NhZ2VJbmZvcm1hdGlvbjxSdWxlcz4+PlxufVxuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIEFQSUtleUNvbmZpZ3VyYXRpb24ge1xuICBleHBvcnQgZW51bSBSdW5MZXZlbCB7XG4gICAgTm9ybWFsID0gJ05vcm1hbCcsXG4gICAgU29mdExvY2sgPSAnU29mdGxvY2snLFxuICAgIEhhcmRMb2NrID0gJ0hhcmRsb2NrJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBBcGlLZXkge1xuICAgIElEOiBudW1iZXI7XG4gICAgQUNMOiBzdHJpbmc7XG4gICAgSXNBY3RpdmU6IGJvb2xlYW47XG4gICAgQVBJS2V5OiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgSXNNYXN0ZXI6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFF1YXJhbnRpbmVWYWx1ZTogbnVtYmVyO1xuICAgIFJ1bmxldmVsOiBSdW5MZXZlbDtcbiAgICBTZWNyZXRLZXk6IHN0cmluZztcbiAgICBUcmFja0hvc3Q6IHN0cmluZztcbiAgICBVc2VySUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0QXBpS2V5Qm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQUNMPzogc3RyaW5nO1xuICAgIElzQWN0aXZlPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dEFwaUtleUJvZHkgPSBQYXJ0aWFsPFBvc3RBcGlLZXlCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldEFwaUtleVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQVBJS2V5Pzogc3RyaW5nO1xuICAgIElzQWN0aXZlPzogYm9vbGVhbjtcbiAgICBJc01hc3Rlcj86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBBcGlLZXlSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxBcGlLZXlbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdEFwaUtleVJlc3BvbnNlID0gQXBpS2V5UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0QXBpS2V5UmVzcG9uc2UgPSBBcGlLZXlSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRBcGlLZXlSZXNwb25zZSA9QXBpS2V5UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBBY2NvdW50U2V0dGluZyB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTXlQcm9maWxlIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIEFkZHJlc3NDaXR5OiBzdHJpbmc7XG4gICAgQWRkcmVzc0NvdW50cnk6IHN0cmluZztcbiAgICBBZGRyZXNzUG9zdGFsQ29kZTogc3RyaW5nO1xuICAgIEFkZHJlc3NTdGF0ZTogc3RyaW5nO1xuICAgIEFkZHJlc3NTdHJlZXQ6IHN0cmluZztcbiAgICBCaWxsaW5nRW1haWw6IHN0cmluZztcbiAgICBCaXJ0aGRheUF0OiBzdHJpbmc7XG4gICAgQ29tcGFueU5hbWU6IHN0cmluZztcbiAgICBDb21wYW55TnVtT2ZFbXBsb3llZXM6IHN0cmluZztcbiAgICBDb250YWN0UGhvbmU6IHN0cmluZztcbiAgICBFc3RpbWF0ZWRWb2x1bWU6IG51bWJlcjtcbiAgICBGZWF0dXJlczogc3RyaW5nO1xuICAgIEZpcnN0bmFtZTogc3RyaW5nO1xuICAgIEluZHVzdHJ5OiBudW1iZXI7XG4gICAgSm9iVGl0bGU6IHN0cmluZztcbiAgICBMYXN0bmFtZTogc3RyaW5nO1xuICAgIFZBVE51bWJlcjogc3RyaW5nO1xuICAgIFdlYnNpdGU6IHN0cmluZztcbiAgICBWQVQ6IG51bWJlcjtcbiAgICBVc2VySUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgVXNlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBBQ0w6IHN0cmluZztcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIExhc3RMb2dpbkF0OiBzdHJpbmc7XG4gICAgTG9jYWxlOiBzdHJpbmc7XG4gICAgVGltZXpvbmU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBGaXJzdElwOiBzdHJpbmc7XG4gICAgTGFzdElwOiBzdHJpbmc7XG4gICAgTWF4QWxsb3dlZEFQSUtleXM6IG51bWJlcjtcbiAgICBVc2VybmFtZTogc3RyaW5nO1xuICAgIFdhcm5lZFJhdGVsaW1pdEF0OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUHV0TXlQcm9maWxlQm9keSA9IFBhcnRpYWw8T21pdDxNeVByb2ZpbGUsICdJRCcgfCAnVkFUJyB8ICdVc2VySUQnPj5cblxuICBleHBvcnQgdHlwZSBQdXRVc2VyQm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFVzZXIsICdJRCcgfCAnQ3JlYXRlZEF0JyB8ICdGaXJzdElwJyB8ICdNYXhBbGxvd2VkQVBJS2V5cycgfCAnV2FybmVkUmF0ZWxpbWl0QXQnPj5cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgTXlQcm9maWxlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TXlQcm9maWxlW10+O1xuICB0eXBlIFVzZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxVc2VyW10+O1xuXG4gIGV4cG9ydCB0eXBlIFB1dE15UHJvZmlsZVJlc3BvbnNlID0gTXlQcm9maWxlUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TXlQcm9maWxlUmVzcG9uc2UgPSBNeVByb2ZpbGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFB1dFVzZXJSZXNwb25zZSA9IFVzZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRVc2VyUmVzcG9uc2UgPSBVc2VyUmVzcG9uc2Vcbn1cbiIsImltcG9ydCB7IENvbW1vbiB9IGZyb20gJy4vQ29tbW9uJztcblxuZXhwb3J0IG5hbWVzcGFjZSBTZW5kZXIge1xuICBleHBvcnQgZW51bSBFbWFpbFR5cGUge1xuICAgIFRyYW5zYWN0aW9uYWwgPSAndHJhbnNhY3Rpb25hbCcsXG4gICAgQnVsayA9ICdidWxrJyxcbiAgICBVbmtub3duID0gJ3Vua25vd24nXG4gIH1cblxuICBleHBvcnQgZW51bSBTZW5kZXJTdGF0dXMge1xuICAgIEluYWN0aXZlID0gJ0luYWN0aXZlJyxcbiAgICBBY3RpdmUgPSAnQWN0aXZlJyxcbiAgICBEZWxldGVkID0gJ0RlbGV0ZWQnLFxuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBTZW5kZXIge1xuICAgIElEOiBudW1iZXI7XG4gICAgRW1haWxUeXBlOiBFbWFpbFR5cGU7XG4gICAgSXNEZWZhdWx0U2VuZGVyOiBib29sZWFuO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBETlNJRDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBTdGF0dXM6IFNlbmRlclN0YXR1cztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgU2VuZGVyVmFsaWRhdGUge1xuICAgIFZhbGlkYXRpb25NZXRob2Q6IHN0cmluZztcbiAgICBFcnJvcnM6IHN0cmluZztcbiAgICBHbG9iYWxFcnJvcjogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RTZW5kZXJCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRW1haWxUeXBlPzogRW1haWxUeXBlO1xuICAgIElzRGVmYXVsdFNlbmRlcj86IGJvb2xlYW47XG4gICAgTmFtZT86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dFNlbmRlckJvZHkgPSBPbWl0PFBvc3RTZW5kZXJCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldFNlbmRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRG5zSUQ/OiBudW1iZXI7XG4gICAgRG9tYWluPzogc3RyaW5nO1xuICAgIEVtYWlsPzogc3RyaW5nO1xuICAgIElzRG9tYWluU2VuZGVyPzogYm9vbGVhbjtcbiAgICBMb2NhbFBhcnQ/OiBzdHJpbmc7XG4gICAgU2hvd0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFNlbmRlclN0YXR1cztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBTZW5kZXJSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxTZW5kZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlclJlc3BvbnNlID0gU2VuZGVyUmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0U2VuZGVyUmVzcG9uc2UgPSBTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRTZW5kZXJSZXNwb25zZSA9IFNlbmRlclJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgUG9zdFNlbmRlclZhbGlkYXRlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8U2VuZGVyVmFsaWRhdGVbXT47XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgTWV0YXNlbmRlciB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTWV0YVNlbmRlciB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBEZXNjcmlwdGlvbjogc3RyaW5nO1xuICAgIENyZWF0ZWRBdDogc3RyaW5nO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBJc0VuYWJsZWQ6IGJvb2xlYW47XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdE1ldGFTZW5kZXJCb2R5ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRNZXRhU2VuZGVyQm9keSA9IE9taXQ8UG9zdE1ldGFTZW5kZXJCb2R5LCAnRW1haWwnPlxuXG4gIGV4cG9ydCB0eXBlIEdldE1ldGFTZW5kZXJRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIEROUz86IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBNZXRhU2VuZGVyUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TWV0YVNlbmRlcltdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0TWV0YVNlbmRlclJlc3BvbnNlID0gTWV0YVNlbmRlclJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dE1ldGFTZW5kZXJSZXNwb25zZSA9IE1ldGFTZW5kZXJSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRNZXRhU2VuZGVyUmVzcG9uc2UgPSBNZXRhU2VuZGVyUmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBETlMge1xuICBleHBvcnQgZW51bSBES0lNQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InLFxuICAgIE5vdENoZWNrZWQgPSAnTm90IGNoZWNrZWQnXG4gIH1cblxuICBleHBvcnQgZW51bSBES0lNQ29uZmlndXJhdGlvblN0YXR1cyB7XG4gICAgT0sgPSAnT0snLFxuICAgIEVycm9yID0gJ0Vycm9yJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gU1BGQ29uZmlndXJhdGlvbkNoZWNrU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InLFxuICAgIE5vdENoZWNrZWQgPSAnTm90IGNoZWNrZWQnLFxuICAgIE5vdEZvdW5kID0gJ05vdCBmb3VuZCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBTUEZDb25maWd1cmF0aW9uU3RhdHVzIHtcbiAgICBPSyA9ICdPSycsXG4gICAgRXJyb3IgPSAnRXJyb3InXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEROUyB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBES0lNUmVjb3JkTmFtZTogc3RyaW5nO1xuICAgIERLSU1SZWNvcmRWYWx1ZTogc3RyaW5nO1xuICAgIERLSU1TdGF0dXM6IERLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXM7XG4gICAgRG9tYWluOiBzdHJpbmc7XG4gICAgSXNDaGVja0luUHJvZ3Jlc3M6IGJvb2xlYW47XG4gICAgTGFzdENoZWNrQXQ6IHN0cmluZztcbiAgICBPd25lclNoaXBUb2tlbjogc3RyaW5nO1xuICAgIE93bmVyU2hpcFRva2VuUmVjb3JkTmFtZTogc3RyaW5nO1xuICAgIFNQRlJlY29yZFZhbHVlOiBzdHJpbmc7XG4gICAgU1BGU3RhdHVzOiBTUEZDb25maWd1cmF0aW9uQ2hlY2tTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEROU0NoZWNrIHtcbiAgICBES0lNRXJyb3JzOiBzdHJpbmc7XG4gICAgREtJTVJlY29yZEN1cnJlbnRWYWx1ZTogc3RyaW5nO1xuICAgIERLSU1TdGF0dXM6IERLSU1Db25maWd1cmF0aW9uU3RhdHVzO1xuICAgIFNQRkVycm9yczogc3RyaW5nO1xuICAgIFNQRlJlY29yZEN1cnJlbnRWYWx1ZTogc3RyaW5nO1xuICAgIFNQRlN0YXR1czogU1BGQ29uZmlndXJhdGlvblN0YXR1cztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRETlNRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+ICYge1xuICAgIElzQ2hlY2tJblByb2dyZXNzPzogYm9vbGVhbjtcbiAgICBJc1NlbmRlcklkZW50aWZpZWQ/OiBib29sZWFuO1xuICAgIElzWWFob29GQkw/OiBib29sZWFuO1xuICAgIE1heExhc3RDaGVja0F0Pzogc3RyaW5nO1xuICAgIE1pbkxhc3RDaGVja0F0Pzogc3RyaW5nO1xuICAgIFNQRlN0YXR1cz86IFNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgZXhwb3J0IHR5cGUgR2V0RE5TUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8RE5TW10+O1xuICBleHBvcnQgdHlwZSBQb3N0RE5TQ2hlY2tSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxETlNDaGVja1tdPjtcbn1cbiIsIi8qISBBeGlvcyB2MS4xMi4yIENvcHlyaWdodCAoYykgMjAyNSBNYXR0IFphYnJpc2tpZSBhbmQgY29udHJpYnV0b3JzICovXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcbmNvbnN0IHtpdGVyYXRvciwgdG9TdHJpbmdUYWd9ID0gU3ltYm9sO1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uJDEodmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSAmJiB2YWwuY29uc3RydWN0b3IuaXNCdWZmZXIodmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSB2aWV3IG9uIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUJ1ZmZlclZpZXcodmFsKSB7XG4gIGxldCByZXN1bHQ7XG4gIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJykgJiYgKEFycmF5QnVmZmVyLmlzVmlldykpIHtcbiAgICByZXN1bHQgPSBBcnJheUJ1ZmZlci5pc1ZpZXcodmFsKTtcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSAodmFsKSAmJiAodmFsLmJ1ZmZlcikgJiYgKGlzQXJyYXlCdWZmZXIodmFsLmJ1ZmZlcikpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJpbmdcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyaW5nLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJpbmcgPSB0eXBlT2ZUZXN0KCdzdHJpbmcnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRnVuY3Rpb24sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Z1bmN0aW9uJDEgPSB0eXBlT2ZUZXN0KCdmdW5jdGlvbicpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIE51bWJlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzTnVtYmVyID0gdHlwZU9mVGVzdCgnbnVtYmVyJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpbmcgPT09ICdvYmplY3QnO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQm9vbGVhblxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQm9vbGVhbiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQm9vbGVhbiA9IHRoaW5nID0+IHRoaW5nID09PSB0cnVlIHx8IHRoaW5nID09PSBmYWxzZTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBPYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1BsYWluT2JqZWN0ID0gKHZhbCkgPT4ge1xuICBpZiAoa2luZE9mKHZhbCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodmFsKTtcbiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKHRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShpdGVyYXRvciBpbiB2YWwpO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QgKHNhZmVseSBoYW5kbGVzIEJ1ZmZlcnMpXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBlbXB0eSBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0VtcHR5T2JqZWN0ID0gKHZhbCkgPT4ge1xuICAvLyBFYXJseSByZXR1cm4gZm9yIG5vbi1vYmplY3RzIG9yIEJ1ZmZlcnMgdG8gcHJldmVudCBSYW5nZUVycm9yXG4gIGlmICghaXNPYmplY3QodmFsKSB8fCBpc0J1ZmZlcih2YWwpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDAgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCkgPT09IE9iamVjdC5wcm90b3R5cGU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBGYWxsYmFjayBmb3IgYW55IG90aGVyIG9iamVjdHMgdGhhdCBtaWdodCBjYXVzZSBSYW5nZUVycm9yIHdpdGggT2JqZWN0LmtleXMoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbiQxKHZhbC5waXBlKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGb3JtRGF0YSA9ICh0aGluZykgPT4ge1xuICBsZXQga2luZDtcbiAgcmV0dXJuIHRoaW5nICYmIChcbiAgICAodHlwZW9mIEZvcm1EYXRhID09PSAnZnVuY3Rpb24nICYmIHRoaW5nIGluc3RhbmNlb2YgRm9ybURhdGEpIHx8IChcbiAgICAgIGlzRnVuY3Rpb24kMSh0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uJDEodGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59O1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVUkxTZWFyY2hQYXJhbXMgPSBraW5kT2ZUZXN0KCdVUkxTZWFyY2hQYXJhbXMnKTtcblxuY29uc3QgW2lzUmVhZGFibGVTdHJlYW0sIGlzUmVxdWVzdCwgaXNSZXNwb25zZSwgaXNIZWFkZXJzXSA9IFsnUmVhZGFibGVTdHJlYW0nLCAnUmVxdWVzdCcsICdSZXNwb25zZScsICdIZWFkZXJzJ10ubWFwKGtpbmRPZlRlc3QpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFN0cmluZyBmcmVlZCBvZiBleGNlc3Mgd2hpdGVzcGFjZVxuICovXG5jb25zdCB0cmltID0gKHN0cikgPT4gc3RyLnRyaW0gP1xuICBzdHIudHJpbSgpIDogc3RyLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCAnJyk7XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7YW55fVxuICovXG5mdW5jdGlvbiBmb3JFYWNoKG9iaiwgZm4sIHthbGxPd25LZXlzID0gZmFsc2V9ID0ge30pIHtcbiAgLy8gRG9uJ3QgYm90aGVyIGlmIG5vIHZhbHVlIHByb3ZpZGVkXG4gIGlmIChvYmogPT09IG51bGwgfHwgdHlwZW9mIG9iaiA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgaTtcbiAgbGV0IGw7XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwLCBsID0gb2JqLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpbaV0sIGksIG9iaik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIEJ1ZmZlciBjaGVja1xuICAgIGlmIChpc0J1ZmZlcihvYmopKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGlmIChpc0J1ZmZlcihvYmopKXtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzLCBza2lwVW5kZWZpbmVkfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIGlmICghc2tpcFVuZGVmaW5lZCB8fCAhaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24kMSh2YWwpKSB7XG4gICAgICBhW2tleV0gPSBiaW5kKHZhbCwgdGhpc0FyZyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFba2V5XSA9IHZhbDtcbiAgICB9XG4gIH0sIHthbGxPd25LZXlzfSk7XG4gIHJldHVybiBhO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn07XG5cbi8qKlxuICogSW5oZXJpdCB0aGUgcHJvdG90eXBlIG1ldGhvZHMgZnJvbSBvbmUgY29uc3RydWN0b3IgaW50byBhbm90aGVyXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtmdW5jdGlvbn0gc3VwZXJDb25zdHJ1Y3RvclxuICogQHBhcmFtIHtvYmplY3R9IFtwcm9wc11cbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVzY3JpcHRvcnNdXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGluaGVyaXRzID0gKGNvbnN0cnVjdG9yLCBzdXBlckNvbnN0cnVjdG9yLCBwcm9wcywgZGVzY3JpcHRvcnMpID0+IHtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZSwgZGVzY3JpcHRvcnMpO1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvbnN0cnVjdG9yLCAnc3VwZXInLCB7XG4gICAgdmFsdWU6IHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlXG4gIH0pO1xuICBwcm9wcyAmJiBPYmplY3QuYXNzaWduKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvcHMpO1xufTtcblxuLyoqXG4gKiBSZXNvbHZlIG9iamVjdCB3aXRoIGRlZXAgcHJvdG90eXBlIGNoYWluIHRvIGEgZmxhdCBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBzb3VyY2VPYmogc291cmNlIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IFtkZXN0T2JqXVxuICogQHBhcmFtIHtGdW5jdGlvbnxCb29sZWFufSBbZmlsdGVyXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Byb3BGaWx0ZXJdXG4gKlxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuY29uc3QgdG9GbGF0T2JqZWN0ID0gKHNvdXJjZU9iaiwgZGVzdE9iaiwgZmlsdGVyLCBwcm9wRmlsdGVyKSA9PiB7XG4gIGxldCBwcm9wcztcbiAgbGV0IGk7XG4gIGxldCBwcm9wO1xuICBjb25zdCBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIGdldFByb3RvdHlwZU9mKHNvdXJjZU9iaik7XG4gIH0gd2hpbGUgKHNvdXJjZU9iaiAmJiAoIWZpbHRlciB8fCBmaWx0ZXIoc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgc291cmNlT2JqICE9PSBPYmplY3QucHJvdG90eXBlKTtcblxuICByZXR1cm4gZGVzdE9iajtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn07XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKlxuICogQHBhcmFtIHsqfSBbdGhpbmddXG4gKlxuICogQHJldHVybnMgez9BcnJheX1cbiAqL1xuY29uc3QgdG9BcnJheSA9ICh0aGluZykgPT4ge1xuICBpZiAoIXRoaW5nKSByZXR1cm4gbnVsbDtcbiAgaWYgKGlzQXJyYXkodGhpbmcpKSByZXR1cm4gdGhpbmc7XG4gIGxldCBpID0gdGhpbmcubGVuZ3RoO1xuICBpZiAoIWlzTnVtYmVyKGkpKSByZXR1cm4gbnVsbDtcbiAgY29uc3QgYXJyID0gbmV3IEFycmF5KGkpO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGFycltpXSA9IHRoaW5nW2ldO1xuICB9XG4gIHJldHVybiBhcnI7XG59O1xuXG4vKipcbiAqIENoZWNraW5nIGlmIHRoZSBVaW50OEFycmF5IGV4aXN0cyBhbmQgaWYgaXQgZG9lcywgaXQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGlmIHRoZVxuICogdGhpbmcgcGFzc2VkIGluIGlzIGFuIGluc3RhbmNlIG9mIFVpbnQ4QXJyYXlcbiAqXG4gKiBAcGFyYW0ge1R5cGVkQXJyYXl9XG4gKlxuICogQHJldHVybnMge0FycmF5fVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuY29uc3QgaXNUeXBlZEFycmF5ID0gKFR5cGVkQXJyYXkgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gdGhpbmcgPT4ge1xuICAgIHJldHVybiBUeXBlZEFycmF5ICYmIHRoaW5nIGluc3RhbmNlb2YgVHlwZWRBcnJheTtcbiAgfTtcbn0pKHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiBnZXRQcm90b3R5cGVPZihVaW50OEFycmF5KSk7XG5cbi8qKlxuICogRm9yIGVhY2ggZW50cnkgaW4gdGhlIG9iamVjdCwgY2FsbCB0aGUgZnVuY3Rpb24gd2l0aCB0aGUga2V5IGFuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gLSBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBlbnRyeS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgZm9yRWFjaEVudHJ5ID0gKG9iaiwgZm4pID0+IHtcbiAgY29uc3QgZ2VuZXJhdG9yID0gb2JqICYmIG9ialtpdGVyYXRvcl07XG5cbiAgY29uc3QgX2l0ZXJhdG9yID0gZ2VuZXJhdG9yLmNhbGwob2JqKTtcblxuICBsZXQgcmVzdWx0O1xuXG4gIHdoaWxlICgocmVzdWx0ID0gX2l0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbiQxKG9iaikgJiYgWydhcmd1bWVudHMnLCAnY2FsbGVyJywgJ2NhbGxlZSddLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWUgPSBvYmpbbmFtZV07XG5cbiAgICBpZiAoIWlzRnVuY3Rpb24kMSh2YWx1ZSkpIHJldHVybjtcblxuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGZhbHNlO1xuXG4gICAgaWYgKCd3cml0YWJsZScgaW4gZGVzY3JpcHRvcikge1xuICAgICAgZGVzY3JpcHRvci53cml0YWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghZGVzY3JpcHRvci5zZXQpIHtcbiAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gKCkgPT4ge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXFwnJyArIG5hbWUgKyAnXFwnJyk7XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCB0b09iamVjdFNldCA9IChhcnJheU9yU3RyaW5nLCBkZWxpbWl0ZXIpID0+IHtcbiAgY29uc3Qgb2JqID0ge307XG5cbiAgY29uc3QgZGVmaW5lID0gKGFycikgPT4ge1xuICAgIGFyci5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgIG9ialt2YWx1ZV0gPSB0cnVlO1xuICAgIH0pO1xuICB9O1xuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbmNvbnN0IHRvRmluaXRlTnVtYmVyID0gKHZhbHVlLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHZhbHVlID0gK3ZhbHVlKSA/IHZhbHVlIDogZGVmYXVsdFZhbHVlO1xufTtcblxuXG5cbi8qKlxuICogSWYgdGhlIHRoaW5nIGlzIGEgRm9ybURhdGEgb2JqZWN0LCByZXR1cm4gdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cbiAqXG4gKiBAcGFyYW0ge3Vua25vd259IHRoaW5nIC0gVGhlIHRoaW5nIHRvIGNoZWNrLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1NwZWNDb21wbGlhbnRGb3JtKHRoaW5nKSB7XG4gIHJldHVybiAhISh0aGluZyAmJiBpc0Z1bmN0aW9uJDEodGhpbmcuYXBwZW5kKSAmJiB0aGluZ1t0b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbaXRlcmF0b3JdKTtcbn1cblxuY29uc3QgdG9KU09OT2JqZWN0ID0gKG9iaikgPT4ge1xuICBjb25zdCBzdGFjayA9IG5ldyBBcnJheSgxMCk7XG5cbiAgY29uc3QgdmlzaXQgPSAoc291cmNlLCBpKSA9PiB7XG5cbiAgICBpZiAoaXNPYmplY3Qoc291cmNlKSkge1xuICAgICAgaWYgKHN0YWNrLmluZGV4T2Yoc291cmNlKSA+PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy9CdWZmZXIgY2hlY2tcbiAgICAgIGlmIChpc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn07XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uJDEodGhpbmcpKSAmJiBpc0Z1bmN0aW9uJDEodGhpbmcudGhlbikgJiYgaXNGdW5jdGlvbiQxKHRoaW5nLmNhdGNoKTtcblxuLy8gb3JpZ2luYWwgY29kZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpZ2l0YWxCcmFpbkpTL0F4aW9zUHJvbWlzZS9ibG9iLzE2ZGVhYjEzNzEwZWMwOTc3OTkyMjEzMWYzZmE1OTU0MzIwZjgzYWIvbGliL3V0aWxzLmpzI0wxMS1MMzRcblxuY29uc3QgX3NldEltbWVkaWF0ZSA9ICgoc2V0SW1tZWRpYXRlU3VwcG9ydGVkLCBwb3N0TWVzc2FnZVN1cHBvcnRlZCkgPT4ge1xuICBpZiAoc2V0SW1tZWRpYXRlU3VwcG9ydGVkKSB7XG4gICAgcmV0dXJuIHNldEltbWVkaWF0ZTtcbiAgfVxuXG4gIHJldHVybiBwb3N0TWVzc2FnZVN1cHBvcnRlZCA/ICgodG9rZW4sIGNhbGxiYWNrcykgPT4ge1xuICAgIF9nbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgKHtzb3VyY2UsIGRhdGF9KSA9PiB7XG4gICAgICBpZiAoc291cmNlID09PSBfZ2xvYmFsICYmIGRhdGEgPT09IHRva2VuKSB7XG4gICAgICAgIGNhbGxiYWNrcy5sZW5ndGggJiYgY2FsbGJhY2tzLnNoaWZ0KCkoKTtcbiAgICAgIH1cbiAgICB9LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gKGNiKSA9PiB7XG4gICAgICBjYWxsYmFja3MucHVzaChjYik7XG4gICAgICBfZ2xvYmFsLnBvc3RNZXNzYWdlKHRva2VuLCBcIipcIik7XG4gICAgfVxuICB9KShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsIFtdKSA6IChjYikgPT4gc2V0VGltZW91dChjYik7XG59KShcbiAgdHlwZW9mIHNldEltbWVkaWF0ZSA9PT0gJ2Z1bmN0aW9uJyxcbiAgaXNGdW5jdGlvbiQxKF9nbG9iYWwucG9zdE1lc3NhZ2UpXG4pO1xuXG5jb25zdCBhc2FwID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJyA/XG4gIHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbCkgOiAoIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrIHx8IF9zZXRJbW1lZGlhdGUpO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuXG5jb25zdCBpc0l0ZXJhYmxlID0gKHRoaW5nKSA9PiB0aGluZyAhPSBudWxsICYmIGlzRnVuY3Rpb24kMSh0aGluZ1tpdGVyYXRvcl0pO1xuXG5cbnZhciB1dGlscyQxID0ge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNFbXB0eU9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbiQxLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgaXNTcGVjQ29tcGxpYW50Rm9ybSxcbiAgdG9KU09OT2JqZWN0LFxuICBpc0FzeW5jRm4sXG4gIGlzVGhlbmFibGUsXG4gIHNldEltbWVkaWF0ZTogX3NldEltbWVkaWF0ZSxcbiAgYXNhcCxcbiAgaXNJdGVyYWJsZVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICBpZiAocmVzcG9uc2UpIHtcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2U7XG4gICAgdGhpcy5zdGF0dXMgPSByZXNwb25zZS5zdGF0dXMgPyByZXNwb25zZS5zdGF0dXMgOiBudWxsO1xuICB9XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMkMS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLFxuICAgICAgY29kZTogdGhpcy5jb2RlLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1c1xuICAgIH07XG4gIH1cbn0pO1xuXG5jb25zdCBwcm90b3R5cGUkMSA9IEF4aW9zRXJyb3IucHJvdG90eXBlO1xuY29uc3QgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChjb2RlID0+IHtcbiAgZGVzY3JpcHRvcnNbY29kZV0gPSB7dmFsdWU6IGNvZGV9O1xufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEF4aW9zRXJyb3IsIGRlc2NyaXB0b3JzKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm90b3R5cGUkMSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUkMSk7XG5cbiAgdXRpbHMkMS50b0ZsYXRPYmplY3QoZXJyb3IsIGF4aW9zRXJyb3IsIGZ1bmN0aW9uIGZpbHRlcihvYmopIHtcbiAgICByZXR1cm4gb2JqICE9PSBFcnJvci5wcm90b3R5cGU7XG4gIH0sIHByb3AgPT4ge1xuICAgIHJldHVybiBwcm9wICE9PSAnaXNBeGlvc0Vycm9yJztcbiAgfSk7XG5cbiAgY29uc3QgbXNnID0gZXJyb3IgJiYgZXJyb3IubWVzc2FnZSA/IGVycm9yLm1lc3NhZ2UgOiAnRXJyb3InO1xuXG4gIC8vIFByZWZlciBleHBsaWNpdCBjb2RlOyBvdGhlcndpc2UgY29weSB0aGUgbG93LWxldmVsIGVycm9yJ3MgY29kZSAoZS5nLiBFQ09OTlJFRlVTRUQpXG4gIGNvbnN0IGVyckNvZGUgPSBjb2RlID09IG51bGwgJiYgZXJyb3IgPyBlcnJvci5jb2RlIDogY29kZTtcbiAgQXhpb3NFcnJvci5jYWxsKGF4aW9zRXJyb3IsIG1zZywgZXJyQ29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgLy8gQ2hhaW4gdGhlIG9yaWdpbmFsIGVycm9yIG9uIHRoZSBzdGFuZGFyZCBmaWVsZDsgbm9uLWVudW1lcmFibGUgdG8gYXZvaWQgSlNPTiBub2lzZVxuICBpZiAoZXJyb3IgJiYgYXhpb3NFcnJvci5jYXVzZSA9PSBudWxsKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGF4aW9zRXJyb3IsICdjYXVzZScsIHsgdmFsdWU6IGVycm9yLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cblxuICBheGlvc0Vycm9yLm5hbWUgPSAoZXJyb3IgJiYgZXJyb3IubmFtZSkgfHwgJ0Vycm9yJztcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbnZhciBodHRwQWRhcHRlciA9IG51bGw7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMkMS5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscyQxLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KHV0aWxzJDEsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscyQxLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMkMS5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscyQxLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMkMS5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0Jvb2xlYW4odmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMkMS5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscyQxLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscyQxLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMkMS5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMkMS5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscyQxLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMkMS5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMkMS5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlJDEoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUkMSk7XG4gIH0gOiBlbmNvZGUkMTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpO1xufVxuXG4vKipcbiAqIEJ1aWxkIGEgVVJMIGJ5IGFwcGVuZGluZyBwYXJhbXMgdG8gdGhlIGVuZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIGJhc2Ugb2YgdGhlIHVybCAoZS5nLiwgaHR0cDovL3d3dy5nb29nbGUuY29tKVxuICogQHBhcmFtIHtvYmplY3R9IFtwYXJhbXNdIFRoZSBwYXJhbXMgdG8gYmUgYXBwZW5kZWRcbiAqIEBwYXJhbSB7PyhvYmplY3R8RnVuY3Rpb24pfSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGlmICh1dGlscyQxLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgc2VyaWFsaXplOiBvcHRpb25zXG4gICAgfTtcbiAgfSBcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzJDEuaXNVUkxTZWFyY2hQYXJhbXMocGFyYW1zKSA/XG4gICAgICBwYXJhbXMudG9TdHJpbmcoKSA6XG4gICAgICBuZXcgQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKS50b1N0cmluZyhfZW5jb2RlKTtcbiAgfVxuXG4gIGlmIChzZXJpYWxpemVkUGFyYW1zKSB7XG4gICAgY29uc3QgaGFzaG1hcmtJbmRleCA9IHVybC5pbmRleE9mKFwiI1wiKTtcblxuICAgIGlmIChoYXNobWFya0luZGV4ICE9PSAtMSkge1xuICAgICAgdXJsID0gdXJsLnNsaWNlKDAsIGhhc2htYXJrSW5kZXgpO1xuICAgIH1cbiAgICB1cmwgKz0gKHVybC5pbmRleE9mKCc/JykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZWRQYXJhbXM7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufVxuXG5jbGFzcyBJbnRlcmNlcHRvck1hbmFnZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdWxmaWxsZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgdGhlbmAgZm9yIGEgYFByb21pc2VgXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gQW4gSUQgdXNlZCB0byByZW1vdmUgaW50ZXJjZXB0b3IgbGF0ZXJcbiAgICovXG4gIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gICAgdGhpcy5oYW5kbGVycy5wdXNoKHtcbiAgICAgIGZ1bGZpbGxlZCxcbiAgICAgIHJlamVjdGVkLFxuICAgICAgc3luY2hyb25vdXM6IG9wdGlvbnMgPyBvcHRpb25zLnN5bmNocm9ub3VzIDogZmFsc2UsXG4gICAgICBydW5XaGVuOiBvcHRpb25zID8gb3B0aW9ucy5ydW5XaGVuIDogbnVsbFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmxlbmd0aCAtIDE7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGFuIGludGVyY2VwdG9yIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpZCBUaGUgSUQgdGhhdCB3YXMgcmV0dXJuZWQgYnkgYHVzZWBcbiAgICpcbiAgICogQHJldHVybnMge0Jvb2xlYW59IGB0cnVlYCBpZiB0aGUgaW50ZXJjZXB0b3Igd2FzIHJlbW92ZWQsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICBlamVjdChpZCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzW2lkXSkge1xuICAgICAgdGhpcy5oYW5kbGVyc1tpZF0gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgaW50ZXJjZXB0b3JzIGZyb20gdGhlIHN0YWNrXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY2xlYXIoKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnMpIHtcbiAgICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSXRlcmF0ZSBvdmVyIGFsbCB0aGUgcmVnaXN0ZXJlZCBpbnRlcmNlcHRvcnNcbiAgICpcbiAgICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAgICogaW50ZXJjZXB0b3JzIHRoYXQgbWF5IGhhdmUgYmVjb21lIGBudWxsYCBjYWxsaW5nIGBlamVjdGAuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gICAqXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZm9yRWFjaChmbikge1xuICAgIHV0aWxzJDEuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgICBpZiAoaCAhPT0gbnVsbCkge1xuICAgICAgICBmbihoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG52YXIgSW50ZXJjZXB0b3JNYW5hZ2VyJDEgPSBJbnRlcmNlcHRvck1hbmFnZXI7XG5cbnZhciB0cmFuc2l0aW9uYWxEZWZhdWx0cyA9IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtcyQxID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcblxudmFyIEZvcm1EYXRhJDEgPSB0eXBlb2YgRm9ybURhdGEgIT09ICd1bmRlZmluZWQnID8gRm9ybURhdGEgOiBudWxsO1xuXG52YXIgQmxvYiQxID0gdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnID8gQmxvYiA6IG51bGw7XG5cbnZhciBwbGF0Zm9ybSQxID0ge1xuICBpc0Jyb3dzZXI6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtcyQxLFxuICAgIEZvcm1EYXRhOiBGb3JtRGF0YSQxLFxuICAgIEJsb2I6IEJsb2IkMVxuICB9LFxuICBwcm90b2NvbHM6IFsnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2Jsb2InLCAndXJsJywgJ2RhdGEnXVxufTtcblxuY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbnZhciB1dGlscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBoYXNCcm93c2VyRW52OiBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIG5hdmlnYXRvcjogX25hdmlnYXRvcixcbiAgb3JpZ2luOiBvcmlnaW5cbn0pO1xuXG52YXIgcGxhdGZvcm0gPSB7XG4gIC4uLnV0aWxzLFxuICAuLi5wbGF0Zm9ybSQxXG59O1xuXG5mdW5jdGlvbiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRvRm9ybURhdGEoZGF0YSwgbmV3IHBsYXRmb3JtLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zKCksIHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzJDEuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgLi4ub3B0aW9uc1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZyBsaWtlIGBmb29beF1beV1bel1gIGFuZCByZXR1cm5zIGFuIGFycmF5IGxpa2UgYFsnZm9vJywgJ3gnLCAneScsICd6J11cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKlxuICogQHJldHVybnMgQW4gYXJyYXkgb2Ygc3RyaW5ncy5cbiAqL1xuZnVuY3Rpb24gcGFyc2VQcm9wUGF0aChuYW1lKSB7XG4gIC8vIGZvb1t4XVt5XVt6XVxuICAvLyBmb28ueC55LnpcbiAgLy8gZm9vLXgteS16XG4gIC8vIGZvbyB4IHkgelxuICByZXR1cm4gdXRpbHMkMS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXQpID8gdGFyZ2V0Lmxlbmd0aCA6IG5hbWU7XG5cbiAgICBpZiAoaXNMYXN0KSB7XG4gICAgICBpZiAodXRpbHMkMS5oYXNPd25Qcm9wKHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscyQxLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzJDEuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGZvcm1EYXRhKSAmJiB1dGlscyQxLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaEVudHJ5KGZvcm1EYXRhLCAobmFtZSwgdmFsdWUpID0+IHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHN0cmluZywgdHJpZXMgdG8gcGFyc2UgaXQsIGFuZCBpZiBpdCBmYWlscywgaXQgcmV0dXJucyB0aGUgc3RyaW5naWZpZWQgdmVyc2lvblxuICogb2YgdGhlIGlucHV0XG4gKlxuICogQHBhcmFtIHthbnl9IHJhd1ZhbHVlIC0gVGhlIHZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcGFyc2VyIC0gQSBmdW5jdGlvbiB0aGF0IHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBvYmplY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlbmNvZGVyIC0gQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmFsdWUgYW5kIHJldHVybnMgYSBzdHJpbmcuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gQSBzdHJpbmdpZmllZCB2ZXJzaW9uIG9mIHRoZSByYXdWYWx1ZS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzJDEudHJpbShyYXdWYWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgaWYgKGUubmFtZSAhPT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAoZW5jb2RlciB8fCBKU09OLnN0cmluZ2lmeSkocmF3VmFsdWUpO1xufVxuXG5jb25zdCBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IFsneGhyJywgJ2h0dHAnLCAnZmV0Y2gnXSxcblxuICB0cmFuc2Zvcm1SZXF1ZXN0OiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVxdWVzdChkYXRhLCBoZWFkZXJzKSB7XG4gICAgY29uc3QgY29udGVudFR5cGUgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKCkgfHwgJyc7XG4gICAgY29uc3QgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgY29uc3QgaXNPYmplY3RQYXlsb2FkID0gdXRpbHMkMS5pc09iamVjdChkYXRhKTtcblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgJiYgdXRpbHMkMS5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscyQxLmlzRm9ybURhdGEoZGF0YSk7XG5cbiAgICBpZiAoaXNGb3JtRGF0YSkge1xuICAgICAgcmV0dXJuIGhhc0pTT05Db250ZW50VHlwZSA/IEpTT04uc3RyaW5naWZ5KGZvcm1EYXRhVG9KU09OKGRhdGEpKSA6IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc1N0cmVhbShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0oZGF0YSlcbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMkMS5pc0ZpbGVMaXN0KGRhdGEpKSB8fCBjb250ZW50VHlwZS5pbmRleE9mKCdtdWx0aXBhcnQvZm9ybS1kYXRhJykgPiAtMSkge1xuICAgICAgICBjb25zdCBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24vanNvbicsIGZhbHNlKTtcbiAgICAgIHJldHVybiBzdHJpbmdpZnlTYWZlbHkoZGF0YSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIHRyYW5zZm9ybVJlc3BvbnNlOiBbZnVuY3Rpb24gdHJhbnNmb3JtUmVzcG9uc2UoZGF0YSkge1xuICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IHRoaXMudHJhbnNpdGlvbmFsIHx8IGRlZmF1bHRzLnRyYW5zaXRpb25hbDtcbiAgICBjb25zdCBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgY29uc3QgSlNPTlJlcXVlc3RlZCA9IHRoaXMucmVzcG9uc2VUeXBlID09PSAnanNvbic7XG5cbiAgICBpZiAodXRpbHMkMS5pc1Jlc3BvbnNlKGRhdGEpIHx8IHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMkMS5pc1N0cmluZyhkYXRhKSAmJiAoKGZvcmNlZEpTT05QYXJzaW5nICYmICF0aGlzLnJlc3BvbnNlVHlwZSkgfHwgSlNPTlJlcXVlc3RlZCkpIHtcbiAgICAgIGNvbnN0IHNpbGVudEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5zaWxlbnRKU09OUGFyc2luZztcbiAgICAgIGNvbnN0IHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEsIHRoaXMucGFyc2VSZXZpdmVyKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMkMS5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIChtZXRob2QpID0+IHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudmFyIGRlZmF1bHRzJDEgPSBkZWZhdWx0cztcblxuLy8gUmF3QXhpb3NIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xuY29uc3QgaWdub3JlRHVwbGljYXRlT2YgPSB1dGlscyQxLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbnZhciBwYXJzZUhlYWRlcnMgPSByYXdIZWFkZXJzID0+IHtcbiAgY29uc3QgcGFyc2VkID0ge307XG4gIGxldCBrZXk7XG4gIGxldCB2YWw7XG4gIGxldCBpO1xuXG4gIHJhd0hlYWRlcnMgJiYgcmF3SGVhZGVycy5zcGxpdCgnXFxuJykuZm9yRWFjaChmdW5jdGlvbiBwYXJzZXIobGluZSkge1xuICAgIGkgPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBrZXkgPSBsaW5lLnN1YnN0cmluZygwLCBpKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSBsaW5lLnN1YnN0cmluZyhpICsgMSkudHJpbSgpO1xuXG4gICAgaWYgKCFrZXkgfHwgKHBhcnNlZFtrZXldICYmIGlnbm9yZUR1cGxpY2F0ZU9mW2tleV0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICBpZiAocGFyc2VkW2tleV0pIHtcbiAgICAgICAgcGFyc2VkW2tleV0ucHVzaCh2YWwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBbdmFsXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG5jb25zdCAkaW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVyKGhlYWRlcikge1xuICByZXR1cm4gaGVhZGVyICYmIFN0cmluZyhoZWFkZXIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVWYWx1ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IGZhbHNlIHx8IHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci5jYWxsKHRoaXMsIHZhbHVlLCBoZWFkZXIpO1xuICB9XG5cbiAgaWYgKGlzSGVhZGVyTmFtZUZpbHRlcikge1xuICAgIHZhbHVlID0gaGVhZGVyO1xuICB9XG5cbiAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHZhbHVlKSkgcmV0dXJuO1xuXG4gIGlmICh1dGlscyQxLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzUmVnRXhwKGZpbHRlcikpIHtcbiAgICByZXR1cm4gZmlsdGVyLnRlc3QodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlci50cmltKClcbiAgICAudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csICh3LCBjaGFyLCBzdHIpID0+IHtcbiAgICAgIHJldHVybiBjaGFyLnRvVXBwZXJDYXNlKCkgKyBzdHI7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWNjZXNzb3JzKG9iaiwgaGVhZGVyKSB7XG4gIGNvbnN0IGFjY2Vzc29yTmFtZSA9IHV0aWxzJDEudG9DYW1lbENhc2UoJyAnICsgaGVhZGVyKTtcblxuICBbJ2dldCcsICdzZXQnLCAnaGFzJ10uZm9yRWFjaChtZXRob2ROYW1lID0+IHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBtZXRob2ROYW1lICsgYWNjZXNzb3JOYW1lLCB7XG4gICAgICB2YWx1ZTogZnVuY3Rpb24oYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgICByZXR1cm4gdGhpc1ttZXRob2ROYW1lXS5jYWxsKHRoaXMsIGhlYWRlciwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gICAgICB9LFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jbGFzcyBBeGlvc0hlYWRlcnMge1xuICBjb25zdHJ1Y3RvcihoZWFkZXJzKSB7XG4gICAgaGVhZGVycyAmJiB0aGlzLnNldChoZWFkZXJzKTtcbiAgfVxuXG4gIHNldChoZWFkZXIsIHZhbHVlT3JSZXdyaXRlLCByZXdyaXRlKSB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICBmdW5jdGlvbiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFsSGVhZGVyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMkMS5mb3JFYWNoKGhlYWRlcnMsIChfdmFsdWUsIF9oZWFkZXIpID0+IHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSk7XG5cbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KGhlYWRlcikgfHwgaGVhZGVyIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgc2V0SGVhZGVycyhoZWFkZXIsIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYodXRpbHMkMS5pc1N0cmluZyhoZWFkZXIpICYmIChoZWFkZXIgPSBoZWFkZXIudHJpbSgpKSAmJiAhaXNWYWxpZEhlYWRlck5hbWUoaGVhZGVyKSkge1xuICAgICAgc2V0SGVhZGVycyhwYXJzZUhlYWRlcnMoaGVhZGVyKSwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc09iamVjdChoZWFkZXIpICYmIHV0aWxzJDEuaXNJdGVyYWJsZShoZWFkZXIpKSB7XG4gICAgICBsZXQgb2JqID0ge30sIGRlc3QsIGtleTtcbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgaGVhZGVyKSB7XG4gICAgICAgIGlmICghdXRpbHMkMS5pc0FycmF5KGVudHJ5KSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignT2JqZWN0IGl0ZXJhdG9yIG11c3QgcmV0dXJuIGEga2V5LXZhbHVlIHBhaXInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ialtrZXkgPSBlbnRyeVswXV0gPSAoZGVzdCA9IG9ialtrZXldKSA/XG4gICAgICAgICAgKHV0aWxzJDEuaXNBcnJheShkZXN0KSA/IFsuLi5kZXN0LCBlbnRyeVsxXV0gOiBbZGVzdCwgZW50cnlbMV1dKSA6IGVudHJ5WzFdO1xuICAgICAgfVxuXG4gICAgICBzZXRIZWFkZXJzKG9iaiwgdmFsdWVPclJld3JpdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMkMS5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscyQxLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0U2V0Q29va2llKCkge1xuICAgIHJldHVybiB0aGlzLmdldChcInNldC1jb29raWVcIikgfHwgW107XG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10oKSB7XG4gICAgcmV0dXJuICdBeGlvc0hlYWRlcnMnO1xuICB9XG5cbiAgc3RhdGljIGZyb20odGhpbmcpIHtcbiAgICByZXR1cm4gdGhpbmcgaW5zdGFuY2VvZiB0aGlzID8gdGhpbmcgOiBuZXcgdGhpcyh0aGluZyk7XG4gIH1cblxuICBzdGF0aWMgY29uY2F0KGZpcnN0LCAuLi50YXJnZXRzKSB7XG4gICAgY29uc3QgY29tcHV0ZWQgPSBuZXcgdGhpcyhmaXJzdCk7XG5cbiAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4gY29tcHV0ZWQuc2V0KHRhcmdldCkpO1xuXG4gICAgcmV0dXJuIGNvbXB1dGVkO1xuICB9XG5cbiAgc3RhdGljIGFjY2Vzc29yKGhlYWRlcikge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNbJGludGVybmFsc10gPSAodGhpc1skaW50ZXJuYWxzXSA9IHtcbiAgICAgIGFjY2Vzc29yczoge31cbiAgICB9KTtcblxuICAgIGNvbnN0IGFjY2Vzc29ycyA9IGludGVybmFscy5hY2Nlc3NvcnM7XG4gICAgY29uc3QgcHJvdG90eXBlID0gdGhpcy5wcm90b3R5cGU7XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVBY2Nlc3NvcihfaGVhZGVyKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWFjY2Vzc29yc1tsSGVhZGVyXSkge1xuICAgICAgICBidWlsZEFjY2Vzc29ycyhwcm90b3R5cGUsIF9oZWFkZXIpO1xuICAgICAgICBhY2Nlc3NvcnNbbEhlYWRlcl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHV0aWxzJDEuaXNBcnJheShoZWFkZXIpID8gaGVhZGVyLmZvckVhY2goZGVmaW5lQWNjZXNzb3IpIDogZGVmaW5lQWNjZXNzb3IoaGVhZGVyKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbkF4aW9zSGVhZGVycy5hY2Nlc3NvcihbJ0NvbnRlbnQtVHlwZScsICdDb250ZW50LUxlbmd0aCcsICdBY2NlcHQnLCAnQWNjZXB0LUVuY29kaW5nJywgJ1VzZXItQWdlbnQnLCAnQXV0aG9yaXphdGlvbiddKTtcblxuLy8gcmVzZXJ2ZWQgbmFtZXMgaG90Zml4XG51dGlscyQxLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMkMS5mcmVlemVNZXRob2RzKEF4aW9zSGVhZGVycyk7XG5cbnZhciBBeGlvc0hlYWRlcnMkMSA9IEF4aW9zSGVhZGVycztcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtBcnJheXxGdW5jdGlvbn0gZm5zIEEgc2luZ2xlIGZ1bmN0aW9uIG9yIEFycmF5IG9mIGZ1bmN0aW9uc1xuICogQHBhcmFtIHs/T2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2Ugb2JqZWN0XG4gKlxuICogQHJldHVybnMgeyp9IFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZWQgZGF0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1EYXRhKGZucywgcmVzcG9uc2UpIHtcbiAgY29uc3QgY29uZmlnID0gdGhpcyB8fCBkZWZhdWx0cyQxO1xuICBjb25zdCBjb250ZXh0ID0gcmVzcG9uc2UgfHwgY29uZmlnO1xuICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscyQxLmZvckVhY2goZm5zLCBmdW5jdGlvbiB0cmFuc2Zvcm0oZm4pIHtcbiAgICBkYXRhID0gZm4uY2FsbChjb25maWcsIGRhdGEsIGhlYWRlcnMubm9ybWFsaXplKCksIHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgaGVhZGVycy5ub3JtYWxpemUoKTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWwodmFsdWUpIHtcbiAgcmV0dXJuICEhKHZhbHVlICYmIHZhbHVlLl9fQ0FOQ0VMX18pO1xufVxuXG4vKipcbiAqIEEgYENhbmNlbGVkRXJyb3JgIGlzIGFuIG9iamVjdCB0aGF0IGlzIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjYW5jZWxlZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxlZEVycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIEF4aW9zRXJyb3IuY2FsbCh0aGlzLCBtZXNzYWdlID09IG51bGwgPyAnY2FuY2VsZWQnIDogbWVzc2FnZSwgQXhpb3NFcnJvci5FUlJfQ0FOQ0VMRUQsIGNvbmZpZywgcmVxdWVzdCk7XG4gIHRoaXMubmFtZSA9ICdDYW5jZWxlZEVycm9yJztcbn1cblxudXRpbHMkMS5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZSBkYXRhIG1heFJhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBbc2FtcGxlc0NvdW50PSAxMF1cbiAqIEBwYXJhbSB7TnVtYmVyfSBbbWluPSAxMDAwXVxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcGVlZG9tZXRlcihzYW1wbGVzQ291bnQsIG1pbikge1xuICBzYW1wbGVzQ291bnQgPSBzYW1wbGVzQ291bnQgfHwgMTA7XG4gIGNvbnN0IGJ5dGVzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGNvbnN0IHRpbWVzdGFtcHMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgbGV0IGhlYWQgPSAwO1xuICBsZXQgdGFpbCA9IDA7XG4gIGxldCBmaXJzdFNhbXBsZVRTO1xuXG4gIG1pbiA9IG1pbiAhPT0gdW5kZWZpbmVkID8gbWluIDogMTAwMDtcblxuICByZXR1cm4gZnVuY3Rpb24gcHVzaChjaHVua0xlbmd0aCkge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG5cbiAgICBjb25zdCBzdGFydGVkQXQgPSB0aW1lc3RhbXBzW3RhaWxdO1xuXG4gICAgaWYgKCFmaXJzdFNhbXBsZVRTKSB7XG4gICAgICBmaXJzdFNhbXBsZVRTID0gbm93O1xuICAgIH1cblxuICAgIGJ5dGVzW2hlYWRdID0gY2h1bmtMZW5ndGg7XG4gICAgdGltZXN0YW1wc1toZWFkXSA9IG5vdztcblxuICAgIGxldCBpID0gdGFpbDtcbiAgICBsZXQgYnl0ZXNDb3VudCA9IDA7XG5cbiAgICB3aGlsZSAoaSAhPT0gaGVhZCkge1xuICAgICAgYnl0ZXNDb3VudCArPSBieXRlc1tpKytdO1xuICAgICAgaSA9IGkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaGVhZCA9IChoZWFkICsgMSkgJSBzYW1wbGVzQ291bnQ7XG5cbiAgICBpZiAoaGVhZCA9PT0gdGFpbCkge1xuICAgICAgdGFpbCA9ICh0YWlsICsgMSkgJSBzYW1wbGVzQ291bnQ7XG4gICAgfVxuXG4gICAgaWYgKG5vdyAtIGZpcnN0U2FtcGxlVFMgPCBtaW4pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzZWQgPSBzdGFydGVkQXQgJiYgbm93IC0gc3RhcnRlZEF0O1xuXG4gICAgcmV0dXJuIHBhc3NlZCA/IE1hdGgucm91bmQoYnl0ZXNDb3VudCAqIDEwMDAgLyBwYXNzZWQpIDogdW5kZWZpbmVkO1xuICB9O1xufVxuXG4vKipcbiAqIFRocm90dGxlIGRlY29yYXRvclxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7TnVtYmVyfSBmcmVxXG4gKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gdGhyb3R0bGUoZm4sIGZyZXEpIHtcbiAgbGV0IHRpbWVzdGFtcCA9IDA7XG4gIGxldCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IGxhc3RBcmdzO1xuICBsZXQgdGltZXI7XG5cbiAgY29uc3QgaW52b2tlID0gKGFyZ3MsIG5vdyA9IERhdGUubm93KCkpID0+IHtcbiAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgbGFzdEFyZ3MgPSBudWxsO1xuICAgIGlmICh0aW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgZm4oLi4uYXJncyk7XG4gIH07XG5cbiAgY29uc3QgdGhyb3R0bGVkID0gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHBhc3NlZCA9IG5vdyAtIHRpbWVzdGFtcDtcbiAgICBpZiAoIHBhc3NlZCA+PSB0aHJlc2hvbGQpIHtcbiAgICAgIGludm9rZShhcmdzLCBub3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QXJncyA9IGFyZ3M7XG4gICAgICBpZiAoIXRpbWVyKSB7XG4gICAgICAgIHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICAgIGludm9rZShsYXN0QXJncyk7XG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGZsdXNoID0gKCkgPT4gbGFzdEFyZ3MgJiYgaW52b2tlKGxhc3RBcmdzKTtcblxuICByZXR1cm4gW3Rocm90dGxlZCwgZmx1c2hdO1xufVxuXG5jb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWVcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufTtcblxuY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbKGxvYWRlZCkgPT4gdGhyb3R0bGVkWzBdKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSwgdGhyb3R0bGVkWzFdXTtcbn07XG5cbmNvbnN0IGFzeW5jRGVjb3JhdG9yID0gKGZuKSA9PiAoLi4uYXJncykgPT4gdXRpbHMkMS5hc2FwKCgpID0+IGZuKC4uLmFyZ3MpKTtcblxudmFyIGlzVVJMU2FtZU9yaWdpbiA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/ICgob3JpZ2luLCBpc01TSUUpID0+ICh1cmwpID0+IHtcbiAgdXJsID0gbmV3IFVSTCh1cmwsIHBsYXRmb3JtLm9yaWdpbik7XG5cbiAgcmV0dXJuIChcbiAgICBvcmlnaW4ucHJvdG9jb2wgPT09IHVybC5wcm90b2NvbCAmJlxuICAgIG9yaWdpbi5ob3N0ID09PSB1cmwuaG9zdCAmJlxuICAgIChpc01TSUUgfHwgb3JpZ2luLnBvcnQgPT09IHVybC5wb3J0KVxuICApO1xufSkoXG4gIG5ldyBVUkwocGxhdGZvcm0ub3JpZ2luKSxcbiAgcGxhdGZvcm0ubmF2aWdhdG9yICYmIC8obXNpZXx0cmlkZW50KS9pLnRlc3QocGxhdGZvcm0ubmF2aWdhdG9yLnVzZXJBZ2VudClcbikgOiAoKSA9PiB0cnVlO1xuXG52YXIgY29va2llcyA9IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiA/XG5cbiAgLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIHN1cHBvcnQgZG9jdW1lbnQuY29va2llXG4gIHtcbiAgICB3cml0ZShuYW1lLCB2YWx1ZSwgZXhwaXJlcywgcGF0aCwgZG9tYWluLCBzZWN1cmUpIHtcbiAgICAgIGNvbnN0IGNvb2tpZSA9IFtuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKV07XG5cbiAgICAgIHV0aWxzJDEuaXNOdW1iZXIoZXhwaXJlcykgJiYgY29va2llLnB1c2goJ2V4cGlyZXM9JyArIG5ldyBEYXRlKGV4cGlyZXMpLnRvR01UU3RyaW5nKCkpO1xuXG4gICAgICB1dGlscyQxLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhkb21haW4pICYmIGNvb2tpZS5wdXNoKCdkb21haW49JyArIGRvbWFpbik7XG5cbiAgICAgIHNlY3VyZSA9PT0gdHJ1ZSAmJiBjb29raWUucHVzaCgnc2VjdXJlJyk7XG5cbiAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGNvb2tpZS5qb2luKCc7ICcpO1xuICAgIH0sXG5cbiAgICByZWFkKG5hbWUpIHtcbiAgICAgIGNvbnN0IG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgIHJldHVybiAobWF0Y2ggPyBkZWNvZGVVUklDb21wb25lbnQobWF0Y2hbM10pIDogbnVsbCk7XG4gICAgfSxcblxuICAgIHJlbW92ZShuYW1lKSB7XG4gICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgIH1cbiAgfVxuXG4gIDpcblxuICAvLyBOb24tc3RhbmRhcmQgYnJvd3NlciBlbnYgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gIHtcbiAgICB3cml0ZSgpIHt9LFxuICAgIHJlYWQoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZSgpIHt9XG4gIH07XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgVVJMIGlzIGFic29sdXRlXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgVVJMIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQWJzb2x1dGVVUkwodXJsKSB7XG4gIC8vIEEgVVJMIGlzIGNvbnNpZGVyZWQgYWJzb2x1dGUgaWYgaXQgYmVnaW5zIHdpdGggXCI8c2NoZW1lPjovL1wiIG9yIFwiLy9cIiAocHJvdG9jb2wtcmVsYXRpdmUgVVJMKS5cbiAgLy8gUkZDIDM5ODYgZGVmaW5lcyBzY2hlbWUgbmFtZSBhcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGZvbGxvd2VkXG4gIC8vIGJ5IGFueSBjb21iaW5hdGlvbiBvZiBsZXR0ZXJzLCBkaWdpdHMsIHBsdXMsIHBlcmlvZCwgb3IgaHlwaGVuLlxuICByZXR1cm4gL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QodXJsKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBVUkxcbiAqL1xuZnVuY3Rpb24gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVsYXRpdmVVUkwpIHtcbiAgcmV0dXJuIHJlbGF0aXZlVVJMXG4gICAgPyBiYXNlVVJMLnJlcGxhY2UoL1xcLz9cXC8kLywgJycpICsgJy8nICsgcmVsYXRpdmVVUkwucmVwbGFjZSgvXlxcLysvLCAnJylcbiAgICA6IGJhc2VVUkw7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5mdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCwgYWxsb3dBYnNvbHV0ZVVybHMpIHtcbiAgbGV0IGlzUmVsYXRpdmVVcmwgPSAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpO1xuICBpZiAoYmFzZVVSTCAmJiAoaXNSZWxhdGl2ZVVybCB8fCBhbGxvd0Fic29sdXRlVXJscyA9PSBmYWxzZSkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuXG5jb25zdCBoZWFkZXJzVG9PYmplY3QgPSAodGhpbmcpID0+IHRoaW5nIGluc3RhbmNlb2YgQXhpb3NIZWFkZXJzJDEgPyB7IC4uLnRoaW5nIH0gOiB0aGluZztcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKlxuICogQHJldHVybnMge09iamVjdH0gTmV3IG9iamVjdCByZXN1bHRpbmcgZnJvbSBtZXJnaW5nIGNvbmZpZzIgdG8gY29uZmlnMVxuICovXG5mdW5jdGlvbiBtZXJnZUNvbmZpZyhjb25maWcxLCBjb25maWcyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBjb25maWcyID0gY29uZmlnMiB8fCB7fTtcbiAgY29uc3QgY29uZmlnID0ge307XG5cbiAgZnVuY3Rpb24gZ2V0TWVyZ2VkVmFsdWUodGFyZ2V0LCBzb3VyY2UsIHByb3AsIGNhc2VsZXNzKSB7XG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZS5jYWxsKHtjYXNlbGVzc30sIHRhcmdldCwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMkMS5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNBcnJheShzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gc291cmNlLnNsaWNlKCk7XG4gICAgfVxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEZWVwUHJvcGVydGllcyhhLCBiLCBwcm9wICwgY2FzZWxlc3MpIHtcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBwcm9wICwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIHByb3AgLCBjYXNlbGVzcyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIGRlZmF1bHRUb0NvbmZpZzIoYSwgYikge1xuICAgIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMkMS5pc1VuZGVmaW5lZChhKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhhLCBiLCBwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGEsIGIpO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBtZXJnZU1hcCA9IHtcbiAgICB1cmw6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgbWV0aG9kOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGRhdGE6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgYmFzZVVSTDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXF1ZXN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlc3BvbnNlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHBhcmFtc1NlcmlhbGl6ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0TWVzc2FnZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoQ3JlZGVudGlhbHM6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aFhTUkZUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBhZGFwdGVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlVHlwZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmQ29va2llTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB4c3JmSGVhZGVyTmFtZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvblVwbG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uRG93bmxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBkZWNvbXByZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heENvbnRlbnRMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Qm9keUxlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBiZWZvcmVSZWRpcmVjdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc3BvcnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cEFnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBzQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgY2FuY2VsVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgc29ja2V0UGF0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZUVuY29kaW5nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHZhbGlkYXRlU3RhdHVzOiBtZXJnZURpcmVjdEtleXMsXG4gICAgaGVhZGVyczogKGEsIGIgLCBwcm9wKSA9PiBtZXJnZURlZXBQcm9wZXJ0aWVzKGhlYWRlcnNUb09iamVjdChhKSwgaGVhZGVyc1RvT2JqZWN0KGIpLHByb3AsIHRydWUpXG4gIH07XG5cbiAgdXRpbHMkMS5mb3JFYWNoKE9iamVjdC5rZXlzKHsuLi5jb25maWcxLCAuLi5jb25maWcyfSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgY29uc3QgbWVyZ2UgPSBtZXJnZU1hcFtwcm9wXSB8fCBtZXJnZURlZXBQcm9wZXJ0aWVzO1xuICAgIGNvbnN0IGNvbmZpZ1ZhbHVlID0gbWVyZ2UoY29uZmlnMVtwcm9wXSwgY29uZmlnMltwcm9wXSwgcHJvcCk7XG4gICAgKHV0aWxzJDEuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59XG5cbnZhciByZXNvbHZlQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICBjb25zdCBuZXdDb25maWcgPSBtZXJnZUNvbmZpZyh7fSwgY29uZmlnKTtcblxuICBsZXQgeyBkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGggfSA9IG5ld0NvbmZpZztcblxuICBuZXdDb25maWcuaGVhZGVycyA9IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsLCBuZXdDb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZGF0YSkpIHtcbiAgICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52IHx8IHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudikge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSh1bmRlZmluZWQpOyAvLyBicm93c2VyIGhhbmRsZXMgaXRcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICAvLyBOb2RlLmpzIEZvcm1EYXRhIChsaWtlIGZvcm0tZGF0YSBwYWNrYWdlKVxuICAgICAgY29uc3QgZm9ybUhlYWRlcnMgPSBkYXRhLmdldEhlYWRlcnMoKTtcbiAgICAgIC8vIE9ubHkgc2V0IHNhZmUgaGVhZGVycyB0byBhdm9pZCBvdmVyd3JpdGluZyBzZWN1cml0eSBoZWFkZXJzXG4gICAgICBjb25zdCBhbGxvd2VkSGVhZGVycyA9IFsnY29udGVudC10eXBlJywgJ2NvbnRlbnQtbGVuZ3RoJ107XG4gICAgICBPYmplY3QuZW50cmllcyhmb3JtSGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsXSkgPT4ge1xuICAgICAgICBpZiAoYWxsb3dlZEhlYWRlcnMuaW5jbHVkZXMoa2V5LnRvTG93ZXJDYXNlKCkpKSB7XG4gICAgICAgICAgaGVhZGVycy5zZXQoa2V5LCB2YWwpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0gIFxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscyQxLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufTtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxudmFyIHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlLCBvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gX2NvbmZpZztcbiAgICBsZXQgb25DYW5jZWxlZDtcbiAgICBsZXQgdXBsb2FkVGhyb3R0bGVkLCBkb3dubG9hZFRocm90dGxlZDtcbiAgICBsZXQgZmx1c2hVcGxvYWQsIGZsdXNoRG93bmxvYWQ7XG5cbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZmx1c2hVcGxvYWQgJiYgZmx1c2hVcGxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG4gICAgICBmbHVzaERvd25sb2FkICYmIGZsdXNoRG93bmxvYWQoKTsgLy8gZmx1c2ggZXZlbnRzXG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShvbkNhbmNlbGVkKTtcblxuICAgICAgX2NvbmZpZy5zaWduYWwgJiYgX2NvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgcmVxdWVzdC5vcGVuKF9jb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCksIF9jb25maWcudXJsLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gX2NvbmZpZy50aW1lb3V0O1xuXG4gICAgZnVuY3Rpb24gb25sb2FkZW5kKCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8vIFByZXBhcmUgdGhlIHJlc3BvbnNlXG4gICAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKFxuICAgICAgICAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ICYmIHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcbiAgICAgICk7XG4gICAgICBjb25zdCByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nID9cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRleHQgOiByZXF1ZXN0LnJlc3BvbnNlO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSB7XG4gICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgc3RhdHVzOiByZXF1ZXN0LnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVxdWVzdC5zdGF0dXNUZXh0LFxuICAgICAgICBoZWFkZXJzOiByZXNwb25zZUhlYWRlcnMsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfTtcblxuICAgICAgc2V0dGxlKGZ1bmN0aW9uIF9yZXNvbHZlKHZhbHVlKSB7XG4gICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCBmdW5jdGlvbiBfcmVqZWN0KGVycikge1xuICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgcmVzcG9uc2UpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoJ29ubG9hZGVuZCcgaW4gcmVxdWVzdCkge1xuICAgICAgLy8gVXNlIG9ubG9hZGVuZCBpZiBhdmFpbGFibGVcbiAgICAgIHJlcXVlc3Qub25sb2FkZW5kID0gb25sb2FkZW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBMaXN0ZW4gZm9yIHJlYWR5IHN0YXRlIHRvIGVtdWxhdGUgb25sb2FkZW5kXG4gICAgICByZXF1ZXN0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uIGhhbmRsZUxvYWQoKSB7XG4gICAgICAgIGlmICghcmVxdWVzdCB8fCByZXF1ZXN0LnJlYWR5U3RhdGUgIT09IDQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgcmVxdWVzdCBlcnJvcmVkIG91dCBhbmQgd2UgZGlkbid0IGdldCBhIHJlc3BvbnNlLCB0aGlzIHdpbGwgYmVcbiAgICAgICAgLy8gaGFuZGxlZCBieSBvbmVycm9yIGluc3RlYWRcbiAgICAgICAgLy8gV2l0aCBvbmUgZXhjZXB0aW9uOiByZXF1ZXN0IHRoYXQgdXNpbmcgZmlsZTogcHJvdG9jb2wsIG1vc3QgYnJvd3NlcnNcbiAgICAgICAgLy8gd2lsbCByZXR1cm4gc3RhdHVzIGFzIDAgZXZlbiB0aG91Z2ggaXQncyBhIHN1Y2Nlc3NmdWwgcmVxdWVzdFxuICAgICAgICBpZiAocmVxdWVzdC5zdGF0dXMgPT09IDAgJiYgIShyZXF1ZXN0LnJlc3BvbnNlVVJMICYmIHJlcXVlc3QucmVzcG9uc2VVUkwuaW5kZXhPZignZmlsZTonKSA9PT0gMCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVhZHlzdGF0ZSBoYW5kbGVyIGlzIGNhbGxpbmcgYmVmb3JlIG9uZXJyb3Igb3Igb250aW1lb3V0IGhhbmRsZXJzLFxuICAgICAgICAvLyBzbyB3ZSBzaG91bGQgY2FsbCBvbmxvYWRlbmQgb24gdGhlIG5leHQgJ3RpY2snXG4gICAgICAgIHNldFRpbWVvdXQob25sb2FkZW5kKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIGJyb3dzZXIgcmVxdWVzdCBjYW5jZWxsYXRpb24gKGFzIG9wcG9zZWQgdG8gYSBtYW51YWwgY2FuY2VsbGF0aW9uKVxuICAgIHJlcXVlc3Qub25hYm9ydCA9IGZ1bmN0aW9uIGhhbmRsZUFib3J0KCkge1xuICAgICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdSZXF1ZXN0IGFib3J0ZWQnLCBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCwgY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKGV2ZW50KSB7XG4gICAgICAgLy8gQnJvd3NlcnMgZGVsaXZlciBhIFByb2dyZXNzRXZlbnQgaW4gWEhSIG9uZXJyb3JcbiAgICAgICAvLyAobWVzc2FnZSBtYXkgYmUgZW1wdHk7IHdoZW4gcHJlc2VudCwgc3VyZmFjZSBpdClcbiAgICAgICAvLyBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1hNTEh0dHBSZXF1ZXN0L2Vycm9yX2V2ZW50XG4gICAgICAgY29uc3QgbXNnID0gZXZlbnQgJiYgZXZlbnQubWVzc2FnZSA/IGV2ZW50Lm1lc3NhZ2UgOiAnTmV0d29yayBFcnJvcic7XG4gICAgICAgY29uc3QgZXJyID0gbmV3IEF4aW9zRXJyb3IobXNnLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgIC8vIGF0dGFjaCB0aGUgdW5kZXJseWluZyBldmVudCBmb3IgY29uc3VtZXJzIHdobyB3YW50IGRldGFpbHNcbiAgICAgICBlcnIuZXZlbnQgPSBldmVudCB8fCBudWxsO1xuICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG4gICAgXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBfY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBSZW1vdmUgQ29udGVudC1UeXBlIGlmIGRhdGEgaXMgdW5kZWZpbmVkXG4gICAgcmVxdWVzdERhdGEgPT09IHVuZGVmaW5lZCAmJiByZXF1ZXN0SGVhZGVycy5zZXRDb250ZW50VHlwZShudWxsKTtcblxuICAgIC8vIEFkZCBoZWFkZXJzIHRvIHRoZSByZXF1ZXN0XG4gICAgaWYgKCdzZXRSZXF1ZXN0SGVhZGVyJyBpbiByZXF1ZXN0KSB7XG4gICAgICB1dGlscyQxLmZvckVhY2gocmVxdWVzdEhlYWRlcnMudG9KU09OKCksIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEFkZCB3aXRoQ3JlZGVudGlhbHMgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59O1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHtsZW5ndGh9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgbGV0IHRpbWVyID0gdGltZW91dCAmJiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgIG9uYWJvcnQobmV3IEF4aW9zRXJyb3IoYHRpbWVvdXQgJHt0aW1lb3V0fSBvZiBtcyBleGNlZWRlZGAsIEF4aW9zRXJyb3IuRVRJTUVET1VUKSk7XG4gICAgfSwgdGltZW91dCk7XG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzaWduYWxzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgc2lnbmFscy5mb3JFYWNoKChzaWduYWwpID0+IHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpKTtcblxuICAgIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICAgIHNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHV0aWxzJDEuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgICByZXR1cm4gc2lnbmFsO1xuICB9XG59O1xuXG52YXIgY29tcG9zZVNpZ25hbHMkMSA9IGNvbXBvc2VTaWduYWxzO1xuXG5jb25zdCBzdHJlYW1DaHVuayA9IGZ1bmN0aW9uKiAoY2h1bmssIGNodW5rU2l6ZSkge1xuICBsZXQgbGVuID0gY2h1bmsuYnl0ZUxlbmd0aDtcblxuICBpZiAoIWNodW5rU2l6ZSB8fCBsZW4gPCBjaHVua1NpemUpIHtcbiAgICB5aWVsZCBjaHVuaztcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgcG9zID0gMDtcbiAgbGV0IGVuZDtcblxuICB3aGlsZSAocG9zIDwgbGVuKSB7XG4gICAgZW5kID0gcG9zICsgY2h1bmtTaXplO1xuICAgIHlpZWxkIGNodW5rLnNsaWNlKHBvcywgZW5kKTtcbiAgICBwb3MgPSBlbmQ7XG4gIH1cbn07XG5cbmNvbnN0IHJlYWRCeXRlcyA9IGFzeW5jIGZ1bmN0aW9uKiAoaXRlcmFibGUsIGNodW5rU2l6ZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHJlYWRTdHJlYW0oaXRlcmFibGUpKSB7XG4gICAgeWllbGQqIHN0cmVhbUNodW5rKGNodW5rLCBjaHVua1NpemUpO1xuICB9XG59O1xuXG5jb25zdCByZWFkU3RyZWFtID0gYXN5bmMgZnVuY3Rpb24qIChzdHJlYW0pIHtcbiAgaWYgKHN0cmVhbVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogc3RyZWFtO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlYWRlci5jYW5jZWwoKTtcbiAgfVxufTtcblxuY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoKSA9PiB7XG4gIGNvbnN0IGl0ZXJhdG9yID0gcmVhZEJ5dGVzKHN0cmVhbSwgY2h1bmtTaXplKTtcblxuICBsZXQgYnl0ZXMgPSAwO1xuICBsZXQgZG9uZTtcbiAgbGV0IF9vbkZpbmlzaCA9IChlKSA9PiB7XG4gICAgaWYgKCFkb25lKSB7XG4gICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIG9uRmluaXNoICYmIG9uRmluaXNoKGUpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn07XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qge2lzRnVuY3Rpb259ID0gdXRpbHMkMTtcblxuY29uc3QgZ2xvYmFsRmV0Y2hBUEkgPSAoKHtSZXF1ZXN0LCBSZXNwb25zZX0pID0+ICh7XG4gIFJlcXVlc3QsIFJlc3BvbnNlXG59KSkodXRpbHMkMS5nbG9iYWwpO1xuXG5jb25zdCB7XG4gIFJlYWRhYmxlU3RyZWFtOiBSZWFkYWJsZVN0cmVhbSQxLCBUZXh0RW5jb2RlclxufSA9IHV0aWxzJDEuZ2xvYmFsO1xuXG5cbmNvbnN0IHRlc3QgPSAoZm4sIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59O1xuXG5jb25zdCBmYWN0b3J5ID0gKGVudikgPT4ge1xuICBlbnYgPSB1dGlscyQxLm1lcmdlLmNhbGwoe1xuICAgIHNraXBVbmRlZmluZWQ6IHRydWVcbiAgfSwgZ2xvYmFsRmV0Y2hBUEksIGVudik7XG5cbiAgY29uc3Qge2ZldGNoOiBlbnZGZXRjaCwgUmVxdWVzdCwgUmVzcG9uc2V9ID0gZW52O1xuICBjb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gZW52RmV0Y2ggPyBpc0Z1bmN0aW9uKGVudkZldGNoKSA6IHR5cGVvZiBmZXRjaCA9PT0gJ2Z1bmN0aW9uJztcbiAgY29uc3QgaXNSZXF1ZXN0U3VwcG9ydGVkID0gaXNGdW5jdGlvbihSZXF1ZXN0KTtcbiAgY29uc3QgaXNSZXNwb25zZVN1cHBvcnRlZCA9IGlzRnVuY3Rpb24oUmVzcG9uc2UpO1xuXG4gIGlmICghaXNGZXRjaFN1cHBvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIGlzRnVuY3Rpb24oUmVhZGFibGVTdHJlYW0kMSk7XG5cbiAgY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgICBhc3luYyAoc3RyKSA9PiBuZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVxdWVzdChzdHIpLmFycmF5QnVmZmVyKCkpXG4gICk7XG5cbiAgY29uc3Qgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtID0gaXNSZXF1ZXN0U3VwcG9ydGVkICYmIGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgdGVzdCgoKSA9PiB7XG4gICAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgICAgYm9keTogbmV3IFJlYWRhYmxlU3RyZWFtJDEoKSxcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgZ2V0IGR1cGxleCgpIHtcbiAgICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gJ2hhbGYnO1xuICAgICAgfSxcbiAgICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xuICB9KTtcblxuICBjb25zdCBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtID0gaXNSZXNwb25zZVN1cHBvcnRlZCAmJiBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmXG4gICAgdGVzdCgoKSA9PiB1dGlscyQxLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCcnKS5ib2R5KSk7XG5cbiAgY29uc3QgcmVzb2x2ZXJzID0ge1xuICAgIHN0cmVhbTogc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAoKHJlcykgPT4gcmVzLmJvZHkpXG4gIH07XG5cbiAgaXNGZXRjaFN1cHBvcnRlZCAmJiAoKCgpID0+IHtcbiAgICBbJ3RleHQnLCAnYXJyYXlCdWZmZXInLCAnYmxvYicsICdmb3JtRGF0YScsICdzdHJlYW0nXS5mb3JFYWNoKHR5cGUgPT4ge1xuICAgICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gKHJlcywgY29uZmlnKSA9PiB7XG4gICAgICAgIGxldCBtZXRob2QgPSByZXMgJiYgcmVzW3R5cGVdO1xuXG4gICAgICAgIGlmIChtZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gbWV0aG9kLmNhbGwocmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKGBSZXNwb25zZSB0eXBlICcke3R5cGV9JyBpcyBub3Qgc3VwcG9ydGVkYCwgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQsIGNvbmZpZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSkoKSk7XG5cbiAgY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNCbG9iKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5zaXplO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzU3BlY0NvbXBsaWFudEZvcm0oYm9keSkpIHtcbiAgICAgIGNvbnN0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QocGxhdGZvcm0ub3JpZ2luLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5LFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzJDEuaXNBcnJheUJ1ZmZlclZpZXcoYm9keSkgfHwgdXRpbHMkMS5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgICBib2R5ID0gYm9keSArICcnO1xuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgICByZXR1cm4gKGF3YWl0IGVuY29kZVRleHQoYm9keSkpLmJ5dGVMZW5ndGg7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgICBjb25zdCBsZW5ndGggPSB1dGlscyQxLnRvRmluaXRlTnVtYmVyKGhlYWRlcnMuZ2V0Q29udGVudExlbmd0aCgpKTtcblxuICAgIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG4gIH07XG5cbiAgcmV0dXJuIGFzeW5jIChjb25maWcpID0+IHtcbiAgICBsZXQge1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kLFxuICAgICAgZGF0YSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIGNhbmNlbFRva2VuLFxuICAgICAgdGltZW91dCxcbiAgICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgICByZXNwb25zZVR5cGUsXG4gICAgICBoZWFkZXJzLFxuICAgICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICAgIGZldGNoT3B0aW9uc1xuICAgIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgICBsZXQgX2ZldGNoID0gZW52RmV0Y2ggfHwgZmV0Y2g7XG5cbiAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgICBsZXQgY29tcG9zZWRTaWduYWwgPSBjb21wb3NlU2lnbmFscyQxKFtzaWduYWwsIGNhbmNlbFRva2VuICYmIGNhbmNlbFRva2VuLnRvQWJvcnRTaWduYWwoKV0sIHRpbWVvdXQpO1xuXG4gICAgbGV0IHJlcXVlc3QgPSBudWxsO1xuXG4gICAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJiAoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgICB9KTtcblxuICAgIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgICApIHtcbiAgICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgICBkdXBsZXg6IFwiaGFsZlwiXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGxldCBjb250ZW50VHlwZUhlYWRlcjtcblxuICAgICAgICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGNvbnRlbnRUeXBlSGVhZGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICByZXF1ZXN0Q29udGVudExlbmd0aCxcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uVXBsb2FkUHJvZ3Jlc3MpKVxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBkYXRhID0gdHJhY2tTdHJlYW0oX3JlcXVlc3QuYm9keSwgREVGQVVMVF9DSFVOS19TSVpFLCBvblByb2dyZXNzLCBmbHVzaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgICAgfVxuXG4gICAgICAvLyBDbG91ZGZsYXJlIFdvcmtlcnMgdGhyb3dzIHdoZW4gY3JlZGVudGlhbHMgYXJlIGRlZmluZWRcbiAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICAgIGNvbnN0IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPSBpc1JlcXVlc3RTdXBwb3J0ZWQgJiYgXCJjcmVkZW50aWFsc1wiIGluIFJlcXVlc3QucHJvdG90eXBlO1xuXG4gICAgICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSB7XG4gICAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgICAgc2lnbmFsOiBjb21wb3NlZFNpZ25hbCxcbiAgICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgICAgYm9keTogZGF0YSxcbiAgICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWRcbiAgICAgIH07XG5cbiAgICAgIHJlcXVlc3QgPSBpc1JlcXVlc3RTdXBwb3J0ZWQgJiYgbmV3IFJlcXVlc3QodXJsLCByZXNvbHZlZE9wdGlvbnMpO1xuXG4gICAgICBsZXQgcmVzcG9uc2UgPSBhd2FpdCAoaXNSZXF1ZXN0U3VwcG9ydGVkID8gX2ZldGNoKHJlcXVlc3QsIGZldGNoT3B0aW9ucykgOiBfZmV0Y2godXJsLCByZXNvbHZlZE9wdGlvbnMpKTtcblxuICAgICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCAoaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSkpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcblxuICAgICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICAgIG9wdGlvbnNbcHJvcF0gPSByZXNwb25zZVtwcm9wXTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IG9uRG93bmxvYWRQcm9ncmVzcyAmJiBwcm9ncmVzc0V2ZW50RGVjb3JhdG9yKFxuICAgICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvbkRvd25sb2FkUHJvZ3Jlc3MpLCB0cnVlKVxuICAgICAgICApIHx8IFtdO1xuXG4gICAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICAgIHRyYWNrU3RyZWFtKHJlc3BvbnNlLmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgKCkgPT4ge1xuICAgICAgICAgICAgZmx1c2ggJiYgZmx1c2goKTtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgfHwgJ3RleHQnO1xuXG4gICAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzJDEuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICAgIWlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICAgIGRhdGE6IHJlc3BvbnNlRGF0YSxcbiAgICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICAgIHN0YXR1czogcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlcXVlc3RcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdW5zdWJzY3JpYmUgJiYgdW5zdWJzY3JpYmUoKTtcblxuICAgICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL0xvYWQgZmFpbGVkfGZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICBuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2F1c2U6IGVyci5jYXVzZSB8fCBlcnJcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgZXJyICYmIGVyci5jb2RlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgIH1cbiAgfVxufTtcblxuY29uc3Qgc2VlZENhY2hlID0gbmV3IE1hcCgpO1xuXG5jb25zdCBnZXRGZXRjaCA9IChjb25maWcpID0+IHtcbiAgbGV0IGVudiA9IGNvbmZpZyA/IGNvbmZpZy5lbnYgOiB7fTtcbiAgY29uc3Qge2ZldGNoLCBSZXF1ZXN0LCBSZXNwb25zZX0gPSBlbnY7XG4gIGNvbnN0IHNlZWRzID0gW1xuICAgIFJlcXVlc3QsIFJlc3BvbnNlLCBmZXRjaFxuICBdO1xuXG4gIGxldCBsZW4gPSBzZWVkcy5sZW5ndGgsIGkgPSBsZW4sXG4gICAgc2VlZCwgdGFyZ2V0LCBtYXAgPSBzZWVkQ2FjaGU7XG5cbiAgd2hpbGUgKGktLSkge1xuICAgIHNlZWQgPSBzZWVkc1tpXTtcbiAgICB0YXJnZXQgPSBtYXAuZ2V0KHNlZWQpO1xuXG4gICAgdGFyZ2V0ID09PSB1bmRlZmluZWQgJiYgbWFwLnNldChzZWVkLCB0YXJnZXQgPSAoaSA/IG5ldyBNYXAoKSA6IGZhY3RvcnkoZW52KSkpO1xuXG4gICAgbWFwID0gdGFyZ2V0O1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbmdldEZldGNoKCk7XG5cbmNvbnN0IGtub3duQWRhcHRlcnMgPSB7XG4gIGh0dHA6IGh0dHBBZGFwdGVyLFxuICB4aHI6IHhockFkYXB0ZXIsXG4gIGZldGNoOiB7XG4gICAgZ2V0OiBnZXRGZXRjaCxcbiAgfVxufTtcblxudXRpbHMkMS5mb3JFYWNoKGtub3duQWRhcHRlcnMsIChmbiwgdmFsdWUpID0+IHtcbiAgaWYgKGZuKSB7XG4gICAgdHJ5IHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWV9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHlcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnYWRhcHRlck5hbWUnLCB7dmFsdWV9KTtcbiAgfVxufSk7XG5cbmNvbnN0IHJlbmRlclJlYXNvbiA9IChyZWFzb24pID0+IGAtICR7cmVhc29ufWA7XG5cbmNvbnN0IGlzUmVzb2x2ZWRIYW5kbGUgPSAoYWRhcHRlcikgPT4gdXRpbHMkMS5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbnZhciBhZGFwdGVycyA9IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzLCBjb25maWcpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIgJiYgKHV0aWxzJDEuaXNGdW5jdGlvbihhZGFwdGVyKSB8fCAoYWRhcHRlciA9IGFkYXB0ZXIuZ2V0KGNvbmZpZykpKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufTtcblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZykge1xuICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgY29uZmlnLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKTtcbiAgfVxuXG4gIGlmIChjb25maWcuc2lnbmFsICYmIGNvbmZpZy5zaWduYWwuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZyk7XG4gIH1cbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3QgdG8gdGhlIHNlcnZlciB1c2luZyB0aGUgY29uZmlndXJlZCBhZGFwdGVyLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge1Byb21pc2V9IFRoZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZFxuICovXG5mdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cyQxLmFkYXB0ZXIsIGNvbmZpZyk7XG5cbiAgcmV0dXJuIGFkYXB0ZXIoY29uZmlnKS50aGVuKGZ1bmN0aW9uIG9uQWRhcHRlclJlc29sdXRpb24ocmVzcG9uc2UpIHtcbiAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgIHJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICBjb25maWcsXG4gICAgICBjb25maWcudHJhbnNmb3JtUmVzcG9uc2UsXG4gICAgICByZXNwb25zZVxuICAgICk7XG5cbiAgICByZXNwb25zZS5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QocmVhc29uKTtcbiAgfSk7XG59XG5cbmNvbnN0IFZFUlNJT04gPSBcIjEuMTIuMlwiO1xuXG5jb25zdCB2YWxpZGF0b3JzJDEgPSB7fTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblsnb2JqZWN0JywgJ2Jvb2xlYW4nLCAnbnVtYmVyJywgJ2Z1bmN0aW9uJywgJ3N0cmluZycsICdzeW1ib2wnXS5mb3JFYWNoKCh0eXBlLCBpKSA9PiB7XG4gIHZhbGlkYXRvcnMkMVt0eXBlXSA9IGZ1bmN0aW9uIHZhbGlkYXRvcih0aGluZykge1xuICAgIHJldHVybiB0eXBlb2YgdGhpbmcgPT09IHR5cGUgfHwgJ2EnICsgKGkgPCAxID8gJ24gJyA6ICcgJykgKyB0eXBlO1xuICB9O1xufSk7XG5cbmNvbnN0IGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbnxib29sZWFuP30gdmFsaWRhdG9yIC0gc2V0IHRvIGZhbHNlIGlmIHRoZSB0cmFuc2l0aW9uYWwgb3B0aW9uIGhhcyBiZWVuIHJlbW92ZWRcbiAqIEBwYXJhbSB7c3RyaW5nP30gdmVyc2lvbiAtIGRlcHJlY2F0ZWQgdmVyc2lvbiAvIHJlbW92ZWQgc2luY2UgdmVyc2lvblxuICogQHBhcmFtIHtzdHJpbmc/fSBtZXNzYWdlIC0gc29tZSBtZXNzYWdlIHdpdGggYWRkaXRpb25hbCBpbmZvXG4gKlxuICogQHJldHVybnMge2Z1bmN0aW9ufVxuICovXG52YWxpZGF0b3JzJDEudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxudmFsaWRhdG9ycyQxLnNwZWxsaW5nID0gZnVuY3Rpb24gc3BlbGxpbmcoY29ycmVjdFNwZWxsaW5nKSB7XG4gIHJldHVybiAodmFsdWUsIG9wdCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS53YXJuKGAke29wdH0gaXMgbGlrZWx5IGEgbWlzc3BlbGxpbmcgb2YgJHtjb3JyZWN0U3BlbGxpbmd9YCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRvciA9IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9ycyQxXG59O1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWcgfHwge307XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15ID0ge307XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHNcbiAgICBpZiAoY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzICE9PSB1bmRlZmluZWQpIDsgZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKGNvbmZpZywge1xuICAgICAgYmFzZVVybDogdmFsaWRhdG9ycy5zcGVsbGluZygnYmFzZVVSTCcpLFxuICAgICAgd2l0aFhzcmZUb2tlbjogdmFsaWRhdG9ycy5zcGVsbGluZygnd2l0aFhTUkZUb2tlbicpXG4gICAgfSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMkMS5tZXJnZShcbiAgICAgIGhlYWRlcnMuY29tbW9uLFxuICAgICAgaGVhZGVyc1tjb25maWcubWV0aG9kXVxuICAgICk7XG5cbiAgICBoZWFkZXJzICYmIHV0aWxzJDEuZm9yRWFjaChcbiAgICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgICAgKG1ldGhvZCkgPT4ge1xuICAgICAgICBkZWxldGUgaGVhZGVyc1ttZXRob2RdO1xuICAgICAgfVxuICAgICk7XG5cbiAgICBjb25maWcuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0KC4uLnJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2goLi4ucmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGxlbiA9IGNoYWluLmxlbmd0aDtcblxuICAgICAgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShjb25maWcpO1xuXG4gICAgICB3aGlsZSAoaSA8IGxlbikge1xuICAgICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluW2krK10sIGNoYWluW2krK10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9XG5cbiAgICBsZW4gPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi5sZW5ndGg7XG5cbiAgICBsZXQgbmV3Q29uZmlnID0gY29uZmlnO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCwgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzKTtcbiAgICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbiAgfVxufVxuXG4vLyBQcm92aWRlIGFsaWFzZXMgZm9yIHN1cHBvcnRlZCByZXF1ZXN0IG1ldGhvZHNcbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgZGF0YTogKGNvbmZpZyB8fCB7fSkuZGF0YVxuICAgIH0pKTtcbiAgfTtcbn0pO1xuXG51dGlscyQxLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxudmFyIEF4aW9zJDEgPSBBeGlvcztcblxuLyoqXG4gKiBBIGBDYW5jZWxUb2tlbmAgaXMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVxdWVzdCBjYW5jZWxsYXRpb24gb2YgYW4gb3BlcmF0aW9uLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGV4ZWN1dG9yIFRoZSBleGVjdXRvciBmdW5jdGlvbi5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsVG9rZW59XG4gKi9cbmNsYXNzIENhbmNlbFRva2VuIHtcbiAgY29uc3RydWN0b3IoZXhlY3V0b3IpIHtcbiAgICBpZiAodHlwZW9mIGV4ZWN1dG9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgbGV0IHJlc29sdmVQcm9taXNlO1xuXG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICAgIHJlc29sdmVQcm9taXNlID0gcmVzb2x2ZTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHRva2VuID0gdGhpcztcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4oY2FuY2VsID0+IHtcbiAgICAgIGlmICghdG9rZW4uX2xpc3RlbmVycykgcmV0dXJuO1xuXG4gICAgICBsZXQgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgICB0b2tlbi5fbGlzdGVuZXJzW2ldKGNhbmNlbCk7XG4gICAgICB9XG4gICAgICB0b2tlbi5fbGlzdGVuZXJzID0gbnVsbDtcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgdGhpcy5wcm9taXNlLnRoZW4gPSBvbmZ1bGZpbGxlZCA9PiB7XG4gICAgICBsZXQgX3Jlc29sdmU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0b2tlbi5zdWJzY3JpYmUocmVzb2x2ZSk7XG4gICAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIH0pLnRoZW4ob25mdWxmaWxsZWQpO1xuXG4gICAgICBwcm9taXNlLmNhbmNlbCA9IGZ1bmN0aW9uIHJlamVjdCgpIHtcbiAgICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfTtcblxuICAgIGV4ZWN1dG9yKGZ1bmN0aW9uIGNhbmNlbChtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpIHtcbiAgICAgIGlmICh0b2tlbi5yZWFzb24pIHtcbiAgICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICAgIHJlc29sdmVQcm9taXNlKHRva2VuLnJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gICAqL1xuICB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgdGhyb3cgdGhpcy5yZWFzb247XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZSB0byB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICBzdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFVuc3Vic2NyaWJlIGZyb20gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgdW5zdWJzY3JpYmUobGlzdGVuZXIpIHtcbiAgICBpZiAoIXRoaXMuX2xpc3RlbmVycykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gIH1cblxuICB0b0Fib3J0U2lnbmFsKCkge1xuICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyKTtcbiAgICB9O1xuXG4gICAgdGhpcy5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgY29udHJvbGxlci5zaWduYWwudW5zdWJzY3JpYmUgPSAoKSA9PiB0aGlzLnVuc3Vic2NyaWJlKGFib3J0KTtcblxuICAgIHJldHVybiBjb250cm9sbGVyLnNpZ25hbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIG9iamVjdCB0aGF0IGNvbnRhaW5zIGEgbmV3IGBDYW5jZWxUb2tlbmAgYW5kIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsXG4gICAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gICAqL1xuICBzdGF0aWMgc291cmNlKCkge1xuICAgIGxldCBjYW5jZWw7XG4gICAgY29uc3QgdG9rZW4gPSBuZXcgQ2FuY2VsVG9rZW4oZnVuY3Rpb24gZXhlY3V0b3IoYykge1xuICAgICAgY2FuY2VsID0gYztcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9rZW4sXG4gICAgICBjYW5jZWxcbiAgICB9O1xuICB9XG59XG5cbnZhciBDYW5jZWxUb2tlbiQxID0gQ2FuY2VsVG9rZW47XG5cbi8qKlxuICogU3ludGFjdGljIHN1Z2FyIGZvciBpbnZva2luZyBhIGZ1bmN0aW9uIGFuZCBleHBhbmRpbmcgYW4gYXJyYXkgZm9yIGFyZ3VtZW50cy5cbiAqXG4gKiBDb21tb24gdXNlIGNhc2Ugd291bGQgYmUgdG8gdXNlIGBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHlgLlxuICpcbiAqICBgYGBqc1xuICogIGZ1bmN0aW9uIGYoeCwgeSwgeikge31cbiAqICB2YXIgYXJncyA9IFsxLCAyLCAzXTtcbiAqICBmLmFwcGx5KG51bGwsIGFyZ3MpO1xuICogIGBgYFxuICpcbiAqIFdpdGggYHNwcmVhZGAgdGhpcyBleGFtcGxlIGNhbiBiZSByZS13cml0dGVuLlxuICpcbiAqICBgYGBqc1xuICogIHNwcmVhZChmdW5jdGlvbih4LCB5LCB6KSB7fSkoWzEsIDIsIDNdKTtcbiAqICBgYGBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICpcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3NcbiAqXG4gKiBAcGFyYW0geyp9IHBheWxvYWQgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0F4aW9zRXJyb3IocGF5bG9hZCkge1xuICByZXR1cm4gdXRpbHMkMS5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufVxuXG5jb25zdCBIdHRwU3RhdHVzQ29kZSA9IHtcbiAgQ29udGludWU6IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzOiAxMDEsXG4gIFByb2Nlc3Npbmc6IDEwMixcbiAgRWFybHlIaW50czogMTAzLFxuICBPazogMjAwLFxuICBDcmVhdGVkOiAyMDEsXG4gIEFjY2VwdGVkOiAyMDIsXG4gIE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjogMjAzLFxuICBOb0NvbnRlbnQ6IDIwNCxcbiAgUmVzZXRDb250ZW50OiAyMDUsXG4gIFBhcnRpYWxDb250ZW50OiAyMDYsXG4gIE11bHRpU3RhdHVzOiAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZDogMjA4LFxuICBJbVVzZWQ6IDIyNixcbiAgTXVsdGlwbGVDaG9pY2VzOiAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHk6IDMwMSxcbiAgRm91bmQ6IDMwMixcbiAgU2VlT3RoZXI6IDMwMyxcbiAgTm90TW9kaWZpZWQ6IDMwNCxcbiAgVXNlUHJveHk6IDMwNSxcbiAgVW51c2VkOiAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0OiAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0OiAzMDgsXG4gIEJhZFJlcXVlc3Q6IDQwMCxcbiAgVW5hdXRob3JpemVkOiA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZDogNDAyLFxuICBGb3JiaWRkZW46IDQwMyxcbiAgTm90Rm91bmQ6IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZDogNDA1LFxuICBOb3RBY2NlcHRhYmxlOiA0MDYsXG4gIFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDogNDA3LFxuICBSZXF1ZXN0VGltZW91dDogNDA4LFxuICBDb25mbGljdDogNDA5LFxuICBHb25lOiA0MTAsXG4gIExlbmd0aFJlcXVpcmVkOiA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZDogNDEyLFxuICBQYXlsb2FkVG9vTGFyZ2U6IDQxMyxcbiAgVXJpVG9vTG9uZzogNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZTogNDE1LFxuICBSYW5nZU5vdFNhdGlzZmlhYmxlOiA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkOiA0MTcsXG4gIEltQVRlYXBvdDogNDE4LFxuICBNaXNkaXJlY3RlZFJlcXVlc3Q6IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eTogNDIyLFxuICBMb2NrZWQ6IDQyMyxcbiAgRmFpbGVkRGVwZW5kZW5jeTogNDI0LFxuICBUb29FYXJseTogNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQ6IDQyNixcbiAgUHJlY29uZGl0aW9uUmVxdWlyZWQ6IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzOiA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTogNDMxLFxuICBVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczogNDUxLFxuICBJbnRlcm5hbFNlcnZlckVycm9yOiA1MDAsXG4gIE5vdEltcGxlbWVudGVkOiA1MDEsXG4gIEJhZEdhdGV3YXk6IDUwMixcbiAgU2VydmljZVVuYXZhaWxhYmxlOiA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0OiA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOiA1MDUsXG4gIFZhcmlhbnRBbHNvTmVnb3RpYXRlczogNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlOiA1MDcsXG4gIExvb3BEZXRlY3RlZDogNTA4LFxuICBOb3RFeHRlbmRlZDogNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDogNTExLFxufTtcblxuT2JqZWN0LmVudHJpZXMoSHR0cFN0YXR1c0NvZGUpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICBIdHRwU3RhdHVzQ29kZVt2YWx1ZV0gPSBrZXk7XG59KTtcblxudmFyIEh0dHBTdGF0dXNDb2RlJDEgPSBIdHRwU3RhdHVzQ29kZTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm5zIHtBeGlvc30gQSBuZXcgaW5zdGFuY2Ugb2YgQXhpb3NcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdENvbmZpZykge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEF4aW9zJDEoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcyQxLnByb3RvdHlwZS5yZXF1ZXN0LCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGF4aW9zLnByb3RvdHlwZSB0byBpbnN0YW5jZVxuICB1dGlscyQxLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MkMS5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0LCBudWxsLCB7YWxsT3duS2V5czogdHJ1ZX0pO1xuXG4gIC8vIEZhY3RvcnkgZm9yIGNyZWF0aW5nIG5ldyBpbnN0YW5jZXNcbiAgaW5zdGFuY2UuY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluc3RhbmNlKG1lcmdlQ29uZmlnKGRlZmF1bHRDb25maWcsIGluc3RhbmNlQ29uZmlnKSk7XG4gIH07XG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuXG4vLyBDcmVhdGUgdGhlIGRlZmF1bHQgaW5zdGFuY2UgdG8gYmUgZXhwb3J0ZWRcbmNvbnN0IGF4aW9zID0gY3JlYXRlSW5zdGFuY2UoZGVmYXVsdHMkMSk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcyQxO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbiQxO1xuYXhpb3MuaXNDYW5jZWwgPSBpc0NhbmNlbDtcbmF4aW9zLlZFUlNJT04gPSBWRVJTSU9OO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHRvRm9ybURhdGE7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gQXhpb3NFcnJvcjtcblxuLy8gYWxpYXMgZm9yIENhbmNlbGVkRXJyb3IgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbmF4aW9zLkNhbmNlbCA9IGF4aW9zLkNhbmNlbGVkRXJyb3I7XG5cbi8vIEV4cG9zZSBhbGwvc3ByZWFkXG5heGlvcy5hbGwgPSBmdW5jdGlvbiBhbGwocHJvbWlzZXMpIHtcbiAgcmV0dXJuIFByb21pc2UuYWxsKHByb21pc2VzKTtcbn07XG5cbmF4aW9zLnNwcmVhZCA9IHNwcmVhZDtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gaXNBeGlvc0Vycm9yO1xuXG4vLyBFeHBvc2UgbWVyZ2VDb25maWdcbmF4aW9zLm1lcmdlQ29uZmlnID0gbWVyZ2VDb25maWc7XG5cbmF4aW9zLkF4aW9zSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxO1xuXG5heGlvcy5mb3JtVG9KU09OID0gdGhpbmcgPT4gZm9ybURhdGFUb0pTT04odXRpbHMkMS5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlJDE7XG5cbmF4aW9zLmRlZmF1bHQgPSBheGlvcztcblxubW9kdWxlLmV4cG9ydHMgPSBheGlvcztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF4aW9zLmNqcy5tYXBcbiIsIi8qZXh0ZXJuYWwgbW9kdWxlcyovXG4vKnR5cGVzKi9cbmltcG9ydCB7IFRPYmplY3QgfSBmcm9tICcuLi90eXBlcyc7XG4vKnV0aWxzKi9cbmltcG9ydCBpc05pbCBmcm9tICcuL2lzTmlsJztcbmltcG9ydCBpc051bGwgZnJvbSAnLi9pc051bGwnO1xuLypsaWIqL1xuLypvdGhlciovXG5cbmZ1bmN0aW9uIHNldFZhbHVlSWZOb3ROaWwoXG4gIHRhcmdldE9iamVjdDogVE9iamVjdC5Vbmtub3duUmVjLFxuICBwYXRoOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuKTogdm9pZCB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0T2JqZWN0ICE9PSAnb2JqZWN0JyB8fCBpc051bGwodGFyZ2V0T2JqZWN0KSkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInRhcmdldE9iamVjdFwiIGlzIG5vdCBvYmplY3QnKTtcbiAgfVxuXG4gIGlmICghcGF0aCkge1xuICAgIHRocm93IEVycm9yKCdBcmd1bWVudCBcInBhdGhcIiBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFpc05pbCh2YWx1ZSkpIHtcbiAgICB0YXJnZXRPYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzZXRWYWx1ZUlmTm90TmlsO1xuIiwiKGZ1bmN0aW9uIChuYW1lLCBjb250ZXh0LCBkZWZpbml0aW9uKSB7XG4gIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykgbW9kdWxlLmV4cG9ydHMgPSBkZWZpbml0aW9uKCk7XG4gIGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgZGVmaW5lKGRlZmluaXRpb24pO1xuICBlbHNlIGNvbnRleHRbbmFtZV0gPSBkZWZpbml0aW9uKCk7XG59KSgndXJsam9pbicsIHRoaXMsIGZ1bmN0aW9uICgpIHtcblxuICBmdW5jdGlvbiBub3JtYWxpemUgKHN0ckFycmF5KSB7XG4gICAgdmFyIHJlc3VsdEFycmF5ID0gW107XG4gICAgaWYgKHN0ckFycmF5Lmxlbmd0aCA9PT0gMCkgeyByZXR1cm4gJyc7IH1cblxuICAgIGlmICh0eXBlb2Ygc3RyQXJyYXlbMF0gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVcmwgbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgJyArIHN0ckFycmF5WzBdKTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgZmlyc3QgcGFydCBpcyBhIHBsYWluIHByb3RvY29sLCB3ZSBjb21iaW5lIGl0IHdpdGggdGhlIG5leHQgcGFydC5cbiAgICBpZiAoc3RyQXJyYXlbMF0ubWF0Y2goL15bXi86XSs6XFwvKiQvKSAmJiBzdHJBcnJheS5sZW5ndGggPiAxKSB7XG4gICAgICB2YXIgZmlyc3QgPSBzdHJBcnJheS5zaGlmdCgpO1xuICAgICAgc3RyQXJyYXlbMF0gPSBmaXJzdCArIHN0ckFycmF5WzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIG11c3QgYmUgdHdvIG9yIHRocmVlIHNsYXNoZXMgaW4gdGhlIGZpbGUgcHJvdG9jb2wsIHR3byBzbGFzaGVzIGluIGFueXRoaW5nIGVsc2UuXG4gICAgaWYgKHN0ckFycmF5WzBdLm1hdGNoKC9eZmlsZTpcXC9cXC9cXC8vKSkge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RyQXJyYXlbMF0gPSBzdHJBcnJheVswXS5yZXBsYWNlKC9eKFteLzpdKyk6XFwvKi8sICckMTovLycpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjb21wb25lbnQgPSBzdHJBcnJheVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VybCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgY29tcG9uZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbXBvbmVudCA9PT0gJycpIHsgY29udGludWU7IH1cblxuICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgIC8vIFJlbW92aW5nIHRoZSBzdGFydGluZyBzbGFzaGVzIGZvciBlYWNoIGNvbXBvbmVudCBidXQgdGhlIGZpcnN0LlxuICAgICAgICBjb21wb25lbnQgPSBjb21wb25lbnQucmVwbGFjZSgvXltcXC9dKy8sICcnKTtcbiAgICAgIH1cbiAgICAgIGlmIChpIDwgc3RyQXJyYXkubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyBSZW1vdmluZyB0aGUgZW5kaW5nIHNsYXNoZXMgZm9yIGVhY2ggY29tcG9uZW50IGJ1dCB0aGUgbGFzdC5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3IgdGhlIGxhc3QgY29tcG9uZW50IHdlIHdpbGwgY29tYmluZSBtdWx0aXBsZSBzbGFzaGVzIHRvIGEgc2luZ2xlIG9uZS5cbiAgICAgICAgY29tcG9uZW50ID0gY29tcG9uZW50LnJlcGxhY2UoL1tcXC9dKyQvLCAnLycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHRBcnJheS5wdXNoKGNvbXBvbmVudCk7XG5cbiAgICB9XG5cbiAgICB2YXIgc3RyID0gcmVzdWx0QXJyYXkuam9pbignLycpO1xuICAgIC8vIEVhY2ggaW5wdXQgY29tcG9uZW50IGlzIG5vdyBzZXBhcmF0ZWQgYnkgYSBzaW5nbGUgc2xhc2ggZXhjZXB0IHRoZSBwb3NzaWJsZSBmaXJzdCBwbGFpbiBwcm90b2NvbCBwYXJ0LlxuXG4gICAgLy8gcmVtb3ZlIHRyYWlsaW5nIHNsYXNoIGJlZm9yZSBwYXJhbWV0ZXJzIG9yIGhhc2hcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFwvKFxcP3wmfCNbXiFdKS9nLCAnJDEnKTtcblxuICAgIC8vIHJlcGxhY2UgPyBpbiBwYXJhbWV0ZXJzIHdpdGggJlxuICAgIHZhciBwYXJ0cyA9IHN0ci5zcGxpdCgnPycpO1xuICAgIHN0ciA9IHBhcnRzLnNoaWZ0KCkgKyAocGFydHMubGVuZ3RoID4gMCA/ICc/JzogJycpICsgcGFydHMuam9pbignJicpO1xuXG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGlucHV0O1xuXG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICBpbnB1dCA9IGFyZ3VtZW50c1swXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5wdXQgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZShpbnB1dCk7XG4gIH07XG5cbn0pO1xuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdHlwZXMqL1xuLyp1dGlscyovXG5pbXBvcnQgaXNOdWxsIGZyb20gJy4vaXNOdWxsJztcbmltcG9ydCBpc1VuZGVmaW5lZCBmcm9tICcuL2lzVW5kZWZpbmVkJztcbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc05pbCh2YWx1ZTogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNVbmRlZmluZWQodmFsdWUpIHx8IGlzTnVsbCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzTmlsO1xuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFRlbXBsYXRlIHtcbiAgZXhwb3J0IGVudW0gQ2F0ZWdvcmllcyB7XG4gICAgRnVsbCA9ICdmdWxsJyxcbiAgICBCYXNpYyA9ICdiYXNpYycsXG4gICAgTmV3c0xldHRlciA9ICduZXdzbGV0dGVyJyxcbiAgICBFQ29tbWVyY2UgPSAnZS1jb21tZXJjZScsXG4gICAgRXZlbnRzID0gJ2V2ZW50cycsXG4gICAgVHJhdmVsID0gJ3RyYXZlbCcsXG4gICAgU3BvcnRzID0gJ3Nwb3J0cycsXG4gICAgV2VsY29tZSA9ICd3ZWxjb21lJyxcbiAgICBDb250YWN0UHJvcGVydHlVcGRhdGUgPSAnY29udGFjdC1wcm9wZXJ0eS11cGRhdGUnLFxuICAgIFN1cHBvcnQgPSAnc3VwcG9ydCcsXG4gICAgSW52b2ljZSA9ICdpbnZvaWNlJyxcbiAgICBBbm5pdmVyc2FyeSA9ICdhbm5pdmVyc2FyeScsXG4gICAgQWNjb3VudCA9ICdhY2NvdW50JyxcbiAgICBBY3RpdmF0aW9uID0gJ2FjdGl2YXRpb24nXG4gIH1cblxuICBleHBvcnQgZW51bSBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kIHtcbiAgICBDb250YWluc0FueSA9ICdjb250YWluc2FueScsXG4gICAgQ29udGFpbnNBbGwgPSAnY29udGFpbnNhbGwnLFxuICAgIElzU3ViU2V0ID0gJ2lzc3Vic2V0J1xuICB9XG5cbiAgZXhwb3J0IGVudW0gRWRpdE1vZGUge1xuICAgIERyYWdBbmREcm9wQnVpbGRlciA9IDEsXG4gICAgSFRNTEJ1aWxkZXIgPSAyLFxuICAgIFNhdmVkU2VjdGlvbkJ1aWxkZXIgPSAzLFxuICAgIE1KTUxCdWlsZGVyID0gNFxuICB9XG5cbiAgZXhwb3J0IGVudW0gT3duZXJUeXBlIHtcbiAgICBBcGlLZXkgPSAnYXBpa2V5JyxcbiAgICBVc2VyID0gJ3VzZXInLFxuICAgIEdsb2JhbCA9ICdnbG9iYWwnXG4gIH1cblxuICBleHBvcnQgZW51bSBQdXJwb3NlcyB7XG4gICAgTWFya2V0aW5nID0gJ21hcmtldGluZycsXG4gICAgVHJhbnNhY3Rpb25hbCA9ICd0cmFuc2FjdGlvbmFsJyxcbiAgICBBdXRvbWF0aW9uID0gJ2F1dG9tYXRpb24nXG4gIH1cblxuICBleHBvcnQgZW51bSBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZCB7XG4gICAgQ29udGFpbnNBbnkgPSAnY29udGFpbnNhbnknLFxuICAgIENvbnRhaW5zQWxsID0gJ2NvbnRhaW5zYWxsJyxcbiAgICBJc1N1YlNldCA9ICdpc3N1YnNldCdcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgSGVhZGVycyB7XG4gICAgRnJvbTogc3RyaW5nO1xuICAgIFN1YmplY3Q6IHN0cmluZztcbiAgICAnUmVwbHktdG8nOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlIHtcbiAgICBBdXRob3I6IHN0cmluZztcbiAgICBDYXRlZ29yaWVzOiBDYXRlZ29yaWVzW107XG4gICAgQ29weXJpZ2h0OiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb246IHN0cmluZztcbiAgICBFZGl0TW9kZTogRWRpdE1vZGU7XG4gICAgSXNTdGFycmVkOiBib29sZWFuO1xuICAgIElzVGV4dFBhcnRHZW5lcmF0aW9uRW5hYmxlZDogYm9vbGVhbjtcbiAgICBMb2NhbGU6IHN0cmluZztcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgT3duZXJUeXBlOiBPd25lclR5cGU7XG4gICAgUHJlc2V0czogc3RyaW5nO1xuICAgIFB1cnBvc2VzOiBQdXJwb3Nlc1tdO1xuICAgIElEOiBudW1iZXI7XG4gICAgT3duZXJJZDogbnVtYmVyO1xuICAgIFByZXZpZXdzOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgTGFzdFVwZGF0ZWRBdDogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgVGVtcGxhdGVEZXRhaWxDb250ZW50ID0ge1xuICAgIEhlYWRlcnM6IEhlYWRlcnM7XG4gICAgJ0h0bWwtcGFydCc6IHN0cmluZztcbiAgICAnVGV4dC1wYXJ0Jzogc3RyaW5nO1xuICAgIE1KTUxDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlQm9keSA9XG4gICAgUGFydGlhbDxPbWl0PFRlbXBsYXRlLCAnTmFtZScgfCAnSUQnIHwgJ093bmVySWQnIHwgJ1ByZXZpZXdzJyB8ICdDcmVhdGVkQXQnIHwgJ0xhc3RVcGRhdGVkQXQnPj4gJlxuICB7XG4gICAgTmFtZTogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVCb2R5ID0gUGFydGlhbDxQb3N0VGVtcGxhdGVCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldFRlbXBsYXRlUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYXRlZ29yaWVzPzogc3RyaW5nO1xuICAgIENhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2Q/OiBDYXRlZ29yaWVzU2VsZWN0aW9uTWV0aG9kO1xuICAgIEVkaXRNb2RlPzogRWRpdE1vZGU7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBPd25lclR5cGU/OiBPd25lclR5cGU7XG4gICAgUHVycG9zZXM/OiBQdXJwb3NlcztcbiAgICBQdXJwb3Nlc1NlbGVjdGlvbk1ldGhvZD86IFB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdFRlbXBsYXRlRGV0YWlsQ29udGVudEJvZHkgPVxuICAgIFBhcnRpYWw8T21pdDxUZW1wbGF0ZURldGFpbENvbnRlbnQsICdIZWFkZXJzJz4+ICZcbiAge1xuICAgIEhlYWRlcnM/OiBQYXJ0aWFsPEhlYWRlcnM+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0VGVtcGxhdGVEZXRhaWxDb250ZW50Qm9keSA9IFBvc3RUZW1wbGF0ZURldGFpbENvbnRlbnRCb2R5XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIFRlbXBsYXRlUmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8KFRlbXBsYXRlICYge0xvY2FsZUxpc3Q6IHN0cmluZ1tdfSlbXT47XG4gIHR5cGUgVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8VGVtcGxhdGVEZXRhaWxDb250ZW50W10+O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRUZW1wbGF0ZVJlc3BvbnNlID0gVGVtcGxhdGVSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZSA9IFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIFB1dFRlbXBsYXRlRGV0YWlsQ29udGVudFJlc3BvbnNlID0gVGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0VGVtcGxhdGVEZXRhaWxDb250ZW50UmVzcG9uc2UgPSBUZW1wbGF0ZURldGFpbENvbnRlbnRSZXNwb25zZVxufVxuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsT2JqZWN0KSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuLypcclxuICogICAgICBiaWdudW1iZXIuanMgdjkuMC4xXHJcbiAqICAgICAgQSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGFyYml0cmFyeS1wcmVjaXNpb24gYXJpdGhtZXRpYy5cclxuICogICAgICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9iaWdudW1iZXIuanNcclxuICogICAgICBDb3B5cmlnaHQgKGMpIDIwMjAgTWljaGFlbCBNY2xhdWdobGluIDxNOGNoODhsQGdtYWlsLmNvbT5cclxuICogICAgICBNSVQgTGljZW5zZWQuXHJcbiAqXHJcbiAqICAgICAgQmlnTnVtYmVyLnByb3RvdHlwZSBtZXRob2RzICAgICB8ICBCaWdOdW1iZXIgbWV0aG9kc1xyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGFic29sdXRlVmFsdWUgICAgICAgICAgICBhYnMgICAgfCAgY2xvbmVcclxuICogICAgICBjb21wYXJlZFRvICAgICAgICAgICAgICAgICAgICAgIHwgIGNvbmZpZyAgICAgICAgICAgICAgIHNldFxyXG4gKiAgICAgIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICBkcCAgICAgfCAgICAgIERFQ0lNQUxfUExBQ0VTXHJcbiAqICAgICAgZGl2aWRlZEJ5ICAgICAgICAgICAgICAgIGRpdiAgICB8ICAgICAgUk9VTkRJTkdfTU9ERVxyXG4gKiAgICAgIGRpdmlkZWRUb0ludGVnZXJCeSAgICAgICBpZGl2ICAgfCAgICAgIEVYUE9ORU5USUFMX0FUXHJcbiAqICAgICAgZXhwb25lbnRpYXRlZEJ5ICAgICAgICAgIHBvdyAgICB8ICAgICAgUkFOR0VcclxuICogICAgICBpbnRlZ2VyVmFsdWUgICAgICAgICAgICAgICAgICAgIHwgICAgICBDUllQVE9cclxuICogICAgICBpc0VxdWFsVG8gICAgICAgICAgICAgICAgZXEgICAgIHwgICAgICBNT0RVTE9fTU9ERVxyXG4gKiAgICAgIGlzRmluaXRlICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgIFBPV19QUkVDSVNJT05cclxuICogICAgICBpc0dyZWF0ZXJUaGFuICAgICAgICAgICAgZ3QgICAgIHwgICAgICBGT1JNQVRcclxuICogICAgICBpc0dyZWF0ZXJUaGFuT3JFcXVhbFRvICAgZ3RlICAgIHwgICAgICBBTFBIQUJFVFxyXG4gKiAgICAgIGlzSW50ZWdlciAgICAgICAgICAgICAgICAgICAgICAgfCAgaXNCaWdOdW1iZXJcclxuICogICAgICBpc0xlc3NUaGFuICAgICAgICAgICAgICAgbHQgICAgIHwgIG1heGltdW0gICAgICAgICAgICAgIG1heFxyXG4gKiAgICAgIGlzTGVzc1RoYW5PckVxdWFsVG8gICAgICBsdGUgICAgfCAgbWluaW11bSAgICAgICAgICAgICAgbWluXHJcbiAqICAgICAgaXNOYU4gICAgICAgICAgICAgICAgICAgICAgICAgICB8ICByYW5kb21cclxuICogICAgICBpc05lZ2F0aXZlICAgICAgICAgICAgICAgICAgICAgIHwgIHN1bVxyXG4gKiAgICAgIGlzUG9zaXRpdmUgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIGlzWmVybyAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1pbnVzICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIG1vZHVsbyAgICAgICAgICAgICAgICAgICBtb2QgICAgfFxyXG4gKiAgICAgIG11bHRpcGxpZWRCeSAgICAgICAgICAgICB0aW1lcyAgfFxyXG4gKiAgICAgIG5lZ2F0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHBsdXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHByZWNpc2lvbiAgICAgICAgICAgICAgICBzZCAgICAgfFxyXG4gKiAgICAgIHNoaWZ0ZWRCeSAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHNxdWFyZVJvb3QgICAgICAgICAgICAgICBzcXJ0ICAgfFxyXG4gKiAgICAgIHRvRXhwb25lbnRpYWwgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRml4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvRnJhY3Rpb24gICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvSlNPTiAgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvUHJlY2lzaW9uICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHRvU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKiAgICAgIHZhbHVlT2YgICAgICAgICAgICAgICAgICAgICAgICAgfFxyXG4gKlxyXG4gKi9cclxuXHJcblxyXG4gIHZhciBCaWdOdW1iZXIsXHJcbiAgICBpc051bWVyaWMgPSAvXi0/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/IHNlbGYgOiB3aW5kb3c7XHJcbiAgICB9XHJcblxyXG4gICAgZ2xvYmFsT2JqZWN0LkJpZ051bWJlciA9IEJpZ051bWJlcjtcclxuICB9XHJcbn0pKHRoaXMpO1xyXG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdCB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWduczogYm9vbGVhbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgQ3JlYXRlZEF0OiBzdHJpbmc7XG4gICAgRGVsaXZlcmVkQ291bnQ6IG51bWJlcjtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIEV4Y2x1c2lvbkZyb21DYW1wYWlnbnNVcGRhdGVkQXQ6IHN0cmluZztcbiAgICBJc09wdEluUGVuZGluZzogYm9vbGVhbjtcbiAgICBJc1NwYW1Db21wbGFpbmluZzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdDogc3RyaW5nO1xuICAgIExhc3RVcGRhdGVBdDogc3RyaW5nO1xuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0Qm9keSA9IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBOYW1lPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEJvZHkgPSBPbWl0PFBvc3RDb250YWN0Qm9keSwgJ0VtYWlsJz5cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgSXNFeGNsdWRlZEZyb21DYW1wYWlnbnM/OiBib29sZWFuO1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIENvbnRhY3RSZXNwb25zZSA9IHtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIFRvdGFsOiBudW1iZXI7XG4gICAgRGF0YTogQ29udGFjdFtdO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0UmVzcG9uc2UgPSBDb250YWN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdFJlc3BvbnNlID0gQ29udGFjdFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RSZXNwb25zZSA9IENvbnRhY3RSZXNwb25zZVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIENvbnRhY3RMaXN0IHtcbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TGlzdCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc0RlbGV0ZWQ6IGJvb2xlYW47XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIEFkZHJlc3M6IHN0cmluZztcbiAgICBDcmVhdGVkQXQ6IHN0cmluZztcbiAgICBTdWJzY3JpYmVyQ291bnQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdExpc3RCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdExpc3RCb2R5ID0gUGFydGlhbDxQb3N0Q29udGFjdExpc3RCb2R5PlxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RMaXN0UXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBBZGRyZXNzPzogc3RyaW5nO1xuICAgIEV4Y2x1ZGVJRD86IG51bWJlcjtcbiAgICBJc0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdExpc3RSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0TGlzdFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdExpc3RSZXNwb25zZSA9IENvbnRhY3RMaXN0UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBCdWxrQ29udGFjdE1hbmFnZW1lbnQge1xuICBleHBvcnQgZW51bSBNYW5hZ2VDb250YWN0c0FjdGlvbiB7XG4gICAgQWRkRm9yY2UgPSAnYWRkZm9yY2UnLFxuICAgIEFkZE5vRm9yY2UgPSAnYWRkbm9mb3JjZScsXG4gICAgUmVtb3ZlID0gJ3JlbW92ZScsXG4gICAgVW5TdWIgPSAndW5zdWInXG4gIH1cblxuICBleHBvcnQgZW51bSBJbXBvcnRMaXN0QWN0aW9uIHtcbiAgICBBZGRGb3JjZSA9ICdhZGRmb3JjZScsXG4gICAgQWRkTm9Gb3JjZSA9ICdhZGRub2ZvcmNlJyxcbiAgICBVblN1YiA9ICd1bnN1YicsXG4gICAgRHVwbGljYXRlT3ZlcnJpZGUgPSAnZHVwbGljYXRlLW92ZXJyaWRlJyxcbiAgICBEdXBsaWNhdGVOb092ZXJyaWRlID0gJ2R1cGxpY2F0ZS1uby1vdmVycmlkZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIEltcG9ydENTVk1ldGhvZCB7XG4gICAgQWRkRm9yY2UgPSAnYWRkZm9yY2UnLFxuICAgIEFkZE5vRm9yY2UgPSAnYWRkbm9mb3JjZScsXG4gICAgUmVtb3ZlID0gJ3JlbW92ZScsXG4gICAgVW5TdWIgPSAndW5zdWInLFxuICAgIEV4Y2x1ZGVNYXJrZXRpbmcgPSAnZXhjbHVkZW1hcmtldGluZycsXG4gICAgSW5jbHVkZU1hcmtldGluZyA9ICdpbmNsdWRlbWFya2V0aW5nJ1xuICB9XG5cbiAgZXhwb3J0IGVudW0gQ1NWSW1wb3J0U3RhdHVzIHtcbiAgICBVcGxvYWQgPSAnVXBsb2FkJyxcbiAgICBDb21wbGV0ZWQgPSAnQ29tcGxldGVkJyxcbiAgICBBYm9ydCA9ICdBYm9ydCcsXG4gIH1cblxuICBleHBvcnQgZW51bSBKb2JTdGF0dXMge1xuICAgIENvbXBsZXRlZCA9ICdDb21wbGV0ZWQnLFxuICAgIEluUHJvZ3Jlc3MgPSAnSW4gUHJvZ3Jlc3MnLFxuICAgIEVycm9yID0gJ0Vycm9yJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBKb2Ige1xuICAgIEpvYklEOiBudW1iZXI7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENTVkltcG9ydCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBFcnJUcmVzaG9sZDogbnVtYmVyO1xuICAgIEltcG9ydE9wdGlvbnM6IHN0cmluZztcbiAgICBNZXRob2Q6IEltcG9ydENTVk1ldGhvZDtcbiAgICBBbGl2ZUF0OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBDb3VudDogbnVtYmVyO1xuICAgIEN1cnJlbnQ6IG51bWJlcjtcbiAgICBEYXRhSUQ6IG51bWJlcjtcbiAgICBFcnJjb3VudDogbnVtYmVyO1xuICAgIEpvYkVuZDogc3RyaW5nO1xuICAgIEpvYlN0YXJ0OiBzdHJpbmc7XG4gICAgUmVxdWVzdEF0OiBzdHJpbmc7XG4gICAgU3RhdHVzOiBDU1ZJbXBvcnRTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RMaXN0IHtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBBY3Rpb246IE1hbmFnZUNvbnRhY3RzQWN0aW9uO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TWFuYWdlTWFueUNvbnRhY3RzIHtcbiAgICBDb250YWN0c0xpc3RzOiBDb250YWN0TGlzdFtdO1xuICAgIENvdW50OiBudW1iZXI7XG4gICAgRXJyb3I6IHN0cmluZztcbiAgICBFcnJvckZpbGU6IHN0cmluZztcbiAgICBKb2JFbmQ6IHN0cmluZztcbiAgICBKb2JTdGFydDogc3RyaW5nO1xuICAgIFN0YXR1czogSm9iU3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RJbXBvcnRMaXN0IHtcbiAgICBKb2JJRDogbnVtYmVyO1xuICAgIEFjdGlvbjogSW1wb3J0TGlzdEFjdGlvbjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBDb250YWN0Qm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBJc0V4Y2x1ZGVkRnJvbUNhbXBhaWducz86IGJvb2xlYW47XG4gICAgUHJvcGVydGllcz86IFByb3BlcnRpZXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZU1hbnlDb250YWN0c0JvZHk8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiA9IHtcbiAgICBDb250YWN0czogQXJyYXk8Q29udGFjdEJvZHk8UHJvcGVydGllcz4+O1xuICAgIENvbnRhY3RzTGlzdHM/OiBDb250YWN0TGlzdFtdO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RzTGlzdEltcG9ydExpc3RCb2R5ID0ge1xuICAgIEFjdGlvbjogSW1wb3J0TGlzdEFjdGlvbjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNCb2R5PFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPSB7XG4gICAgQWN0aW9uOiBNYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBDb250YWN0czogQXJyYXk8Q29udGFjdEJvZHk8UHJvcGVydGllcz4+O1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENTVkltcG9ydEJvZHkgPSB7XG4gICAgQ29udGFjdHNMaXN0SUQ6IG51bWJlcjtcbiAgICBEYXRhSUQ6IG51bWJlcjtcbiAgICBFcnJUcmVzaG9sZD86IG51bWJlcjtcbiAgICBJbXBvcnRPcHRpb25zPzogc3RyaW5nO1xuICAgIE1ldGhvZD86IEltcG9ydENTVk1ldGhvZDtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENTVkltcG9ydEJvZHkgPSBQYXJ0aWFsPFBvc3RDU1ZJbXBvcnRCb2R5PiAmIHtcbiAgICBTdGF0dXM/OiBDU1ZJbXBvcnRTdGF0dXM7XG4gIH1cblxuICBleHBvcnQgdHlwZSBHZXRDU1ZJbXBvcnRRdWVyeVBhcmFtcyA9IFBhcnRpYWw8Q29tbW9uLlBhZ2luYXRpb24+XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICB0eXBlIEpvYlJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPEpvYltdPjtcbiAgdHlwZSBDU1ZJbXBvcnRSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDU1ZJbXBvcnRbXT47XG4gIHR5cGUgQ29udGFjdE1hbmFnZU1hbnlDb250YWN0c1Jlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IEpvYlJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RJbXBvcnRMaXN0UmVzcG9uc2UgPSBKb2JSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RJbXBvcnRMaXN0UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8Q29udGFjdHNMaXN0SW1wb3J0TGlzdFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlTWFueUNvbnRhY3RzUmVzcG9uc2UgPSBKb2JSZXNwb25zZVxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZSA9IENvbnRhY3RNYW5hZ2VNYW55Q29udGFjdHNSZXNwb25zZTtcblxuICBleHBvcnQgdHlwZSBQb3N0Q1NWSW1wb3J0UmVzcG9uc2UgPSBDU1ZJbXBvcnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRDU1ZJbXBvcnRSZXNwb25zZSA9IENTVkltcG9ydFJlc3BvbnNlXG4gIGV4cG9ydCB0eXBlIEdldENTVkltcG9ydFJlc3BvbnNlID0gQ1NWSW1wb3J0UmVzcG9uc2Vcbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0UHJvcGVydGllcyB7XG4gIGV4cG9ydCBlbnVtIERhdGFUeXBlIHtcbiAgICBTdHIgPSAnc3RyJyxcbiAgICBJbnQgPSAnaW50JyxcbiAgICBGbG9hdCA9ICdmbG9hdCcsXG4gICAgQm9vbCA9ICdib29sJyxcbiAgICBEYXRlVGltZSA9ICdkYXRldGltZSdcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIE5hbWVTcGFjZSB7XG4gICAgU3RhdGljID0gJ3N0YXRpYycsXG4gICAgSGlzdG9yaWMgPSAnaGlzdG9yaWMnXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RQcm9wZXJ0eSB7XG4gICAgTmFtZTogc3RyaW5nO1xuICAgIFZhbHVlOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3REYXRhIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIERhdGE6IENvbnRhY3RQcm9wZXJ0eVtdO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0TWV0YURhdGEge1xuICAgIElEOiBudW1iZXI7XG4gICAgRGF0YXR5cGU6IERhdGFUeXBlO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBOYW1lU3BhY2U6IE5hbWVTcGFjZTtcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1ldGFEYXRhQm9keSA9IHtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgRGF0YXR5cGU/OiBEYXRhVHlwZTtcbiAgICBOYW1lU3BhY2U/OiBOYW1lU3BhY2U7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0TWV0YURhdGFCb2R5ID0ge1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gICAgRGF0YXR5cGU/OiBEYXRhVHlwZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RNZXRhRGF0YVF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgRGF0YVR5cGU/OiBEYXRhVHlwZVxuICAgIE5hbWVzcGFjZT86IE5hbWVTcGFjZTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFB1dENvbnRhY3REYXRhQm9keSA9IHtcbiAgICBEYXRhOiBDb250YWN0UHJvcGVydHlbXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3REYXRhUXVlcnlQYXJhbXMgPSBQYXJ0aWFsPENvbW1vbi5QYWdpbmF0aW9uPiAmIHtcbiAgICBDYW1wYWlnbj86IG51bWJlcjtcbiAgICBDb250YWN0RW1haWw/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIEZpZWxkcz86IHN0cmluZztcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBDb250YWN0RGF0YVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3REYXRhW10+O1xuICB0eXBlIENvbnRhY3RNZXRhRGF0YVJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RNZXRhRGF0YVtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdE1ldGFEYXRhUmVzcG9uc2UgPSBDb250YWN0TWV0YURhdGFSZXNwb25zZTtcblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RGF0YVJlc3BvbnNlID0gQ29udGFjdERhdGFSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdERhdGFSZXNwb25zZSA9IENvbnRhY3REYXRhUmVzcG9uc2U7XG59XG5cbmV4cG9ydCBuYW1lc3BhY2UgQ29udGFjdFN1YnNjcmlwdGlvbiB7XG4gIGV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlQ29udGFjdHM8UHJvcGVydGllcyA9IENvbW1vbi5Vbmtub3duUmVjPiB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBBY3Rpb246IEJ1bGtDb250YWN0TWFuYWdlbWVudC5NYW5hZ2VDb250YWN0c0FjdGlvbjtcbiAgICBOYW1lOiBzdHJpbmc7XG4gICAgUHJvcGVydGllczogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgTGlzdFJlY2lwaWVudCB7XG4gICAgSUQ6IG51bWJlcjtcbiAgICBJc1Vuc3Vic2NyaWJlZDogYm9vbGVhbjtcbiAgICBDb250YWN0SUQ6IG51bWJlcjtcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBMaXN0TmFtZTogc3RyaW5nO1xuICAgIFN1YnNjcmliZWRBdDogc3RyaW5nO1xuICAgIFVuc3Vic2NyaWJlZEF0OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIENvbnRhY3RzTGlzdCB7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgSXNVbnN1YjogYm9vbGVhbjtcbiAgICBTdWJzY3JpYmVkQXQ6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQ29udGFjdHNMaXN0U2lnbnVwIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIENvbmZpcm1BdDogbnVtYmVyO1xuICAgIENvbmZpcm1JcDogc3RyaW5nO1xuICAgIENvbnRhY3RJRDogbnVtYmVyO1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgTGlzdElEOiBudW1iZXI7XG4gICAgU2lnbnVwQXQ6IG51bWJlcjtcbiAgICBTaWdudXBJcDogc3RyaW5nO1xuICAgIFNpZ251cEtleTogc3RyaW5nO1xuICAgIFNvdXJjZUlkOiBudW1iZXI7XG4gICAgU291cmNlOiBzdHJpbmc7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RNYW5hZ2VDb250YWN0c0xpc3RzQm9keSA9IHtcbiAgICBDb250YWN0c0xpc3RzOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuQ29udGFjdExpc3RbXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RDb250YWN0c0xpc3RNYW5hZ2VDb250YWN0Qm9keTxQcm9wZXJ0aWVzID0gQ29tbW9uLlVua25vd25SZWM+ID0ge1xuICAgIEVtYWlsOiBzdHJpbmc7XG4gICAgQWN0aW9uOiBCdWxrQ29udGFjdE1hbmFnZW1lbnQuTWFuYWdlQ29udGFjdHNBY3Rpb247XG4gICAgTmFtZT86IHN0cmluZztcbiAgICBQcm9wZXJ0aWVzPzogUHJvcGVydGllcztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFBvc3RMaXN0UmVjaXBpZW50Qm9keSA9IHtcbiAgICBJc1Vuc3Vic2NyaWJlZD86IGJvb2xlYW47XG4gICAgQ29udGFjdElEOiBudW1iZXI7XG4gICAgQ29udGFjdEFsdD86IHN0cmluZztcbiAgICBMaXN0SUQ6IG51bWJlcjtcbiAgICBMaXN0QWx0Pzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgUHV0TGlzdFJlY2lwaWVudEJvZHkgPSB7XG4gICAgSXNVbnN1YnNjcmliZWQ/OiBib29sZWFuO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQmxvY2tlZD86IGJvb2xlYW47XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0RW1haWw/OiBzdHJpbmc7XG4gICAgQ29udGFjdHNMaXN0PzogbnVtYmVyO1xuICAgIElnbm9yZURlbGV0ZWQ/OiBib29sZWFuO1xuICAgIElzRXhjbHVkZWRGcm9tQ2FtcGFpZ25zPzogYm9vbGVhbjtcbiAgICBMYXN0QWN0aXZpdHlBdD86IHN0cmluZztcbiAgICBMaXN0TmFtZT86IHN0cmluZztcbiAgICBPcGVuZWQ/OiBib29sZWFuO1xuICAgIFVuc3ViPzogYm9vbGVhbjtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEdldENvbnRhY3RzTGlzdFNpZ251cFF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgQ29udGFjdD86IG51bWJlcjtcbiAgICBDb250YWN0c0xpc3Q/OiBudW1iZXI7XG4gICAgRG9tYWluPzogc3RyaW5nO1xuICAgIEVtYWlsPzogc3RyaW5nO1xuICAgIExvY2FsUGFydD86IHN0cmluZztcbiAgICBNYXhDb25maXJtQXQ/OiBudW1iZXI7XG4gICAgTWluQ29uZmlybUF0PzogbnVtYmVyO1xuICAgIE1heFNpZ251cEF0PzogbnVtYmVyO1xuICAgIE1pblNpZ251cEF0PzogbnVtYmVyO1xuICAgIFNpZ251cElwPzogc3RyaW5nO1xuICAgIFNvdXJjZT86IHN0cmluZztcbiAgICBTb3VyY2VJRD86IG51bWJlcjtcbiAgfVxuXG4gIC8vIFJFU1BPTlNFIFBBUlRcbiAgdHlwZSBMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBDb21tb24uUmVzcG9uc2U8TGlzdFJlY2lwaWVudFtdPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdE1hbmFnZUNvbnRhY3RzTGlzdHNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxcbiAgICBBcnJheTx7IENvbnRhY3RzTGlzdHM6IEJ1bGtDb250YWN0TWFuYWdlbWVudC5Db250YWN0TGlzdFtdIH0+XG4gICAgPjtcblxuICBleHBvcnQgdHlwZSBQb3N0Q29udGFjdHNMaXN0TWFuYWdlQ29udGFjdFJlc3BvbnNlPFByb3BlcnRpZXMgPSBDb21tb24uVW5rbm93blJlYz4gPVxuICAgICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PE1hbmFnZUNvbnRhY3RzPFByb3BlcnRpZXM+Pj47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdExpc3RSZWNpcGllbnRSZXNwb25zZSA9IExpc3RSZWNpcGllbnRSZXNwb25zZVxuICBleHBvcnQgdHlwZSBQdXRMaXN0UmVjaXBpZW50UmVzcG9uc2UgPSBMaXN0UmVjaXBpZW50UmVzcG9uc2VcbiAgZXhwb3J0IHR5cGUgR2V0TGlzdFJlY2lwaWVudFJlc3BvbnNlID0gTGlzdFJlY2lwaWVudFJlc3BvbnNlXG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEdldENvbnRhY3RzTGlzdHNSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RbXT5cblxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RTaWdudXBSZXNwb25zZSA9IENvbW1vbi5SZXNwb25zZTxDb250YWN0c0xpc3RTaWdudXBbXT5cbn1cblxuZXhwb3J0IG5hbWVzcGFjZSBDb250YWN0VmVyaWZpY2F0aW9uIHtcbiAgZXhwb3J0IGludGVyZmFjZSBWZXJpZmljYXRpb25TdW1tYXJ5PFJlc3VsdCA9IENvbW1vbi5Vbmtub3duUmVjLCBSaXNrID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICByZXN1bHQ6IFJlc3VsdDtcbiAgICByaXNrOiBSaXNrO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0c0xpc3RWZXJpZmljYXRpb248UmVzdWx0ID0gQ29tbW9uLlVua25vd25SZWMsIFJpc2sgPSBDb21tb24uVW5rbm93blJlYz4ge1xuICAgIEFraWQ6IG51bWJlcjtcbiAgICBDb250YWN0TGlzdElEOiBudW1iZXI7XG4gICAgQ291bnQ6IG51bWJlcjtcbiAgICBFcnJvcjogc3RyaW5nO1xuICAgIElEOiBudW1iZXI7XG4gICAgSm9iRW5kOiBzdHJpbmc7XG4gICAgSm9iU3RhcnQ6IHN0cmluZztcbiAgICBNZXRob2Q6IHN0cmluZztcbiAgICBSZXNwb25zZVVSTDogc3RyaW5nO1xuICAgIFN0YXR1czogc3RyaW5nO1xuICAgIFN1bW1hcnk6IFZlcmlmaWNhdGlvblN1bW1hcnk8UmVzdWx0LCBSaXNrPlxuICB9XG5cbiAgLy8gUkVRVUVTVCBQQVJUXG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgdHlwZSBHZXRDb250YWN0c0xpc3RWZXJpZnlSZXNwb25zZTxSZXN1bHQgPSBDb21tb24uVW5rbm93blJlYywgUmlzayA9IENvbW1vbi5Vbmtub3duUmVjPiA9XG4gICAgQ29tbW9uLlJlc3BvbnNlPEFycmF5PENvbnRhY3RzTGlzdFZlcmlmaWNhdGlvbjxSZXN1bHQsIFJpc2s+Pj47XG59XG4iLCIvKmV4dGVybmFsIG1vZHVsZXMqL1xuLyp0eXBlcyovXG4vKnV0aWxzKi9cbi8qbGliKi9cbi8qb3RoZXIqL1xuXG5mdW5jdGlvbiBpc051bGwodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBpc051bGw7XG4iLCJpbXBvcnQgeyBDb21tb24gfSBmcm9tICcuL0NvbW1vbic7XG5cbmV4cG9ydCBuYW1lc3BhY2UgU2VuZEVtYWlsVjMge1xuICBleHBvcnQgdHlwZSBNalRlbXBsYXRlRXJyb3JEZWxpdmVyID0gJzAnIHwgJ2RlbGl2ZXInXG4gIGV4cG9ydCB0eXBlIE1qRGVkdXBsaWNhdGVDYW1wYWlnbiA9IDAgfCAxO1xuICBleHBvcnQgdHlwZSBNalRyYWNrT3BlbiA9IDAgfCAxIHwgMjtcblxuICBleHBvcnQgaW50ZXJmYWNlIFJlY2lwaWVudCB7XG4gICAgRW1haWw6IHN0cmluZztcbiAgICBOYW1lPzogc3RyaW5nXG4gICAgVmFycz86IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudCB7XG4gICAgRmlsZW5hbWU6IHN0cmluZztcbiAgICBDb250ZW50OiBzdHJpbmc7XG4gICAgJ0NvbnRlbnQtdHlwZSc6IHN0cmluZztcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIEJvZHlNaiA9IHtcbiAgICAnTWotVGVtcGxhdGVJRCc/OiBudW1iZXI7XG4gICAgJ01qLVRlbXBsYXRlTGFuZ3VhZ2UnPzogYm9vbGVhbjtcbiAgICAnTWotVGVtcGxhdGVFcnJvclJlcG9ydGluZyc/OiBzdHJpbmc7XG4gICAgJ01qLVRlbXBsYXRlRXJyb3JEZWxpdmVyJz86IE1qVGVtcGxhdGVFcnJvckRlbGl2ZXI7XG4gICAgJ01qLXByaW8nPzogbnVtYmVyO1xuICAgICdNai1jYW1wYWlnbic/OiBzdHJpbmc7XG4gICAgJ01qLWRlZHVwbGljYXRlY2FtcGFpZ24nPzogTWpEZWR1cGxpY2F0ZUNhbXBhaWduO1xuICAgICdNai10cmFja29wZW4nPzogTWpUcmFja09wZW47XG4gICAgJ01qLUN1c3RvbUlEJz86IHN0cmluZztcbiAgICAnTWotRXZlbnRQYXlsb2FkJz86IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBCb2R5PFxuICAgIEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBWYXJzID0gQ29tbW9uLlVua25vd25SZWNcbiAgICA+ID0gQm9keU1qICYge1xuICAgIEZyb21FbWFpbD86IHN0cmluZztcbiAgICBGcm9tTmFtZT86IHN0cmluZztcbiAgICBSZWNpcGllbnRzPzogUmVjaXBpZW50W107XG4gICAgU2VuZGVyPzogYm9vbGVhbjtcbiAgICBTdWJqZWN0Pzogc3RyaW5nO1xuICAgICdUZXh0LXBhcnQnPzogc3RyaW5nO1xuICAgICdIdG1sLXBhcnQnPzogc3RyaW5nO1xuICAgIFRvPzogc3RyaW5nO1xuICAgIENjPzogc3RyaW5nO1xuICAgIEJjYz86IHN0cmluZztcbiAgICBBdHRhY2htZW50cz86IEF0dGFjaG1lbnRbXTtcbiAgICBJbmxpbmVfYXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSGVhZGVycz86IEhlYWRlcnM7XG4gICAgVmFycz86IFZhcnM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VTZW50IHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE1lc3NhZ2VJRDogbnVtYmVyO1xuICAgIE1lc3NhZ2VVVUlEOiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBSZXNwb25zZSA9IHtcbiAgICBTZW50OiBSZXNwb25zZVNlbnRbXTtcbiAgfVxufVxuXG5leHBvcnQgbmFtZXNwYWNlIFNlbmRFbWFpbFYzXzEge1xuICBleHBvcnQgZW51bSBUcmFja09wZW5zIHtcbiAgICBBY2NvdW50RGVmYXVsdCA9ICdhY2NvdW50X2RlZmF1bHQnLFxuICAgIERpc2FibGVkID0gJ2Rpc2FibGVkJyxcbiAgICBFbmFibGVkID0gJ2VuYWJsZWQnLFxuICB9XG5cbiAgZXhwb3J0IGVudW0gVHJhY2tDbGlja3Mge1xuICAgIEFjY291bnREZWZhdWx0ID0gJ2FjY291bnRfZGVmYXVsdCcsXG4gICAgRGlzYWJsZWQgPSAnZGlzYWJsZWQnLFxuICAgIEVuYWJsZWQgPSAnZW5hYmxlZCcsXG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEVtYWlsQWRkcmVzc1RvIHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE5hbWU/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnQge1xuICAgIEZpbGVuYW1lOiBzdHJpbmc7XG4gICAgQ29udGVudFR5cGU6IHN0cmluZztcbiAgICBCYXNlNjRDb250ZW50OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgaW50ZXJmYWNlIElubGluZWRBdHRhY2htZW50IGV4dGVuZHMgQXR0YWNobWVudCB7XG4gICAgQ29udGVudElEPzogc3RyaW5nO1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBNZXNzYWdlPEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYywgVmFyaWFibGVzID0gQ29tbW9uLlVua25vd25SZWM+IHtcbiAgICBGcm9tOiBFbWFpbEFkZHJlc3NUbztcbiAgICBTZW5kZXI/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBUbzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBDYz86IEVtYWlsQWRkcmVzc1RvW107XG4gICAgQmNjPzogRW1haWxBZGRyZXNzVG9bXTtcbiAgICBSZXBseVRvPzogRW1haWxBZGRyZXNzVG87XG4gICAgU3ViamVjdD86IHN0cmluZztcbiAgICBUZXh0UGFydD86IHN0cmluZztcbiAgICBIVE1MUGFydD86IHN0cmluZztcbiAgICBUZW1wbGF0ZUlEPzogbnVtYmVyO1xuICAgIFRlbXBsYXRlTGFuZ3VhZ2U/OiBib29sZWFuO1xuICAgIFRlbXBsYXRlRXJyb3JSZXBvcnRpbmc/OiBFbWFpbEFkZHJlc3NUbztcbiAgICBUZW1wbGF0ZUVycm9yRGVsaXZlcj86IGJvb2xlYW47XG4gICAgQXR0YWNobWVudHM/OiBBdHRhY2htZW50W107XG4gICAgSW5saW5lZEF0dGFjaG1lbnRzPzogSW5saW5lZEF0dGFjaG1lbnRbXTtcbiAgICBQcmlvcml0eT86IG51bWJlcjtcbiAgICBDdXN0b21DYW1wYWlnbj86IHN0cmluZztcbiAgICBEZWR1cGxpY2F0ZUNhbXBhaWduPzogYm9vbGVhbjtcbiAgICBUcmFja09wZW5zPzogVHJhY2tPcGVucztcbiAgICBUcmFja0NsaWNrcz86IFRyYWNrQ2xpY2tzO1xuICAgIEN1c3RvbUlEPzogc3RyaW5nO1xuICAgIEV2ZW50UGF5bG9hZD86IHN0cmluZztcbiAgICBVUkxUYWdzPzogc3RyaW5nO1xuICAgIEhlYWRlcnM/OiBIZWFkZXJzO1xuICAgIFZhcmlhYmxlcz86IFZhcmlhYmxlcztcbiAgfVxuXG4gIGV4cG9ydCBlbnVtIFJlc3BvbnNlU3RhdHVzIHtcbiAgICBTdWNjZXNzID0gJ3N1Y2Nlc3MnLFxuICAgIEVycm9yID0gJ2Vycm9yJyxcbiAgfVxuXG4gIGV4cG9ydCBpbnRlcmZhY2UgUmVzcG9uc2VFcnJvciB7XG4gICAgRXJyb3JJZGVudGlmaWVyOiBzdHJpbmc7XG4gICAgRXJyb3JDb2RlOiBzdHJpbmc7XG4gICAgU3RhdHVzQ29kZTogbnVtYmVyO1xuICAgIEVycm9yTWVzc2FnZTogc3RyaW5nO1xuICAgIEVycm9yUmVsYXRlZFRvOiBBcnJheTxzdHJpbmc+O1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBSZXNwb25zZUVtYWlsQWRkcmVzc1RvIHtcbiAgICBFbWFpbDogc3RyaW5nO1xuICAgIE1lc3NhZ2VVVUlEOiBzdHJpbmc7XG4gICAgTWVzc2FnZUlEOiBudW1iZXI7XG4gICAgTWVzc2FnZUhyZWY6IHN0cmluZztcbiAgfVxuXG4gIC8vIFJFUVVFU1QgUEFSVFxuICBleHBvcnQgdHlwZSBCb2R5PFxuICAgIEhlYWRlcnMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBWYXJpYWJsZXMgPSBDb21tb24uVW5rbm93blJlYyxcbiAgICBHbG9iYWxzID0gQ29tbW9uLlVua25vd25SZWMsXG4gICAgPiA9IHtcbiAgICBNZXNzYWdlczogQXJyYXk8TWVzc2FnZTxIZWFkZXJzLCBWYXJpYWJsZXM+PjtcbiAgICBTYW5kYm94TW9kZT86IGJvb2xlYW47XG4gICAgQWR2YW5jZUVycm9ySGFuZGxpbmc/OiBib29sZWFuO1xuICAgIEdsb2JhbHM/OiBHbG9iYWxzO1xuICB9IHwge1xuICAgIE1lc3NhZ2VzOiBBcnJheTxPbWl0PE1lc3NhZ2U8SGVhZGVycywgVmFyaWFibGVzPiwgJ0Zyb20nPiAmIHsgRnJvbT86IHN0cmluZyB9PjtcbiAgICBTYW5kYm94TW9kZT86IGJvb2xlYW47XG4gICAgQWR2YW5jZUVycm9ySGFuZGxpbmc/OiBib29sZWFuO1xuICAgIEdsb2JhbHM6IHtcbiAgICAgIEZyb206IEVtYWlsQWRkcmVzc1RvO1xuICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICB9O1xuICB9XG5cbiAgLy8gUkVTUE9OU0UgUEFSVFxuICBleHBvcnQgaW50ZXJmYWNlIFJlc3BvbnNlTWVzc2FnZSB7XG4gICAgU3RhdHVzOiBSZXNwb25zZVN0YXR1cztcbiAgICBFcnJvcnM6IFJlc3BvbnNlRXJyb3JbXTtcbiAgICBDdXN0b21JRDogc3RyaW5nO1xuICAgIFRvOiBSZXNwb25zZUVtYWlsQWRkcmVzc1RvW107XG4gICAgQ2M6IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgICBCY2M6IFJlc3BvbnNlRW1haWxBZGRyZXNzVG9bXTtcbiAgfVxuXG4gIGV4cG9ydCB0eXBlIFJlc3BvbnNlID0ge1xuICAgIE1lc3NhZ2VzOiBSZXNwb25zZU1lc3NhZ2VbXTtcbiAgfVxufVxuIiwiLypleHRlcm5hbCBtb2R1bGVzKi9cbi8qdXRpbHMqL1xuaW1wb3J0IHtcbiAgaXNQdXJlT2JqZWN0LFxuICBzZXRWYWx1ZUlmTm90TmlsLFxufSBmcm9tICcuLi91dGlscyc7XG4vKnR5cGVzKi9cbmltcG9ydCBIdHRwTWV0aG9kcyBmcm9tICcuLi9yZXF1ZXN0L0h0dHBNZXRob2RzJztcbmltcG9ydCB7IENsaWVudFBhcmFtcyB9IGZyb20gJy4vQ2xpZW50JztcbmltcG9ydCB7IFJlcXVlc3RDb25maWcsIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcgfSBmcm9tICcuLi9yZXF1ZXN0L1JlcXVlc3QnO1xuLypsaWIqL1xuaW1wb3J0IFJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5pbXBvcnQgcGFja2FnZUpTT04gZnJvbSAnLi4vLi4vcGFja2FnZS5qc29uJztcbi8qb3RoZXIqL1xuXG5leHBvcnQgdHlwZSBDbGllbnRDb25uZWN0UGFyYW1zID0gUGljazxDbGllbnRQYXJhbXMsICdjb25maWcnIHwgJ29wdGlvbnMnPjtcblxuY2xhc3MgQ2xpZW50IHtcbiAgcHJpdmF0ZSB2ZXJzaW9uITogc3RyaW5nO1xuXG4gIHByaXZhdGUgY29uZmlnITogUmVxdWVzdENvbmZpZztcbiAgcHJpdmF0ZSBvcHRpb25zITogUmVxdWVzdE9wdGlvbnM7XG5cbiAgcHJpdmF0ZSBhcGlLZXk/OiBzdHJpbmc7XG4gIHByaXZhdGUgYXBpU2VjcmV0Pzogc3RyaW5nO1xuICBwcml2YXRlIGFwaVRva2VuPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHBhcmFtczogQ2xpZW50UGFyYW1zKSB7XG4gICAgaWYgKCFpc1B1cmVPYmplY3QocGFyYW1zKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcInBhcmFtc1wiIG11c3QgYmUgb2JqZWN0Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbml0KHRoaXMuY2xvbmVQYXJhbXMocGFyYW1zKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0UGFja2FnZVZlcnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBUElLZXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpS2V5O1xuICB9XG5cbiAgcHVibGljIGdldEFQSVNlY3JldCgpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZWNyZXQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0QVBJVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpVG9rZW47XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29uZmlnKCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuY29uZmlnIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0T3B0aW9ucygpOiBSZXF1ZXN0T3B0aW9ucyB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5vcHRpb25zIH07XG4gIH1cblxuICBwdWJsaWMgZ2V0KHJlc291cmNlOiBzdHJpbmcsIGNvbmZpZz86IFJlcXVlc3RDb25zdHJ1Y3RvckNvbmZpZykge1xuICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCBIdHRwTWV0aG9kcy5HZXQsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHBvc3QocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLlBvc3QsIHJlc291cmNlLCBjb25maWcpO1xuICB9XG5cbiAgcHVibGljIHB1dChyZXNvdXJjZTogc3RyaW5nLCBjb25maWc/OiBSZXF1ZXN0Q29uc3RydWN0b3JDb25maWcpIHtcbiAgICByZXR1cm4gbmV3IFJlcXVlc3QodGhpcywgSHR0cE1ldGhvZHMuUHV0LCByZXNvdXJjZSwgY29uZmlnKTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUocmVzb3VyY2U6IHN0cmluZywgY29uZmlnPzogUmVxdWVzdENvbnN0cnVjdG9yQ29uZmlnKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIEh0dHBNZXRob2RzLkRlbGV0ZSwgcmVzb3VyY2UsIGNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIGluaXQocGFyYW1zOiBDbGllbnRQYXJhbXMpIHtcbiAgICBpZiAoIWlzUHVyZU9iamVjdChwYXJhbXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwicGFyYW1zXCIgbXVzdCBiZSBvYmplY3QnKTtcbiAgICB9XG5cbiAgICBjb25zdCB7XG4gICAgICBhcGlUb2tlbixcbiAgICAgIGFwaUtleSxcbiAgICAgIGFwaVNlY3JldCxcbiAgICAgIG9wdGlvbnMsXG4gICAgICBjb25maWcsXG4gICAgfSA9IHBhcmFtcztcblxuICAgIHRoaXMudmVyc2lvbiA9IENsaWVudC5wYWNrYWdlSlNPTi52ZXJzaW9uO1xuXG4gICAgdGhpcy5zZXRDb25maWcoY29uZmlnID8/IG51bGwpO1xuICAgIHRoaXMuc2V0T3B0aW9ucyhvcHRpb25zID8/IG51bGwpO1xuXG4gICAgcmV0dXJuICdhcGlUb2tlbicgaW4gcGFyYW1zXG4gICAgICA/IHRoaXMudG9rZW5Db25uZWN0U3RyYXRlZ3koYXBpVG9rZW4pXG4gICAgICA6IHRoaXMuYmFzaWNDb25uZWN0U3RyYXRlZ3koYXBpS2V5LCBhcGlTZWNyZXQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9uZVBhcmFtcyhwYXJhbXM6IENsaWVudFBhcmFtcykge1xuICAgIGlmICghaXNQdXJlT2JqZWN0KHBhcmFtcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXJndW1lbnQgXCJwYXJhbXNcIiBtdXN0IGJlIG9iamVjdCcpO1xuICAgIH1cblxuICAgIGNvbnN0IGNsb25lZFBhcmFtcyA9IHsgLi4ucGFyYW1zIH07XG5cbiAgICBpZiAocGFyYW1zLmNvbmZpZykge1xuICAgICAgY2xvbmVkUGFyYW1zLmNvbmZpZyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLmNvbmZpZyxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy5vcHRpb25zKSB7XG4gICAgICBjbG9uZWRQYXJhbXMub3B0aW9ucyA9IHtcbiAgICAgICAgLi4ucGFyYW1zLm9wdGlvbnMsXG4gICAgICB9O1xuXG4gICAgICBpZiAoY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkpIHtcbiAgICAgICAgY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHkgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMucHJveHksXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIGlmIChjbG9uZWRQYXJhbXMub3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgIGNsb25lZFBhcmFtcy5vcHRpb25zLmhlYWRlcnMgPSB7XG4gICAgICAgICAgLi4uY2xvbmVkUGFyYW1zLm9wdGlvbnMuaGVhZGVycyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmVkUGFyYW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb25maWcoY3VzdG9tQ29uZmlnOiBQYXJ0aWFsPFJlcXVlc3RDb25maWc+IHwgbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY3VzdG9tQ29uZmlnICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImN1c3RvbUNvbmZpZ1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB7IC4uLkNsaWVudC5jb25maWcgfTtcblxuICAgIGlmIChjdXN0b21Db25maWcgIT09IG51bGwpIHtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAnaG9zdCcsIGN1c3RvbUNvbmZpZy5ob3N0KTtcbiAgICAgIHNldFZhbHVlSWZOb3ROaWwoY29uZmlnLCAnb3V0cHV0JywgY3VzdG9tQ29uZmlnLm91dHB1dCk7XG4gICAgICBzZXRWYWx1ZUlmTm90TmlsKGNvbmZpZywgJ3ZlcnNpb24nLCBjdXN0b21Db25maWcudmVyc2lvbik7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucyhvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyB8IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwib3B0aW9uc1wiIG11c3QgYmUgb2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zID8/IHt9O1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIHRva2VuQ29ubmVjdFN0cmF0ZWd5KGFwaVRva2VuOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWFwaVRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX1RPS0VOIGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgdGhpcy5hcGlUb2tlbiA9IGFwaVRva2VuO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGJhc2ljQ29ubmVjdFN0cmF0ZWd5KGFwaUtleTogc3RyaW5nIHwgdW5kZWZpbmVkLCBhcGlTZWNyZXQ6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmICghYXBpS2V5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ01haWxqZXQgQVBJX0tFWSBpcyByZXF1aXJlZCcpO1xuICAgIH1cbiAgICBpZiAoIWFwaVNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdNYWlsamV0IEFQSV9TRUNSRVQgaXMgcmVxdWlyZWQnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFwaUtleSA9IGFwaUtleTtcbiAgICB0aGlzLmFwaVNlY3JldCA9IGFwaVNlY3JldDtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBhcGlDb25uZWN0KGFwaUtleTogc3RyaW5nLCBhcGlTZWNyZXQ6IHN0cmluZywgcGFyYW1zPzogQ2xpZW50Q29ubmVjdFBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xpZW50KHsgYXBpS2V5LCBhcGlTZWNyZXQsIC4uLnBhcmFtcyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgc21zQ29ubmVjdChhcGlUb2tlbjogc3RyaW5nLCBwYXJhbXM/OiBDbGllbnRDb25uZWN0UGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGllbnQoeyBhcGlUb2tlbiwgLi4ucGFyYW1zIH0pO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjb25maWc6IFJlYWRvbmx5PFJlcXVlc3RDb25maWc+ID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgaG9zdDogJ2FwaS5tYWlsamV0LmNvbScsXG4gICAgdmVyc2lvbjogJ3YzJyxcbiAgICBvdXRwdXQ6ICdqc29uJyxcbiAgfSBhcyBjb25zdCk7XG5cbiAgcHVibGljIHN0YXRpYyBwYWNrYWdlSlNPTiA9IE9iamVjdC5mcmVlemUoe1xuICAgIC4uLnBhY2thZ2VKU09OLFxuICB9IGFzIGNvbnN0KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2xpZW50O1xuIiwiaW1wb3J0IHsgQ29tbW9uIH0gZnJvbSAnLi9Db21tb24nO1xuXG5leHBvcnQgbmFtZXNwYWNlIFNlZ21lbnRhdGlvbiB7XG4gIGV4cG9ydCBlbnVtIFNlZ21lbnRTdGF0dXMge1xuICAgIFVzZWQgPSAndXNlZCcsXG4gICAgVW5Vc2VkID0gJ3VudXNlZCcsXG4gICAgRGVsZXRlZCA9ICdkZWxldGVkJ1xuICB9XG5cbiAgZXhwb3J0IGludGVyZmFjZSBDb250YWN0RmlsdGVyIHtcbiAgICBJRDogbnVtYmVyO1xuICAgIERlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgRXhwcmVzc2lvbjogc3RyaW5nO1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBTdGF0dXM6IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICAvLyBSRVFVRVNUIFBBUlRcbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RGaWx0ZXJCb2R5ID0ge1xuICAgIE5hbWU6IHN0cmluZztcbiAgICBFeHByZXNzaW9uOiBzdHJpbmc7XG4gICAgRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIH1cblxuICBleHBvcnQgdHlwZSBQdXRDb250YWN0RmlsdGVyQm9keSA9IFBhcnRpYWw8UG9zdENvbnRhY3RGaWx0ZXJCb2R5PiAmIHtcbiAgICBTdGF0dXM/OiBTZWdtZW50U3RhdHVzO1xuICB9XG5cbiAgZXhwb3J0IHR5cGUgR2V0Q29udGFjdEZpbHRlclF1ZXJ5UGFyYW1zID0gUGFydGlhbDxDb21tb24uUGFnaW5hdGlvbj4gJiB7XG4gICAgU2hvd0RlbGV0ZWQ/OiBib29sZWFuO1xuICAgIFN0YXR1cz86IFNlZ21lbnRTdGF0dXM7XG4gIH1cblxuICAvLyBSRVNQT05TRSBQQVJUXG4gIHR5cGUgQ29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29tbW9uLlJlc3BvbnNlPENvbnRhY3RGaWx0ZXJbXT47XG5cbiAgZXhwb3J0IHR5cGUgUG9zdENvbnRhY3RGaWx0ZXJSZXNwb25zZSA9IENvbnRhY3RGaWx0ZXJSZXNwb25zZTtcbiAgZXhwb3J0IHR5cGUgUHV0Q29udGFjdEZpbHRlclJlc3BvbnNlID0gQ29udGFjdEZpbHRlclJlc3BvbnNlO1xuICBleHBvcnQgdHlwZSBHZXRDb250YWN0RmlsdGVyUmVzcG9uc2UgPSBDb250YWN0RmlsdGVyUmVzcG9uc2U7XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODEpO1xuIl0sIm5hbWVzIjpbImpzb25fc3RyaW5naWZ5IiwianNvbl9wYXJzZSIsIm1vZHVsZSIsImV4cG9ydHMiLCJvcHRpb25zIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJIdHRwTWV0aG9kcyIsInZhbHVlIiwiX3R5cGVvZiIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwicHJvdG90eXBlIiwiZW51bWVyYWJsZSIsImdldCIsIkNvbW1vbiIsIlNlbmRFbWFpbFYzXzEiLCJNZXNzYWdlIiwiQnVsa0NvbnRhY3RNYW5hZ2VtZW50IiwiQ29udGFjdFByb3BlcnRpZXMiLCJEcmFmdENhbXBhaWduIiwiU2VudENhbXBhaWduIiwiU2VnbWVudGF0aW9uIiwiVGVtcGxhdGUiLCJTdGF0aXN0aWMiLCJXZWJob29rIiwiU2VuZGVyIiwiRE5TIiwiQVBJS2V5Q29uZmlndXJhdGlvbiIsIkVkaXRNb2RlIiwiQ2FtcGFpZ25EcmFmdFN0YXR1cyIsIkNhbXBhaWduRHJhZnRTZW5kaW5nU3RhdHVzIiwiQ2FtcGFpZ25UeXBlIiwiSHR0cE1ldGhvZHNfMSIsImluZGV4XzEiLCJpbmRleF8yIiwiX19leHRlbmRzIiwiTWFpbGpldCIsIl9fZXhwb3J0U3RhciIsImtleXMiLCJsZW5ndGgiLCJCaWdOdW1iZXIiLCJzdXNwZWN0UHJvdG9SeCIsInN1c3BlY3RDb25zdHJ1Y3RvclJ4IiwiX29wdGlvbnMiLCJzdHJpY3QiLCJzdG9yZUFzU3RyaW5nIiwiYWx3YXlzUGFyc2VBc0JpZyIsInVzZU5hdGl2ZUJpZ0ludCIsInByb3RvQWN0aW9uIiwiY29uc3RydWN0b3JBY3Rpb24iLCJFcnJvciIsImF0IiwiY2giLCJ0ZXh0IiwiZXNjYXBlZSIsImIiLCJmIiwibiIsInIiLCJ0IiwiZXJyb3IiLCJtIiwibmFtZSIsIm1lc3NhZ2UiLCJuZXh0IiwiYyIsImNoYXJBdCIsIm51bWJlciIsInN0cmluZyIsImlzRmluaXRlIiwiQmlnSW50IiwiaGV4IiwiaSIsInVmZmZmIiwic3RhcnRBdCIsInN1YnN0cmluZyIsInBhcnNlSW50IiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwid2hpdGUiLCJrZXkiLCJvYmplY3QiLCJjcmVhdGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJ0ZXN0IiwiYXJyYXkiLCJwdXNoIiwid29yZCIsInNvdXJjZSIsInJldml2ZXIiLCJyZXN1bHQiLCJ3YWxrIiwiaG9sZGVyIiwidiIsImZvckVhY2giLCJrIiwidW5kZWZpbmVkIiwiaXNOaWxfMSIsImlzTnVsbF8xIiwiaXNVbmRlZmluZWRfMSIsImlzUHVyZU9iamVjdF8xIiwic2V0VmFsdWVJZk5vdE5pbF8xIiwiaXNOb25FbXB0eU9iamVjdF8xIiwiaXNWYWxpZEpzb25fMSIsIkV2ZW50VHlwZSIsIkV2ZW50VHlwZVZhbHVlIiwiU3RhdHVzIiwiSlNPTmIiLCJjbGllbnQiLCJtZXRob2QiLCJyZXNvdXJjZSIsImNvbmZpZyIsImNsaWVudF8xIiwidmFsdWVzIiwiaW5jbHVkZXMiLCJ0aGlzIiwidXJsIiwidG9Mb3dlckNhc2UiLCJzdWJQYXRoIiwiYnVpbGRTdWJQYXRoIiwiYWN0aW9uUGF0aCIsIlJlcXVlc3QiLCJnZXRQYWNrYWdlVmVyc2lvbiIsImFwaVRva2VuIiwiZ2V0QVBJVG9rZW4iLCJhcGlLZXkiLCJnZXRBUElLZXkiLCJhcGlTZWNyZXQiLCJnZXRBUElTZWNyZXQiLCJpbmRleE9mIiwiZGF0YSIsIlB1dCIsIlBvc3QiLCJEZWxldGUiLCJjbGllbnRDb25maWciLCJnZXRDb25maWciLCJob3N0IiwidmVyc2lvbiIsInByb3RvY29sIiwiaXNDb250YWN0TGlzdFdpdGhDU1YiLCJpc0JhdGNoSm9iV2l0aENTViIsImlzU2VuZFJlc291cmNlIiwicmVzb3VyY2VDb250YWluU01TIiwicGFyYW1zIiwicmVxdWVzdENvbmZpZyIsImdldFJlcXVlc3RCb2R5IiwicmVzcG9uc2VUeXBlIiwiaGVhZGVycyIsImdldFVzZXJBZ2VudCIsImdldENvbnRlbnRUeXBlIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJyZXNwb25zZURhdGEiLCJkYXRhSXNTdHJpbmciLCJpc0pTT05SZXF1ZXN0ZWQiLCJwYXJzZVRvSlNPTmIiLCJpc0Jyb3dzZXIiLCJjcmVkZW50aWFscyIsImdldENyZWRlbnRpYWxzIiwiYXV0aCIsInVzZXJuYW1lIiwicGFzc3dvcmQiLCJjbGllbnRPcHRpb25zIiwiZ2V0T3B0aW9ucyIsInRpbWVvdXQiLCJwcm94eSIsIm91dHB1dCIsIm1heEJvZHlMZW5ndGgiLCJtYXhDb250ZW50TGVuZ3RoIiwiYmFzZVVybCIsInRvU3RyaW5nIiwicGVyZm9ybUFQSUNhbGwiLCJidWlsZEZ1bGxVcmwiLCJzZXRCYXNlVVJMIiwidmFsaWRhdGVBY3Rpb25EYXRhIiwiYm9keSIsIm1ha2VSZXF1ZXN0IiwicmVzcG9uc2UiLCJfZyIsImF4aW9zXzEiLCJjb2RlIiwiZXJyXzEiLCJfZiIsInN0YXR1c18xIiwic3RhdHVzVGV4dCIsInN0YXR1c0NvZGUiLCJlcnJvck1lc3NhZ2UiLCJFcnJvck1lc3NhZ2UiLCJvcmlnaW5hbE1lc3NhZ2UiLCJmdWxsTWVzc2FnZSIsIk1lc3NhZ2VzIiwiRXJyb3JzIiwic2V0VmFsdWVJZk5vdE5pbCIsIkVycm9yQ29kZSIsIkVycm9ySWRlbnRpZmllciIsIkVycm9yUmVsYXRlZFRvIiwiZSIsIndpbmRvdyIsInZhbGlkYXRvcnMiLCJtYW5hZ2Vjb250YWN0IiwiaXNOb25FbXB0eU9iamVjdCIsImlzVmFsaWRKc29uIiwiUHJvcGVydGllcyIsImlzTnVsbCIsIkNhbXBhaWduT3ZlcnZpZXdJRFR5cGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdE1vZGUiLCJDYW1wYWlnbk92ZXJ2aWV3RWRpdFR5cGUiLCJDb3VudGVyU291cmNlIiwiQ291bnRlclJlc29sdXRpb24iLCJDb3VudGVyVGltaW5nIiwiRW1haWxFdmVudCIsIkpTT04iLCJQZXJpb2QiLCJnYXAiLCJpbmRlbnQiLCJyZXAiLCJlc2NhcGFibGUiLCJtZXRhIiwicXVvdGUiLCJsYXN0SW5kZXgiLCJyZXBsYWNlIiwiYSIsImNoYXJDb2RlQXQiLCJzbGljZSIsInN0ciIsInBhcnRpYWwiLCJtaW5kIiwiaXNCaWdOdW1iZXIiLCJ0b0pTT04iLCJhcHBseSIsImpvaW4iLCJyZXBsYWNlciIsInNwYWNlIiwiTWVzc2FnZVN0YXRlIiwiRnJvbVR5cGUiLCJNZXNzYWdlU3RhdHVzIiwiQ3VycmVudE1lc3NhZ2VTdGF0dXMiLCJSdW5MZXZlbCIsIkVtYWlsVHlwZSIsIlNlbmRlclN0YXR1cyIsIkRLSU1Db25maWd1cmF0aW9uQ2hlY2tTdGF0dXMiLCJES0lNQ29uZmlndXJhdGlvblN0YXR1cyIsIlNQRkNvbmZpZ3VyYXRpb25DaGVja1N0YXR1cyIsIlNQRkNvbmZpZ3VyYXRpb25TdGF0dXMiLCJiaW5kIiwiZm4iLCJ0aGlzQXJnIiwiYXJndW1lbnRzIiwiaXRlcmF0b3IiLCJ0b1N0cmluZ1RhZyIsIlN5bWJvbCIsImtpbmRPZiIsImNhY2hlIiwidGhpbmciLCJraW5kT2ZUZXN0IiwidHlwZSIsInR5cGVPZlRlc3QiLCJpc0FycmF5IiwiQXJyYXkiLCJpc1VuZGVmaW5lZCIsImlzQnVmZmVyIiwidmFsIiwiY29uc3RydWN0b3IiLCJpc0Z1bmN0aW9uJDEiLCJpc0FycmF5QnVmZmVyIiwiaXNTdHJpbmciLCJpc051bWJlciIsImlzT2JqZWN0IiwiaXNQbGFpbk9iamVjdCIsImlzRGF0ZSIsImlzRmlsZSIsImlzQmxvYiIsImlzRmlsZUxpc3QiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImlzUmVhZGFibGVTdHJlYW0iLCJpc1JlcXVlc3QiLCJpc1Jlc3BvbnNlIiwiaXNIZWFkZXJzIiwibWFwIiwib2JqIiwiYWxsT3duS2V5cyIsImwiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwibGVuIiwiZmluZEtleSIsIl9rZXkiLCJfZ2xvYmFsIiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJnIiwiaXNDb250ZXh0RGVmaW5lZCIsImNvbnRleHQiLCJpc1R5cGVkQXJyYXkiLCJUeXBlZEFycmF5IiwiVWludDhBcnJheSIsImlzSFRNTEZvcm0iLCJwcm9wIiwiaXNSZWdFeHAiLCJyZWR1Y2VEZXNjcmlwdG9ycyIsInJlZHVjZXIiLCJkZXNjcmlwdG9ycyIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJyZWR1Y2VkRGVzY3JpcHRvcnMiLCJkZXNjcmlwdG9yIiwicmV0IiwiZGVmaW5lUHJvcGVydGllcyIsImlzQXN5bmNGbiIsIl9zZXRJbW1lZGlhdGUiLCJzZXRJbW1lZGlhdGVTdXBwb3J0ZWQiLCJzZXRJbW1lZGlhdGUiLCJwb3N0TWVzc2FnZVN1cHBvcnRlZCIsInBvc3RNZXNzYWdlIiwidG9rZW4iLCJNYXRoIiwicmFuZG9tIiwiY2FsbGJhY2tzIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNoaWZ0IiwiY2IiLCJzZXRUaW1lb3V0IiwiYXNhcCIsInF1ZXVlTWljcm90YXNrIiwicHJvY2VzcyIsIm5leHRUaWNrIiwidXRpbHMkMSIsImlzRm9ybURhdGEiLCJraW5kIiwiRm9ybURhdGEiLCJhcHBlbmQiLCJpc0FycmF5QnVmZmVyVmlldyIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiYnVmZmVyIiwiaXNCb29sZWFuIiwiaXNFbXB0eU9iamVjdCIsImlzRnVuY3Rpb24iLCJpc1N0cmVhbSIsInBpcGUiLCJtZXJnZSIsImNhc2VsZXNzIiwic2tpcFVuZGVmaW5lZCIsImFzc2lnblZhbHVlIiwidGFyZ2V0S2V5IiwiZXh0ZW5kIiwidHJpbSIsInN0cmlwQk9NIiwiY29udGVudCIsImluaGVyaXRzIiwic3VwZXJDb25zdHJ1Y3RvciIsInByb3BzIiwiZGVmaW5lUHJvcGVydHkiLCJhc3NpZ24iLCJ0b0ZsYXRPYmplY3QiLCJzb3VyY2VPYmoiLCJkZXN0T2JqIiwiZmlsdGVyIiwicHJvcEZpbHRlciIsIm1lcmdlZCIsImVuZHNXaXRoIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJ0b0FycmF5IiwiYXJyIiwiZm9yRWFjaEVudHJ5IiwiX2l0ZXJhdG9yIiwiZG9uZSIsInBhaXIiLCJtYXRjaEFsbCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJleGVjIiwiaGFzT3duUHJvcCIsImZyZWV6ZU1ldGhvZHMiLCJ3cml0YWJsZSIsInNldCIsInRvT2JqZWN0U2V0IiwiYXJyYXlPclN0cmluZyIsImRlbGltaXRlciIsImRlZmluZSIsInNwbGl0IiwidG9DYW1lbENhc2UiLCJwMSIsInAyIiwidG9VcHBlckNhc2UiLCJub29wIiwidG9GaW5pdGVOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJOdW1iZXIiLCJnbG9iYWwiLCJpc1NwZWNDb21wbGlhbnRGb3JtIiwidG9KU09OT2JqZWN0Iiwic3RhY2siLCJ2aXNpdCIsInRhcmdldCIsInJlZHVjZWRWYWx1ZSIsImlzVGhlbmFibGUiLCJ0aGVuIiwiY2F0Y2giLCJpc0l0ZXJhYmxlIiwiQXhpb3NFcnJvciIsInJlcXVlc3QiLCJjYXB0dXJlU3RhY2tUcmFjZSIsInN0YXR1cyIsImRlc2NyaXB0aW9uIiwiZmlsZU5hbWUiLCJsaW5lTnVtYmVyIiwiY29sdW1uTnVtYmVyIiwicHJvdG90eXBlJDEiLCJmcm9tIiwiY3VzdG9tUHJvcHMiLCJheGlvc0Vycm9yIiwibXNnIiwiZXJyQ29kZSIsImNhdXNlIiwiY29uZmlndXJhYmxlIiwiaXNWaXNpdGFibGUiLCJyZW1vdmVCcmFja2V0cyIsInJlbmRlcktleSIsInBhdGgiLCJkb3RzIiwiY29uY2F0IiwicHJlZGljYXRlcyIsInRvRm9ybURhdGEiLCJmb3JtRGF0YSIsIlR5cGVFcnJvciIsIm1ldGFUb2tlbnMiLCJpbmRleGVzIiwib3B0aW9uIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwidXNlQmxvYiIsIkJsb2IiLCJjb252ZXJ0VmFsdWUiLCJ0b0lTT1N0cmluZyIsIkJ1ZmZlciIsInNvbWUiLCJpc0ZsYXRBcnJheSIsImVsIiwiaW5kZXgiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwicG9wIiwiZW5jb2RlJDEiLCJjaGFyTWFwIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwibWF0Y2giLCJBeGlvc1VSTFNlYXJjaFBhcmFtcyIsIl9wYWlycyIsImVuY29kZSIsImJ1aWxkVVJMIiwiX2VuY29kZSIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUZuIiwic2VyaWFsaXplZFBhcmFtcyIsImhhc2htYXJrSW5kZXgiLCJlbmNvZGVyIiwiSW50ZXJjZXB0b3JNYW5hZ2VyJDEiLCJJbnRlcmNlcHRvck1hbmFnZXIiLCJoYW5kbGVycyIsInVzZSIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwic3luY2hyb25vdXMiLCJydW5XaGVuIiwiZWplY3QiLCJpZCIsImNsZWFyIiwiaCIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJwbGF0Zm9ybSQxIiwiY2xhc3NlcyIsIlVSTFNlYXJjaFBhcmFtcyIsInByb3RvY29scyIsImhhc0Jyb3dzZXJFbnYiLCJkb2N1bWVudCIsIl9uYXZpZ2F0b3IiLCJuYXZpZ2F0b3IiLCJoYXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJwcm9kdWN0IiwiaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52IiwiV29ya2VyR2xvYmFsU2NvcGUiLCJpbXBvcnRTY3JpcHRzIiwib3JpZ2luIiwibG9jYXRpb24iLCJocmVmIiwicGxhdGZvcm0iLCJmcmVlemUiLCJfX3Byb3RvX18iLCJmb3JtRGF0YVRvSlNPTiIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsImFycmF5VG9PYmplY3QiLCJlbnRyaWVzIiwicGFyc2VQcm9wUGF0aCIsImRlZmF1bHRzIiwidHJhbnNpdGlvbmFsIiwiYWRhcHRlciIsInRyYW5zZm9ybVJlcXVlc3QiLCJjb250ZW50VHlwZSIsImhhc0pTT05Db250ZW50VHlwZSIsImlzT2JqZWN0UGF5bG9hZCIsInNldENvbnRlbnRUeXBlIiwiaGVscGVycyIsImlzTm9kZSIsInRvVVJMRW5jb2RlZEZvcm0iLCJmb3JtU2VyaWFsaXplciIsIl9Gb3JtRGF0YSIsImVudiIsInJhd1ZhbHVlIiwicGFyc2VyIiwic3RyaW5naWZ5U2FmZWx5IiwiSlNPTlJlcXVlc3RlZCIsInN0cmljdEpTT05QYXJzaW5nIiwicGFyc2VSZXZpdmVyIiwiRVJSX0JBRF9SRVNQT05TRSIsInhzcmZDb29raWVOYW1lIiwieHNyZkhlYWRlck5hbWUiLCJ2YWxpZGF0ZVN0YXR1cyIsImNvbW1vbiIsImRlZmF1bHRzJDEiLCJpZ25vcmVEdXBsaWNhdGVPZiIsIiRpbnRlcm5hbHMiLCJub3JtYWxpemVIZWFkZXIiLCJoZWFkZXIiLCJub3JtYWxpemVWYWx1ZSIsIm1hdGNoSGVhZGVyVmFsdWUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJBeGlvc0hlYWRlcnMiLCJ2YWx1ZU9yUmV3cml0ZSIsInJld3JpdGUiLCJzZXRIZWFkZXIiLCJfdmFsdWUiLCJfaGVhZGVyIiwiX3Jld3JpdGUiLCJsSGVhZGVyIiwic2V0SGVhZGVycyIsInJhd0hlYWRlcnMiLCJwYXJzZWQiLCJsaW5lIiwicGFyc2VIZWFkZXJzIiwiZGVzdCIsImVudHJ5IiwidG9rZW5zIiwidG9rZW5zUkUiLCJwYXJzZVRva2VucyIsImhhcyIsIm1hdGNoZXIiLCJkZWxldGVkIiwiZGVsZXRlSGVhZGVyIiwibm9ybWFsaXplIiwiZm9ybWF0Iiwibm9ybWFsaXplZCIsInciLCJjaGFyIiwiZm9ybWF0SGVhZGVyIiwidGFyZ2V0cyIsImFzU3RyaW5ncyIsImdldFNldENvb2tpZSIsImZpcnN0IiwiY29tcHV0ZWQiLCJhY2Nlc3NvciIsImFjY2Vzc29ycyIsImRlZmluZUFjY2Vzc29yIiwiYWNjZXNzb3JOYW1lIiwibWV0aG9kTmFtZSIsImFyZzEiLCJhcmcyIiwiYXJnMyIsImJ1aWxkQWNjZXNzb3JzIiwibWFwcGVkIiwiaGVhZGVyVmFsdWUiLCJBeGlvc0hlYWRlcnMkMSIsInRyYW5zZm9ybURhdGEiLCJmbnMiLCJpc0NhbmNlbCIsIl9fQ0FOQ0VMX18iLCJDYW5jZWxlZEVycm9yIiwiRVJSX0NBTkNFTEVEIiwic2V0dGxlIiwicmVzb2x2ZSIsInJlamVjdCIsIkVSUl9CQURfUkVRVUVTVCIsImZsb29yIiwicHJvZ3Jlc3NFdmVudFJlZHVjZXIiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJmcmVxIiwiYnl0ZXNOb3RpZmllZCIsIl9zcGVlZG9tZXRlciIsInNhbXBsZXNDb3VudCIsIm1pbiIsImJ5dGVzIiwidGltZXN0YW1wcyIsImZpcnN0U2FtcGxlVFMiLCJoZWFkIiwidGFpbCIsImNodW5rTGVuZ3RoIiwibm93IiwiRGF0ZSIsInN0YXJ0ZWRBdCIsImJ5dGVzQ291bnQiLCJwYXNzZWQiLCJyb3VuZCIsInNwZWVkb21ldGVyIiwibGFzdEFyZ3MiLCJ0aW1lciIsInRpbWVzdGFtcCIsInRocmVzaG9sZCIsImludm9rZSIsImFyZ3MiLCJjbGVhclRpbWVvdXQiLCJ0aHJvdHRsZSIsImxvYWRlZCIsInRvdGFsIiwibGVuZ3RoQ29tcHV0YWJsZSIsInByb2dyZXNzQnl0ZXMiLCJyYXRlIiwicHJvZ3Jlc3MiLCJlc3RpbWF0ZWQiLCJldmVudCIsInByb2dyZXNzRXZlbnREZWNvcmF0b3IiLCJ0aHJvdHRsZWQiLCJhc3luY0RlY29yYXRvciIsImlzVVJMU2FtZU9yaWdpbiIsImlzTVNJRSIsIlVSTCIsInBvcnQiLCJ1c2VyQWdlbnQiLCJjb29raWVzIiwid3JpdGUiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwidG9HTVRTdHJpbmciLCJyZWFkIiwiUmVnRXhwIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicmVtb3ZlIiwiYnVpbGRGdWxsUGF0aCIsImJhc2VVUkwiLCJyZXF1ZXN0ZWRVUkwiLCJhbGxvd0Fic29sdXRlVXJscyIsImlzUmVsYXRpdmVVcmwiLCJyZWxhdGl2ZVVSTCIsImNvbWJpbmVVUkxzIiwiaGVhZGVyc1RvT2JqZWN0IiwibWVyZ2VDb25maWciLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwibWVyZ2VEZWVwUHJvcGVydGllcyIsInZhbHVlRnJvbUNvbmZpZzIiLCJkZWZhdWx0VG9Db25maWcyIiwibWVyZ2VEaXJlY3RLZXlzIiwibWVyZ2VNYXAiLCJwYXJhbXNTZXJpYWxpemVyIiwidGltZW91dE1lc3NhZ2UiLCJ3aXRoQ3JlZGVudGlhbHMiLCJ3aXRoWFNSRlRva2VuIiwib25VcGxvYWRQcm9ncmVzcyIsIm9uRG93bmxvYWRQcm9ncmVzcyIsImRlY29tcHJlc3MiLCJiZWZvcmVSZWRpcmVjdCIsInRyYW5zcG9ydCIsImh0dHBBZ2VudCIsImh0dHBzQWdlbnQiLCJjYW5jZWxUb2tlbiIsInNvY2tldFBhdGgiLCJyZXNwb25zZUVuY29kaW5nIiwiY29uZmlnVmFsdWUiLCJyZXNvbHZlQ29uZmlnIiwibmV3Q29uZmlnIiwiYnRvYSIsInVuZXNjYXBlIiwiZ2V0SGVhZGVycyIsImZvcm1IZWFkZXJzIiwiYWxsb3dlZEhlYWRlcnMiLCJ4c3JmVmFsdWUiLCJ4aHJBZGFwdGVyIiwiWE1MSHR0cFJlcXVlc3QiLCJQcm9taXNlIiwiX2NvbmZpZyIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJvbkNhbmNlbGVkIiwidXBsb2FkVGhyb3R0bGVkIiwiZG93bmxvYWRUaHJvdHRsZWQiLCJmbHVzaFVwbG9hZCIsImZsdXNoRG93bmxvYWQiLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJvbmxvYWRlbmQiLCJyZXNwb25zZUhlYWRlcnMiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJlcnIiLCJyZXNwb25zZVRleHQiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwib25hYm9ydCIsIkVDT05OQUJPUlRFRCIsIm9uZXJyb3IiLCJFUlJfTkVUV09SSyIsIm9udGltZW91dCIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJFVElNRURPVVQiLCJzZXRSZXF1ZXN0SGVhZGVyIiwidXBsb2FkIiwiY2FuY2VsIiwiYWJvcnQiLCJzdWJzY3JpYmUiLCJhYm9ydGVkIiwicGFyc2VQcm90b2NvbCIsInNlbmQiLCJjb21wb3NlU2lnbmFscyQxIiwic2lnbmFscyIsIkJvb2xlYW4iLCJjb250cm9sbGVyIiwiQWJvcnRDb250cm9sbGVyIiwicmVhc29uIiwic3RyZWFtQ2h1bmsiLCJjaHVuayIsImNodW5rU2l6ZSIsImJ5dGVMZW5ndGgiLCJlbmQiLCJwb3MiLCJyZWFkU3RyZWFtIiwiYXN5bmMiLCJzdHJlYW0iLCJhc3luY0l0ZXJhdG9yIiwicmVhZGVyIiwiZ2V0UmVhZGVyIiwidHJhY2tTdHJlYW0iLCJvblByb2dyZXNzIiwib25GaW5pc2giLCJpdGVyYWJsZSIsInJlYWRCeXRlcyIsIl9vbkZpbmlzaCIsIlJlYWRhYmxlU3RyZWFtIiwicHVsbCIsImNsb3NlIiwibG9hZGVkQnl0ZXMiLCJlbnF1ZXVlIiwicmV0dXJuIiwiaGlnaFdhdGVyTWFyayIsImdsb2JhbEZldGNoQVBJIiwiUmVzcG9uc2UiLCJSZWFkYWJsZVN0cmVhbSQxIiwiVGV4dEVuY29kZXIiLCJmYWN0b3J5IiwiZmV0Y2giLCJlbnZGZXRjaCIsImlzRmV0Y2hTdXBwb3J0ZWQiLCJpc1JlcXVlc3RTdXBwb3J0ZWQiLCJpc1Jlc3BvbnNlU3VwcG9ydGVkIiwiaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCIsImVuY29kZVRleHQiLCJhcnJheUJ1ZmZlciIsInN1cHBvcnRzUmVxdWVzdFN0cmVhbSIsImR1cGxleEFjY2Vzc2VkIiwiaGFzQ29udGVudFR5cGUiLCJkdXBsZXgiLCJzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtIiwicmVzb2x2ZXJzIiwicmVzIiwiRVJSX05PVF9TVVBQT1JUIiwicmVzb2x2ZUJvZHlMZW5ndGgiLCJnZXRDb250ZW50TGVuZ3RoIiwic2l6ZSIsIl9yZXF1ZXN0IiwiZ2V0Qm9keUxlbmd0aCIsImZldGNoT3B0aW9ucyIsIl9mZXRjaCIsImNvbXBvc2VkU2lnbmFsIiwidG9BYm9ydFNpZ25hbCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiY29udGVudFR5cGVIZWFkZXIiLCJmbHVzaCIsImlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQiLCJyZXNvbHZlZE9wdGlvbnMiLCJpc1N0cmVhbVJlc3BvbnNlIiwicmVzcG9uc2VDb250ZW50TGVuZ3RoIiwic2VlZENhY2hlIiwiTWFwIiwiZ2V0RmV0Y2giLCJzZWVkcyIsInNlZWQiLCJrbm93bkFkYXB0ZXJzIiwiaHR0cCIsInhociIsInJlbmRlclJlYXNvbiIsImlzUmVzb2x2ZWRIYW5kbGUiLCJhZGFwdGVycyIsIm5hbWVPckFkYXB0ZXIiLCJyZWplY3RlZFJlYXNvbnMiLCJyZWFzb25zIiwic3RhdGUiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwidGhyb3dJZlJlcXVlc3RlZCIsImRpc3BhdGNoUmVxdWVzdCIsIlZFUlNJT04iLCJ2YWxpZGF0b3JzJDEiLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ2YWxpZGF0b3IiLCJmb3JtYXRNZXNzYWdlIiwib3B0IiwiZGVzYyIsIm9wdHMiLCJFUlJfREVQUkVDQVRFRCIsImNvbnNvbGUiLCJ3YXJuIiwic3BlbGxpbmciLCJjb3JyZWN0U3BlbGxpbmciLCJhc3NlcnRPcHRpb25zIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkF4aW9zIiwiaW5zdGFuY2VDb25maWciLCJpbnRlcmNlcHRvcnMiLCJjb25maWdPclVybCIsImR1bW15IiwiYm9vbGVhbiIsImZ1bmN0aW9uIiwid2l0aFhzcmZUb2tlbiIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJwcm9taXNlIiwiY2hhaW4iLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJnZXRVcmkiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJBeGlvcyQxIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsInJlc29sdmVQcm9taXNlIiwiX2xpc3RlbmVycyIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJzcGxpY2UiLCJDYW5jZWxUb2tlbiQxIiwiSHR0cFN0YXR1c0NvZGUiLCJDb250aW51ZSIsIlN3aXRjaGluZ1Byb3RvY29scyIsIlByb2Nlc3NpbmciLCJFYXJseUhpbnRzIiwiT2siLCJDcmVhdGVkIiwiQWNjZXB0ZWQiLCJOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24iLCJOb0NvbnRlbnQiLCJSZXNldENvbnRlbnQiLCJQYXJ0aWFsQ29udGVudCIsIk11bHRpU3RhdHVzIiwiQWxyZWFkeVJlcG9ydGVkIiwiSW1Vc2VkIiwiTXVsdGlwbGVDaG9pY2VzIiwiTW92ZWRQZXJtYW5lbnRseSIsIkZvdW5kIiwiU2VlT3RoZXIiLCJOb3RNb2RpZmllZCIsIlVzZVByb3h5IiwiVW51c2VkIiwiVGVtcG9yYXJ5UmVkaXJlY3QiLCJQZXJtYW5lbnRSZWRpcmVjdCIsIkJhZFJlcXVlc3QiLCJVbmF1dGhvcml6ZWQiLCJQYXltZW50UmVxdWlyZWQiLCJGb3JiaWRkZW4iLCJOb3RGb3VuZCIsIk1ldGhvZE5vdEFsbG93ZWQiLCJOb3RBY2NlcHRhYmxlIiwiUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkIiwiUmVxdWVzdFRpbWVvdXQiLCJDb25mbGljdCIsIkdvbmUiLCJMZW5ndGhSZXF1aXJlZCIsIlByZWNvbmRpdGlvbkZhaWxlZCIsIlBheWxvYWRUb29MYXJnZSIsIlVyaVRvb0xvbmciLCJVbnN1cHBvcnRlZE1lZGlhVHlwZSIsIlJhbmdlTm90U2F0aXNmaWFibGUiLCJFeHBlY3RhdGlvbkZhaWxlZCIsIkltQVRlYXBvdCIsIk1pc2RpcmVjdGVkUmVxdWVzdCIsIlVucHJvY2Vzc2FibGVFbnRpdHkiLCJMb2NrZWQiLCJGYWlsZWREZXBlbmRlbmN5IiwiVG9vRWFybHkiLCJVcGdyYWRlUmVxdWlyZWQiLCJQcmVjb25kaXRpb25SZXF1aXJlZCIsIlRvb01hbnlSZXF1ZXN0cyIsIlJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSIsIlVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zIiwiSW50ZXJuYWxTZXJ2ZXJFcnJvciIsIk5vdEltcGxlbWVudGVkIiwiQmFkR2F0ZXdheSIsIlNlcnZpY2VVbmF2YWlsYWJsZSIsIkdhdGV3YXlUaW1lb3V0IiwiSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQiLCJWYXJpYW50QWxzb05lZ290aWF0ZXMiLCJJbnN1ZmZpY2llbnRTdG9yYWdlIiwiTG9vcERldGVjdGVkIiwiTm90RXh0ZW5kZWQiLCJOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCIsIkh0dHBTdGF0dXNDb2RlJDEiLCJheGlvcyIsImNyZWF0ZUluc3RhbmNlIiwiZGVmYXVsdENvbmZpZyIsImluc3RhbmNlIiwiQ2FuY2VsIiwiYWxsIiwicHJvbWlzZXMiLCJzcHJlYWQiLCJjYWxsYmFjayIsImlzQXhpb3NFcnJvciIsInBheWxvYWQiLCJmb3JtVG9KU09OIiwiZ2V0QWRhcHRlciIsImRlZmF1bHQiLCJ0YXJnZXRPYmplY3QiLCJzdHJBcnJheSIsInJlc3VsdEFycmF5IiwiY29tcG9uZW50IiwicGFydHMiLCJkZWZpbml0aW9uIiwiQ2F0ZWdvcmllcyIsIkNhdGVnb3JpZXNTZWxlY3Rpb25NZXRob2QiLCJPd25lclR5cGUiLCJQdXJwb3NlcyIsIlB1cnBvc2VzU2VsZWN0aW9uTWV0aG9kIiwiaXNOdW1lcmljIiwibWF0aGNlaWwiLCJjZWlsIiwibWF0aGZsb29yIiwiYmlnbnVtYmVyRXJyb3IiLCJ0b29NYW55RGlnaXRzIiwiQkFTRSIsIkxPR19CQVNFIiwiTUFYX1NBRkVfSU5URUdFUiIsIlBPV1NfVEVOIiwiU1FSVF9CQVNFIiwiTUFYIiwiYml0Rmxvb3IiLCJjb2VmZlRvU3RyaW5nIiwicyIsInoiLCJqIiwiY29tcGFyZSIsIngiLCJ5IiwieGMiLCJ5YyIsImludENoZWNrIiwibWF4IiwiaXNPZGQiLCJ0b0V4cG9uZW50aWFsIiwidG9GaXhlZFBvaW50IiwienMiLCJjbG9uZSIsImNvbmZpZ09iamVjdCIsImRpdiIsImNvbnZlcnRCYXNlIiwicGFyc2VOdW1lcmljIiwicG93Ml81MyIsInJhbmRvbTUzYml0SW50IiwiYmFzZVByZWZpeCIsImRvdEFmdGVyIiwiZG90QmVmb3JlIiwiaXNJbmZpbml0eU9yTmFOIiwid2hpdGVzcGFjZU9yUGx1cyIsIlAiLCJ2YWx1ZU9mIiwiT05FIiwiREVDSU1BTF9QTEFDRVMiLCJST1VORElOR19NT0RFIiwiVE9fRVhQX05FRyIsIlRPX0VYUF9QT1MiLCJNSU5fRVhQIiwiTUFYX0VYUCIsIkNSWVBUTyIsIk1PRFVMT19NT0RFIiwiUE9XX1BSRUNJU0lPTiIsIkZPUk1BVCIsInByZWZpeCIsImdyb3VwU2l6ZSIsInNlY29uZGFyeUdyb3VwU2l6ZSIsImdyb3VwU2VwYXJhdG9yIiwiZGVjaW1hbFNlcGFyYXRvciIsImZyYWN0aW9uR3JvdXBTaXplIiwiZnJhY3Rpb25Hcm91cFNlcGFyYXRvciIsInN1ZmZpeCIsIkFMUEhBQkVUIiwiYWxwaGFiZXQiLCJjYXNlQ2hhbmdlZCIsImlzTnVtIiwiX2lzQmlnTnVtYmVyIiwic2VhcmNoIiwiREVCVUciLCJybSIsImMwIiwibmUiLCJtYXhPck1pbiIsIm5vcm1hbGlzZSIsInNkIiwiZCIsIm5pIiwicmQiLCJwb3dzMTAiLCJvdXQiLCJST1VORF9VUCIsIlJPVU5EX0RPV04iLCJST1VORF9DRUlMIiwiUk9VTkRfRkxPT1IiLCJST1VORF9IQUxGX1VQIiwiUk9VTkRfSEFMRl9ET1dOIiwiUk9VTkRfSEFMRl9FVkVOIiwiUk9VTkRfSEFMRl9DRUlMIiwiUk9VTkRfSEFMRl9GTE9PUiIsIkVVQ0xJRCIsInAiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJyYW5kb21CeXRlcyIsIkVYUE9ORU5USUFMX0FUIiwiUkFOR0UiLCJtYXhpbXVtIiwibHQiLCJtaW5pbXVtIiwiZ3QiLCJkcCIsInJhbmQiLCJVaW50MzJBcnJheSIsImNvcHkiLCJzdW0iLCJwbHVzIiwiZGVjaW1hbCIsInRvQmFzZU91dCIsImJhc2VJbiIsImJhc2VPdXQiLCJhcnJMIiwicmV2ZXJzZSIsInNpZ24iLCJjYWxsZXJJc1RvU3RyaW5nIiwicG93IiwibXVsdGlwbHkiLCJiYXNlIiwidGVtcCIsInhsbyIsInhoaSIsImNhcnJ5Iiwia2xvIiwia2hpIiwiYUwiLCJiTCIsImNtcCIsInN1YnRyYWN0IiwibW9yZSIsInByb2QiLCJwcm9kTCIsInEiLCJxYyIsInJlbSIsInJlbUwiLCJyZW0wIiwieGkiLCJ4TCIsInljMCIsInlMIiwieXoiLCJOYU4iLCJpc05hTiIsImFic29sdXRlVmFsdWUiLCJhYnMiLCJjb21wYXJlZFRvIiwiZGVjaW1hbFBsYWNlcyIsImRpdmlkZWRCeSIsImRpdmlkZWRUb0ludGVnZXJCeSIsImlkaXYiLCJleHBvbmVudGlhdGVkQnkiLCJoYWxmIiwiaXNNb2RFeHAiLCJuSXNCaWciLCJuSXNOZWciLCJuSXNPZGQiLCJpc0ludGVnZXIiLCJtb2QiLCJ0aW1lcyIsImludGVnZXJWYWx1ZSIsImlzRXF1YWxUbyIsImVxIiwiaXNHcmVhdGVyVGhhbiIsImlzR3JlYXRlclRoYW5PckVxdWFsVG8iLCJndGUiLCJpc0xlc3NUaGFuIiwiaXNMZXNzVGhhbk9yRXF1YWxUbyIsImx0ZSIsImlzTmVnYXRpdmUiLCJpc1Bvc2l0aXZlIiwiaXNaZXJvIiwibWludXMiLCJ4TFR5IiwieGUiLCJ5ZSIsIm1vZHVsbyIsIm11bHRpcGxpZWRCeSIsInhjTCIsInljTCIsInlsbyIsInloaSIsInpjIiwic3FydEJhc2UiLCJuZWdhdGVkIiwicHJlY2lzaW9uIiwic2hpZnRlZEJ5Iiwic3F1YXJlUm9vdCIsInNxcnQiLCJ0b0ZpeGVkIiwidG9Gb3JtYXQiLCJnMSIsImcyIiwiaW50UGFydCIsImZyYWN0aW9uUGFydCIsImlzTmVnIiwiaW50RGlnaXRzIiwic3Vic3RyIiwidG9GcmFjdGlvbiIsIm1kIiwiZDAiLCJkMSIsImQyIiwiZXhwIiwibjAiLCJuMSIsInRvTnVtYmVyIiwidG9QcmVjaXNpb24iLCJNYW5hZ2VDb250YWN0c0FjdGlvbiIsIkltcG9ydExpc3RBY3Rpb24iLCJJbXBvcnRDU1ZNZXRob2QiLCJDU1ZJbXBvcnRTdGF0dXMiLCJKb2JTdGF0dXMiLCJEYXRhVHlwZSIsIk5hbWVTcGFjZSIsIlRyYWNrT3BlbnMiLCJUcmFja0NsaWNrcyIsIlJlc3BvbnNlU3RhdHVzIiwiaXNQdXJlT2JqZWN0IiwiaW5pdCIsImNsb25lUGFyYW1zIiwiQ2xpZW50IiwicmVxdWVzdF8xIiwiR2V0IiwicGFja2FnZUpTT04iLCJzZXRDb25maWciLCJzZXRPcHRpb25zIiwidG9rZW5Db25uZWN0U3RyYXRlZ3kiLCJiYXNpY0Nvbm5lY3RTdHJhdGVneSIsImNsb25lZFBhcmFtcyIsImN1c3RvbUNvbmZpZyIsIl9fYXNzaWduIiwicGFja2FnZV9qc29uXzEiLCJTZWdtZW50U3RhdHVzIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIkZ1bmN0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==