-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy path1067.af017f0b.iframe.bundle.js
3 lines (3 loc) · 520 KB
/
1067.af017f0b.iframe.bundle.js
1
2
3
/*! For license information please see 1067.af017f0b.iframe.bundle.js.LICENSE.txt */
(self.webpackChunkblockly_mooc=self.webpackChunkblockly_mooc||[]).push([[1067],{"./node_modules/aws-sdk/clients/cognitoidentity.js":(module,__unused_webpack_exports,__webpack_require__)=>{__webpack_require__("./node_modules/aws-sdk/lib/browser_loader.js");var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),Service=AWS.Service,apiLoader=AWS.apiLoader;apiLoader.services.cognitoidentity={},AWS.CognitoIdentity=Service.defineService("cognitoidentity",["2014-06-30"]),Object.defineProperty(apiLoader.services.cognitoidentity,"2014-06-30",{get:function get(){var model=__webpack_require__("./node_modules/aws-sdk/apis/cognito-identity-2014-06-30.min.json");return model.paginators=__webpack_require__("./node_modules/aws-sdk/apis/cognito-identity-2014-06-30.paginators.json").X,model},enumerable:!0,configurable:!0}),module.exports=AWS.CognitoIdentity},"./node_modules/aws-sdk/clients/firehose.js":(module,__unused_webpack_exports,__webpack_require__)=>{__webpack_require__("./node_modules/aws-sdk/lib/browser_loader.js");var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),Service=AWS.Service,apiLoader=AWS.apiLoader;apiLoader.services.firehose={},AWS.Firehose=Service.defineService("firehose",["2015-08-04"]),Object.defineProperty(apiLoader.services.firehose,"2015-08-04",{get:function get(){var model=__webpack_require__("./node_modules/aws-sdk/apis/firehose-2015-08-04.min.json");return model.paginators=__webpack_require__("./node_modules/aws-sdk/apis/firehose-2015-08-04.paginators.json").X,model},enumerable:!0,configurable:!0}),module.exports=AWS.Firehose},"./node_modules/aws-sdk/clients/sts.js":(module,__unused_webpack_exports,__webpack_require__)=>{__webpack_require__("./node_modules/aws-sdk/lib/browser_loader.js");var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),Service=AWS.Service,apiLoader=AWS.apiLoader;apiLoader.services.sts={},AWS.STS=Service.defineService("sts",["2011-06-15"]),__webpack_require__("./node_modules/aws-sdk/lib/services/sts.js"),Object.defineProperty(apiLoader.services.sts,"2011-06-15",{get:function get(){var model=__webpack_require__("./node_modules/aws-sdk/apis/sts-2011-06-15.min.json");return model.paginators=__webpack_require__("./node_modules/aws-sdk/apis/sts-2011-06-15.paginators.json").X,model},enumerable:!0,configurable:!0}),module.exports=AWS.STS},"./node_modules/aws-sdk/lib/browserCryptoLib.js":(module,exports,__webpack_require__)=>{var Hmac=__webpack_require__("./node_modules/aws-sdk/lib/browserHmac.js"),Md5=__webpack_require__("./node_modules/aws-sdk/lib/browserMd5.js"),Sha1=__webpack_require__("./node_modules/aws-sdk/lib/browserSha1.js"),Sha256=__webpack_require__("./node_modules/aws-sdk/lib/browserSha256.js");module.exports={createHash:function createHash(alg){if("md5"===(alg=alg.toLowerCase()))return new Md5;if("sha256"===alg)return new Sha256;if("sha1"===alg)return new Sha1;throw new Error("Hash algorithm "+alg+" is not supported in the browser SDK")},createHmac:function createHmac(alg,key){if("md5"===(alg=alg.toLowerCase()))return new Hmac(Md5,key);if("sha256"===alg)return new Hmac(Sha256,key);if("sha1"===alg)return new Hmac(Sha1,key);throw new Error("HMAC algorithm "+alg+" is not supported in the browser SDK")},createSign:function(){throw new Error("createSign is not implemented in the browser")}}},"./node_modules/aws-sdk/lib/browserHashUtils.js":(module,exports,__webpack_require__)=>{var Buffer=__webpack_require__("./node_modules/aws-sdk/node_modules/buffer/index.js").hp;"undefined"!=typeof ArrayBuffer&&void 0===ArrayBuffer.isView&&(ArrayBuffer.isView=function(arg){return viewStrings.indexOf(Object.prototype.toString.call(arg))>-1});var viewStrings=["[object Int8Array]","[object Uint8Array]","[object Uint8ClampedArray]","[object Int16Array]","[object Uint16Array]","[object Int32Array]","[object Uint32Array]","[object Float32Array]","[object Float64Array]","[object DataView]"];module.exports={isEmptyData:function isEmptyData(data){return"string"==typeof data?0===data.length:0===data.byteLength},convertToBuffer:function convertToBuffer(data){return"string"==typeof data&&(data=new Buffer(data,"utf8")),ArrayBuffer.isView(data)?new Uint8Array(data.buffer,data.byteOffset,data.byteLength/Uint8Array.BYTES_PER_ELEMENT):new Uint8Array(data)}}},"./node_modules/aws-sdk/lib/browserHmac.js":(module,exports,__webpack_require__)=>{var hashUtils=__webpack_require__("./node_modules/aws-sdk/lib/browserHashUtils.js");function Hmac(hashCtor,secret){this.hash=new hashCtor,this.outer=new hashCtor;var inner=function bufferFromSecret(hashCtor,secret){var input=hashUtils.convertToBuffer(secret);if(input.byteLength>hashCtor.BLOCK_SIZE){var bufferHash=new hashCtor;bufferHash.update(input),input=bufferHash.digest()}var buffer=new Uint8Array(hashCtor.BLOCK_SIZE);return buffer.set(input),buffer}(hashCtor,secret),outer=new Uint8Array(hashCtor.BLOCK_SIZE);outer.set(inner);for(var i=0;i<hashCtor.BLOCK_SIZE;i++)inner[i]^=54,outer[i]^=92;this.hash.update(inner),this.outer.update(outer);for(i=0;i<inner.byteLength;i++)inner[i]=0}module.exports=Hmac,Hmac.prototype.update=function(toHash){if(hashUtils.isEmptyData(toHash)||this.error)return this;try{this.hash.update(hashUtils.convertToBuffer(toHash))}catch(e){this.error=e}return this},Hmac.prototype.digest=function(encoding){return this.outer.finished||this.outer.update(this.hash.digest()),this.outer.digest(encoding)}},"./node_modules/aws-sdk/lib/browserMd5.js":(module,exports,__webpack_require__)=>{var hashUtils=__webpack_require__("./node_modules/aws-sdk/lib/browserHashUtils.js"),Buffer=__webpack_require__("./node_modules/aws-sdk/node_modules/buffer/index.js").hp;function Md5(){this.state=[1732584193,4023233417,2562383102,271733878],this.buffer=new DataView(new ArrayBuffer(64)),this.bufferLength=0,this.bytesHashed=0,this.finished=!1}function cmn(q,a,b,x,s,t){return((a=(a+q&4294967295)+(x+t&4294967295)&4294967295)<<s|a>>>32-s)+b&4294967295}function ff(a,b,c,d,x,s,t){return cmn(b&c|~b&d,a,b,x,s,t)}function gg(a,b,c,d,x,s,t){return cmn(b&d|c&~d,a,b,x,s,t)}function hh(a,b,c,d,x,s,t){return cmn(b^c^d,a,b,x,s,t)}function ii(a,b,c,d,x,s,t){return cmn(c^(b|~d),a,b,x,s,t)}module.exports=Md5,Md5.BLOCK_SIZE=64,Md5.prototype.update=function(sourceData){if(hashUtils.isEmptyData(sourceData))return this;if(this.finished)throw new Error("Attempted to update an already finished hash.");var data=hashUtils.convertToBuffer(sourceData),position=0,byteLength=data.byteLength;for(this.bytesHashed+=byteLength;byteLength>0;)this.buffer.setUint8(this.bufferLength++,data[position++]),byteLength--,64===this.bufferLength&&(this.hashBuffer(),this.bufferLength=0);return this},Md5.prototype.digest=function(encoding){if(!this.finished){var buffer=this.buffer,undecoratedLength=this.bufferLength,bitsHashed=8*this.bytesHashed;if(buffer.setUint8(this.bufferLength++,128),undecoratedLength%64>=56){for(var i=this.bufferLength;i<64;i++)buffer.setUint8(i,0);this.hashBuffer(),this.bufferLength=0}for(i=this.bufferLength;i<56;i++)buffer.setUint8(i,0);buffer.setUint32(56,bitsHashed>>>0,!0),buffer.setUint32(60,Math.floor(bitsHashed/4294967296),!0),this.hashBuffer(),this.finished=!0}var out=new DataView(new ArrayBuffer(16));for(i=0;i<4;i++)out.setUint32(4*i,this.state[i],!0);var buff=new Buffer(out.buffer,out.byteOffset,out.byteLength);return encoding?buff.toString(encoding):buff},Md5.prototype.hashBuffer=function(){var buffer=this.buffer,state=this.state,a=state[0],b=state[1],c=state[2],d=state[3];a=ff(a,b,c,d,buffer.getUint32(0,!0),7,3614090360),d=ff(d,a,b,c,buffer.getUint32(4,!0),12,3905402710),c=ff(c,d,a,b,buffer.getUint32(8,!0),17,606105819),b=ff(b,c,d,a,buffer.getUint32(12,!0),22,3250441966),a=ff(a,b,c,d,buffer.getUint32(16,!0),7,4118548399),d=ff(d,a,b,c,buffer.getUint32(20,!0),12,1200080426),c=ff(c,d,a,b,buffer.getUint32(24,!0),17,2821735955),b=ff(b,c,d,a,buffer.getUint32(28,!0),22,4249261313),a=ff(a,b,c,d,buffer.getUint32(32,!0),7,1770035416),d=ff(d,a,b,c,buffer.getUint32(36,!0),12,2336552879),c=ff(c,d,a,b,buffer.getUint32(40,!0),17,4294925233),b=ff(b,c,d,a,buffer.getUint32(44,!0),22,2304563134),a=ff(a,b,c,d,buffer.getUint32(48,!0),7,1804603682),d=ff(d,a,b,c,buffer.getUint32(52,!0),12,4254626195),c=ff(c,d,a,b,buffer.getUint32(56,!0),17,2792965006),a=gg(a,b=ff(b,c,d,a,buffer.getUint32(60,!0),22,1236535329),c,d,buffer.getUint32(4,!0),5,4129170786),d=gg(d,a,b,c,buffer.getUint32(24,!0),9,3225465664),c=gg(c,d,a,b,buffer.getUint32(44,!0),14,643717713),b=gg(b,c,d,a,buffer.getUint32(0,!0),20,3921069994),a=gg(a,b,c,d,buffer.getUint32(20,!0),5,3593408605),d=gg(d,a,b,c,buffer.getUint32(40,!0),9,38016083),c=gg(c,d,a,b,buffer.getUint32(60,!0),14,3634488961),b=gg(b,c,d,a,buffer.getUint32(16,!0),20,3889429448),a=gg(a,b,c,d,buffer.getUint32(36,!0),5,568446438),d=gg(d,a,b,c,buffer.getUint32(56,!0),9,3275163606),c=gg(c,d,a,b,buffer.getUint32(12,!0),14,4107603335),b=gg(b,c,d,a,buffer.getUint32(32,!0),20,1163531501),a=gg(a,b,c,d,buffer.getUint32(52,!0),5,2850285829),d=gg(d,a,b,c,buffer.getUint32(8,!0),9,4243563512),c=gg(c,d,a,b,buffer.getUint32(28,!0),14,1735328473),a=hh(a,b=gg(b,c,d,a,buffer.getUint32(48,!0),20,2368359562),c,d,buffer.getUint32(20,!0),4,4294588738),d=hh(d,a,b,c,buffer.getUint32(32,!0),11,2272392833),c=hh(c,d,a,b,buffer.getUint32(44,!0),16,1839030562),b=hh(b,c,d,a,buffer.getUint32(56,!0),23,4259657740),a=hh(a,b,c,d,buffer.getUint32(4,!0),4,2763975236),d=hh(d,a,b,c,buffer.getUint32(16,!0),11,1272893353),c=hh(c,d,a,b,buffer.getUint32(28,!0),16,4139469664),b=hh(b,c,d,a,buffer.getUint32(40,!0),23,3200236656),a=hh(a,b,c,d,buffer.getUint32(52,!0),4,681279174),d=hh(d,a,b,c,buffer.getUint32(0,!0),11,3936430074),c=hh(c,d,a,b,buffer.getUint32(12,!0),16,3572445317),b=hh(b,c,d,a,buffer.getUint32(24,!0),23,76029189),a=hh(a,b,c,d,buffer.getUint32(36,!0),4,3654602809),d=hh(d,a,b,c,buffer.getUint32(48,!0),11,3873151461),c=hh(c,d,a,b,buffer.getUint32(60,!0),16,530742520),a=ii(a,b=hh(b,c,d,a,buffer.getUint32(8,!0),23,3299628645),c,d,buffer.getUint32(0,!0),6,4096336452),d=ii(d,a,b,c,buffer.getUint32(28,!0),10,1126891415),c=ii(c,d,a,b,buffer.getUint32(56,!0),15,2878612391),b=ii(b,c,d,a,buffer.getUint32(20,!0),21,4237533241),a=ii(a,b,c,d,buffer.getUint32(48,!0),6,1700485571),d=ii(d,a,b,c,buffer.getUint32(12,!0),10,2399980690),c=ii(c,d,a,b,buffer.getUint32(40,!0),15,4293915773),b=ii(b,c,d,a,buffer.getUint32(4,!0),21,2240044497),a=ii(a,b,c,d,buffer.getUint32(32,!0),6,1873313359),d=ii(d,a,b,c,buffer.getUint32(60,!0),10,4264355552),c=ii(c,d,a,b,buffer.getUint32(24,!0),15,2734768916),b=ii(b,c,d,a,buffer.getUint32(52,!0),21,1309151649),a=ii(a,b,c,d,buffer.getUint32(16,!0),6,4149444226),d=ii(d,a,b,c,buffer.getUint32(44,!0),10,3174756917),c=ii(c,d,a,b,buffer.getUint32(8,!0),15,718787259),b=ii(b,c,d,a,buffer.getUint32(36,!0),21,3951481745),state[0]=a+state[0]&4294967295,state[1]=b+state[1]&4294967295,state[2]=c+state[2]&4294967295,state[3]=d+state[3]&4294967295}},"./node_modules/aws-sdk/lib/browserSha1.js":(module,exports,__webpack_require__)=>{var Buffer=__webpack_require__("./node_modules/aws-sdk/node_modules/buffer/index.js").hp,hashUtils=__webpack_require__("./node_modules/aws-sdk/lib/browserHashUtils.js");new Uint32Array([1518500249,1859775393,-1894007588,-899497514]),Math.pow(2,53);function Sha1(){this.h0=1732584193,this.h1=4023233417,this.h2=2562383102,this.h3=271733878,this.h4=3285377520,this.block=new Uint32Array(80),this.offset=0,this.shift=24,this.totalLength=0}module.exports=Sha1,Sha1.BLOCK_SIZE=64,Sha1.prototype.update=function(data){if(this.finished)throw new Error("Attempted to update an already finished hash.");if(hashUtils.isEmptyData(data))return this;var length=(data=hashUtils.convertToBuffer(data)).length;this.totalLength+=8*length;for(var i=0;i<length;i++)this.write(data[i]);return this},Sha1.prototype.write=function write(byte){this.block[this.offset]|=(255&byte)<<this.shift,this.shift?this.shift-=8:(this.offset++,this.shift=24),16===this.offset&&this.processBlock()},Sha1.prototype.digest=function(encoding){this.write(128),(this.offset>14||14===this.offset&&this.shift<24)&&this.processBlock(),this.offset=14,this.shift=24,this.write(0),this.write(0),this.write(this.totalLength>0xffffffffff?this.totalLength/1099511627776:0),this.write(this.totalLength>4294967295?this.totalLength/4294967296:0);for(var s=24;s>=0;s-=8)this.write(this.totalLength>>s);var out=new Buffer(20),outView=new DataView(out.buffer);return outView.setUint32(0,this.h0,!1),outView.setUint32(4,this.h1,!1),outView.setUint32(8,this.h2,!1),outView.setUint32(12,this.h3,!1),outView.setUint32(16,this.h4,!1),encoding?out.toString(encoding):out},Sha1.prototype.processBlock=function processBlock(){for(var i=16;i<80;i++){var w=this.block[i-3]^this.block[i-8]^this.block[i-14]^this.block[i-16];this.block[i]=w<<1|w>>>31}var f,k,a=this.h0,b=this.h1,c=this.h2,d=this.h3,e=this.h4;for(i=0;i<80;i++){i<20?(f=d^b&(c^d),k=1518500249):i<40?(f=b^c^d,k=1859775393):i<60?(f=b&c|d&(b|c),k=2400959708):(f=b^c^d,k=3395469782);var temp=(a<<5|a>>>27)+f+e+k+(0|this.block[i]);e=d,d=c,c=b<<30|b>>>2,b=a,a=temp}for(this.h0=this.h0+a|0,this.h1=this.h1+b|0,this.h2=this.h2+c|0,this.h3=this.h3+d|0,this.h4=this.h4+e|0,this.offset=0,i=0;i<16;i++)this.block[i]=0}},"./node_modules/aws-sdk/lib/browserSha256.js":(module,exports,__webpack_require__)=>{var Buffer=__webpack_require__("./node_modules/aws-sdk/node_modules/buffer/index.js").hp,hashUtils=__webpack_require__("./node_modules/aws-sdk/lib/browserHashUtils.js"),KEY=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),MAX_HASHABLE_LENGTH=Math.pow(2,53)-1;function Sha256(){this.state=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.temp=new Int32Array(64),this.buffer=new Uint8Array(64),this.bufferLength=0,this.bytesHashed=0,this.finished=!1}module.exports=Sha256,Sha256.BLOCK_SIZE=64,Sha256.prototype.update=function(data){if(this.finished)throw new Error("Attempted to update an already finished hash.");if(hashUtils.isEmptyData(data))return this;var position=0,byteLength=(data=hashUtils.convertToBuffer(data)).byteLength;if(this.bytesHashed+=byteLength,8*this.bytesHashed>MAX_HASHABLE_LENGTH)throw new Error("Cannot hash more than 2^53 - 1 bits");for(;byteLength>0;)this.buffer[this.bufferLength++]=data[position++],byteLength--,64===this.bufferLength&&(this.hashBuffer(),this.bufferLength=0);return this},Sha256.prototype.digest=function(encoding){if(!this.finished){var bitsHashed=8*this.bytesHashed,bufferView=new DataView(this.buffer.buffer,this.buffer.byteOffset,this.buffer.byteLength),undecoratedLength=this.bufferLength;if(bufferView.setUint8(this.bufferLength++,128),undecoratedLength%64>=56){for(var i=this.bufferLength;i<64;i++)bufferView.setUint8(i,0);this.hashBuffer(),this.bufferLength=0}for(i=this.bufferLength;i<56;i++)bufferView.setUint8(i,0);bufferView.setUint32(56,Math.floor(bitsHashed/4294967296),!0),bufferView.setUint32(60,bitsHashed),this.hashBuffer(),this.finished=!0}var out=new Buffer(32);for(i=0;i<8;i++)out[4*i]=this.state[i]>>>24&255,out[4*i+1]=this.state[i]>>>16&255,out[4*i+2]=this.state[i]>>>8&255,out[4*i+3]=this.state[i]>>>0&255;return encoding?out.toString(encoding):out},Sha256.prototype.hashBuffer=function(){for(var buffer=this.buffer,state=this.state,state0=state[0],state1=state[1],state2=state[2],state3=state[3],state4=state[4],state5=state[5],state6=state[6],state7=state[7],i=0;i<64;i++){if(i<16)this.temp[i]=(255&buffer[4*i])<<24|(255&buffer[4*i+1])<<16|(255&buffer[4*i+2])<<8|255&buffer[4*i+3];else{var u=this.temp[i-2],t1_1=(u>>>17|u<<15)^(u>>>19|u<<13)^u>>>10,t2_1=((u=this.temp[i-15])>>>7|u<<25)^(u>>>18|u<<14)^u>>>3;this.temp[i]=(t1_1+this.temp[i-7]|0)+(t2_1+this.temp[i-16]|0)}var t1=(((state4>>>6|state4<<26)^(state4>>>11|state4<<21)^(state4>>>25|state4<<7))+(state4&state5^~state4&state6)|0)+(state7+(KEY[i]+this.temp[i]|0)|0)|0,t2=((state0>>>2|state0<<30)^(state0>>>13|state0<<19)^(state0>>>22|state0<<10))+(state0&state1^state0&state2^state1&state2)|0;state7=state6,state6=state5,state5=state4,state4=state3+t1|0,state3=state2,state2=state1,state1=state0,state0=t1+t2|0}state[0]+=state0,state[1]+=state1,state[2]+=state2,state[3]+=state3,state[4]+=state4,state[5]+=state5,state[6]+=state6,state[7]+=state7}},"./node_modules/aws-sdk/lib/browser_loader.js":(module,__unused_webpack_exports,__webpack_require__)=>{var util=__webpack_require__("./node_modules/aws-sdk/lib/util.js");util.crypto.lib=__webpack_require__("./node_modules/aws-sdk/lib/browserCryptoLib.js"),util.Buffer=__webpack_require__("./node_modules/aws-sdk/node_modules/buffer/index.js").hp,util.url=__webpack_require__("./node_modules/url/url.js"),util.querystring=__webpack_require__("./node_modules/querystring/index.js"),util.realClock=__webpack_require__("./node_modules/aws-sdk/lib/realclock/browserClock.js"),util.environment="js",util.createEventStream=__webpack_require__("./node_modules/aws-sdk/lib/event-stream/buffered-create-event-stream.js").createEventStream,util.isBrowser=function(){return!0},util.isNode=function(){return!1};var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js");if(module.exports=AWS,__webpack_require__("./node_modules/aws-sdk/lib/credentials.js"),__webpack_require__("./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js"),__webpack_require__("./node_modules/aws-sdk/lib/credentials/temporary_credentials.js"),__webpack_require__("./node_modules/aws-sdk/lib/credentials/chainable_temporary_credentials.js"),__webpack_require__("./node_modules/aws-sdk/lib/credentials/web_identity_credentials.js"),__webpack_require__("./node_modules/aws-sdk/lib/credentials/cognito_identity_credentials.js"),__webpack_require__("./node_modules/aws-sdk/lib/credentials/saml_credentials.js"),AWS.XML.Parser=__webpack_require__("./node_modules/aws-sdk/lib/xml/browser_parser.js"),__webpack_require__("./node_modules/aws-sdk/lib/http/xhr.js"),void 0===process)var process={browser:!0}},"./node_modules/aws-sdk/lib/config_regional_endpoint.js":(module,__unused_webpack_exports,__webpack_require__)=>{var process=__webpack_require__("./node_modules/process/browser.js"),AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js");function validateRegionalEndpointsFlagValue(configValue,errorOptions){if("string"==typeof configValue){if(["legacy","regional"].indexOf(configValue.toLowerCase())>=0)return configValue.toLowerCase();throw AWS.util.error(new Error,errorOptions)}}module.exports=function resolveRegionalEndpointsFlag(originalConfig,options){var resolved;if((originalConfig=originalConfig||{})[options.clientConfig]&&(resolved=validateRegionalEndpointsFlagValue(originalConfig[options.clientConfig],{code:"InvalidConfiguration",message:'invalid "'+options.clientConfig+'" configuration. Expect "legacy" or "regional". Got "'+originalConfig[options.clientConfig]+'".'})))return resolved;if(!AWS.util.isNode())return resolved;if(Object.prototype.hasOwnProperty.call(process.env,options.env)&&(resolved=validateRegionalEndpointsFlagValue(process.env[options.env],{code:"InvalidEnvironmentalVariable",message:"invalid "+options.env+' environmental variable. Expect "legacy" or "regional". Got "'+process.env[options.env]+'".'})))return resolved;var profile={};try{profile=AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader)[process.env.AWS_PROFILE||AWS.util.defaultProfile]}catch(e){}return profile&&Object.prototype.hasOwnProperty.call(profile,options.sharedConfig)&&(resolved=validateRegionalEndpointsFlagValue(profile[options.sharedConfig],{code:"InvalidConfiguration",message:"invalid "+options.sharedConfig+' profile config. Expect "legacy" or "regional". Got "'+profile[options.sharedConfig]+'".'})),resolved}},"./node_modules/aws-sdk/lib/credentials/chainable_temporary_credentials.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),STS=__webpack_require__("./node_modules/aws-sdk/clients/sts.js");AWS.ChainableTemporaryCredentials=AWS.util.inherit(AWS.Credentials,{constructor:function ChainableTemporaryCredentials(options){AWS.Credentials.call(this),options=options||{},this.errorCode="ChainableTemporaryCredentialsProviderFailure",this.expired=!0,this.tokenCodeFn=null;var params=AWS.util.copy(options.params)||{};if(params.RoleArn&&(params.RoleSessionName=params.RoleSessionName||"temporary-credentials"),params.SerialNumber){if(!options.tokenCodeFn||"function"!=typeof options.tokenCodeFn)throw new AWS.util.error(new Error("tokenCodeFn must be a function when params.SerialNumber is given"),{code:this.errorCode});this.tokenCodeFn=options.tokenCodeFn}var config=AWS.util.merge({params,credentials:options.masterCredentials||AWS.config.credentials},options.stsConfig||{});this.service=new STS(config)},refresh:function refresh(callback){this.coalesceRefresh(callback||AWS.util.fn.callback)},load:function load(callback){var self=this,operation=self.service.config.params.RoleArn?"assumeRole":"getSessionToken";this.getTokenCode((function(err,tokenCode){var params={};err?callback(err):(tokenCode&&(params.TokenCode=tokenCode),self.service[operation](params,(function(err,data){err||self.service.credentialsFrom(data,self),callback(err)})))}))},getTokenCode:function getTokenCode(callback){var self=this;this.tokenCodeFn?this.tokenCodeFn(this.service.config.params.SerialNumber,(function(err,token){if(err){var message=err;return err instanceof Error&&(message=err.message),void callback(AWS.util.error(new Error("Error fetching MFA token: "+message),{code:self.errorCode}))}callback(null,token)})):callback(null)}})},"./node_modules/aws-sdk/lib/credentials/cognito_identity_credentials.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),CognitoIdentity=__webpack_require__("./node_modules/aws-sdk/clients/cognitoidentity.js"),STS=__webpack_require__("./node_modules/aws-sdk/clients/sts.js");AWS.CognitoIdentityCredentials=AWS.util.inherit(AWS.Credentials,{localStorageKey:{id:"aws.cognito.identity-id.",providers:"aws.cognito.identity-providers."},constructor:function CognitoIdentityCredentials(params,clientConfig){AWS.Credentials.call(this),this.expired=!0,this.params=params,this.data=null,this._identityId=null,this._clientConfig=AWS.util.copy(clientConfig||{}),this.loadCachedId();var self=this;Object.defineProperty(this,"identityId",{get:function(){return self.loadCachedId(),self._identityId||self.params.IdentityId},set:function(identityId){self._identityId=identityId}})},refresh:function refresh(callback){this.coalesceRefresh(callback||AWS.util.fn.callback)},load:function load(callback){var self=this;self.createClients(),self.data=null,self._identityId=null,self.getId((function(err){err?(self.clearIdOnNotAuthorized(err),callback(err)):self.params.RoleArn?self.getCredentialsFromSTS(callback):self.getCredentialsForIdentity(callback)}))},clearCachedId:function clearCache(){this._identityId=null,delete this.params.IdentityId;var poolId=this.params.IdentityPoolId,loginId=this.params.LoginId||"";delete this.storage[this.localStorageKey.id+poolId+loginId],delete this.storage[this.localStorageKey.providers+poolId+loginId]},clearIdOnNotAuthorized:function clearIdOnNotAuthorized(err){"NotAuthorizedException"==err.code&&this.clearCachedId()},getId:function getId(callback){var self=this;if("string"==typeof self.params.IdentityId)return callback(null,self.params.IdentityId);self.cognito.getId((function(err,data){!err&&data.IdentityId?(self.params.IdentityId=data.IdentityId,callback(null,data.IdentityId)):callback(err)}))},loadCredentials:function loadCredentials(data,credentials){data&&credentials&&(credentials.expired=!1,credentials.accessKeyId=data.Credentials.AccessKeyId,credentials.secretAccessKey=data.Credentials.SecretKey,credentials.sessionToken=data.Credentials.SessionToken,credentials.expireTime=data.Credentials.Expiration)},getCredentialsForIdentity:function getCredentialsForIdentity(callback){var self=this;self.cognito.getCredentialsForIdentity((function(err,data){err?self.clearIdOnNotAuthorized(err):(self.cacheId(data),self.data=data,self.loadCredentials(self.data,self)),callback(err)}))},getCredentialsFromSTS:function getCredentialsFromSTS(callback){var self=this;self.cognito.getOpenIdToken((function(err,data){err?(self.clearIdOnNotAuthorized(err),callback(err)):(self.cacheId(data),self.params.WebIdentityToken=data.Token,self.webIdentityCredentials.refresh((function(webErr){webErr||(self.data=self.webIdentityCredentials.data,self.sts.credentialsFrom(self.data,self)),callback(webErr)})))}))},loadCachedId:function loadCachedId(){if(AWS.util.isBrowser()&&!this.params.IdentityId){var id=this.getStorage("id");if(id&&this.params.Logins){var actualProviders=Object.keys(this.params.Logins);0!==(this.getStorage("providers")||"").split(",").filter((function(n){return-1!==actualProviders.indexOf(n)})).length&&(this.params.IdentityId=id)}else id&&(this.params.IdentityId=id)}},createClients:function(){var clientConfig=this._clientConfig;if(this.webIdentityCredentials=this.webIdentityCredentials||new AWS.WebIdentityCredentials(this.params,clientConfig),!this.cognito){var cognitoConfig=AWS.util.merge({},clientConfig);cognitoConfig.params=this.params,this.cognito=new CognitoIdentity(cognitoConfig)}this.sts=this.sts||new STS(clientConfig)},cacheId:function cacheId(data){this._identityId=data.IdentityId,this.params.IdentityId=this._identityId,AWS.util.isBrowser()&&(this.setStorage("id",data.IdentityId),this.params.Logins&&this.setStorage("providers",Object.keys(this.params.Logins).join(",")))},getStorage:function getStorage(key){return this.storage[this.localStorageKey[key]+this.params.IdentityPoolId+(this.params.LoginId||"")]},setStorage:function setStorage(key,val){try{this.storage[this.localStorageKey[key]+this.params.IdentityPoolId+(this.params.LoginId||"")]=val}catch(_){}},storage:function(){try{var storage=AWS.util.isBrowser()&&null!==window.localStorage&&"object"==typeof window.localStorage?window.localStorage:{};return storage["aws.test-storage"]="foobar",delete storage["aws.test-storage"],storage}catch(_){return{}}}()})},"./node_modules/aws-sdk/lib/credentials/saml_credentials.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),STS=__webpack_require__("./node_modules/aws-sdk/clients/sts.js");AWS.SAMLCredentials=AWS.util.inherit(AWS.Credentials,{constructor:function SAMLCredentials(params){AWS.Credentials.call(this),this.expired=!0,this.params=params},refresh:function refresh(callback){this.coalesceRefresh(callback||AWS.util.fn.callback)},load:function load(callback){var self=this;self.createClients(),self.service.assumeRoleWithSAML((function(err,data){err||self.service.credentialsFrom(data,self),callback(err)}))},createClients:function(){this.service=this.service||new STS({params:this.params})}})},"./node_modules/aws-sdk/lib/credentials/temporary_credentials.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),STS=__webpack_require__("./node_modules/aws-sdk/clients/sts.js");AWS.TemporaryCredentials=AWS.util.inherit(AWS.Credentials,{constructor:function TemporaryCredentials(params,masterCredentials){AWS.Credentials.call(this),this.loadMasterCredentials(masterCredentials),this.expired=!0,this.params=params||{},this.params.RoleArn&&(this.params.RoleSessionName=this.params.RoleSessionName||"temporary-credentials")},refresh:function refresh(callback){this.coalesceRefresh(callback||AWS.util.fn.callback)},load:function load(callback){var self=this;self.createClients(),self.masterCredentials.get((function(){self.service.config.credentials=self.masterCredentials,(self.params.RoleArn?self.service.assumeRole:self.service.getSessionToken).call(self.service,(function(err,data){err||self.service.credentialsFrom(data,self),callback(err)}))}))},loadMasterCredentials:function loadMasterCredentials(masterCredentials){for(this.masterCredentials=masterCredentials||AWS.config.credentials;this.masterCredentials.masterCredentials;)this.masterCredentials=this.masterCredentials.masterCredentials;"function"!=typeof this.masterCredentials.get&&(this.masterCredentials=new AWS.Credentials(this.masterCredentials))},createClients:function(){this.service=this.service||new STS({params:this.params})}})},"./node_modules/aws-sdk/lib/credentials/web_identity_credentials.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),STS=__webpack_require__("./node_modules/aws-sdk/clients/sts.js");AWS.WebIdentityCredentials=AWS.util.inherit(AWS.Credentials,{constructor:function WebIdentityCredentials(params,clientConfig){AWS.Credentials.call(this),this.expired=!0,this.params=params,this.params.RoleSessionName=this.params.RoleSessionName||"web-identity",this.data=null,this._clientConfig=AWS.util.copy(clientConfig||{})},refresh:function refresh(callback){this.coalesceRefresh(callback||AWS.util.fn.callback)},load:function load(callback){var self=this;self.createClients(),self.service.assumeRoleWithWebIdentity((function(err,data){self.data=null,err||(self.data=data,self.service.credentialsFrom(data,self)),callback(err)}))},createClients:function(){if(!this.service){var stsConfig=AWS.util.merge({},this._clientConfig);stsConfig.params=this.params,this.service=new STS(stsConfig)}}})},"./node_modules/aws-sdk/lib/event-stream/buffered-create-event-stream.js":(module,__unused_webpack_exports,__webpack_require__)=>{var eventMessageChunker=__webpack_require__("./node_modules/aws-sdk/lib/event-stream/event-message-chunker.js").eventMessageChunker,parseEvent=__webpack_require__("./node_modules/aws-sdk/lib/event-stream/parse-event.js").parseEvent;module.exports={createEventStream:function createEventStream(body,parser,model){for(var eventMessages=eventMessageChunker(body),events=[],i=0;i<eventMessages.length;i++)events.push(parseEvent(parser,eventMessages[i],model));return events}}},"./node_modules/aws-sdk/lib/event-stream/event-message-chunker.js":module=>{module.exports={eventMessageChunker:function eventMessageChunker(buffer){for(var messages=[],offset=0;offset<buffer.length;){var totalLength=buffer.readInt32BE(offset),message=buffer.slice(offset,totalLength+offset);offset+=totalLength,messages.push(message)}return messages}}},"./node_modules/aws-sdk/lib/event-stream/int64.js":(module,__unused_webpack_exports,__webpack_require__)=>{var util=__webpack_require__("./node_modules/aws-sdk/lib/core.js").util,toBuffer=util.buffer.toBuffer;function Int64(bytes){if(8!==bytes.length)throw new Error("Int64 buffers must be exactly 8 bytes");util.Buffer.isBuffer(bytes)||(bytes=toBuffer(bytes)),this.bytes=bytes}function negate(bytes){for(var i=0;i<8;i++)bytes[i]^=255;for(i=7;i>-1&&(bytes[i]++,0===bytes[i]);i--);}Int64.fromNumber=function(number){if(number>0x8000000000000000||number<-0x8000000000000000)throw new Error(number+" is too large (or, if negative, too small) to represent as an Int64");for(var bytes=new Uint8Array(8),i=7,remaining=Math.abs(Math.round(number));i>-1&&remaining>0;i--,remaining/=256)bytes[i]=remaining;return number<0&&negate(bytes),new Int64(bytes)},Int64.prototype.valueOf=function(){var bytes=this.bytes.slice(0),negative=128&bytes[0];return negative&&negate(bytes),parseInt(bytes.toString("hex"),16)*(negative?-1:1)},Int64.prototype.toString=function(){return String(this.valueOf())},module.exports={Int64}},"./node_modules/aws-sdk/lib/event-stream/parse-event.js":(module,__unused_webpack_exports,__webpack_require__)=>{var parseMessage=__webpack_require__("./node_modules/aws-sdk/lib/event-stream/parse-message.js").parseMessage;module.exports={parseEvent:function parseEvent(parser,message,shape){var parsedMessage=parseMessage(message),messageType=parsedMessage.headers[":message-type"];if(messageType){if("error"===messageType.value)throw function parseError(message){var errorCode=message.headers[":error-code"],errorMessage=message.headers[":error-message"],error=new Error(errorMessage.value||errorMessage);return error.code=error.name=errorCode.value||errorCode,error}(parsedMessage);if("event"!==messageType.value)return}var eventType=parsedMessage.headers[":event-type"],eventModel=shape.members[eventType.value];if(eventModel){var result={},eventPayloadMemberName=eventModel.eventPayloadMemberName;if(eventPayloadMemberName){var payloadShape=eventModel.members[eventPayloadMemberName];"binary"===payloadShape.type?result[eventPayloadMemberName]=parsedMessage.body:result[eventPayloadMemberName]=parser.parse(parsedMessage.body.toString(),payloadShape)}for(var eventHeaderNames=eventModel.eventHeaderMemberNames,i=0;i<eventHeaderNames.length;i++){var name=eventHeaderNames[i];parsedMessage.headers[name]&&(result[name]=eventModel.members[name].toType(parsedMessage.headers[name].value))}var output={};return output[eventType.value]=result,output}}}},"./node_modules/aws-sdk/lib/event-stream/parse-message.js":(module,__unused_webpack_exports,__webpack_require__)=>{var Int64=__webpack_require__("./node_modules/aws-sdk/lib/event-stream/int64.js").Int64,splitMessage=__webpack_require__("./node_modules/aws-sdk/lib/event-stream/split-message.js").splitMessage,BOOLEAN_TAG="boolean",BYTE_TAG="byte",SHORT_TAG="short",INT_TAG="integer",LONG_TAG="long",BINARY_TAG="binary",STRING_TAG="string",TIMESTAMP_TAG="timestamp",UUID_TAG="uuid";function parseHeaders(headers){for(var out={},position=0;position<headers.length;){var nameLength=headers.readUInt8(position++),name=headers.slice(position,position+nameLength).toString();switch(position+=nameLength,headers.readUInt8(position++)){case 0:out[name]={type:BOOLEAN_TAG,value:!0};break;case 1:out[name]={type:BOOLEAN_TAG,value:!1};break;case 2:out[name]={type:BYTE_TAG,value:headers.readInt8(position++)};break;case 3:out[name]={type:SHORT_TAG,value:headers.readInt16BE(position)},position+=2;break;case 4:out[name]={type:INT_TAG,value:headers.readInt32BE(position)},position+=4;break;case 5:out[name]={type:LONG_TAG,value:new Int64(headers.slice(position,position+8))},position+=8;break;case 6:var binaryLength=headers.readUInt16BE(position);position+=2,out[name]={type:BINARY_TAG,value:headers.slice(position,position+binaryLength)},position+=binaryLength;break;case 7:var stringLength=headers.readUInt16BE(position);position+=2,out[name]={type:STRING_TAG,value:headers.slice(position,position+stringLength).toString()},position+=stringLength;break;case 8:out[name]={type:TIMESTAMP_TAG,value:new Date(new Int64(headers.slice(position,position+8)).valueOf())},position+=8;break;case 9:var uuidChars=headers.slice(position,position+16).toString("hex");position+=16,out[name]={type:UUID_TAG,value:uuidChars.substr(0,8)+"-"+uuidChars.substr(8,4)+"-"+uuidChars.substr(12,4)+"-"+uuidChars.substr(16,4)+"-"+uuidChars.substr(20)};break;default:throw new Error("Unrecognized header type tag")}}return out}module.exports={parseMessage:function parseMessage(message){var parsed=splitMessage(message);return{headers:parseHeaders(parsed.headers),body:parsed.body}}}},"./node_modules/aws-sdk/lib/event-stream/split-message.js":(module,__unused_webpack_exports,__webpack_require__)=>{var util=__webpack_require__("./node_modules/aws-sdk/lib/core.js").util,toBuffer=util.buffer.toBuffer;module.exports={splitMessage:function splitMessage(message){if(util.Buffer.isBuffer(message)||(message=toBuffer(message)),message.length<16)throw new Error("Provided message too short to accommodate event stream message overhead");if(message.length!==message.readUInt32BE(0))throw new Error("Reported message length does not match received message length");var expectedPreludeChecksum=message.readUInt32BE(8);if(expectedPreludeChecksum!==util.crypto.crc32(message.slice(0,8)))throw new Error("The prelude checksum specified in the message ("+expectedPreludeChecksum+") does not match the calculated CRC32 checksum.");var expectedMessageChecksum=message.readUInt32BE(message.length-4);if(expectedMessageChecksum!==util.crypto.crc32(message.slice(0,message.length-4)))throw new Error("The message checksum did not match the expected value of "+expectedMessageChecksum);var headersEnd=12+message.readUInt32BE(4);return{headers:message.slice(12,headersEnd),body:message.slice(headersEnd,message.length-4)}}}},"./node_modules/aws-sdk/lib/http/xhr.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),EventEmitter=__webpack_require__("./node_modules/aws-sdk/node_modules/events/events.js").EventEmitter;__webpack_require__("./node_modules/aws-sdk/lib/http.js"),AWS.XHRClient=AWS.util.inherit({handleRequest:function handleRequest(httpRequest,httpOptions,callback,errCallback){var self=this,endpoint=httpRequest.endpoint,emitter=new EventEmitter,href=endpoint.protocol+"//"+endpoint.hostname;80!==endpoint.port&&443!==endpoint.port&&(href+=":"+endpoint.port),href+=httpRequest.path;var xhr=new XMLHttpRequest,headersEmitted=!1;httpRequest.stream=xhr,xhr.addEventListener("readystatechange",(function(){try{if(0===xhr.status)return}catch(e){return}this.readyState>=this.HEADERS_RECEIVED&&!headersEmitted&&(emitter.statusCode=xhr.status,emitter.headers=self.parseHeaders(xhr.getAllResponseHeaders()),emitter.emit("headers",emitter.statusCode,emitter.headers,xhr.statusText),headersEmitted=!0),this.readyState===this.DONE&&self.finishRequest(xhr,emitter)}),!1),xhr.upload.addEventListener("progress",(function(evt){emitter.emit("sendProgress",evt)})),xhr.addEventListener("progress",(function(evt){emitter.emit("receiveProgress",evt)}),!1),xhr.addEventListener("timeout",(function(){errCallback(AWS.util.error(new Error("Timeout"),{code:"TimeoutError"}))}),!1),xhr.addEventListener("error",(function(){errCallback(AWS.util.error(new Error("Network Failure"),{code:"NetworkingError"}))}),!1),xhr.addEventListener("abort",(function(){errCallback(AWS.util.error(new Error("Request aborted"),{code:"RequestAbortedError"}))}),!1),callback(emitter),xhr.open(httpRequest.method,href,!1!==httpOptions.xhrAsync),AWS.util.each(httpRequest.headers,(function(key,value){"Content-Length"!==key&&"User-Agent"!==key&&"Host"!==key&&xhr.setRequestHeader(key,value)})),httpOptions.timeout&&!1!==httpOptions.xhrAsync&&(xhr.timeout=httpOptions.timeout),httpOptions.xhrWithCredentials&&(xhr.withCredentials=!0);try{xhr.responseType="arraybuffer"}catch(e){}try{httpRequest.body?xhr.send(httpRequest.body):xhr.send()}catch(err){if(!httpRequest.body||"object"!=typeof httpRequest.body.buffer)throw err;xhr.send(httpRequest.body.buffer)}return emitter},parseHeaders:function parseHeaders(rawHeaders){var headers={};return AWS.util.arrayEach(rawHeaders.split(/\r?\n/),(function(line){var key=line.split(":",1)[0],value=line.substring(key.length+2);key.length>0&&(headers[key.toLowerCase()]=value)})),headers},finishRequest:function finishRequest(xhr,emitter){var buffer;if("arraybuffer"===xhr.responseType&&xhr.response){var ab=xhr.response;buffer=new AWS.util.Buffer(ab.byteLength);for(var view=new Uint8Array(ab),i=0;i<buffer.length;++i)buffer[i]=view[i]}try{buffer||"string"!=typeof xhr.responseText||(buffer=new AWS.util.Buffer(xhr.responseText))}catch(e){}buffer&&emitter.emit("data",buffer),emitter.emit("end")}}),AWS.HttpClient.prototype=AWS.XHRClient.prototype,AWS.HttpClient.streamsApiVersion=1},"./node_modules/aws-sdk/lib/realclock/browserClock.js":module=>{module.exports={now:function now(){return"undefined"!=typeof performance&&"function"==typeof performance.now?performance.now():Date.now()}}},"./node_modules/aws-sdk/lib/services/sts.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var AWS=__webpack_require__("./node_modules/aws-sdk/lib/core.js"),resolveRegionalEndpointsFlag=__webpack_require__("./node_modules/aws-sdk/lib/config_regional_endpoint.js");AWS.util.update(AWS.STS.prototype,{credentialsFrom:function credentialsFrom(data,credentials){return data?(credentials||(credentials=new AWS.TemporaryCredentials),credentials.expired=!1,credentials.accessKeyId=data.Credentials.AccessKeyId,credentials.secretAccessKey=data.Credentials.SecretAccessKey,credentials.sessionToken=data.Credentials.SessionToken,credentials.expireTime=data.Credentials.Expiration,credentials):null},assumeRoleWithWebIdentity:function assumeRoleWithWebIdentity(params,callback){return this.makeUnauthenticatedRequest("assumeRoleWithWebIdentity",params,callback)},assumeRoleWithSAML:function assumeRoleWithSAML(params,callback){return this.makeUnauthenticatedRequest("assumeRoleWithSAML",params,callback)},setupRequestListeners:function setupRequestListeners(request){request.addListener("validate",this.optInRegionalEndpoint,!0)},optInRegionalEndpoint:function optInRegionalEndpoint(req){var service=req.service,config=service.config;if(config.stsRegionalEndpoints=resolveRegionalEndpointsFlag(service._originalConfig,{env:"AWS_STS_REGIONAL_ENDPOINTS",sharedConfig:"sts_regional_endpoints",clientConfig:"stsRegionalEndpoints"}),"regional"===config.stsRegionalEndpoints&&service.isGlobalEndpoint){if(!config.region)throw AWS.util.error(new Error,{code:"ConfigError",message:"Missing region in config"});var insertPoint=config.endpoint.indexOf(".amazonaws.com"),regionalEndpoint=config.endpoint.substring(0,insertPoint)+"."+config.region+config.endpoint.substring(insertPoint);req.httpRequest.updateEndpoint(regionalEndpoint),req.httpRequest.region=config.region}}})},"./node_modules/aws-sdk/lib/xml/browser_parser.js":(module,__unused_webpack_exports,__webpack_require__)=>{var util=__webpack_require__("./node_modules/aws-sdk/lib/util.js"),Shape=__webpack_require__("./node_modules/aws-sdk/lib/model/shape.js");function DomXmlParser(){}function getElementByTagName(xml,tag){for(var elements=xml.getElementsByTagName(tag),i=0,iLen=elements.length;i<iLen;i++)if(elements[i].parentNode===xml)return elements[i]}function parseXml(xml,shape){switch(shape||(shape={}),shape.type){case"structure":return parseStructure(xml,shape);case"map":return function parseMap(xml,shape){var data={},xmlKey=shape.key.name||"key",xmlValue=shape.value.name||"value",tagName=shape.flattened?shape.name:"entry",child=xml.firstElementChild;for(;child;){if(child.nodeName===tagName){var key=getElementByTagName(child,xmlKey).textContent,value=getElementByTagName(child,xmlValue);data[key]=parseXml(value,shape.value)}child=child.nextElementSibling}return data}(xml,shape);case"list":return function parseList(xml,shape){var data=[],tagName=shape.flattened?shape.name:shape.member.name||"member",child=xml.firstElementChild;for(;child;)child.nodeName===tagName&&data.push(parseXml(child,shape.member)),child=child.nextElementSibling;return data}(xml,shape);case void 0:case null:return function parseUnknown(xml){if(null==xml)return"";if(!xml.firstElementChild)return null===xml.parentNode.parentNode?{}:0===xml.childNodes.length?"":xml.textContent;var shape={type:"structure",members:{}},child=xml.firstElementChild;for(;child;){var tag=child.nodeName;Object.prototype.hasOwnProperty.call(shape.members,tag)?shape.members[tag].type="list":shape.members[tag]={name:tag},child=child.nextElementSibling}return parseStructure(xml,shape)}(xml);default:return function parseScalar(xml,shape){if(xml.getAttribute){var encoding=xml.getAttribute("encoding");"base64"===encoding&&(shape=new Shape.create({type:encoding}))}var text=xml.textContent;""===text&&(text=null);return"function"==typeof shape.toType?shape.toType(text):text}(xml,shape)}}function parseStructure(xml,shape){var data={};return null===xml||util.each(shape.members,(function(memberName,memberShape){if(memberShape.isXmlAttribute){if(Object.prototype.hasOwnProperty.call(xml.attributes,memberShape.name)){var value=xml.attributes[memberShape.name].value;data[memberName]=parseXml({textContent:value},memberShape)}}else{var xmlChild=memberShape.flattened?xml:getElementByTagName(xml,memberShape.name);xmlChild?data[memberName]=parseXml(xmlChild,memberShape):memberShape.flattened||"list"!==memberShape.type||shape.api.xmlNoDefaultLists||(data[memberName]=memberShape.defaultValue)}})),data}DomXmlParser.prototype.parse=function(xml,shape){if(""===xml.replace(/^\s+/,""))return{};var result,error;try{if(window.DOMParser){try{result=(new DOMParser).parseFromString(xml,"text/xml")}catch(syntaxError){throw util.error(new Error("Parse error in document"),{originalError:syntaxError,code:"XMLParserError",retryable:!0})}if(null===result.documentElement)throw util.error(new Error("Cannot parse empty document."),{code:"XMLParserError",retryable:!0});var isError=result.getElementsByTagName("parsererror")[0];if(isError&&(isError.parentNode===result||"body"===isError.parentNode.nodeName||isError.parentNode.parentNode===result||"body"===isError.parentNode.parentNode.nodeName)){var errorElement=isError.getElementsByTagName("div")[0]||isError;throw util.error(new Error(errorElement.textContent||"Parser error in document"),{code:"XMLParserError",retryable:!0})}}else{if(!window.ActiveXObject)throw new Error("Cannot load XML parser");if((result=new window.ActiveXObject("Microsoft.XMLDOM")).async=!1,!result.loadXML(xml))throw util.error(new Error("Parse error in document"),{code:"XMLParserError",retryable:!0})}}catch(e){error=e}if(result&&result.documentElement&&!error){var data=parseXml(result.documentElement,shape),metadata=getElementByTagName(result.documentElement,"ResponseMetadata");return metadata&&(data.ResponseMetadata=parseXml(metadata,{})),data}if(error)throw util.error(error||new Error,{code:"XMLParserError",retryable:!0});return{}},module.exports=DomXmlParser},"./node_modules/aws-sdk/node_modules/base64-js/index.js":(__unused_webpack_module,exports)=>{"use strict";exports.byteLength=function byteLength(b64){return 3*b64.length/4-placeHoldersCount(b64)},exports.toByteArray=function toByteArray(b64){var i,j,l,tmp,placeHolders,arr,len=b64.length;placeHolders=placeHoldersCount(b64),arr=new Arr(3*len/4-placeHolders),l=placeHolders>0?len-4:len;var L=0;for(i=0,j=0;i<l;i+=4,j+=3)tmp=revLookup[b64.charCodeAt(i)]<<18|revLookup[b64.charCodeAt(i+1)]<<12|revLookup[b64.charCodeAt(i+2)]<<6|revLookup[b64.charCodeAt(i+3)],arr[L++]=tmp>>16&255,arr[L++]=tmp>>8&255,arr[L++]=255&tmp;2===placeHolders?(tmp=revLookup[b64.charCodeAt(i)]<<2|revLookup[b64.charCodeAt(i+1)]>>4,arr[L++]=255&tmp):1===placeHolders&&(tmp=revLookup[b64.charCodeAt(i)]<<10|revLookup[b64.charCodeAt(i+1)]<<4|revLookup[b64.charCodeAt(i+2)]>>2,arr[L++]=tmp>>8&255,arr[L++]=255&tmp);return arr},exports.fromByteArray=function fromByteArray(uint8){for(var tmp,len=uint8.length,extraBytes=len%3,output="",parts=[],i=0,len2=len-extraBytes;i<len2;i+=16383)parts.push(encodeChunk(uint8,i,i+16383>len2?len2:i+16383));1===extraBytes?(tmp=uint8[len-1],output+=lookup[tmp>>2],output+=lookup[tmp<<4&63],output+="=="):2===extraBytes&&(tmp=(uint8[len-2]<<8)+uint8[len-1],output+=lookup[tmp>>10],output+=lookup[tmp>>4&63],output+=lookup[tmp<<2&63],output+="=");return parts.push(output),parts.join("")};for(var lookup=[],revLookup=[],Arr="undefined"!=typeof Uint8Array?Uint8Array:Array,code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)lookup[i]=code[i],revLookup[code.charCodeAt(i)]=i;function placeHoldersCount(b64){var len=b64.length;if(len%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===b64[len-2]?2:"="===b64[len-1]?1:0}function encodeChunk(uint8,start,end){for(var tmp,num,output=[],i=start;i<end;i+=3)tmp=(uint8[i]<<16)+(uint8[i+1]<<8)+uint8[i+2],output.push(lookup[(num=tmp)>>18&63]+lookup[num>>12&63]+lookup[num>>6&63]+lookup[63&num]);return output.join("")}revLookup["-".charCodeAt(0)]=62,revLookup["_".charCodeAt(0)]=63},"./node_modules/aws-sdk/node_modules/buffer/index.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";var base64=__webpack_require__("./node_modules/aws-sdk/node_modules/base64-js/index.js"),ieee754=__webpack_require__("./node_modules/aws-sdk/node_modules/buffer/node_modules/ieee754/index.js"),isArray=__webpack_require__("./node_modules/aws-sdk/node_modules/isarray/index.js");function kMaxLength(){return Buffer.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function createBuffer(that,length){if(kMaxLength()<length)throw new RangeError("Invalid typed array length");return Buffer.TYPED_ARRAY_SUPPORT?(that=new Uint8Array(length)).__proto__=Buffer.prototype:(null===that&&(that=new Buffer(length)),that.length=length),that}function Buffer(arg,encodingOrOffset,length){if(!(Buffer.TYPED_ARRAY_SUPPORT||this instanceof Buffer))return new Buffer(arg,encodingOrOffset,length);if("number"==typeof arg){if("string"==typeof encodingOrOffset)throw new Error("If encoding is specified then the first argument must be a string");return allocUnsafe(this,arg)}return from(this,arg,encodingOrOffset,length)}function from(that,value,encodingOrOffset,length){if("number"==typeof value)throw new TypeError('"value" argument must not be a number');return"undefined"!=typeof ArrayBuffer&&value instanceof ArrayBuffer?function fromArrayBuffer(that,array,byteOffset,length){if(array.byteLength,byteOffset<0||array.byteLength<byteOffset)throw new RangeError("'offset' is out of bounds");if(array.byteLength<byteOffset+(length||0))throw new RangeError("'length' is out of bounds");array=void 0===byteOffset&&void 0===length?new Uint8Array(array):void 0===length?new Uint8Array(array,byteOffset):new Uint8Array(array,byteOffset,length);Buffer.TYPED_ARRAY_SUPPORT?(that=array).__proto__=Buffer.prototype:that=fromArrayLike(that,array);return that}(that,value,encodingOrOffset,length):"string"==typeof value?function fromString(that,string,encoding){"string"==typeof encoding&&""!==encoding||(encoding="utf8");if(!Buffer.isEncoding(encoding))throw new TypeError('"encoding" must be a valid string encoding');var length=0|byteLength(string,encoding);that=createBuffer(that,length);var actual=that.write(string,encoding);actual!==length&&(that=that.slice(0,actual));return that}(that,value,encodingOrOffset):function fromObject(that,obj){if(Buffer.isBuffer(obj)){var len=0|checked(obj.length);return 0===(that=createBuffer(that,len)).length||obj.copy(that,0,0,len),that}if(obj){if("undefined"!=typeof ArrayBuffer&&obj.buffer instanceof ArrayBuffer||"length"in obj)return"number"!=typeof obj.length||function isnan(val){return val!=val}(obj.length)?createBuffer(that,0):fromArrayLike(that,obj);if("Buffer"===obj.type&&isArray(obj.data))return fromArrayLike(that,obj.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}(that,value)}function assertSize(size){if("number"!=typeof size)throw new TypeError('"size" argument must be a number');if(size<0)throw new RangeError('"size" argument must not be negative')}function allocUnsafe(that,size){if(assertSize(size),that=createBuffer(that,size<0?0:0|checked(size)),!Buffer.TYPED_ARRAY_SUPPORT)for(var i=0;i<size;++i)that[i]=0;return that}function fromArrayLike(that,array){var length=array.length<0?0:0|checked(array.length);that=createBuffer(that,length);for(var i=0;i<length;i+=1)that[i]=255&array[i];return that}function checked(length){if(length>=kMaxLength())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength().toString(16)+" bytes");return 0|length}function byteLength(string,encoding){if(Buffer.isBuffer(string))return string.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(string)||string instanceof ArrayBuffer))return string.byteLength;"string"!=typeof string&&(string=""+string);var len=string.length;if(0===len)return 0;for(var loweredCase=!1;;)switch(encoding){case"ascii":case"latin1":case"binary":return len;case"utf8":case"utf-8":case void 0:return utf8ToBytes(string).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*len;case"hex":return len>>>1;case"base64":return base64ToBytes(string).length;default:if(loweredCase)return utf8ToBytes(string).length;encoding=(""+encoding).toLowerCase(),loweredCase=!0}}function slowToString(encoding,start,end){var loweredCase=!1;if((void 0===start||start<0)&&(start=0),start>this.length)return"";if((void 0===end||end>this.length)&&(end=this.length),end<=0)return"";if((end>>>=0)<=(start>>>=0))return"";for(encoding||(encoding="utf8");;)switch(encoding){case"hex":return hexSlice(this,start,end);case"utf8":case"utf-8":return utf8Slice(this,start,end);case"ascii":return asciiSlice(this,start,end);case"latin1":case"binary":return latin1Slice(this,start,end);case"base64":return base64Slice(this,start,end);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,start,end);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(encoding+"").toLowerCase(),loweredCase=!0}}function swap(b,n,m){var i=b[n];b[n]=b[m],b[m]=i}function bidirectionalIndexOf(buffer,val,byteOffset,encoding,dir){if(0===buffer.length)return-1;if("string"==typeof byteOffset?(encoding=byteOffset,byteOffset=0):byteOffset>2147483647?byteOffset=2147483647:byteOffset<-2147483648&&(byteOffset=-2147483648),byteOffset=+byteOffset,isNaN(byteOffset)&&(byteOffset=dir?0:buffer.length-1),byteOffset<0&&(byteOffset=buffer.length+byteOffset),byteOffset>=buffer.length){if(dir)return-1;byteOffset=buffer.length-1}else if(byteOffset<0){if(!dir)return-1;byteOffset=0}if("string"==typeof val&&(val=Buffer.from(val,encoding)),Buffer.isBuffer(val))return 0===val.length?-1:arrayIndexOf(buffer,val,byteOffset,encoding,dir);if("number"==typeof val)return val&=255,Buffer.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?dir?Uint8Array.prototype.indexOf.call(buffer,val,byteOffset):Uint8Array.prototype.lastIndexOf.call(buffer,val,byteOffset):arrayIndexOf(buffer,[val],byteOffset,encoding,dir);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(arr,val,byteOffset,encoding,dir){var i,indexSize=1,arrLength=arr.length,valLength=val.length;if(void 0!==encoding&&("ucs2"===(encoding=String(encoding).toLowerCase())||"ucs-2"===encoding||"utf16le"===encoding||"utf-16le"===encoding)){if(arr.length<2||val.length<2)return-1;indexSize=2,arrLength/=2,valLength/=2,byteOffset/=2}function read(buf,i){return 1===indexSize?buf[i]:buf.readUInt16BE(i*indexSize)}if(dir){var foundIndex=-1;for(i=byteOffset;i<arrLength;i++)if(read(arr,i)===read(val,-1===foundIndex?0:i-foundIndex)){if(-1===foundIndex&&(foundIndex=i),i-foundIndex+1===valLength)return foundIndex*indexSize}else-1!==foundIndex&&(i-=i-foundIndex),foundIndex=-1}else for(byteOffset+valLength>arrLength&&(byteOffset=arrLength-valLength),i=byteOffset;i>=0;i--){for(var found=!0,j=0;j<valLength;j++)if(read(arr,i+j)!==read(val,j)){found=!1;break}if(found)return i}return-1}function hexWrite(buf,string,offset,length){offset=Number(offset)||0;var remaining=buf.length-offset;length?(length=Number(length))>remaining&&(length=remaining):length=remaining;var strLen=string.length;if(strLen%2!=0)throw new TypeError("Invalid hex string");length>strLen/2&&(length=strLen/2);for(var i=0;i<length;++i){var parsed=parseInt(string.substr(2*i,2),16);if(isNaN(parsed))return i;buf[offset+i]=parsed}return i}function utf8Write(buf,string,offset,length){return blitBuffer(utf8ToBytes(string,buf.length-offset),buf,offset,length)}function asciiWrite(buf,string,offset,length){return blitBuffer(function asciiToBytes(str){for(var byteArray=[],i=0;i<str.length;++i)byteArray.push(255&str.charCodeAt(i));return byteArray}(string),buf,offset,length)}function latin1Write(buf,string,offset,length){return asciiWrite(buf,string,offset,length)}function base64Write(buf,string,offset,length){return blitBuffer(base64ToBytes(string),buf,offset,length)}function ucs2Write(buf,string,offset,length){return blitBuffer(function utf16leToBytes(str,units){for(var c,hi,lo,byteArray=[],i=0;i<str.length&&!((units-=2)<0);++i)hi=(c=str.charCodeAt(i))>>8,lo=c%256,byteArray.push(lo),byteArray.push(hi);return byteArray}(string,buf.length-offset),buf,offset,length)}function base64Slice(buf,start,end){return 0===start&&end===buf.length?base64.fromByteArray(buf):base64.fromByteArray(buf.slice(start,end))}function utf8Slice(buf,start,end){end=Math.min(buf.length,end);for(var res=[],i=start;i<end;){var secondByte,thirdByte,fourthByte,tempCodePoint,firstByte=buf[i],codePoint=null,bytesPerSequence=firstByte>239?4:firstByte>223?3:firstByte>191?2:1;if(i+bytesPerSequence<=end)switch(bytesPerSequence){case 1:firstByte<128&&(codePoint=firstByte);break;case 2:128==(192&(secondByte=buf[i+1]))&&(tempCodePoint=(31&firstByte)<<6|63&secondByte)>127&&(codePoint=tempCodePoint);break;case 3:secondByte=buf[i+1],thirdByte=buf[i+2],128==(192&secondByte)&&128==(192&thirdByte)&&(tempCodePoint=(15&firstByte)<<12|(63&secondByte)<<6|63&thirdByte)>2047&&(tempCodePoint<55296||tempCodePoint>57343)&&(codePoint=tempCodePoint);break;case 4:secondByte=buf[i+1],thirdByte=buf[i+2],fourthByte=buf[i+3],128==(192&secondByte)&&128==(192&thirdByte)&&128==(192&fourthByte)&&(tempCodePoint=(15&firstByte)<<18|(63&secondByte)<<12|(63&thirdByte)<<6|63&fourthByte)>65535&&tempCodePoint<1114112&&(codePoint=tempCodePoint)}null===codePoint?(codePoint=65533,bytesPerSequence=1):codePoint>65535&&(codePoint-=65536,res.push(codePoint>>>10&1023|55296),codePoint=56320|1023&codePoint),res.push(codePoint),i+=bytesPerSequence}return function decodeCodePointsArray(codePoints){var len=codePoints.length;if(len<=MAX_ARGUMENTS_LENGTH)return String.fromCharCode.apply(String,codePoints);var res="",i=0;for(;i<len;)res+=String.fromCharCode.apply(String,codePoints.slice(i,i+=MAX_ARGUMENTS_LENGTH));return res}(res)}exports.hp=Buffer,exports.IS=50,Buffer.TYPED_ARRAY_SUPPORT=void 0!==__webpack_require__.g.TYPED_ARRAY_SUPPORT?__webpack_require__.g.TYPED_ARRAY_SUPPORT:function typedArraySupport(){try{var arr=new Uint8Array(1);return arr.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===arr.foo()&&"function"==typeof arr.subarray&&0===arr.subarray(1,1).byteLength}catch(e){return!1}}(),kMaxLength(),Buffer.poolSize=8192,Buffer._augment=function(arr){return arr.__proto__=Buffer.prototype,arr},Buffer.from=function(value,encodingOrOffset,length){return from(null,value,encodingOrOffset,length)},Buffer.TYPED_ARRAY_SUPPORT&&(Buffer.prototype.__proto__=Uint8Array.prototype,Buffer.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&Buffer[Symbol.species]===Buffer&&Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:!0})),Buffer.alloc=function(size,fill,encoding){return function alloc(that,size,fill,encoding){return assertSize(size),size<=0?createBuffer(that,size):void 0!==fill?"string"==typeof encoding?createBuffer(that,size).fill(fill,encoding):createBuffer(that,size).fill(fill):createBuffer(that,size)}(null,size,fill,encoding)},Buffer.allocUnsafe=function(size){return allocUnsafe(null,size)},Buffer.allocUnsafeSlow=function(size){return allocUnsafe(null,size)},Buffer.isBuffer=function isBuffer(b){return!(null==b||!b._isBuffer)},Buffer.compare=function compare(a,b){if(!Buffer.isBuffer(a)||!Buffer.isBuffer(b))throw new TypeError("Arguments must be Buffers");if(a===b)return 0;for(var x=a.length,y=b.length,i=0,len=Math.min(x,y);i<len;++i)if(a[i]!==b[i]){x=a[i],y=b[i];break}return x<y?-1:y<x?1:0},Buffer.isEncoding=function isEncoding(encoding){switch(String(encoding).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},Buffer.concat=function concat(list,length){if(!isArray(list))throw new TypeError('"list" argument must be an Array of Buffers');if(0===list.length)return Buffer.alloc(0);var i;if(void 0===length)for(length=0,i=0;i<list.length;++i)length+=list[i].length;var buffer=Buffer.allocUnsafe(length),pos=0;for(i=0;i<list.length;++i){var buf=list[i];if(!Buffer.isBuffer(buf))throw new TypeError('"list" argument must be an Array of Buffers');buf.copy(buffer,pos),pos+=buf.length}return buffer},Buffer.byteLength=byteLength,Buffer.prototype._isBuffer=!0,Buffer.prototype.swap16=function swap16(){var len=this.length;if(len%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var i=0;i<len;i+=2)swap(this,i,i+1);return this},Buffer.prototype.swap32=function swap32(){var len=this.length;if(len%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var i=0;i<len;i+=4)swap(this,i,i+3),swap(this,i+1,i+2);return this},Buffer.prototype.swap64=function swap64(){var len=this.length;if(len%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var i=0;i<len;i+=8)swap(this,i,i+7),swap(this,i+1,i+6),swap(this,i+2,i+5),swap(this,i+3,i+4);return this},Buffer.prototype.toString=function toString(){var length=0|this.length;return 0===length?"":0===arguments.length?utf8Slice(this,0,length):slowToString.apply(this,arguments)},Buffer.prototype.equals=function equals(b){if(!Buffer.isBuffer(b))throw new TypeError("Argument must be a Buffer");return this===b||0===Buffer.compare(this,b)},Buffer.prototype.inspect=function inspect(){var str="",max=exports.IS;return this.length>0&&(str=this.toString("hex",0,max).match(/.{2}/g).join(" "),this.length>max&&(str+=" ... ")),"<Buffer "+str+">"},Buffer.prototype.compare=function compare(target,start,end,thisStart,thisEnd){if(!Buffer.isBuffer(target))throw new TypeError("Argument must be a Buffer");if(void 0===start&&(start=0),void 0===end&&(end=target?target.length:0),void 0===thisStart&&(thisStart=0),void 0===thisEnd&&(thisEnd=this.length),start<0||end>target.length||thisStart<0||thisEnd>this.length)throw new RangeError("out of range index");if(thisStart>=thisEnd&&start>=end)return 0;if(thisStart>=thisEnd)return-1;if(start>=end)return 1;if(this===target)return 0;for(var x=(thisEnd>>>=0)-(thisStart>>>=0),y=(end>>>=0)-(start>>>=0),len=Math.min(x,y),thisCopy=this.slice(thisStart,thisEnd),targetCopy=target.slice(start,end),i=0;i<len;++i)if(thisCopy[i]!==targetCopy[i]){x=thisCopy[i],y=targetCopy[i];break}return x<y?-1:y<x?1:0},Buffer.prototype.includes=function includes(val,byteOffset,encoding){return-1!==this.indexOf(val,byteOffset,encoding)},Buffer.prototype.indexOf=function indexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,!0)},Buffer.prototype.lastIndexOf=function lastIndexOf(val,byteOffset,encoding){return bidirectionalIndexOf(this,val,byteOffset,encoding,!1)},Buffer.prototype.write=function write(string,offset,length,encoding){if(void 0===offset)encoding="utf8",length=this.length,offset=0;else if(void 0===length&&"string"==typeof offset)encoding=offset,length=this.length,offset=0;else{if(!isFinite(offset))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");offset|=0,isFinite(length)?(length|=0,void 0===encoding&&(encoding="utf8")):(encoding=length,length=void 0)}var remaining=this.length-offset;if((void 0===length||length>remaining)&&(length=remaining),string.length>0&&(length<0||offset<0)||offset>this.length)throw new RangeError("Attempt to write outside buffer bounds");encoding||(encoding="utf8");for(var loweredCase=!1;;)switch(encoding){case"hex":return hexWrite(this,string,offset,length);case"utf8":case"utf-8":return utf8Write(this,string,offset,length);case"ascii":return asciiWrite(this,string,offset,length);case"latin1":case"binary":return latin1Write(this,string,offset,length);case"base64":return base64Write(this,string,offset,length);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,string,offset,length);default:if(loweredCase)throw new TypeError("Unknown encoding: "+encoding);encoding=(""+encoding).toLowerCase(),loweredCase=!0}},Buffer.prototype.toJSON=function toJSON(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var MAX_ARGUMENTS_LENGTH=4096;function asciiSlice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i)ret+=String.fromCharCode(127&buf[i]);return ret}function latin1Slice(buf,start,end){var ret="";end=Math.min(buf.length,end);for(var i=start;i<end;++i)ret+=String.fromCharCode(buf[i]);return ret}function hexSlice(buf,start,end){var len=buf.length;(!start||start<0)&&(start=0),(!end||end<0||end>len)&&(end=len);for(var out="",i=start;i<end;++i)out+=toHex(buf[i]);return out}function utf16leSlice(buf,start,end){for(var bytes=buf.slice(start,end),res="",i=0;i<bytes.length;i+=2)res+=String.fromCharCode(bytes[i]+256*bytes[i+1]);return res}function checkOffset(offset,ext,length){if(offset%1!=0||offset<0)throw new RangeError("offset is not uint");if(offset+ext>length)throw new RangeError("Trying to access beyond buffer length")}function checkInt(buf,value,offset,ext,max,min){if(!Buffer.isBuffer(buf))throw new TypeError('"buffer" argument must be a Buffer instance');if(value>max||value<min)throw new RangeError('"value" argument is out of bounds');if(offset+ext>buf.length)throw new RangeError("Index out of range")}function objectWriteUInt16(buf,value,offset,littleEndian){value<0&&(value=65535+value+1);for(var i=0,j=Math.min(buf.length-offset,2);i<j;++i)buf[offset+i]=(value&255<<8*(littleEndian?i:1-i))>>>8*(littleEndian?i:1-i)}function objectWriteUInt32(buf,value,offset,littleEndian){value<0&&(value=4294967295+value+1);for(var i=0,j=Math.min(buf.length-offset,4);i<j;++i)buf[offset+i]=value>>>8*(littleEndian?i:3-i)&255}function checkIEEE754(buf,value,offset,ext,max,min){if(offset+ext>buf.length)throw new RangeError("Index out of range");if(offset<0)throw new RangeError("Index out of range")}function writeFloat(buf,value,offset,littleEndian,noAssert){return noAssert||checkIEEE754(buf,0,offset,4),ieee754.write(buf,value,offset,littleEndian,23,4),offset+4}function writeDouble(buf,value,offset,littleEndian,noAssert){return noAssert||checkIEEE754(buf,0,offset,8),ieee754.write(buf,value,offset,littleEndian,52,8),offset+8}Buffer.prototype.slice=function slice(start,end){var newBuf,len=this.length;if((start=~~start)<0?(start+=len)<0&&(start=0):start>len&&(start=len),(end=void 0===end?len:~~end)<0?(end+=len)<0&&(end=0):end>len&&(end=len),end<start&&(end=start),Buffer.TYPED_ARRAY_SUPPORT)(newBuf=this.subarray(start,end)).__proto__=Buffer.prototype;else{var sliceLen=end-start;newBuf=new Buffer(sliceLen,void 0);for(var i=0;i<sliceLen;++i)newBuf[i]=this[i+start]}return newBuf},Buffer.prototype.readUIntLE=function readUIntLE(offset,byteLength,noAssert){offset|=0,byteLength|=0,noAssert||checkOffset(offset,byteLength,this.length);for(var val=this[offset],mul=1,i=0;++i<byteLength&&(mul*=256);)val+=this[offset+i]*mul;return val},Buffer.prototype.readUIntBE=function readUIntBE(offset,byteLength,noAssert){offset|=0,byteLength|=0,noAssert||checkOffset(offset,byteLength,this.length);for(var val=this[offset+--byteLength],mul=1;byteLength>0&&(mul*=256);)val+=this[offset+--byteLength]*mul;return val},Buffer.prototype.readUInt8=function readUInt8(offset,noAssert){return noAssert||checkOffset(offset,1,this.length),this[offset]},Buffer.prototype.readUInt16LE=function readUInt16LE(offset,noAssert){return noAssert||checkOffset(offset,2,this.length),this[offset]|this[offset+1]<<8},Buffer.prototype.readUInt16BE=function readUInt16BE(offset,noAssert){return noAssert||checkOffset(offset,2,this.length),this[offset]<<8|this[offset+1]},Buffer.prototype.readUInt32LE=function readUInt32LE(offset,noAssert){return noAssert||checkOffset(offset,4,this.length),(this[offset]|this[offset+1]<<8|this[offset+2]<<16)+16777216*this[offset+3]},Buffer.prototype.readUInt32BE=function readUInt32BE(offset,noAssert){return noAssert||checkOffset(offset,4,this.length),16777216*this[offset]+(this[offset+1]<<16|this[offset+2]<<8|this[offset+3])},Buffer.prototype.readIntLE=function readIntLE(offset,byteLength,noAssert){offset|=0,byteLength|=0,noAssert||checkOffset(offset,byteLength,this.length);for(var val=this[offset],mul=1,i=0;++i<byteLength&&(mul*=256);)val+=this[offset+i]*mul;return val>=(mul*=128)&&(val-=Math.pow(2,8*byteLength)),val},Buffer.prototype.readIntBE=function readIntBE(offset,byteLength,noAssert){offset|=0,byteLength|=0,noAssert||checkOffset(offset,byteLength,this.length);for(var i=byteLength,mul=1,val=this[offset+--i];i>0&&(mul*=256);)val+=this[offset+--i]*mul;return val>=(mul*=128)&&(val-=Math.pow(2,8*byteLength)),val},Buffer.prototype.readInt8=function readInt8(offset,noAssert){return noAssert||checkOffset(offset,1,this.length),128&this[offset]?-1*(255-this[offset]+1):this[offset]},Buffer.prototype.readInt16LE=function readInt16LE(offset,noAssert){noAssert||checkOffset(offset,2,this.length);var val=this[offset]|this[offset+1]<<8;return 32768&val?4294901760|val:val},Buffer.prototype.readInt16BE=function readInt16BE(offset,noAssert){noAssert||checkOffset(offset,2,this.length);var val=this[offset+1]|this[offset]<<8;return 32768&val?4294901760|val:val},Buffer.prototype.readInt32LE=function readInt32LE(offset,noAssert){return noAssert||checkOffset(offset,4,this.length),this[offset]|this[offset+1]<<8|this[offset+2]<<16|this[offset+3]<<24},Buffer.prototype.readInt32BE=function readInt32BE(offset,noAssert){return noAssert||checkOffset(offset,4,this.length),this[offset]<<24|this[offset+1]<<16|this[offset+2]<<8|this[offset+3]},Buffer.prototype.readFloatLE=function readFloatLE(offset,noAssert){return noAssert||checkOffset(offset,4,this.length),ieee754.read(this,offset,!0,23,4)},Buffer.prototype.readFloatBE=function readFloatBE(offset,noAssert){return noAssert||checkOffset(offset,4,this.length),ieee754.read(this,offset,!1,23,4)},Buffer.prototype.readDoubleLE=function readDoubleLE(offset,noAssert){return noAssert||checkOffset(offset,8,this.length),ieee754.read(this,offset,!0,52,8)},Buffer.prototype.readDoubleBE=function readDoubleBE(offset,noAssert){return noAssert||checkOffset(offset,8,this.length),ieee754.read(this,offset,!1,52,8)},Buffer.prototype.writeUIntLE=function writeUIntLE(value,offset,byteLength,noAssert){(value=+value,offset|=0,byteLength|=0,noAssert)||checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength)-1,0);var mul=1,i=0;for(this[offset]=255&value;++i<byteLength&&(mul*=256);)this[offset+i]=value/mul&255;return offset+byteLength},Buffer.prototype.writeUIntBE=function writeUIntBE(value,offset,byteLength,noAssert){(value=+value,offset|=0,byteLength|=0,noAssert)||checkInt(this,value,offset,byteLength,Math.pow(2,8*byteLength)-1,0);var i=byteLength-1,mul=1;for(this[offset+i]=255&value;--i>=0&&(mul*=256);)this[offset+i]=value/mul&255;return offset+byteLength},Buffer.prototype.writeUInt8=function writeUInt8(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,1,255,0),Buffer.TYPED_ARRAY_SUPPORT||(value=Math.floor(value)),this[offset]=255&value,offset+1},Buffer.prototype.writeUInt16LE=function writeUInt16LE(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[offset]=255&value,this[offset+1]=value>>>8):objectWriteUInt16(this,value,offset,!0),offset+2},Buffer.prototype.writeUInt16BE=function writeUInt16BE(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[offset]=value>>>8,this[offset+1]=255&value):objectWriteUInt16(this,value,offset,!1),offset+2},Buffer.prototype.writeUInt32LE=function writeUInt32LE(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[offset+3]=value>>>24,this[offset+2]=value>>>16,this[offset+1]=value>>>8,this[offset]=255&value):objectWriteUInt32(this,value,offset,!0),offset+4},Buffer.prototype.writeUInt32BE=function writeUInt32BE(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[offset]=value>>>24,this[offset+1]=value>>>16,this[offset+2]=value>>>8,this[offset+3]=255&value):objectWriteUInt32(this,value,offset,!1),offset+4},Buffer.prototype.writeIntLE=function writeIntLE(value,offset,byteLength,noAssert){if(value=+value,offset|=0,!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=0,mul=1,sub=0;for(this[offset]=255&value;++i<byteLength&&(mul*=256);)value<0&&0===sub&&0!==this[offset+i-1]&&(sub=1),this[offset+i]=(value/mul|0)-sub&255;return offset+byteLength},Buffer.prototype.writeIntBE=function writeIntBE(value,offset,byteLength,noAssert){if(value=+value,offset|=0,!noAssert){var limit=Math.pow(2,8*byteLength-1);checkInt(this,value,offset,byteLength,limit-1,-limit)}var i=byteLength-1,mul=1,sub=0;for(this[offset+i]=255&value;--i>=0&&(mul*=256);)value<0&&0===sub&&0!==this[offset+i+1]&&(sub=1),this[offset+i]=(value/mul|0)-sub&255;return offset+byteLength},Buffer.prototype.writeInt8=function writeInt8(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,1,127,-128),Buffer.TYPED_ARRAY_SUPPORT||(value=Math.floor(value)),value<0&&(value=255+value+1),this[offset]=255&value,offset+1},Buffer.prototype.writeInt16LE=function writeInt16LE(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[offset]=255&value,this[offset+1]=value>>>8):objectWriteUInt16(this,value,offset,!0),offset+2},Buffer.prototype.writeInt16BE=function writeInt16BE(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[offset]=value>>>8,this[offset+1]=255&value):objectWriteUInt16(this,value,offset,!1),offset+2},Buffer.prototype.writeInt32LE=function writeInt32LE(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,4,2147483647,-2147483648),Buffer.TYPED_ARRAY_SUPPORT?(this[offset]=255&value,this[offset+1]=value>>>8,this[offset+2]=value>>>16,this[offset+3]=value>>>24):objectWriteUInt32(this,value,offset,!0),offset+4},Buffer.prototype.writeInt32BE=function writeInt32BE(value,offset,noAssert){return value=+value,offset|=0,noAssert||checkInt(this,value,offset,4,2147483647,-2147483648),value<0&&(value=4294967295+value+1),Buffer.TYPED_ARRAY_SUPPORT?(this[offset]=value>>>24,this[offset+1]=value>>>16,this[offset+2]=value>>>8,this[offset+3]=255&value):objectWriteUInt32(this,value,offset,!1),offset+4},Buffer.prototype.writeFloatLE=function writeFloatLE(value,offset,noAssert){return writeFloat(this,value,offset,!0,noAssert)},Buffer.prototype.writeFloatBE=function writeFloatBE(value,offset,noAssert){return writeFloat(this,value,offset,!1,noAssert)},Buffer.prototype.writeDoubleLE=function writeDoubleLE(value,offset,noAssert){return writeDouble(this,value,offset,!0,noAssert)},Buffer.prototype.writeDoubleBE=function writeDoubleBE(value,offset,noAssert){return writeDouble(this,value,offset,!1,noAssert)},Buffer.prototype.copy=function copy(target,targetStart,start,end){if(start||(start=0),end||0===end||(end=this.length),targetStart>=target.length&&(targetStart=target.length),targetStart||(targetStart=0),end>0&&end<start&&(end=start),end===start)return 0;if(0===target.length||0===this.length)return 0;if(targetStart<0)throw new RangeError("targetStart out of bounds");if(start<0||start>=this.length)throw new RangeError("sourceStart out of bounds");if(end<0)throw new RangeError("sourceEnd out of bounds");end>this.length&&(end=this.length),target.length-targetStart<end-start&&(end=target.length-targetStart+start);var i,len=end-start;if(this===target&&start<targetStart&&targetStart<end)for(i=len-1;i>=0;--i)target[i+targetStart]=this[i+start];else if(len<1e3||!Buffer.TYPED_ARRAY_SUPPORT)for(i=0;i<len;++i)target[i+targetStart]=this[i+start];else Uint8Array.prototype.set.call(target,this.subarray(start,start+len),targetStart);return len},Buffer.prototype.fill=function fill(val,start,end,encoding){if("string"==typeof val){if("string"==typeof start?(encoding=start,start=0,end=this.length):"string"==typeof end&&(encoding=end,end=this.length),1===val.length){var code=val.charCodeAt(0);code<256&&(val=code)}if(void 0!==encoding&&"string"!=typeof encoding)throw new TypeError("encoding must be a string");if("string"==typeof encoding&&!Buffer.isEncoding(encoding))throw new TypeError("Unknown encoding: "+encoding)}else"number"==typeof val&&(val&=255);if(start<0||this.length<start||this.length<end)throw new RangeError("Out of range index");if(end<=start)return this;var i;if(start>>>=0,end=void 0===end?this.length:end>>>0,val||(val=0),"number"==typeof val)for(i=start;i<end;++i)this[i]=val;else{var bytes=Buffer.isBuffer(val)?val:utf8ToBytes(new Buffer(val,encoding).toString()),len=bytes.length;for(i=0;i<end-start;++i)this[i+start]=bytes[i%len]}return this};var INVALID_BASE64_RE=/[^+\/0-9A-Za-z-_]/g;function toHex(n){return n<16?"0"+n.toString(16):n.toString(16)}function utf8ToBytes(string,units){var codePoint;units=units||1/0;for(var length=string.length,leadSurrogate=null,bytes=[],i=0;i<length;++i){if((codePoint=string.charCodeAt(i))>55295&&codePoint<57344){if(!leadSurrogate){if(codePoint>56319){(units-=3)>-1&&bytes.push(239,191,189);continue}if(i+1===length){(units-=3)>-1&&bytes.push(239,191,189);continue}leadSurrogate=codePoint;continue}if(codePoint<56320){(units-=3)>-1&&bytes.push(239,191,189),leadSurrogate=codePoint;continue}codePoint=65536+(leadSurrogate-55296<<10|codePoint-56320)}else leadSurrogate&&(units-=3)>-1&&bytes.push(239,191,189);if(leadSurrogate=null,codePoint<128){if((units-=1)<0)break;bytes.push(codePoint)}else if(codePoint<2048){if((units-=2)<0)break;bytes.push(codePoint>>6|192,63&codePoint|128)}else if(codePoint<65536){if((units-=3)<0)break;bytes.push(codePoint>>12|224,codePoint>>6&63|128,63&codePoint|128)}else{if(!(codePoint<1114112))throw new Error("Invalid code point");if((units-=4)<0)break;bytes.push(codePoint>>18|240,codePoint>>12&63|128,codePoint>>6&63|128,63&codePoint|128)}}return bytes}function base64ToBytes(str){return base64.toByteArray(function base64clean(str){if((str=function stringtrim(str){return str.trim?str.trim():str.replace(/^\s+|\s+$/g,"")}(str).replace(INVALID_BASE64_RE,"")).length<2)return"";for(;str.length%4!=0;)str+="=";return str}(str))}function blitBuffer(src,dst,offset,length){for(var i=0;i<length&&!(i+offset>=dst.length||i>=src.length);++i)dst[i+offset]=src[i];return i}},"./node_modules/aws-sdk/node_modules/buffer/node_modules/ieee754/index.js":(__unused_webpack_module,exports)=>{exports.read=function(buffer,offset,isLE,mLen,nBytes){var e,m,eLen=8*nBytes-mLen-1,eMax=(1<<eLen)-1,eBias=eMax>>1,nBits=-7,i=isLE?nBytes-1:0,d=isLE?-1:1,s=buffer[offset+i];for(i+=d,e=s&(1<<-nBits)-1,s>>=-nBits,nBits+=eLen;nBits>0;e=256*e+buffer[offset+i],i+=d,nBits-=8);for(m=e&(1<<-nBits)-1,e>>=-nBits,nBits+=mLen;nBits>0;m=256*m+buffer[offset+i],i+=d,nBits-=8);if(0===e)e=1-eBias;else{if(e===eMax)return m?NaN:1/0*(s?-1:1);m+=Math.pow(2,mLen),e-=eBias}return(s?-1:1)*m*Math.pow(2,e-mLen)},exports.write=function(buffer,value,offset,isLE,mLen,nBytes){var e,m,c,eLen=8*nBytes-mLen-1,eMax=(1<<eLen)-1,eBias=eMax>>1,rt=23===mLen?Math.pow(2,-24)-Math.pow(2,-77):0,i=isLE?0:nBytes-1,d=isLE?1:-1,s=value<0||0===value&&1/value<0?1:0;for(value=Math.abs(value),isNaN(value)||value===1/0?(m=isNaN(value)?1:0,e=eMax):(e=Math.floor(Math.log(value)/Math.LN2),value*(c=Math.pow(2,-e))<1&&(e--,c*=2),(value+=e+eBias>=1?rt/c:rt*Math.pow(2,1-eBias))*c>=2&&(e++,c/=2),e+eBias>=eMax?(m=0,e=eMax):e+eBias>=1?(m=(value*c-1)*Math.pow(2,mLen),e+=eBias):(m=value*Math.pow(2,eBias-1)*Math.pow(2,mLen),e=0));mLen>=8;buffer[offset+i]=255&m,i+=d,m/=256,mLen-=8);for(e=e<<mLen|m,eLen+=mLen;eLen>0;buffer[offset+i]=255&e,i+=d,e/=256,eLen-=8);buffer[offset+i-d]|=128*s}},"./node_modules/aws-sdk/node_modules/events/events.js":module=>{function EventEmitter(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function isFunction(arg){return"function"==typeof arg}function isObject(arg){return"object"==typeof arg&&null!==arg}function isUndefined(arg){return void 0===arg}module.exports=EventEmitter,EventEmitter.EventEmitter=EventEmitter,EventEmitter.prototype._events=void 0,EventEmitter.prototype._maxListeners=void 0,EventEmitter.defaultMaxListeners=10,EventEmitter.prototype.setMaxListeners=function(n){if(!function isNumber(arg){return"number"==typeof arg}(n)||n<0||isNaN(n))throw TypeError("n must be a positive number");return this._maxListeners=n,this},EventEmitter.prototype.emit=function(type){var er,handler,len,args,i,listeners;if(this._events||(this._events={}),"error"===type&&(!this._events.error||isObject(this._events.error)&&!this._events.error.length)){if((er=arguments[1])instanceof Error)throw er;var err=new Error('Uncaught, unspecified "error" event. ('+er+")");throw err.context=er,err}if(isUndefined(handler=this._events[type]))return!1;if(isFunction(handler))switch(arguments.length){case 1:handler.call(this);break;case 2:handler.call(this,arguments[1]);break;case 3:handler.call(this,arguments[1],arguments[2]);break;default:args=Array.prototype.slice.call(arguments,1),handler.apply(this,args)}else if(isObject(handler))for(args=Array.prototype.slice.call(arguments,1),len=(listeners=handler.slice()).length,i=0;i<len;i++)listeners[i].apply(this,args);return!0},EventEmitter.prototype.addListener=function(type,listener){var m;if(!isFunction(listener))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",type,isFunction(listener.listener)?listener.listener:listener),this._events[type]?isObject(this._events[type])?this._events[type].push(listener):this._events[type]=[this._events[type],listener]:this._events[type]=listener,isObject(this._events[type])&&!this._events[type].warned&&(m=isUndefined(this._maxListeners)?EventEmitter.defaultMaxListeners:this._maxListeners)&&m>0&&this._events[type].length>m&&(this._events[type].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[type].length),"function"==typeof console.trace&&console.trace()),this},EventEmitter.prototype.on=EventEmitter.prototype.addListener,EventEmitter.prototype.once=function(type,listener){if(!isFunction(listener))throw TypeError("listener must be a function");var fired=!1;function g(){this.removeListener(type,g),fired||(fired=!0,listener.apply(this,arguments))}return g.listener=listener,this.on(type,g),this},EventEmitter.prototype.removeListener=function(type,listener){var list,position,length,i;if(!isFunction(listener))throw TypeError("listener must be a function");if(!this._events||!this._events[type])return this;if(length=(list=this._events[type]).length,position=-1,list===listener||isFunction(list.listener)&&list.listener===listener)delete this._events[type],this._events.removeListener&&this.emit("removeListener",type,listener);else if(isObject(list)){for(i=length;i-- >0;)if(list[i]===listener||list[i].listener&&list[i].listener===listener){position=i;break}if(position<0)return this;1===list.length?(list.length=0,delete this._events[type]):list.splice(position,1),this._events.removeListener&&this.emit("removeListener",type,listener)}return this},EventEmitter.prototype.removeAllListeners=function(type){var key,listeners;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[type]&&delete this._events[type],this;if(0===arguments.length){for(key in this._events)"removeListener"!==key&&this.removeAllListeners(key);return this.removeAllListeners("removeListener"),this._events={},this}if(isFunction(listeners=this._events[type]))this.removeListener(type,listeners);else if(listeners)for(;listeners.length;)this.removeListener(type,listeners[listeners.length-1]);return delete this._events[type],this},EventEmitter.prototype.listeners=function(type){return this._events&&this._events[type]?isFunction(this._events[type])?[this._events[type]]:this._events[type].slice():[]},EventEmitter.prototype.listenerCount=function(type){if(this._events){var evlistener=this._events[type];if(isFunction(evlistener))return 1;if(evlistener)return evlistener.length}return 0},EventEmitter.listenerCount=function(emitter,type){return emitter.listenerCount(type)}},"./node_modules/aws-sdk/node_modules/isarray/index.js":module=>{var toString={}.toString;module.exports=Array.isArray||function(arr){return"[object Array]"==toString.call(arr)}},"./node_modules/querystring/decode.js":module=>{"use strict";function hasOwnProperty(obj,prop){return Object.prototype.hasOwnProperty.call(obj,prop)}module.exports=function(qs,sep,eq,options){sep=sep||"&",eq=eq||"=";var obj={};if("string"!=typeof qs||0===qs.length)return obj;var regexp=/\+/g;qs=qs.split(sep);var maxKeys=1e3;options&&"number"==typeof options.maxKeys&&(maxKeys=options.maxKeys);var len=qs.length;maxKeys>0&&len>maxKeys&&(len=maxKeys);for(var i=0;i<len;++i){var kstr,vstr,k,v,x=qs[i].replace(regexp,"%20"),idx=x.indexOf(eq);idx>=0?(kstr=x.substr(0,idx),vstr=x.substr(idx+1)):(kstr=x,vstr=""),k=decodeURIComponent(kstr),v=decodeURIComponent(vstr),hasOwnProperty(obj,k)?Array.isArray(obj[k])?obj[k].push(v):obj[k]=[obj[k],v]:obj[k]=v}return obj}},"./node_modules/querystring/encode.js":module=>{"use strict";var stringifyPrimitive=function(v){switch(typeof v){case"string":return v;case"boolean":return v?"true":"false";case"number":return isFinite(v)?v:"";default:return""}};module.exports=function(obj,sep,eq,name){return sep=sep||"&",eq=eq||"=",null===obj&&(obj=void 0),"object"==typeof obj?Object.keys(obj).map((function(k){var ks=encodeURIComponent(stringifyPrimitive(k))+eq;return Array.isArray(obj[k])?obj[k].map((function(v){return ks+encodeURIComponent(stringifyPrimitive(v))})).join(sep):ks+encodeURIComponent(stringifyPrimitive(obj[k]))})).join(sep):name?encodeURIComponent(stringifyPrimitive(name))+eq+encodeURIComponent(stringifyPrimitive(obj)):""}},"./node_modules/querystring/index.js":(__unused_webpack_module,exports,__webpack_require__)=>{"use strict";exports.decode=exports.parse=__webpack_require__("./node_modules/querystring/decode.js"),exports.encode=exports.stringify=__webpack_require__("./node_modules/querystring/encode.js")},"./node_modules/url/node_modules/punycode/punycode.js":function(module,exports,__webpack_require__){var __WEBPACK_AMD_DEFINE_RESULT__;module=__webpack_require__.nmd(module),function(root){exports&&exports.nodeType,module&&module.nodeType;var freeGlobal="object"==typeof __webpack_require__.g&&__webpack_require__.g;freeGlobal.global!==freeGlobal&&freeGlobal.window!==freeGlobal&&freeGlobal.self;var punycode,maxInt=2147483647,base=36,tMin=1,tMax=26,skew=38,damp=700,initialBias=72,initialN=128,delimiter="-",regexPunycode=/^xn--/,regexNonASCII=/[^\x20-\x7E]/,regexSeparators=/[\x2E\u3002\uFF0E\uFF61]/g,errors={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},baseMinusTMin=base-tMin,floor=Math.floor,stringFromCharCode=String.fromCharCode;function error(type){throw RangeError(errors[type])}function map(array,fn){for(var length=array.length,result=[];length--;)result[length]=fn(array[length]);return result}function mapDomain(string,fn){var parts=string.split("@"),result="";return parts.length>1&&(result=parts[0]+"@",string=parts[1]),result+map((string=string.replace(regexSeparators,".")).split("."),fn).join(".")}function ucs2decode(string){for(var value,extra,output=[],counter=0,length=string.length;counter<length;)(value=string.charCodeAt(counter++))>=55296&&value<=56319&&counter<length?56320==(64512&(extra=string.charCodeAt(counter++)))?output.push(((1023&value)<<10)+(1023&extra)+65536):(output.push(value),counter--):output.push(value);return output}function ucs2encode(array){return map(array,(function(value){var output="";return value>65535&&(output+=stringFromCharCode((value-=65536)>>>10&1023|55296),value=56320|1023&value),output+=stringFromCharCode(value)})).join("")}function digitToBasic(digit,flag){return digit+22+75*(digit<26)-((0!=flag)<<5)}function adapt(delta,numPoints,firstTime){var k=0;for(delta=firstTime?floor(delta/damp):delta>>1,delta+=floor(delta/numPoints);delta>baseMinusTMin*tMax>>1;k+=base)delta=floor(delta/baseMinusTMin);return floor(k+(baseMinusTMin+1)*delta/(delta+skew))}function decode(input){var out,basic,j,index,oldi,w,k,digit,t,baseMinusT,codePoint,output=[],inputLength=input.length,i=0,n=initialN,bias=initialBias;for((basic=input.lastIndexOf(delimiter))<0&&(basic=0),j=0;j<basic;++j)input.charCodeAt(j)>=128&&error("not-basic"),output.push(input.charCodeAt(j));for(index=basic>0?basic+1:0;index<inputLength;){for(oldi=i,w=1,k=base;index>=inputLength&&error("invalid-input"),((digit=(codePoint=input.charCodeAt(index++))-48<10?codePoint-22:codePoint-65<26?codePoint-65:codePoint-97<26?codePoint-97:base)>=base||digit>floor((maxInt-i)/w))&&error("overflow"),i+=digit*w,!(digit<(t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias));k+=base)w>floor(maxInt/(baseMinusT=base-t))&&error("overflow"),w*=baseMinusT;bias=adapt(i-oldi,out=output.length+1,0==oldi),floor(i/out)>maxInt-n&&error("overflow"),n+=floor(i/out),i%=out,output.splice(i++,0,n)}return ucs2encode(output)}function encode(input){var n,delta,handledCPCount,basicLength,bias,j,m,q,k,t,currentValue,inputLength,handledCPCountPlusOne,baseMinusT,qMinusT,output=[];for(inputLength=(input=ucs2decode(input)).length,n=initialN,delta=0,bias=initialBias,j=0;j<inputLength;++j)(currentValue=input[j])<128&&output.push(stringFromCharCode(currentValue));for(handledCPCount=basicLength=output.length,basicLength&&output.push(delimiter);handledCPCount<inputLength;){for(m=maxInt,j=0;j<inputLength;++j)(currentValue=input[j])>=n&¤tValue<m&&(m=currentValue);for(m-n>floor((maxInt-delta)/(handledCPCountPlusOne=handledCPCount+1))&&error("overflow"),delta+=(m-n)*handledCPCountPlusOne,n=m,j=0;j<inputLength;++j)if((currentValue=input[j])<n&&++delta>maxInt&&error("overflow"),currentValue==n){for(q=delta,k=base;!(q<(t=k<=bias?tMin:k>=bias+tMax?tMax:k-bias));k+=base)qMinusT=q-t,baseMinusT=base-t,output.push(stringFromCharCode(digitToBasic(t+qMinusT%baseMinusT,0))),q=floor(qMinusT/baseMinusT);output.push(stringFromCharCode(digitToBasic(q,0))),bias=adapt(delta,handledCPCountPlusOne,handledCPCount==basicLength),delta=0,++handledCPCount}++delta,++n}return output.join("")}punycode={version:"1.3.2",ucs2:{decode:ucs2decode,encode:ucs2encode},decode,encode,toASCII:function toASCII(input){return mapDomain(input,(function(string){return regexNonASCII.test(string)?"xn--"+encode(string):string}))},toUnicode:function toUnicode(input){return mapDomain(input,(function(string){return regexPunycode.test(string)?decode(string.slice(4).toLowerCase()):string}))}},void 0===(__WEBPACK_AMD_DEFINE_RESULT__=function(){return punycode}.call(exports,__webpack_require__,exports,module))||(module.exports=__WEBPACK_AMD_DEFINE_RESULT__)}()},"./node_modules/url/url.js":(__unused_webpack_module,exports,__webpack_require__)=>{var punycode=__webpack_require__("./node_modules/url/node_modules/punycode/punycode.js");function Url(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}exports.parse=urlParse,exports.resolve=function urlResolve(source,relative){return urlParse(source,!1,!0).resolve(relative)},exports.resolveObject=function urlResolveObject(source,relative){return source?urlParse(source,!1,!0).resolveObject(relative):relative},exports.format=function urlFormat(obj){isString(obj)&&(obj=urlParse(obj));return obj instanceof Url?obj.format():Url.prototype.format.call(obj)},exports.Url=Url;var protocolPattern=/^([a-z0-9.+-]+:)/i,portPattern=/:[0-9]*$/,unwise=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),autoEscape=["'"].concat(unwise),nonHostChars=["%","/","?",";","#"].concat(autoEscape),hostEndingChars=["/","?","#"],hostnamePartPattern=/^[a-z0-9A-Z_-]{0,63}$/,hostnamePartStart=/^([a-z0-9A-Z_-]{0,63})(.*)$/,unsafeProtocol={javascript:!0,"javascript:":!0},hostlessProtocol={javascript:!0,"javascript:":!0},slashedProtocol={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},querystring=__webpack_require__("./node_modules/querystring/index.js");function urlParse(url,parseQueryString,slashesDenoteHost){if(url&&isObject(url)&&url instanceof Url)return url;var u=new Url;return u.parse(url,parseQueryString,slashesDenoteHost),u}function isString(arg){return"string"==typeof arg}function isObject(arg){return"object"==typeof arg&&null!==arg}function isNull(arg){return null===arg}Url.prototype.parse=function(url,parseQueryString,slashesDenoteHost){if(!isString(url))throw new TypeError("Parameter 'url' must be a string, not "+typeof url);var rest=url;rest=rest.trim();var proto=protocolPattern.exec(rest);if(proto){var lowerProto=(proto=proto[0]).toLowerCase();this.protocol=lowerProto,rest=rest.substr(proto.length)}if(slashesDenoteHost||proto||rest.match(/^\/\/[^@\/]+@[^@\/]+/)){var slashes="//"===rest.substr(0,2);!slashes||proto&&hostlessProtocol[proto]||(rest=rest.substr(2),this.slashes=!0)}if(!hostlessProtocol[proto]&&(slashes||proto&&!slashedProtocol[proto])){for(var auth,atSign,hostEnd=-1,i=0;i<hostEndingChars.length;i++){-1!==(hec=rest.indexOf(hostEndingChars[i]))&&(-1===hostEnd||hec<hostEnd)&&(hostEnd=hec)}-1!==(atSign=-1===hostEnd?rest.lastIndexOf("@"):rest.lastIndexOf("@",hostEnd))&&(auth=rest.slice(0,atSign),rest=rest.slice(atSign+1),this.auth=decodeURIComponent(auth)),hostEnd=-1;for(i=0;i<nonHostChars.length;i++){var hec;-1!==(hec=rest.indexOf(nonHostChars[i]))&&(-1===hostEnd||hec<hostEnd)&&(hostEnd=hec)}-1===hostEnd&&(hostEnd=rest.length),this.host=rest.slice(0,hostEnd),rest=rest.slice(hostEnd),this.parseHost(),this.hostname=this.hostname||"";var ipv6Hostname="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!ipv6Hostname)for(var hostparts=this.hostname.split(/\./),l=(i=0,hostparts.length);i<l;i++){var part=hostparts[i];if(part&&!part.match(hostnamePartPattern)){for(var newpart="",j=0,k=part.length;j<k;j++)part.charCodeAt(j)>127?newpart+="x":newpart+=part[j];if(!newpart.match(hostnamePartPattern)){var validParts=hostparts.slice(0,i),notHost=hostparts.slice(i+1),bit=part.match(hostnamePartStart);bit&&(validParts.push(bit[1]),notHost.unshift(bit[2])),notHost.length&&(rest="/"+notHost.join(".")+rest),this.hostname=validParts.join(".");break}}}if(this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),!ipv6Hostname){var domainArray=this.hostname.split("."),newOut=[];for(i=0;i<domainArray.length;++i){var s=domainArray[i];newOut.push(s.match(/[^A-Za-z0-9_-]/)?"xn--"+punycode.encode(s):s)}this.hostname=newOut.join(".")}var p=this.port?":"+this.port:"",h=this.hostname||"";this.host=h+p,this.href+=this.host,ipv6Hostname&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==rest[0]&&(rest="/"+rest))}if(!unsafeProtocol[lowerProto])for(i=0,l=autoEscape.length;i<l;i++){var ae=autoEscape[i],esc=encodeURIComponent(ae);esc===ae&&(esc=escape(ae)),rest=rest.split(ae).join(esc)}var hash=rest.indexOf("#");-1!==hash&&(this.hash=rest.substr(hash),rest=rest.slice(0,hash));var qm=rest.indexOf("?");if(-1!==qm?(this.search=rest.substr(qm),this.query=rest.substr(qm+1),parseQueryString&&(this.query=querystring.parse(this.query)),rest=rest.slice(0,qm)):parseQueryString&&(this.search="",this.query={}),rest&&(this.pathname=rest),slashedProtocol[lowerProto]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){p=this.pathname||"",s=this.search||"";this.path=p+s}return this.href=this.format(),this},Url.prototype.format=function(){var auth=this.auth||"";auth&&(auth=(auth=encodeURIComponent(auth)).replace(/%3A/i,":"),auth+="@");var protocol=this.protocol||"",pathname=this.pathname||"",hash=this.hash||"",host=!1,query="";this.host?host=auth+this.host:this.hostname&&(host=auth+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(host+=":"+this.port)),this.query&&isObject(this.query)&&Object.keys(this.query).length&&(query=querystring.stringify(this.query));var search=this.search||query&&"?"+query||"";return protocol&&":"!==protocol.substr(-1)&&(protocol+=":"),this.slashes||(!protocol||slashedProtocol[protocol])&&!1!==host?(host="//"+(host||""),pathname&&"/"!==pathname.charAt(0)&&(pathname="/"+pathname)):host||(host=""),hash&&"#"!==hash.charAt(0)&&(hash="#"+hash),search&&"?"!==search.charAt(0)&&(search="?"+search),protocol+host+(pathname=pathname.replace(/[?#]/g,(function(match){return encodeURIComponent(match)})))+(search=search.replace("#","%23"))+hash},Url.prototype.resolve=function(relative){return this.resolveObject(urlParse(relative,!1,!0)).format()},Url.prototype.resolveObject=function(relative){if(isString(relative)){var rel=new Url;rel.parse(relative,!1,!0),relative=rel}var result=new Url;if(Object.keys(this).forEach((function(k){result[k]=this[k]}),this),result.hash=relative.hash,""===relative.href)return result.href=result.format(),result;if(relative.slashes&&!relative.protocol)return Object.keys(relative).forEach((function(k){"protocol"!==k&&(result[k]=relative[k])})),slashedProtocol[result.protocol]&&result.hostname&&!result.pathname&&(result.path=result.pathname="/"),result.href=result.format(),result;if(relative.protocol&&relative.protocol!==result.protocol){if(!slashedProtocol[relative.protocol])return Object.keys(relative).forEach((function(k){result[k]=relative[k]})),result.href=result.format(),result;if(result.protocol=relative.protocol,relative.host||hostlessProtocol[relative.protocol])result.pathname=relative.pathname;else{for(var relPath=(relative.pathname||"").split("/");relPath.length&&!(relative.host=relPath.shift()););relative.host||(relative.host=""),relative.hostname||(relative.hostname=""),""!==relPath[0]&&relPath.unshift(""),relPath.length<2&&relPath.unshift(""),result.pathname=relPath.join("/")}if(result.search=relative.search,result.query=relative.query,result.host=relative.host||"",result.auth=relative.auth,result.hostname=relative.hostname||relative.host,result.port=relative.port,result.pathname||result.search){var p=result.pathname||"",s=result.search||"";result.path=p+s}return result.slashes=result.slashes||relative.slashes,result.href=result.format(),result}var isSourceAbs=result.pathname&&"/"===result.pathname.charAt(0),isRelAbs=relative.host||relative.pathname&&"/"===relative.pathname.charAt(0),mustEndAbs=isRelAbs||isSourceAbs||result.host&&relative.pathname,removeAllDots=mustEndAbs,srcPath=result.pathname&&result.pathname.split("/")||[],psychotic=(relPath=relative.pathname&&relative.pathname.split("/")||[],result.protocol&&!slashedProtocol[result.protocol]);if(psychotic&&(result.hostname="",result.port=null,result.host&&(""===srcPath[0]?srcPath[0]=result.host:srcPath.unshift(result.host)),result.host="",relative.protocol&&(relative.hostname=null,relative.port=null,relative.host&&(""===relPath[0]?relPath[0]=relative.host:relPath.unshift(relative.host)),relative.host=null),mustEndAbs=mustEndAbs&&(""===relPath[0]||""===srcPath[0])),isRelAbs)result.host=relative.host||""===relative.host?relative.host:result.host,result.hostname=relative.hostname||""===relative.hostname?relative.hostname:result.hostname,result.search=relative.search,result.query=relative.query,srcPath=relPath;else if(relPath.length)srcPath||(srcPath=[]),srcPath.pop(),srcPath=srcPath.concat(relPath),result.search=relative.search,result.query=relative.query;else if(!function isNullOrUndefined(arg){return null==arg}(relative.search)){if(psychotic)result.hostname=result.host=srcPath.shift(),(authInHost=!!(result.host&&result.host.indexOf("@")>0)&&result.host.split("@"))&&(result.auth=authInHost.shift(),result.host=result.hostname=authInHost.shift());return result.search=relative.search,result.query=relative.query,isNull(result.pathname)&&isNull(result.search)||(result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")),result.href=result.format(),result}if(!srcPath.length)return result.pathname=null,result.search?result.path="/"+result.search:result.path=null,result.href=result.format(),result;for(var last=srcPath.slice(-1)[0],hasTrailingSlash=(result.host||relative.host)&&("."===last||".."===last)||""===last,up=0,i=srcPath.length;i>=0;i--)"."==(last=srcPath[i])?srcPath.splice(i,1):".."===last?(srcPath.splice(i,1),up++):up&&(srcPath.splice(i,1),up--);if(!mustEndAbs&&!removeAllDots)for(;up--;up)srcPath.unshift("..");!mustEndAbs||""===srcPath[0]||srcPath[0]&&"/"===srcPath[0].charAt(0)||srcPath.unshift(""),hasTrailingSlash&&"/"!==srcPath.join("/").substr(-1)&&srcPath.push("");var authInHost,isAbsolute=""===srcPath[0]||srcPath[0]&&"/"===srcPath[0].charAt(0);psychotic&&(result.hostname=result.host=isAbsolute?"":srcPath.length?srcPath.shift():"",(authInHost=!!(result.host&&result.host.indexOf("@")>0)&&result.host.split("@"))&&(result.auth=authInHost.shift(),result.host=result.hostname=authInHost.shift()));return(mustEndAbs=mustEndAbs||result.host&&srcPath.length)&&!isAbsolute&&srcPath.unshift(""),srcPath.length?result.pathname=srcPath.join("/"):(result.pathname=null,result.path=null),isNull(result.pathname)&&isNull(result.search)||(result.path=(result.pathname?result.pathname:"")+(result.search?result.search:"")),result.auth=relative.auth||result.auth,result.slashes=result.slashes||relative.slashes,result.href=result.format(),result},Url.prototype.parseHost=function(){var host=this.host,port=portPattern.exec(host);port&&(":"!==(port=port[0])&&(this.port=port.substr(1)),host=host.substr(0,host.length-port.length)),host&&(this.hostname=host)}},"./node_modules/aws-sdk/apis/cognito-identity-2014-06-30.min.json":module=>{"use strict";module.exports=JSON.parse('{"version":"2.0","metadata":{"apiVersion":"2014-06-30","endpointPrefix":"cognito-identity","jsonVersion":"1.1","protocol":"json","serviceFullName":"Amazon Cognito Identity","serviceId":"Cognito Identity","signatureVersion":"v4","targetPrefix":"AWSCognitoIdentityService","uid":"cognito-identity-2014-06-30"},"operations":{"CreateIdentityPool":{"input":{"type":"structure","required":["IdentityPoolName","AllowUnauthenticatedIdentities"],"members":{"IdentityPoolName":{},"AllowUnauthenticatedIdentities":{"type":"boolean"},"AllowClassicFlow":{"type":"boolean"},"SupportedLoginProviders":{"shape":"S5"},"DeveloperProviderName":{},"OpenIdConnectProviderARNs":{"shape":"S9"},"CognitoIdentityProviders":{"shape":"Sb"},"SamlProviderARNs":{"shape":"Sg"},"IdentityPoolTags":{"shape":"Sh"}}},"output":{"shape":"Sk"}},"DeleteIdentities":{"input":{"type":"structure","required":["IdentityIdsToDelete"],"members":{"IdentityIdsToDelete":{"type":"list","member":{}}}},"output":{"type":"structure","members":{"UnprocessedIdentityIds":{"type":"list","member":{"type":"structure","members":{"IdentityId":{},"ErrorCode":{}}}}}}},"DeleteIdentityPool":{"input":{"type":"structure","required":["IdentityPoolId"],"members":{"IdentityPoolId":{}}}},"DescribeIdentity":{"input":{"type":"structure","required":["IdentityId"],"members":{"IdentityId":{}}},"output":{"shape":"Sv"}},"DescribeIdentityPool":{"input":{"type":"structure","required":["IdentityPoolId"],"members":{"IdentityPoolId":{}}},"output":{"shape":"Sk"}},"GetCredentialsForIdentity":{"input":{"type":"structure","required":["IdentityId"],"members":{"IdentityId":{},"Logins":{"shape":"S10"},"CustomRoleArn":{}}},"output":{"type":"structure","members":{"IdentityId":{},"Credentials":{"type":"structure","members":{"AccessKeyId":{},"SecretKey":{},"SessionToken":{},"Expiration":{"type":"timestamp"}}}}},"authtype":"none"},"GetId":{"input":{"type":"structure","required":["IdentityPoolId"],"members":{"AccountId":{},"IdentityPoolId":{},"Logins":{"shape":"S10"}}},"output":{"type":"structure","members":{"IdentityId":{}}},"authtype":"none"},"GetIdentityPoolRoles":{"input":{"type":"structure","required":["IdentityPoolId"],"members":{"IdentityPoolId":{}}},"output":{"type":"structure","members":{"IdentityPoolId":{},"Roles":{"shape":"S1c"},"RoleMappings":{"shape":"S1e"}}}},"GetOpenIdToken":{"input":{"type":"structure","required":["IdentityId"],"members":{"IdentityId":{},"Logins":{"shape":"S10"}}},"output":{"type":"structure","members":{"IdentityId":{},"Token":{}}},"authtype":"none"},"GetOpenIdTokenForDeveloperIdentity":{"input":{"type":"structure","required":["IdentityPoolId","Logins"],"members":{"IdentityPoolId":{},"IdentityId":{},"Logins":{"shape":"S10"},"PrincipalTags":{"shape":"S1s"},"TokenDuration":{"type":"long"}}},"output":{"type":"structure","members":{"IdentityId":{},"Token":{}}}},"GetPrincipalTagAttributeMap":{"input":{"type":"structure","required":["IdentityPoolId","IdentityProviderName"],"members":{"IdentityPoolId":{},"IdentityProviderName":{}}},"output":{"type":"structure","members":{"IdentityPoolId":{},"IdentityProviderName":{},"UseDefaults":{"type":"boolean"},"PrincipalTags":{"shape":"S1s"}}}},"ListIdentities":{"input":{"type":"structure","required":["IdentityPoolId","MaxResults"],"members":{"IdentityPoolId":{},"MaxResults":{"type":"integer"},"NextToken":{},"HideDisabled":{"type":"boolean"}}},"output":{"type":"structure","members":{"IdentityPoolId":{},"Identities":{"type":"list","member":{"shape":"Sv"}},"NextToken":{}}}},"ListIdentityPools":{"input":{"type":"structure","required":["MaxResults"],"members":{"MaxResults":{"type":"integer"},"NextToken":{}}},"output":{"type":"structure","members":{"IdentityPools":{"type":"list","member":{"type":"structure","members":{"IdentityPoolId":{},"IdentityPoolName":{}}}},"NextToken":{}}}},"ListTagsForResource":{"input":{"type":"structure","required":["ResourceArn"],"members":{"ResourceArn":{}}},"output":{"type":"structure","members":{"Tags":{"shape":"Sh"}}}},"LookupDeveloperIdentity":{"input":{"type":"structure","required":["IdentityPoolId"],"members":{"IdentityPoolId":{},"IdentityId":{},"DeveloperUserIdentifier":{},"MaxResults":{"type":"integer"},"NextToken":{}}},"output":{"type":"structure","members":{"IdentityId":{},"DeveloperUserIdentifierList":{"type":"list","member":{}},"NextToken":{}}}},"MergeDeveloperIdentities":{"input":{"type":"structure","required":["SourceUserIdentifier","DestinationUserIdentifier","DeveloperProviderName","IdentityPoolId"],"members":{"SourceUserIdentifier":{},"DestinationUserIdentifier":{},"DeveloperProviderName":{},"IdentityPoolId":{}}},"output":{"type":"structure","members":{"IdentityId":{}}}},"SetIdentityPoolRoles":{"input":{"type":"structure","required":["IdentityPoolId","Roles"],"members":{"IdentityPoolId":{},"Roles":{"shape":"S1c"},"RoleMappings":{"shape":"S1e"}}}},"SetPrincipalTagAttributeMap":{"input":{"type":"structure","required":["IdentityPoolId","IdentityProviderName"],"members":{"IdentityPoolId":{},"IdentityProviderName":{},"UseDefaults":{"type":"boolean"},"PrincipalTags":{"shape":"S1s"}}},"output":{"type":"structure","members":{"IdentityPoolId":{},"IdentityProviderName":{},"UseDefaults":{"type":"boolean"},"PrincipalTags":{"shape":"S1s"}}}},"TagResource":{"input":{"type":"structure","required":["ResourceArn","Tags"],"members":{"ResourceArn":{},"Tags":{"shape":"Sh"}}},"output":{"type":"structure","members":{}}},"UnlinkDeveloperIdentity":{"input":{"type":"structure","required":["IdentityId","IdentityPoolId","DeveloperProviderName","DeveloperUserIdentifier"],"members":{"IdentityId":{},"IdentityPoolId":{},"DeveloperProviderName":{},"DeveloperUserIdentifier":{}}}},"UnlinkIdentity":{"input":{"type":"structure","required":["IdentityId","Logins","LoginsToRemove"],"members":{"IdentityId":{},"Logins":{"shape":"S10"},"LoginsToRemove":{"shape":"Sw"}}},"authtype":"none"},"UntagResource":{"input":{"type":"structure","required":["ResourceArn","TagKeys"],"members":{"ResourceArn":{},"TagKeys":{"type":"list","member":{}}}},"output":{"type":"structure","members":{}}},"UpdateIdentityPool":{"input":{"shape":"Sk"},"output":{"shape":"Sk"}}},"shapes":{"S5":{"type":"map","key":{},"value":{}},"S9":{"type":"list","member":{}},"Sb":{"type":"list","member":{"type":"structure","members":{"ProviderName":{},"ClientId":{},"ServerSideTokenCheck":{"type":"boolean"}}}},"Sg":{"type":"list","member":{}},"Sh":{"type":"map","key":{},"value":{}},"Sk":{"type":"structure","required":["IdentityPoolId","IdentityPoolName","AllowUnauthenticatedIdentities"],"members":{"IdentityPoolId":{},"IdentityPoolName":{},"AllowUnauthenticatedIdentities":{"type":"boolean"},"AllowClassicFlow":{"type":"boolean"},"SupportedLoginProviders":{"shape":"S5"},"DeveloperProviderName":{},"OpenIdConnectProviderARNs":{"shape":"S9"},"CognitoIdentityProviders":{"shape":"Sb"},"SamlProviderARNs":{"shape":"Sg"},"IdentityPoolTags":{"shape":"Sh"}}},"Sv":{"type":"structure","members":{"IdentityId":{},"Logins":{"shape":"Sw"},"CreationDate":{"type":"timestamp"},"LastModifiedDate":{"type":"timestamp"}}},"Sw":{"type":"list","member":{}},"S10":{"type":"map","key":{},"value":{}},"S1c":{"type":"map","key":{},"value":{}},"S1e":{"type":"map","key":{},"value":{"type":"structure","required":["Type"],"members":{"Type":{},"AmbiguousRoleResolution":{},"RulesConfiguration":{"type":"structure","required":["Rules"],"members":{"Rules":{"type":"list","member":{"type":"structure","required":["Claim","MatchType","Value","RoleARN"],"members":{"Claim":{},"MatchType":{},"Value":{},"RoleARN":{}}}}}}}}},"S1s":{"type":"map","key":{},"value":{}}}}')},"./node_modules/aws-sdk/apis/cognito-identity-2014-06-30.paginators.json":module=>{"use strict";module.exports=JSON.parse('{"X":{"ListIdentityPools":{"input_token":"NextToken","limit_key":"MaxResults","output_token":"NextToken","result_key":"IdentityPools"}}}')},"./node_modules/aws-sdk/apis/firehose-2015-08-04.min.json":module=>{"use strict";module.exports=JSON.parse('{"version":"2.0","metadata":{"apiVersion":"2015-08-04","endpointPrefix":"firehose","jsonVersion":"1.1","protocol":"json","serviceAbbreviation":"Firehose","serviceFullName":"Amazon Kinesis Firehose","serviceId":"Firehose","signatureVersion":"v4","targetPrefix":"Firehose_20150804","uid":"firehose-2015-08-04"},"operations":{"CreateDeliveryStream":{"input":{"type":"structure","required":["DeliveryStreamName"],"members":{"DeliveryStreamName":{},"DeliveryStreamType":{},"KinesisStreamSourceConfiguration":{"type":"structure","required":["KinesisStreamARN","RoleARN"],"members":{"KinesisStreamARN":{},"RoleARN":{}}},"DeliveryStreamEncryptionConfigurationInput":{"shape":"S7"},"S3DestinationConfiguration":{"shape":"Sa","deprecated":true},"ExtendedS3DestinationConfiguration":{"type":"structure","required":["RoleARN","BucketARN"],"members":{"RoleARN":{},"BucketARN":{},"Prefix":{},"ErrorOutputPrefix":{},"BufferingHints":{"shape":"Se"},"CompressionFormat":{},"EncryptionConfiguration":{"shape":"Si"},"CloudWatchLoggingOptions":{"shape":"Sl"},"ProcessingConfiguration":{"shape":"Sq"},"S3BackupMode":{},"S3BackupConfiguration":{"shape":"Sa"},"DataFormatConversionConfiguration":{"shape":"Sz"},"DynamicPartitioningConfiguration":{"shape":"S1o"}}},"RedshiftDestinationConfiguration":{"type":"structure","required":["RoleARN","ClusterJDBCURL","CopyCommand","Username","Password","S3Configuration"],"members":{"RoleARN":{},"ClusterJDBCURL":{},"CopyCommand":{"shape":"S1t"},"Username":{"shape":"S1x"},"Password":{"shape":"S1y"},"RetryOptions":{"shape":"S1z"},"S3Configuration":{"shape":"Sa"},"ProcessingConfiguration":{"shape":"Sq"},"S3BackupMode":{},"S3BackupConfiguration":{"shape":"Sa"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"ElasticsearchDestinationConfiguration":{"type":"structure","required":["RoleARN","IndexName","S3Configuration"],"members":{"RoleARN":{},"DomainARN":{},"ClusterEndpoint":{},"IndexName":{},"TypeName":{},"IndexRotationPeriod":{},"BufferingHints":{"shape":"S28"},"RetryOptions":{"shape":"S2b"},"S3BackupMode":{},"S3Configuration":{"shape":"Sa"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"},"VpcConfiguration":{"shape":"S2e"}}},"AmazonopensearchserviceDestinationConfiguration":{"type":"structure","required":["RoleARN","IndexName","S3Configuration"],"members":{"RoleARN":{},"DomainARN":{},"ClusterEndpoint":{},"IndexName":{},"TypeName":{},"IndexRotationPeriod":{},"BufferingHints":{"shape":"S2n"},"RetryOptions":{"shape":"S2q"},"S3BackupMode":{},"S3Configuration":{"shape":"Sa"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"},"VpcConfiguration":{"shape":"S2e"}}},"SplunkDestinationConfiguration":{"type":"structure","required":["HECEndpoint","HECEndpointType","HECToken","S3Configuration"],"members":{"HECEndpoint":{},"HECEndpointType":{},"HECToken":{},"HECAcknowledgmentTimeoutInSeconds":{"type":"integer"},"RetryOptions":{"shape":"S2y"},"S3BackupMode":{},"S3Configuration":{"shape":"Sa"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"HttpEndpointDestinationConfiguration":{"type":"structure","required":["EndpointConfiguration","S3Configuration"],"members":{"EndpointConfiguration":{"shape":"S32"},"BufferingHints":{"shape":"S36"},"CloudWatchLoggingOptions":{"shape":"Sl"},"RequestConfiguration":{"shape":"S39"},"ProcessingConfiguration":{"shape":"Sq"},"RoleARN":{},"RetryOptions":{"shape":"S3f"},"S3BackupMode":{},"S3Configuration":{"shape":"Sa"}}},"Tags":{"shape":"S3i"}}},"output":{"type":"structure","members":{"DeliveryStreamARN":{}}}},"DeleteDeliveryStream":{"input":{"type":"structure","required":["DeliveryStreamName"],"members":{"DeliveryStreamName":{},"AllowForceDelete":{"type":"boolean"}}},"output":{"type":"structure","members":{}}},"DescribeDeliveryStream":{"input":{"type":"structure","required":["DeliveryStreamName"],"members":{"DeliveryStreamName":{},"Limit":{"type":"integer"},"ExclusiveStartDestinationId":{}}},"output":{"type":"structure","required":["DeliveryStreamDescription"],"members":{"DeliveryStreamDescription":{"type":"structure","required":["DeliveryStreamName","DeliveryStreamARN","DeliveryStreamStatus","DeliveryStreamType","VersionId","Destinations","HasMoreDestinations"],"members":{"DeliveryStreamName":{},"DeliveryStreamARN":{},"DeliveryStreamStatus":{},"FailureDescription":{"shape":"S3w"},"DeliveryStreamEncryptionConfiguration":{"type":"structure","members":{"KeyARN":{},"KeyType":{},"Status":{},"FailureDescription":{"shape":"S3w"}}},"DeliveryStreamType":{},"VersionId":{},"CreateTimestamp":{"type":"timestamp"},"LastUpdateTimestamp":{"type":"timestamp"},"Source":{"type":"structure","members":{"KinesisStreamSourceDescription":{"type":"structure","members":{"KinesisStreamARN":{},"RoleARN":{},"DeliveryStartTimestamp":{"type":"timestamp"}}}}},"Destinations":{"type":"list","member":{"type":"structure","required":["DestinationId"],"members":{"DestinationId":{},"S3DestinationDescription":{"shape":"S47"},"ExtendedS3DestinationDescription":{"type":"structure","required":["RoleARN","BucketARN","BufferingHints","CompressionFormat","EncryptionConfiguration"],"members":{"RoleARN":{},"BucketARN":{},"Prefix":{},"ErrorOutputPrefix":{},"BufferingHints":{"shape":"Se"},"CompressionFormat":{},"EncryptionConfiguration":{"shape":"Si"},"CloudWatchLoggingOptions":{"shape":"Sl"},"ProcessingConfiguration":{"shape":"Sq"},"S3BackupMode":{},"S3BackupDescription":{"shape":"S47"},"DataFormatConversionConfiguration":{"shape":"Sz"},"DynamicPartitioningConfiguration":{"shape":"S1o"}}},"RedshiftDestinationDescription":{"type":"structure","required":["RoleARN","ClusterJDBCURL","CopyCommand","Username","S3DestinationDescription"],"members":{"RoleARN":{},"ClusterJDBCURL":{},"CopyCommand":{"shape":"S1t"},"Username":{"shape":"S1x"},"RetryOptions":{"shape":"S1z"},"S3DestinationDescription":{"shape":"S47"},"ProcessingConfiguration":{"shape":"Sq"},"S3BackupMode":{},"S3BackupDescription":{"shape":"S47"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"ElasticsearchDestinationDescription":{"type":"structure","members":{"RoleARN":{},"DomainARN":{},"ClusterEndpoint":{},"IndexName":{},"TypeName":{},"IndexRotationPeriod":{},"BufferingHints":{"shape":"S28"},"RetryOptions":{"shape":"S2b"},"S3BackupMode":{},"S3DestinationDescription":{"shape":"S47"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"},"VpcConfigurationDescription":{"shape":"S4b"}}},"AmazonopensearchserviceDestinationDescription":{"type":"structure","members":{"RoleARN":{},"DomainARN":{},"ClusterEndpoint":{},"IndexName":{},"TypeName":{},"IndexRotationPeriod":{},"BufferingHints":{"shape":"S2n"},"RetryOptions":{"shape":"S2q"},"S3BackupMode":{},"S3DestinationDescription":{"shape":"S47"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"},"VpcConfigurationDescription":{"shape":"S4b"}}},"SplunkDestinationDescription":{"type":"structure","members":{"HECEndpoint":{},"HECEndpointType":{},"HECToken":{},"HECAcknowledgmentTimeoutInSeconds":{"type":"integer"},"RetryOptions":{"shape":"S2y"},"S3BackupMode":{},"S3DestinationDescription":{"shape":"S47"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"HttpEndpointDestinationDescription":{"type":"structure","members":{"EndpointConfiguration":{"type":"structure","members":{"Url":{"shape":"S33"},"Name":{}}},"BufferingHints":{"shape":"S36"},"CloudWatchLoggingOptions":{"shape":"Sl"},"RequestConfiguration":{"shape":"S39"},"ProcessingConfiguration":{"shape":"Sq"},"RoleARN":{},"RetryOptions":{"shape":"S3f"},"S3BackupMode":{},"S3DestinationDescription":{"shape":"S47"}}}}}},"HasMoreDestinations":{"type":"boolean"}}}}}},"ListDeliveryStreams":{"input":{"type":"structure","members":{"Limit":{"type":"integer"},"DeliveryStreamType":{},"ExclusiveStartDeliveryStreamName":{}}},"output":{"type":"structure","required":["DeliveryStreamNames","HasMoreDeliveryStreams"],"members":{"DeliveryStreamNames":{"type":"list","member":{}},"HasMoreDeliveryStreams":{"type":"boolean"}}}},"ListTagsForDeliveryStream":{"input":{"type":"structure","required":["DeliveryStreamName"],"members":{"DeliveryStreamName":{},"ExclusiveStartTagKey":{},"Limit":{"type":"integer"}}},"output":{"type":"structure","required":["Tags","HasMoreTags"],"members":{"Tags":{"type":"list","member":{"shape":"S3j"}},"HasMoreTags":{"type":"boolean"}}}},"PutRecord":{"input":{"type":"structure","required":["DeliveryStreamName","Record"],"members":{"DeliveryStreamName":{},"Record":{"shape":"S4p"}}},"output":{"type":"structure","required":["RecordId"],"members":{"RecordId":{},"Encrypted":{"type":"boolean"}}}},"PutRecordBatch":{"input":{"type":"structure","required":["DeliveryStreamName","Records"],"members":{"DeliveryStreamName":{},"Records":{"type":"list","member":{"shape":"S4p"}}}},"output":{"type":"structure","required":["FailedPutCount","RequestResponses"],"members":{"FailedPutCount":{"type":"integer"},"Encrypted":{"type":"boolean"},"RequestResponses":{"type":"list","member":{"type":"structure","members":{"RecordId":{},"ErrorCode":{},"ErrorMessage":{}}}}}}},"StartDeliveryStreamEncryption":{"input":{"type":"structure","required":["DeliveryStreamName"],"members":{"DeliveryStreamName":{},"DeliveryStreamEncryptionConfigurationInput":{"shape":"S7"}}},"output":{"type":"structure","members":{}}},"StopDeliveryStreamEncryption":{"input":{"type":"structure","required":["DeliveryStreamName"],"members":{"DeliveryStreamName":{}}},"output":{"type":"structure","members":{}}},"TagDeliveryStream":{"input":{"type":"structure","required":["DeliveryStreamName","Tags"],"members":{"DeliveryStreamName":{},"Tags":{"shape":"S3i"}}},"output":{"type":"structure","members":{}}},"UntagDeliveryStream":{"input":{"type":"structure","required":["DeliveryStreamName","TagKeys"],"members":{"DeliveryStreamName":{},"TagKeys":{"type":"list","member":{}}}},"output":{"type":"structure","members":{}}},"UpdateDestination":{"input":{"type":"structure","required":["DeliveryStreamName","CurrentDeliveryStreamVersionId","DestinationId"],"members":{"DeliveryStreamName":{},"CurrentDeliveryStreamVersionId":{},"DestinationId":{},"S3DestinationUpdate":{"shape":"S5a","deprecated":true},"ExtendedS3DestinationUpdate":{"type":"structure","members":{"RoleARN":{},"BucketARN":{},"Prefix":{},"ErrorOutputPrefix":{},"BufferingHints":{"shape":"Se"},"CompressionFormat":{},"EncryptionConfiguration":{"shape":"Si"},"CloudWatchLoggingOptions":{"shape":"Sl"},"ProcessingConfiguration":{"shape":"Sq"},"S3BackupMode":{},"S3BackupUpdate":{"shape":"S5a"},"DataFormatConversionConfiguration":{"shape":"Sz"},"DynamicPartitioningConfiguration":{"shape":"S1o"}}},"RedshiftDestinationUpdate":{"type":"structure","members":{"RoleARN":{},"ClusterJDBCURL":{},"CopyCommand":{"shape":"S1t"},"Username":{"shape":"S1x"},"Password":{"shape":"S1y"},"RetryOptions":{"shape":"S1z"},"S3Update":{"shape":"S5a"},"ProcessingConfiguration":{"shape":"Sq"},"S3BackupMode":{},"S3BackupUpdate":{"shape":"S5a"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"ElasticsearchDestinationUpdate":{"type":"structure","members":{"RoleARN":{},"DomainARN":{},"ClusterEndpoint":{},"IndexName":{},"TypeName":{},"IndexRotationPeriod":{},"BufferingHints":{"shape":"S28"},"RetryOptions":{"shape":"S2b"},"S3Update":{"shape":"S5a"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"AmazonopensearchserviceDestinationUpdate":{"type":"structure","members":{"RoleARN":{},"DomainARN":{},"ClusterEndpoint":{},"IndexName":{},"TypeName":{},"IndexRotationPeriod":{},"BufferingHints":{"shape":"S2n"},"RetryOptions":{"shape":"S2q"},"S3Update":{"shape":"S5a"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"SplunkDestinationUpdate":{"type":"structure","members":{"HECEndpoint":{},"HECEndpointType":{},"HECToken":{},"HECAcknowledgmentTimeoutInSeconds":{"type":"integer"},"RetryOptions":{"shape":"S2y"},"S3BackupMode":{},"S3Update":{"shape":"S5a"},"ProcessingConfiguration":{"shape":"Sq"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"HttpEndpointDestinationUpdate":{"type":"structure","members":{"EndpointConfiguration":{"shape":"S32"},"BufferingHints":{"shape":"S36"},"CloudWatchLoggingOptions":{"shape":"Sl"},"RequestConfiguration":{"shape":"S39"},"ProcessingConfiguration":{"shape":"Sq"},"RoleARN":{},"RetryOptions":{"shape":"S3f"},"S3BackupMode":{},"S3Update":{"shape":"S5a"}}}}},"output":{"type":"structure","members":{}}}},"shapes":{"S7":{"type":"structure","required":["KeyType"],"members":{"KeyARN":{},"KeyType":{}}},"Sa":{"type":"structure","required":["RoleARN","BucketARN"],"members":{"RoleARN":{},"BucketARN":{},"Prefix":{},"ErrorOutputPrefix":{},"BufferingHints":{"shape":"Se"},"CompressionFormat":{},"EncryptionConfiguration":{"shape":"Si"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"Se":{"type":"structure","members":{"SizeInMBs":{"type":"integer"},"IntervalInSeconds":{"type":"integer"}}},"Si":{"type":"structure","members":{"NoEncryptionConfig":{},"KMSEncryptionConfig":{"type":"structure","required":["AWSKMSKeyARN"],"members":{"AWSKMSKeyARN":{}}}}},"Sl":{"type":"structure","members":{"Enabled":{"type":"boolean"},"LogGroupName":{},"LogStreamName":{}}},"Sq":{"type":"structure","members":{"Enabled":{"type":"boolean"},"Processors":{"type":"list","member":{"type":"structure","required":["Type"],"members":{"Type":{},"Parameters":{"type":"list","member":{"type":"structure","required":["ParameterName","ParameterValue"],"members":{"ParameterName":{},"ParameterValue":{}}}}}}}}},"Sz":{"type":"structure","members":{"SchemaConfiguration":{"type":"structure","members":{"RoleARN":{},"CatalogId":{},"DatabaseName":{},"TableName":{},"Region":{},"VersionId":{}}},"InputFormatConfiguration":{"type":"structure","members":{"Deserializer":{"type":"structure","members":{"OpenXJsonSerDe":{"type":"structure","members":{"ConvertDotsInJsonKeysToUnderscores":{"type":"boolean"},"CaseInsensitive":{"type":"boolean"},"ColumnToJsonKeyMappings":{"type":"map","key":{},"value":{}}}},"HiveJsonSerDe":{"type":"structure","members":{"TimestampFormats":{"type":"list","member":{}}}}}}}},"OutputFormatConfiguration":{"type":"structure","members":{"Serializer":{"type":"structure","members":{"ParquetSerDe":{"type":"structure","members":{"BlockSizeBytes":{"type":"integer"},"PageSizeBytes":{"type":"integer"},"Compression":{},"EnableDictionaryCompression":{"type":"boolean"},"MaxPaddingBytes":{"type":"integer"},"WriterVersion":{}}},"OrcSerDe":{"type":"structure","members":{"StripeSizeBytes":{"type":"integer"},"BlockSizeBytes":{"type":"integer"},"RowIndexStride":{"type":"integer"},"EnablePadding":{"type":"boolean"},"PaddingTolerance":{"type":"double"},"Compression":{},"BloomFilterColumns":{"type":"list","member":{}},"BloomFilterFalsePositiveProbability":{"type":"double"},"DictionaryKeyThreshold":{"type":"double"},"FormatVersion":{}}}}}}},"Enabled":{"type":"boolean"}}},"S1o":{"type":"structure","members":{"RetryOptions":{"type":"structure","members":{"DurationInSeconds":{"type":"integer"}}},"Enabled":{"type":"boolean"}}},"S1t":{"type":"structure","required":["DataTableName"],"members":{"DataTableName":{},"DataTableColumns":{},"CopyOptions":{}}},"S1x":{"type":"string","sensitive":true},"S1y":{"type":"string","sensitive":true},"S1z":{"type":"structure","members":{"DurationInSeconds":{"type":"integer"}}},"S28":{"type":"structure","members":{"IntervalInSeconds":{"type":"integer"},"SizeInMBs":{"type":"integer"}}},"S2b":{"type":"structure","members":{"DurationInSeconds":{"type":"integer"}}},"S2e":{"type":"structure","required":["SubnetIds","RoleARN","SecurityGroupIds"],"members":{"SubnetIds":{"shape":"S2f"},"RoleARN":{},"SecurityGroupIds":{"shape":"S2g"}}},"S2f":{"type":"list","member":{}},"S2g":{"type":"list","member":{}},"S2n":{"type":"structure","members":{"IntervalInSeconds":{"type":"integer"},"SizeInMBs":{"type":"integer"}}},"S2q":{"type":"structure","members":{"DurationInSeconds":{"type":"integer"}}},"S2y":{"type":"structure","members":{"DurationInSeconds":{"type":"integer"}}},"S32":{"type":"structure","required":["Url"],"members":{"Url":{"shape":"S33"},"Name":{},"AccessKey":{"type":"string","sensitive":true}}},"S33":{"type":"string","sensitive":true},"S36":{"type":"structure","members":{"SizeInMBs":{"type":"integer"},"IntervalInSeconds":{"type":"integer"}}},"S39":{"type":"structure","members":{"ContentEncoding":{},"CommonAttributes":{"type":"list","member":{"type":"structure","required":["AttributeName","AttributeValue"],"members":{"AttributeName":{"type":"string","sensitive":true},"AttributeValue":{"type":"string","sensitive":true}}}}}},"S3f":{"type":"structure","members":{"DurationInSeconds":{"type":"integer"}}},"S3i":{"type":"list","member":{"shape":"S3j"}},"S3j":{"type":"structure","required":["Key"],"members":{"Key":{},"Value":{}}},"S3w":{"type":"structure","required":["Type","Details"],"members":{"Type":{},"Details":{}}},"S47":{"type":"structure","required":["RoleARN","BucketARN","BufferingHints","CompressionFormat","EncryptionConfiguration"],"members":{"RoleARN":{},"BucketARN":{},"Prefix":{},"ErrorOutputPrefix":{},"BufferingHints":{"shape":"Se"},"CompressionFormat":{},"EncryptionConfiguration":{"shape":"Si"},"CloudWatchLoggingOptions":{"shape":"Sl"}}},"S4b":{"type":"structure","required":["SubnetIds","RoleARN","SecurityGroupIds","VpcId"],"members":{"SubnetIds":{"shape":"S2f"},"RoleARN":{},"SecurityGroupIds":{"shape":"S2g"},"VpcId":{}}},"S4p":{"type":"structure","required":["Data"],"members":{"Data":{"type":"blob"}}},"S5a":{"type":"structure","members":{"RoleARN":{},"BucketARN":{},"Prefix":{},"ErrorOutputPrefix":{},"BufferingHints":{"shape":"Se"},"CompressionFormat":{},"EncryptionConfiguration":{"shape":"Si"},"CloudWatchLoggingOptions":{"shape":"Sl"}}}}}')},"./node_modules/aws-sdk/apis/firehose-2015-08-04.paginators.json":module=>{"use strict";module.exports={X:{}}},"./node_modules/aws-sdk/apis/sts-2011-06-15.min.json":module=>{"use strict";module.exports=JSON.parse('{"version":"2.0","metadata":{"apiVersion":"2011-06-15","endpointPrefix":"sts","globalEndpoint":"sts.amazonaws.com","protocol":"query","serviceAbbreviation":"AWS STS","serviceFullName":"AWS Security Token Service","serviceId":"STS","signatureVersion":"v4","uid":"sts-2011-06-15","xmlNamespace":"https://sts.amazonaws.com/doc/2011-06-15/"},"operations":{"AssumeRole":{"input":{"type":"structure","required":["RoleArn","RoleSessionName"],"members":{"RoleArn":{},"RoleSessionName":{},"PolicyArns":{"shape":"S4"},"Policy":{},"DurationSeconds":{"type":"integer"},"Tags":{"shape":"S8"},"TransitiveTagKeys":{"type":"list","member":{}},"ExternalId":{},"SerialNumber":{},"TokenCode":{},"SourceIdentity":{}}},"output":{"resultWrapper":"AssumeRoleResult","type":"structure","members":{"Credentials":{"shape":"Si"},"AssumedRoleUser":{"shape":"Sn"},"PackedPolicySize":{"type":"integer"},"SourceIdentity":{}}}},"AssumeRoleWithSAML":{"input":{"type":"structure","required":["RoleArn","PrincipalArn","SAMLAssertion"],"members":{"RoleArn":{},"PrincipalArn":{},"SAMLAssertion":{},"PolicyArns":{"shape":"S4"},"Policy":{},"DurationSeconds":{"type":"integer"}}},"output":{"resultWrapper":"AssumeRoleWithSAMLResult","type":"structure","members":{"Credentials":{"shape":"Si"},"AssumedRoleUser":{"shape":"Sn"},"PackedPolicySize":{"type":"integer"},"Subject":{},"SubjectType":{},"Issuer":{},"Audience":{},"NameQualifier":{},"SourceIdentity":{}}}},"AssumeRoleWithWebIdentity":{"input":{"type":"structure","required":["RoleArn","RoleSessionName","WebIdentityToken"],"members":{"RoleArn":{},"RoleSessionName":{},"WebIdentityToken":{},"ProviderId":{},"PolicyArns":{"shape":"S4"},"Policy":{},"DurationSeconds":{"type":"integer"}}},"output":{"resultWrapper":"AssumeRoleWithWebIdentityResult","type":"structure","members":{"Credentials":{"shape":"Si"},"SubjectFromWebIdentityToken":{},"AssumedRoleUser":{"shape":"Sn"},"PackedPolicySize":{"type":"integer"},"Provider":{},"Audience":{},"SourceIdentity":{}}}},"DecodeAuthorizationMessage":{"input":{"type":"structure","required":["EncodedMessage"],"members":{"EncodedMessage":{}}},"output":{"resultWrapper":"DecodeAuthorizationMessageResult","type":"structure","members":{"DecodedMessage":{}}}},"GetAccessKeyInfo":{"input":{"type":"structure","required":["AccessKeyId"],"members":{"AccessKeyId":{}}},"output":{"resultWrapper":"GetAccessKeyInfoResult","type":"structure","members":{"Account":{}}}},"GetCallerIdentity":{"input":{"type":"structure","members":{}},"output":{"resultWrapper":"GetCallerIdentityResult","type":"structure","members":{"UserId":{},"Account":{},"Arn":{}}}},"GetFederationToken":{"input":{"type":"structure","required":["Name"],"members":{"Name":{},"Policy":{},"PolicyArns":{"shape":"S4"},"DurationSeconds":{"type":"integer"},"Tags":{"shape":"S8"}}},"output":{"resultWrapper":"GetFederationTokenResult","type":"structure","members":{"Credentials":{"shape":"Si"},"FederatedUser":{"type":"structure","required":["FederatedUserId","Arn"],"members":{"FederatedUserId":{},"Arn":{}}},"PackedPolicySize":{"type":"integer"}}}},"GetSessionToken":{"input":{"type":"structure","members":{"DurationSeconds":{"type":"integer"},"SerialNumber":{},"TokenCode":{}}},"output":{"resultWrapper":"GetSessionTokenResult","type":"structure","members":{"Credentials":{"shape":"Si"}}}}},"shapes":{"S4":{"type":"list","member":{"type":"structure","members":{"arn":{}}}},"S8":{"type":"list","member":{"type":"structure","required":["Key","Value"],"members":{"Key":{},"Value":{}}}},"Si":{"type":"structure","required":["AccessKeyId","SecretAccessKey","SessionToken","Expiration"],"members":{"AccessKeyId":{},"SecretAccessKey":{},"SessionToken":{},"Expiration":{"type":"timestamp"}}},"Sn":{"type":"structure","required":["AssumedRoleId","Arn"],"members":{"AssumedRoleId":{},"Arn":{}}}}}')},"./node_modules/aws-sdk/apis/sts-2011-06-15.paginators.json":module=>{"use strict";module.exports={X:{}}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMTA2Ny5lZWMyNjI0NS5pZnJhbWUuYnVuZGxlLmpzIiwibWFwcGluZ3MiOiI7NExBQUEsb0JBQVEsZ0RBQ1IsSUFBSUEsSUFBTSxvQkFBUSxzQ0FDZEMsUUFBVUQsSUFBSUMsUUFDZEMsVUFBWUYsSUFBSUUsVUFFcEJBLFVBQVVDLFNBQTBCLGdCQUFJLENBQUMsRUFDekNILElBQUlJLGdCQUFrQkgsUUFBUUksY0FBYyxrQkFBbUIsQ0FBQyxlQUNoRUMsT0FBT0MsZUFBZUwsVUFBVUMsU0FBMEIsZ0JBQUcsYUFBYyxDQUN6RUssSUFBSyxTQUFTQSxNQUNaLElBQUlDLE1BQVEsb0JBQVEsb0VBRXBCLE9BREFBLE1BQU1DLFdBQWEsaUdBQ1pELEtBQ1QsRUFDQUUsWUFBWSxFQUNaQyxjQUFjLElBR2hCQyxPQUFPQyxRQUFVZCxJQUFJSSxzSENqQnJCLG9CQUFRLGdEQUNSLElBQUlKLElBQU0sb0JBQVEsc0NBQ2RDLFFBQVVELElBQUlDLFFBQ2RDLFVBQVlGLElBQUlFLFVBRXBCQSxVQUFVQyxTQUFtQixTQUFJLENBQUMsRUFDbENILElBQUllLFNBQVdkLFFBQVFJLGNBQWMsV0FBWSxDQUFDLGVBQ2xEQyxPQUFPQyxlQUFlTCxVQUFVQyxTQUFtQixTQUFHLGFBQWMsQ0FDbEVLLElBQUssU0FBU0EsTUFDWixJQUFJQyxNQUFRLG9CQUFRLDREQUVwQixPQURBQSxNQUFNQyxXQUFhLHlGQUNaRCxLQUNULEVBQ0FFLFlBQVksRUFDWkMsY0FBYyxJQUdoQkMsT0FBT0MsUUFBVWQsSUFBSWUsMEdDakJyQixvQkFBUSxnREFDUixJQUFJZixJQUFNLG9CQUFRLHNDQUNkQyxRQUFVRCxJQUFJQyxRQUNkQyxVQUFZRixJQUFJRSxVQUVwQkEsVUFBVUMsU0FBYyxJQUFJLENBQUMsRUFDN0JILElBQUlnQixJQUFNZixRQUFRSSxjQUFjLE1BQU8sQ0FBQyxlQUN4QyxvQkFBUSw4Q0FDUkMsT0FBT0MsZUFBZUwsVUFBVUMsU0FBYyxJQUFHLGFBQWMsQ0FDN0RLLElBQUssU0FBU0EsTUFDWixJQUFJQyxNQUFRLG9CQUFRLHVEQUVwQixPQURBQSxNQUFNQyxXQUFhLG9GQUNaRCxLQUNULEVBQ0FFLFlBQVksRUFDWkMsY0FBYyxJQUdoQkMsT0FBT0MsUUFBVWQsSUFBSWdCLDZGQ2xCckIsSUFBSUMsS0FBTyxvQkFBUSw2Q0FDZkMsSUFBTSxvQkFBUSw0Q0FDZEMsS0FBTyxvQkFBUSw2Q0FDZkMsT0FBUyxvQkFBUSwrQ0FLckJQLE9BQU9DLFFBQW9CLENBQ3ZCTyxXQUFZLFNBQVNBLFdBQVdDLEtBRTlCLEdBQVksU0FEWkEsSUFBTUEsSUFBSUMsZUFFUixPQUFPLElBQUlMLElBQ04sR0FBWSxXQUFSSSxJQUNULE9BQU8sSUFBSUYsT0FDTixHQUFZLFNBQVJFLElBQ1QsT0FBTyxJQUFJSCxLQUdiLE1BQU0sSUFBSUssTUFBTSxrQkFBb0JGLElBQU0sdUNBQzVDLEVBQ0FHLFdBQVksU0FBU0EsV0FBV0gsSUFBS0ksS0FFbkMsR0FBWSxTQURaSixJQUFNQSxJQUFJQyxlQUVSLE9BQU8sSUFBSU4sS0FBS0MsSUFBS1EsS0FDaEIsR0FBWSxXQUFSSixJQUNULE9BQU8sSUFBSUwsS0FBS0csT0FBUU0sS0FDbkIsR0FBWSxTQUFSSixJQUNULE9BQU8sSUFBSUwsS0FBS0UsS0FBTU8sS0FHeEIsTUFBTSxJQUFJRixNQUFNLGtCQUFvQkYsSUFBTSx1Q0FDNUMsRUFDQUssV0FBWSxXQUNWLE1BQU0sSUFBSUgsTUFBTSwrQ0FDbEIsNEZDbkNKLElBQUlJLE9BQVMsOEVBU2Msb0JBQWhCQyxrQkFDdUIsSUFBdkJBLFlBQVlDLFNBRW5CRCxZQUFZQyxPQUFTLFNBQVNDLEtBQzFCLE9BQU9DLFlBQVlDLFFBQVEzQixPQUFPNEIsVUFBVUMsU0FBU0MsS0FBS0wsT0FBUyxDQUN2RSxHQU1KLElBQUlDLFlBQWMsQ0FDZCxxQkFDQSxzQkFDQSw2QkFDQSxzQkFDQSx1QkFDQSxzQkFDQSx1QkFDQSx3QkFDQSx3QkFDQSxxQkErQkpuQixPQUFPQyxRQUFvQixDQUN2QnVCLFlBMUJKLFNBQVNBLFlBQVlDLE1BQ2pCLE1BQW9CLGlCQUFUQSxLQUNnQixJQUFoQkEsS0FBS0MsT0FFVyxJQUFwQkQsS0FBS0UsVUFDaEIsRUFzQklDLGdCQWpCSixTQUFTQSxnQkFBZ0JILE1BS3JCLE1BSm9CLGlCQUFUQSxPQUNQQSxLQUFPLElBQUlWLE9BQU9VLEtBQU0sU0FHeEJULFlBQVlDLE9BQU9RLE1BQ1osSUFBSUksV0FBV0osS0FBS0ssT0FBUUwsS0FBS00sV0FBWU4sS0FBS0UsV0FBYUUsV0FBV0csbUJBRzlFLElBQUlILFdBQVdKLEtBQzFCLHVGQ3hEQSxJQUFJUSxVQUFZLG9CQUFRLGtEQUt4QixTQUFTN0IsS0FBSzhCLFNBQVVDLFFBQ3BCQyxLQUFLQyxLQUFPLElBQUlILFNBQ2hCRSxLQUFLRSxNQUFRLElBQUlKLFNBRWpCLElBQUlLLE1BNkNSLFNBQVNDLGlCQUFpQk4sU0FBVUMsUUFDaEMsSUFBSU0sTUFBUVIsVUFBVUwsZ0JBQWdCTyxRQUN0QyxHQUFJTSxNQUFNZCxXQUFhTyxTQUFTUSxXQUFZLENBQ3hDLElBQUlDLFdBQWEsSUFBSVQsU0FDckJTLFdBQVdDLE9BQU9ILE9BQ2xCQSxNQUFRRSxXQUFXRSxRQUN2QixDQUNBLElBQUlmLE9BQVMsSUFBSUQsV0FBV0ssU0FBU1EsWUFFckMsT0FEQVosT0FBT2dCLElBQUlMLE9BQ0pYLE1BQ1gsQ0F2RGdCVSxDQUFpQk4sU0FBVUMsUUFDbkNHLE1BQVEsSUFBSVQsV0FBV0ssU0FBU1EsWUFDcENKLE1BQU1RLElBQUlQLE9BRVYsSUFBSyxJQUFJUSxFQUFJLEVBQUdBLEVBQUliLFNBQVNRLFdBQVlLLElBQ3JDUixNQUFNUSxJQUFNLEdBQ1pULE1BQU1TLElBQU0sR0FHaEJYLEtBQUtDLEtBQUtPLE9BQU9MLE9BQ2pCSCxLQUFLRSxNQUFNTSxPQUFPTixPQUdsQixJQUFTUyxFQUFJLEVBQUdBLEVBQUlSLE1BQU1aLFdBQVlvQixJQUNsQ1IsTUFBTVEsR0FBSyxDQUVuQixDQUtBL0MsT0FBT0MsUUFBb0JHLEtBRTNCQSxLQUFLaUIsVUFBVXVCLE9BQVMsU0FBVUksUUFDOUIsR0FBSWYsVUFBVVQsWUFBWXdCLFNBQVdaLEtBQUthLE1BQ3RDLE9BQU9iLEtBR1gsSUFDSUEsS0FBS0MsS0FBS08sT0FBT1gsVUFBVUwsZ0JBQWdCb0IsUUFDL0MsQ0FBRSxNQUFPRSxHQUNMZCxLQUFLYSxNQUFRQyxDQUNqQixDQUVBLE9BQU9kLElBQ1gsRUFFQWhDLEtBQUtpQixVQUFVd0IsT0FBUyxTQUFVTSxVQUs5QixPQUpLZixLQUFLRSxNQUFNYyxVQUNaaEIsS0FBS0UsTUFBTU0sT0FBT1IsS0FBS0MsS0FBS1EsVUFHekJULEtBQUtFLE1BQU1PLE9BQU9NLFNBQzdCLHFGQ3BEQSxJQUFJbEIsVUFBWSxvQkFBUSxrREFDcEJsQixPQUFTLDhFQWdCYixTQUFTVixNQUNMK0IsS0FBS2lCLE1BQVEsQ0FDVCxXQUNBLFdBQ0EsV0FDQSxXQUVKakIsS0FBS04sT0FBUyxJQUFJd0IsU0FBUyxJQUFJdEMsWUFyQmxCLEtBc0Jib0IsS0FBS21CLGFBQWUsRUFDcEJuQixLQUFLb0IsWUFBYyxFQUNuQnBCLEtBQUtnQixVQUFXLENBQ3BCLENBc0lBLFNBQVNLLElBQUlDLEVBQUdDLEVBQUdDLEVBQUdDLEVBQUdDLEVBQUdDLEdBRXhCLFFBREFKLEdBQU9BLEVBQUlELEVBQUssYUFBZ0JHLEVBQUlFLEVBQUssWUFBZSxhQUN6Q0QsRUFBTUgsSUFBTyxHQUFLRyxHQUFPRixFQUFLLFVBQ2pELENBRUEsU0FBU0ksR0FBR0wsRUFBR0MsRUFBR0ssRUFBR0MsRUFBR0wsRUFBR0MsRUFBR0MsR0FDMUIsT0FBT04sSUFBS0csRUFBSUssR0FBUUwsRUFBS00sRUFBSVAsRUFBR0MsRUFBR0MsRUFBR0MsRUFBR0MsRUFDakQsQ0FFQSxTQUFTSSxHQUFHUixFQUFHQyxFQUFHSyxFQUFHQyxFQUFHTCxFQUFHQyxFQUFHQyxHQUMxQixPQUFPTixJQUFLRyxFQUFJTSxFQUFNRCxHQUFNQyxFQUFLUCxFQUFHQyxFQUFHQyxFQUFHQyxFQUFHQyxFQUNqRCxDQUVBLFNBQVNLLEdBQUdULEVBQUdDLEVBQUdLLEVBQUdDLEVBQUdMLEVBQUdDLEVBQUdDLEdBQzFCLE9BQU9OLElBQUlHLEVBQUlLLEVBQUlDLEVBQUdQLEVBQUdDLEVBQUdDLEVBQUdDLEVBQUdDLEVBQ3RDLENBRUEsU0FBU00sR0FBR1YsRUFBR0MsRUFBR0ssRUFBR0MsRUFBR0wsRUFBR0MsRUFBR0MsR0FDMUIsT0FBT04sSUFBSVEsR0FBS0wsR0FBTU0sR0FBS1AsRUFBR0MsRUFBR0MsRUFBR0MsRUFBR0MsRUFDM0MsQ0FwSkEvRCxPQUFPQyxRQUFvQkksSUFFM0JBLElBQUlxQyxXQWhDYSxHQWtDakJyQyxJQUFJZ0IsVUFBVXVCLE9BQVMsU0FBVTBCLFlBQzdCLEdBQUlyQyxVQUFVVCxZQUFZOEMsWUFDdEIsT0FBT2xDLEtBQ0osR0FBSUEsS0FBS2dCLFNBQ1osTUFBTSxJQUFJekMsTUFBTSxpREFHcEIsSUFBSWMsS0FBT1EsVUFBVUwsZ0JBQWdCMEMsWUFDakNDLFNBQVcsRUFDWDVDLFdBQWFGLEtBQUtFLFdBRXRCLElBREFTLEtBQUtvQixhQUFlN0IsV0FDYkEsV0FBYSxHQUNoQlMsS0FBS04sT0FBTzBDLFNBQVNwQyxLQUFLbUIsZUFBZ0I5QixLQUFLOEMsYUFDL0M1QyxhQS9DUyxLQWdETFMsS0FBS21CLGVBQ0xuQixLQUFLcUMsYUFDTHJDLEtBQUttQixhQUFlLEdBSTVCLE9BQU9uQixJQUNYLEVBRUEvQixJQUFJZ0IsVUFBVXdCLE9BQVMsU0FBVU0sVUFDN0IsSUFBS2YsS0FBS2dCLFNBQVUsQ0FDaEIsSUFBZXRCLE9BQU5NLEtBQWtCTixPQUFRNEMsa0JBQTFCdEMsS0FBaURtQixhQUN0RG9CLFdBQTJCLEVBRHRCdkMsS0FBZ0ZvQixZQUl6RixHQUZBMUIsT0FBTzBDLFNBQVNwQyxLQUFLbUIsZUFBZ0IsS0FFakNtQixrQkEvREssSUErRDZCaEMsR0FBZ0IsQ0FDbEQsSUFBSyxJQUFJSyxFQUFJWCxLQUFLbUIsYUFBY1IsRUFoRTNCLEdBZ0UyQ0EsSUFDNUNqQixPQUFPMEMsU0FBU3pCLEVBQUcsR0FFdkJYLEtBQUtxQyxhQUNMckMsS0FBS21CLGFBQWUsQ0FDeEIsQ0FDQSxJQUFTUixFQUFJWCxLQUFLbUIsYUFBY1IsRUFBSUwsR0FBZ0JLLElBQ2hEakIsT0FBTzBDLFNBQVN6QixFQUFHLEdBRXZCakIsT0FBTzhDLFVBQVVsQyxHQUFnQmlDLGFBQWUsR0FBRyxHQUNuRDdDLE9BQU84QyxVQUFVbEMsR0FBZ0JtQyxLQUFLQyxNQUFNSCxXQUFhLGFBQWMsR0FDdkV2QyxLQUFLcUMsYUFDTHJDLEtBQUtnQixVQUFXLENBQ3BCLENBQ0EsSUFBSTJCLElBQU0sSUFBSXpCLFNBQVMsSUFBSXRDLFlBNUVYLEtBNkVoQixJQUFTK0IsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLElBQ25CZ0MsSUFBSUgsVUFBYyxFQUFKN0IsRUFBT1gsS0FBS2lCLE1BQU1OLElBQUksR0FFeEMsSUFBSWlDLEtBQU8sSUFBSWpFLE9BQU9nRSxJQUFJakQsT0FBUWlELElBQUloRCxXQUFZZ0QsSUFBSXBELFlBQ3RELE9BQU93QixTQUFXNkIsS0FBSzFELFNBQVM2QixVQUFZNkIsSUFDaEQsRUFFQTNFLElBQUlnQixVQUFVb0QsV0FBYSxXQUN2QixJQUFlM0MsT0FBTk0sS0FBa0JOLE9BQVF1QixNQUExQmpCLEtBQXFDaUIsTUFDMUNNLEVBQUlOLE1BQU0sR0FBSU8sRUFBSVAsTUFBTSxHQUFJWSxFQUFJWixNQUFNLEdBQUlhLEVBQUliLE1BQU0sR0FDeERNLEVBQUlLLEdBQUdMLEVBQUdDLEVBQUdLLEVBQUdDLEVBQUdwQyxPQUFPbUQsVUFBVSxHQUFHLEdBQU8sRUFBRyxZQUNqRGYsRUFBSUYsR0FBR0UsRUFBR1AsRUFBR0MsRUFBR0ssRUFBR25DLE9BQU9tRCxVQUFVLEdBQUcsR0FBTyxHQUFJLFlBQ2xEaEIsRUFBSUQsR0FBR0MsRUFBR0MsRUFBR1AsRUFBR0MsRUFBRzlCLE9BQU9tRCxVQUFVLEdBQUcsR0FBTyxHQUFJLFdBQ2xEckIsRUFBSUksR0FBR0osRUFBR0ssRUFBR0MsRUFBR1AsRUFBRzdCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EdEIsRUFBSUssR0FBR0wsRUFBR0MsRUFBR0ssRUFBR0MsRUFBR3BDLE9BQU9tRCxVQUFVLElBQUksR0FBTyxFQUFHLFlBQ2xEZixFQUFJRixHQUFHRSxFQUFHUCxFQUFHQyxFQUFHSyxFQUFHbkMsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksWUFDbkRoQixFQUFJRCxHQUFHQyxFQUFHQyxFQUFHUCxFQUFHQyxFQUFHOUIsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksWUFDbkRyQixFQUFJSSxHQUFHSixFQUFHSyxFQUFHQyxFQUFHUCxFQUFHN0IsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksWUFDbkR0QixFQUFJSyxHQUFHTCxFQUFHQyxFQUFHSyxFQUFHQyxFQUFHcEMsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEVBQUcsWUFDbERmLEVBQUlGLEdBQUdFLEVBQUdQLEVBQUdDLEVBQUdLLEVBQUduQyxPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRGhCLEVBQUlELEdBQUdDLEVBQUdDLEVBQUdQLEVBQUdDLEVBQUc5QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRHJCLEVBQUlJLEdBQUdKLEVBQUdLLEVBQUdDLEVBQUdQLEVBQUc3QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRHRCLEVBQUlLLEdBQUdMLEVBQUdDLEVBQUdLLEVBQUdDLEVBQUdwQyxPQUFPbUQsVUFBVSxJQUFJLEdBQU8sRUFBRyxZQUNsRGYsRUFBSUYsR0FBR0UsRUFBR1AsRUFBR0MsRUFBR0ssRUFBR25DLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EaEIsRUFBSUQsR0FBR0MsRUFBR0MsRUFBR1AsRUFBR0MsRUFBRzlCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBRW5EdEIsRUFBSVEsR0FBR1IsRUFEUEMsRUFBSUksR0FBR0osRUFBR0ssRUFBR0MsRUFBR1AsRUFBRzdCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ3RDaEIsRUFBR0MsRUFBR3BDLE9BQU9tRCxVQUFVLEdBQUcsR0FBTyxFQUFHLFlBQ2pEZixFQUFJQyxHQUFHRCxFQUFHUCxFQUFHQyxFQUFHSyxFQUFHbkMsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEVBQUcsWUFDbERoQixFQUFJRSxHQUFHRixFQUFHQyxFQUFHUCxFQUFHQyxFQUFHOUIsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksV0FDbkRyQixFQUFJTyxHQUFHUCxFQUFHSyxFQUFHQyxFQUFHUCxFQUFHN0IsT0FBT21ELFVBQVUsR0FBRyxHQUFPLEdBQUksWUFDbER0QixFQUFJUSxHQUFHUixFQUFHQyxFQUFHSyxFQUFHQyxFQUFHcEMsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEVBQUcsWUFDbERmLEVBQUlDLEdBQUdELEVBQUdQLEVBQUdDLEVBQUdLLEVBQUduQyxPQUFPbUQsVUFBVSxJQUFJLEdBQU8sRUFBRyxVQUNsRGhCLEVBQUlFLEdBQUdGLEVBQUdDLEVBQUdQLEVBQUdDLEVBQUc5QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRHJCLEVBQUlPLEdBQUdQLEVBQUdLLEVBQUdDLEVBQUdQLEVBQUc3QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRHRCLEVBQUlRLEdBQUdSLEVBQUdDLEVBQUdLLEVBQUdDLEVBQUdwQyxPQUFPbUQsVUFBVSxJQUFJLEdBQU8sRUFBRyxXQUNsRGYsRUFBSUMsR0FBR0QsRUFBR1AsRUFBR0MsRUFBR0ssRUFBR25DLE9BQU9tRCxVQUFVLElBQUksR0FBTyxFQUFHLFlBQ2xEaEIsRUFBSUUsR0FBR0YsRUFBR0MsRUFBR1AsRUFBR0MsRUFBRzlCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EckIsRUFBSU8sR0FBR1AsRUFBR0ssRUFBR0MsRUFBR1AsRUFBRzdCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EdEIsRUFBSVEsR0FBR1IsRUFBR0MsRUFBR0ssRUFBR0MsRUFBR3BDLE9BQU9tRCxVQUFVLElBQUksR0FBTyxFQUFHLFlBQ2xEZixFQUFJQyxHQUFHRCxFQUFHUCxFQUFHQyxFQUFHSyxFQUFHbkMsT0FBT21ELFVBQVUsR0FBRyxHQUFPLEVBQUcsWUFDakRoQixFQUFJRSxHQUFHRixFQUFHQyxFQUFHUCxFQUFHQyxFQUFHOUIsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksWUFFbkR0QixFQUFJUyxHQUFHVCxFQURQQyxFQUFJTyxHQUFHUCxFQUFHSyxFQUFHQyxFQUFHUCxFQUFHN0IsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksWUFDdENoQixFQUFHQyxFQUFHcEMsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEVBQUcsWUFDbERmLEVBQUlFLEdBQUdGLEVBQUdQLEVBQUdDLEVBQUdLLEVBQUduQyxPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRGhCLEVBQUlHLEdBQUdILEVBQUdDLEVBQUdQLEVBQUdDLEVBQUc5QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRHJCLEVBQUlRLEdBQUdSLEVBQUdLLEVBQUdDLEVBQUdQLEVBQUc3QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRHRCLEVBQUlTLEdBQUdULEVBQUdDLEVBQUdLLEVBQUdDLEVBQUdwQyxPQUFPbUQsVUFBVSxHQUFHLEdBQU8sRUFBRyxZQUNqRGYsRUFBSUUsR0FBR0YsRUFBR1AsRUFBR0MsRUFBR0ssRUFBR25DLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EaEIsRUFBSUcsR0FBR0gsRUFBR0MsRUFBR1AsRUFBR0MsRUFBRzlCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EckIsRUFBSVEsR0FBR1IsRUFBR0ssRUFBR0MsRUFBR1AsRUFBRzdCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EdEIsRUFBSVMsR0FBR1QsRUFBR0MsRUFBR0ssRUFBR0MsRUFBR3BDLE9BQU9tRCxVQUFVLElBQUksR0FBTyxFQUFHLFdBQ2xEZixFQUFJRSxHQUFHRixFQUFHUCxFQUFHQyxFQUFHSyxFQUFHbkMsT0FBT21ELFVBQVUsR0FBRyxHQUFPLEdBQUksWUFDbERoQixFQUFJRyxHQUFHSCxFQUFHQyxFQUFHUCxFQUFHQyxFQUFHOUIsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksWUFDbkRyQixFQUFJUSxHQUFHUixFQUFHSyxFQUFHQyxFQUFHUCxFQUFHN0IsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksVUFDbkR0QixFQUFJUyxHQUFHVCxFQUFHQyxFQUFHSyxFQUFHQyxFQUFHcEMsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEVBQUcsWUFDbERmLEVBQUlFLEdBQUdGLEVBQUdQLEVBQUdDLEVBQUdLLEVBQUduQyxPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRGhCLEVBQUlHLEdBQUdILEVBQUdDLEVBQUdQLEVBQUdDLEVBQUc5QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxXQUVuRHRCLEVBQUlVLEdBQUdWLEVBRFBDLEVBQUlRLEdBQUdSLEVBQUdLLEVBQUdDLEVBQUdQLEVBQUc3QixPQUFPbUQsVUFBVSxHQUFHLEdBQU8sR0FBSSxZQUNyQ2hCLEVBQUdDLEVBQUdwQyxPQUFPbUQsVUFBVSxHQUFHLEdBQU8sRUFBRyxZQUNqRGYsRUFBSUcsR0FBR0gsRUFBR1AsRUFBR0MsRUFBR0ssRUFBR25DLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EaEIsRUFBSUksR0FBR0osRUFBR0MsRUFBR1AsRUFBR0MsRUFBRzlCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EckIsRUFBSVMsR0FBR1QsRUFBR0ssRUFBR0MsRUFBR1AsRUFBRzdCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EdEIsRUFBSVUsR0FBR1YsRUFBR0MsRUFBR0ssRUFBR0MsRUFBR3BDLE9BQU9tRCxVQUFVLElBQUksR0FBTyxFQUFHLFlBQ2xEZixFQUFJRyxHQUFHSCxFQUFHUCxFQUFHQyxFQUFHSyxFQUFHbkMsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksWUFDbkRoQixFQUFJSSxHQUFHSixFQUFHQyxFQUFHUCxFQUFHQyxFQUFHOUIsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEdBQUksWUFDbkRyQixFQUFJUyxHQUFHVCxFQUFHSyxFQUFHQyxFQUFHUCxFQUFHN0IsT0FBT21ELFVBQVUsR0FBRyxHQUFPLEdBQUksWUFDbER0QixFQUFJVSxHQUFHVixFQUFHQyxFQUFHSyxFQUFHQyxFQUFHcEMsT0FBT21ELFVBQVUsSUFBSSxHQUFPLEVBQUcsWUFDbERmLEVBQUlHLEdBQUdILEVBQUdQLEVBQUdDLEVBQUdLLEVBQUduQyxPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRGhCLEVBQUlJLEdBQUdKLEVBQUdDLEVBQUdQLEVBQUdDLEVBQUc5QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRHJCLEVBQUlTLEdBQUdULEVBQUdLLEVBQUdDLEVBQUdQLEVBQUc3QixPQUFPbUQsVUFBVSxJQUFJLEdBQU8sR0FBSSxZQUNuRHRCLEVBQUlVLEdBQUdWLEVBQUdDLEVBQUdLLEVBQUdDLEVBQUdwQyxPQUFPbUQsVUFBVSxJQUFJLEdBQU8sRUFBRyxZQUNsRGYsRUFBSUcsR0FBR0gsRUFBR1AsRUFBR0MsRUFBR0ssRUFBR25DLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25EaEIsRUFBSUksR0FBR0osRUFBR0MsRUFBR1AsRUFBR0MsRUFBRzlCLE9BQU9tRCxVQUFVLEdBQUcsR0FBTyxHQUFJLFdBQ2xEckIsRUFBSVMsR0FBR1QsRUFBR0ssRUFBR0MsRUFBR1AsRUFBRzdCLE9BQU9tRCxVQUFVLElBQUksR0FBTyxHQUFJLFlBQ25ENUIsTUFBTSxHQUFNTSxFQUFJTixNQUFNLEdBQU0sV0FDNUJBLE1BQU0sR0FBTU8sRUFBSVAsTUFBTSxHQUFNLFdBQzVCQSxNQUFNLEdBQU1ZLEVBQUlaLE1BQU0sR0FBTSxXQUM1QkEsTUFBTSxHQUFNYSxFQUFJYixNQUFNLEdBQU0sVUFDaEMsc0ZDaEtBLElBQUl0QyxPQUFTLDhFQUNUa0IsVUFBWSxvQkFBUSxrREFNZCxJQUFJaUQsWUFBWSxDQUN0QixXQUNBLFlBQ0EsWUFDQSxZQWNzQkwsS0FBS00sSUFBSSxFQUFHLElBS3RDLFNBQVM3RSxPQUNMOEIsS0FBS2dELEdBQUssV0FDVmhELEtBQUtpRCxHQUFLLFdBQ1ZqRCxLQUFLa0QsR0FBSyxXQUNWbEQsS0FBS21ELEdBQUssVUFDVm5ELEtBQUtvRCxHQUFLLFdBRVZwRCxLQUFLcUQsTUFBUSxJQUFJUCxZQUFZLElBQzdCOUMsS0FBS3NELE9BQVMsRUFDZHRELEtBQUt1RCxNQUFRLEdBQ2J2RCxLQUFLd0QsWUFBYyxDQUN2QixDQUtBNUYsT0FBT0MsUUFBb0JLLEtBRTNCQSxLQUFLb0MsV0E3Q1ksR0ErQ2pCcEMsS0FBS2UsVUFBVXVCLE9BQVMsU0FBVW5CLE1BQzlCLEdBQUlXLEtBQUtnQixTQUNMLE1BQU0sSUFBSXpDLE1BQU0saURBR3BCLEdBQUlzQixVQUFVVCxZQUFZQyxNQUN0QixPQUFPVyxLQUtYLElBQUlWLFFBRkpELEtBQU9RLFVBQVVMLGdCQUFnQkgsT0FFZkMsT0FDbEJVLEtBQUt3RCxhQUF3QixFQUFUbEUsT0FDcEIsSUFBSyxJQUFJcUIsRUFBSSxFQUFHQSxFQUFJckIsT0FBUXFCLElBQ3hCWCxLQUFLeUQsTUFBTXBFLEtBQUtzQixJQUdwQixPQUFPWCxJQUNYLEVBRUE5QixLQUFLZSxVQUFVd0UsTUFBUSxTQUFTQSxNQUFNQyxNQUNsQzFELEtBQUtxRCxNQUFNckQsS0FBS3NELFVBQW1CLElBQVBJLE9BQWdCMUQsS0FBS3VELE1BQzdDdkQsS0FBS3VELE1BQ0x2RCxLQUFLdUQsT0FBUyxHQUVkdkQsS0FBS3NELFNBQ0x0RCxLQUFLdUQsTUFBUSxJQUdHLEtBQWhCdkQsS0FBS3NELFFBQWV0RCxLQUFLMkQsY0FDakMsRUFFQXpGLEtBQUtlLFVBQVV3QixPQUFTLFNBQVVNLFVBRTlCZixLQUFLeUQsTUFBTSxNQUNQekQsS0FBS3NELE9BQVMsSUFBdUIsS0FBaEJ0RCxLQUFLc0QsUUFBaUJ0RCxLQUFLdUQsTUFBUSxLQUMxRHZELEtBQUsyRCxlQUVQM0QsS0FBS3NELE9BQVMsR0FDZHRELEtBQUt1RCxNQUFRLEdBR2J2RCxLQUFLeUQsTUFBTSxHQUNYekQsS0FBS3lELE1BQU0sR0FDWHpELEtBQUt5RCxNQUFNekQsS0FBS3dELFlBQWMsYUFBZXhELEtBQUt3RCxZQUFjLGNBQWdCLEdBQ2hGeEQsS0FBS3lELE1BQU16RCxLQUFLd0QsWUFBYyxXQUFheEQsS0FBS3dELFlBQWMsV0FBYyxHQUM1RSxJQUFLLElBQUk5QixFQUFJLEdBQUlBLEdBQUssRUFBR0EsR0FBSyxFQUMxQjFCLEtBQUt5RCxNQUFNekQsS0FBS3dELGFBQWU5QixHQUluQyxJQUFJaUIsSUFBTSxJQUFJaEUsT0FoR0UsSUFpR1ppRixRQUFVLElBQUkxQyxTQUFTeUIsSUFBSWpELFFBTy9CLE9BTkFrRSxRQUFRcEIsVUFBVSxFQUFHeEMsS0FBS2dELElBQUksR0FDOUJZLFFBQVFwQixVQUFVLEVBQUd4QyxLQUFLaUQsSUFBSSxHQUM5QlcsUUFBUXBCLFVBQVUsRUFBR3hDLEtBQUtrRCxJQUFJLEdBQzlCVSxRQUFRcEIsVUFBVSxHQUFJeEMsS0FBS21ELElBQUksR0FDL0JTLFFBQVFwQixVQUFVLEdBQUl4QyxLQUFLb0QsSUFBSSxHQUV4QnJDLFNBQVc0QixJQUFJekQsU0FBUzZCLFVBQVk0QixHQUMvQyxFQUVBekUsS0FBS2UsVUFBVTBFLGFBQWUsU0FBU0EsZUFFbkMsSUFBSyxJQUFJaEQsRUFBSSxHQUFJQSxFQUFJLEdBQUlBLElBQUssQ0FDNUIsSUFBSWtELEVBQUk3RCxLQUFLcUQsTUFBTTFDLEVBQUksR0FBS1gsS0FBS3FELE1BQU0xQyxFQUFJLEdBQUtYLEtBQUtxRCxNQUFNMUMsRUFBSSxJQUFNWCxLQUFLcUQsTUFBTTFDLEVBQUksSUFDcEZYLEtBQUtxRCxNQUFNMUMsR0FBTWtELEdBQUssRUFBTUEsSUFBTSxFQUNwQyxDQUdBLElBS0lDLEVBQUdDLEVBTEh4QyxFQUFJdkIsS0FBS2dELEdBQ1R4QixFQUFJeEIsS0FBS2lELEdBQ1RwQixFQUFJN0IsS0FBS2tELEdBQ1RwQixFQUFJOUIsS0FBS21ELEdBQ1RyQyxFQUFJZCxLQUFLb0QsR0FJYixJQUFLekMsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQUssQ0FDbkJBLEVBQUksSUFDTm1ELEVBQUloQyxFQUFLTixHQUFLSyxFQUFJQyxHQUNsQmlDLEVBQUksWUFFR3BELEVBQUksSUFDWG1ELEVBQUl0QyxFQUFJSyxFQUFJQyxFQUNaaUMsRUFBSSxZQUVHcEQsRUFBSSxJQUNYbUQsRUFBS3RDLEVBQUlLLEVBQU1DLEdBQUtOLEVBQUlLLEdBQ3hCa0MsRUFBSSxhQUdKRCxFQUFJdEMsRUFBSUssRUFBSUMsRUFDWmlDLEVBQUksWUFFTixJQUFJQyxNQUFRekMsR0FBSyxFQUFJQSxJQUFNLElBQU11QyxFQUFJaEQsRUFBSWlELEdBQW1CLEVBQWQvRCxLQUFLcUQsTUFBTTFDLElBQ3pERyxFQUFJZ0IsRUFDSkEsRUFBSUQsRUFDSkEsRUFBS0wsR0FBSyxHQUFLQSxJQUFNLEVBQ3JCQSxFQUFJRCxFQUNKQSxFQUFJeUMsSUFDTixDQVdBLElBUkFoRSxLQUFLZ0QsR0FBTWhELEtBQUtnRCxHQUFLekIsRUFBSyxFQUMxQnZCLEtBQUtpRCxHQUFNakQsS0FBS2lELEdBQUt6QixFQUFLLEVBQzFCeEIsS0FBS2tELEdBQU1sRCxLQUFLa0QsR0FBS3JCLEVBQUssRUFDMUI3QixLQUFLbUQsR0FBTW5ELEtBQUttRCxHQUFLckIsRUFBSyxFQUMxQjlCLEtBQUtvRCxHQUFNcEQsS0FBS29ELEdBQUt0QyxFQUFLLEVBRzFCZCxLQUFLc0QsT0FBUyxFQUNUM0MsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ2hCWCxLQUFLcUQsTUFBTTFDLEdBQUssQ0FFeEIsd0ZDcktBLElBQUloQyxPQUFTLDhFQUNUa0IsVUFBWSxvQkFBUSxrREFNcEJvRSxJQUFNLElBQUluQixZQUFZLENBQ3RCLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFVBQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFVBQ0EsVUFDQSxVQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLGFBY0FvQixvQkFBc0J6QixLQUFLTSxJQUFJLEVBQUcsSUFBTSxFQUs1QyxTQUFTNUUsU0FDTDZCLEtBQUtpQixNQUFRLENBQ1QsV0FDQSxXQUNBLFdBQ0EsV0FDQSxXQUNBLFdBQ0EsVUFDQSxZQUVKakIsS0FBS2dFLEtBQU8sSUFBSUcsV0FBVyxJQUMzQm5FLEtBQUtOLE9BQVMsSUFBSUQsV0FBVyxJQUM3Qk8sS0FBS21CLGFBQWUsRUFDcEJuQixLQUFLb0IsWUFBYyxFQUluQnBCLEtBQUtnQixVQUFXLENBQ3BCLENBS0FwRCxPQUFPQyxRQUFvQk0sT0FFM0JBLE9BQU9tQyxXQWpIVSxHQW1IakJuQyxPQUFPYyxVQUFVdUIsT0FBUyxTQUFVbkIsTUFDaEMsR0FBSVcsS0FBS2dCLFNBQ0wsTUFBTSxJQUFJekMsTUFBTSxpREFHcEIsR0FBSXNCLFVBQVVULFlBQVlDLE1BQ3RCLE9BQU9XLEtBS1gsSUFBSW1DLFNBQVcsRUFDWDVDLFlBSEpGLEtBQU9RLFVBQVVMLGdCQUFnQkgsT0FHWEUsV0FFdEIsR0FEQVMsS0FBS29CLGFBQWU3QixXQUNHLEVBQW5CUyxLQUFLb0IsWUFBa0I4QyxvQkFDdkIsTUFBTSxJQUFJM0YsTUFBTSx1Q0FHcEIsS0FBT2dCLFdBQWEsR0FDaEJTLEtBQUtOLE9BQU9NLEtBQUttQixnQkFBa0I5QixLQUFLOEMsWUFDeEM1QyxhQXZJUyxLQXdJTFMsS0FBS21CLGVBQ0xuQixLQUFLcUMsYUFDTHJDLEtBQUttQixhQUFlLEdBSTVCLE9BQU9uQixJQUNYLEVBRUE3QixPQUFPYyxVQUFVd0IsT0FBUyxTQUFVTSxVQUNoQyxJQUFLZixLQUFLZ0IsU0FBVSxDQUNoQixJQUFJdUIsV0FBZ0MsRUFBbkJ2QyxLQUFLb0IsWUFDbEJnRCxXQUFhLElBQUlsRCxTQUFTbEIsS0FBS04sT0FBT0EsT0FBUU0sS0FBS04sT0FBT0MsV0FBWUssS0FBS04sT0FBT0gsWUFDbEYrQyxrQkFBb0J0QyxLQUFLbUIsYUFHN0IsR0FGQWlELFdBQVdoQyxTQUFTcEMsS0FBS21CLGVBQWdCLEtBRXJDbUIsa0JBeEpLLElBd0o2QmhDLEdBQWdCLENBQ2xELElBQUssSUFBSUssRUFBSVgsS0FBS21CLGFBQWNSLEVBekozQixHQXlKMkNBLElBQzVDeUQsV0FBV2hDLFNBQVN6QixFQUFHLEdBRTNCWCxLQUFLcUMsYUFDTHJDLEtBQUttQixhQUFlLENBQ3hCLENBQ0EsSUFBU1IsRUFBSVgsS0FBS21CLGFBQWNSLEVBQUlMLEdBQWdCSyxJQUNoRHlELFdBQVdoQyxTQUFTekIsRUFBRyxHQUUzQnlELFdBQVc1QixVQUFVbEMsR0FBZ0JtQyxLQUFLQyxNQUFNSCxXQUFhLGFBQWMsR0FDM0U2QixXQUFXNUIsVUFBVWxDLEdBQWdCaUMsWUFDckN2QyxLQUFLcUMsYUFDTHJDLEtBQUtnQixVQUFXLENBQ3BCLENBR0EsSUFBSTJCLElBQU0sSUFBSWhFLE9BdktFLElBd0toQixJQUFTZ0MsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLElBQ25CZ0MsSUFBUSxFQUFKaEMsR0FBVVgsS0FBS2lCLE1BQU1OLEtBQU8sR0FBTSxJQUN0Q2dDLElBQVEsRUFBSmhDLEVBQVEsR0FBTVgsS0FBS2lCLE1BQU1OLEtBQU8sR0FBTSxJQUMxQ2dDLElBQVEsRUFBSmhDLEVBQVEsR0FBTVgsS0FBS2lCLE1BQU1OLEtBQU8sRUFBSyxJQUN6Q2dDLElBQVEsRUFBSmhDLEVBQVEsR0FBTVgsS0FBS2lCLE1BQU1OLEtBQU8sRUFBSyxJQUU3QyxPQUFPSSxTQUFXNEIsSUFBSXpELFNBQVM2QixVQUFZNEIsR0FDL0MsRUFFQXhFLE9BQU9jLFVBQVVvRCxXQUFhLFdBWTFCLElBWEEsSUFDSTNDLE9BREtNLEtBQ09OLE9BQ1p1QixNQUZLakIsS0FFTWlCLE1BQ1hvRCxPQUFTcEQsTUFBTSxHQUNmcUQsT0FBU3JELE1BQU0sR0FDZnNELE9BQVN0RCxNQUFNLEdBQ2Z1RCxPQUFTdkQsTUFBTSxHQUNmd0QsT0FBU3hELE1BQU0sR0FDZnlELE9BQVN6RCxNQUFNLEdBQ2YwRCxPQUFTMUQsTUFBTSxHQUNmMkQsT0FBUzNELE1BQU0sR0FDVk4sRUFBSSxFQUFHQSxFQS9MSCxHQStMbUJBLElBQUssQ0FDakMsR0FBSUEsRUFBSSxHQUNKWCxLQUFLZ0UsS0FBS3JELElBQXdCLElBQWhCakIsT0FBVyxFQUFKaUIsS0FBa0IsSUFDZixJQUF0QmpCLE9BQVksRUFBSmlCLEVBQVMsS0FBYyxJQUNULElBQXRCakIsT0FBWSxFQUFKaUIsRUFBUyxLQUFjLEVBQ1YsSUFBdEJqQixPQUFZLEVBQUppQixFQUFTLE9BRXJCLENBQ0QsSUFBSWtFLEVBQUk3RSxLQUFLZ0UsS0FBS3JELEVBQUksR0FDbEJtRSxNQUFRRCxJQUFNLEdBQUtBLEdBQUssS0FDdkJBLElBQU0sR0FBS0EsR0FBSyxJQUNoQkEsSUFBTSxHQUVQRSxPQURKRixFQUFJN0UsS0FBS2dFLEtBQUtyRCxFQUFJLE9BQ0EsRUFBSWtFLEdBQUssS0FDdEJBLElBQU0sR0FBS0EsR0FBSyxJQUNoQkEsSUFBTSxFQUNYN0UsS0FBS2dFLEtBQUtyRCxJQUFNbUUsS0FBTzlFLEtBQUtnRSxLQUFLckQsRUFBSSxHQUFLLElBQ3JDb0UsS0FBTy9FLEtBQUtnRSxLQUFLckQsRUFBSSxJQUFNLEVBQ3BDLENBQ0EsSUFBSXFFLE1BQVVQLFNBQVcsRUFBSUEsUUFBVSxLQUNsQ0EsU0FBVyxHQUFLQSxRQUFVLEtBQzFCQSxTQUFXLEdBQUtBLFFBQVUsS0FDdkJBLE9BQVNDLFFBQVlELE9BQVNFLFFBQVksSUFDMUNDLFFBQVdYLElBQUl0RCxHQUFLWCxLQUFLZ0UsS0FBS3JELEdBQU0sR0FBTSxHQUFNLEVBQ3BEc0UsS0FBUVosU0FBVyxFQUFJQSxRQUFVLEtBQ2hDQSxTQUFXLEdBQUtBLFFBQVUsS0FDMUJBLFNBQVcsR0FBS0EsUUFBVSxNQUFTQSxPQUFTQyxPQUFXRCxPQUFTRSxPQUFXRCxPQUFTQyxRQUFZLEVBQ3JHSyxPQUFTRCxPQUNUQSxPQUFTRCxPQUNUQSxPQUFTRCxPQUNUQSxPQUFVRCxPQUFTUSxHQUFNLEVBQ3pCUixPQUFTRCxPQUNUQSxPQUFTRCxPQUNUQSxPQUFTRCxPQUNUQSxPQUFVVyxHQUFLQyxHQUFNLENBQ3pCLENBQ0FoRSxNQUFNLElBQU1vRCxPQUNacEQsTUFBTSxJQUFNcUQsT0FDWnJELE1BQU0sSUFBTXNELE9BQ1p0RCxNQUFNLElBQU11RCxPQUNadkQsTUFBTSxJQUFNd0QsT0FDWnhELE1BQU0sSUFBTXlELE9BQ1p6RCxNQUFNLElBQU0wRCxPQUNaMUQsTUFBTSxJQUFNMkQsTUFDaEIsMEdDOU9BLElBQUlNLEtBQU8sb0JBQVEsc0NBR25CQSxLQUFLQyxPQUFPQyxJQUFNLG9CQUFRLGtEQUMxQkYsS0FBS3ZHLE9BQVMsOEVBQ2R1RyxLQUFLRyxJQUFNLG9CQUFRLDZCQUNuQkgsS0FBS0ksWUFBYyxvQkFBUSx1Q0FDM0JKLEtBQUtLLFVBQVksb0JBQVEsd0RBQ3pCTCxLQUFLTSxZQUFjLEtBQ25CTixLQUFLTyxrQkFBb0IsaUhBQ3pCUCxLQUFLUSxVQUFZLFdBQWEsT0FBTyxDQUFNLEVBQzNDUixLQUFLUyxPQUFTLFdBQWEsT0FBTyxDQUFPLEVBRXpDLElBQUk1SSxJQUFNLG9CQUFRLHNDQXFCbEIsR0FoQkFhLE9BQU9DLFFBQVVkLElBRWpCLG9CQUFRLDZDQUNSLG9CQUFRLHVFQUNSLG9CQUFRLG1FQUNSLG9CQUFRLDZFQUNSLG9CQUFRLHNFQUNSLG9CQUFRLDBFQUNSLG9CQUFRLDhEQUdSQSxJQUFJNkksSUFBSUMsT0FBUyxvQkFBUSxvREFHekIsb0JBQVEsK0NBRWUsSUFBWkMsUUFDVCxJQUFJQSxRQUFVLENBQ1pDLFNBQVMsMExDcENUaEosSUFBTSxvQkFBUSxzQ0FJbEIsU0FBU2lKLG1DQUFtQ0MsWUFBYUMsY0FDdkQsR0FBMkIsaUJBQWhCRCxZQUFYLENBQ0ssR0FBSSxDQUFDLFNBQVUsWUFBWWpILFFBQVFpSCxZQUFZM0gsZ0JBQWtCLEVBQ3BFLE9BQU8ySCxZQUFZM0gsY0FFbkIsTUFBTXZCLElBQUltSSxLQUFLckUsTUFBTSxJQUFJdEMsTUFBUzJILGFBQ3BDLENBQ0YsQ0F1REF0SSxPQUFPQyxRQXpDUCxTQUFTc0ksNkJBQTZCQyxlQUFnQkMsU0FHcEQsSUFBSUMsU0FDSixJQUhBRixlQUFpQkEsZ0JBQWtCLENBQUMsR0FHakJDLFFBQVFFLGdCQUN6QkQsU0FBV04sbUNBQW1DSSxlQUFlQyxRQUFRRSxjQUFlLENBQ2xGQyxLQUFNLHVCQUNOQyxRQUFTLFlBQWNKLFFBQVFFLGFBQXRCLHlEQUNpQkgsZUFBZUMsUUFBUUUsY0FBZ0IsUUFFckQsT0FBT0QsU0FFdkIsSUFBS3ZKLElBQUltSSxLQUFLUyxTQUFVLE9BQU9XLFNBRS9CLEdBQUlqSixPQUFPNEIsVUFBVXlILGVBQWV2SCxLQUFLMkcsUUFBUWEsSUFBS04sUUFBUU0sT0FFNURMLFNBQVdOLG1DQURHRixRQUFRYSxJQUFJTixRQUFRTSxLQUNxQixDQUNyREgsS0FBTSwrQkFDTkMsUUFBUyxXQUFhSixRQUFRTSxJQUFyQixpRUFDaUJiLFFBQVFhLElBQUlOLFFBQVFNLEtBQU8sUUFFekMsT0FBT0wsU0FHdkIsSUFBSU0sUUFBVSxDQUFDLEVBQ2YsSUFFRUEsUUFEZTdKLElBQUltSSxLQUFLMkIsNEJBQTRCOUosSUFBSW1JLEtBQUs0QixXQUMxQ2hCLFFBQVFhLElBQUlJLGFBQWVoSyxJQUFJbUksS0FBSzhCLGVBQ3pELENBQUUsTUFBT2xHLEdBQUksQ0FDYixPQUFJOEYsU0FBV3ZKLE9BQU80QixVQUFVeUgsZUFBZXZILEtBQUt5SCxRQUFTUCxRQUFRWSxnQkFFbkVYLFNBQVdOLG1DQURJWSxRQUFRUCxRQUFRWSxjQUN5QixDQUN0RFQsS0FBTSx1QkFDTkMsUUFBUyxXQUFhSixRQUFRWSxhQUFyQix5REFDaUJMLFFBQVFQLFFBQVFZLGNBQWdCLFFBRXZDWCxRQUd6Qix3SkNoRUEsSUFBSXZKLElBQU0sb0JBQVEsc0NBQ2RnQixJQUFNLG9CQUFRLHlDQXNFbEJoQixJQUFJbUssOEJBQWdDbkssSUFBSW1JLEtBQUtpQyxRQUFRcEssSUFBSXFLLFlBQWEsQ0E2QnBFQyxZQUFhLFNBQVNILDhCQUE4QmIsU0FDbER0SixJQUFJcUssWUFBWWpJLEtBQUthLE1BQ3JCcUcsUUFBVUEsU0FBVyxDQUFDLEVBQ3RCckcsS0FBS3NILFVBQVksK0NBQ2pCdEgsS0FBS3VILFNBQVUsRUFDZnZILEtBQUt3SCxZQUFjLEtBRW5CLElBQUlDLE9BQVMxSyxJQUFJbUksS0FBS3dDLEtBQUtyQixRQUFRb0IsU0FBVyxDQUFDLEVBSS9DLEdBSElBLE9BQU9FLFVBQ1RGLE9BQU9HLGdCQUFrQkgsT0FBT0csaUJBQW1CLHlCQUVqREgsT0FBT0ksYUFBYyxDQUN2QixJQUFLeEIsUUFBUW1CLGFBQStDLG1CQUF4Qm5CLFFBQVFtQixZQUMxQyxNQUFNLElBQUl6SyxJQUFJbUksS0FBS3JFLE1BQ2pCLElBQUl0QyxNQUFNLG9FQUNWLENBQUNpSSxLQUFNeEcsS0FBS3NILFlBR2R0SCxLQUFLd0gsWUFBY25CLFFBQVFtQixXQUUvQixDQUNBLElBQUlNLE9BQVMvSyxJQUFJbUksS0FBSzZDLE1BQ3BCLENBQ0VOLE9BQ0FPLFlBQWEzQixRQUFRNEIsbUJBQXFCbEwsSUFBSStLLE9BQU9FLGFBRXZEM0IsUUFBUTZCLFdBQWEsQ0FBQyxHQUV4QmxJLEtBQUttSSxRQUFVLElBQUlwSyxJQUFJK0osT0FDekIsRUFlQU0sUUFBUyxTQUFTQSxRQUFRQyxVQUN4QnJJLEtBQUtzSSxnQkFBZ0JELFVBQVl0TCxJQUFJbUksS0FBS3FELEdBQUdGLFNBQy9DLEVBTUFHLEtBQU0sU0FBU0EsS0FBS0gsVUFDbEIsSUFBSUksS0FBT3pJLEtBQ1AwSSxVQUFZRCxLQUFLTixRQUFRTCxPQUFPTCxPQUFPRSxRQUFVLGFBQWUsa0JBQ3BFM0gsS0FBSzJJLGNBQWEsU0FBVUMsSUFBS0MsV0FDL0IsSUFBSXBCLE9BQVMsQ0FBQyxFQUNWbUIsSUFDRlAsU0FBU08sTUFHUEMsWUFDRnBCLE9BQU9xQixVQUFZRCxXQUVyQkosS0FBS04sUUFBUU8sV0FBV2pCLFFBQVEsU0FBVW1CLElBQUt2SixNQUN4Q3VKLEtBQ0hILEtBQUtOLFFBQVFZLGdCQUFnQjFKLEtBQU1vSixNQUVyQ0osU0FBU08sSUFDWCxJQUNGLEdBQ0YsRUFLQUQsYUFBYyxTQUFTQSxhQUFhTixVQUNsQyxJQUFJSSxLQUFPekksS0FDUEEsS0FBS3dILFlBQ1B4SCxLQUFLd0gsWUFBWXhILEtBQUttSSxRQUFRTCxPQUFPTCxPQUFPSSxjQUFjLFNBQVVlLElBQUtJLE9BQ3ZFLEdBQUlKLElBQUssQ0FDUCxJQUFJbkMsUUFBVW1DLElBVWQsT0FUSUEsZUFBZXJLLFFBQ2pCa0ksUUFBVW1DLElBQUluQyxjQUVoQjRCLFNBQ0V0TCxJQUFJbUksS0FBS3JFLE1BQ1AsSUFBSXRDLE1BQU0sNkJBQStCa0ksU0FDekMsQ0FBRUQsS0FBTWlDLEtBQUtuQixZQUluQixDQUNBZSxTQUFTLEtBQU1XLE1BQ2pCLElBRUFYLFNBQVMsS0FFYix1SkN0TUYsSUFBSXRMLElBQU0sb0JBQVEsc0NBQ2RJLGdCQUFrQixvQkFBUSxxREFDMUJZLElBQU0sb0JBQVEseUNBMERsQmhCLElBQUlrTSwyQkFBNkJsTSxJQUFJbUksS0FBS2lDLFFBQVFwSyxJQUFJcUssWUFBYSxDQUlqRThCLGdCQUFpQixDQUNmQyxHQUFJLDJCQUNKQyxVQUFXLG1DQTREYi9CLFlBQWEsU0FBUzRCLDJCQUEyQnhCLE9BQVFsQixjQUN2RHhKLElBQUlxSyxZQUFZakksS0FBS2EsTUFDckJBLEtBQUt1SCxTQUFVLEVBQ2Z2SCxLQUFLeUgsT0FBU0EsT0FDZHpILEtBQUtYLEtBQU8sS0FDWlcsS0FBS3FKLFlBQWMsS0FDbkJySixLQUFLc0osY0FBZ0J2TSxJQUFJbUksS0FBS3dDLEtBQUtuQixjQUFnQixDQUFDLEdBQ3BEdkcsS0FBS3VKLGVBQ0wsSUFBSWQsS0FBT3pJLEtBQ1gzQyxPQUFPQyxlQUFlMEMsS0FBTSxhQUFjLENBQ3hDekMsSUFBSyxXQUVILE9BREFrTCxLQUFLYyxlQUNFZCxLQUFLWSxhQUFlWixLQUFLaEIsT0FBTytCLFVBQ3pDLEVBQ0E5SSxJQUFLLFNBQVMrSSxZQUNaaEIsS0FBS1ksWUFBY0ksVUFDckIsR0FFSixFQWNBckIsUUFBUyxTQUFTQSxRQUFRQyxVQUN4QnJJLEtBQUtzSSxnQkFBZ0JELFVBQVl0TCxJQUFJbUksS0FBS3FELEdBQUdGLFNBQy9DLEVBTUFHLEtBQU0sU0FBU0EsS0FBS0gsVUFDbEIsSUFBSUksS0FBT3pJLEtBQ1h5SSxLQUFLaUIsZ0JBQ0xqQixLQUFLcEosS0FBTyxLQUNab0osS0FBS1ksWUFBYyxLQUNuQlosS0FBS2tCLE9BQU0sU0FBU2YsS0FDYkEsS0FPSEgsS0FBS21CLHVCQUF1QmhCLEtBQzVCUCxTQUFTTyxNQVBKSCxLQUFLaEIsT0FBT0UsUUFHZmMsS0FBS29CLHNCQUFzQnhCLFVBRjNCSSxLQUFLcUIsMEJBQTBCekIsU0FRckMsR0FDRixFQU9BMEIsY0FBZSxTQUFTQyxhQUN0QmhLLEtBQUtxSixZQUFjLFlBQ1pySixLQUFLeUgsT0FBTytCLFdBRW5CLElBQUlTLE9BQVNqSyxLQUFLeUgsT0FBT3lDLGVBQ3JCQyxRQUFVbkssS0FBS3lILE9BQU8yQyxTQUFXLFVBQzlCcEssS0FBS3FLLFFBQVFySyxLQUFLa0osZ0JBQWdCQyxHQUFLYyxPQUFTRSxnQkFDaERuSyxLQUFLcUssUUFBUXJLLEtBQUtrSixnQkFBZ0JFLFVBQVlhLE9BQVNFLFFBQ2hFLEVBS0FQLHVCQUF3QixTQUFTQSx1QkFBdUJoQixLQUV0QywwQkFBWkEsSUFBSXBDLE1BREd4RyxLQUVKK0osZUFFVCxFQWVBSixNQUFPLFNBQVNBLE1BQU10QixVQUNwQixJQUFJSSxLQUFPekksS0FDWCxHQUFzQyxpQkFBM0J5SSxLQUFLaEIsT0FBTytCLFdBQ3JCLE9BQU9uQixTQUFTLEtBQU1JLEtBQUtoQixPQUFPK0IsWUFHcENmLEtBQUs2QixRQUFRWCxPQUFNLFNBQVNmLElBQUt2SixPQUMxQnVKLEtBQU92SixLQUFLbUssWUFDZmYsS0FBS2hCLE9BQU8rQixXQUFhbkssS0FBS21LLFdBQzlCbkIsU0FBUyxLQUFNaEosS0FBS21LLGFBRXBCbkIsU0FBU08sSUFFYixHQUNGLEVBTUEyQixnQkFBaUIsU0FBU0EsZ0JBQWdCbEwsS0FBTTJJLGFBQ3pDM0ksTUFBUzJJLGNBQ2RBLFlBQVlULFNBQVUsRUFDdEJTLFlBQVl3QyxZQUFjbkwsS0FBSytILFlBQVlxRCxZQUMzQ3pDLFlBQVkwQyxnQkFBa0JyTCxLQUFLK0gsWUFBWXVELFVBQy9DM0MsWUFBWTRDLGFBQWV2TCxLQUFLK0gsWUFBWXlELGFBQzVDN0MsWUFBWThDLFdBQWF6TCxLQUFLK0gsWUFBWTJELFdBQzVDLEVBS0FqQiwwQkFBMkIsU0FBU0EsMEJBQTBCekIsVUFDNUQsSUFBSUksS0FBT3pJLEtBQ1h5SSxLQUFLNkIsUUFBUVIsMkJBQTBCLFNBQVNsQixJQUFLdkosTUFDOUN1SixJQUtISCxLQUFLbUIsdUJBQXVCaEIsTUFKNUJILEtBQUt1QyxRQUFRM0wsTUFDYm9KLEtBQUtwSixLQUFPQSxLQUNab0osS0FBSzhCLGdCQUFnQjlCLEtBQUtwSixLQUFNb0osT0FJbENKLFNBQVNPLElBQ1gsR0FDRixFQUtBaUIsc0JBQXVCLFNBQVNBLHNCQUFzQnhCLFVBQ3BELElBQUlJLEtBQU96SSxLQUNYeUksS0FBSzZCLFFBQVFXLGdCQUFlLFNBQVNyQyxJQUFLdkosTUFDbkN1SixLQVdISCxLQUFLbUIsdUJBQXVCaEIsS0FDNUJQLFNBQVNPLE9BWFRILEtBQUt1QyxRQUFRM0wsTUFDYm9KLEtBQUtoQixPQUFPeUQsaUJBQW1CN0wsS0FBSzhMLE1BQ3BDMUMsS0FBSzJDLHVCQUF1QmhELFNBQVEsU0FBU2lELFFBQ3RDQSxTQUNINUMsS0FBS3BKLEtBQU9vSixLQUFLMkMsdUJBQXVCL0wsS0FDeENvSixLQUFLNkMsSUFBSXZDLGdCQUFnQk4sS0FBS3BKLEtBQU1vSixPQUV0Q0osU0FBU2dELE9BQ1gsSUFLSixHQUNGLEVBS0E5QixhQUFjLFNBQVNBLGVBSXJCLEdBQUl4TSxJQUFJbUksS0FBS1EsY0FIRjFGLEtBR3VCeUgsT0FBTytCLFdBQVksQ0FDbkQsSUFBSUwsR0FKS25KLEtBSUt1TCxXQUFXLE1BQ3pCLEdBQUlwQyxJQUxLbkosS0FLTXlILE9BQU8rRCxPQUFRLENBQzVCLElBQUlDLGdCQUFrQnBPLE9BQU9xTyxLQU50QjFMLEtBTWdDeUgsT0FBTytELFFBUXJCLEtBZGxCeEwsS0FRQ3VMLFdBQVcsY0FBZ0IsSUFBSUksTUFBTSxLQUdiQyxRQUFPLFNBQVNDLEdBQzlDLE9BQXVDLElBQWhDSixnQkFBZ0J6TSxRQUFRNk0sRUFDakMsSUFDY3ZNLFNBZFBVLEtBZUF5SCxPQUFPK0IsV0FBYUwsR0FFN0IsTUFBV0EsS0FqQkZuSixLQWtCRnlILE9BQU8rQixXQUFhTCxHQUU3QixDQUNGLEVBS0FPLGNBQWUsV0FDYixJQUFJbkQsYUFBZXZHLEtBQUtzSixjQUd4QixHQUZBdEosS0FBS29MLHVCQUF5QnBMLEtBQUtvTCx3QkFDakMsSUFBSXJPLElBQUkrTyx1QkFBdUI5TCxLQUFLeUgsT0FBUWxCLGVBQ3pDdkcsS0FBS3NLLFFBQVMsQ0FDakIsSUFBSXlCLGNBQWdCaFAsSUFBSW1JLEtBQUs2QyxNQUFNLENBQUMsRUFBR3hCLGNBQ3ZDd0YsY0FBY3RFLE9BQVN6SCxLQUFLeUgsT0FDNUJ6SCxLQUFLc0ssUUFBVSxJQUFJbk4sZ0JBQWdCNE8sY0FDckMsQ0FDQS9MLEtBQUtzTCxJQUFNdEwsS0FBS3NMLEtBQU8sSUFBSXZOLElBQUl3SSxhQUNqQyxFQUtBeUUsUUFBUyxTQUFTQSxRQUFRM0wsTUFDeEJXLEtBQUtxSixZQUFjaEssS0FBS21LLFdBQ3hCeEosS0FBS3lILE9BQU8rQixXQUFheEosS0FBS3FKLFlBRzFCdE0sSUFBSW1JLEtBQUtRLGNBQ1gxRixLQUFLZ00sV0FBVyxLQUFNM00sS0FBS21LLFlBRXZCeEosS0FBS3lILE9BQU8rRCxRQUNkeEwsS0FBS2dNLFdBQVcsWUFBYTNPLE9BQU9xTyxLQUFLMUwsS0FBS3lILE9BQU8rRCxRQUFRUyxLQUFLLE1BR3hFLEVBS0FWLFdBQVksU0FBU0EsV0FBVzlNLEtBQzlCLE9BQU91QixLQUFLcUssUUFBUXJLLEtBQUtrSixnQkFBZ0J6SyxLQUFPdUIsS0FBS3lILE9BQU95QyxnQkFBa0JsSyxLQUFLeUgsT0FBTzJDLFNBQVcsSUFDdkcsRUFLQTRCLFdBQVksU0FBU0EsV0FBV3ZOLElBQUt5TixLQUNuQyxJQUNFbE0sS0FBS3FLLFFBQVFySyxLQUFLa0osZ0JBQWdCekssS0FBT3VCLEtBQUt5SCxPQUFPeUMsZ0JBQWtCbEssS0FBS3lILE9BQU8yQyxTQUFXLEtBQU84QixHQUN2RyxDQUFFLE1BQU9DLEdBQUksQ0FDZixFQUtBOUIsUUFBUyxXQUNQLElBQ0UsSUFBSUEsUUFBVXROLElBQUltSSxLQUFLUSxhQUF1QyxPQUF4QjBHLE9BQU9DLGNBQXdELGlCQUF4QkQsT0FBT0MsYUFDaEZELE9BQU9DLGFBQWUsQ0FBQyxFQU0zQixPQUhBaEMsUUFBUSxvQkFBc0IsZ0JBQ3ZCQSxRQUFRLG9CQUVSQSxPQUNULENBQUUsTUFBTzhCLEdBQ1AsTUFBTyxDQUFDLENBQ1YsQ0FDRCxDQWJRLDRJQ2xYWCxJQUFJcFAsSUFBTSxvQkFBUSxzQ0FDZGdCLElBQU0sb0JBQVEseUNBc0NsQmhCLElBQUl1UCxnQkFBa0J2UCxJQUFJbUksS0FBS2lDLFFBQVFwSyxJQUFJcUssWUFBYSxDQVl0REMsWUFBYSxTQUFTaUYsZ0JBQWdCN0UsUUFDcEMxSyxJQUFJcUssWUFBWWpJLEtBQUthLE1BQ3JCQSxLQUFLdUgsU0FBVSxFQUNmdkgsS0FBS3lILE9BQVNBLE1BQ2hCLEVBYUFXLFFBQVMsU0FBU0EsUUFBUUMsVUFDeEJySSxLQUFLc0ksZ0JBQWdCRCxVQUFZdEwsSUFBSW1JLEtBQUtxRCxHQUFHRixTQUMvQyxFQUtBRyxLQUFNLFNBQVNBLEtBQUtILFVBQ2xCLElBQUlJLEtBQU96SSxLQUNYeUksS0FBS2lCLGdCQUNMakIsS0FBS04sUUFBUW9FLG9CQUFtQixTQUFVM0QsSUFBS3ZKLE1BQ3hDdUosS0FDSEgsS0FBS04sUUFBUVksZ0JBQWdCMUosS0FBTW9KLE1BRXJDSixTQUFTTyxJQUNYLEdBQ0YsRUFLQWMsY0FBZSxXQUNiMUosS0FBS21JLFFBQVVuSSxLQUFLbUksU0FBVyxJQUFJcEssSUFBSSxDQUFDMEosT0FBUXpILEtBQUt5SCxRQUN2RCxnSkMzRkYsSUFBSTFLLElBQU0sb0JBQVEsc0NBQ2RnQixJQUFNLG9CQUFRLHlDQW1DbEJoQixJQUFJeVAscUJBQXVCelAsSUFBSW1JLEtBQUtpQyxRQUFRcEssSUFBSXFLLFlBQWEsQ0F1QjNEQyxZQUFhLFNBQVNtRixxQkFBcUIvRSxPQUFRUSxtQkFDakRsTCxJQUFJcUssWUFBWWpJLEtBQUthLE1BQ3JCQSxLQUFLeU0sc0JBQXNCeEUsbUJBQzNCakksS0FBS3VILFNBQVUsRUFFZnZILEtBQUt5SCxPQUFTQSxRQUFVLENBQUMsRUFDckJ6SCxLQUFLeUgsT0FBT0UsVUFDZDNILEtBQUt5SCxPQUFPRyxnQkFDVjVILEtBQUt5SCxPQUFPRyxpQkFBbUIsd0JBRXJDLEVBZUFRLFFBQVMsU0FBU0EsUUFBU0MsVUFDekJySSxLQUFLc0ksZ0JBQWdCRCxVQUFZdEwsSUFBSW1JLEtBQUtxRCxHQUFHRixTQUMvQyxFQUtBRyxLQUFNLFNBQVNBLEtBQU1ILFVBQ25CLElBQUlJLEtBQU96SSxLQUNYeUksS0FBS2lCLGdCQUNMakIsS0FBS1Isa0JBQWtCMUssS0FBSSxXQUN6QmtMLEtBQUtOLFFBQVFMLE9BQU9FLFlBQWNTLEtBQUtSLG1CQUN2QlEsS0FBS2hCLE9BQU9FLFFBQzFCYyxLQUFLTixRQUFRdUUsV0FBYWpFLEtBQUtOLFFBQVF3RSxpQkFDL0J4TixLQUFLc0osS0FBS04sU0FBUyxTQUFVUyxJQUFLdkosTUFDckN1SixLQUNISCxLQUFLTixRQUFRWSxnQkFBZ0IxSixLQUFNb0osTUFFckNKLFNBQVNPLElBQ1gsR0FDRixHQUNGLEVBS0E2RCxzQkFBdUIsU0FBU0Esc0JBQXVCeEUsbUJBRXJELElBREFqSSxLQUFLaUksa0JBQW9CQSxtQkFBcUJsTCxJQUFJK0ssT0FBT0UsWUFDbERoSSxLQUFLaUksa0JBQWtCQSxtQkFDNUJqSSxLQUFLaUksa0JBQW9CakksS0FBS2lJLGtCQUFrQkEsa0JBR1IsbUJBQS9CakksS0FBS2lJLGtCQUFrQjFLLE1BQ2hDeUMsS0FBS2lJLGtCQUFvQixJQUFJbEwsSUFBSXFLLFlBQVlwSCxLQUFLaUksbUJBRXRELEVBS0F5QixjQUFlLFdBQ2IxSixLQUFLbUksUUFBVW5JLEtBQUttSSxTQUFXLElBQUlwSyxJQUFJLENBQUMwSixPQUFRekgsS0FBS3lILFFBQ3ZELG1KQzlIRixJQUFJMUssSUFBTSxvQkFBUSxzQ0FDZGdCLElBQU0sb0JBQVEseUNBeUNsQmhCLElBQUkrTyx1QkFBeUIvTyxJQUFJbUksS0FBS2lDLFFBQVFwSyxJQUFJcUssWUFBYSxDQXFCN0RDLFlBQWEsU0FBU3lFLHVCQUF1QnJFLE9BQVFsQixjQUNuRHhKLElBQUlxSyxZQUFZakksS0FBS2EsTUFDckJBLEtBQUt1SCxTQUFVLEVBQ2Z2SCxLQUFLeUgsT0FBU0EsT0FDZHpILEtBQUt5SCxPQUFPRyxnQkFBa0I1SCxLQUFLeUgsT0FBT0csaUJBQW1CLGVBQzdENUgsS0FBS1gsS0FBTyxLQUNaVyxLQUFLc0osY0FBZ0J2TSxJQUFJbUksS0FBS3dDLEtBQUtuQixjQUFnQixDQUFDLEVBQ3RELEVBYUE2QixRQUFTLFNBQVNBLFFBQVFDLFVBQ3hCckksS0FBS3NJLGdCQUFnQkQsVUFBWXRMLElBQUltSSxLQUFLcUQsR0FBR0YsU0FDL0MsRUFLQUcsS0FBTSxTQUFTQSxLQUFLSCxVQUNsQixJQUFJSSxLQUFPekksS0FDWHlJLEtBQUtpQixnQkFDTGpCLEtBQUtOLFFBQVF5RSwyQkFBMEIsU0FBVWhFLElBQUt2SixNQUNwRG9KLEtBQUtwSixLQUFPLEtBQ1B1SixNQUNISCxLQUFLcEosS0FBT0EsS0FDWm9KLEtBQUtOLFFBQVFZLGdCQUFnQjFKLEtBQU1vSixPQUVyQ0osU0FBU08sSUFDWCxHQUNGLEVBS0FjLGNBQWUsV0FDYixJQUFLMUosS0FBS21JLFFBQVMsQ0FDakIsSUFBSUQsVUFBWW5MLElBQUltSSxLQUFLNkMsTUFBTSxDQUFDLEVBQUcvSCxLQUFLc0osZUFDeENwQixVQUFVVCxPQUFTekgsS0FBS3lILE9BQ3hCekgsS0FBS21JLFFBQVUsSUFBSXBLLElBQUltSyxVQUN6QixDQUNGLHVJQ2hIRixJQUFJMkUsb0JBQXNCLDRHQUN0QkMsV0FBYSx5RkFpQmpCbFAsT0FBT0MsUUFBVSxDQUNiNEgsa0JBaEJKLFNBQVNBLGtCQUFrQnNILEtBQU1DLE9BQVF4UCxPQUtyQyxJQUpBLElBQUl5UCxjQUFnQkosb0JBQW9CRSxNQUVwQ0csT0FBUyxHQUVKdk0sRUFBSSxFQUFHQSxFQUFJc00sY0FBYzNOLE9BQVFxQixJQUN0Q3VNLE9BQU9DLEtBQUtMLFdBQVdFLE9BQVFDLGNBQWN0TSxHQUFJbkQsUUFHckQsT0FBTzBQLE1BQ1gsZ0ZDY0F0UCxPQUFPQyxRQUFVLENBQ2JnUCxvQkF2QkosU0FBU0Esb0JBQW9Cbk4sUUFLekIsSUFIQSxJQUFJME4sU0FBVyxHQUNYOUosT0FBUyxFQUVOQSxPQUFTNUQsT0FBT0osUUFBUSxDQUMzQixJQUFJa0UsWUFBYzlELE9BQU8yTixZQUFZL0osUUFHakNtRCxRQUFVL0csT0FBTzROLE1BQU1oSyxPQUFRRSxZQUFjRixRQUVqREEsUUFBVUUsWUFFVjRKLFNBQVNELEtBQUsxRyxRQUNsQixDQUVBLE9BQU8yRyxRQUNYLCtHQ3RCQSxJQUFJbEksS0FBTywrREFDUHFJLFNBQVdySSxLQUFLeEYsT0FBTzZOLFNBWTNCLFNBQVNDLE1BQU1DLE9BQ1gsR0FBcUIsSUFBakJBLE1BQU1uTyxPQUNOLE1BQU0sSUFBSWYsTUFBTSx5Q0FFZjJHLEtBQUt2RyxPQUFPK08sU0FBU0QsU0FBUUEsTUFBUUYsU0FBU0UsUUFFbkR6TixLQUFLeU4sTUFBUUEsS0FDakIsQ0F1REEsU0FBU0UsT0FBT0YsT0FDWixJQUFLLElBQUk5TSxFQUFJLEVBQUdBLEVBQUksRUFBR0EsSUFDbkI4TSxNQUFNOU0sSUFBTSxJQUVoQixJQUFTQSxFQUFJLEVBQUdBLEdBQUssSUFDakI4TSxNQUFNOU0sS0FDVyxJQUFiOE0sTUFBTTlNLElBRlVBLEtBTTVCLENBekRBNk0sTUFBTUksV0FBYSxTQUFTQyxRQUN4QixHQUFJQSxPQUFTLG9CQUF1QkEsUUFBVSxtQkFDMUMsTUFBTSxJQUFJdFAsTUFDTnNQLE9BQVMsdUVBS2pCLElBREEsSUFBSUosTUFBUSxJQUFJaE8sV0FBVyxHQUVuQmtCLEVBQUksRUFBR21OLFVBQVlyTCxLQUFLc0wsSUFBSXRMLEtBQUt1TCxNQUFNSCxTQUMzQ2xOLEdBQUssR0FBS21OLFVBQVksRUFDdEJuTixJQUFLbU4sV0FBYSxJQUVsQkwsTUFBTTlNLEdBQUttTixVQU9mLE9BSklELE9BQVMsR0FDVEYsT0FBT0YsT0FHSixJQUFJRCxNQUFNQyxNQUNyQixFQU9BRCxNQUFNdk8sVUFBVWdQLFFBQVUsV0FDdEIsSUFBSVIsTUFBUXpOLEtBQUt5TixNQUFNSCxNQUFNLEdBQ3pCWSxTQUFzQixJQUFYVCxNQUFNLEdBS3JCLE9BSklTLFVBQ0FQLE9BQU9GLE9BR0pVLFNBQVNWLE1BQU12TyxTQUFTLE9BQVEsS0FBT2dQLFVBQVksRUFBSSxFQUNsRSxFQUVBVixNQUFNdk8sVUFBVUMsU0FBVyxXQUN2QixPQUFPa1AsT0FBT3BPLEtBQUtpTyxVQUN2QixFQXNCQXJRLE9BQU9DLFFBQVUsQ0FDYjJQLHlIQzNGSixJQUFJYSxhQUFlLDZGQXNFbkJ6USxPQUFPQyxRQUFVLENBQ2JpUCxXQTlESixTQUFTQSxXQUFXRSxPQUFRdkcsUUFBUzZILE9BQ2pDLElBQUlDLGNBQWdCRixhQUFhNUgsU0FHN0IrSCxZQUFjRCxjQUFjRSxRQUFRLGlCQUN4QyxHQUFJRCxZQUFhLENBQ2IsR0FBMEIsVUFBdEJBLFlBQVlFLE1BQ1osTUEyQ1osU0FBU0MsV0FBV2xJLFNBQ2hCLElBQUlhLFVBQVliLFFBQVFnSSxRQUFRLGVBQzVCRyxhQUFlbkksUUFBUWdJLFFBQVEsa0JBQy9CNU4sTUFBUSxJQUFJdEMsTUFBTXFRLGFBQWFGLE9BQVNFLGNBRTVDLE9BREEvTixNQUFNMkYsS0FBTzNGLE1BQU1nTyxLQUFPdkgsVUFBVW9ILE9BQVNwSCxVQUN0Q3pHLEtBQ1gsQ0FqRGtCOE4sQ0FBV0osZUFDZCxHQUEwQixVQUF0QkMsWUFBWUUsTUFFbkIsTUFFUixDQUdBLElBQUlJLFVBQVlQLGNBQWNFLFFBQVEsZUFFbENNLFdBQWFULE1BQU1VLFFBQVFGLFVBQVVKLE9BQ3pDLEdBQUtLLFdBQUwsQ0FJQSxJQUFJRSxPQUFTLENBQUMsRUFFVkMsdUJBQXlCSCxXQUFXRyx1QkFDeEMsR0FBSUEsdUJBQXdCLENBQ3hCLElBQUlDLGFBQWVKLFdBQVdDLFFBQVFFLHdCQUVaLFdBQXRCQyxhQUFhQyxLQUNiSCxPQUFPQyx3QkFBMEJYLGNBQWN4QixLQUUvQ2tDLE9BQU9DLHdCQUEwQmxDLE9BQU9xQyxNQUFNZCxjQUFjeEIsS0FBSzdOLFdBQVlpUSxhQUVyRixDQUlBLElBREEsSUFBSUcsaUJBQW1CUCxXQUFXUSx1QkFDekI1TyxFQUFJLEVBQUdBLEVBQUkyTyxpQkFBaUJoUSxPQUFRcUIsSUFBSyxDQUM5QyxJQUFJa08sS0FBT1MsaUJBQWlCM08sR0FDeEI0TixjQUFjRSxRQUFRSSxRQUV0QkksT0FBT0osTUFBUUUsV0FBV0MsUUFBUUgsTUFBTVcsT0FBT2pCLGNBQWNFLFFBQVFJLE1BQU1ILE9BRW5GLENBRUEsSUFBSWUsT0FBUyxDQUFDLEVBRWQsT0FEQUEsT0FBT1gsVUFBVUosT0FBU08sT0FDbkJRLE1BM0JQLENBNEJKLHVIQ3pEQSxJQUFJakMsTUFBUSw4RUFFUmtDLGFBQWUsNkZBRWZDLFlBQWMsVUFDZEMsU0FBVyxPQUNYQyxVQUFZLFFBQ1pDLFFBQVUsVUFDVkMsU0FBVyxPQUNYQyxXQUFhLFNBQ2JDLFdBQWEsU0FDYkMsY0FBZ0IsWUFDaEJDLFNBQVcsT0FPZixTQUFTQyxhQUFhM0IsU0FHbEIsSUFGQSxJQUFJOUwsSUFBTSxDQUFDLEVBQ1BSLFNBQVcsRUFDUkEsU0FBV3NNLFFBQVFuUCxRQUFRLENBQzlCLElBQUkrUSxXQUFhNUIsUUFBUTZCLFVBQVVuTyxZQUMvQjBNLEtBQU9KLFFBQVFuQixNQUFNbkwsU0FBVUEsU0FBV2tPLFlBQVluUixXQUUxRCxPQURBaUQsVUFBWWtPLFdBQ0o1QixRQUFRNkIsVUFBVW5PLGFBQ3RCLEtBQUssRUFDRFEsSUFBSWtNLE1BQVEsQ0FDUk8sS0FBTU8sWUFDTmpCLE9BQU8sR0FFWCxNQUNKLEtBQUssRUFDRC9MLElBQUlrTSxNQUFRLENBQ1JPLEtBQU1PLFlBQ05qQixPQUFPLEdBRVgsTUFDSixLQUFLLEVBQ0QvTCxJQUFJa00sTUFBUSxDQUNSTyxLQUFNUSxTQUNObEIsTUFBT0QsUUFBUThCLFNBQVNwTyxhQUU1QixNQUNKLEtBQUssRUFDRFEsSUFBSWtNLE1BQVEsQ0FDUk8sS0FBTVMsVUFDTm5CLE1BQU9ELFFBQVErQixZQUFZck8sV0FFL0JBLFVBQVksRUFDWixNQUNKLEtBQUssRUFDRFEsSUFBSWtNLE1BQVEsQ0FDUk8sS0FBTVUsUUFDTnBCLE1BQU9ELFFBQVFwQixZQUFZbEwsV0FFL0JBLFVBQVksRUFDWixNQUNKLEtBQUssRUFDRFEsSUFBSWtNLE1BQVEsQ0FDUk8sS0FBTVcsU0FDTnJCLE1BQU8sSUFBSWxCLE1BQU1pQixRQUFRbkIsTUFBTW5MLFNBQVVBLFNBQVcsS0FFeERBLFVBQVksRUFDWixNQUNKLEtBQUssRUFDRCxJQUFJc08sYUFBZWhDLFFBQVFpQyxhQUFhdk8sVUFDeENBLFVBQVksRUFDWlEsSUFBSWtNLE1BQVEsQ0FDUk8sS0FBTVksV0FDTnRCLE1BQU9ELFFBQVFuQixNQUFNbkwsU0FBVUEsU0FBV3NPLGVBRTlDdE8sVUFBWXNPLGFBQ1osTUFDSixLQUFLLEVBQ0QsSUFBSUUsYUFBZWxDLFFBQVFpQyxhQUFhdk8sVUFDeENBLFVBQVksRUFDWlEsSUFBSWtNLE1BQVEsQ0FDUk8sS0FBTWEsV0FDTnZCLE1BQU9ELFFBQVFuQixNQUNYbkwsU0FDQUEsU0FBV3dPLGNBQ2J6UixZQUVOaUQsVUFBWXdPLGFBQ1osTUFDSixLQUFLLEVBQ0RoTyxJQUFJa00sTUFBUSxDQUNSTyxLQUFNYyxjQUNOeEIsTUFBTyxJQUFJa0MsS0FDUCxJQUFJcEQsTUFBTWlCLFFBQVFuQixNQUFNbkwsU0FBVUEsU0FBVyxJQUN4QzhMLFlBR2I5TCxVQUFZLEVBQ1osTUFDSixLQUFLLEVBQ0QsSUFBSTBPLFVBQVlwQyxRQUFRbkIsTUFBTW5MLFNBQVVBLFNBQVcsSUFDOUNqRCxTQUFTLE9BQ2RpRCxVQUFZLEdBQ1pRLElBQUlrTSxNQUFRLENBQ1JPLEtBQU1lLFNBQ056QixNQUFPbUMsVUFBVUMsT0FBTyxFQUFHLEdBQUssSUFDNUJELFVBQVVDLE9BQU8sRUFBRyxHQUFLLElBQ3pCRCxVQUFVQyxPQUFPLEdBQUksR0FBSyxJQUMxQkQsVUFBVUMsT0FBTyxHQUFJLEdBQUssSUFDMUJELFVBQVVDLE9BQU8sS0FFekIsTUFDSixRQUNJLE1BQU0sSUFBSXZTLE1BQU0sZ0NBRTVCLENBQ0EsT0FBT29FLEdBQ1gsQ0FVQS9FLE9BQU9DLFFBQVUsQ0FDYndRLGFBVEosU0FBU0EsYUFBYTVILFNBQ2xCLElBQUlzSyxPQUFTckIsYUFBYWpKLFNBQzFCLE1BQU8sQ0FBRWdJLFFBQVMyQixhQUFhVyxPQUFPdEMsU0FBVTFCLEtBQU1nRSxPQUFPaEUsS0FDakUsdUhDeEhBLElBQUk3SCxLQUFPLCtEQUNQcUksU0FBV3JJLEtBQUt4RixPQUFPNk4sU0FrRTNCM1AsT0FBT0MsUUFBVSxDQUNiNlIsYUFuREosU0FBU0EsYUFBYWpKLFNBR2xCLEdBRkt2QixLQUFLdkcsT0FBTytPLFNBQVNqSCxXQUFVQSxRQUFVOEcsU0FBUzlHLFVBRW5EQSxRQUFRbkgsT0FWYTBSLEdBV3JCLE1BQU0sSUFBSXpTLE1BQU0sMkVBR3BCLEdBQUlrSSxRQUFRbkgsU0FBV21ILFFBQVF3SyxhQUFhLEdBQ3hDLE1BQU0sSUFBSTFTLE1BQU0sa0VBR3BCLElBQUkyUyx3QkFBMEJ6SyxRQUFRd0ssYUF0QnJCRSxHQXdCakIsR0FDSUQsMEJBQTRCaE0sS0FBS0MsT0FBT2lNLE1BQ3BDM0ssUUFBUTZHLE1BQU0sRUExQkw2RCxJQTZCYixNQUFNLElBQUk1UyxNQUNOLGtEQUNBMlMsd0JBQ0EsbURBSVIsSUFBSUcsd0JBQTBCNUssUUFBUXdLLGFBQWF4SyxRQUFRbkgsT0FsQ3pDLEdBb0NsQixHQUNJK1IsMEJBQTRCbk0sS0FBS0MsT0FBT2lNLE1BQ3BDM0ssUUFBUTZHLE1BQU0sRUFBRzdHLFFBQVFuSCxPQXRDZixJQXlDZCxNQUFNLElBQUlmLE1BQ04sNERBQ0k4Uyx5QkFJWixJQUNJQyxXQURlTixHQUNhdkssUUFBUXdLLGFBcERoQixHQXNEeEIsTUFBTyxDQUNIeEMsUUFBU2hJLFFBQVE2RyxNQUpGMEQsR0FJc0JNLFlBQ3JDdkUsS0FBTXRHLFFBQVE2RyxNQUFNZ0UsV0FBWTdLLFFBQVFuSCxPQXBEMUIsR0FzRHRCLHNIQzlEQSxJQUFJdkMsSUFBTSxvQkFBUSxzQ0FDZHdVLGFBQWUseUZBQ25CLG9CQUFRLHNDQUtSeFUsSUFBSXlVLFVBQVl6VSxJQUFJbUksS0FBS2lDLFFBQVEsQ0FDL0JzSyxjQUFlLFNBQVNBLGNBQWNDLFlBQWFDLFlBQWF0SixTQUFVdUosYUFDeEUsSUFBSW5KLEtBQU96SSxLQUNQNlIsU0FBV0gsWUFBWUcsU0FDdkJDLFFBQVUsSUFBSVAsYUFDZFEsS0FBT0YsU0FBU0csU0FBVyxLQUFPSCxTQUFTSSxTQUN6QixLQUFsQkosU0FBU0ssTUFBaUMsTUFBbEJMLFNBQVNLLE9BQ25DSCxNQUFRLElBQU1GLFNBQVNLLE1BRXpCSCxNQUFRTCxZQUFZUyxLQUVwQixJQUFJQyxJQUFNLElBQUlDLGVBQWtCQyxnQkFBaUIsRUFDakRaLFlBQVlhLE9BQVNILElBRXJCQSxJQUFJSSxpQkFBaUIsb0JBQW9CLFdBQ3ZDLElBQ0UsR0FBbUIsSUFBZkosSUFBSUssT0FBYyxNQUN4QixDQUFFLE1BQU8zUixHQUFLLE1BQVEsQ0FFbEJkLEtBQUswUyxZQUFjMVMsS0FBSzJTLG1CQUFxQkwsaUJBQy9DUixRQUFRYyxXQUFhUixJQUFJSyxPQUN6QlgsUUFBUXJELFFBQVVoRyxLQUFLMkgsYUFBYWdDLElBQUlTLHlCQUN4Q2YsUUFBUWdCLEtBQ04sVUFDQWhCLFFBQVFjLFdBQ1JkLFFBQVFyRCxRQUNSMkQsSUFBSVcsWUFFTlQsZ0JBQWlCLEdBRWZ0UyxLQUFLMFMsYUFBZTFTLEtBQUtnVCxNQUMzQnZLLEtBQUt3SyxjQUFjYixJQUFLTixRQUU1QixJQUFHLEdBQ0hNLElBQUljLE9BQU9WLGlCQUFpQixZQUFZLFNBQVVXLEtBQ2hEckIsUUFBUWdCLEtBQUssZUFBZ0JLLElBQy9CLElBQ0FmLElBQUlJLGlCQUFpQixZQUFZLFNBQVVXLEtBQ3pDckIsUUFBUWdCLEtBQUssa0JBQW1CSyxJQUNsQyxJQUFHLEdBQ0hmLElBQUlJLGlCQUFpQixXQUFXLFdBQzlCWixZQUFZN1UsSUFBSW1JLEtBQUtyRSxNQUFNLElBQUl0QyxNQUFNLFdBQVksQ0FBQ2lJLEtBQU0saUJBQzFELElBQUcsR0FDSDRMLElBQUlJLGlCQUFpQixTQUFTLFdBQzVCWixZQUFZN1UsSUFBSW1JLEtBQUtyRSxNQUFNLElBQUl0QyxNQUFNLG1CQUFvQixDQUN2RGlJLEtBQU0sb0JBRVYsSUFBRyxHQUNINEwsSUFBSUksaUJBQWlCLFNBQVMsV0FDNUJaLFlBQVk3VSxJQUFJbUksS0FBS3JFLE1BQU0sSUFBSXRDLE1BQU0sbUJBQW9CLENBQ3ZEaUksS0FBTSx3QkFFVixJQUFHLEdBRUg2QixTQUFTeUosU0FDVE0sSUFBSWdCLEtBQUsxQixZQUFZMkIsT0FBUXRCLE1BQStCLElBQXpCSixZQUFZMkIsVUFDL0N2VyxJQUFJbUksS0FBS3FPLEtBQUs3QixZQUFZakQsU0FBUyxTQUFVaFEsSUFBS2lRLE9BQ3BDLG1CQUFSalEsS0FBb0MsZUFBUkEsS0FBZ0MsU0FBUkEsS0FDdEQyVCxJQUFJb0IsaUJBQWlCL1UsSUFBS2lRLE1BRTlCLElBRUlpRCxZQUFZOEIsVUFBb0MsSUFBekI5QixZQUFZMkIsV0FDckNsQixJQUFJcUIsUUFBVTlCLFlBQVk4QixTQUd4QjlCLFlBQVkrQixxQkFDZHRCLElBQUl1QixpQkFBa0IsR0FFeEIsSUFBTXZCLElBQUl3QixhQUFlLGFBQWUsQ0FBRSxNQUFPOVMsR0FBSSxDQUVyRCxJQUNNNFEsWUFBWTNFLEtBQ2RxRixJQUFJeUIsS0FBS25DLFlBQVkzRSxNQUVyQnFGLElBQUl5QixNQUVSLENBQUUsTUFBT2pMLEtBQ1AsSUFBSThJLFlBQVkzRSxNQUEyQyxpQkFBNUIyRSxZQUFZM0UsS0FBS3JOLE9BRzlDLE1BQU1rSixJQUZOd0osSUFBSXlCLEtBQUtuQyxZQUFZM0UsS0FBS3JOLE9BSTlCLENBRUEsT0FBT29TLE9BQ1QsRUFFQTFCLGFBQWMsU0FBU0EsYUFBYTBELFlBQ2xDLElBQUlyRixRQUFVLENBQUMsRUFNZixPQUxBMVIsSUFBSW1JLEtBQUs2TyxVQUFVRCxXQUFXbkksTUFBTSxVQUFVLFNBQVVxSSxNQUN0RCxJQUFJdlYsSUFBTXVWLEtBQUtySSxNQUFNLElBQUssR0FBRyxHQUN6QitDLE1BQVFzRixLQUFLQyxVQUFVeFYsSUFBSWEsT0FBUyxHQUNwQ2IsSUFBSWEsT0FBUyxJQUFHbVAsUUFBUWhRLElBQUlILGVBQWlCb1EsTUFDbkQsSUFDT0QsT0FDVCxFQUVBd0UsY0FBZSxTQUFTQSxjQUFjYixJQUFLTixTQUN6QyxJQUFJcFMsT0FDSixHQUF5QixnQkFBckIwUyxJQUFJd0IsY0FBa0N4QixJQUFJOEIsU0FBVSxDQUN0RCxJQUFJQyxHQUFLL0IsSUFBSThCLFNBQ2J4VSxPQUFTLElBQUkzQyxJQUFJbUksS0FBS3ZHLE9BQU93VixHQUFHNVUsWUFFaEMsSUFEQSxJQUFJNlUsS0FBTyxJQUFJM1UsV0FBVzBVLElBQ2pCeFQsRUFBSSxFQUFHQSxFQUFJakIsT0FBT0osU0FBVXFCLEVBQ25DakIsT0FBT2lCLEdBQUt5VCxLQUFLelQsRUFFckIsQ0FFQSxJQUNPakIsUUFBc0MsaUJBQXJCMFMsSUFBSWlDLGVBQ3hCM1UsT0FBUyxJQUFJM0MsSUFBSW1JLEtBQUt2RyxPQUFPeVQsSUFBSWlDLGNBRXJDLENBQUUsTUFBT3ZULEdBQUksQ0FFVHBCLFFBQVFvUyxRQUFRZ0IsS0FBSyxPQUFRcFQsUUFDakNvUyxRQUFRZ0IsS0FBSyxNQUNmLElBTUYvVixJQUFJdVgsV0FBV3JWLFVBQVlsQyxJQUFJeVUsVUFBVXZTLFVBS3pDbEMsSUFBSXVYLFdBQVdDLGtCQUFvQixtRUN2SW5DM1csT0FBT0MsUUFBVSxDQUVmMlcsSUFBSyxTQUFTQSxNQUNaLE1BQTJCLG9CQUFoQkMsYUFBMEQsbUJBQXBCQSxZQUFZRCxJQUNwREMsWUFBWUQsTUFFZDVELEtBQUs0RCxLQUNkLDBIQ1BGLElBQUl6WCxJQUFNLG9CQUFRLHNDQUNkb0osNkJBQStCLG9CQUFRLDBEQUkzQ3BKLElBQUltSSxLQUFLMUUsT0FBT3pELElBQUlnQixJQUFJa0IsVUFBVyxDQTBCakM4SixnQkFBaUIsU0FBU0EsZ0JBQWdCMUosS0FBTTJJLGFBQzlDLE9BQUszSSxNQUNBMkksY0FBYUEsWUFBYyxJQUFJakwsSUFBSXlQLHNCQUN4Q3hFLFlBQVlULFNBQVUsRUFDdEJTLFlBQVl3QyxZQUFjbkwsS0FBSytILFlBQVlxRCxZQUMzQ3pDLFlBQVkwQyxnQkFBa0JyTCxLQUFLK0gsWUFBWXNOLGdCQUMvQzFNLFlBQVk0QyxhQUFldkwsS0FBSytILFlBQVl5RCxhQUM1QzdDLFlBQVk4QyxXQUFhekwsS0FBSytILFlBQVkyRCxXQUNuQy9DLGFBUFcsSUFRcEIsRUFFQTRFLDBCQUEyQixTQUFTQSwwQkFBMEJuRixPQUFRWSxVQUNwRSxPQUFPckksS0FBSzJVLDJCQUEyQiw0QkFBNkJsTixPQUFRWSxTQUM5RSxFQUVBa0UsbUJBQW9CLFNBQVNBLG1CQUFtQjlFLE9BQVFZLFVBQ3RELE9BQU9ySSxLQUFLMlUsMkJBQTJCLHFCQUFzQmxOLE9BQVFZLFNBQ3ZFLEVBS0F1TSxzQkFBdUIsU0FBU0Esc0JBQXNCQyxTQUNwREEsUUFBUUMsWUFBWSxXQUFZOVUsS0FBSytVLHVCQUF1QixFQUM5RCxFQUtBQSxzQkFBdUIsU0FBU0Esc0JBQXNCQyxLQUNwRCxJQUFJN00sUUFBVTZNLElBQUk3TSxRQUNkTCxPQUFTSyxRQUFRTCxPQU1yQixHQUxBQSxPQUFPbU4scUJBQXVCOU8sNkJBQTZCZ0MsUUFBUStNLGdCQUFpQixDQUNsRnZPLElBOUQ4Qiw2QkErRDlCTSxhQTlEaUMseUJBK0RqQ1YsYUFBYyx5QkFHa0IsYUFBaEN1QixPQUFPbU4sc0JBQ1A5TSxRQUFRZ04saUJBQ1IsQ0FFQSxJQUFLck4sT0FBT3NOLE9BQ1YsTUFBTXJZLElBQUltSSxLQUFLckUsTUFBTSxJQUFJdEMsTUFDdkIsQ0FBQ2lJLEtBQU0sY0FBZUMsUUFBUyw2QkFFbkMsSUFBSTRPLFlBQWN2TixPQUFPK0osU0FBUzdTLFFBQVEsa0JBQ3RDc1csaUJBQW1CeE4sT0FBTytKLFNBQVNvQyxVQUFVLEVBQUdvQixhQUNsRCxJQUFNdk4sT0FBT3NOLE9BQVN0TixPQUFPK0osU0FBU29DLFVBQVVvQixhQUNsREwsSUFBSXRELFlBQVk2RCxlQUFlRCxrQkFDL0JOLElBQUl0RCxZQUFZMEQsT0FBU3ROLE9BQU9zTixNQUNsQyxDQUNGLGdIQ25GRixJQUFJbFEsS0FBTyxvQkFBUSxzQ0FDZnNRLE1BQVEsb0JBQVEsNkNBRXBCLFNBQVNDLGVBQWlCLENBd0UxQixTQUFTQyxvQkFBb0JDLElBQUtDLEtBRWhDLElBREEsSUFBSUMsU0FBV0YsSUFBSUcscUJBQXFCRixLQUMvQmpWLEVBQUksRUFBR29WLEtBQU9GLFNBQVN2VyxPQUFRcUIsRUFBSW9WLEtBQU1wVixJQUNoRCxHQUFJa1YsU0FBU2xWLEdBQUdxVixhQUFlTCxJQUM3QixPQUFPRSxTQUFTbFYsRUFHdEIsQ0FFQSxTQUFTc1YsU0FBU04sSUFBS3JILE9BRXJCLE9BREtBLFFBQU9BLE1BQVEsQ0FBQyxHQUNiQSxNQUFNYyxNQUNaLElBQUssWUFBYSxPQUFPOEcsZUFBZVAsSUFBS3JILE9BQzdDLElBQUssTUFBTyxPQWtDaEIsU0FBUzZILFNBQVNSLElBQUtySCxPQUNyQixJQUFJalAsS0FBTyxDQUFDLEVBQ1IrVyxPQUFTOUgsTUFBTTdQLElBQUlvUSxNQUFRLE1BQzNCd0gsU0FBVy9ILE1BQU1JLE1BQU1HLE1BQVEsUUFDL0J5SCxRQUFVaEksTUFBTWlJLFVBQVlqSSxNQUFNTyxLQUFPLFFBRXpDMkgsTUFBUWIsSUFBSWMsa0JBQ2hCLEtBQU9ELE9BQU8sQ0FDWixHQUFJQSxNQUFNRSxXQUFhSixRQUFTLENBQzlCLElBQUk3WCxJQUFNaVgsb0JBQW9CYyxNQUFPSixRQUFRTyxZQUN6Q2pJLE1BQVFnSCxvQkFBb0JjLE1BQU9ILFVBQ3ZDaFgsS0FBS1osS0FBT3dYLFNBQVN2SCxNQUFPSixNQUFNSSxNQUNwQyxDQUNBOEgsTUFBUUEsTUFBTUksa0JBQ2hCLENBQ0EsT0FBT3ZYLElBQ1QsQ0FsRHVCOFcsQ0FBU1IsSUFBS3JILE9BQ2pDLElBQUssT0FBUSxPQW1EakIsU0FBU3VJLFVBQVVsQixJQUFLckgsT0FDdEIsSUFBSWpQLEtBQU8sR0FDUGlYLFFBQVVoSSxNQUFNaUksVUFBWWpJLE1BQU1PLEtBQVFQLE1BQU13SSxPQUFPakksTUFBUSxTQUUvRDJILE1BQVFiLElBQUljLGtCQUNoQixLQUFPRCxPQUNEQSxNQUFNRSxXQUFhSixTQUNyQmpYLEtBQUs4TixLQUFLOEksU0FBU08sTUFBT2xJLE1BQU13SSxTQUVsQ04sTUFBUUEsTUFBTUksbUJBRWhCLE9BQU92WCxJQUNULENBL0R3QndYLENBQVVsQixJQUFLckgsT0FDbkMsVUFBS3lJLEVBQVcsS0FBSyxLQUFNLE9BaUYvQixTQUFTQyxhQUFhckIsS0FDcEIsR0FBSUEsVUFBbUMsTUFBTyxHQUc5QyxJQUFLQSxJQUFJYyxrQkFDUCxPQUFrQyxPQUE5QmQsSUFBSUssV0FBV0EsV0FBNEIsQ0FBQyxFQUNsQixJQUExQkwsSUFBSXNCLFdBQVczWCxPQUFxQixHQUM1QnFXLElBQUlnQixZQUlsQixJQUFJckksTUFBUSxDQUFDYyxLQUFNLFlBQWFKLFFBQVMsQ0FBQyxHQUN0Q3dILE1BQVFiLElBQUljLGtCQUNoQixLQUFPRCxPQUFPLENBQ1osSUFBSVosSUFBTVksTUFBTUUsU0FDWnJaLE9BQU80QixVQUFVeUgsZUFBZXZILEtBQUttUCxNQUFNVSxRQUFTNEcsS0FFdER0SCxNQUFNVSxRQUFRNEcsS0FBS3hHLEtBQU8sT0FFMUJkLE1BQU1VLFFBQVE0RyxLQUFPLENBQUMvRyxLQUFNK0csS0FFOUJZLE1BQVFBLE1BQU1JLGtCQUNoQixDQUNBLE9BQU9WLGVBQWVQLElBQUtySCxNQUM3QixDQXpHc0MwSSxDQUFhckIsS0FDL0MsUUFBUyxPQStEYixTQUFTdUIsWUFBWXZCLElBQUtySCxPQUN4QixHQUFJcUgsSUFBSXdCLGFBQWMsQ0FDcEIsSUFBSXBXLFNBQVc0VSxJQUFJd0IsYUFBYSxZQUNmLFdBQWJwVyxXQUNGdU4sTUFBUSxJQUFJa0gsTUFBTTRCLE9BQU8sQ0FBQ2hJLEtBQU1yTyxXQUVwQyxDQUVBLElBQUlzVyxLQUFPMUIsSUFBSWdCLFlBQ0YsS0FBVFUsT0FBYUEsS0FBTyxNQUN4QixNQUE0QixtQkFBakIvSSxNQUFNa0IsT0FDUmxCLE1BQU1rQixPQUFPNkgsTUFFYkEsSUFFWCxDQTlFb0JILENBQVl2QixJQUFLckgsT0FFckMsQ0FFQSxTQUFTNEgsZUFBZVAsSUFBS3JILE9BQzNCLElBQUlqUCxLQUFPLENBQUMsRUFDWixPQUFZLE9BQVJzVyxLQUVKelEsS0FBS3FPLEtBQUtqRixNQUFNVSxTQUFTLFNBQVNzSSxXQUFZQyxhQUM1QyxHQUFJQSxZQUFZQyxnQkFDZCxHQUFJbmEsT0FBTzRCLFVBQVV5SCxlQUFldkgsS0FBS3dXLElBQUk4QixXQUFZRixZQUFZMUksTUFBTyxDQUMxRSxJQUFJSCxNQUFRaUgsSUFBSThCLFdBQVdGLFlBQVkxSSxNQUFNSCxNQUM3Q3JQLEtBQUtpWSxZQUFjckIsU0FBUyxDQUFDVSxZQUFhakksT0FBUTZJLFlBQ3BELE1BQ0ssQ0FDTCxJQUFJRyxTQUFXSCxZQUFZaEIsVUFBWVosSUFDckNELG9CQUFvQkMsSUFBSzRCLFlBQVkxSSxNQUNuQzZJLFNBQ0ZyWSxLQUFLaVksWUFBY3JCLFNBQVN5QixTQUFVSCxhQUVyQ0EsWUFBWWhCLFdBQ1EsU0FBckJnQixZQUFZbkksTUFDWGQsTUFBTXFKLElBQUlDLG9CQUNYdlksS0FBS2lZLFlBQWNDLFlBQVlNLGFBRW5DLENBQ0YsSUFwQnlCeFksSUF1QjNCLENBbkhBb1csYUFBYXhXLFVBQVVvUSxNQUFRLFNBQVNzRyxJQUFLckgsT0FDM0MsR0FBZ0MsS0FBNUJxSCxJQUFJbUMsUUFBUSxPQUFRLElBQVksTUFBTyxDQUFDLEVBRTVDLElBQUk3SSxPQUFRcE8sTUFDWixJQUNFLEdBQUl1TCxPQUFPMkwsVUFBVyxDQUNwQixJQUVFOUksUUFEYSxJQUFJOEksV0FDREMsZ0JBQWdCckMsSUFBSyxXQUN2QyxDQUFFLE1BQU9zQyxhQUNQLE1BQU0vUyxLQUFLckUsTUFBTSxJQUFJdEMsTUFBTSwyQkFDekIsQ0FDRTJaLGNBQWVELFlBQ2Z6UixLQUFNLGlCQUNOMlIsV0FBVyxHQUVqQixDQUVBLEdBQStCLE9BQTNCbEosT0FBT21KLGdCQUNULE1BQU1sVCxLQUFLckUsTUFBTSxJQUFJdEMsTUFBTSxnQ0FDekIsQ0FDRWlJLEtBQU0saUJBQ04yUixXQUFXLElBSWpCLElBQUlFLFFBQVVwSixPQUFPNkcscUJBQXFCLGVBQWUsR0FDekQsR0FBSXVDLFVBQVlBLFFBQVFyQyxhQUFlL0csUUFDSCxTQUFoQ29KLFFBQVFyQyxXQUFXVSxVQUNuQjJCLFFBQVFyQyxXQUFXQSxhQUFlL0csUUFDUyxTQUEzQ29KLFFBQVFyQyxXQUFXQSxXQUFXVSxVQUFzQixDQUN0RCxJQUFJNEIsYUFBZUQsUUFBUXZDLHFCQUFxQixPQUFPLElBQU11QyxRQUM3RCxNQUFNblQsS0FBS3JFLE1BQU0sSUFBSXRDLE1BQU0rWixhQUFhM0IsYUFBZSw0QkFDckQsQ0FDRW5RLEtBQU0saUJBQ04yUixXQUFXLEdBRWpCLENBQ0YsS0FBTyxLQUFJL0wsT0FBT21NLGNBWWhCLE1BQU0sSUFBSWhhLE1BQU0sMEJBUmhCLElBSEEwUSxPQUFTLElBQUk3QyxPQUFPbU0sY0FBYyxxQkFDM0JDLE9BQVEsR0FFVnZKLE9BQU93SixRQUFROUMsS0FDbEIsTUFBTXpRLEtBQUtyRSxNQUFNLElBQUl0QyxNQUFNLDJCQUN6QixDQUNFaUksS0FBTSxpQkFDTjJSLFdBQVcsR0FLbkIsQ0FDRixDQUFFLE1BQU9yWCxHQUNQRCxNQUFRQyxDQUNWLENBRUEsR0FBSW1PLFFBQVVBLE9BQU9tSixrQkFBb0J2WCxNQUFPLENBQzlDLElBQUl4QixLQUFPNFcsU0FBU2hILE9BQU9tSixnQkFBaUI5SixPQUN4Q29LLFNBQVdoRCxvQkFBb0J6RyxPQUFPbUosZ0JBQWlCLG9CQUkzRCxPQUhJTSxXQUNGclosS0FBS3NaLGlCQUFtQjFDLFNBQVN5QyxTQUFVLENBQUMsSUFFdkNyWixJQUNULENBQU8sR0FBSXdCLE1BQ1QsTUFBTXFFLEtBQUtyRSxNQUFNQSxPQUFTLElBQUl0QyxNQUFTLENBQUNpSSxLQUFNLGlCQUFrQjJSLFdBQVcsSUFFM0UsTUFBTyxDQUFDLENBRVosRUErSEF2YSxPQUFPQyxRQUFVNFgsd0hDdE1qQjVYLFFBQVEwQixXQStCUixTQUFTQSxXQUFZcVosS0FFbkIsT0FBb0IsRUFBYkEsSUFBSXRaLE9BQWEsRUFBSXVaLGtCQUFrQkQsSUFDaEQsRUFqQ0EvYSxRQUFRaWIsWUFtQ1IsU0FBU0EsWUFBYUYsS0FDcEIsSUFBSWpZLEVBQUdvWSxFQUFHQyxFQUFHQyxJQUFLQyxhQUFjQyxJQUM1QkMsSUFBTVIsSUFBSXRaLE9BQ2Q0WixhQUFlTCxrQkFBa0JELEtBRWpDTyxJQUFNLElBQUlFLElBQVUsRUFBTkQsSUFBVSxFQUFJRixjQUc1QkYsRUFBSUUsYUFBZSxFQUFJRSxJQUFNLEVBQUlBLElBRWpDLElBQUlFLEVBQUksRUFFUixJQUFLM1ksRUFBSSxFQUFHb1ksRUFBSSxFQUFHcFksRUFBSXFZLEVBQUdyWSxHQUFLLEVBQUdvWSxHQUFLLEVBQ3JDRSxJQUFPTSxVQUFVWCxJQUFJWSxXQUFXN1ksS0FBTyxHQUFPNFksVUFBVVgsSUFBSVksV0FBVzdZLEVBQUksS0FBTyxHQUFPNFksVUFBVVgsSUFBSVksV0FBVzdZLEVBQUksS0FBTyxFQUFLNFksVUFBVVgsSUFBSVksV0FBVzdZLEVBQUksSUFDL0p3WSxJQUFJRyxLQUFRTCxLQUFPLEdBQU0sSUFDekJFLElBQUlHLEtBQVFMLEtBQU8sRUFBSyxJQUN4QkUsSUFBSUcsS0FBYSxJQUFOTCxJQUdRLElBQWpCQyxjQUNGRCxJQUFPTSxVQUFVWCxJQUFJWSxXQUFXN1ksS0FBTyxFQUFNNFksVUFBVVgsSUFBSVksV0FBVzdZLEVBQUksS0FBTyxFQUNqRndZLElBQUlHLEtBQWEsSUFBTkwsS0FDZSxJQUFqQkMsZUFDVEQsSUFBT00sVUFBVVgsSUFBSVksV0FBVzdZLEtBQU8sR0FBTzRZLFVBQVVYLElBQUlZLFdBQVc3WSxFQUFJLEtBQU8sRUFBTTRZLFVBQVVYLElBQUlZLFdBQVc3WSxFQUFJLEtBQU8sRUFDNUh3WSxJQUFJRyxLQUFRTCxLQUFPLEVBQUssSUFDeEJFLElBQUlHLEtBQWEsSUFBTkwsS0FHYixPQUFPRSxHQUNULEVBL0RBdGIsUUFBUTRiLGNBK0VSLFNBQVNBLGNBQWVDLE9BU3RCLElBUkEsSUFBSVQsSUFDQUcsSUFBTU0sTUFBTXBhLE9BQ1pxYSxXQUFhUCxJQUFNLEVBQ25CM0osT0FBUyxHQUNUbUssTUFBUSxHQUlIalosRUFBSSxFQUFHa1osS0FBT1QsSUFBTU8sV0FBWWhaLEVBQUlrWixLQUFNbFosR0FIOUIsTUFJbkJpWixNQUFNek0sS0FBSzJNLFlBQVlKLE1BQU8vWSxFQUFJQSxFQUpmLE1BSXFDa1osS0FBT0EsS0FBUWxaLEVBSnBELFFBUUYsSUFBZmdaLFlBQ0ZWLElBQU1TLE1BQU1OLElBQU0sR0FDbEIzSixRQUFVc0ssT0FBT2QsS0FBTyxHQUN4QnhKLFFBQVVzSyxPQUFRZCxLQUFPLEVBQUssSUFDOUJ4SixRQUFVLE1BQ2MsSUFBZmtLLGFBQ1RWLEtBQU9TLE1BQU1OLElBQU0sSUFBTSxHQUFNTSxNQUFNTixJQUFNLEdBQzNDM0osUUFBVXNLLE9BQU9kLEtBQU8sSUFDeEJ4SixRQUFVc0ssT0FBUWQsS0FBTyxFQUFLLElBQzlCeEosUUFBVXNLLE9BQVFkLEtBQU8sRUFBSyxJQUM5QnhKLFFBQVUsS0FLWixPQUZBbUssTUFBTXpNLEtBQUtzQyxRQUVKbUssTUFBTTNOLEtBQUssR0FDcEIsRUF0R0EsSUFMQSxJQUFJOE4sT0FBUyxHQUNUUixVQUFZLEdBQ1pGLElBQTRCLG9CQUFmNVosV0FBNkJBLFdBQWF1YSxNQUV2RHhULEtBQU8sbUVBQ0Y3RixFQUFJLEVBQXNCQSxFQUFiNkYsS0FBd0I3RixFQUM1Q29aLE9BQU9wWixHQUFLNkYsS0FBSzdGLEdBQ2pCNFksVUFBVS9TLEtBQUtnVCxXQUFXN1ksSUFBTUEsRUFNbEMsU0FBU2tZLGtCQUFtQkQsS0FDMUIsSUFBSVEsSUFBTVIsSUFBSXRaLE9BQ2QsR0FBSThaLElBQU0sRUFBSSxFQUNaLE1BQU0sSUFBSTdhLE1BQU0sa0RBUWxCLE1BQXdCLE1BQWpCcWEsSUFBSVEsSUFBTSxHQUFhLEVBQXFCLE1BQWpCUixJQUFJUSxJQUFNLEdBQWEsRUFBSSxDQUMvRCxDQTBDQSxTQUFTVSxZQUFhSixNQUFPTyxNQUFPQyxLQUdsQyxJQUZBLElBQUlqQixJQUxvQmtCLElBTXBCMUssT0FBUyxHQUNKOU8sRUFBSXNaLE1BQU90WixFQUFJdVosSUFBS3ZaLEdBQUssRUFDaENzWSxLQUFPUyxNQUFNL1ksSUFBTSxLQUFPK1ksTUFBTS9ZLEVBQUksSUFBTSxHQUFNK1ksTUFBTS9ZLEVBQUksR0FDMUQ4TyxPQUFPdEMsS0FSRjRNLFFBRGlCSSxJQVNNbEIsTUFSVCxHQUFLLElBQVFjLE9BQU9JLEtBQU8sR0FBSyxJQUFRSixPQUFPSSxLQUFPLEVBQUksSUFBUUosT0FBYSxHQUFOSSxNQVU5RixPQUFPMUssT0FBT3hELEtBQUssR0FDckIsQ0FqRUFzTixVQUFVLElBQUlDLFdBQVcsSUFBTSxHQUMvQkQsVUFBVSxJQUFJQyxXQUFXLElBQU0sbUlDUDNCWSxPQUFTLG9CQUFRLDBEQUNqQkMsUUFBVSxvQkFBUSw0RUFDbEJDLFFBQVUsb0JBQVEsd0RBbUR0QixTQUFTQyxhQUNQLE9BQU81YixPQUFPNmIsb0JBQ1YsV0FDQSxVQUNOLENBRUEsU0FBU0MsYUFBY0MsS0FBTXBiLFFBQzNCLEdBQUlpYixhQUFlamIsT0FDakIsTUFBTSxJQUFJcWIsV0FBVyw4QkFjdkIsT0FaSWhjLE9BQU82YixxQkFFVEUsS0FBTyxJQUFJamIsV0FBV0gsU0FDakJzYixVQUFZamMsT0FBT00sV0FHWCxPQUFUeWIsT0FDRkEsS0FBTyxJQUFJL2IsT0FBT1csU0FFcEJvYixLQUFLcGIsT0FBU0EsUUFHVG9iLElBQ1QsQ0FZQSxTQUFTL2IsT0FBUUcsSUFBSytiLGlCQUFrQnZiLFFBQ3RDLEtBQUtYLE9BQU82YixxQkFBeUJ4YSxnQkFBZ0JyQixRQUNuRCxPQUFPLElBQUlBLE9BQU9HLElBQUsrYixpQkFBa0J2YixRQUkzQyxHQUFtQixpQkFBUlIsSUFBa0IsQ0FDM0IsR0FBZ0MsaUJBQXJCK2IsaUJBQ1QsTUFBTSxJQUFJdGMsTUFDUixxRUFHSixPQUFPdWMsWUFBWTlhLEtBQU1sQixJQUMzQixDQUNBLE9BQU9pYyxLQUFLL2EsS0FBTWxCLElBQUsrYixpQkFBa0J2YixPQUMzQyxDQVVBLFNBQVN5YixLQUFNTCxLQUFNaE0sTUFBT21NLGlCQUFrQnZiLFFBQzVDLEdBQXFCLGlCQUFWb1AsTUFDVCxNQUFNLElBQUlzTSxVQUFVLHlDQUd0QixNQUEyQixvQkFBaEJwYyxhQUErQjhQLGlCQUFpQjlQLFlBNkg3RCxTQUFTcWMsZ0JBQWlCUCxLQUFNUSxNQUFPdmIsV0FBWUwsUUFHakQsR0FGQTRiLE1BQU0zYixXQUVGSSxXQUFhLEdBQUt1YixNQUFNM2IsV0FBYUksV0FDdkMsTUFBTSxJQUFJZ2IsV0FBVyw2QkFHdkIsR0FBSU8sTUFBTTNiLFdBQWFJLFlBQWNMLFFBQVUsR0FDN0MsTUFBTSxJQUFJcWIsV0FBVyw2QkFJckJPLFdBRGlCbkUsSUFBZnBYLGlCQUF1Q29YLElBQVh6WCxPQUN0QixJQUFJRyxXQUFXeWIsWUFDSG5FLElBQVh6WCxPQUNELElBQUlHLFdBQVd5YixNQUFPdmIsWUFFdEIsSUFBSUYsV0FBV3liLE1BQU92YixXQUFZTCxRQUd4Q1gsT0FBTzZiLHFCQUVURSxLQUFPUSxPQUNGTixVQUFZamMsT0FBT00sVUFHeEJ5YixLQUFPUyxjQUFjVCxLQUFNUSxPQUU3QixPQUFPUixJQUNULENBeEpXTyxDQUFnQlAsS0FBTWhNLE1BQU9tTSxpQkFBa0J2YixRQUduQyxpQkFBVm9QLE1Bd0ZiLFNBQVMwTSxXQUFZVixLQUFNVyxPQUFRdGEsVUFDVCxpQkFBYkEsVUFBc0MsS0FBYkEsV0FDbENBLFNBQVcsUUFHYixJQUFLcEMsT0FBTzJjLFdBQVd2YSxVQUNyQixNQUFNLElBQUlpYSxVQUFVLDhDQUd0QixJQUFJMWIsT0FBd0MsRUFBL0JDLFdBQVc4YixPQUFRdGEsVUFDaEMyWixLQUFPRCxhQUFhQyxLQUFNcGIsUUFFMUIsSUFBSWljLE9BQVNiLEtBQUtqWCxNQUFNNFgsT0FBUXRhLFVBRTVCd2EsU0FBV2pjLFNBSWJvYixLQUFPQSxLQUFLcE4sTUFBTSxFQUFHaU8sU0FHdkIsT0FBT2IsSUFDVCxDQTdHV1UsQ0FBV1YsS0FBTWhNLE1BQU9tTSxrQkFzSm5DLFNBQVNXLFdBQVlkLEtBQU1lLEtBQ3pCLEdBQUk5YyxPQUFPK08sU0FBUytOLEtBQU0sQ0FDeEIsSUFBSXJDLElBQTRCLEVBQXRCc0MsUUFBUUQsSUFBSW5jLFFBR3RCLE9BQW9CLEtBRnBCb2IsS0FBT0QsYUFBYUMsS0FBTXRCLE1BRWpCOVosUUFJVG1jLElBQUkvVCxLQUFLZ1QsS0FBTSxFQUFHLEVBQUd0QixLQUhac0IsSUFLWCxDQUVBLEdBQUllLElBQUssQ0FDUCxHQUE0QixvQkFBaEI3YyxhQUNSNmMsSUFBSS9iLGtCQUFrQmQsYUFBZ0IsV0FBWTZjLElBQ3BELE1BQTBCLGlCQUFmQSxJQUFJbmMsUUErOENyQixTQUFTcWMsTUFBT3pQLEtBQ2QsT0FBT0EsS0FBUUEsR0FDakIsQ0FqOUM0Q3lQLENBQU1GLElBQUluYyxRQUN2Q21iLGFBQWFDLEtBQU0sR0FFckJTLGNBQWNULEtBQU1lLEtBRzdCLEdBQWlCLFdBQWJBLElBQUlyTSxNQUFxQmtMLFFBQVFtQixJQUFJcGMsTUFDdkMsT0FBTzhiLGNBQWNULEtBQU1lLElBQUlwYyxLQUVuQyxDQUVBLE1BQU0sSUFBSTJiLFVBQVUscUZBQ3RCLENBL0tTUSxDQUFXZCxLQUFNaE0sTUFDMUIsQ0EyQkEsU0FBU2tOLFdBQVlDLE1BQ25CLEdBQW9CLGlCQUFUQSxLQUNULE1BQU0sSUFBSWIsVUFBVSxvQ0FDZixHQUFJYSxLQUFPLEVBQ2hCLE1BQU0sSUFBSWxCLFdBQVcsdUNBRXpCLENBMEJBLFNBQVNHLFlBQWFKLEtBQU1tQixNQUcxQixHQUZBRCxXQUFXQyxNQUNYbkIsS0FBT0QsYUFBYUMsS0FBTW1CLEtBQU8sRUFBSSxFQUFvQixFQUFoQkgsUUFBUUcsUUFDNUNsZCxPQUFPNmIsb0JBQ1YsSUFBSyxJQUFJN1osRUFBSSxFQUFHQSxFQUFJa2IsT0FBUWxiLEVBQzFCK1osS0FBSy9aLEdBQUssRUFHZCxPQUFPK1osSUFDVCxDQXVDQSxTQUFTUyxjQUFlVCxLQUFNUSxPQUM1QixJQUFJNWIsT0FBUzRiLE1BQU01YixPQUFTLEVBQUksRUFBNEIsRUFBeEJvYyxRQUFRUixNQUFNNWIsUUFDbERvYixLQUFPRCxhQUFhQyxLQUFNcGIsUUFDMUIsSUFBSyxJQUFJcUIsRUFBSSxFQUFHQSxFQUFJckIsT0FBUXFCLEdBQUssRUFDL0IrWixLQUFLL1osR0FBZ0IsSUFBWHVhLE1BQU12YSxHQUVsQixPQUFPK1osSUFDVCxDQThEQSxTQUFTZ0IsUUFBU3BjLFFBR2hCLEdBQUlBLFFBQVVpYixhQUNaLE1BQU0sSUFBSUksV0FBVywwREFDYUosYUFBYXJiLFNBQVMsSUFBTSxVQUVoRSxPQUFnQixFQUFUSSxNQUNULENBcUZBLFNBQVNDLFdBQVk4YixPQUFRdGEsVUFDM0IsR0FBSXBDLE9BQU8rTyxTQUFTMk4sUUFDbEIsT0FBT0EsT0FBTy9iLE9BRWhCLEdBQTJCLG9CQUFoQlYsYUFBNkQsbUJBQXZCQSxZQUFZQyxTQUN4REQsWUFBWUMsT0FBT3djLFNBQVdBLGtCQUFrQnpjLGFBQ25ELE9BQU95YyxPQUFPOWIsV0FFTSxpQkFBWDhiLFNBQ1RBLE9BQVMsR0FBS0EsUUFHaEIsSUFBSWpDLElBQU1pQyxPQUFPL2IsT0FDakIsR0FBWSxJQUFSOFosSUFBVyxPQUFPLEVBSXRCLElBREEsSUFBSTBDLGFBQWMsSUFFaEIsT0FBUS9hLFVBQ04sSUFBSyxRQUNMLElBQUssU0FDTCxJQUFLLFNBQ0gsT0FBT3FZLElBQ1QsSUFBSyxPQUNMLElBQUssUUFDTCxVQUFLckMsRUFDSCxPQUFPZ0YsWUFBWVYsUUFBUS9iLE9BQzdCLElBQUssT0FDTCxJQUFLLFFBQ0wsSUFBSyxVQUNMLElBQUssV0FDSCxPQUFhLEVBQU44WixJQUNULElBQUssTUFDSCxPQUFPQSxNQUFRLEVBQ2pCLElBQUssU0FDSCxPQUFPNEMsY0FBY1gsUUFBUS9iLE9BQy9CLFFBQ0UsR0FBSXdjLFlBQWEsT0FBT0MsWUFBWVYsUUFBUS9iLE9BQzVDeUIsVUFBWSxHQUFLQSxVQUFVekMsY0FDM0J3ZCxhQUFjLEVBR3RCLENBR0EsU0FBU0csYUFBY2xiLFNBQVVrWixNQUFPQyxLQUN0QyxJQUFJNEIsYUFBYyxFQWNsQixTQUxjL0UsSUFBVmtELE9BQXVCQSxNQUFRLEtBQ2pDQSxNQUFRLEdBSU5BLE1BQVFqYSxLQUFLVixPQUNmLE1BQU8sR0FPVCxTQUpZeVgsSUFBUm1ELEtBQXFCQSxJQUFNbGEsS0FBS1YsVUFDbEM0YSxJQUFNbGEsS0FBS1YsUUFHVDRhLEtBQU8sRUFDVCxNQUFPLEdBT1QsSUFIQUEsT0FBUyxLQUNURCxTQUFXLEdBR1QsTUFBTyxHQUtULElBRktsWixXQUFVQSxTQUFXLFVBR3hCLE9BQVFBLFVBQ04sSUFBSyxNQUNILE9BQU9tYixTQUFTbGMsS0FBTWlhLE1BQU9DLEtBRS9CLElBQUssT0FDTCxJQUFLLFFBQ0gsT0FBT2lDLFVBQVVuYyxLQUFNaWEsTUFBT0MsS0FFaEMsSUFBSyxRQUNILE9BQU9rQyxXQUFXcGMsS0FBTWlhLE1BQU9DLEtBRWpDLElBQUssU0FDTCxJQUFLLFNBQ0gsT0FBT21DLFlBQVlyYyxLQUFNaWEsTUFBT0MsS0FFbEMsSUFBSyxTQUNILE9BQU9vQyxZQUFZdGMsS0FBTWlhLE1BQU9DLEtBRWxDLElBQUssT0FDTCxJQUFLLFFBQ0wsSUFBSyxVQUNMLElBQUssV0FDSCxPQUFPcUMsYUFBYXZjLEtBQU1pYSxNQUFPQyxLQUVuQyxRQUNFLEdBQUk0QixZQUFhLE1BQU0sSUFBSWQsVUFBVSxxQkFBdUJqYSxVQUM1REEsVUFBWUEsU0FBVyxJQUFJekMsY0FDM0J3ZCxhQUFjLEVBR3RCLENBTUEsU0FBU1UsS0FBTWhiLEVBQUdxSyxFQUFHNFEsR0FDbkIsSUFBSTliLEVBQUlhLEVBQUVxSyxHQUNWckssRUFBRXFLLEdBQUtySyxFQUFFaWIsR0FDVGpiLEVBQUVpYixHQUFLOWIsQ0FDVCxDQWtJQSxTQUFTK2IscUJBQXNCaGQsT0FBUXdNLElBQUt2TSxXQUFZb0IsU0FBVTRiLEtBRWhFLEdBQXNCLElBQWxCamQsT0FBT0osT0FBYyxPQUFRLEVBbUJqQyxHQWhCMEIsaUJBQWZLLFlBQ1RvQixTQUFXcEIsV0FDWEEsV0FBYSxHQUNKQSxXQUFhLFdBQ3RCQSxXQUFhLFdBQ0pBLFlBQWMsYUFDdkJBLFlBQWMsWUFFaEJBLFlBQWNBLFdBQ1ZpZCxNQUFNamQsY0FFUkEsV0FBYWdkLElBQU0sRUFBS2pkLE9BQU9KLE9BQVMsR0FJdENLLFdBQWEsSUFBR0EsV0FBYUQsT0FBT0osT0FBU0ssWUFDN0NBLFlBQWNELE9BQU9KLE9BQVEsQ0FDL0IsR0FBSXFkLElBQUssT0FBUSxFQUNaaGQsV0FBYUQsT0FBT0osT0FBUyxDQUNwQyxNQUFPLEdBQUlLLFdBQWEsRUFBRyxDQUN6QixJQUFJZ2QsSUFDQyxPQUFRLEVBREpoZCxXQUFhLENBRXhCLENBUUEsR0FMbUIsaUJBQVJ1TSxNQUNUQSxJQUFNdk4sT0FBT29jLEtBQUs3TyxJQUFLbkwsV0FJckJwQyxPQUFPK08sU0FBU3hCLEtBRWxCLE9BQW1CLElBQWZBLElBQUk1TSxRQUNFLEVBRUh1ZCxhQUFhbmQsT0FBUXdNLElBQUt2TSxXQUFZb0IsU0FBVTRiLEtBQ2xELEdBQW1CLGlCQUFSelEsSUFFaEIsT0FEQUEsS0FBWSxJQUNSdk4sT0FBTzZiLHFCQUNpQyxtQkFBakMvYSxXQUFXUixVQUFVRCxRQUMxQjJkLElBQ0tsZCxXQUFXUixVQUFVRCxRQUFRRyxLQUFLTyxPQUFRd00sSUFBS3ZNLFlBRS9DRixXQUFXUixVQUFVNmQsWUFBWTNkLEtBQUtPLE9BQVF3TSxJQUFLdk0sWUFHdkRrZCxhQUFhbmQsT0FBUSxDQUFFd00sS0FBT3ZNLFdBQVlvQixTQUFVNGIsS0FHN0QsTUFBTSxJQUFJM0IsVUFBVSx1Q0FDdEIsQ0FFQSxTQUFTNkIsYUFBYzFELElBQUtqTixJQUFLdk0sV0FBWW9CLFNBQVU0YixLQUNyRCxJQTBCSWhjLEVBMUJBb2MsVUFBWSxFQUNaQyxVQUFZN0QsSUFBSTdaLE9BQ2hCMmQsVUFBWS9RLElBQUk1TSxPQUVwQixRQUFpQnlYLElBQWJoVyxXQUVlLFVBRGpCQSxTQUFXcU4sT0FBT3JOLFVBQVV6QyxnQkFDWSxVQUFieUMsVUFDVixZQUFiQSxVQUF1QyxhQUFiQSxVQUF5QixDQUNyRCxHQUFJb1ksSUFBSTdaLE9BQVMsR0FBSzRNLElBQUk1TSxPQUFTLEVBQ2pDLE9BQVEsRUFFVnlkLFVBQVksRUFDWkMsV0FBYSxFQUNiQyxXQUFhLEVBQ2J0ZCxZQUFjLENBQ2hCLENBR0YsU0FBU3VkLEtBQU1DLElBQUt4YyxHQUNsQixPQUFrQixJQUFkb2MsVUFDS0ksSUFBSXhjLEdBRUp3YyxJQUFJek0sYUFBYS9QLEVBQUlvYyxVQUVoQyxDQUdBLEdBQUlKLElBQUssQ0FDUCxJQUFJUyxZQUFjLEVBQ2xCLElBQUt6YyxFQUFJaEIsV0FBWWdCLEVBQUlxYyxVQUFXcmMsSUFDbEMsR0FBSXVjLEtBQUsvRCxJQUFLeFksS0FBT3VjLEtBQUtoUixLQUFxQixJQUFoQmtSLFdBQW9CLEVBQUl6YyxFQUFJeWMsYUFFekQsSUFEb0IsSUFBaEJBLGFBQW1CQSxXQUFhemMsR0FDaENBLEVBQUl5YyxXQUFhLElBQU1ILFVBQVcsT0FBT0csV0FBYUwsZUFFdEMsSUFBaEJLLGFBQW1CemMsR0FBS0EsRUFBSXljLFlBQ2hDQSxZQUFjLENBR3BCLE1BRUUsSUFESXpkLFdBQWFzZCxVQUFZRCxZQUFXcmQsV0FBYXFkLFVBQVlDLFdBQzVEdGMsRUFBSWhCLFdBQVlnQixHQUFLLEVBQUdBLElBQUssQ0FFaEMsSUFEQSxJQUFJMGMsT0FBUSxFQUNIdEUsRUFBSSxFQUFHQSxFQUFJa0UsVUFBV2xFLElBQzdCLEdBQUltRSxLQUFLL0QsSUFBS3hZLEVBQUlvWSxLQUFPbUUsS0FBS2hSLElBQUs2TSxHQUFJLENBQ3JDc0UsT0FBUSxFQUNSLEtBQ0YsQ0FFRixHQUFJQSxNQUFPLE9BQU8xYyxDQUNwQixDQUdGLE9BQVEsQ0FDVixDQWNBLFNBQVMyYyxTQUFVSCxJQUFLOUIsT0FBUS9YLE9BQVFoRSxRQUN0Q2dFLE9BQVNpYSxPQUFPamEsU0FBVyxFQUMzQixJQUFJd0ssVUFBWXFQLElBQUk3ZCxPQUFTZ0UsT0FDeEJoRSxRQUdIQSxPQUFTaWUsT0FBT2plLFNBQ0h3TyxZQUNYeE8sT0FBU3dPLFdBSlh4TyxPQUFTd08sVUFTWCxJQUFJMFAsT0FBU25DLE9BQU8vYixPQUNwQixHQUFJa2UsT0FBUyxHQUFNLEVBQUcsTUFBTSxJQUFJeEMsVUFBVSxzQkFFdEMxYixPQUFTa2UsT0FBUyxJQUNwQmxlLE9BQVNrZSxPQUFTLEdBRXBCLElBQUssSUFBSTdjLEVBQUksRUFBR0EsRUFBSXJCLFNBQVVxQixFQUFHLENBQy9CLElBQUlvUSxPQUFTNUMsU0FBU2tOLE9BQU92SyxPQUFXLEVBQUpuUSxFQUFPLEdBQUksSUFDL0MsR0FBSWljLE1BQU03TCxRQUFTLE9BQU9wUSxFQUMxQndjLElBQUk3WixPQUFTM0MsR0FBS29RLE1BQ3BCLENBQ0EsT0FBT3BRLENBQ1QsQ0FFQSxTQUFTOGMsVUFBV04sSUFBSzlCLE9BQVEvWCxPQUFRaEUsUUFDdkMsT0FBT29lLFdBQVczQixZQUFZVixPQUFROEIsSUFBSTdkLE9BQVNnRSxRQUFTNlosSUFBSzdaLE9BQVFoRSxPQUMzRSxDQUVBLFNBQVNxZSxXQUFZUixJQUFLOUIsT0FBUS9YLE9BQVFoRSxRQUN4QyxPQUFPb2UsV0FxNkJULFNBQVNFLGFBQWNDLEtBRXJCLElBREEsSUFBSUMsVUFBWSxHQUNQbmQsRUFBSSxFQUFHQSxFQUFJa2QsSUFBSXZlLFNBQVVxQixFQUVoQ21kLFVBQVUzUSxLQUF5QixJQUFwQjBRLElBQUlyRSxXQUFXN1ksSUFFaEMsT0FBT21kLFNBQ1QsQ0E1NkJvQkYsQ0FBYXZDLFFBQVM4QixJQUFLN1osT0FBUWhFLE9BQ3ZELENBRUEsU0FBU3llLFlBQWFaLElBQUs5QixPQUFRL1gsT0FBUWhFLFFBQ3pDLE9BQU9xZSxXQUFXUixJQUFLOUIsT0FBUS9YLE9BQVFoRSxPQUN6QyxDQUVBLFNBQVMwZSxZQUFhYixJQUFLOUIsT0FBUS9YLE9BQVFoRSxRQUN6QyxPQUFPb2UsV0FBVzFCLGNBQWNYLFFBQVM4QixJQUFLN1osT0FBUWhFLE9BQ3hELENBRUEsU0FBUzJlLFVBQVdkLElBQUs5QixPQUFRL1gsT0FBUWhFLFFBQ3ZDLE9BQU9vZSxXQWs2QlQsU0FBU1EsZUFBZ0JMLElBQUtNLE9BRzVCLElBRkEsSUFBSXRjLEVBQUd1YyxHQUFJQyxHQUNQUCxVQUFZLEdBQ1BuZCxFQUFJLEVBQUdBLEVBQUlrZCxJQUFJdmUsV0FDakI2ZSxPQUFTLEdBQUssS0FEYXhkLEVBSWhDeWQsSUFEQXZjLEVBQUlnYyxJQUFJckUsV0FBVzdZLEtBQ1QsRUFDVjBkLEdBQUt4YyxFQUFJLElBQ1RpYyxVQUFVM1EsS0FBS2tSLElBQ2ZQLFVBQVUzUSxLQUFLaVIsSUFHakIsT0FBT04sU0FDVCxDQWg3Qm9CSSxDQUFlN0MsT0FBUThCLElBQUk3ZCxPQUFTZ0UsUUFBUzZaLElBQUs3WixPQUFRaEUsT0FDOUUsQ0FpRkEsU0FBU2dkLFlBQWFhLElBQUtsRCxNQUFPQyxLQUNoQyxPQUFjLElBQVZELE9BQWVDLE1BQVFpRCxJQUFJN2QsT0FDdEI4YSxPQUFPWCxjQUFjMEQsS0FFckIvQyxPQUFPWCxjQUFjMEQsSUFBSTdQLE1BQU0yTSxNQUFPQyxLQUVqRCxDQUVBLFNBQVNpQyxVQUFXZ0IsSUFBS2xELE1BQU9DLEtBQzlCQSxJQUFNelgsS0FBSzZiLElBQUluQixJQUFJN2QsT0FBUTRhLEtBSTNCLElBSEEsSUFBSXFFLElBQU0sR0FFTjVkLEVBQUlzWixNQUNEdFosRUFBSXVaLEtBQUssQ0FDZCxJQVFNc0UsV0FBWUMsVUFBV0MsV0FBWUMsY0FSckNDLFVBQVl6QixJQUFJeGMsR0FDaEJrZSxVQUFZLEtBQ1pDLGlCQUFvQkYsVUFBWSxJQUFRLEVBQ3ZDQSxVQUFZLElBQVEsRUFDcEJBLFVBQVksSUFBUSxFQUNyQixFQUVKLEdBQUlqZSxFQUFJbWUsa0JBQW9CNUUsSUFHMUIsT0FBUTRFLGtCQUNOLEtBQUssRUFDQ0YsVUFBWSxNQUNkQyxVQUFZRCxXQUVkLE1BQ0YsS0FBSyxFQUV5QixNQUFWLEtBRGxCSixXQUFhckIsSUFBSXhjLEVBQUksT0FFbkJnZSxlQUE2QixHQUFaQyxZQUFxQixFQUFvQixHQUFiSixZQUN6QixNQUNsQkssVUFBWUYsZUFHaEIsTUFDRixLQUFLLEVBQ0hILFdBQWFyQixJQUFJeGMsRUFBSSxHQUNyQjhkLFVBQVl0QixJQUFJeGMsRUFBSSxHQUNRLE1BQVYsSUFBYjZkLGFBQXNELE1BQVYsSUFBWkMsYUFDbkNFLGVBQTZCLEdBQVpDLFlBQW9CLElBQW9CLEdBQWJKLGFBQXNCLEVBQW1CLEdBQVpDLFdBQ3JELE9BQVVFLGNBQWdCLE9BQVVBLGNBQWdCLFNBQ3RFRSxVQUFZRixlQUdoQixNQUNGLEtBQUssRUFDSEgsV0FBYXJCLElBQUl4YyxFQUFJLEdBQ3JCOGQsVUFBWXRCLElBQUl4YyxFQUFJLEdBQ3BCK2QsV0FBYXZCLElBQUl4YyxFQUFJLEdBQ08sTUFBVixJQUFiNmQsYUFBc0QsTUFBVixJQUFaQyxZQUFzRCxNQUFWLElBQWJDLGNBQ2xFQyxlQUE2QixHQUFaQyxZQUFvQixJQUFxQixHQUFiSixhQUFzQixJQUFtQixHQUFaQyxZQUFxQixFQUFvQixHQUFiQyxZQUNsRixPQUFVQyxjQUFnQixVQUM1Q0UsVUFBWUYsZUFNSixPQUFkRSxXQUdGQSxVQUFZLE1BQ1pDLGlCQUFtQixHQUNWRCxVQUFZLFFBRXJCQSxXQUFhLE1BQ2JOLElBQUlwUixLQUFLMFIsWUFBYyxHQUFLLEtBQVEsT0FDcENBLFVBQVksTUFBcUIsS0FBWkEsV0FHdkJOLElBQUlwUixLQUFLMFIsV0FDVGxlLEdBQUttZSxnQkFDUCxDQUVBLE9BUUYsU0FBU0Msc0JBQXVCQyxZQUM5QixJQUFJNUYsSUFBTTRGLFdBQVcxZixPQUNyQixHQUFJOFosS0FBTzZGLHFCQUNULE9BQU83USxPQUFPOFEsYUFBYUMsTUFBTS9RLE9BQVE0USxZQUkzQyxJQUFJVCxJQUFNLEdBQ041ZCxFQUFJLEVBQ1IsS0FBT0EsRUFBSXlZLEtBQ1RtRixLQUFPblEsT0FBTzhRLGFBQWFDLE1BQ3pCL1EsT0FDQTRRLFdBQVcxUixNQUFNM00sRUFBR0EsR0FBS3NlLHVCQUc3QixPQUFPVixHQUNULENBeEJTUSxDQUFzQlIsSUFDL0IsQ0EvOEJBMWdCLFFBQVEsR0FBU2MsT0FFakJkLFFBQVEsR0FBb0IsR0EwQjVCYyxPQUFPNmIseUJBQXFEekQsSUFBL0Isb0JBQUFxSSxFQUFPNUUsb0JBQ2hDLG9CQUFBNEUsRUFBTzVFLG9CQVFYLFNBQVM2RSxvQkFDUCxJQUNFLElBQUlsRyxJQUFNLElBQUkxWixXQUFXLEdBRXpCLE9BREEwWixJQUFJeUIsVUFBWSxDQUFDQSxVQUFXbmIsV0FBV1IsVUFBV3FnQixJQUFLLFdBQWMsT0FBTyxFQUFHLEdBQzFELEtBQWRuRyxJQUFJbUcsT0FDaUIsbUJBQWpCbkcsSUFBSW9HLFVBQ3VCLElBQWxDcEcsSUFBSW9HLFNBQVMsRUFBRyxHQUFHaGdCLFVBQ3pCLENBQUUsTUFBT3VCLEdBQ1AsT0FBTyxDQUNULENBQ0YsQ0FqQkl1ZSxHQUtpQjlFLGFBa0VyQjViLE9BQU82Z0IsU0FBVyxLQUdsQjdnQixPQUFPOGdCLFNBQVcsU0FBVXRHLEtBRTFCLE9BREFBLElBQUl5QixVQUFZamMsT0FBT00sVUFDaEJrYSxHQUNULEVBMEJBeGEsT0FBT29jLEtBQU8sU0FBVXJNLE1BQU9tTSxpQkFBa0J2YixRQUMvQyxPQUFPeWIsS0FBSyxLQUFNck0sTUFBT21NLGlCQUFrQnZiLE9BQzdDLEVBRUlYLE9BQU82YixzQkFDVDdiLE9BQU9NLFVBQVUyYixVQUFZbmIsV0FBV1IsVUFDeENOLE9BQU9pYyxVQUFZbmIsV0FDRyxvQkFBWGlnQixRQUEwQkEsT0FBT0MsU0FDeENoaEIsT0FBTytnQixPQUFPQyxXQUFhaGhCLFFBRTdCdEIsT0FBT0MsZUFBZXFCLE9BQVErZ0IsT0FBT0MsUUFBUyxDQUM1Q2pSLE1BQU8sS0FDUC9RLGNBQWMsS0FpQ3BCZ0IsT0FBT2loQixNQUFRLFNBQVUvRCxLQUFNZ0UsS0FBTTllLFVBQ25DLE9BckJGLFNBQVM2ZSxNQUFPbEYsS0FBTW1CLEtBQU1nRSxLQUFNOWUsVUFFaEMsT0FEQTZhLFdBQVdDLE1BQ1BBLE1BQVEsRUFDSHBCLGFBQWFDLEtBQU1tQixXQUVmOUUsSUFBVDhJLEtBSXlCLGlCQUFiOWUsU0FDVjBaLGFBQWFDLEtBQU1tQixNQUFNZ0UsS0FBS0EsS0FBTTllLFVBQ3BDMFosYUFBYUMsS0FBTW1CLE1BQU1nRSxLQUFLQSxNQUU3QnBGLGFBQWFDLEtBQU1tQixLQUM1QixDQU9TK0QsQ0FBTSxLQUFNL0QsS0FBTWdFLEtBQU05ZSxTQUNqQyxFQWdCQXBDLE9BQU9tYyxZQUFjLFNBQVVlLE1BQzdCLE9BQU9mLFlBQVksS0FBTWUsS0FDM0IsRUFJQWxkLE9BQU9taEIsZ0JBQWtCLFNBQVVqRSxNQUNqQyxPQUFPZixZQUFZLEtBQU1lLEtBQzNCLEVBZ0hBbGQsT0FBTytPLFNBQVcsU0FBU0EsU0FBVWxNLEdBQ25DLFFBQWUsTUFBTEEsSUFBYUEsRUFBRXVlLFVBQzNCLEVBRUFwaEIsT0FBT3FoQixRQUFVLFNBQVNBLFFBQVN6ZSxFQUFHQyxHQUNwQyxJQUFLN0MsT0FBTytPLFNBQVNuTSxLQUFPNUMsT0FBTytPLFNBQVNsTSxHQUMxQyxNQUFNLElBQUl3WixVQUFVLDZCQUd0QixHQUFJelosSUFBTUMsRUFBRyxPQUFPLEVBS3BCLElBSEEsSUFBSUMsRUFBSUYsRUFBRWpDLE9BQ04yZ0IsRUFBSXplLEVBQUVsQyxPQUVEcUIsRUFBSSxFQUFHeVksSUFBTTNXLEtBQUs2YixJQUFJN2MsRUFBR3dlLEdBQUl0ZixFQUFJeVksTUFBT3pZLEVBQy9DLEdBQUlZLEVBQUVaLEtBQU9hLEVBQUViLEdBQUksQ0FDakJjLEVBQUlGLEVBQUVaLEdBQ05zZixFQUFJemUsRUFBRWIsR0FDTixLQUNGLENBR0YsT0FBSWMsRUFBSXdlLEdBQVcsRUFDZkEsRUFBSXhlLEVBQVUsRUFDWCxDQUNULEVBRUE5QyxPQUFPMmMsV0FBYSxTQUFTQSxXQUFZdmEsVUFDdkMsT0FBUXFOLE9BQU9yTixVQUFVekMsZUFDdkIsSUFBSyxNQUNMLElBQUssT0FDTCxJQUFLLFFBQ0wsSUFBSyxRQUNMLElBQUssU0FDTCxJQUFLLFNBQ0wsSUFBSyxTQUNMLElBQUssT0FDTCxJQUFLLFFBQ0wsSUFBSyxVQUNMLElBQUssV0FDSCxPQUFPLEVBQ1QsUUFDRSxPQUFPLEVBRWIsRUFFQUssT0FBT3VoQixPQUFTLFNBQVNBLE9BQVFDLEtBQU03Z0IsUUFDckMsSUFBS2diLFFBQVE2RixNQUNYLE1BQU0sSUFBSW5GLFVBQVUsK0NBR3RCLEdBQW9CLElBQWhCbUYsS0FBSzdnQixPQUNQLE9BQU9YLE9BQU9paEIsTUFBTSxHQUd0QixJQUFJamYsRUFDSixRQUFlb1csSUFBWHpYLE9BRUYsSUFEQUEsT0FBUyxFQUNKcUIsRUFBSSxFQUFHQSxFQUFJd2YsS0FBSzdnQixTQUFVcUIsRUFDN0JyQixRQUFVNmdCLEtBQUt4ZixHQUFHckIsT0FJdEIsSUFBSUksT0FBU2YsT0FBT21jLFlBQVl4YixRQUM1QjhnQixJQUFNLEVBQ1YsSUFBS3pmLEVBQUksRUFBR0EsRUFBSXdmLEtBQUs3Z0IsU0FBVXFCLEVBQUcsQ0FDaEMsSUFBSXdjLElBQU1nRCxLQUFLeGYsR0FDZixJQUFLaEMsT0FBTytPLFNBQVN5UCxLQUNuQixNQUFNLElBQUluQyxVQUFVLCtDQUV0Qm1DLElBQUl6VixLQUFLaEksT0FBUTBnQixLQUNqQkEsS0FBT2pELElBQUk3ZCxNQUNiLENBQ0EsT0FBT0ksTUFDVCxFQTZDQWYsT0FBT1ksV0FBYUEsV0EwRXBCWixPQUFPTSxVQUFVOGdCLFdBQVksRUFRN0JwaEIsT0FBT00sVUFBVW9oQixPQUFTLFNBQVNBLFNBQ2pDLElBQUlqSCxJQUFNcFosS0FBS1YsT0FDZixHQUFJOFosSUFBTSxHQUFNLEVBQ2QsTUFBTSxJQUFJdUIsV0FBVyw2Q0FFdkIsSUFBSyxJQUFJaGEsRUFBSSxFQUFHQSxFQUFJeVksSUFBS3pZLEdBQUssRUFDNUI2YixLQUFLeGMsS0FBTVcsRUFBR0EsRUFBSSxHQUVwQixPQUFPWCxJQUNULEVBRUFyQixPQUFPTSxVQUFVcWhCLE9BQVMsU0FBU0EsU0FDakMsSUFBSWxILElBQU1wWixLQUFLVixPQUNmLEdBQUk4WixJQUFNLEdBQU0sRUFDZCxNQUFNLElBQUl1QixXQUFXLDZDQUV2QixJQUFLLElBQUloYSxFQUFJLEVBQUdBLEVBQUl5WSxJQUFLelksR0FBSyxFQUM1QjZiLEtBQUt4YyxLQUFNVyxFQUFHQSxFQUFJLEdBQ2xCNmIsS0FBS3hjLEtBQU1XLEVBQUksRUFBR0EsRUFBSSxHQUV4QixPQUFPWCxJQUNULEVBRUFyQixPQUFPTSxVQUFVc2hCLE9BQVMsU0FBU0EsU0FDakMsSUFBSW5ILElBQU1wWixLQUFLVixPQUNmLEdBQUk4WixJQUFNLEdBQU0sRUFDZCxNQUFNLElBQUl1QixXQUFXLDZDQUV2QixJQUFLLElBQUloYSxFQUFJLEVBQUdBLEVBQUl5WSxJQUFLelksR0FBSyxFQUM1QjZiLEtBQUt4YyxLQUFNVyxFQUFHQSxFQUFJLEdBQ2xCNmIsS0FBS3hjLEtBQU1XLEVBQUksRUFBR0EsRUFBSSxHQUN0QjZiLEtBQUt4YyxLQUFNVyxFQUFJLEVBQUdBLEVBQUksR0FDdEI2YixLQUFLeGMsS0FBTVcsRUFBSSxFQUFHQSxFQUFJLEdBRXhCLE9BQU9YLElBQ1QsRUFFQXJCLE9BQU9NLFVBQVVDLFNBQVcsU0FBU0EsV0FDbkMsSUFBSUksT0FBdUIsRUFBZFUsS0FBS1YsT0FDbEIsT0FBZSxJQUFYQSxPQUFxQixHQUNBLElBQXJCa2hCLFVBQVVsaEIsT0FBcUI2YyxVQUFVbmMsS0FBTSxFQUFHVixRQUMvQzJjLGFBQWFrRCxNQUFNbmYsS0FBTXdnQixVQUNsQyxFQUVBN2hCLE9BQU9NLFVBQVV3aEIsT0FBUyxTQUFTQSxPQUFRamYsR0FDekMsSUFBSzdDLE9BQU8rTyxTQUFTbE0sR0FBSSxNQUFNLElBQUl3WixVQUFVLDZCQUM3QyxPQUFJaGIsT0FBU3dCLEdBQ3NCLElBQTVCN0MsT0FBT3FoQixRQUFRaGdCLEtBQU13QixFQUM5QixFQUVBN0MsT0FBT00sVUFBVXloQixRQUFVLFNBQVNBLFVBQ2xDLElBQUk3QyxJQUFNLEdBQ044QyxJQUFNOWlCLFFBQVEsR0FLbEIsT0FKSW1DLEtBQUtWLE9BQVMsSUFDaEJ1ZSxJQUFNN2QsS0FBS2QsU0FBUyxNQUFPLEVBQUd5aEIsS0FBS0MsTUFBTSxTQUFTM1UsS0FBSyxLQUNuRGpNLEtBQUtWLE9BQVNxaEIsTUFBSzlDLEtBQU8sVUFFekIsV0FBYUEsSUFBTSxHQUM1QixFQUVBbGYsT0FBT00sVUFBVStnQixRQUFVLFNBQVNBLFFBQVNhLE9BQVE1RyxNQUFPQyxJQUFLNEcsVUFBV0MsU0FDMUUsSUFBS3BpQixPQUFPK08sU0FBU21ULFFBQ25CLE1BQU0sSUFBSTdGLFVBQVUsNkJBZ0J0QixRQWJjakUsSUFBVmtELFFBQ0ZBLE1BQVEsUUFFRWxELElBQVJtRCxNQUNGQSxJQUFNMkcsT0FBU0EsT0FBT3ZoQixPQUFTLFFBRWZ5WCxJQUFkK0osWUFDRkEsVUFBWSxRQUVFL0osSUFBWmdLLFVBQ0ZBLFFBQVUvZ0IsS0FBS1YsUUFHYjJhLE1BQVEsR0FBS0MsSUFBTTJHLE9BQU92aEIsUUFBVXdoQixVQUFZLEdBQUtDLFFBQVUvZ0IsS0FBS1YsT0FDdEUsTUFBTSxJQUFJcWIsV0FBVyxzQkFHdkIsR0FBSW1HLFdBQWFDLFNBQVc5RyxPQUFTQyxJQUNuQyxPQUFPLEVBRVQsR0FBSTRHLFdBQWFDLFFBQ2YsT0FBUSxFQUVWLEdBQUk5RyxPQUFTQyxJQUNYLE9BQU8sRUFRVCxHQUFJbGEsT0FBUzZnQixPQUFRLE9BQU8sRUFTNUIsSUFQQSxJQUFJcGYsR0FKSnNmLFdBQWEsSUFEYkQsYUFBZSxHQU1YYixHQVBKL0YsT0FBUyxJQURURCxTQUFXLEdBU1BiLElBQU0zVyxLQUFLNmIsSUFBSTdjLEVBQUd3ZSxHQUVsQmUsU0FBV2hoQixLQUFLc04sTUFBTXdULFVBQVdDLFNBQ2pDRSxXQUFhSixPQUFPdlQsTUFBTTJNLE1BQU9DLEtBRTVCdlosRUFBSSxFQUFHQSxFQUFJeVksTUFBT3pZLEVBQ3pCLEdBQUlxZ0IsU0FBU3JnQixLQUFPc2dCLFdBQVd0Z0IsR0FBSSxDQUNqQ2MsRUFBSXVmLFNBQVNyZ0IsR0FDYnNmLEVBQUlnQixXQUFXdGdCLEdBQ2YsS0FDRixDQUdGLE9BQUljLEVBQUl3ZSxHQUFXLEVBQ2ZBLEVBQUl4ZSxFQUFVLEVBQ1gsQ0FDVCxFQTRIQTlDLE9BQU9NLFVBQVVpaUIsU0FBVyxTQUFTQSxTQUFVaFYsSUFBS3ZNLFdBQVlvQixVQUM5RCxPQUFvRCxJQUE3Q2YsS0FBS2hCLFFBQVFrTixJQUFLdk0sV0FBWW9CLFNBQ3ZDLEVBRUFwQyxPQUFPTSxVQUFVRCxRQUFVLFNBQVNBLFFBQVNrTixJQUFLdk0sV0FBWW9CLFVBQzVELE9BQU8yYixxQkFBcUIxYyxLQUFNa00sSUFBS3ZNLFdBQVlvQixVQUFVLEVBQy9ELEVBRUFwQyxPQUFPTSxVQUFVNmQsWUFBYyxTQUFTQSxZQUFhNVEsSUFBS3ZNLFdBQVlvQixVQUNwRSxPQUFPMmIscUJBQXFCMWMsS0FBTWtNLElBQUt2TSxXQUFZb0IsVUFBVSxFQUMvRCxFQWlEQXBDLE9BQU9NLFVBQVV3RSxNQUFRLFNBQVNBLE1BQU80WCxPQUFRL1gsT0FBUWhFLE9BQVF5QixVQUUvRCxRQUFlZ1csSUFBWHpULE9BQ0Z2QyxTQUFXLE9BQ1h6QixPQUFTVSxLQUFLVixPQUNkZ0UsT0FBUyxPQUVKLFFBQWV5VCxJQUFYelgsUUFBMEMsaUJBQVhnRSxPQUN4Q3ZDLFNBQVd1QyxPQUNYaEUsT0FBU1UsS0FBS1YsT0FDZGdFLE9BQVMsTUFFSixLQUFJNmQsU0FBUzdkLFFBV2xCLE1BQU0sSUFBSS9FLE1BQ1IsMkVBWEYrRSxRQUFrQixFQUNkNmQsU0FBUzdoQixTQUNYQSxRQUFrQixPQUNEeVgsSUFBYmhXLFdBQXdCQSxTQUFXLFVBRXZDQSxTQUFXekIsT0FDWEEsWUFBU3lYLEVBT2IsQ0FFQSxJQUFJakosVUFBWTlOLEtBQUtWLE9BQVNnRSxPQUc5QixTQUZleVQsSUFBWHpYLFFBQXdCQSxPQUFTd08sYUFBV3hPLE9BQVN3TyxXQUVwRHVOLE9BQU8vYixPQUFTLElBQU1BLE9BQVMsR0FBS2dFLE9BQVMsSUFBT0EsT0FBU3RELEtBQUtWLE9BQ3JFLE1BQU0sSUFBSXFiLFdBQVcsMENBR2xCNVosV0FBVUEsU0FBVyxRQUcxQixJQURBLElBQUkrYSxhQUFjLElBRWhCLE9BQVEvYSxVQUNOLElBQUssTUFDSCxPQUFPdWMsU0FBU3RkLEtBQU1xYixPQUFRL1gsT0FBUWhFLFFBRXhDLElBQUssT0FDTCxJQUFLLFFBQ0gsT0FBT21lLFVBQVV6ZCxLQUFNcWIsT0FBUS9YLE9BQVFoRSxRQUV6QyxJQUFLLFFBQ0gsT0FBT3FlLFdBQVczZCxLQUFNcWIsT0FBUS9YLE9BQVFoRSxRQUUxQyxJQUFLLFNBQ0wsSUFBSyxTQUNILE9BQU95ZSxZQUFZL2QsS0FBTXFiLE9BQVEvWCxPQUFRaEUsUUFFM0MsSUFBSyxTQUVILE9BQU8wZSxZQUFZaGUsS0FBTXFiLE9BQVEvWCxPQUFRaEUsUUFFM0MsSUFBSyxPQUNMLElBQUssUUFDTCxJQUFLLFVBQ0wsSUFBSyxXQUNILE9BQU8yZSxVQUFVamUsS0FBTXFiLE9BQVEvWCxPQUFRaEUsUUFFekMsUUFDRSxHQUFJd2MsWUFBYSxNQUFNLElBQUlkLFVBQVUscUJBQXVCamEsVUFDNURBLFVBQVksR0FBS0EsVUFBVXpDLGNBQzNCd2QsYUFBYyxFQUd0QixFQUVBbmQsT0FBT00sVUFBVW1pQixPQUFTLFNBQVNBLFNBQ2pDLE1BQU8sQ0FDTGhTLEtBQU0sU0FDTi9QLEtBQU0yYSxNQUFNL2EsVUFBVXFPLE1BQU1uTyxLQUFLYSxLQUFLcWhCLE1BQVFyaEIsS0FBTSxHQUV4RCxFQXNGQSxJQUFJaWYscUJBQXVCLEtBb0IzQixTQUFTN0MsV0FBWWUsSUFBS2xELE1BQU9DLEtBQy9CLElBQUlvSCxJQUFNLEdBQ1ZwSCxJQUFNelgsS0FBSzZiLElBQUluQixJQUFJN2QsT0FBUTRhLEtBRTNCLElBQUssSUFBSXZaLEVBQUlzWixNQUFPdFosRUFBSXVaLE1BQU92WixFQUM3QjJnQixLQUFPbFQsT0FBTzhRLGFBQXNCLElBQVQvQixJQUFJeGMsSUFFakMsT0FBTzJnQixHQUNULENBRUEsU0FBU2pGLFlBQWFjLElBQUtsRCxNQUFPQyxLQUNoQyxJQUFJb0gsSUFBTSxHQUNWcEgsSUFBTXpYLEtBQUs2YixJQUFJbkIsSUFBSTdkLE9BQVE0YSxLQUUzQixJQUFLLElBQUl2WixFQUFJc1osTUFBT3RaLEVBQUl1WixNQUFPdlosRUFDN0IyZ0IsS0FBT2xULE9BQU84USxhQUFhL0IsSUFBSXhjLElBRWpDLE9BQU8yZ0IsR0FDVCxDQUVBLFNBQVNwRixTQUFVaUIsSUFBS2xELE1BQU9DLEtBQzdCLElBQUlkLElBQU0rRCxJQUFJN2QsU0FFVDJhLE9BQVNBLE1BQVEsS0FBR0EsTUFBUSxLQUM1QkMsS0FBT0EsSUFBTSxHQUFLQSxJQUFNZCxPQUFLYyxJQUFNZCxLQUd4QyxJQURBLElBQUl6VyxJQUFNLEdBQ0RoQyxFQUFJc1osTUFBT3RaLEVBQUl1WixNQUFPdlosRUFDN0JnQyxLQUFPNGUsTUFBTXBFLElBQUl4YyxJQUVuQixPQUFPZ0MsR0FDVCxDQUVBLFNBQVM0WixhQUFjWSxJQUFLbEQsTUFBT0MsS0FHakMsSUFGQSxJQUFJek0sTUFBUTBQLElBQUk3UCxNQUFNMk0sTUFBT0MsS0FDekJxRSxJQUFNLEdBQ0Q1ZCxFQUFJLEVBQUdBLEVBQUk4TSxNQUFNbk8sT0FBUXFCLEdBQUssRUFDckM0ZCxLQUFPblEsT0FBTzhRLGFBQWF6UixNQUFNOU0sR0FBb0IsSUFBZjhNLE1BQU05TSxFQUFJLElBRWxELE9BQU80ZCxHQUNULENBeUNBLFNBQVNpRCxZQUFhbGUsT0FBUW1lLElBQUtuaUIsUUFDakMsR0FBS2dFLE9BQVMsR0FBTyxHQUFLQSxPQUFTLEVBQUcsTUFBTSxJQUFJcVgsV0FBVyxzQkFDM0QsR0FBSXJYLE9BQVNtZSxJQUFNbmlCLE9BQVEsTUFBTSxJQUFJcWIsV0FBVyx3Q0FDbEQsQ0E4SkEsU0FBUytHLFNBQVV2RSxJQUFLek8sTUFBT3BMLE9BQVFtZSxJQUFLZCxJQUFLckMsS0FDL0MsSUFBSzNmLE9BQU8rTyxTQUFTeVAsS0FBTSxNQUFNLElBQUluQyxVQUFVLCtDQUMvQyxHQUFJdE0sTUFBUWlTLEtBQU9qUyxNQUFRNFAsSUFBSyxNQUFNLElBQUkzRCxXQUFXLHFDQUNyRCxHQUFJclgsT0FBU21lLElBQU10RSxJQUFJN2QsT0FBUSxNQUFNLElBQUlxYixXQUFXLHFCQUN0RCxDQWlEQSxTQUFTZ0gsa0JBQW1CeEUsSUFBS3pPLE1BQU9wTCxPQUFRc2UsY0FDMUNsVCxNQUFRLElBQUdBLE1BQVEsTUFBU0EsTUFBUSxHQUN4QyxJQUFLLElBQUkvTixFQUFJLEVBQUdvWSxFQUFJdFcsS0FBSzZiLElBQUluQixJQUFJN2QsT0FBU2dFLE9BQVEsR0FBSTNDLEVBQUlvWSxJQUFLcFksRUFDN0R3YyxJQUFJN1osT0FBUzNDLElBQU0rTixNQUFTLEtBQVMsR0FBS2tULGFBQWVqaEIsRUFBSSxFQUFJQSxNQUNsQyxHQUE1QmloQixhQUFlamhCLEVBQUksRUFBSUEsRUFFOUIsQ0E0QkEsU0FBU2toQixrQkFBbUIxRSxJQUFLek8sTUFBT3BMLE9BQVFzZSxjQUMxQ2xULE1BQVEsSUFBR0EsTUFBUSxXQUFhQSxNQUFRLEdBQzVDLElBQUssSUFBSS9OLEVBQUksRUFBR29ZLEVBQUl0VyxLQUFLNmIsSUFBSW5CLElBQUk3ZCxPQUFTZ0UsT0FBUSxHQUFJM0MsRUFBSW9ZLElBQUtwWSxFQUM3RHdjLElBQUk3WixPQUFTM0MsR0FBTStOLFFBQXVDLEdBQTVCa1QsYUFBZWpoQixFQUFJLEVBQUlBLEdBQVUsR0FFbkUsQ0FpSkEsU0FBU21oQixhQUFjM0UsSUFBS3pPLE1BQU9wTCxPQUFRbWUsSUFBS2QsSUFBS3JDLEtBQ25ELEdBQUloYixPQUFTbWUsSUFBTXRFLElBQUk3ZCxPQUFRLE1BQU0sSUFBSXFiLFdBQVcsc0JBQ3BELEdBQUlyWCxPQUFTLEVBQUcsTUFBTSxJQUFJcVgsV0FBVyxxQkFDdkMsQ0FFQSxTQUFTb0gsV0FBWTVFLElBQUt6TyxNQUFPcEwsT0FBUXNlLGFBQWNJLFVBS3JELE9BSktBLFVBQ0hGLGFBQWEzRSxJQUFLek8sRUFBT3BMLE9BQVEsR0FFbkMrVyxRQUFRNVcsTUFBTTBaLElBQUt6TyxNQUFPcEwsT0FBUXNlLGFBQWMsR0FBSSxHQUM3Q3RlLE9BQVMsQ0FDbEIsQ0FVQSxTQUFTMmUsWUFBYTlFLElBQUt6TyxNQUFPcEwsT0FBUXNlLGFBQWNJLFVBS3RELE9BSktBLFVBQ0hGLGFBQWEzRSxJQUFLek8sRUFBT3BMLE9BQVEsR0FFbkMrVyxRQUFRNVcsTUFBTTBaLElBQUt6TyxNQUFPcEwsT0FBUXNlLGFBQWMsR0FBSSxHQUM3Q3RlLE9BQVMsQ0FDbEIsQ0FoZEEzRSxPQUFPTSxVQUFVcU8sTUFBUSxTQUFTQSxNQUFPMk0sTUFBT0MsS0FDOUMsSUFvQklnSSxPQXBCQTlJLElBQU1wWixLQUFLVixPQXFCZixJQXBCQTJhLFFBQVVBLE9BR0UsR0FDVkEsT0FBU2IsS0FDRyxJQUFHYSxNQUFRLEdBQ2RBLE1BQVFiLE1BQ2pCYSxNQUFRYixNQU5WYyxTQUFjbkQsSUFBUm1ELElBQW9CZCxNQUFRYyxLQVN4QixHQUNSQSxLQUFPZCxLQUNHLElBQUdjLElBQU0sR0FDVkEsSUFBTWQsTUFDZmMsSUFBTWQsS0FHSmMsSUFBTUQsUUFBT0MsSUFBTUQsT0FHbkJ0YixPQUFPNmIscUJBQ1QwSCxPQUFTbGlCLEtBQUt1ZixTQUFTdEYsTUFBT0MsTUFDdkJVLFVBQVlqYyxPQUFPTSxjQUNyQixDQUNMLElBQUlrakIsU0FBV2pJLElBQU1ELE1BQ3JCaUksT0FBUyxJQUFJdmpCLE9BQU93akIsY0FBVXBMLEdBQzlCLElBQUssSUFBSXBXLEVBQUksRUFBR0EsRUFBSXdoQixXQUFZeGhCLEVBQzlCdWhCLE9BQU92aEIsR0FBS1gsS0FBS1csRUFBSXNaLE1BRXpCLENBRUEsT0FBT2lJLE1BQ1QsRUFVQXZqQixPQUFPTSxVQUFVbWpCLFdBQWEsU0FBU0EsV0FBWTllLE9BQVEvRCxXQUFZeWlCLFVBQ3JFMWUsUUFBa0IsRUFDbEIvRCxZQUEwQixFQUNyQnlpQixVQUFVUixZQUFZbGUsT0FBUS9ELFdBQVlTLEtBQUtWLFFBS3BELElBSEEsSUFBSTRNLElBQU1sTSxLQUFLc0QsUUFDWCtlLElBQU0sRUFDTjFoQixFQUFJLElBQ0NBLEVBQUlwQixhQUFlOGlCLEtBQU8sTUFDakNuVyxLQUFPbE0sS0FBS3NELE9BQVMzQyxHQUFLMGhCLElBRzVCLE9BQU9uVyxHQUNULEVBRUF2TixPQUFPTSxVQUFVcWpCLFdBQWEsU0FBU0EsV0FBWWhmLE9BQVEvRCxXQUFZeWlCLFVBQ3JFMWUsUUFBa0IsRUFDbEIvRCxZQUEwQixFQUNyQnlpQixVQUNIUixZQUFZbGUsT0FBUS9ELFdBQVlTLEtBQUtWLFFBS3ZDLElBRkEsSUFBSTRNLElBQU1sTSxLQUFLc0QsU0FBVy9ELFlBQ3RCOGlCLElBQU0sRUFDSDlpQixXQUFhLElBQU04aUIsS0FBTyxNQUMvQm5XLEtBQU9sTSxLQUFLc0QsU0FBVy9ELFlBQWM4aUIsSUFHdkMsT0FBT25XLEdBQ1QsRUFFQXZOLE9BQU9NLFVBQVVxUixVQUFZLFNBQVNBLFVBQVdoTixPQUFRMGUsVUFFdkQsT0FES0EsVUFBVVIsWUFBWWxlLE9BQVEsRUFBR3RELEtBQUtWLFFBQ3BDVSxLQUFLc0QsT0FDZCxFQUVBM0UsT0FBT00sVUFBVXNqQixhQUFlLFNBQVNBLGFBQWNqZixPQUFRMGUsVUFFN0QsT0FES0EsVUFBVVIsWUFBWWxlLE9BQVEsRUFBR3RELEtBQUtWLFFBQ3BDVSxLQUFLc0QsUUFBV3RELEtBQUtzRCxPQUFTLElBQU0sQ0FDN0MsRUFFQTNFLE9BQU9NLFVBQVV5UixhQUFlLFNBQVNBLGFBQWNwTixPQUFRMGUsVUFFN0QsT0FES0EsVUFBVVIsWUFBWWxlLE9BQVEsRUFBR3RELEtBQUtWLFFBQ25DVSxLQUFLc0QsU0FBVyxFQUFLdEQsS0FBS3NELE9BQVMsRUFDN0MsRUFFQTNFLE9BQU9NLFVBQVV1akIsYUFBZSxTQUFTQSxhQUFjbGYsT0FBUTBlLFVBRzdELE9BRktBLFVBQVVSLFlBQVlsZSxPQUFRLEVBQUd0RCxLQUFLVixTQUVsQ1UsS0FBS3NELFFBQ1R0RCxLQUFLc0QsT0FBUyxJQUFNLEVBQ3BCdEQsS0FBS3NELE9BQVMsSUFBTSxJQUNELFNBQW5CdEQsS0FBS3NELE9BQVMsRUFDckIsRUFFQTNFLE9BQU9NLFVBQVVnUyxhQUFlLFNBQVNBLGFBQWMzTixPQUFRMGUsVUFHN0QsT0FGS0EsVUFBVVIsWUFBWWxlLE9BQVEsRUFBR3RELEtBQUtWLFFBRXBCLFNBQWZVLEtBQUtzRCxTQUNUdEQsS0FBS3NELE9BQVMsSUFBTSxHQUNyQnRELEtBQUtzRCxPQUFTLElBQU0sRUFDckJ0RCxLQUFLc0QsT0FBUyxHQUNsQixFQUVBM0UsT0FBT00sVUFBVXdqQixVQUFZLFNBQVNBLFVBQVduZixPQUFRL0QsV0FBWXlpQixVQUNuRTFlLFFBQWtCLEVBQ2xCL0QsWUFBMEIsRUFDckJ5aUIsVUFBVVIsWUFBWWxlLE9BQVEvRCxXQUFZUyxLQUFLVixRQUtwRCxJQUhBLElBQUk0TSxJQUFNbE0sS0FBS3NELFFBQ1grZSxJQUFNLEVBQ04xaEIsRUFBSSxJQUNDQSxFQUFJcEIsYUFBZThpQixLQUFPLE1BQ2pDblcsS0FBT2xNLEtBQUtzRCxPQUFTM0MsR0FBSzBoQixJQU01QixPQUZJblcsTUFGSm1XLEtBQU8sT0FFU25XLEtBQU96SixLQUFLTSxJQUFJLEVBQUcsRUFBSXhELGFBRWhDMk0sR0FDVCxFQUVBdk4sT0FBT00sVUFBVXlqQixVQUFZLFNBQVNBLFVBQVdwZixPQUFRL0QsV0FBWXlpQixVQUNuRTFlLFFBQWtCLEVBQ2xCL0QsWUFBMEIsRUFDckJ5aUIsVUFBVVIsWUFBWWxlLE9BQVEvRCxXQUFZUyxLQUFLVixRQUtwRCxJQUhBLElBQUlxQixFQUFJcEIsV0FDSjhpQixJQUFNLEVBQ05uVyxJQUFNbE0sS0FBS3NELFNBQVczQyxHQUNuQkEsRUFBSSxJQUFNMGhCLEtBQU8sTUFDdEJuVyxLQUFPbE0sS0FBS3NELFNBQVczQyxHQUFLMGhCLElBTTlCLE9BRkluVyxNQUZKbVcsS0FBTyxPQUVTblcsS0FBT3pKLEtBQUtNLElBQUksRUFBRyxFQUFJeEQsYUFFaEMyTSxHQUNULEVBRUF2TixPQUFPTSxVQUFVc1IsU0FBVyxTQUFTQSxTQUFVak4sT0FBUTBlLFVBRXJELE9BREtBLFVBQVVSLFlBQVlsZSxPQUFRLEVBQUd0RCxLQUFLVixRQUN0QixJQUFmVSxLQUFLc0QsU0FDMEIsR0FBNUIsSUFBT3RELEtBQUtzRCxRQUFVLEdBREt0RCxLQUFLc0QsT0FFM0MsRUFFQTNFLE9BQU9NLFVBQVUwakIsWUFBYyxTQUFTQSxZQUFhcmYsT0FBUTBlLFVBQ3REQSxVQUFVUixZQUFZbGUsT0FBUSxFQUFHdEQsS0FBS1YsUUFDM0MsSUFBSTRNLElBQU1sTSxLQUFLc0QsUUFBV3RELEtBQUtzRCxPQUFTLElBQU0sRUFDOUMsT0FBYyxNQUFONEksSUFBc0IsV0FBTkEsSUFBbUJBLEdBQzdDLEVBRUF2TixPQUFPTSxVQUFVdVIsWUFBYyxTQUFTQSxZQUFhbE4sT0FBUTBlLFVBQ3REQSxVQUFVUixZQUFZbGUsT0FBUSxFQUFHdEQsS0FBS1YsUUFDM0MsSUFBSTRNLElBQU1sTSxLQUFLc0QsT0FBUyxHQUFNdEQsS0FBS3NELFNBQVcsRUFDOUMsT0FBYyxNQUFONEksSUFBc0IsV0FBTkEsSUFBbUJBLEdBQzdDLEVBRUF2TixPQUFPTSxVQUFVMmpCLFlBQWMsU0FBU0EsWUFBYXRmLE9BQVEwZSxVQUczRCxPQUZLQSxVQUFVUixZQUFZbGUsT0FBUSxFQUFHdEQsS0FBS1YsUUFFbkNVLEtBQUtzRCxRQUNWdEQsS0FBS3NELE9BQVMsSUFBTSxFQUNwQnRELEtBQUtzRCxPQUFTLElBQU0sR0FDcEJ0RCxLQUFLc0QsT0FBUyxJQUFNLEVBQ3pCLEVBRUEzRSxPQUFPTSxVQUFVb08sWUFBYyxTQUFTQSxZQUFhL0osT0FBUTBlLFVBRzNELE9BRktBLFVBQVVSLFlBQVlsZSxPQUFRLEVBQUd0RCxLQUFLVixRQUVuQ1UsS0FBS3NELFNBQVcsR0FDckJ0RCxLQUFLc0QsT0FBUyxJQUFNLEdBQ3BCdEQsS0FBS3NELE9BQVMsSUFBTSxFQUNwQnRELEtBQUtzRCxPQUFTLEVBQ25CLEVBRUEzRSxPQUFPTSxVQUFVNGpCLFlBQWMsU0FBU0EsWUFBYXZmLE9BQVEwZSxVQUUzRCxPQURLQSxVQUFVUixZQUFZbGUsT0FBUSxFQUFHdEQsS0FBS1YsUUFDcEMrYSxRQUFRNkMsS0FBS2xkLEtBQU1zRCxRQUFRLEVBQU0sR0FBSSxFQUM5QyxFQUVBM0UsT0FBT00sVUFBVTZqQixZQUFjLFNBQVNBLFlBQWF4ZixPQUFRMGUsVUFFM0QsT0FES0EsVUFBVVIsWUFBWWxlLE9BQVEsRUFBR3RELEtBQUtWLFFBQ3BDK2EsUUFBUTZDLEtBQUtsZCxLQUFNc0QsUUFBUSxFQUFPLEdBQUksRUFDL0MsRUFFQTNFLE9BQU9NLFVBQVU4akIsYUFBZSxTQUFTQSxhQUFjemYsT0FBUTBlLFVBRTdELE9BREtBLFVBQVVSLFlBQVlsZSxPQUFRLEVBQUd0RCxLQUFLVixRQUNwQythLFFBQVE2QyxLQUFLbGQsS0FBTXNELFFBQVEsRUFBTSxHQUFJLEVBQzlDLEVBRUEzRSxPQUFPTSxVQUFVK2pCLGFBQWUsU0FBU0EsYUFBYzFmLE9BQVEwZSxVQUU3RCxPQURLQSxVQUFVUixZQUFZbGUsT0FBUSxFQUFHdEQsS0FBS1YsUUFDcEMrYSxRQUFRNkMsS0FBS2xkLEtBQU1zRCxRQUFRLEVBQU8sR0FBSSxFQUMvQyxFQVFBM0UsT0FBT00sVUFBVWdrQixZQUFjLFNBQVNBLFlBQWF2VSxNQUFPcEwsT0FBUS9ELFdBQVl5aUIsV0FDOUV0VCxPQUFTQSxNQUNUcEwsUUFBa0IsRUFDbEIvRCxZQUEwQixFQUNyQnlpQixXQUVITixTQUFTMWhCLEtBQU0wTyxNQUFPcEwsT0FBUS9ELFdBRGZrRCxLQUFLTSxJQUFJLEVBQUcsRUFBSXhELFlBQWMsRUFDTyxHQUd0RCxJQUFJOGlCLElBQU0sRUFDTjFoQixFQUFJLEVBRVIsSUFEQVgsS0FBS3NELFFBQWtCLElBQVJvTCxRQUNOL04sRUFBSXBCLGFBQWU4aUIsS0FBTyxNQUNqQ3JpQixLQUFLc0QsT0FBUzNDLEdBQU0rTixNQUFRMlQsSUFBTyxJQUdyQyxPQUFPL2UsT0FBUy9ELFVBQ2xCLEVBRUFaLE9BQU9NLFVBQVVpa0IsWUFBYyxTQUFTQSxZQUFheFUsTUFBT3BMLE9BQVEvRCxXQUFZeWlCLFdBQzlFdFQsT0FBU0EsTUFDVHBMLFFBQWtCLEVBQ2xCL0QsWUFBMEIsRUFDckJ5aUIsV0FFSE4sU0FBUzFoQixLQUFNME8sTUFBT3BMLE9BQVEvRCxXQURma0QsS0FBS00sSUFBSSxFQUFHLEVBQUl4RCxZQUFjLEVBQ08sR0FHdEQsSUFBSW9CLEVBQUlwQixXQUFhLEVBQ2pCOGlCLElBQU0sRUFFVixJQURBcmlCLEtBQUtzRCxPQUFTM0MsR0FBYSxJQUFSK04sUUFDVi9OLEdBQUssSUFBTTBoQixLQUFPLE1BQ3pCcmlCLEtBQUtzRCxPQUFTM0MsR0FBTStOLE1BQVEyVCxJQUFPLElBR3JDLE9BQU8vZSxPQUFTL0QsVUFDbEIsRUFFQVosT0FBT00sVUFBVWtrQixXQUFhLFNBQVNBLFdBQVl6VSxNQUFPcEwsT0FBUTBlLFVBTWhFLE9BTEF0VCxPQUFTQSxNQUNUcEwsUUFBa0IsRUFDYjBlLFVBQVVOLFNBQVMxaEIsS0FBTTBPLE1BQU9wTCxPQUFRLEVBQUcsSUFBTSxHQUNqRDNFLE9BQU82YixzQkFBcUI5TCxNQUFRak0sS0FBS0MsTUFBTWdNLFFBQ3BEMU8sS0FBS3NELFFBQW1CLElBQVJvTCxNQUNUcEwsT0FBUyxDQUNsQixFQVVBM0UsT0FBT00sVUFBVW1rQixjQUFnQixTQUFTQSxjQUFlMVUsTUFBT3BMLE9BQVEwZSxVQVV0RSxPQVRBdFQsT0FBU0EsTUFDVHBMLFFBQWtCLEVBQ2IwZSxVQUFVTixTQUFTMWhCLEtBQU0wTyxNQUFPcEwsT0FBUSxFQUFHLE1BQVEsR0FDcEQzRSxPQUFPNmIscUJBQ1R4YSxLQUFLc0QsUUFBbUIsSUFBUm9MLE1BQ2hCMU8sS0FBS3NELE9BQVMsR0FBTW9MLFFBQVUsR0FFOUJpVCxrQkFBa0IzaEIsS0FBTTBPLE1BQU9wTCxRQUFRLEdBRWxDQSxPQUFTLENBQ2xCLEVBRUEzRSxPQUFPTSxVQUFVb2tCLGNBQWdCLFNBQVNBLGNBQWUzVSxNQUFPcEwsT0FBUTBlLFVBVXRFLE9BVEF0VCxPQUFTQSxNQUNUcEwsUUFBa0IsRUFDYjBlLFVBQVVOLFNBQVMxaEIsS0FBTTBPLE1BQU9wTCxPQUFRLEVBQUcsTUFBUSxHQUNwRDNFLE9BQU82YixxQkFDVHhhLEtBQUtzRCxRQUFXb0wsUUFBVSxFQUMxQjFPLEtBQUtzRCxPQUFTLEdBQWMsSUFBUm9MLE9BRXBCaVQsa0JBQWtCM2hCLEtBQU0wTyxNQUFPcEwsUUFBUSxHQUVsQ0EsT0FBUyxDQUNsQixFQVNBM0UsT0FBT00sVUFBVXFrQixjQUFnQixTQUFTQSxjQUFlNVUsTUFBT3BMLE9BQVEwZSxVQVl0RSxPQVhBdFQsT0FBU0EsTUFDVHBMLFFBQWtCLEVBQ2IwZSxVQUFVTixTQUFTMWhCLEtBQU0wTyxNQUFPcEwsT0FBUSxFQUFHLFdBQVksR0FDeEQzRSxPQUFPNmIscUJBQ1R4YSxLQUFLc0QsT0FBUyxHQUFNb0wsUUFBVSxHQUM5QjFPLEtBQUtzRCxPQUFTLEdBQU1vTCxRQUFVLEdBQzlCMU8sS0FBS3NELE9BQVMsR0FBTW9MLFFBQVUsRUFDOUIxTyxLQUFLc0QsUUFBbUIsSUFBUm9MLE9BRWhCbVQsa0JBQWtCN2hCLEtBQU0wTyxNQUFPcEwsUUFBUSxHQUVsQ0EsT0FBUyxDQUNsQixFQUVBM0UsT0FBT00sVUFBVXNrQixjQUFnQixTQUFTQSxjQUFlN1UsTUFBT3BMLE9BQVEwZSxVQVl0RSxPQVhBdFQsT0FBU0EsTUFDVHBMLFFBQWtCLEVBQ2IwZSxVQUFVTixTQUFTMWhCLEtBQU0wTyxNQUFPcEwsT0FBUSxFQUFHLFdBQVksR0FDeEQzRSxPQUFPNmIscUJBQ1R4YSxLQUFLc0QsUUFBV29MLFFBQVUsR0FDMUIxTyxLQUFLc0QsT0FBUyxHQUFNb0wsUUFBVSxHQUM5QjFPLEtBQUtzRCxPQUFTLEdBQU1vTCxRQUFVLEVBQzlCMU8sS0FBS3NELE9BQVMsR0FBYyxJQUFSb0wsT0FFcEJtVCxrQkFBa0I3aEIsS0FBTTBPLE1BQU9wTCxRQUFRLEdBRWxDQSxPQUFTLENBQ2xCLEVBRUEzRSxPQUFPTSxVQUFVdWtCLFdBQWEsU0FBU0EsV0FBWTlVLE1BQU9wTCxPQUFRL0QsV0FBWXlpQixVQUc1RSxHQUZBdFQsT0FBU0EsTUFDVHBMLFFBQWtCLEdBQ2IwZSxTQUFVLENBQ2IsSUFBSXlCLE1BQVFoaEIsS0FBS00sSUFBSSxFQUFHLEVBQUl4RCxXQUFhLEdBRXpDbWlCLFNBQVMxaEIsS0FBTTBPLE1BQU9wTCxPQUFRL0QsV0FBWWtrQixNQUFRLEdBQUlBLE1BQ3hELENBRUEsSUFBSTlpQixFQUFJLEVBQ0owaEIsSUFBTSxFQUNOcUIsSUFBTSxFQUVWLElBREExakIsS0FBS3NELFFBQWtCLElBQVJvTCxRQUNOL04sRUFBSXBCLGFBQWU4aUIsS0FBTyxNQUM3QjNULE1BQVEsR0FBYSxJQUFSZ1YsS0FBc0MsSUFBekIxakIsS0FBS3NELE9BQVMzQyxFQUFJLEtBQzlDK2lCLElBQU0sR0FFUjFqQixLQUFLc0QsT0FBUzNDLElBQU8rTixNQUFRMlQsSUFBUSxHQUFLcUIsSUFBTSxJQUdsRCxPQUFPcGdCLE9BQVMvRCxVQUNsQixFQUVBWixPQUFPTSxVQUFVMGtCLFdBQWEsU0FBU0EsV0FBWWpWLE1BQU9wTCxPQUFRL0QsV0FBWXlpQixVQUc1RSxHQUZBdFQsT0FBU0EsTUFDVHBMLFFBQWtCLEdBQ2IwZSxTQUFVLENBQ2IsSUFBSXlCLE1BQVFoaEIsS0FBS00sSUFBSSxFQUFHLEVBQUl4RCxXQUFhLEdBRXpDbWlCLFNBQVMxaEIsS0FBTTBPLE1BQU9wTCxPQUFRL0QsV0FBWWtrQixNQUFRLEdBQUlBLE1BQ3hELENBRUEsSUFBSTlpQixFQUFJcEIsV0FBYSxFQUNqQjhpQixJQUFNLEVBQ05xQixJQUFNLEVBRVYsSUFEQTFqQixLQUFLc0QsT0FBUzNDLEdBQWEsSUFBUitOLFFBQ1YvTixHQUFLLElBQU0waEIsS0FBTyxNQUNyQjNULE1BQVEsR0FBYSxJQUFSZ1YsS0FBc0MsSUFBekIxakIsS0FBS3NELE9BQVMzQyxFQUFJLEtBQzlDK2lCLElBQU0sR0FFUjFqQixLQUFLc0QsT0FBUzNDLElBQU8rTixNQUFRMlQsSUFBUSxHQUFLcUIsSUFBTSxJQUdsRCxPQUFPcGdCLE9BQVMvRCxVQUNsQixFQUVBWixPQUFPTSxVQUFVMmtCLFVBQVksU0FBU0EsVUFBV2xWLE1BQU9wTCxPQUFRMGUsVUFPOUQsT0FOQXRULE9BQVNBLE1BQ1RwTCxRQUFrQixFQUNiMGUsVUFBVU4sU0FBUzFoQixLQUFNME8sTUFBT3BMLE9BQVEsRUFBRyxLQUFPLEtBQ2xEM0UsT0FBTzZiLHNCQUFxQjlMLE1BQVFqTSxLQUFLQyxNQUFNZ00sUUFDaERBLE1BQVEsSUFBR0EsTUFBUSxJQUFPQSxNQUFRLEdBQ3RDMU8sS0FBS3NELFFBQW1CLElBQVJvTCxNQUNUcEwsT0FBUyxDQUNsQixFQUVBM0UsT0FBT00sVUFBVTRrQixhQUFlLFNBQVNBLGFBQWNuVixNQUFPcEwsT0FBUTBlLFVBVXBFLE9BVEF0VCxPQUFTQSxNQUNUcEwsUUFBa0IsRUFDYjBlLFVBQVVOLFNBQVMxaEIsS0FBTTBPLE1BQU9wTCxPQUFRLEVBQUcsT0FBUyxPQUNyRDNFLE9BQU82YixxQkFDVHhhLEtBQUtzRCxRQUFtQixJQUFSb0wsTUFDaEIxTyxLQUFLc0QsT0FBUyxHQUFNb0wsUUFBVSxHQUU5QmlULGtCQUFrQjNoQixLQUFNME8sTUFBT3BMLFFBQVEsR0FFbENBLE9BQVMsQ0FDbEIsRUFFQTNFLE9BQU9NLFVBQVU2a0IsYUFBZSxTQUFTQSxhQUFjcFYsTUFBT3BMLE9BQVEwZSxVQVVwRSxPQVRBdFQsT0FBU0EsTUFDVHBMLFFBQWtCLEVBQ2IwZSxVQUFVTixTQUFTMWhCLEtBQU0wTyxNQUFPcEwsT0FBUSxFQUFHLE9BQVMsT0FDckQzRSxPQUFPNmIscUJBQ1R4YSxLQUFLc0QsUUFBV29MLFFBQVUsRUFDMUIxTyxLQUFLc0QsT0FBUyxHQUFjLElBQVJvTCxPQUVwQmlULGtCQUFrQjNoQixLQUFNME8sTUFBT3BMLFFBQVEsR0FFbENBLE9BQVMsQ0FDbEIsRUFFQTNFLE9BQU9NLFVBQVU4a0IsYUFBZSxTQUFTQSxhQUFjclYsTUFBT3BMLE9BQVEwZSxVQVlwRSxPQVhBdFQsT0FBU0EsTUFDVHBMLFFBQWtCLEVBQ2IwZSxVQUFVTixTQUFTMWhCLEtBQU0wTyxNQUFPcEwsT0FBUSxFQUFHLFlBQWEsWUFDekQzRSxPQUFPNmIscUJBQ1R4YSxLQUFLc0QsUUFBbUIsSUFBUm9MLE1BQ2hCMU8sS0FBS3NELE9BQVMsR0FBTW9MLFFBQVUsRUFDOUIxTyxLQUFLc0QsT0FBUyxHQUFNb0wsUUFBVSxHQUM5QjFPLEtBQUtzRCxPQUFTLEdBQU1vTCxRQUFVLElBRTlCbVQsa0JBQWtCN2hCLEtBQU0wTyxNQUFPcEwsUUFBUSxHQUVsQ0EsT0FBUyxDQUNsQixFQUVBM0UsT0FBT00sVUFBVStrQixhQUFlLFNBQVNBLGFBQWN0VixNQUFPcEwsT0FBUTBlLFVBYXBFLE9BWkF0VCxPQUFTQSxNQUNUcEwsUUFBa0IsRUFDYjBlLFVBQVVOLFNBQVMxaEIsS0FBTTBPLE1BQU9wTCxPQUFRLEVBQUcsWUFBYSxZQUN6RG9MLE1BQVEsSUFBR0EsTUFBUSxXQUFhQSxNQUFRLEdBQ3hDL1AsT0FBTzZiLHFCQUNUeGEsS0FBS3NELFFBQVdvTCxRQUFVLEdBQzFCMU8sS0FBS3NELE9BQVMsR0FBTW9MLFFBQVUsR0FDOUIxTyxLQUFLc0QsT0FBUyxHQUFNb0wsUUFBVSxFQUM5QjFPLEtBQUtzRCxPQUFTLEdBQWMsSUFBUm9MLE9BRXBCbVQsa0JBQWtCN2hCLEtBQU0wTyxNQUFPcEwsUUFBUSxHQUVsQ0EsT0FBUyxDQUNsQixFQWVBM0UsT0FBT00sVUFBVWdsQixhQUFlLFNBQVNBLGFBQWN2VixNQUFPcEwsT0FBUTBlLFVBQ3BFLE9BQU9ELFdBQVcvaEIsS0FBTTBPLE1BQU9wTCxRQUFRLEVBQU0wZSxTQUMvQyxFQUVBcmpCLE9BQU9NLFVBQVVpbEIsYUFBZSxTQUFTQSxhQUFjeFYsTUFBT3BMLE9BQVEwZSxVQUNwRSxPQUFPRCxXQUFXL2hCLEtBQU0wTyxNQUFPcEwsUUFBUSxFQUFPMGUsU0FDaEQsRUFVQXJqQixPQUFPTSxVQUFVa2xCLGNBQWdCLFNBQVNBLGNBQWV6VixNQUFPcEwsT0FBUTBlLFVBQ3RFLE9BQU9DLFlBQVlqaUIsS0FBTTBPLE1BQU9wTCxRQUFRLEVBQU0wZSxTQUNoRCxFQUVBcmpCLE9BQU9NLFVBQVVtbEIsY0FBZ0IsU0FBU0EsY0FBZTFWLE1BQU9wTCxPQUFRMGUsVUFDdEUsT0FBT0MsWUFBWWppQixLQUFNME8sTUFBT3BMLFFBQVEsRUFBTzBlLFNBQ2pELEVBR0FyakIsT0FBT00sVUFBVXlJLEtBQU8sU0FBU0EsS0FBTW1aLE9BQVF3RCxZQUFhcEssTUFBT0MsS0FRakUsR0FQS0QsUUFBT0EsTUFBUSxHQUNmQyxLQUFlLElBQVJBLE1BQVdBLElBQU1sYSxLQUFLVixRQUM5QitrQixhQUFleEQsT0FBT3ZoQixTQUFRK2tCLFlBQWN4RCxPQUFPdmhCLFFBQ2xEK2tCLGNBQWFBLFlBQWMsR0FDNUJuSyxJQUFNLEdBQUtBLElBQU1ELFFBQU9DLElBQU1ELE9BRzlCQyxNQUFRRCxNQUFPLE9BQU8sRUFDMUIsR0FBc0IsSUFBbEI0RyxPQUFPdmhCLFFBQWdDLElBQWhCVSxLQUFLVixPQUFjLE9BQU8sRUFHckQsR0FBSStrQixZQUFjLEVBQ2hCLE1BQU0sSUFBSTFKLFdBQVcsNkJBRXZCLEdBQUlWLE1BQVEsR0FBS0EsT0FBU2phLEtBQUtWLE9BQVEsTUFBTSxJQUFJcWIsV0FBVyw2QkFDNUQsR0FBSVQsSUFBTSxFQUFHLE1BQU0sSUFBSVMsV0FBVywyQkFHOUJULElBQU1sYSxLQUFLVixTQUFRNGEsSUFBTWxhLEtBQUtWLFFBQzlCdWhCLE9BQU92aEIsT0FBUytrQixZQUFjbkssSUFBTUQsUUFDdENDLElBQU0yRyxPQUFPdmhCLE9BQVMra0IsWUFBY3BLLE9BR3RDLElBQ0l0WixFQURBeVksSUFBTWMsSUFBTUQsTUFHaEIsR0FBSWphLE9BQVM2Z0IsUUFBVTVHLE1BQVFvSyxhQUFlQSxZQUFjbkssSUFFMUQsSUFBS3ZaLEVBQUl5WSxJQUFNLEVBQUd6WSxHQUFLLElBQUtBLEVBQzFCa2dCLE9BQU9sZ0IsRUFBSTBqQixhQUFlcmtCLEtBQUtXLEVBQUlzWixZQUVoQyxHQUFJYixJQUFNLE1BQVN6YSxPQUFPNmIsb0JBRS9CLElBQUs3WixFQUFJLEVBQUdBLEVBQUl5WSxNQUFPelksRUFDckJrZ0IsT0FBT2xnQixFQUFJMGpCLGFBQWVya0IsS0FBS1csRUFBSXNaLFlBR3JDeGEsV0FBV1IsVUFBVXlCLElBQUl2QixLQUN2QjBoQixPQUNBN2dCLEtBQUt1ZixTQUFTdEYsTUFBT0EsTUFBUWIsS0FDN0JpTCxhQUlKLE9BQU9qTCxHQUNULEVBTUF6YSxPQUFPTSxVQUFVNGdCLEtBQU8sU0FBU0EsS0FBTTNULElBQUsrTixNQUFPQyxJQUFLblosVUFFdEQsR0FBbUIsaUJBQVJtTCxJQUFrQixDQVMzQixHQVJxQixpQkFBVitOLE9BQ1RsWixTQUFXa1osTUFDWEEsTUFBUSxFQUNSQyxJQUFNbGEsS0FBS1YsUUFDYSxpQkFBUjRhLE1BQ2hCblosU0FBV21aLElBQ1hBLElBQU1sYSxLQUFLVixRQUVNLElBQWY0TSxJQUFJNU0sT0FBYyxDQUNwQixJQUFJa0gsS0FBTzBGLElBQUlzTixXQUFXLEdBQ3RCaFQsS0FBTyxNQUNUMEYsSUFBTTFGLEtBRVYsQ0FDQSxRQUFpQnVRLElBQWJoVyxVQUE4QyxpQkFBYkEsU0FDbkMsTUFBTSxJQUFJaWEsVUFBVSw2QkFFdEIsR0FBd0IsaUJBQWJqYSxXQUEwQnBDLE9BQU8yYyxXQUFXdmEsVUFDckQsTUFBTSxJQUFJaWEsVUFBVSxxQkFBdUJqYSxTQUUvQyxLQUEwQixpQkFBUm1MLE1BQ2hCQSxLQUFZLEtBSWQsR0FBSStOLE1BQVEsR0FBS2phLEtBQUtWLE9BQVMyYSxPQUFTamEsS0FBS1YsT0FBUzRhLElBQ3BELE1BQU0sSUFBSVMsV0FBVyxzQkFHdkIsR0FBSVQsS0FBT0QsTUFDVCxPQUFPamEsS0FRVCxJQUFJVyxFQUNKLEdBTkFzWixTQUFrQixFQUNsQkMsU0FBY25ELElBQVJtRCxJQUFvQmxhLEtBQUtWLE9BQVM0YSxNQUFRLEVBRTNDaE8sTUFBS0EsSUFBTSxHQUdHLGlCQUFSQSxJQUNULElBQUt2TCxFQUFJc1osTUFBT3RaLEVBQUl1WixNQUFPdlosRUFDekJYLEtBQUtXLEdBQUt1TCxRQUVQLENBQ0wsSUFBSXVCLE1BQVE5TyxPQUFPK08sU0FBU3hCLEtBQ3hCQSxJQUNBNlAsWUFBWSxJQUFJcGQsT0FBT3VOLElBQUtuTCxVQUFVN0IsWUFDdENrYSxJQUFNM0wsTUFBTW5PLE9BQ2hCLElBQUtxQixFQUFJLEVBQUdBLEVBQUl1WixJQUFNRCxRQUFTdFosRUFDN0JYLEtBQUtXLEVBQUlzWixPQUFTeE0sTUFBTTlNLEVBQUl5WSxJQUVoQyxDQUVBLE9BQU9wWixJQUNULEVBS0EsSUFBSXNrQixrQkFBb0IscUJBbUJ4QixTQUFTL0MsTUFBTzFWLEdBQ2QsT0FBSUEsRUFBSSxHQUFXLElBQU1BLEVBQUUzTSxTQUFTLElBQzdCMk0sRUFBRTNNLFNBQVMsR0FDcEIsQ0FFQSxTQUFTNmMsWUFBYVYsT0FBUThDLE9BRTVCLElBQUlVLFVBREpWLE1BQVFBLE9BQVNvRyxJQU1qQixJQUpBLElBQUlqbEIsT0FBUytiLE9BQU8vYixPQUNoQmtsQixjQUFnQixLQUNoQi9XLE1BQVEsR0FFSDlNLEVBQUksRUFBR0EsRUFBSXJCLFNBQVVxQixFQUFHLENBSS9CLElBSEFrZSxVQUFZeEQsT0FBTzdCLFdBQVc3WSxJQUdkLE9BQVVrZSxVQUFZLE1BQVEsQ0FFNUMsSUFBSzJGLGNBQWUsQ0FFbEIsR0FBSTNGLFVBQVksTUFBUSxFQUVqQlYsT0FBUyxJQUFNLEdBQUcxUSxNQUFNTixLQUFLLElBQU0sSUFBTSxLQUM5QyxRQUNGLENBQU8sR0FBSXhNLEVBQUksSUFBTXJCLE9BQVEsRUFFdEI2ZSxPQUFTLElBQU0sR0FBRzFRLE1BQU1OLEtBQUssSUFBTSxJQUFNLEtBQzlDLFFBQ0YsQ0FHQXFYLGNBQWdCM0YsVUFFaEIsUUFDRixDQUdBLEdBQUlBLFVBQVksTUFBUSxFQUNqQlYsT0FBUyxJQUFNLEdBQUcxUSxNQUFNTixLQUFLLElBQU0sSUFBTSxLQUM5Q3FYLGNBQWdCM0YsVUFDaEIsUUFDRixDQUdBQSxVQUFrRSxPQUFyRDJGLGNBQWdCLE9BQVUsR0FBSzNGLFVBQVksTUFDMUQsTUFBVzJGLGdCQUVKckcsT0FBUyxJQUFNLEdBQUcxUSxNQUFNTixLQUFLLElBQU0sSUFBTSxLQU1oRCxHQUhBcVgsY0FBZ0IsS0FHWjNGLFVBQVksSUFBTSxDQUNwQixJQUFLVixPQUFTLEdBQUssRUFBRyxNQUN0QjFRLE1BQU1OLEtBQUswUixVQUNiLE1BQU8sR0FBSUEsVUFBWSxLQUFPLENBQzVCLElBQUtWLE9BQVMsR0FBSyxFQUFHLE1BQ3RCMVEsTUFBTU4sS0FDSjBSLFdBQWEsRUFBTSxJQUNQLEdBQVpBLFVBQW1CLElBRXZCLE1BQU8sR0FBSUEsVUFBWSxNQUFTLENBQzlCLElBQUtWLE9BQVMsR0FBSyxFQUFHLE1BQ3RCMVEsTUFBTU4sS0FDSjBSLFdBQWEsR0FBTSxJQUNuQkEsV0FBYSxFQUFNLEdBQU8sSUFDZCxHQUFaQSxVQUFtQixJQUV2QixLQUFPLE1BQUlBLFVBQVksU0FTckIsTUFBTSxJQUFJdGdCLE1BQU0sc0JBUmhCLElBQUs0ZixPQUFTLEdBQUssRUFBRyxNQUN0QjFRLE1BQU1OLEtBQ0owUixXQUFhLEdBQU8sSUFDcEJBLFdBQWEsR0FBTSxHQUFPLElBQzFCQSxXQUFhLEVBQU0sR0FBTyxJQUNkLEdBQVpBLFVBQW1CLElBSXZCLENBQ0YsQ0FFQSxPQUFPcFIsS0FDVCxDQTJCQSxTQUFTdU8sY0FBZTZCLEtBQ3RCLE9BQU96RCxPQUFPdEIsWUFoSWhCLFNBQVMyTCxZQUFhNUcsS0FJcEIsSUFGQUEsSUFVRixTQUFTNkcsV0FBWTdHLEtBQ25CLE9BQUlBLElBQUk4RyxLQUFhOUcsSUFBSThHLE9BQ2xCOUcsSUFBSS9GLFFBQVEsYUFBYyxHQUNuQyxDQWJRNE0sQ0FBVzdHLEtBQUsvRixRQUFRd00sa0JBQW1CLEtBRXpDaGxCLE9BQVMsRUFBRyxNQUFPLEdBRTNCLEtBQU91ZSxJQUFJdmUsT0FBUyxHQUFNLEdBQ3hCdWUsS0FBWSxJQUVkLE9BQU9BLEdBQ1QsQ0FzSDRCNEcsQ0FBWTVHLEtBQ3hDLENBRUEsU0FBU0gsV0FBWWtILElBQUtDLElBQUt2aEIsT0FBUWhFLFFBQ3JDLElBQUssSUFBSXFCLEVBQUksRUFBR0EsRUFBSXJCLFVBQ2JxQixFQUFJMkMsUUFBVXVoQixJQUFJdmxCLFFBQVlxQixHQUFLaWtCLElBQUl0bEIsVUFEaEJxQixFQUU1QmtrQixJQUFJbGtCLEVBQUkyQyxRQUFVc2hCLElBQUlqa0IsR0FFeEIsT0FBT0EsQ0FDVCxrSEN4dkRBOUMsUUFBUXFmLEtBQU8sU0FBVXhkLE9BQVE0RCxPQUFRd2hCLEtBQU1DLEtBQU1DLFFBQ25ELElBQUlsa0IsRUFBRzJiLEVBQ0h3SSxLQUFnQixFQUFURCxPQUFhRCxLQUFPLEVBQzNCRyxNQUFRLEdBQUtELE1BQVEsRUFDckJFLE1BQVFELE1BQVEsRUFDaEJFLE9BQVMsRUFDVHprQixFQUFJbWtCLEtBQVFFLE9BQVMsRUFBSyxFQUMxQmxqQixFQUFJZ2pCLE1BQVEsRUFBSSxFQUNoQnBqQixFQUFJaEMsT0FBTzRELE9BQVMzQyxHQU94QixJQUxBQSxHQUFLbUIsRUFFTGhCLEVBQUlZLEdBQU0sSUFBTzBqQixPQUFVLEVBQzNCMWpCLEtBQVEwakIsTUFDUkEsT0FBU0gsS0FDRkcsTUFBUSxFQUFHdGtCLEVBQVEsSUFBSkEsRUFBVXBCLE9BQU80RCxPQUFTM0MsR0FBSUEsR0FBS21CLEVBQUdzakIsT0FBUyxHQUtyRSxJQUhBM0ksRUFBSTNiLEdBQU0sSUFBT3NrQixPQUFVLEVBQzNCdGtCLEtBQVFza0IsTUFDUkEsT0FBU0wsS0FDRkssTUFBUSxFQUFHM0ksRUFBUSxJQUFKQSxFQUFVL2MsT0FBTzRELE9BQVMzQyxHQUFJQSxHQUFLbUIsRUFBR3NqQixPQUFTLEdBRXJFLEdBQVUsSUFBTnRrQixFQUNGQSxFQUFJLEVBQUlxa0IsVUFDSCxJQUFJcmtCLElBQU1va0IsS0FDZixPQUFPekksRUFBSTRJLElBQXNCZCxLQUFkN2lCLEdBQUssRUFBSSxHQUU1QithLEdBQVFoYSxLQUFLTSxJQUFJLEVBQUdnaUIsTUFDcEJqa0IsR0FBUXFrQixLQUNWLENBQ0EsT0FBUXpqQixHQUFLLEVBQUksR0FBSythLEVBQUloYSxLQUFLTSxJQUFJLEVBQUdqQyxFQUFJaWtCLEtBQzVDLEVBRUFsbkIsUUFBUTRGLE1BQVEsU0FBVS9ELE9BQVFnUCxNQUFPcEwsT0FBUXdoQixLQUFNQyxLQUFNQyxRQUMzRCxJQUFJbGtCLEVBQUcyYixFQUFHNWEsRUFDTm9qQixLQUFnQixFQUFURCxPQUFhRCxLQUFPLEVBQzNCRyxNQUFRLEdBQUtELE1BQVEsRUFDckJFLE1BQVFELE1BQVEsRUFDaEJJLEdBQWUsS0FBVFAsS0FBY3RpQixLQUFLTSxJQUFJLEdBQUksSUFBTU4sS0FBS00sSUFBSSxHQUFJLElBQU0sRUFDMURwQyxFQUFJbWtCLEtBQU8sRUFBS0UsT0FBUyxFQUN6QmxqQixFQUFJZ2pCLEtBQU8sR0FBSyxFQUNoQnBqQixFQUFJZ04sTUFBUSxHQUFnQixJQUFWQSxPQUFlLEVBQUlBLE1BQVEsRUFBSyxFQUFJLEVBbUMxRCxJQWpDQUEsTUFBUWpNLEtBQUtzTCxJQUFJVyxPQUVia08sTUFBTWxPLFFBQVVBLFFBQVU2VixLQUM1QjlILEVBQUlHLE1BQU1sTyxPQUFTLEVBQUksRUFDdkI1TixFQUFJb2tCLE9BRUpwa0IsRUFBSTJCLEtBQUtDLE1BQU1ELEtBQUs4aUIsSUFBSTdXLE9BQVNqTSxLQUFLK2lCLEtBQ2xDOVcsT0FBUzdNLEVBQUlZLEtBQUtNLElBQUksR0FBSWpDLElBQU0sSUFDbENBLElBQ0FlLEdBQUssSUFHTDZNLE9BREU1TixFQUFJcWtCLE9BQVMsRUFDTkcsR0FBS3pqQixFQUVMeWpCLEdBQUs3aUIsS0FBS00sSUFBSSxFQUFHLEVBQUlvaUIsUUFFcEJ0akIsR0FBSyxJQUNmZixJQUNBZSxHQUFLLEdBR0hmLEVBQUlxa0IsT0FBU0QsTUFDZnpJLEVBQUksRUFDSjNiLEVBQUlva0IsTUFDS3BrQixFQUFJcWtCLE9BQVMsR0FDdEIxSSxHQUFLL04sTUFBUTdNLEVBQUksR0FBS1ksS0FBS00sSUFBSSxFQUFHZ2lCLE1BQ2xDamtCLEdBQVFxa0IsUUFFUjFJLEVBQUkvTixNQUFRak0sS0FBS00sSUFBSSxFQUFHb2lCLE1BQVEsR0FBSzFpQixLQUFLTSxJQUFJLEVBQUdnaUIsTUFDakRqa0IsRUFBSSxJQUlEaWtCLE1BQVEsRUFBR3JsQixPQUFPNEQsT0FBUzNDLEdBQVMsSUFBSjhiLEVBQVU5YixHQUFLbUIsRUFBRzJhLEdBQUssSUFBS3NJLE1BQVEsR0FJM0UsSUFGQWprQixFQUFLQSxHQUFLaWtCLEtBQVF0SSxFQUNsQndJLE1BQVFGLEtBQ0RFLEtBQU8sRUFBR3ZsQixPQUFPNEQsT0FBUzNDLEdBQVMsSUFBSkcsRUFBVUgsR0FBS21CLEVBQUdoQixHQUFLLElBQUtta0IsTUFBUSxHQUUxRXZsQixPQUFPNEQsT0FBUzNDLEVBQUltQixJQUFVLElBQUpKLENBQzVCLG1FQzlEQSxTQUFTNlAsZUFDUHZSLEtBQUt5bEIsUUFBVXpsQixLQUFLeWxCLFNBQVcsQ0FBQyxFQUNoQ3psQixLQUFLMGxCLGNBQWdCMWxCLEtBQUswbEIsb0JBQWlCM08sQ0FDN0MsQ0F1UUEsU0FBUzRPLFdBQVc3bUIsS0FDbEIsTUFBc0IsbUJBQVJBLEdBQ2hCLENBTUEsU0FBUzhtQixTQUFTOW1CLEtBQ2hCLE1BQXNCLGlCQUFSQSxLQUE0QixPQUFSQSxHQUNwQyxDQUVBLFNBQVMrbUIsWUFBWS9tQixLQUNuQixZQUFlLElBQVJBLEdBQ1QsQ0FwUkFsQixPQUFPQyxRQUFVMFQsYUFHakJBLGFBQWFBLGFBQWVBLGFBRTVCQSxhQUFhdFMsVUFBVXdtQixhQUFVMU8sRUFDakN4RixhQUFhdFMsVUFBVXltQixtQkFBZ0IzTyxFQUl2Q3hGLGFBQWF1VSxvQkFBc0IsR0FJbkN2VSxhQUFhdFMsVUFBVThtQixnQkFBa0IsU0FBU2xhLEdBQ2hELElBMlBGLFNBQVNtYSxTQUFTbG5CLEtBQ2hCLE1BQXNCLGlCQUFSQSxHQUNoQixDQTdQT2tuQixDQUFTbmEsSUFBTUEsRUFBSSxHQUFLK1EsTUFBTS9RLEdBQ2pDLE1BQU1tUCxVQUFVLCtCQUVsQixPQURBaGIsS0FBSzBsQixjQUFnQjdaLEVBQ2Q3TCxJQUNULEVBRUF1UixhQUFhdFMsVUFBVTZULEtBQU8sU0FBUzFELE1BQ3JDLElBQUk2VyxHQUFJQyxRQUFTOU0sSUFBSytNLEtBQU14bEIsRUFBR3lsQixVQU0vQixHQUpLcG1CLEtBQUt5bEIsVUFDUnpsQixLQUFLeWxCLFFBQVUsQ0FBQyxHQUdMLFVBQVRyVyxRQUNHcFAsS0FBS3lsQixRQUFRNWtCLE9BQ2Ira0IsU0FBUzVsQixLQUFLeWxCLFFBQVE1a0IsU0FBV2IsS0FBS3lsQixRQUFRNWtCLE1BQU12QixRQUFTLENBRWhFLElBREEybUIsR0FBS3pGLFVBQVUsY0FDR2ppQixNQUNoQixNQUFNMG5CLEdBR04sSUFBSXJkLElBQU0sSUFBSXJLLE1BQU0seUNBQTJDMG5CLEdBQUssS0FFcEUsTUFEQXJkLElBQUl5ZCxRQUFVSixHQUNScmQsR0FFVixDQUtGLEdBQUlpZCxZQUZKSyxRQUFVbG1CLEtBQUt5bEIsUUFBUXJXLE9BR3JCLE9BQU8sRUFFVCxHQUFJdVcsV0FBV08sU0FDYixPQUFRMUYsVUFBVWxoQixRQUVoQixLQUFLLEVBQ0g0bUIsUUFBUS9tQixLQUFLYSxNQUNiLE1BQ0YsS0FBSyxFQUNIa21CLFFBQVEvbUIsS0FBS2EsS0FBTXdnQixVQUFVLElBQzdCLE1BQ0YsS0FBSyxFQUNIMEYsUUFBUS9tQixLQUFLYSxLQUFNd2dCLFVBQVUsR0FBSUEsVUFBVSxJQUMzQyxNQUVGLFFBQ0UyRixLQUFPbk0sTUFBTS9hLFVBQVVxTyxNQUFNbk8sS0FBS3FoQixVQUFXLEdBQzdDMEYsUUFBUS9HLE1BQU1uZixLQUFNbW1CLFdBRW5CLEdBQUlQLFNBQVNNLFNBSWxCLElBSEFDLEtBQU9uTSxNQUFNL2EsVUFBVXFPLE1BQU1uTyxLQUFLcWhCLFVBQVcsR0FFN0NwSCxLQURBZ04sVUFBWUYsUUFBUTVZLFNBQ0poTyxPQUNYcUIsRUFBSSxFQUFHQSxFQUFJeVksSUFBS3pZLElBQ25CeWxCLFVBQVV6bEIsR0FBR3dlLE1BQU1uZixLQUFNbW1CLE1BRzdCLE9BQU8sQ0FDVCxFQUVBNVUsYUFBYXRTLFVBQVU2VixZQUFjLFNBQVMxRixLQUFNa1gsVUFDbEQsSUFBSTdKLEVBRUosSUFBS2tKLFdBQVdXLFVBQ2QsTUFBTXRMLFVBQVUsK0JBMkNsQixPQXpDS2hiLEtBQUt5bEIsVUFDUnpsQixLQUFLeWxCLFFBQVUsQ0FBQyxHQUlkemxCLEtBQUt5bEIsUUFBUWMsYUFDZnZtQixLQUFLOFMsS0FBSyxjQUFlMUQsS0FDZnVXLFdBQVdXLFNBQVNBLFVBQ3BCQSxTQUFTQSxTQUFXQSxVQUUzQnRtQixLQUFLeWxCLFFBQVFyVyxNQUdUd1csU0FBUzVsQixLQUFLeWxCLFFBQVFyVyxPQUU3QnBQLEtBQUt5bEIsUUFBUXJXLE1BQU1qQyxLQUFLbVosVUFHeEJ0bUIsS0FBS3lsQixRQUFRclcsTUFBUSxDQUFDcFAsS0FBS3lsQixRQUFRclcsTUFBT2tYLFVBTjFDdG1CLEtBQUt5bEIsUUFBUXJXLE1BQVFrWCxTQVNuQlYsU0FBUzVsQixLQUFLeWxCLFFBQVFyVyxTQUFXcFAsS0FBS3lsQixRQUFRclcsTUFBTW9YLFNBSXBEL0osRUFIR29KLFlBQVk3bEIsS0FBSzBsQixlQUdoQm5VLGFBQWF1VSxvQkFGYjlsQixLQUFLMGxCLGdCQUtGakosRUFBSSxHQUFLemMsS0FBS3lsQixRQUFRclcsTUFBTTlQLE9BQVNtZCxJQUM1Q3pjLEtBQUt5bEIsUUFBUXJXLE1BQU1vWCxRQUFTLEVBQzVCQyxRQUFRNWxCLE1BQU0sbUlBR0FiLEtBQUt5bEIsUUFBUXJXLE1BQU05UCxRQUNKLG1CQUFsQm1uQixRQUFRQyxPQUVqQkQsUUFBUUMsU0FLUDFtQixJQUNULEVBRUF1UixhQUFhdFMsVUFBVTBuQixHQUFLcFYsYUFBYXRTLFVBQVU2VixZQUVuRHZELGFBQWF0UyxVQUFVMm5CLEtBQU8sU0FBU3hYLEtBQU1rWCxVQUMzQyxJQUFLWCxXQUFXVyxVQUNkLE1BQU10TCxVQUFVLCtCQUVsQixJQUFJNkwsT0FBUSxFQUVaLFNBQVN6SCxJQUNQcGYsS0FBSzhtQixlQUFlMVgsS0FBTWdRLEdBRXJCeUgsUUFDSEEsT0FBUSxFQUNSUCxTQUFTbkgsTUFBTW5mLEtBQU13Z0IsV0FFekIsQ0FLQSxPQUhBcEIsRUFBRWtILFNBQVdBLFNBQ2J0bUIsS0FBSzJtQixHQUFHdlgsS0FBTWdRLEdBRVBwZixJQUNULEVBR0F1UixhQUFhdFMsVUFBVTZuQixlQUFpQixTQUFTMVgsS0FBTWtYLFVBQ3JELElBQUluRyxLQUFNaGUsU0FBVTdDLE9BQVFxQixFQUU1QixJQUFLZ2xCLFdBQVdXLFVBQ2QsTUFBTXRMLFVBQVUsK0JBRWxCLElBQUtoYixLQUFLeWxCLFVBQVl6bEIsS0FBS3lsQixRQUFRclcsTUFDakMsT0FBT3BQLEtBTVQsR0FIQVYsUUFEQTZnQixLQUFPbmdCLEtBQUt5bEIsUUFBUXJXLE9BQ045UCxPQUNkNkMsVUFBWSxFQUVSZ2UsT0FBU21HLFVBQ1JYLFdBQVd4RixLQUFLbUcsV0FBYW5HLEtBQUttRyxXQUFhQSxnQkFDM0N0bUIsS0FBS3lsQixRQUFRclcsTUFDaEJwUCxLQUFLeWxCLFFBQVFxQixnQkFDZjltQixLQUFLOFMsS0FBSyxpQkFBa0IxRCxLQUFNa1gsZUFFL0IsR0FBSVYsU0FBU3pGLE1BQU8sQ0FDekIsSUFBS3hmLEVBQUlyQixPQUFRcUIsS0FBTSxHQUNyQixHQUFJd2YsS0FBS3hmLEtBQU8ybEIsVUFDWG5HLEtBQUt4ZixHQUFHMmxCLFVBQVluRyxLQUFLeGYsR0FBRzJsQixXQUFhQSxTQUFXLENBQ3ZEbmtCLFNBQVd4QixFQUNYLEtBQ0YsQ0FHRixHQUFJd0IsU0FBVyxFQUNiLE9BQU9uQyxLQUVXLElBQWhCbWdCLEtBQUs3Z0IsUUFDUDZnQixLQUFLN2dCLE9BQVMsU0FDUFUsS0FBS3lsQixRQUFRclcsT0FFcEIrUSxLQUFLNEcsT0FBTzVrQixTQUFVLEdBR3BCbkMsS0FBS3lsQixRQUFRcUIsZ0JBQ2Y5bUIsS0FBSzhTLEtBQUssaUJBQWtCMUQsS0FBTWtYLFNBQ3RDLENBRUEsT0FBT3RtQixJQUNULEVBRUF1UixhQUFhdFMsVUFBVStuQixtQkFBcUIsU0FBUzVYLE1BQ25ELElBQUkzUSxJQUFLMm5CLFVBRVQsSUFBS3BtQixLQUFLeWxCLFFBQ1IsT0FBT3psQixLQUdULElBQUtBLEtBQUt5bEIsUUFBUXFCLGVBS2hCLE9BSnlCLElBQXJCdEcsVUFBVWxoQixPQUNaVSxLQUFLeWxCLFFBQVUsQ0FBQyxFQUNUemxCLEtBQUt5bEIsUUFBUXJXLGNBQ2JwUCxLQUFLeWxCLFFBQVFyVyxNQUNmcFAsS0FJVCxHQUF5QixJQUFyQndnQixVQUFVbGhCLE9BQWMsQ0FDMUIsSUFBS2IsT0FBT3VCLEtBQUt5bEIsUUFDSCxtQkFBUmhuQixLQUNKdUIsS0FBS2duQixtQkFBbUJ2b0IsS0FJMUIsT0FGQXVCLEtBQUtnbkIsbUJBQW1CLGtCQUN4QmhuQixLQUFLeWxCLFFBQVUsQ0FBQyxFQUNUemxCLElBQ1QsQ0FJQSxHQUFJMmxCLFdBRkpTLFVBQVlwbUIsS0FBS3lsQixRQUFRclcsT0FHdkJwUCxLQUFLOG1CLGVBQWUxWCxLQUFNZ1gsZ0JBQ3JCLEdBQUlBLFVBRVQsS0FBT0EsVUFBVTltQixRQUNmVSxLQUFLOG1CLGVBQWUxWCxLQUFNZ1gsVUFBVUEsVUFBVTltQixPQUFTLElBSTNELGNBRk9VLEtBQUt5bEIsUUFBUXJXLE1BRWJwUCxJQUNULEVBRUF1UixhQUFhdFMsVUFBVW1uQixVQUFZLFNBQVNoWCxNQVExQyxPQU5LcFAsS0FBS3lsQixTQUFZemxCLEtBQUt5bEIsUUFBUXJXLE1BRTFCdVcsV0FBVzNsQixLQUFLeWxCLFFBQVFyVyxPQUN6QixDQUFDcFAsS0FBS3lsQixRQUFRclcsT0FFZHBQLEtBQUt5bEIsUUFBUXJXLE1BQU05QixRQUpuQixFQU1WLEVBRUFpRSxhQUFhdFMsVUFBVWdvQixjQUFnQixTQUFTN1gsTUFDOUMsR0FBSXBQLEtBQUt5bEIsUUFBUyxDQUNoQixJQUFJeUIsV0FBYWxuQixLQUFLeWxCLFFBQVFyVyxNQUU5QixHQUFJdVcsV0FBV3VCLFlBQ2IsT0FBTyxFQUNKLEdBQUlBLFdBQ1AsT0FBT0EsV0FBVzVuQixNQUN0QixDQUNBLE9BQU8sQ0FDVCxFQUVBaVMsYUFBYTBWLGNBQWdCLFNBQVNuVixRQUFTMUMsTUFDN0MsT0FBTzBDLFFBQVFtVixjQUFjN1gsS0FDL0IsbUVDN1JBLElBQUlsUSxTQUFXLENBQUMsRUFBRUEsU0FFbEJ0QixPQUFPQyxRQUFVbWMsTUFBTU0sU0FBVyxTQUFVbkIsS0FDMUMsTUFBNkIsa0JBQXRCamEsU0FBU0MsS0FBS2dhLElBQ3ZCLGdFQ3NCQSxTQUFTelMsZUFBZStVLElBQUswTCxNQUMzQixPQUFPOXBCLE9BQU80QixVQUFVeUgsZUFBZXZILEtBQUtzYyxJQUFLMEwsS0FDbkQsQ0FFQXZwQixPQUFPQyxRQUFVLFNBQVN1cEIsR0FBSUMsSUFBS0MsR0FBSWpoQixTQUNyQ2doQixJQUFNQSxLQUFPLElBQ2JDLEdBQUtBLElBQU0sSUFDWCxJQUFJN0wsSUFBTSxDQUFDLEVBRVgsR0FBa0IsaUJBQVAyTCxJQUFpQyxJQUFkQSxHQUFHOW5CLE9BQy9CLE9BQU9tYyxJQUdULElBQUk4TCxPQUFTLE1BQ2JILEdBQUtBLEdBQUd6YixNQUFNMGIsS0FFZCxJQUFJRyxRQUFVLElBQ1ZuaEIsU0FBc0MsaUJBQXBCQSxRQUFRbWhCLFVBQzVCQSxRQUFVbmhCLFFBQVFtaEIsU0FHcEIsSUFBSXBPLElBQU1nTyxHQUFHOW5CLE9BRVRrb0IsUUFBVSxHQUFLcE8sSUFBTW9PLFVBQ3ZCcE8sSUFBTW9PLFNBR1IsSUFBSyxJQUFJN21CLEVBQUksRUFBR0EsRUFBSXlZLE1BQU96WSxFQUFHLENBQzVCLElBRUk4bUIsS0FBTUMsS0FBTTNqQixFQUFHNGpCLEVBRmZsbUIsRUFBSTJsQixHQUFHem1CLEdBQUdtWCxRQUFReVAsT0FBUSxPQUMxQkssSUFBTW5tQixFQUFFekMsUUFBUXNvQixJQUdoQk0sS0FBTyxHQUNUSCxLQUFPaG1CLEVBQUVxUCxPQUFPLEVBQUc4VyxLQUNuQkYsS0FBT2ptQixFQUFFcVAsT0FBTzhXLElBQU0sS0FFdEJILEtBQU9obUIsRUFDUGltQixLQUFPLElBR1QzakIsRUFBSThqQixtQkFBbUJKLE1BQ3ZCRSxFQUFJRSxtQkFBbUJILE1BRWxCaGhCLGVBQWUrVSxJQUFLMVgsR0FFZGlXLE1BQU1NLFFBQVFtQixJQUFJMVgsSUFDM0IwWCxJQUFJMVgsR0FBR29KLEtBQUt3YSxHQUVabE0sSUFBSTFYLEdBQUssQ0FBQzBYLElBQUkxWCxHQUFJNGpCLEdBSmxCbE0sSUFBSTFYLEdBQUs0akIsQ0FNYixDQUVBLE9BQU9sTSxHQUNULGdFQ3hEQSxJQUFJcU0sbUJBQXFCLFNBQVNILEdBQ2hDLGNBQWVBLEdBQ2IsSUFBSyxTQUNILE9BQU9BLEVBRVQsSUFBSyxVQUNILE9BQU9BLEVBQUksT0FBUyxRQUV0QixJQUFLLFNBQ0gsT0FBT3hHLFNBQVN3RyxHQUFLQSxFQUFJLEdBRTNCLFFBQ0UsTUFBTyxHQUViLEVBRUEvcEIsT0FBT0MsUUFBVSxTQUFTNGQsSUFBSzRMLElBQUtDLEdBQUl6WSxNQU90QyxPQU5Bd1ksSUFBTUEsS0FBTyxJQUNiQyxHQUFLQSxJQUFNLElBQ0MsT0FBUjdMLE1BQ0ZBLFNBQU0xRSxHQUdXLGlCQUFSMEUsSUFDRnBlLE9BQU9xTyxLQUFLK1AsS0FBS3NNLEtBQUksU0FBU2hrQixHQUNuQyxJQUFJaWtCLEdBQUtDLG1CQUFtQkgsbUJBQW1CL2pCLElBQU11akIsR0FDckQsT0FBSXROLE1BQU1NLFFBQVFtQixJQUFJMVgsSUFDYjBYLElBQUkxWCxHQUFHZ2tCLEtBQUksU0FBU0osR0FDekIsT0FBT0ssR0FBS0MsbUJBQW1CSCxtQkFBbUJILEdBQ3BELElBQUcxYixLQUFLb2IsS0FFRFcsR0FBS0MsbUJBQW1CSCxtQkFBbUJyTSxJQUFJMVgsSUFFMUQsSUFBR2tJLEtBQUtvYixLQUlMeFksS0FDRW9aLG1CQUFtQkgsbUJBQW1CalosT0FBU3lZLEdBQy9DVyxtQkFBbUJILG1CQUFtQnJNLE1BRjNCLEVBR3BCLDhHQzdEQTVkLFFBQVFxcUIsT0FBU3JxQixRQUFRd1IsTUFBUSxvQkFBaEIsd0NBQ2pCeFIsUUFBUXNxQixPQUFTdHFCLFFBQVF1cUIsVUFBWSxvQkFBcEIsNklDSGpCLHlFQUNFLFNBQVNDLE1BR3NDeHFCLFNBQzlDQSxRQUFReXFCLFNBQ29DMXFCLFFBQzVDQSxPQUFPMHFCLFNBSFQsSUFJSUMsV0FBOEIsaUJBQVYsb0JBQUFuSixHQUFzQixvQkFBQUEsRUFFN0NtSixXQUFXQyxTQUFXRCxZQUN0QkEsV0FBV25jLFNBQVdtYyxZQUN0QkEsV0FBVzlmLEtBVVosSUFBSWdnQixTQUdKQyxPQUFTLFdBR1RDLEtBQU8sR0FDUEMsS0FBTyxFQUNQQyxLQUFPLEdBQ1BDLEtBQU8sR0FDUEMsS0FBTyxJQUNQQyxZQUFjLEdBQ2RDLFNBQVcsSUFDWEMsVUFBWSxJQUdaQyxjQUFnQixRQUNoQkMsY0FBZ0IsZUFDaEJDLGdCQUFrQiw0QkFHbEJDLE9BQVMsQ0FDUixTQUFZLGtEQUNaLFlBQWEsaURBQ2IsZ0JBQWlCLGlCQUlsQkMsY0FBZ0JaLEtBQU9DLEtBQ3ZCbG1CLE1BQVFELEtBQUtDLE1BQ2I4bUIsbUJBQXFCcGIsT0FBTzhRLGFBYTVCLFNBQVNyZSxNQUFNdU8sTUFDZCxNQUFNdUwsV0FBVzJPLE9BQU9sYSxNQUN6QixDQVVBLFNBQVMyWSxJQUFJN00sTUFBTzNTLElBR25CLElBRkEsSUFBSWpKLE9BQVM0YixNQUFNNWIsT0FDZjJQLE9BQVMsR0FDTjNQLFVBQ04yUCxPQUFPM1AsUUFBVWlKLEdBQUcyUyxNQUFNNWIsU0FFM0IsT0FBTzJQLE1BQ1IsQ0FZQSxTQUFTd2EsVUFBVXBPLE9BQVE5UyxJQUMxQixJQUFJcVIsTUFBUXlCLE9BQU8xUCxNQUFNLEtBQ3JCc0QsT0FBUyxHQVdiLE9BVkkySyxNQUFNdGEsT0FBUyxJQUdsQjJQLE9BQVMySyxNQUFNLEdBQUssSUFDcEJ5QixPQUFTekIsTUFBTSxJQU1UM0ssT0FETzhZLEtBRmQxTSxPQUFTQSxPQUFPdkQsUUFBUXVSLGdCQUFpQixNQUNyQjFkLE1BQU0sS0FDQXBELElBQUkwRCxLQUFLLElBRXBDLENBZUEsU0FBU3lkLFdBQVdyTyxRQU1uQixJQUxBLElBR0kzTSxNQUNBaWIsTUFKQWxhLE9BQVMsR0FDVG1hLFFBQVUsRUFDVnRxQixPQUFTK2IsT0FBTy9iLE9BR2JzcUIsUUFBVXRxQixTQUNoQm9QLE1BQVEyTSxPQUFPN0IsV0FBV29RLGFBQ2IsT0FBVWxiLE9BQVMsT0FBVWtiLFFBQVV0cUIsT0FHM0IsUUFBWCxPQURicXFCLE1BQVF0TyxPQUFPN0IsV0FBV29RLGFBRXpCbmEsT0FBT3RDLE9BQWUsS0FBUnVCLFFBQWtCLEtBQWUsS0FBUmliLE9BQWlCLFFBSXhEbGEsT0FBT3RDLEtBQUt1QixPQUNaa2IsV0FHRG5hLE9BQU90QyxLQUFLdUIsT0FHZCxPQUFPZSxNQUNSLENBVUEsU0FBU29hLFdBQVczTyxPQUNuQixPQUFPNk0sSUFBSTdNLE9BQU8sU0FBU3hNLE9BQzFCLElBQUllLE9BQVMsR0FPYixPQU5JZixNQUFRLFFBRVhlLFFBQVUrWixvQkFEVjlhLE9BQVMsU0FDOEIsR0FBSyxLQUFRLE9BQ3BEQSxNQUFRLE1BQWlCLEtBQVJBLE9BRWxCZSxRQUFVK1osbUJBQW1COWEsTUFFOUIsSUFBR3pDLEtBQUssR0FDVCxDQW1DQSxTQUFTNmQsYUFBYUMsTUFBT0MsTUFHNUIsT0FBT0QsTUFBUSxHQUFLLElBQU1BLE1BQVEsTUFBZ0IsR0FBUkMsT0FBYyxFQUN6RCxDQU9BLFNBQVNDLE1BQU1DLE1BQU9DLFVBQVdDLFdBQ2hDLElBQUlybUIsRUFBSSxFQUdSLElBRkFtbUIsTUFBUUUsVUFBWTFuQixNQUFNd25CLE1BQVFuQixNQUFRbUIsT0FBUyxFQUNuREEsT0FBU3huQixNQUFNd25CLE1BQVFDLFdBQ09ELE1BQVFYLGNBQWdCVixNQUFRLEVBQUc5a0IsR0FBSzRrQixLQUNyRXVCLE1BQVF4bkIsTUFBTXduQixNQUFRWCxlQUV2QixPQUFPN21CLE1BQU1xQixHQUFLd2xCLGNBQWdCLEdBQUtXLE9BQVNBLE1BQVFwQixNQUN6RCxDQVNBLFNBQVNaLE9BQU83bkIsT0FFZixJQUVJc0MsSUFJQTBuQixNQUNBdFIsRUFDQXVSLE1BQ0FDLEtBQ0ExbUIsRUFDQUUsRUFDQWdtQixNQUNBcG9CLEVBRUE2b0IsV0FyRWlCM0wsVUFzRGpCcFAsT0FBUyxHQUNUZ2IsWUFBY3BxQixNQUFNZixPQUVwQnFCLEVBQUksRUFDSmtMLEVBQUlvZCxTQUNKeUIsS0FBTzFCLFlBcUJYLEtBTEFxQixNQUFRaHFCLE1BQU15YyxZQUFZb00sWUFDZCxJQUNYbUIsTUFBUSxHQUdKdFIsRUFBSSxFQUFHQSxFQUFJc1IsUUFBU3RSLEVBRXBCMVksTUFBTW1aLFdBQVdULElBQU0sS0FDMUJsWSxNQUFNLGFBRVA0TyxPQUFPdEMsS0FBSzlNLE1BQU1tWixXQUFXVCxJQU05QixJQUFLdVIsTUFBUUQsTUFBUSxFQUFJQSxNQUFRLEVBQUksRUFBR0MsTUFBUUcsYUFBd0MsQ0FPdkYsSUFBS0YsS0FBTzVwQixFQUFHa0QsRUFBSSxFQUFHRSxFQUFJNGtCLEtBRXJCMkIsT0FBU0csYUFDWjVwQixNQUFNLG1CQUdQa3BCLE9BeEdtQmxMLFVBd0dFeGUsTUFBTW1aLFdBQVc4USxVQXZHeEIsR0FBSyxHQUNiekwsVUFBWSxHQUVoQkEsVUFBWSxHQUFLLEdBQ2JBLFVBQVksR0FFaEJBLFVBQVksR0FBSyxHQUNiQSxVQUFZLEdBRWI4SixPQWdHUUEsTUFBUW9CLE1BQVFybkIsT0FBT2dtQixPQUFTL25CLEdBQUtrRCxLQUNqRGhELE1BQU0sWUFHUEYsR0FBS29wQixNQUFRbG1CLElBR1RrbUIsT0FGSnBvQixFQUFJb0MsR0FBSzJtQixLQUFPOUIsS0FBUTdrQixHQUFLMm1CLEtBQU83QixLQUFPQSxLQUFPOWtCLEVBQUkybUIsT0FiSDNtQixHQUFLNGtCLEtBb0JwRDlrQixFQUFJbkIsTUFBTWdtQixRQURkOEIsV0FBYTdCLEtBQU9obkIsS0FFbkJkLE1BQU0sWUFHUGdELEdBQUsybUIsV0FLTkUsS0FBT1QsTUFBTXRwQixFQUFJNHBCLEtBRGpCNW5CLElBQU04TSxPQUFPblEsT0FBUyxFQUNjLEdBQVJpckIsTUFJeEI3bkIsTUFBTS9CLEVBQUlnQyxLQUFPK2xCLE9BQVM3YyxHQUM3QmhMLE1BQU0sWUFHUGdMLEdBQUtuSixNQUFNL0IsRUFBSWdDLEtBQ2ZoQyxHQUFLZ0MsSUFHTDhNLE9BQU9zWCxPQUFPcG1CLElBQUssRUFBR2tMLEVBRXZCLENBRUEsT0FBT2dlLFdBQVdwYSxPQUNuQixDQVNBLFNBQVMwWSxPQUFPOW5CLE9BQ2YsSUFBSXdMLEVBQ0FxZSxNQUNBUyxlQUNBQyxZQUNBRixLQUNBM1IsRUFDQTBELEVBQ0FuYixFQUNBeUMsRUFDQXBDLEVBQ0FrcEIsYUFHQUosWUFFQUssc0JBQ0FOLFdBQ0FPLFFBTkF0YixPQUFTLEdBb0JiLElBUkFnYixhQUhBcHFCLE1BQVFxcEIsV0FBV3JwQixRQUdDZixPQUdwQnVNLEVBQUlvZCxTQUNKaUIsTUFBUSxFQUNSUSxLQUFPMUIsWUFHRmpRLEVBQUksRUFBR0EsRUFBSTBSLGNBQWUxUixHQUM5QjhSLGFBQWV4cUIsTUFBTTBZLElBQ0YsS0FDbEJ0SixPQUFPdEMsS0FBS3FjLG1CQUFtQnFCLGVBZWpDLElBWEFGLGVBQWlCQyxZQUFjbmIsT0FBT25RLE9BTWxDc3JCLGFBQ0huYixPQUFPdEMsS0FBSytiLFdBSU55QixlQUFpQkYsYUFBYSxDQUlwQyxJQUFLaE8sRUFBSWlNLE9BQVEzUCxFQUFJLEVBQUdBLEVBQUkwUixjQUFlMVIsR0FDMUM4UixhQUFleHFCLE1BQU0wWSxLQUNEbE4sR0FBS2dmLGFBQWVwTyxJQUN2Q0EsRUFBSW9PLGNBY04sSUFQSXBPLEVBQUk1USxFQUFJbkosT0FBT2dtQixPQUFTd0IsUUFENUJZLHNCQUF3QkgsZUFBaUIsS0FFeEM5cEIsTUFBTSxZQUdQcXBCLFFBQVV6TixFQUFJNVEsR0FBS2lmLHNCQUNuQmpmLEVBQUk0USxFQUVDMUQsRUFBSSxFQUFHQSxFQUFJMFIsY0FBZTFSLEVBTzlCLElBTkE4UixhQUFleHFCLE1BQU0wWSxJQUVGbE4sS0FBT3FlLE1BQVF4QixRQUNqQzduQixNQUFNLFlBR0hncUIsY0FBZ0JoZixFQUFHLENBRXRCLElBQUt2SyxFQUFJNG9CLE1BQU9ubUIsRUFBSTRrQixPQUVmcm5CLEdBREpLLEVBQUlvQyxHQUFLMm1CLEtBQU85QixLQUFRN2tCLEdBQUsybUIsS0FBTzdCLEtBQU9BLEtBQU85a0IsRUFBSTJtQixPQURUM21CLEdBQUs0a0IsS0FLbERvQyxRQUFVenBCLEVBQUlLLEVBQ2Q2b0IsV0FBYTdCLEtBQU9obkIsRUFDcEI4TixPQUFPdEMsS0FDTnFjLG1CQUFtQk0sYUFBYW5vQixFQUFJb3BCLFFBQVVQLFdBQVksS0FFM0RscEIsRUFBSW9CLE1BQU1xb0IsUUFBVVAsWUFHckIvYSxPQUFPdEMsS0FBS3FjLG1CQUFtQk0sYUFBYXhvQixFQUFHLEtBQy9Db3BCLEtBQU9ULE1BQU1DLE1BQU9ZLHNCQUF1QkgsZ0JBQWtCQyxhQUM3RFYsTUFBUSxJQUNOUyxjQUNILEdBR0NULFFBQ0FyZSxDQUVILENBQ0EsT0FBTzRELE9BQU94RCxLQUFLLEdBQ3BCLENBMkNBd2MsU0FBVyxDQU1WLFFBQVcsUUFRWCxLQUFRLENBQ1AsT0FBVWlCLFdBQ1YsT0FBVUcsWUFFWCxPQUNBLE9BQ0EsUUEvQkQsU0FBU21CLFFBQVEzcUIsT0FDaEIsT0FBT29wQixVQUFVcHBCLE9BQU8sU0FBU2diLFFBQ2hDLE9BQU8rTixjQUFjNkIsS0FBSzVQLFFBQ3ZCLE9BQVM4TSxPQUFPOU0sUUFDaEJBLE1BQ0osR0FDRCxFQTBCQyxVQW5ERCxTQUFTNlAsVUFBVTdxQixPQUNsQixPQUFPb3BCLFVBQVVwcEIsT0FBTyxTQUFTZ2IsUUFDaEMsT0FBTzhOLGNBQWM4QixLQUFLNVAsUUFDdkI2TSxPQUFPN00sT0FBTy9OLE1BQU0sR0FBR2hQLGVBQ3ZCK2MsTUFDSixHQUNELFFBMERFLEtBRkQseUNBQ0MsT0FBT29OLFFBQ1AsbUdBYUgsQ0FoaEJDLHdGQ29CRCxJQUFJQSxTQUFXLG9CQUFRLHdEQVN2QixTQUFTMEMsTUFDUG5yQixLQUFLZ1MsU0FBVyxLQUNoQmhTLEtBQUtvckIsUUFBVSxLQUNmcHJCLEtBQUtxckIsS0FBTyxLQUNacnJCLEtBQUtzckIsS0FBTyxLQUNadHJCLEtBQUtrUyxLQUFPLEtBQ1psUyxLQUFLaVMsU0FBVyxLQUNoQmpTLEtBQUtDLEtBQU8sS0FDWkQsS0FBS3VyQixPQUFTLEtBQ2R2ckIsS0FBS3dyQixNQUFRLEtBQ2J4ckIsS0FBS3lyQixTQUFXLEtBQ2hCenJCLEtBQUttUyxLQUFPLEtBQ1puUyxLQUFLK1IsS0FBTyxJQUNkLENBcEJBbFUsUUFBUXdSLE1BQVFxYyxTQUNoQjd0QixRQUFROHRCLFFBMlhSLFNBQVNDLFdBQVdDLE9BQVFDLFVBQzFCLE9BQU9KLFNBQVNHLFFBQVEsR0FBTyxHQUFNRixRQUFRRyxTQUMvQyxFQTVYQWp1QixRQUFRa3VCLGNBa1lSLFNBQVNDLGlCQUFpQkgsT0FBUUMsVUFDaEMsT0FBS0QsT0FDRUgsU0FBU0csUUFBUSxHQUFPLEdBQU1FLGNBQWNELFVBRC9CQSxRQUV0QixFQXBZQWp1QixRQUFRb3VCLE9BdVRSLFNBQVNDLFVBQVV6USxLQUtiMFEsU0FBUzFRLE9BQU1BLElBQU1pUSxTQUFTalEsTUFDbEMsT0FBTUEsZUFBZTBQLElBQ2QxUCxJQUFJd1EsU0FEdUJkLElBQUlsc0IsVUFBVWd0QixPQUFPOXNCLEtBQUtzYyxJQUU5RCxFQTdUQTVkLFFBQVFzdEIsSUFBTUEsSUFxQmQsSUFBSWlCLGdCQUFrQixvQkFDbEJDLFlBQWMsV0FPZEMsT0FBUyxDQUFDLElBQUssSUFBSyxJQUFLLEtBQU0sSUFBSyxLQUFLcE0sT0FIaEMsQ0FBQyxJQUFLLElBQUssSUFBSyxJQUFLLElBQUssS0FBTSxLQUFNLE9BTS9DcU0sV0FBYSxDQUFDLEtBQU1yTSxPQUFPb00sUUFLM0JFLGFBQWUsQ0FBQyxJQUFLLElBQUssSUFBSyxJQUFLLEtBQUt0TSxPQUFPcU0sWUFDaERFLGdCQUFrQixDQUFDLElBQUssSUFBSyxLQUU3QkMsb0JBQXNCLHdCQUN0QkMsa0JBQW9CLDhCQUVwQkMsZUFBaUIsQ0FDZixZQUFjLEVBQ2QsZUFBZSxHQUdqQkMsaUJBQW1CLENBQ2pCLFlBQWMsRUFDZCxlQUFlLEdBR2pCQyxnQkFBa0IsQ0FDaEIsTUFBUSxFQUNSLE9BQVMsRUFDVCxLQUFPLEVBQ1AsUUFBVSxFQUNWLE1BQVEsRUFDUixTQUFTLEVBQ1QsVUFBVSxFQUNWLFFBQVEsRUFDUixXQUFXLEVBQ1gsU0FBUyxHQUVYeG5CLFlBQWMsb0JBQVEsdUNBRTFCLFNBQVNvbUIsU0FBU3JtQixJQUFLMG5CLGlCQUFrQkMsbUJBQ3ZDLEdBQUkzbkIsS0FBT3VnQixTQUFTdmdCLE1BQVFBLGVBQWU4bEIsSUFBSyxPQUFPOWxCLElBRXZELElBQUlSLEVBQUksSUFBSXNtQixJQUVaLE9BREF0bUIsRUFBRXdLLE1BQU1oSyxJQUFLMG5CLGlCQUFrQkMsbUJBQ3hCbm9CLENBQ1QsQ0FnbEJBLFNBQVNzbkIsU0FBU3J0QixLQUNoQixNQUFzQixpQkFBUkEsR0FDaEIsQ0FFQSxTQUFTOG1CLFNBQVM5bUIsS0FDaEIsTUFBc0IsaUJBQVJBLEtBQTRCLE9BQVJBLEdBQ3BDLENBRUEsU0FBU211QixPQUFPbnVCLEtBQ2QsT0FBZSxPQUFSQSxHQUNULENBeGxCQXFzQixJQUFJbHNCLFVBQVVvUSxNQUFRLFNBQVNoSyxJQUFLMG5CLGlCQUFrQkMsbUJBQ3BELElBQUtiLFNBQVM5bUIsS0FDWixNQUFNLElBQUkyVixVQUFVLGdEQUFrRDNWLEtBR3hFLElBQUk2bkIsS0FBTzduQixJQUlYNm5CLEtBQU9BLEtBQUt2SSxPQUVaLElBQUl3SSxNQUFRZixnQkFBZ0JnQixLQUFLRixNQUNqQyxHQUFJQyxNQUFPLENBRVQsSUFBSUUsWUFESkYsTUFBUUEsTUFBTSxJQUNTN3VCLGNBQ3ZCMEIsS0FBS2dTLFNBQVdxYixXQUNoQkgsS0FBT0EsS0FBS3BjLE9BQU9xYyxNQUFNN3RCLE9BQzNCLENBTUEsR0FBSTB0QixtQkFBcUJHLE9BQVNELEtBQUt0TSxNQUFNLHdCQUF5QixDQUNwRSxJQUFJd0ssUUFBZ0MsT0FBdEI4QixLQUFLcGMsT0FBTyxFQUFHLElBQ3pCc2EsU0FBYStCLE9BQVNOLGlCQUFpQk0sU0FDekNELEtBQU9BLEtBQUtwYyxPQUFPLEdBQ25COVEsS0FBS29yQixTQUFVLEVBRW5CLENBRUEsSUFBS3lCLGlCQUFpQk0sU0FDakIvQixTQUFZK0IsUUFBVUwsZ0JBQWdCSyxRQUFVLENBbUJuRCxJQURBLElBU0k5QixLQUFNaUMsT0FUTkMsU0FBVyxFQUNONXNCLEVBQUksRUFBR0EsRUFBSThyQixnQkFBZ0JudEIsT0FBUXFCLElBQUssRUFFbEMsS0FEVDZzQixJQUFNTixLQUFLbHVCLFFBQVF5dEIsZ0JBQWdCOXJCLFFBQ1AsSUFBYjRzQixTQUFrQkMsSUFBTUQsV0FDekNBLFFBQVVDLElBQ2QsRUFnQmdCLEtBVGRGLFFBRmUsSUFBYkMsUUFFT0wsS0FBS3BRLFlBQVksS0FJakJvUSxLQUFLcFEsWUFBWSxJQUFLeVEsWUFNL0JsQyxLQUFPNkIsS0FBSzVmLE1BQU0sRUFBR2dnQixRQUNyQkosS0FBT0EsS0FBSzVmLE1BQU1nZ0IsT0FBUyxHQUMzQnR0QixLQUFLcXJCLEtBQU94RCxtQkFBbUJ3RCxPQUlqQ2tDLFNBQVcsRUFDWCxJQUFTNXNCLEVBQUksRUFBR0EsRUFBSTZyQixhQUFhbHRCLE9BQVFxQixJQUFLLENBQzVDLElBQUk2c0IsS0FDUyxLQURUQSxJQUFNTixLQUFLbHVCLFFBQVF3dEIsYUFBYTdyQixRQUNKLElBQWI0c0IsU0FBa0JDLElBQU1ELFdBQ3pDQSxRQUFVQyxJQUNkLEVBRWlCLElBQWJELFVBQ0ZBLFFBQVVMLEtBQUs1dEIsUUFFakJVLEtBQUtzckIsS0FBTzRCLEtBQUs1ZixNQUFNLEVBQUdpZ0IsU0FDMUJMLEtBQU9BLEtBQUs1ZixNQUFNaWdCLFNBR2xCdnRCLEtBQUt5dEIsWUFJTHp0QixLQUFLaVMsU0FBV2pTLEtBQUtpUyxVQUFZLEdBSWpDLElBQUl5YixhQUFvQyxNQUFyQjF0QixLQUFLaVMsU0FBUyxJQUNlLE1BQTVDalMsS0FBS2lTLFNBQVNqUyxLQUFLaVMsU0FBUzNTLE9BQVMsR0FHekMsSUFBS291QixhQUVILElBREEsSUFBSUMsVUFBWTN0QixLQUFLaVMsU0FBU3RHLE1BQU0sTUFDcEJxTixHQUFQclksRUFBSSxFQUFPZ3RCLFVBQVVydUIsUUFBUXFCLEVBQUlxWSxFQUFHclksSUFBSyxDQUNoRCxJQUFJaXRCLEtBQU9ELFVBQVVodEIsR0FDckIsR0FBS2l0QixPQUNBQSxLQUFLaE4sTUFBTThMLHFCQUFzQixDQUVwQyxJQURBLElBQUltQixRQUFVLEdBQ0w5VSxFQUFJLEVBQUdoVixFQUFJNnBCLEtBQUt0dUIsT0FBUXlaLEVBQUloVixFQUFHZ1YsSUFDbEM2VSxLQUFLcFUsV0FBV1QsR0FBSyxJQUl2QjhVLFNBQVcsSUFFWEEsU0FBV0QsS0FBSzdVLEdBSXBCLElBQUs4VSxRQUFRak4sTUFBTThMLHFCQUFzQixDQUN2QyxJQUFJb0IsV0FBYUgsVUFBVXJnQixNQUFNLEVBQUczTSxHQUNoQ290QixRQUFVSixVQUFVcmdCLE1BQU0zTSxFQUFJLEdBQzlCcXRCLElBQU1KLEtBQUtoTixNQUFNK0wsbUJBQ2pCcUIsTUFDRkYsV0FBVzNnQixLQUFLNmdCLElBQUksSUFDcEJELFFBQVFFLFFBQVFELElBQUksS0FFbEJELFFBQVF6dUIsU0FDVjR0QixLQUFPLElBQU1hLFFBQVE5aEIsS0FBSyxLQUFPaWhCLE1BRW5DbHRCLEtBQUtpUyxTQUFXNmIsV0FBVzdoQixLQUFLLEtBQ2hDLEtBQ0YsQ0FDRixDQUNGLENBVUYsR0FQSWpNLEtBQUtpUyxTQUFTM1MsT0FoTEQsSUFpTGZVLEtBQUtpUyxTQUFXLEdBR2hCalMsS0FBS2lTLFNBQVdqUyxLQUFLaVMsU0FBUzNULGVBRzNCb3ZCLGFBQWMsQ0FLakIsSUFBSVEsWUFBY2x1QixLQUFLaVMsU0FBU3RHLE1BQU0sS0FDbEN3aUIsT0FBUyxHQUNiLElBQVN4dEIsRUFBSSxFQUFHQSxFQUFJdXRCLFlBQVk1dUIsU0FBVXFCLEVBQUcsQ0FDM0MsSUFBSWUsRUFBSXdzQixZQUFZdnRCLEdBQ3BCd3RCLE9BQU9oaEIsS0FBS3pMLEVBQUVrZixNQUFNLGtCQUNoQixPQUFTNkgsU0FBU04sT0FBT3ptQixHQUFLQSxFQUNwQyxDQUNBMUIsS0FBS2lTLFNBQVdrYyxPQUFPbGlCLEtBQUssSUFDOUIsQ0FFQSxJQUFJbWlCLEVBQUlwdUIsS0FBS2tTLEtBQU8sSUFBTWxTLEtBQUtrUyxLQUFPLEdBQ2xDbWMsRUFBSXJ1QixLQUFLaVMsVUFBWSxHQUN6QmpTLEtBQUtzckIsS0FBTytDLEVBQUlELEVBQ2hCcHVCLEtBQUsrUixNQUFRL1IsS0FBS3NyQixLQUlkb0MsZUFDRjF0QixLQUFLaVMsU0FBV2pTLEtBQUtpUyxTQUFTbkIsT0FBTyxFQUFHOVEsS0FBS2lTLFNBQVMzUyxPQUFTLEdBQy9DLE1BQVo0dEIsS0FBSyxLQUNQQSxLQUFPLElBQU1BLE1BR25CLENBSUEsSUFBS04sZUFBZVMsWUFLbEIsSUFBUzFzQixFQUFJLEVBQUdxWSxFQUFJdVQsV0FBV2p0QixPQUFRcUIsRUFBSXFZLEVBQUdyWSxJQUFLLENBQ2pELElBQUkydEIsR0FBSy9CLFdBQVc1ckIsR0FDaEI0dEIsSUFBTXRHLG1CQUFtQnFHLElBQ3pCQyxNQUFRRCxLQUNWQyxJQUFNQyxPQUFPRixLQUVmcEIsS0FBT0EsS0FBS3ZoQixNQUFNMmlCLElBQUlyaUIsS0FBS3NpQixJQUM3QixDQUtGLElBQUl0dUIsS0FBT2l0QixLQUFLbHVCLFFBQVEsTUFDVixJQUFWaUIsT0FFRkQsS0FBS0MsS0FBT2l0QixLQUFLcGMsT0FBTzdRLE1BQ3hCaXRCLEtBQU9BLEtBQUs1ZixNQUFNLEVBQUdyTixPQUV2QixJQUFJd3VCLEdBQUt2QixLQUFLbHVCLFFBQVEsS0FvQnRCLElBbkJZLElBQVJ5dkIsSUFDRnp1QixLQUFLdXJCLE9BQVMyQixLQUFLcGMsT0FBTzJkLElBQzFCenVCLEtBQUt3ckIsTUFBUTBCLEtBQUtwYyxPQUFPMmQsR0FBSyxHQUMxQjFCLG1CQUNGL3NCLEtBQUt3ckIsTUFBUWxtQixZQUFZK0osTUFBTXJQLEtBQUt3ckIsUUFFdEMwQixLQUFPQSxLQUFLNWYsTUFBTSxFQUFHbWhCLEtBQ1oxQixtQkFFVC9zQixLQUFLdXJCLE9BQVMsR0FDZHZyQixLQUFLd3JCLE1BQVEsQ0FBQyxHQUVaMEIsT0FBTWx0QixLQUFLeXJCLFNBQVd5QixNQUN0QkosZ0JBQWdCTyxhQUNoQnJ0QixLQUFLaVMsV0FBYWpTLEtBQUt5ckIsV0FDekJ6ckIsS0FBS3lyQixTQUFXLEtBSWR6ckIsS0FBS3lyQixVQUFZenJCLEtBQUt1ckIsT0FBUSxDQUM1QjZDLEVBQUlwdUIsS0FBS3lyQixVQUFZLEdBQ3JCL3BCLEVBQUkxQixLQUFLdXJCLFFBQVUsR0FDdkJ2ckIsS0FBS21TLEtBQU9pYyxFQUFJMXNCLENBQ2xCLENBSUEsT0FEQTFCLEtBQUsrUixLQUFPL1IsS0FBS2lzQixTQUNWanNCLElBQ1QsRUFhQW1yQixJQUFJbHNCLFVBQVVndEIsT0FBUyxXQUNyQixJQUFJWixLQUFPcnJCLEtBQUtxckIsTUFBUSxHQUNwQkEsT0FFRkEsTUFEQUEsS0FBT3BELG1CQUFtQm9ELE9BQ2R2VCxRQUFRLE9BQVEsS0FDNUJ1VCxNQUFRLEtBR1YsSUFBSXJaLFNBQVdoUyxLQUFLZ1MsVUFBWSxHQUM1QnlaLFNBQVd6ckIsS0FBS3lyQixVQUFZLEdBQzVCeHJCLEtBQU9ELEtBQUtDLE1BQVEsR0FDcEJxckIsTUFBTyxFQUNQRSxNQUFRLEdBRVJ4ckIsS0FBS3NyQixLQUNQQSxLQUFPRCxLQUFPcnJCLEtBQUtzckIsS0FDVnRyQixLQUFLaVMsV0FDZHFaLEtBQU9ELE9BQXdDLElBQWhDcnJCLEtBQUtpUyxTQUFTalQsUUFBUSxLQUNqQ2dCLEtBQUtpUyxTQUNMLElBQU1qUyxLQUFLaVMsU0FBVyxLQUN0QmpTLEtBQUtrUyxPQUNQb1osTUFBUSxJQUFNdHJCLEtBQUtrUyxPQUluQmxTLEtBQUt3ckIsT0FDTDVGLFNBQVM1bEIsS0FBS3dyQixRQUNkbnVCLE9BQU9xTyxLQUFLMUwsS0FBS3dyQixPQUFPbHNCLFNBQzFCa3NCLE1BQVFsbUIsWUFBWThpQixVQUFVcG9CLEtBQUt3ckIsUUFHckMsSUFBSUQsT0FBU3ZyQixLQUFLdXJCLFFBQVdDLE9BQVUsSUFBTUEsT0FBVyxHQXNCeEQsT0FwQkl4WixVQUFvQyxNQUF4QkEsU0FBU2xCLFFBQVEsS0FBWWtCLFVBQVksS0FJckRoUyxLQUFLb3JCLFdBQ0hwWixVQUFZOGEsZ0JBQWdCOWEsYUFBdUIsSUFBVHNaLE1BQzlDQSxLQUFPLE1BQVFBLE1BQVEsSUFDbkJHLFVBQW1DLE1BQXZCQSxTQUFTaUQsT0FBTyxLQUFZakQsU0FBVyxJQUFNQSxXQUNuREgsT0FDVkEsS0FBTyxJQUdMcnJCLE1BQTJCLE1BQW5CQSxLQUFLeXVCLE9BQU8sS0FBWXp1QixLQUFPLElBQU1BLE1BQzdDc3JCLFFBQStCLE1BQXJCQSxPQUFPbUQsT0FBTyxLQUFZbkQsT0FBUyxJQUFNQSxRQU9oRHZaLFNBQVdzWixNQUxsQkcsU0FBV0EsU0FBUzNULFFBQVEsU0FBUyxTQUFTOEksT0FDNUMsT0FBT3FILG1CQUFtQnJILE1BQzVCLE1BQ0EySyxPQUFTQSxPQUFPelQsUUFBUSxJQUFLLFFBRWdCN1gsSUFDL0MsRUFNQWtyQixJQUFJbHNCLFVBQVUwc0IsUUFBVSxTQUFTRyxVQUMvQixPQUFPOXJCLEtBQUsrckIsY0FBY0wsU0FBU0ksVUFBVSxHQUFPLElBQU9HLFFBQzdELEVBT0FkLElBQUlsc0IsVUFBVThzQixjQUFnQixTQUFTRCxVQUNyQyxHQUFJSyxTQUFTTCxVQUFXLENBQ3RCLElBQUk2QyxJQUFNLElBQUl4RCxJQUNkd0QsSUFBSXRmLE1BQU15YyxVQUFVLEdBQU8sR0FDM0JBLFNBQVc2QyxHQUNiLENBRUEsSUFBSTFmLE9BQVMsSUFBSWtjLElBVWpCLEdBVEE5dEIsT0FBT3FPLEtBQUsxTCxNQUFNNHVCLFNBQVEsU0FBUzdxQixHQUNqQ2tMLE9BQU9sTCxHQUFLL0QsS0FBSytELEVBQ25CLEdBQUcvRCxNQUlIaVAsT0FBT2hQLEtBQU82ckIsU0FBUzdyQixLQUdELEtBQWxCNnJCLFNBQVMvWixLQUVYLE9BREE5QyxPQUFPOEMsS0FBTzlDLE9BQU9nZCxTQUNkaGQsT0FJVCxHQUFJNmMsU0FBU1YsVUFBWVUsU0FBUzlaLFNBY2hDLE9BWkEzVSxPQUFPcU8sS0FBS29nQixVQUFVOEMsU0FBUSxTQUFTN3FCLEdBQzNCLGFBQU5BLElBQ0ZrTCxPQUFPbEwsR0FBSytuQixTQUFTL25CLEdBQ3pCLElBR0krb0IsZ0JBQWdCN2QsT0FBTytDLFdBQ3ZCL0MsT0FBT2dELFdBQWFoRCxPQUFPd2MsV0FDN0J4YyxPQUFPa0QsS0FBT2xELE9BQU93YyxTQUFXLEtBR2xDeGMsT0FBTzhDLEtBQU85QyxPQUFPZ2QsU0FDZGhkLE9BR1QsR0FBSTZjLFNBQVM5WixVQUFZOFosU0FBUzlaLFdBQWEvQyxPQUFPK0MsU0FBVSxDQVM5RCxJQUFLOGEsZ0JBQWdCaEIsU0FBUzlaLFVBSzVCLE9BSkEzVSxPQUFPcU8sS0FBS29nQixVQUFVOEMsU0FBUSxTQUFTN3FCLEdBQ3JDa0wsT0FBT2xMLEdBQUsrbkIsU0FBUy9uQixFQUN2QixJQUNBa0wsT0FBTzhDLEtBQU85QyxPQUFPZ2QsU0FDZGhkLE9BSVQsR0FEQUEsT0FBTytDLFNBQVc4WixTQUFTOVosU0FDdEI4WixTQUFTUixNQUFTdUIsaUJBQWlCZixTQUFTOVosVUFTL0MvQyxPQUFPd2MsU0FBV0ssU0FBU0wsYUFUK0IsQ0FFMUQsSUFEQSxJQUFJb0QsU0FBVy9DLFNBQVNMLFVBQVksSUFBSTlmLE1BQU0sS0FDdkNrakIsUUFBUXZ2QixVQUFZd3NCLFNBQVNSLEtBQU91RCxRQUFRdHJCLFdBQzlDdW9CLFNBQVNSLE9BQU1RLFNBQVNSLEtBQU8sSUFDL0JRLFNBQVM3WixXQUFVNlosU0FBUzdaLFNBQVcsSUFDekIsS0FBZjRjLFFBQVEsSUFBV0EsUUFBUVosUUFBUSxJQUNuQ1ksUUFBUXZ2QixPQUFTLEdBQUd1dkIsUUFBUVosUUFBUSxJQUN4Q2hmLE9BQU93YyxTQUFXb0QsUUFBUTVpQixLQUFLLElBQ2pDLENBVUEsR0FQQWdELE9BQU9zYyxPQUFTTyxTQUFTUCxPQUN6QnRjLE9BQU91YyxNQUFRTSxTQUFTTixNQUN4QnZjLE9BQU9xYyxLQUFPUSxTQUFTUixNQUFRLEdBQy9CcmMsT0FBT29jLEtBQU9TLFNBQVNULEtBQ3ZCcGMsT0FBT2dELFNBQVc2WixTQUFTN1osVUFBWTZaLFNBQVNSLEtBQ2hEcmMsT0FBT2lELEtBQU80WixTQUFTNVosS0FFbkJqRCxPQUFPd2MsVUFBWXhjLE9BQU9zYyxPQUFRLENBQ3BDLElBQUk2QyxFQUFJbmYsT0FBT3djLFVBQVksR0FDdkIvcEIsRUFBSXVOLE9BQU9zYyxRQUFVLEdBQ3pCdGMsT0FBT2tELEtBQU9pYyxFQUFJMXNCLENBQ3BCLENBR0EsT0FGQXVOLE9BQU9tYyxRQUFVbmMsT0FBT21jLFNBQVdVLFNBQVNWLFFBQzVDbmMsT0FBTzhDLEtBQU85QyxPQUFPZ2QsU0FDZGhkLE1BQ1QsQ0FFQSxJQUFJNmYsWUFBZTdmLE9BQU93YyxVQUEwQyxNQUE5QnhjLE9BQU93YyxTQUFTaUQsT0FBTyxHQUN6REssU0FDSWpELFNBQVNSLE1BQ1RRLFNBQVNMLFVBQTRDLE1BQWhDSyxTQUFTTCxTQUFTaUQsT0FBTyxHQUVsRE0sV0FBY0QsVUFBWUQsYUFDWDdmLE9BQU9xYyxNQUFRUSxTQUFTTCxTQUN2Q3dELGNBQWdCRCxXQUNoQkUsUUFBVWpnQixPQUFPd2MsVUFBWXhjLE9BQU93YyxTQUFTOWYsTUFBTSxNQUFRLEdBRTNEd2pCLFdBREFOLFFBQVUvQyxTQUFTTCxVQUFZSyxTQUFTTCxTQUFTOWYsTUFBTSxNQUFRLEdBQ25Ec0QsT0FBTytDLFdBQWE4YSxnQkFBZ0I3ZCxPQUFPK0MsV0EyQjNELEdBcEJJbWQsWUFDRmxnQixPQUFPZ0QsU0FBVyxHQUNsQmhELE9BQU9pRCxLQUFPLEtBQ1ZqRCxPQUFPcWMsT0FDVSxLQUFmNEQsUUFBUSxHQUFXQSxRQUFRLEdBQUtqZ0IsT0FBT3FjLEtBQ3RDNEQsUUFBUWpCLFFBQVFoZixPQUFPcWMsT0FFOUJyYyxPQUFPcWMsS0FBTyxHQUNWUSxTQUFTOVosV0FDWDhaLFNBQVM3WixTQUFXLEtBQ3BCNlosU0FBUzVaLEtBQU8sS0FDWjRaLFNBQVNSLE9BQ1EsS0FBZnVELFFBQVEsR0FBV0EsUUFBUSxHQUFLL0MsU0FBU1IsS0FDeEN1RCxRQUFRWixRQUFRbkMsU0FBU1IsT0FFaENRLFNBQVNSLEtBQU8sTUFFbEIwRCxXQUFhQSxhQUE4QixLQUFmSCxRQUFRLElBQTRCLEtBQWZLLFFBQVEsS0FHdkRILFNBRUY5ZixPQUFPcWMsS0FBUVEsU0FBU1IsTUFBMEIsS0FBbEJRLFNBQVNSLEtBQzNCUSxTQUFTUixLQUFPcmMsT0FBT3FjLEtBQ3JDcmMsT0FBT2dELFNBQVk2WixTQUFTN1osVUFBa0MsS0FBdEI2WixTQUFTN1osU0FDL0I2WixTQUFTN1osU0FBV2hELE9BQU9nRCxTQUM3Q2hELE9BQU9zYyxPQUFTTyxTQUFTUCxPQUN6QnRjLE9BQU91YyxNQUFRTSxTQUFTTixNQUN4QjBELFFBQVVMLGFBRUwsR0FBSUEsUUFBUXZ2QixPQUdaNHZCLFVBQVNBLFFBQVUsSUFDeEJBLFFBQVFFLE1BQ1JGLFFBQVVBLFFBQVFoUCxPQUFPMk8sU0FDekI1ZixPQUFPc2MsT0FBU08sU0FBU1AsT0FDekJ0YyxPQUFPdWMsTUFBUU0sU0FBU04sV0FDbkIsSUFtSlQsU0FBUzZELGtCQUFrQnZ3QixLQUN6QixPQUFlLE1BQVBBLEdBQ1YsQ0FySmN1d0IsQ0FBa0J2RCxTQUFTUCxRQUFTLENBSTlDLEdBQUk0RCxVQUNGbGdCLE9BQU9nRCxTQUFXaEQsT0FBT3FjLEtBQU80RCxRQUFRM3JCLFNBSXBDK3JCLGNBQWFyZ0IsT0FBT3FjLE1BQVFyYyxPQUFPcWMsS0FBS3RzQixRQUFRLEtBQU8sSUFDMUNpUSxPQUFPcWMsS0FBSzNmLE1BQU0sUUFFakNzRCxPQUFPb2MsS0FBT2lFLFdBQVcvckIsUUFDekIwTCxPQUFPcWMsS0FBT3JjLE9BQU9nRCxTQUFXcWQsV0FBVy9yQixTQVcvQyxPQVJBMEwsT0FBT3NjLE9BQVNPLFNBQVNQLE9BQ3pCdGMsT0FBT3VjLE1BQVFNLFNBQVNOLE1BRW5CeUIsT0FBT2hlLE9BQU93YyxXQUFjd0IsT0FBT2hlLE9BQU9zYyxVQUM3Q3RjLE9BQU9rRCxNQUFRbEQsT0FBT3djLFNBQVd4YyxPQUFPd2MsU0FBVyxLQUNwQ3hjLE9BQU9zYyxPQUFTdGMsT0FBT3NjLE9BQVMsS0FFakR0YyxPQUFPOEMsS0FBTzlDLE9BQU9nZCxTQUNkaGQsTUFDVCxDQUVBLElBQUtpZ0IsUUFBUTV2QixPQVdYLE9BUkEyUCxPQUFPd2MsU0FBVyxLQUVkeGMsT0FBT3NjLE9BQ1R0YyxPQUFPa0QsS0FBTyxJQUFNbEQsT0FBT3NjLE9BRTNCdGMsT0FBT2tELEtBQU8sS0FFaEJsRCxPQUFPOEMsS0FBTzlDLE9BQU9nZCxTQUNkaGQsT0FjVCxJQVJBLElBQUlzZ0IsS0FBT0wsUUFBUTVoQixPQUFPLEdBQUcsR0FDekJraUIsa0JBQ0N2Z0IsT0FBT3FjLE1BQVFRLFNBQVNSLFFBQW1CLE1BQVRpRSxNQUF5QixPQUFUQSxPQUMxQyxLQUFUQSxLQUlBRSxHQUFLLEVBQ0E5dUIsRUFBSXV1QixRQUFRNXZCLE9BQVFxQixHQUFLLEVBQUdBLElBRXZCLE1BRFo0dUIsS0FBT0wsUUFBUXZ1QixJQUVidXVCLFFBQVFuSSxPQUFPcG1CLEVBQUcsR0FDQSxPQUFUNHVCLE1BQ1RMLFFBQVFuSSxPQUFPcG1CLEVBQUcsR0FDbEI4dUIsTUFDU0EsS0FDVFAsUUFBUW5JLE9BQU9wbUIsRUFBRyxHQUNsQjh1QixNQUtKLElBQUtULGFBQWVDLGNBQ2xCLEtBQU9RLEtBQU1BLEdBQ1hQLFFBQVFqQixRQUFRLE9BSWhCZSxZQUE2QixLQUFmRSxRQUFRLElBQ3BCQSxRQUFRLElBQStCLE1BQXpCQSxRQUFRLEdBQUdSLE9BQU8sSUFDcENRLFFBQVFqQixRQUFRLElBR2R1QixrQkFBc0QsTUFBakNOLFFBQVFqakIsS0FBSyxLQUFLNkUsUUFBUSxJQUNqRG9lLFFBQVEvaEIsS0FBSyxJQUdmLElBVU1taUIsV0FWRkksV0FBNEIsS0FBZlIsUUFBUSxJQUNwQkEsUUFBUSxJQUErQixNQUF6QkEsUUFBUSxHQUFHUixPQUFPLEdBR2pDUyxZQUNGbGdCLE9BQU9nRCxTQUFXaEQsT0FBT3FjLEtBQU9vRSxXQUFhLEdBQ2JSLFFBQVE1dkIsT0FBUzR2QixRQUFRM3JCLFFBQVUsSUFJL0QrckIsY0FBYXJnQixPQUFPcWMsTUFBUXJjLE9BQU9xYyxLQUFLdHNCLFFBQVEsS0FBTyxJQUMxQ2lRLE9BQU9xYyxLQUFLM2YsTUFBTSxRQUVqQ3NELE9BQU9vYyxLQUFPaUUsV0FBVy9yQixRQUN6QjBMLE9BQU9xYyxLQUFPcmMsT0FBT2dELFNBQVdxZCxXQUFXL3JCLFVBeUIvQyxPQXJCQXlyQixXQUFhQSxZQUFlL2YsT0FBT3FjLE1BQVE0RCxRQUFRNXZCLFVBRWhDb3dCLFlBQ2pCUixRQUFRakIsUUFBUSxJQUdiaUIsUUFBUTV2QixPQUlYMlAsT0FBT3djLFNBQVd5RCxRQUFRampCLEtBQUssTUFIL0JnRCxPQUFPd2MsU0FBVyxLQUNsQnhjLE9BQU9rRCxLQUFPLE1BTVg4YSxPQUFPaGUsT0FBT3djLFdBQWN3QixPQUFPaGUsT0FBT3NjLFVBQzdDdGMsT0FBT2tELE1BQVFsRCxPQUFPd2MsU0FBV3hjLE9BQU93YyxTQUFXLEtBQ3BDeGMsT0FBT3NjLE9BQVN0YyxPQUFPc2MsT0FBUyxLQUVqRHRjLE9BQU9vYyxLQUFPUyxTQUFTVCxNQUFRcGMsT0FBT29jLEtBQ3RDcGMsT0FBT21jLFFBQVVuYyxPQUFPbWMsU0FBV1UsU0FBU1YsUUFDNUNuYyxPQUFPOEMsS0FBTzlDLE9BQU9nZCxTQUNkaGQsTUFDVCxFQUVBa2MsSUFBSWxzQixVQUFVd3VCLFVBQVksV0FDeEIsSUFBSW5DLEtBQU90ckIsS0FBS3NyQixLQUNacFosS0FBT21hLFlBQVllLEtBQUs5QixNQUN4QnBaLE9BRVcsT0FEYkEsS0FBT0EsS0FBSyxNQUVWbFMsS0FBS2tTLEtBQU9BLEtBQUtwQixPQUFPLElBRTFCd2EsS0FBT0EsS0FBS3hhLE9BQU8sRUFBR3dhLEtBQUtoc0IsT0FBUzRTLEtBQUs1UyxTQUV2Q2dzQixPQUFNdHJCLEtBQUtpUyxTQUFXcVosS0FDNUIiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9jbGllbnRzL2NvZ25pdG9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9jbGllbnRzL2ZpcmVob3NlLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL2NsaWVudHMvc3RzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL2xpYi9icm93c2VyQ3J5cHRvTGliLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL2xpYi9icm93c2VySGFzaFV0aWxzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL2xpYi9icm93c2VySG1hYy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9saWIvYnJvd3Nlck1kNS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9saWIvYnJvd3NlclNoYTEuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL2Jyb3dzZXJTaGEyNTYuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL2Jyb3dzZXJfbG9hZGVyLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL2xpYi9jb25maWdfcmVnaW9uYWxfZW5kcG9pbnQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL2NyZWRlbnRpYWxzL2NoYWluYWJsZV90ZW1wb3JhcnlfY3JlZGVudGlhbHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL2NyZWRlbnRpYWxzL2NvZ25pdG9faWRlbnRpdHlfY3JlZGVudGlhbHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL2NyZWRlbnRpYWxzL3NhbWxfY3JlZGVudGlhbHMuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL2NyZWRlbnRpYWxzL3RlbXBvcmFyeV9jcmVkZW50aWFscy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9saWIvY3JlZGVudGlhbHMvd2ViX2lkZW50aXR5X2NyZWRlbnRpYWxzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL2xpYi9ldmVudC1zdHJlYW0vYnVmZmVyZWQtY3JlYXRlLWV2ZW50LXN0cmVhbS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9saWIvZXZlbnQtc3RyZWFtL2V2ZW50LW1lc3NhZ2UtY2h1bmtlci5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9saWIvZXZlbnQtc3RyZWFtL2ludDY0LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL2xpYi9ldmVudC1zdHJlYW0vcGFyc2UtZXZlbnQuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL2V2ZW50LXN0cmVhbS9wYXJzZS1tZXNzYWdlLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL2xpYi9ldmVudC1zdHJlYW0vc3BsaXQtbWVzc2FnZS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9saWIvaHR0cC94aHIuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL3JlYWxjbG9jay9icm93c2VyQ2xvY2suanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbGliL3NlcnZpY2VzL3N0cy5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9saWIveG1sL2Jyb3dzZXJfcGFyc2VyLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL25vZGVfbW9kdWxlcy9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL2F3cy1zZGsvbm9kZV9tb2R1bGVzL2J1ZmZlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvYXdzLXNkay9ub2RlX21vZHVsZXMvYnVmZmVyL25vZGVfbW9kdWxlcy9pZWVlNzU0L2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL25vZGVfbW9kdWxlcy9ldmVudHMvZXZlbnRzLmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9hd3Mtc2RrL25vZGVfbW9kdWxlcy9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovL2Jsb2NrbHktbW9vYy8uL25vZGVfbW9kdWxlcy9xdWVyeXN0cmluZy9kZWNvZGUuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3F1ZXJ5c3RyaW5nL2VuY29kZS5qcyIsIndlYnBhY2s6Ly9ibG9ja2x5LW1vb2MvLi9ub2RlX21vZHVsZXMvcXVlcnlzdHJpbmcvaW5kZXguanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3VybC9ub2RlX21vZHVsZXMvcHVueWNvZGUvcHVueWNvZGUuanMiLCJ3ZWJwYWNrOi8vYmxvY2tseS1tb29jLy4vbm9kZV9tb2R1bGVzL3VybC91cmwuanMiXSwic291cmNlc0NvbnRlbnQiOlsicmVxdWlyZSgnLi4vbGliL25vZGVfbG9hZGVyJyk7XG52YXIgQVdTID0gcmVxdWlyZSgnLi4vbGliL2NvcmUnKTtcbnZhciBTZXJ2aWNlID0gQVdTLlNlcnZpY2U7XG52YXIgYXBpTG9hZGVyID0gQVdTLmFwaUxvYWRlcjtcblxuYXBpTG9hZGVyLnNlcnZpY2VzWydjb2duaXRvaWRlbnRpdHknXSA9IHt9O1xuQVdTLkNvZ25pdG9JZGVudGl0eSA9IFNlcnZpY2UuZGVmaW5lU2VydmljZSgnY29nbml0b2lkZW50aXR5JywgWycyMDE0LTA2LTMwJ10pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwaUxvYWRlci5zZXJ2aWNlc1snY29nbml0b2lkZW50aXR5J10sICcyMDE0LTA2LTMwJywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICB2YXIgbW9kZWwgPSByZXF1aXJlKCcuLi9hcGlzL2NvZ25pdG8taWRlbnRpdHktMjAxNC0wNi0zMC5taW4uanNvbicpO1xuICAgIG1vZGVsLnBhZ2luYXRvcnMgPSByZXF1aXJlKCcuLi9hcGlzL2NvZ25pdG8taWRlbnRpdHktMjAxNC0wNi0zMC5wYWdpbmF0b3JzLmpzb24nKS5wYWdpbmF0aW9uO1xuICAgIHJldHVybiBtb2RlbDtcbiAgfSxcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgY29uZmlndXJhYmxlOiB0cnVlXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBV1MuQ29nbml0b0lkZW50aXR5O1xuIiwicmVxdWlyZSgnLi4vbGliL25vZGVfbG9hZGVyJyk7XG52YXIgQVdTID0gcmVxdWlyZSgnLi4vbGliL2NvcmUnKTtcbnZhciBTZXJ2aWNlID0gQVdTLlNlcnZpY2U7XG52YXIgYXBpTG9hZGVyID0gQVdTLmFwaUxvYWRlcjtcblxuYXBpTG9hZGVyLnNlcnZpY2VzWydmaXJlaG9zZSddID0ge307XG5BV1MuRmlyZWhvc2UgPSBTZXJ2aWNlLmRlZmluZVNlcnZpY2UoJ2ZpcmVob3NlJywgWycyMDE1LTA4LTA0J10pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwaUxvYWRlci5zZXJ2aWNlc1snZmlyZWhvc2UnXSwgJzIwMTUtMDgtMDQnLCB7XG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHZhciBtb2RlbCA9IHJlcXVpcmUoJy4uL2FwaXMvZmlyZWhvc2UtMjAxNS0wOC0wNC5taW4uanNvbicpO1xuICAgIG1vZGVsLnBhZ2luYXRvcnMgPSByZXF1aXJlKCcuLi9hcGlzL2ZpcmVob3NlLTIwMTUtMDgtMDQucGFnaW5hdG9ycy5qc29uJykucGFnaW5hdGlvbjtcbiAgICByZXR1cm4gbW9kZWw7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQVdTLkZpcmVob3NlO1xuIiwicmVxdWlyZSgnLi4vbGliL25vZGVfbG9hZGVyJyk7XG52YXIgQVdTID0gcmVxdWlyZSgnLi4vbGliL2NvcmUnKTtcbnZhciBTZXJ2aWNlID0gQVdTLlNlcnZpY2U7XG52YXIgYXBpTG9hZGVyID0gQVdTLmFwaUxvYWRlcjtcblxuYXBpTG9hZGVyLnNlcnZpY2VzWydzdHMnXSA9IHt9O1xuQVdTLlNUUyA9IFNlcnZpY2UuZGVmaW5lU2VydmljZSgnc3RzJywgWycyMDExLTA2LTE1J10pO1xucmVxdWlyZSgnLi4vbGliL3NlcnZpY2VzL3N0cycpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGFwaUxvYWRlci5zZXJ2aWNlc1snc3RzJ10sICcyMDExLTA2LTE1Jywge1xuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICB2YXIgbW9kZWwgPSByZXF1aXJlKCcuLi9hcGlzL3N0cy0yMDExLTA2LTE1Lm1pbi5qc29uJyk7XG4gICAgbW9kZWwucGFnaW5hdG9ycyA9IHJlcXVpcmUoJy4uL2FwaXMvc3RzLTIwMTEtMDYtMTUucGFnaW5hdG9ycy5qc29uJykucGFnaW5hdGlvbjtcbiAgICByZXR1cm4gbW9kZWw7XG4gIH0sXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gQVdTLlNUUztcbiIsInZhciBIbWFjID0gcmVxdWlyZSgnLi9icm93c2VySG1hYycpO1xudmFyIE1kNSA9IHJlcXVpcmUoJy4vYnJvd3Nlck1kNScpO1xudmFyIFNoYTEgPSByZXF1aXJlKCcuL2Jyb3dzZXJTaGExJyk7XG52YXIgU2hhMjU2ID0gcmVxdWlyZSgnLi9icm93c2VyU2hhMjU2Jyk7XG5cbi8qKlxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IHtcbiAgICBjcmVhdGVIYXNoOiBmdW5jdGlvbiBjcmVhdGVIYXNoKGFsZykge1xuICAgICAgYWxnID0gYWxnLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAoYWxnID09PSAnbWQ1Jykge1xuICAgICAgICByZXR1cm4gbmV3IE1kNSgpO1xuICAgICAgfSBlbHNlIGlmIChhbGcgPT09ICdzaGEyNTYnKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2hhMjU2KCk7XG4gICAgICB9IGVsc2UgaWYgKGFsZyA9PT0gJ3NoYTEnKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2hhMSgpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0hhc2ggYWxnb3JpdGhtICcgKyBhbGcgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgU0RLJyk7XG4gICAgfSxcbiAgICBjcmVhdGVIbWFjOiBmdW5jdGlvbiBjcmVhdGVIbWFjKGFsZywga2V5KSB7XG4gICAgICBhbGcgPSBhbGcudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChhbGcgPT09ICdtZDUnKSB7XG4gICAgICAgIHJldHVybiBuZXcgSG1hYyhNZDUsIGtleSk7XG4gICAgICB9IGVsc2UgaWYgKGFsZyA9PT0gJ3NoYTI1NicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIbWFjKFNoYTI1Niwga2V5KTtcbiAgICAgIH0gZWxzZSBpZiAoYWxnID09PSAnc2hhMScpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBIbWFjKFNoYTEsIGtleSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignSE1BQyBhbGdvcml0aG0gJyArIGFsZyArICcgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgYnJvd3NlciBTREsnKTtcbiAgICB9LFxuICAgIGNyZWF0ZVNpZ246IGZ1bmN0aW9uKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcmVhdGVTaWduIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgYnJvd3NlcicpO1xuICAgIH1cbiAgfTtcbiIsInZhciBCdWZmZXIgPSByZXF1aXJlKCdidWZmZXIvJykuQnVmZmVyO1xuXG4vKipcbiAqIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgdGhlIHN0YXRpYyBtZXRob2QgYGlzVmlld2Agb2YgYEFycmF5QnVmZmVyYCwgd2hpY2ggaXNcbiAqIGUuZy4gbWlzc2luZyBpbiBJRSAxMC5cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuaWYgKFxuICAgIHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAndW5kZWZpbmVkJ1xuKSB7XG4gICAgQXJyYXlCdWZmZXIuaXNWaWV3ID0gZnVuY3Rpb24oYXJnKSB7XG4gICAgICAgIHJldHVybiB2aWV3U3RyaW5ncy5pbmRleE9mKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmcpKSA+IC0xO1xuICAgIH07XG59XG5cbi8qKlxuICogQGFwaSBwcml2YXRlXG4gKi9cbnZhciB2aWV3U3RyaW5ncyA9IFtcbiAgICAnW29iamVjdCBJbnQ4QXJyYXldJyxcbiAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgJ1tvYmplY3QgVWludDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICAnW29iamVjdCBEYXRhVmlld10nLFxuXTtcblxuLyoqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gaXNFbXB0eURhdGEoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoID09PSAwO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YS5ieXRlTGVuZ3RoID09PSAwO1xufVxuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjb252ZXJ0VG9CdWZmZXIoZGF0YSkge1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZGF0YSA9IG5ldyBCdWZmZXIoZGF0YSwgJ3V0ZjgnKTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGggLyBVaW50OEFycmF5LkJZVEVTX1BFUl9FTEVNRU5UKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG59XG5cbi8qKlxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0cyA9IHtcbiAgICBpc0VtcHR5RGF0YTogaXNFbXB0eURhdGEsXG4gICAgY29udmVydFRvQnVmZmVyOiBjb252ZXJ0VG9CdWZmZXIsXG59O1xuIiwidmFyIGhhc2hVdGlscyA9IHJlcXVpcmUoJy4vYnJvd3Nlckhhc2hVdGlscycpO1xuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBIbWFjKGhhc2hDdG9yLCBzZWNyZXQpIHtcbiAgICB0aGlzLmhhc2ggPSBuZXcgaGFzaEN0b3IoKTtcbiAgICB0aGlzLm91dGVyID0gbmV3IGhhc2hDdG9yKCk7XG5cbiAgICB2YXIgaW5uZXIgPSBidWZmZXJGcm9tU2VjcmV0KGhhc2hDdG9yLCBzZWNyZXQpO1xuICAgIHZhciBvdXRlciA9IG5ldyBVaW50OEFycmF5KGhhc2hDdG9yLkJMT0NLX1NJWkUpO1xuICAgIG91dGVyLnNldChpbm5lcik7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhhc2hDdG9yLkJMT0NLX1NJWkU7IGkrKykge1xuICAgICAgICBpbm5lcltpXSBePSAweDM2O1xuICAgICAgICBvdXRlcltpXSBePSAweDVjO1xuICAgIH1cblxuICAgIHRoaXMuaGFzaC51cGRhdGUoaW5uZXIpO1xuICAgIHRoaXMub3V0ZXIudXBkYXRlKG91dGVyKTtcblxuICAgIC8vIFplcm8gb3V0IHRoZSBjb3BpZWQga2V5IGJ1ZmZlci5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlubmVyLmJ5dGVMZW5ndGg7IGkrKykge1xuICAgICAgICBpbm5lcltpXSA9IDA7XG4gICAgfVxufVxuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBIbWFjO1xuXG5IbWFjLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAodG9IYXNoKSB7XG4gICAgaWYgKGhhc2hVdGlscy5pc0VtcHR5RGF0YSh0b0hhc2gpIHx8IHRoaXMuZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5oYXNoLnVwZGF0ZShoYXNoVXRpbHMuY29udmVydFRvQnVmZmVyKHRvSGFzaCkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5lcnJvciA9IGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG59O1xuXG5IbWFjLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgICBpZiAoIXRoaXMub3V0ZXIuZmluaXNoZWQpIHtcbiAgICAgICAgdGhpcy5vdXRlci51cGRhdGUodGhpcy5oYXNoLmRpZ2VzdCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5vdXRlci5kaWdlc3QoZW5jb2RpbmcpO1xufTtcblxuZnVuY3Rpb24gYnVmZmVyRnJvbVNlY3JldChoYXNoQ3Rvciwgc2VjcmV0KSB7XG4gICAgdmFyIGlucHV0ID0gaGFzaFV0aWxzLmNvbnZlcnRUb0J1ZmZlcihzZWNyZXQpO1xuICAgIGlmIChpbnB1dC5ieXRlTGVuZ3RoID4gaGFzaEN0b3IuQkxPQ0tfU0laRSkge1xuICAgICAgICB2YXIgYnVmZmVySGFzaCA9IG5ldyBoYXNoQ3RvcjtcbiAgICAgICAgYnVmZmVySGFzaC51cGRhdGUoaW5wdXQpO1xuICAgICAgICBpbnB1dCA9IGJ1ZmZlckhhc2guZGlnZXN0KCk7XG4gICAgfVxuICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhBcnJheShoYXNoQ3Rvci5CTE9DS19TSVpFKTtcbiAgICBidWZmZXIuc2V0KGlucHV0KTtcbiAgICByZXR1cm4gYnVmZmVyO1xufVxuIiwidmFyIGhhc2hVdGlscyA9IHJlcXVpcmUoJy4vYnJvd3Nlckhhc2hVdGlscycpO1xudmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlci8nKS5CdWZmZXI7XG5cbnZhciBCTE9DS19TSVpFID0gNjQ7XG5cbnZhciBESUdFU1RfTEVOR1RIID0gMTY7XG5cbnZhciBJTklUID0gW1xuICAgIDB4Njc0NTIzMDEsXG4gICAgMHhlZmNkYWI4OSxcbiAgICAweDk4YmFkY2ZlLFxuICAgIDB4MTAzMjU0NzYsXG5dO1xuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBNZDUoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IFtcbiAgICAgICAgMHg2NzQ1MjMwMSxcbiAgICAgICAgMHhlZmNkYWI4OSxcbiAgICAgICAgMHg5OGJhZGNmZSxcbiAgICAgICAgMHgxMDMyNTQ3NixcbiAgICBdO1xuICAgIHRoaXMuYnVmZmVyID0gbmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcihCTE9DS19TSVpFKSk7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSAwO1xuICAgIHRoaXMuYnl0ZXNIYXNoZWQgPSAwO1xuICAgIHRoaXMuZmluaXNoZWQgPSBmYWxzZTtcbn1cblxuLyoqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gTWQ1O1xuXG5NZDUuQkxPQ0tfU0laRSA9IEJMT0NLX1NJWkU7XG5cbk1kNS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKHNvdXJjZURhdGEpIHtcbiAgICBpZiAoaGFzaFV0aWxzLmlzRW1wdHlEYXRhKHNvdXJjZURhdGEpKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5maW5pc2hlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byB1cGRhdGUgYW4gYWxyZWFkeSBmaW5pc2hlZCBoYXNoLicpO1xuICAgIH1cblxuICAgIHZhciBkYXRhID0gaGFzaFV0aWxzLmNvbnZlcnRUb0J1ZmZlcihzb3VyY2VEYXRhKTtcbiAgICB2YXIgcG9zaXRpb24gPSAwO1xuICAgIHZhciBieXRlTGVuZ3RoID0gZGF0YS5ieXRlTGVuZ3RoO1xuICAgIHRoaXMuYnl0ZXNIYXNoZWQgKz0gYnl0ZUxlbmd0aDtcbiAgICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5idWZmZXIuc2V0VWludDgodGhpcy5idWZmZXJMZW5ndGgrKywgZGF0YVtwb3NpdGlvbisrXSk7XG4gICAgICAgIGJ5dGVMZW5ndGgtLTtcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyTGVuZ3RoID09PSBCTE9DS19TSVpFKSB7XG4gICAgICAgICAgICB0aGlzLmhhc2hCdWZmZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuTWQ1LnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgICBpZiAoIXRoaXMuZmluaXNoZWQpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgYnVmZmVyID0gX2EuYnVmZmVyLCB1bmRlY29yYXRlZExlbmd0aCA9IF9hLmJ1ZmZlckxlbmd0aCwgYnl0ZXNIYXNoZWQgPSBfYS5ieXRlc0hhc2hlZDtcbiAgICAgICAgdmFyIGJpdHNIYXNoZWQgPSBieXRlc0hhc2hlZCAqIDg7XG4gICAgICAgIGJ1ZmZlci5zZXRVaW50OCh0aGlzLmJ1ZmZlckxlbmd0aCsrLCAxMjgpO1xuICAgICAgICAvLyBFbnN1cmUgdGhlIGZpbmFsIGJsb2NrIGhhcyBlbm91Z2ggcm9vbSBmb3IgdGhlIGhhc2hlZCBsZW5ndGhcbiAgICAgICAgaWYgKHVuZGVjb3JhdGVkTGVuZ3RoICUgQkxPQ0tfU0laRSA+PSBCTE9DS19TSVpFIC0gOCkge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuYnVmZmVyTGVuZ3RoOyBpIDwgQkxPQ0tfU0laRTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnNldFVpbnQ4KGksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oYXNoQnVmZmVyKCk7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuYnVmZmVyTGVuZ3RoOyBpIDwgQkxPQ0tfU0laRSAtIDg7IGkrKykge1xuICAgICAgICAgICAgYnVmZmVyLnNldFVpbnQ4KGksIDApO1xuICAgICAgICB9XG4gICAgICAgIGJ1ZmZlci5zZXRVaW50MzIoQkxPQ0tfU0laRSAtIDgsIGJpdHNIYXNoZWQgPj4+IDAsIHRydWUpO1xuICAgICAgICBidWZmZXIuc2V0VWludDMyKEJMT0NLX1NJWkUgLSA0LCBNYXRoLmZsb29yKGJpdHNIYXNoZWQgLyAweDEwMDAwMDAwMCksIHRydWUpO1xuICAgICAgICB0aGlzLmhhc2hCdWZmZXIoKTtcbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7XG4gICAgfVxuICAgIHZhciBvdXQgPSBuZXcgRGF0YVZpZXcobmV3IEFycmF5QnVmZmVyKERJR0VTVF9MRU5HVEgpKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDQ7IGkrKykge1xuICAgICAgICBvdXQuc2V0VWludDMyKGkgKiA0LCB0aGlzLnN0YXRlW2ldLCB0cnVlKTtcbiAgICB9XG4gICAgdmFyIGJ1ZmYgPSBuZXcgQnVmZmVyKG91dC5idWZmZXIsIG91dC5ieXRlT2Zmc2V0LCBvdXQuYnl0ZUxlbmd0aCk7XG4gICAgcmV0dXJuIGVuY29kaW5nID8gYnVmZi50b1N0cmluZyhlbmNvZGluZykgOiBidWZmO1xufTtcblxuTWQ1LnByb3RvdHlwZS5oYXNoQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBfYSA9IHRoaXMsIGJ1ZmZlciA9IF9hLmJ1ZmZlciwgc3RhdGUgPSBfYS5zdGF0ZTtcbiAgICB2YXIgYSA9IHN0YXRlWzBdLCBiID0gc3RhdGVbMV0sIGMgPSBzdGF0ZVsyXSwgZCA9IHN0YXRlWzNdO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXIuZ2V0VWludDMyKDAsIHRydWUpLCA3LCAweGQ3NmFhNDc4KTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyLmdldFVpbnQzMig0LCB0cnVlKSwgMTIsIDB4ZThjN2I3NTYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXIuZ2V0VWludDMyKDgsIHRydWUpLCAxNywgMHgyNDIwNzBkYik7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlci5nZXRVaW50MzIoMTIsIHRydWUpLCAyMiwgMHhjMWJkY2VlZSk7XG4gICAgYSA9IGZmKGEsIGIsIGMsIGQsIGJ1ZmZlci5nZXRVaW50MzIoMTYsIHRydWUpLCA3LCAweGY1N2MwZmFmKTtcbiAgICBkID0gZmYoZCwgYSwgYiwgYywgYnVmZmVyLmdldFVpbnQzMigyMCwgdHJ1ZSksIDEyLCAweDQ3ODdjNjJhKTtcbiAgICBjID0gZmYoYywgZCwgYSwgYiwgYnVmZmVyLmdldFVpbnQzMigyNCwgdHJ1ZSksIDE3LCAweGE4MzA0NjEzKTtcbiAgICBiID0gZmYoYiwgYywgZCwgYSwgYnVmZmVyLmdldFVpbnQzMigyOCwgdHJ1ZSksIDIyLCAweGZkNDY5NTAxKTtcbiAgICBhID0gZmYoYSwgYiwgYywgZCwgYnVmZmVyLmdldFVpbnQzMigzMiwgdHJ1ZSksIDcsIDB4Njk4MDk4ZDgpO1xuICAgIGQgPSBmZihkLCBhLCBiLCBjLCBidWZmZXIuZ2V0VWludDMyKDM2LCB0cnVlKSwgMTIsIDB4OGI0NGY3YWYpO1xuICAgIGMgPSBmZihjLCBkLCBhLCBiLCBidWZmZXIuZ2V0VWludDMyKDQwLCB0cnVlKSwgMTcsIDB4ZmZmZjViYjEpO1xuICAgIGIgPSBmZihiLCBjLCBkLCBhLCBidWZmZXIuZ2V0VWludDMyKDQ0LCB0cnVlKSwgMjIsIDB4ODk1Y2Q3YmUpO1xuICAgIGEgPSBmZihhLCBiLCBjLCBkLCBidWZmZXIuZ2V0VWludDMyKDQ4LCB0cnVlKSwgNywgMHg2YjkwMTEyMik7XG4gICAgZCA9IGZmKGQsIGEsIGIsIGMsIGJ1ZmZlci5nZXRVaW50MzIoNTIsIHRydWUpLCAxMiwgMHhmZDk4NzE5Myk7XG4gICAgYyA9IGZmKGMsIGQsIGEsIGIsIGJ1ZmZlci5nZXRVaW50MzIoNTYsIHRydWUpLCAxNywgMHhhNjc5NDM4ZSk7XG4gICAgYiA9IGZmKGIsIGMsIGQsIGEsIGJ1ZmZlci5nZXRVaW50MzIoNjAsIHRydWUpLCAyMiwgMHg0OWI0MDgyMSk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlci5nZXRVaW50MzIoNCwgdHJ1ZSksIDUsIDB4ZjYxZTI1NjIpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXIuZ2V0VWludDMyKDI0LCB0cnVlKSwgOSwgMHhjMDQwYjM0MCk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlci5nZXRVaW50MzIoNDQsIHRydWUpLCAxNCwgMHgyNjVlNWE1MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlci5nZXRVaW50MzIoMCwgdHJ1ZSksIDIwLCAweGU5YjZjN2FhKTtcbiAgICBhID0gZ2coYSwgYiwgYywgZCwgYnVmZmVyLmdldFVpbnQzMigyMCwgdHJ1ZSksIDUsIDB4ZDYyZjEwNWQpO1xuICAgIGQgPSBnZyhkLCBhLCBiLCBjLCBidWZmZXIuZ2V0VWludDMyKDQwLCB0cnVlKSwgOSwgMHgwMjQ0MTQ1Myk7XG4gICAgYyA9IGdnKGMsIGQsIGEsIGIsIGJ1ZmZlci5nZXRVaW50MzIoNjAsIHRydWUpLCAxNCwgMHhkOGExZTY4MSk7XG4gICAgYiA9IGdnKGIsIGMsIGQsIGEsIGJ1ZmZlci5nZXRVaW50MzIoMTYsIHRydWUpLCAyMCwgMHhlN2QzZmJjOCk7XG4gICAgYSA9IGdnKGEsIGIsIGMsIGQsIGJ1ZmZlci5nZXRVaW50MzIoMzYsIHRydWUpLCA1LCAweDIxZTFjZGU2KTtcbiAgICBkID0gZ2coZCwgYSwgYiwgYywgYnVmZmVyLmdldFVpbnQzMig1NiwgdHJ1ZSksIDksIDB4YzMzNzA3ZDYpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXIuZ2V0VWludDMyKDEyLCB0cnVlKSwgMTQsIDB4ZjRkNTBkODcpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXIuZ2V0VWludDMyKDMyLCB0cnVlKSwgMjAsIDB4NDU1YTE0ZWQpO1xuICAgIGEgPSBnZyhhLCBiLCBjLCBkLCBidWZmZXIuZ2V0VWludDMyKDUyLCB0cnVlKSwgNSwgMHhhOWUzZTkwNSk7XG4gICAgZCA9IGdnKGQsIGEsIGIsIGMsIGJ1ZmZlci5nZXRVaW50MzIoOCwgdHJ1ZSksIDksIDB4ZmNlZmEzZjgpO1xuICAgIGMgPSBnZyhjLCBkLCBhLCBiLCBidWZmZXIuZ2V0VWludDMyKDI4LCB0cnVlKSwgMTQsIDB4Njc2ZjAyZDkpO1xuICAgIGIgPSBnZyhiLCBjLCBkLCBhLCBidWZmZXIuZ2V0VWludDMyKDQ4LCB0cnVlKSwgMjAsIDB4OGQyYTRjOGEpO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXIuZ2V0VWludDMyKDIwLCB0cnVlKSwgNCwgMHhmZmZhMzk0Mik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlci5nZXRVaW50MzIoMzIsIHRydWUpLCAxMSwgMHg4NzcxZjY4MSk7XG4gICAgYyA9IGhoKGMsIGQsIGEsIGIsIGJ1ZmZlci5nZXRVaW50MzIoNDQsIHRydWUpLCAxNiwgMHg2ZDlkNjEyMik7XG4gICAgYiA9IGhoKGIsIGMsIGQsIGEsIGJ1ZmZlci5nZXRVaW50MzIoNTYsIHRydWUpLCAyMywgMHhmZGU1MzgwYyk7XG4gICAgYSA9IGhoKGEsIGIsIGMsIGQsIGJ1ZmZlci5nZXRVaW50MzIoNCwgdHJ1ZSksIDQsIDB4YTRiZWVhNDQpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXIuZ2V0VWludDMyKDE2LCB0cnVlKSwgMTEsIDB4NGJkZWNmYTkpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXIuZ2V0VWludDMyKDI4LCB0cnVlKSwgMTYsIDB4ZjZiYjRiNjApO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXIuZ2V0VWludDMyKDQwLCB0cnVlKSwgMjMsIDB4YmViZmJjNzApO1xuICAgIGEgPSBoaChhLCBiLCBjLCBkLCBidWZmZXIuZ2V0VWludDMyKDUyLCB0cnVlKSwgNCwgMHgyODliN2VjNik7XG4gICAgZCA9IGhoKGQsIGEsIGIsIGMsIGJ1ZmZlci5nZXRVaW50MzIoMCwgdHJ1ZSksIDExLCAweGVhYTEyN2ZhKTtcbiAgICBjID0gaGgoYywgZCwgYSwgYiwgYnVmZmVyLmdldFVpbnQzMigxMiwgdHJ1ZSksIDE2LCAweGQ0ZWYzMDg1KTtcbiAgICBiID0gaGgoYiwgYywgZCwgYSwgYnVmZmVyLmdldFVpbnQzMigyNCwgdHJ1ZSksIDIzLCAweDA0ODgxZDA1KTtcbiAgICBhID0gaGgoYSwgYiwgYywgZCwgYnVmZmVyLmdldFVpbnQzMigzNiwgdHJ1ZSksIDQsIDB4ZDlkNGQwMzkpO1xuICAgIGQgPSBoaChkLCBhLCBiLCBjLCBidWZmZXIuZ2V0VWludDMyKDQ4LCB0cnVlKSwgMTEsIDB4ZTZkYjk5ZTUpO1xuICAgIGMgPSBoaChjLCBkLCBhLCBiLCBidWZmZXIuZ2V0VWludDMyKDYwLCB0cnVlKSwgMTYsIDB4MWZhMjdjZjgpO1xuICAgIGIgPSBoaChiLCBjLCBkLCBhLCBidWZmZXIuZ2V0VWludDMyKDgsIHRydWUpLCAyMywgMHhjNGFjNTY2NSk7XG4gICAgYSA9IGlpKGEsIGIsIGMsIGQsIGJ1ZmZlci5nZXRVaW50MzIoMCwgdHJ1ZSksIDYsIDB4ZjQyOTIyNDQpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXIuZ2V0VWludDMyKDI4LCB0cnVlKSwgMTAsIDB4NDMyYWZmOTcpO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXIuZ2V0VWludDMyKDU2LCB0cnVlKSwgMTUsIDB4YWI5NDIzYTcpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXIuZ2V0VWludDMyKDIwLCB0cnVlKSwgMjEsIDB4ZmM5M2EwMzkpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXIuZ2V0VWludDMyKDQ4LCB0cnVlKSwgNiwgMHg2NTViNTljMyk7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlci5nZXRVaW50MzIoMTIsIHRydWUpLCAxMCwgMHg4ZjBjY2M5Mik7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlci5nZXRVaW50MzIoNDAsIHRydWUpLCAxNSwgMHhmZmVmZjQ3ZCk7XG4gICAgYiA9IGlpKGIsIGMsIGQsIGEsIGJ1ZmZlci5nZXRVaW50MzIoNCwgdHJ1ZSksIDIxLCAweDg1ODQ1ZGQxKTtcbiAgICBhID0gaWkoYSwgYiwgYywgZCwgYnVmZmVyLmdldFVpbnQzMigzMiwgdHJ1ZSksIDYsIDB4NmZhODdlNGYpO1xuICAgIGQgPSBpaShkLCBhLCBiLCBjLCBidWZmZXIuZ2V0VWludDMyKDYwLCB0cnVlKSwgMTAsIDB4ZmUyY2U2ZTApO1xuICAgIGMgPSBpaShjLCBkLCBhLCBiLCBidWZmZXIuZ2V0VWludDMyKDI0LCB0cnVlKSwgMTUsIDB4YTMwMTQzMTQpO1xuICAgIGIgPSBpaShiLCBjLCBkLCBhLCBidWZmZXIuZ2V0VWludDMyKDUyLCB0cnVlKSwgMjEsIDB4NGUwODExYTEpO1xuICAgIGEgPSBpaShhLCBiLCBjLCBkLCBidWZmZXIuZ2V0VWludDMyKDE2LCB0cnVlKSwgNiwgMHhmNzUzN2U4Mik7XG4gICAgZCA9IGlpKGQsIGEsIGIsIGMsIGJ1ZmZlci5nZXRVaW50MzIoNDQsIHRydWUpLCAxMCwgMHhiZDNhZjIzNSk7XG4gICAgYyA9IGlpKGMsIGQsIGEsIGIsIGJ1ZmZlci5nZXRVaW50MzIoOCwgdHJ1ZSksIDE1LCAweDJhZDdkMmJiKTtcbiAgICBiID0gaWkoYiwgYywgZCwgYSwgYnVmZmVyLmdldFVpbnQzMigzNiwgdHJ1ZSksIDIxLCAweGViODZkMzkxKTtcbiAgICBzdGF0ZVswXSA9IChhICsgc3RhdGVbMF0pICYgMHhGRkZGRkZGRjtcbiAgICBzdGF0ZVsxXSA9IChiICsgc3RhdGVbMV0pICYgMHhGRkZGRkZGRjtcbiAgICBzdGF0ZVsyXSA9IChjICsgc3RhdGVbMl0pICYgMHhGRkZGRkZGRjtcbiAgICBzdGF0ZVszXSA9IChkICsgc3RhdGVbM10pICYgMHhGRkZGRkZGRjtcbn07XG5cbmZ1bmN0aW9uIGNtbihxLCBhLCBiLCB4LCBzLCB0KSB7XG4gICAgYSA9ICgoKGEgKyBxKSAmIDB4RkZGRkZGRkYpICsgKCh4ICsgdCkgJiAweEZGRkZGRkZGKSkgJiAweEZGRkZGRkZGO1xuICAgIHJldHVybiAoKChhIDw8IHMpIHwgKGEgPj4+ICgzMiAtIHMpKSkgKyBiKSAmIDB4RkZGRkZGRkY7XG59XG5cbmZ1bmN0aW9uIGZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgICByZXR1cm4gY21uKChiICYgYykgfCAoKH5iKSAmIGQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gZ2coYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICAgIHJldHVybiBjbW4oKGIgJiBkKSB8IChjICYgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBoaChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIGNtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBpaShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gICAgcmV0dXJuIGNtbihjIF4gKGIgfCAofmQpKSwgYSwgYiwgeCwgcywgdCk7XG59XG4iLCJ2YXIgQnVmZmVyID0gcmVxdWlyZSgnYnVmZmVyLycpLkJ1ZmZlcjtcbnZhciBoYXNoVXRpbHMgPSByZXF1aXJlKCcuL2Jyb3dzZXJIYXNoVXRpbHMnKTtcblxudmFyIEJMT0NLX1NJWkUgPSA2NDtcblxudmFyIERJR0VTVF9MRU5HVEggPSAyMDtcblxudmFyIEtFWSA9IG5ldyBVaW50MzJBcnJheShbXG4gICAgMHg1YTgyNzk5OSxcbiAgICAweDZlZDllYmExLFxuICAgIDB4OGYxYmJjZGMgfCAwLFxuICAgIDB4Y2E2MmMxZDYgfCAwXG5dKTtcblxudmFyIElOSVQgPSBbXG4gICAgMHg2YTA5ZTY2NyxcbiAgICAweGJiNjdhZTg1LFxuICAgIDB4M2M2ZWYzNzIsXG4gICAgMHhhNTRmZjUzYSxcbiAgICAweDUxMGU1MjdmLFxuICAgIDB4OWIwNTY4OGMsXG4gICAgMHgxZjgzZDlhYixcbiAgICAweDViZTBjZDE5LFxuXTtcblxudmFyIE1BWF9IQVNIQUJMRV9MRU5HVEggPSBNYXRoLnBvdygyLCA1MykgLSAxO1xuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBTaGExKCkge1xuICAgIHRoaXMuaDAgPSAweDY3NDUyMzAxO1xuICAgIHRoaXMuaDEgPSAweEVGQ0RBQjg5O1xuICAgIHRoaXMuaDIgPSAweDk4QkFEQ0ZFO1xuICAgIHRoaXMuaDMgPSAweDEwMzI1NDc2O1xuICAgIHRoaXMuaDQgPSAweEMzRDJFMUYwO1xuICAgIC8vIFRoZSBmaXJzdCA2NCBieXRlcyAoMTYgd29yZHMpIGlzIHRoZSBkYXRhIGNodW5rXG4gICAgdGhpcy5ibG9jayA9IG5ldyBVaW50MzJBcnJheSg4MCk7XG4gICAgdGhpcy5vZmZzZXQgPSAwO1xuICAgIHRoaXMuc2hpZnQgPSAyNDtcbiAgICB0aGlzLnRvdGFsTGVuZ3RoID0gMDtcbn1cblxuLyoqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzID0gU2hhMTtcblxuU2hhMS5CTE9DS19TSVpFID0gQkxPQ0tfU0laRTtcblxuU2hhMS5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICBpZiAodGhpcy5maW5pc2hlZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dGVtcHRlZCB0byB1cGRhdGUgYW4gYWxyZWFkeSBmaW5pc2hlZCBoYXNoLicpO1xuICAgIH1cblxuICAgIGlmIChoYXNoVXRpbHMuaXNFbXB0eURhdGEoZGF0YSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZGF0YSA9IGhhc2hVdGlscy5jb252ZXJ0VG9CdWZmZXIoZGF0YSk7XG5cbiAgICB2YXIgbGVuZ3RoID0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy50b3RhbExlbmd0aCArPSBsZW5ndGggKiA4O1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy53cml0ZShkYXRhW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbn07XG5cblNoYTEucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUoYnl0ZSkge1xuICAgIHRoaXMuYmxvY2tbdGhpcy5vZmZzZXRdIHw9IChieXRlICYgMHhmZikgPDwgdGhpcy5zaGlmdDtcbiAgICBpZiAodGhpcy5zaGlmdCkge1xuICAgICAgICB0aGlzLnNoaWZ0IC09IDg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vZmZzZXQrKztcbiAgICAgICAgdGhpcy5zaGlmdCA9IDI0O1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9mZnNldCA9PT0gMTYpIHRoaXMucHJvY2Vzc0Jsb2NrKCk7XG59O1xuXG5TaGExLnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgICAvLyBQYWRcbiAgICB0aGlzLndyaXRlKDB4ODApO1xuICAgIGlmICh0aGlzLm9mZnNldCA+IDE0IHx8ICh0aGlzLm9mZnNldCA9PT0gMTQgJiYgdGhpcy5zaGlmdCA8IDI0KSkge1xuICAgICAgdGhpcy5wcm9jZXNzQmxvY2soKTtcbiAgICB9XG4gICAgdGhpcy5vZmZzZXQgPSAxNDtcbiAgICB0aGlzLnNoaWZ0ID0gMjQ7XG5cbiAgICAvLyA2NC1iaXQgbGVuZ3RoIGJpZy1lbmRpYW5cbiAgICB0aGlzLndyaXRlKDB4MDApOyAvLyBudW1iZXJzIHRoaXMgYmlnIGFyZW4ndCBhY2N1cmF0ZSBpbiBqYXZhc2NyaXB0IGFueXdheVxuICAgIHRoaXMud3JpdGUoMHgwMCk7IC8vIC4uU28ganVzdCBoYXJkLWNvZGUgdG8gemVyby5cbiAgICB0aGlzLndyaXRlKHRoaXMudG90YWxMZW5ndGggPiAweGZmZmZmZmZmZmYgPyB0aGlzLnRvdGFsTGVuZ3RoIC8gMHgxMDAwMDAwMDAwMCA6IDB4MDApO1xuICAgIHRoaXMud3JpdGUodGhpcy50b3RhbExlbmd0aCA+IDB4ZmZmZmZmZmYgPyB0aGlzLnRvdGFsTGVuZ3RoIC8gMHgxMDAwMDAwMDAgOiAweDAwKTtcbiAgICBmb3IgKHZhciBzID0gMjQ7IHMgPj0gMDsgcyAtPSA4KSB7XG4gICAgICAgIHRoaXMud3JpdGUodGhpcy50b3RhbExlbmd0aCA+PiBzKTtcbiAgICB9XG4gICAgLy8gVGhlIHZhbHVlIGluIHN0YXRlIGlzIGxpdHRsZS1lbmRpYW4gcmF0aGVyIHRoYW4gYmlnLWVuZGlhbiwgc28gZmxpcFxuICAgIC8vIGVhY2ggd29yZCBpbnRvIGEgbmV3IFVpbnQ4QXJyYXlcbiAgICB2YXIgb3V0ID0gbmV3IEJ1ZmZlcihESUdFU1RfTEVOR1RIKTtcbiAgICB2YXIgb3V0VmlldyA9IG5ldyBEYXRhVmlldyhvdXQuYnVmZmVyKTtcbiAgICBvdXRWaWV3LnNldFVpbnQzMigwLCB0aGlzLmgwLCBmYWxzZSk7XG4gICAgb3V0Vmlldy5zZXRVaW50MzIoNCwgdGhpcy5oMSwgZmFsc2UpO1xuICAgIG91dFZpZXcuc2V0VWludDMyKDgsIHRoaXMuaDIsIGZhbHNlKTtcbiAgICBvdXRWaWV3LnNldFVpbnQzMigxMiwgdGhpcy5oMywgZmFsc2UpO1xuICAgIG91dFZpZXcuc2V0VWludDMyKDE2LCB0aGlzLmg0LCBmYWxzZSk7XG5cbiAgICByZXR1cm4gZW5jb2RpbmcgPyBvdXQudG9TdHJpbmcoZW5jb2RpbmcpIDogb3V0O1xufTtcblxuU2hhMS5wcm90b3R5cGUucHJvY2Vzc0Jsb2NrID0gZnVuY3Rpb24gcHJvY2Vzc0Jsb2NrKCkge1xuICAgIC8vIEV4dGVuZCB0aGUgc2l4dGVlbiAzMi1iaXQgd29yZHMgaW50byBlaWdodHkgMzItYml0IHdvcmRzOlxuICAgIGZvciAodmFyIGkgPSAxNjsgaSA8IDgwOyBpKyspIHtcbiAgICAgIHZhciB3ID0gdGhpcy5ibG9ja1tpIC0gM10gXiB0aGlzLmJsb2NrW2kgLSA4XSBeIHRoaXMuYmxvY2tbaSAtIDE0XSBeIHRoaXMuYmxvY2tbaSAtIDE2XTtcbiAgICAgIHRoaXMuYmxvY2tbaV0gPSAodyA8PCAxKSB8ICh3ID4+PiAzMSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhbGl6ZSBoYXNoIHZhbHVlIGZvciB0aGlzIGNodW5rOlxuICAgIHZhciBhID0gdGhpcy5oMDtcbiAgICB2YXIgYiA9IHRoaXMuaDE7XG4gICAgdmFyIGMgPSB0aGlzLmgyO1xuICAgIHZhciBkID0gdGhpcy5oMztcbiAgICB2YXIgZSA9IHRoaXMuaDQ7XG4gICAgdmFyIGYsIGs7XG5cbiAgICAvLyBNYWluIGxvb3A6XG4gICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspIHtcbiAgICAgIGlmIChpIDwgMjApIHtcbiAgICAgICAgZiA9IGQgXiAoYiAmIChjIF4gZCkpO1xuICAgICAgICBrID0gMHg1QTgyNzk5OTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGkgPCA0MCkge1xuICAgICAgICBmID0gYiBeIGMgXiBkO1xuICAgICAgICBrID0gMHg2RUQ5RUJBMTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGkgPCA2MCkge1xuICAgICAgICBmID0gKGIgJiBjKSB8IChkICYgKGIgfCBjKSk7XG4gICAgICAgIGsgPSAweDhGMUJCQ0RDO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGYgPSBiIF4gYyBeIGQ7XG4gICAgICAgIGsgPSAweENBNjJDMUQ2O1xuICAgICAgfVxuICAgICAgdmFyIHRlbXAgPSAoYSA8PCA1IHwgYSA+Pj4gMjcpICsgZiArIGUgKyBrICsgKHRoaXMuYmxvY2tbaV18MCk7XG4gICAgICBlID0gZDtcbiAgICAgIGQgPSBjO1xuICAgICAgYyA9IChiIDw8IDMwIHwgYiA+Pj4gMik7XG4gICAgICBiID0gYTtcbiAgICAgIGEgPSB0ZW1wO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGlzIGNodW5rJ3MgaGFzaCB0byByZXN1bHQgc28gZmFyOlxuICAgIHRoaXMuaDAgPSAodGhpcy5oMCArIGEpIHwgMDtcbiAgICB0aGlzLmgxID0gKHRoaXMuaDEgKyBiKSB8IDA7XG4gICAgdGhpcy5oMiA9ICh0aGlzLmgyICsgYykgfCAwO1xuICAgIHRoaXMuaDMgPSAodGhpcy5oMyArIGQpIHwgMDtcbiAgICB0aGlzLmg0ID0gKHRoaXMuaDQgKyBlKSB8IDA7XG5cbiAgICAvLyBUaGUgYmxvY2sgaXMgbm93IHJldXNhYmxlLlxuICAgIHRoaXMub2Zmc2V0ID0gMDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgICB0aGlzLmJsb2NrW2ldID0gMDtcbiAgICB9XG59O1xuIiwidmFyIEJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlci8nKS5CdWZmZXI7XG52YXIgaGFzaFV0aWxzID0gcmVxdWlyZSgnLi9icm93c2VySGFzaFV0aWxzJyk7XG5cbnZhciBCTE9DS19TSVpFID0gNjQ7XG5cbnZhciBESUdFU1RfTEVOR1RIID0gMzI7XG5cbnZhciBLRVkgPSBuZXcgVWludDMyQXJyYXkoW1xuICAgIDB4NDI4YTJmOTgsXG4gICAgMHg3MTM3NDQ5MSxcbiAgICAweGI1YzBmYmNmLFxuICAgIDB4ZTliNWRiYTUsXG4gICAgMHgzOTU2YzI1YixcbiAgICAweDU5ZjExMWYxLFxuICAgIDB4OTIzZjgyYTQsXG4gICAgMHhhYjFjNWVkNSxcbiAgICAweGQ4MDdhYTk4LFxuICAgIDB4MTI4MzViMDEsXG4gICAgMHgyNDMxODViZSxcbiAgICAweDU1MGM3ZGMzLFxuICAgIDB4NzJiZTVkNzQsXG4gICAgMHg4MGRlYjFmZSxcbiAgICAweDliZGMwNmE3LFxuICAgIDB4YzE5YmYxNzQsXG4gICAgMHhlNDliNjljMSxcbiAgICAweGVmYmU0Nzg2LFxuICAgIDB4MGZjMTlkYzYsXG4gICAgMHgyNDBjYTFjYyxcbiAgICAweDJkZTkyYzZmLFxuICAgIDB4NGE3NDg0YWEsXG4gICAgMHg1Y2IwYTlkYyxcbiAgICAweDc2Zjk4OGRhLFxuICAgIDB4OTgzZTUxNTIsXG4gICAgMHhhODMxYzY2ZCxcbiAgICAweGIwMDMyN2M4LFxuICAgIDB4YmY1OTdmYzcsXG4gICAgMHhjNmUwMGJmMyxcbiAgICAweGQ1YTc5MTQ3LFxuICAgIDB4MDZjYTYzNTEsXG4gICAgMHgxNDI5Mjk2NyxcbiAgICAweDI3YjcwYTg1LFxuICAgIDB4MmUxYjIxMzgsXG4gICAgMHg0ZDJjNmRmYyxcbiAgICAweDUzMzgwZDEzLFxuICAgIDB4NjUwYTczNTQsXG4gICAgMHg3NjZhMGFiYixcbiAgICAweDgxYzJjOTJlLFxuICAgIDB4OTI3MjJjODUsXG4gICAgMHhhMmJmZThhMSxcbiAgICAweGE4MWE2NjRiLFxuICAgIDB4YzI0YjhiNzAsXG4gICAgMHhjNzZjNTFhMyxcbiAgICAweGQxOTJlODE5LFxuICAgIDB4ZDY5OTA2MjQsXG4gICAgMHhmNDBlMzU4NSxcbiAgICAweDEwNmFhMDcwLFxuICAgIDB4MTlhNGMxMTYsXG4gICAgMHgxZTM3NmMwOCxcbiAgICAweDI3NDg3NzRjLFxuICAgIDB4MzRiMGJjYjUsXG4gICAgMHgzOTFjMGNiMyxcbiAgICAweDRlZDhhYTRhLFxuICAgIDB4NWI5Y2NhNGYsXG4gICAgMHg2ODJlNmZmMyxcbiAgICAweDc0OGY4MmVlLFxuICAgIDB4NzhhNTYzNmYsXG4gICAgMHg4NGM4NzgxNCxcbiAgICAweDhjYzcwMjA4LFxuICAgIDB4OTBiZWZmZmEsXG4gICAgMHhhNDUwNmNlYixcbiAgICAweGJlZjlhM2Y3LFxuICAgIDB4YzY3MTc4ZjJcbl0pO1xuXG52YXIgSU5JVCA9IFtcbiAgICAweDZhMDllNjY3LFxuICAgIDB4YmI2N2FlODUsXG4gICAgMHgzYzZlZjM3MixcbiAgICAweGE1NGZmNTNhLFxuICAgIDB4NTEwZTUyN2YsXG4gICAgMHg5YjA1Njg4YyxcbiAgICAweDFmODNkOWFiLFxuICAgIDB4NWJlMGNkMTksXG5dO1xuXG52YXIgTUFYX0hBU0hBQkxFX0xFTkdUSCA9IE1hdGgucG93KDIsIDUzKSAtIDE7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gU2hhMjU2KCkge1xuICAgIHRoaXMuc3RhdGUgPSBbXG4gICAgICAgIDB4NmEwOWU2NjcsXG4gICAgICAgIDB4YmI2N2FlODUsXG4gICAgICAgIDB4M2M2ZWYzNzIsXG4gICAgICAgIDB4YTU0ZmY1M2EsXG4gICAgICAgIDB4NTEwZTUyN2YsXG4gICAgICAgIDB4OWIwNTY4OGMsXG4gICAgICAgIDB4MWY4M2Q5YWIsXG4gICAgICAgIDB4NWJlMGNkMTksXG4gICAgXTtcbiAgICB0aGlzLnRlbXAgPSBuZXcgSW50MzJBcnJheSg2NCk7XG4gICAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSg2NCk7XG4gICAgdGhpcy5idWZmZXJMZW5ndGggPSAwO1xuICAgIHRoaXMuYnl0ZXNIYXNoZWQgPSAwO1xuICAgIC8qKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgdGhpcy5maW5pc2hlZCA9IGZhbHNlO1xufVxuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHMgPSBTaGEyNTY7XG5cblNoYTI1Ni5CTE9DS19TSVpFID0gQkxPQ0tfU0laRTtcblxuU2hhMjU2LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgIGlmICh0aGlzLmZpbmlzaGVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQXR0ZW1wdGVkIHRvIHVwZGF0ZSBhbiBhbHJlYWR5IGZpbmlzaGVkIGhhc2guJyk7XG4gICAgfVxuXG4gICAgaWYgKGhhc2hVdGlscy5pc0VtcHR5RGF0YShkYXRhKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBkYXRhID0gaGFzaFV0aWxzLmNvbnZlcnRUb0J1ZmZlcihkYXRhKTtcblxuICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgdGhpcy5ieXRlc0hhc2hlZCArPSBieXRlTGVuZ3RoO1xuICAgIGlmICh0aGlzLmJ5dGVzSGFzaGVkICogOCA+IE1BWF9IQVNIQUJMRV9MRU5HVEgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaGFzaCBtb3JlIHRoYW4gMl41MyAtIDEgYml0cycpO1xuICAgIH1cblxuICAgIHdoaWxlIChieXRlTGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXSA9IGRhdGFbcG9zaXRpb24rK107XG4gICAgICAgIGJ5dGVMZW5ndGgtLTtcbiAgICAgICAgaWYgKHRoaXMuYnVmZmVyTGVuZ3RoID09PSBCTE9DS19TSVpFKSB7XG4gICAgICAgICAgICB0aGlzLmhhc2hCdWZmZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyTGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xufTtcblxuU2hhMjU2LnByb3RvdHlwZS5kaWdlc3QgPSBmdW5jdGlvbiAoZW5jb2RpbmcpIHtcbiAgICBpZiAoIXRoaXMuZmluaXNoZWQpIHtcbiAgICAgICAgdmFyIGJpdHNIYXNoZWQgPSB0aGlzLmJ5dGVzSGFzaGVkICogODtcbiAgICAgICAgdmFyIGJ1ZmZlclZpZXcgPSBuZXcgRGF0YVZpZXcodGhpcy5idWZmZXIuYnVmZmVyLCB0aGlzLmJ1ZmZlci5ieXRlT2Zmc2V0LCB0aGlzLmJ1ZmZlci5ieXRlTGVuZ3RoKTtcbiAgICAgICAgdmFyIHVuZGVjb3JhdGVkTGVuZ3RoID0gdGhpcy5idWZmZXJMZW5ndGg7XG4gICAgICAgIGJ1ZmZlclZpZXcuc2V0VWludDgodGhpcy5idWZmZXJMZW5ndGgrKywgMHg4MCk7XG4gICAgICAgIC8vIEVuc3VyZSB0aGUgZmluYWwgYmxvY2sgaGFzIGVub3VnaCByb29tIGZvciB0aGUgaGFzaGVkIGxlbmd0aFxuICAgICAgICBpZiAodW5kZWNvcmF0ZWRMZW5ndGggJSBCTE9DS19TSVpFID49IEJMT0NLX1NJWkUgLSA4KSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gdGhpcy5idWZmZXJMZW5ndGg7IGkgPCBCTE9DS19TSVpFOyBpKyspIHtcbiAgICAgICAgICAgICAgICBidWZmZXJWaWV3LnNldFVpbnQ4KGksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oYXNoQnVmZmVyKCk7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlckxlbmd0aCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgaSA9IHRoaXMuYnVmZmVyTGVuZ3RoOyBpIDwgQkxPQ0tfU0laRSAtIDg7IGkrKykge1xuICAgICAgICAgICAgYnVmZmVyVmlldy5zZXRVaW50OChpLCAwKTtcbiAgICAgICAgfVxuICAgICAgICBidWZmZXJWaWV3LnNldFVpbnQzMihCTE9DS19TSVpFIC0gOCwgTWF0aC5mbG9vcihiaXRzSGFzaGVkIC8gMHgxMDAwMDAwMDApLCB0cnVlKTtcbiAgICAgICAgYnVmZmVyVmlldy5zZXRVaW50MzIoQkxPQ0tfU0laRSAtIDQsIGJpdHNIYXNoZWQpO1xuICAgICAgICB0aGlzLmhhc2hCdWZmZXIoKTtcbiAgICAgICAgdGhpcy5maW5pc2hlZCA9IHRydWU7XG4gICAgfVxuICAgIC8vIFRoZSB2YWx1ZSBpbiBzdGF0ZSBpcyBsaXR0bGUtZW5kaWFuIHJhdGhlciB0aGFuIGJpZy1lbmRpYW4sIHNvIGZsaXBcbiAgICAvLyBlYWNoIHdvcmQgaW50byBhIG5ldyBVaW50OEFycmF5XG4gICAgdmFyIG91dCA9IG5ldyBCdWZmZXIoRElHRVNUX0xFTkdUSCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA4OyBpKyspIHtcbiAgICAgICAgb3V0W2kgKiA0XSA9ICh0aGlzLnN0YXRlW2ldID4+PiAyNCkgJiAweGZmO1xuICAgICAgICBvdXRbaSAqIDQgKyAxXSA9ICh0aGlzLnN0YXRlW2ldID4+PiAxNikgJiAweGZmO1xuICAgICAgICBvdXRbaSAqIDQgKyAyXSA9ICh0aGlzLnN0YXRlW2ldID4+PiA4KSAmIDB4ZmY7XG4gICAgICAgIG91dFtpICogNCArIDNdID0gKHRoaXMuc3RhdGVbaV0gPj4+IDApICYgMHhmZjtcbiAgICB9XG4gICAgcmV0dXJuIGVuY29kaW5nID8gb3V0LnRvU3RyaW5nKGVuY29kaW5nKSA6IG91dDtcbn07XG5cblNoYTI1Ni5wcm90b3R5cGUuaGFzaEJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2EgPSB0aGlzLFxuICAgICAgICBidWZmZXIgPSBfYS5idWZmZXIsXG4gICAgICAgIHN0YXRlID0gX2Euc3RhdGU7XG4gICAgdmFyIHN0YXRlMCA9IHN0YXRlWzBdLFxuICAgICAgICBzdGF0ZTEgPSBzdGF0ZVsxXSxcbiAgICAgICAgc3RhdGUyID0gc3RhdGVbMl0sXG4gICAgICAgIHN0YXRlMyA9IHN0YXRlWzNdLFxuICAgICAgICBzdGF0ZTQgPSBzdGF0ZVs0XSxcbiAgICAgICAgc3RhdGU1ID0gc3RhdGVbNV0sXG4gICAgICAgIHN0YXRlNiA9IHN0YXRlWzZdLFxuICAgICAgICBzdGF0ZTcgPSBzdGF0ZVs3XTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJMT0NLX1NJWkU7IGkrKykge1xuICAgICAgICBpZiAoaSA8IDE2KSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBbaV0gPSAoKChidWZmZXJbaSAqIDRdICYgMHhmZikgPDwgMjQpIHxcbiAgICAgICAgICAgICAgICAoKGJ1ZmZlclsoaSAqIDQpICsgMV0gJiAweGZmKSA8PCAxNikgfFxuICAgICAgICAgICAgICAgICgoYnVmZmVyWyhpICogNCkgKyAyXSAmIDB4ZmYpIDw8IDgpIHxcbiAgICAgICAgICAgICAgICAoYnVmZmVyWyhpICogNCkgKyAzXSAmIDB4ZmYpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB1ID0gdGhpcy50ZW1wW2kgLSAyXTtcbiAgICAgICAgICAgIHZhciB0MV8xID0gKHUgPj4+IDE3IHwgdSA8PCAxNSkgXlxuICAgICAgICAgICAgICAgICh1ID4+PiAxOSB8IHUgPDwgMTMpIF5cbiAgICAgICAgICAgICAgICAodSA+Pj4gMTApO1xuICAgICAgICAgICAgdSA9IHRoaXMudGVtcFtpIC0gMTVdO1xuICAgICAgICAgICAgdmFyIHQyXzEgPSAodSA+Pj4gNyB8IHUgPDwgMjUpIF5cbiAgICAgICAgICAgICAgICAodSA+Pj4gMTggfCB1IDw8IDE0KSBeXG4gICAgICAgICAgICAgICAgKHUgPj4+IDMpO1xuICAgICAgICAgICAgdGhpcy50ZW1wW2ldID0gKHQxXzEgKyB0aGlzLnRlbXBbaSAtIDddIHwgMCkgK1xuICAgICAgICAgICAgICAgICh0Ml8xICsgdGhpcy50ZW1wW2kgLSAxNl0gfCAwKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdDEgPSAoKCgoKHN0YXRlNCA+Pj4gNiB8IHN0YXRlNCA8PCAyNikgXlxuICAgICAgICAgICAgKHN0YXRlNCA+Pj4gMTEgfCBzdGF0ZTQgPDwgMjEpIF5cbiAgICAgICAgICAgIChzdGF0ZTQgPj4+IDI1IHwgc3RhdGU0IDw8IDcpKVxuICAgICAgICAgICAgKyAoKHN0YXRlNCAmIHN0YXRlNSkgXiAofnN0YXRlNCAmIHN0YXRlNikpKSB8IDApXG4gICAgICAgICAgICArICgoc3RhdGU3ICsgKChLRVlbaV0gKyB0aGlzLnRlbXBbaV0pIHwgMCkpIHwgMCkpIHwgMDtcbiAgICAgICAgdmFyIHQyID0gKCgoc3RhdGUwID4+PiAyIHwgc3RhdGUwIDw8IDMwKSBeXG4gICAgICAgICAgICAoc3RhdGUwID4+PiAxMyB8IHN0YXRlMCA8PCAxOSkgXlxuICAgICAgICAgICAgKHN0YXRlMCA+Pj4gMjIgfCBzdGF0ZTAgPDwgMTApKSArICgoc3RhdGUwICYgc3RhdGUxKSBeIChzdGF0ZTAgJiBzdGF0ZTIpIF4gKHN0YXRlMSAmIHN0YXRlMikpKSB8IDA7XG4gICAgICAgIHN0YXRlNyA9IHN0YXRlNjtcbiAgICAgICAgc3RhdGU2ID0gc3RhdGU1O1xuICAgICAgICBzdGF0ZTUgPSBzdGF0ZTQ7XG4gICAgICAgIHN0YXRlNCA9IChzdGF0ZTMgKyB0MSkgfCAwO1xuICAgICAgICBzdGF0ZTMgPSBzdGF0ZTI7XG4gICAgICAgIHN0YXRlMiA9IHN0YXRlMTtcbiAgICAgICAgc3RhdGUxID0gc3RhdGUwO1xuICAgICAgICBzdGF0ZTAgPSAodDEgKyB0MikgfCAwO1xuICAgIH1cbiAgICBzdGF0ZVswXSArPSBzdGF0ZTA7XG4gICAgc3RhdGVbMV0gKz0gc3RhdGUxO1xuICAgIHN0YXRlWzJdICs9IHN0YXRlMjtcbiAgICBzdGF0ZVszXSArPSBzdGF0ZTM7XG4gICAgc3RhdGVbNF0gKz0gc3RhdGU0O1xuICAgIHN0YXRlWzVdICs9IHN0YXRlNTtcbiAgICBzdGF0ZVs2XSArPSBzdGF0ZTY7XG4gICAgc3RhdGVbN10gKz0gc3RhdGU3O1xufTtcbiIsInZhciB1dGlsID0gcmVxdWlyZSgnLi91dGlsJyk7XG5cbi8vIGJyb3dzZXIgc3BlY2lmaWMgbW9kdWxlc1xudXRpbC5jcnlwdG8ubGliID0gcmVxdWlyZSgnLi9icm93c2VyQ3J5cHRvTGliJyk7XG51dGlsLkJ1ZmZlciA9IHJlcXVpcmUoJ2J1ZmZlci8nKS5CdWZmZXI7XG51dGlsLnVybCA9IHJlcXVpcmUoJ3VybC8nKTtcbnV0aWwucXVlcnlzdHJpbmcgPSByZXF1aXJlKCdxdWVyeXN0cmluZy8nKTtcbnV0aWwucmVhbENsb2NrID0gcmVxdWlyZSgnLi9yZWFsY2xvY2svYnJvd3NlckNsb2NrJyk7XG51dGlsLmVudmlyb25tZW50ID0gJ2pzJztcbnV0aWwuY3JlYXRlRXZlbnRTdHJlYW0gPSByZXF1aXJlKCcuL2V2ZW50LXN0cmVhbS9idWZmZXJlZC1jcmVhdGUtZXZlbnQtc3RyZWFtJykuY3JlYXRlRXZlbnRTdHJlYW07XG51dGlsLmlzQnJvd3NlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbnV0aWwuaXNOb2RlID0gZnVuY3Rpb24oKSB7IHJldHVybiBmYWxzZTsgfTtcblxudmFyIEFXUyA9IHJlcXVpcmUoJy4vY29yZScpO1xuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IEFXUztcblxucmVxdWlyZSgnLi9jcmVkZW50aWFscycpO1xucmVxdWlyZSgnLi9jcmVkZW50aWFscy9jcmVkZW50aWFsX3Byb3ZpZGVyX2NoYWluJyk7XG5yZXF1aXJlKCcuL2NyZWRlbnRpYWxzL3RlbXBvcmFyeV9jcmVkZW50aWFscycpO1xucmVxdWlyZSgnLi9jcmVkZW50aWFscy9jaGFpbmFibGVfdGVtcG9yYXJ5X2NyZWRlbnRpYWxzJyk7XG5yZXF1aXJlKCcuL2NyZWRlbnRpYWxzL3dlYl9pZGVudGl0eV9jcmVkZW50aWFscycpO1xucmVxdWlyZSgnLi9jcmVkZW50aWFscy9jb2duaXRvX2lkZW50aXR5X2NyZWRlbnRpYWxzJyk7XG5yZXF1aXJlKCcuL2NyZWRlbnRpYWxzL3NhbWxfY3JlZGVudGlhbHMnKTtcblxuLy8gTG9hZCB0aGUgRE9NUGFyc2VyIFhNTCBwYXJzZXJcbkFXUy5YTUwuUGFyc2VyID0gcmVxdWlyZSgnLi94bWwvYnJvd3Nlcl9wYXJzZXInKTtcblxuLy8gTG9hZCB0aGUgWEhSIEh0dHBDbGllbnRcbnJlcXVpcmUoJy4vaHR0cC94aHInKTtcblxuaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJykge1xuICB2YXIgcHJvY2VzcyA9IHtcbiAgICBicm93c2VyOiB0cnVlXG4gIH07XG59XG4iLCJ2YXIgQVdTID0gcmVxdWlyZSgnLi9jb3JlJyk7XG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZ2lvbmFsRW5kcG9pbnRzRmxhZ1ZhbHVlKGNvbmZpZ1ZhbHVlLCBlcnJvck9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBjb25maWdWYWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XG4gIGVsc2UgaWYgKFsnbGVnYWN5JywgJ3JlZ2lvbmFsJ10uaW5kZXhPZihjb25maWdWYWx1ZS50b0xvd2VyQ2FzZSgpKSA+PSAwKSB7XG4gICAgcmV0dXJuIGNvbmZpZ1ZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgQVdTLnV0aWwuZXJyb3IobmV3IEVycm9yKCksIGVycm9yT3B0aW9ucyk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNvbHZlIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlIGZvciByZWdpb25hbCBlbmRwb2ludCBmcm9tIGRpZmZlcmVuY2Ugc291cmNlczogY2xpZW50XG4gKiBjb25maWcsIGVudmlyb25tZW50YWwgdmFyaWFibGUsIHNoYXJlZCBjb25maWcgZmlsZS4gVmFsdWUgY2FuIGJlIGNhc2UtaW5zZW5zaXRpdmVcbiAqICdsZWdhY3knIG9yICdyZWdpbmFsJy5cbiAqIEBwYXJhbSBvcmlnaW5hbENvbmZpZyB1c2VyLXN1cHBsaWVkIGNvbmZpZyBvYmplY3QgdG8gcmVzb2x2ZVxuICogQHBhcmFtIG9wdGlvbnMgYSBtYXAgb2YgY29uZmlnIHByb3BlcnR5IG5hbWVzIGZyb20gaW5kaXZpZHVhbCBjb25maWd1cmF0aW9uIHNvdXJjZVxuICogIC0gZW52OiBuYW1lIG9mIGVudmlyb25tZW50YWwgdmFyaWFibGUgdGhhdCByZWZlcnMgdG8gdGhlIGNvbmZpZ1xuICogIC0gc2hhcmVkQ29uZmlnOiBuYW1lIG9mIHNoYXJlZCBjb25maWd1cmF0aW9uIGZpbGUgcHJvcGVydHkgdGhhdCByZWZlcnMgdG8gdGhlIGNvbmZpZ1xuICogIC0gY2xpZW50Q29uZmlnOiBuYW1lIG9mIGNsaWVudCBjb25maWd1cmF0aW9uIHByb3BlcnR5IHRoYXQgcmVmZXJzIHRvIHRoZSBjb25maWdcbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlZ2lvbmFsRW5kcG9pbnRzRmxhZyhvcmlnaW5hbENvbmZpZywgb3B0aW9ucykge1xuICBvcmlnaW5hbENvbmZpZyA9IG9yaWdpbmFsQ29uZmlnIHx8IHt9O1xuICAvL3ZhbGlkYXRlIGNvbmZpZyB2YWx1ZVxuICB2YXIgcmVzb2x2ZWQ7XG4gIGlmIChvcmlnaW5hbENvbmZpZ1tvcHRpb25zLmNsaWVudENvbmZpZ10pIHtcbiAgICByZXNvbHZlZCA9IHZhbGlkYXRlUmVnaW9uYWxFbmRwb2ludHNGbGFnVmFsdWUob3JpZ2luYWxDb25maWdbb3B0aW9ucy5jbGllbnRDb25maWddLCB7XG4gICAgICBjb2RlOiAnSW52YWxpZENvbmZpZ3VyYXRpb24nLFxuICAgICAgbWVzc2FnZTogJ2ludmFsaWQgXCInICsgb3B0aW9ucy5jbGllbnRDb25maWcgKyAnXCIgY29uZmlndXJhdGlvbi4gRXhwZWN0IFwibGVnYWN5XCIgJyArXG4gICAgICAnIG9yIFwicmVnaW9uYWxcIi4gR290IFwiJyArIG9yaWdpbmFsQ29uZmlnW29wdGlvbnMuY2xpZW50Q29uZmlnXSArICdcIi4nXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cbiAgaWYgKCFBV1MudXRpbC5pc05vZGUoKSkgcmV0dXJuIHJlc29sdmVkO1xuICAvL3ZhbGlkYXRlIGVudmlyb25tZW50YWwgdmFyaWFibGVcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm9jZXNzLmVudiwgb3B0aW9ucy5lbnYpKSB7XG4gICAgdmFyIGVudkZsYWcgPSBwcm9jZXNzLmVudltvcHRpb25zLmVudl07XG4gICAgcmVzb2x2ZWQgPSB2YWxpZGF0ZVJlZ2lvbmFsRW5kcG9pbnRzRmxhZ1ZhbHVlKGVudkZsYWcsIHtcbiAgICAgIGNvZGU6ICdJbnZhbGlkRW52aXJvbm1lbnRhbFZhcmlhYmxlJyxcbiAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkICcgKyBvcHRpb25zLmVudiArICcgZW52aXJvbm1lbnRhbCB2YXJpYWJsZS4gRXhwZWN0IFwibGVnYWN5XCIgJyArXG4gICAgICAnIG9yIFwicmVnaW9uYWxcIi4gR290IFwiJyArIHByb2Nlc3MuZW52W29wdGlvbnMuZW52XSArICdcIi4nXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cbiAgLy92YWxpZGF0ZSBzaGFyZWQgY29uZmlnIGZpbGVcbiAgdmFyIHByb2ZpbGUgPSB7fTtcbiAgdHJ5IHtcbiAgICB2YXIgcHJvZmlsZXMgPSBBV1MudXRpbC5nZXRQcm9maWxlc0Zyb21TaGFyZWRDb25maWcoQVdTLnV0aWwuaW5pTG9hZGVyKTtcbiAgICBwcm9maWxlID0gcHJvZmlsZXNbcHJvY2Vzcy5lbnYuQVdTX1BST0ZJTEUgfHwgQVdTLnV0aWwuZGVmYXVsdFByb2ZpbGVdO1xuICB9IGNhdGNoIChlKSB7fTtcbiAgaWYgKHByb2ZpbGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb2ZpbGUsIG9wdGlvbnMuc2hhcmVkQ29uZmlnKSkge1xuICAgIHZhciBmaWxlRmxhZyA9IHByb2ZpbGVbb3B0aW9ucy5zaGFyZWRDb25maWddO1xuICAgIHJlc29sdmVkID0gdmFsaWRhdGVSZWdpb25hbEVuZHBvaW50c0ZsYWdWYWx1ZShmaWxlRmxhZywge1xuICAgICAgY29kZTogJ0ludmFsaWRDb25maWd1cmF0aW9uJyxcbiAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkICcgKyBvcHRpb25zLnNoYXJlZENvbmZpZyArICcgcHJvZmlsZSBjb25maWcuIEV4cGVjdCBcImxlZ2FjeVwiICcgK1xuICAgICAgJyBvciBcInJlZ2lvbmFsXCIuIEdvdCBcIicgKyBwcm9maWxlW29wdGlvbnMuc2hhcmVkQ29uZmlnXSArICdcIi4nXG4gICAgfSk7XG4gICAgaWYgKHJlc29sdmVkKSByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmVSZWdpb25hbEVuZHBvaW50c0ZsYWc7XG4iLCJ2YXIgQVdTID0gcmVxdWlyZSgnLi4vY29yZScpO1xudmFyIFNUUyA9IHJlcXVpcmUoJy4uLy4uL2NsaWVudHMvc3RzJyk7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0ZW1wb3JhcnkgY3JlZGVudGlhbHMgcmV0cmlldmVkIGZyb20ge0FXUy5TVFN9LiBXaXRob3V0IGFueVxuICogZXh0cmEgcGFyYW1ldGVycywgY3JlZGVudGlhbHMgd2lsbCBiZSBmZXRjaGVkIGZyb20gdGhlXG4gKiB7QVdTLlNUUy5nZXRTZXNzaW9uVG9rZW59IG9wZXJhdGlvbi4gSWYgYW4gSUFNIHJvbGUgaXMgcHJvdmlkZWQsIHRoZVxuICoge0FXUy5TVFMuYXNzdW1lUm9sZX0gb3BlcmF0aW9uIHdpbGwgYmUgdXNlZCB0byBmZXRjaCBjcmVkZW50aWFscyBmb3IgdGhlXG4gKiByb2xlIGluc3RlYWQuXG4gKlxuICogQVdTLkNoYWluYWJsZVRlbXBvcmFyeUNyZWRlbnRpYWxzIGRpZmZlcnMgZnJvbSBBV1MuVGVtcG9yYXJ5Q3JlZGVudGlhbHMgaW5cbiAqIHRoZSB3YXkgbWFzdGVyQ3JlZGVudGlhbHMgYW5kIHJlZnJlc2hlcyBhcmUgaGFuZGxlZC5cbiAqIEFXUy5DaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyByZWZyZXNoZXMgZXhwaXJlZCBjcmVkZW50aWFscyB1c2luZyB0aGVcbiAqIG1hc3RlckNyZWRlbnRpYWxzIHBhc3NlZCBieSB0aGUgdXNlciB0byBzdXBwb3J0IGNoYWluaW5nIG9mIFNUUyBjcmVkZW50aWFscy5cbiAqIEhvd2V2ZXIsIEFXUy5UZW1wb3JhcnlDcmVkZW50aWFscyByZWN1cnNpdmVseSBjb2xsYXBzZXMgdGhlIG1hc3RlckNyZWRlbnRpYWxzXG4gKiBkdXJpbmcgaW5zdGFudGlhdGlvbiwgcHJlY2x1ZGluZyB0aGUgYWJpbGl0eSB0byByZWZyZXNoIGNyZWRlbnRpYWxzIHdoaWNoXG4gKiByZXF1aXJlIGludGVybWVkaWF0ZSwgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzLlxuICpcbiAqIEZvciBleGFtcGxlLCBpZiB0aGUgYXBwbGljYXRpb24gc2hvdWxkIHVzZSBSb2xlQSwgd2hpY2ggbXVzdCBiZSBhc3N1bWVkIGZyb21cbiAqIFJvbGVCLCBhbmQgdGhlIGVudmlyb25tZW50IHByb3ZpZGVzIGNyZWRlbnRpYWxzIHdoaWNoIGNhbiBhc3N1bWUgUm9sZUIsIHRoZW5cbiAqIEFXUy5DaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyBtdXN0IGJlIHVzZWQgdG8gc3VwcG9ydCByZWZyZXNoaW5nIHRoZVxuICogdGVtcG9yYXJ5IGNyZWRlbnRpYWxzIGZvciBSb2xlQTpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiB2YXIgcm9sZUFDcmVkcyA9IG5ldyBBV1MuQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMoe1xuICogICBwYXJhbXM6IHtSb2xlQXJuOiAnUm9sZUEnfSxcbiAqICAgbWFzdGVyQ3JlZGVudGlhbHM6IG5ldyBBV1MuQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMoe1xuICogICAgIHBhcmFtczoge1JvbGVBcm46ICdSb2xlQid9LFxuICogICAgIG1hc3RlckNyZWRlbnRpYWxzOiBuZXcgQVdTLkVudmlyb25tZW50Q3JlZGVudGlhbHMoJ0FXUycpXG4gKiAgIH0pXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIElmIEFXUy5UZW1wb3JhcnlDcmVkZW50aWFscyBoYWQgYmVlbiB1c2VkIGluIHRoZSBwcmV2aW91cyBleGFtcGxlLFxuICogYHJvbGVBQ3JlZHNgIHdvdWxkIGZhaWwgdG8gcmVmcmVzaCBiZWNhdXNlIGByb2xlQUNyZWRzYCB3b3VsZFxuICogdXNlIHRoZSBlbnZpcm9ubWVudCBjcmVkZW50aWFscyBmb3IgdGhlIEFzc3VtZVJvbGUgcmVxdWVzdC5cbiAqXG4gKiBBbm90aGVyIGRpZmZlcmVuY2UgaXMgdGhhdCBBV1MuQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMgY3JlYXRlcyB0aGUgU1RTXG4gKiBzZXJ2aWNlIGluc3RhbmNlIGR1cmluZyBpbnN0YW50aWF0aW9uIHdoaWxlIEFXUy5UZW1wb3JhcnlDcmVkZW50aWFscyBjcmVhdGVzXG4gKiB0aGUgU1RTIHNlcnZpY2UgaW5zdGFuY2UgZHVyaW5nIHRoZSBmaXJzdCByZWZyZXNoLiBDcmVhdGluZyB0aGUgc2VydmljZVxuICogaW5zdGFuY2UgZHVyaW5nIGluc3RhbnRpYXRpb24gZWZmZWN0aXZlbHkgY2FwdHVyZXMgdGhlIG1hc3RlciBjcmVkZW50aWFsc1xuICogZnJvbSB0aGUgZ2xvYmFsIGNvbmZpZywgc28gdGhhdCBzdWJzZXF1ZW50IGNoYW5nZXMgdG8gdGhlIGdsb2JhbCBjb25maWcgZG9cbiAqIG5vdCBhZmZlY3QgdGhlIG1hc3RlciBjcmVkZW50aWFscyB1c2VkIHRvIHJlZnJlc2ggdGhlIHRlbXBvcmFyeSBjcmVkZW50aWFscy5cbiAqXG4gKiBUaGlzIGFsbG93cyBhbiBpbnN0YW5jZSBvZiBBV1MuQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMgdG8gYmUgYXNzaWduZWRcbiAqIHRvIEFXUy5jb25maWcuY3JlZGVudGlhbHM6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogdmFyIGVudkNyZWRzID0gbmV3IEFXUy5FbnZpcm9ubWVudENyZWRlbnRpYWxzKCdBV1MnKTtcbiAqIEFXUy5jb25maWcuY3JlZGVudGlhbHMgPSBlbnZDcmVkcztcbiAqIC8vIG1hc3RlckNyZWRlbnRpYWxzIHdpbGwgYmUgZW52Q3JlZHNcbiAqIEFXUy5jb25maWcuY3JlZGVudGlhbHMgPSBuZXcgQVdTLkNoYWluYWJsZVRlbXBvcmFyeUNyZWRlbnRpYWxzKHtcbiAqICAgcGFyYW1zOiB7Um9sZUFybjogJy4uLid9XG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIFNpbWlsYXJseSwgdG8gdXNlIHRoZSBDcmVkZW50aWFsUHJvdmlkZXJDaGFpbidzIGRlZmF1bHQgcHJvdmlkZXJzIGFzIHRoZVxuICogbWFzdGVyIGNyZWRlbnRpYWxzLCBzaW1wbHkgY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mXG4gKiBBV1MuQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHM6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogQVdTLmNvbmZpZy5jcmVkZW50aWFscyA9IG5ldyBDaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyh7XG4gKiAgIHBhcmFtczoge1JvbGVBcm46ICcuLi4nfVxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAIWF0dHJpYnV0ZSBzZXJ2aWNlXG4gKiAgIEByZXR1cm4gW0FXUy5TVFNdIHRoZSBTVFMgc2VydmljZSBpbnN0YW5jZSB1c2VkIHRvXG4gKiAgICAgZ2V0IGFuZCByZWZyZXNoIHRlbXBvcmFyeSBjcmVkZW50aWFscyBmcm9tIEFXUyBTVFMuXG4gKiBAbm90ZSAoc2VlIGNvbnN0cnVjdG9yKVxuICovXG5BV1MuQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMgPSBBV1MudXRpbC5pbmhlcml0KEFXUy5DcmVkZW50aWFscywge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyB0ZW1wb3JhcnkgY3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyBbbWFwXSBhIHNldCBvZiBvcHRpb25zXG4gICAqIEBvcHRpb24gb3B0aW9ucyBwYXJhbXMgW21hcF0gKHt9KSBhIG1hcCBvZiBvcHRpb25zIHRoYXQgYXJlIHBhc3NlZCB0byB0aGVcbiAgICogICB7QVdTLlNUUy5hc3N1bWVSb2xlfSBvciB7QVdTLlNUUy5nZXRTZXNzaW9uVG9rZW59IG9wZXJhdGlvbnMuXG4gICAqICAgSWYgYSBgUm9sZUFybmAgcGFyYW1ldGVyIGlzIHBhc3NlZCBpbiwgY3JlZGVudGlhbHMgd2lsbCBiZSBiYXNlZCBvbiB0aGVcbiAgICogICBJQU0gcm9sZS4gSWYgYSBgU2VyaWFsTnVtYmVyYCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluLCB7dG9rZW5Db2RlRm59IG11c3RcbiAgICogICBhbHNvIGJlIHBhc3NlZCBpbiBvciBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICogQG9wdGlvbiBvcHRpb25zIG1hc3RlckNyZWRlbnRpYWxzIFtBV1MuQ3JlZGVudGlhbHNdIHRoZSBtYXN0ZXIgY3JlZGVudGlhbHNcbiAgICogICB1c2VkIHRvIGdldCBhbmQgcmVmcmVzaCB0ZW1wb3JhcnkgY3JlZGVudGlhbHMgZnJvbSBBV1MgU1RTLiBCeSBkZWZhdWx0LFxuICAgKiAgIEFXUy5jb25maWcuY3JlZGVudGlhbHMgb3IgQVdTLmNvbmZpZy5jcmVkZW50aWFsUHJvdmlkZXIgd2lsbCBiZSB1c2VkLlxuICAgKiBAb3B0aW9uIG9wdGlvbnMgdG9rZW5Db2RlRm4gW0Z1bmN0aW9uXSAobnVsbCkgRnVuY3Rpb24gdG8gcHJvdmlkZVxuICAgKiAgIGBUb2tlbkNvZGVgLCBpZiBgU2VyaWFsTnVtYmVyYCBpcyBwcm92aWRlZCBmb3IgcHJvZmlsZSBpbiB7cGFyYW1zfS4gRnVuY3Rpb25cbiAgICogICBpcyBjYWxsZWQgd2l0aCB2YWx1ZSBvZiBgU2VyaWFsTnVtYmVyYCBhbmQgYGNhbGxiYWNrYCwgYW5kIHNob3VsZCBwcm92aWRlXG4gICAqICAgdGhlIGBUb2tlbkNvZGVgIG9yIGFuIGVycm9yIHRvIHRoZSBjYWxsYmFjayBpbiB0aGUgZm9ybWF0XG4gICAqICAgYGNhbGxiYWNrKGVyciwgdG9rZW4pYC5cbiAgICogQGV4YW1wbGUgQ3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbHMgb2JqZWN0IGZvciBnZW5lcmljIHRlbXBvcmFyeSBjcmVkZW50aWFsc1xuICAgKiAgIEFXUy5jb25maWcuY3JlZGVudGlhbHMgPSBuZXcgQVdTLkNoYWluYWJsZVRlbXBvcmFyeUNyZWRlbnRpYWxzKCk7XG4gICAqIEBleGFtcGxlIENyZWF0aW5nIGEgbmV3IGNyZWRlbnRpYWxzIG9iamVjdCBmb3IgYW4gSUFNIHJvbGVcbiAgICogICBBV1MuY29uZmlnLmNyZWRlbnRpYWxzID0gbmV3IEFXUy5DaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyh7XG4gICAqICAgICBwYXJhbXM6IHtcbiAgICogICAgICAgUm9sZUFybjogJ2Fybjphd3M6aWFtOjoxMjM0NTY3ODkwOnJvbGUvVGVtcG9yYXJ5Q3JlZGVudGlhbHMnXG4gICAqICAgICB9XG4gICAqICAgfSk7XG4gICAqIEBzZWUgQVdTLlNUUy5hc3N1bWVSb2xlXG4gICAqIEBzZWUgQVdTLlNUUy5nZXRTZXNzaW9uVG9rZW5cbiAgICovXG4gIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiBDaGFpbmFibGVUZW1wb3JhcnlDcmVkZW50aWFscyhvcHRpb25zKSB7XG4gICAgQVdTLkNyZWRlbnRpYWxzLmNhbGwodGhpcyk7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHNQcm92aWRlckZhaWx1cmUnO1xuICAgIHRoaXMuZXhwaXJlZCA9IHRydWU7XG4gICAgdGhpcy50b2tlbkNvZGVGbiA9IG51bGw7XG5cbiAgICB2YXIgcGFyYW1zID0gQVdTLnV0aWwuY29weShvcHRpb25zLnBhcmFtcykgfHwge307XG4gICAgaWYgKHBhcmFtcy5Sb2xlQXJuKSB7XG4gICAgICBwYXJhbXMuUm9sZVNlc3Npb25OYW1lID0gcGFyYW1zLlJvbGVTZXNzaW9uTmFtZSB8fCAndGVtcG9yYXJ5LWNyZWRlbnRpYWxzJztcbiAgICB9XG4gICAgaWYgKHBhcmFtcy5TZXJpYWxOdW1iZXIpIHtcbiAgICAgIGlmICghb3B0aW9ucy50b2tlbkNvZGVGbiB8fCAodHlwZW9mIG9wdGlvbnMudG9rZW5Db2RlRm4gIT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgIHRocm93IG5ldyBBV1MudXRpbC5lcnJvcihcbiAgICAgICAgICBuZXcgRXJyb3IoJ3Rva2VuQ29kZUZuIG11c3QgYmUgYSBmdW5jdGlvbiB3aGVuIHBhcmFtcy5TZXJpYWxOdW1iZXIgaXMgZ2l2ZW4nKSxcbiAgICAgICAgICB7Y29kZTogdGhpcy5lcnJvckNvZGV9XG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRva2VuQ29kZUZuID0gb3B0aW9ucy50b2tlbkNvZGVGbjtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyIGNvbmZpZyA9IEFXUy51dGlsLm1lcmdlKFxuICAgICAge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgY3JlZGVudGlhbHM6IG9wdGlvbnMubWFzdGVyQ3JlZGVudGlhbHMgfHwgQVdTLmNvbmZpZy5jcmVkZW50aWFsc1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnMuc3RzQ29uZmlnIHx8IHt9XG4gICAgKTtcbiAgICB0aGlzLnNlcnZpY2UgPSBuZXcgU1RTKGNvbmZpZyk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBjcmVkZW50aWFscyB1c2luZyB7QVdTLlNUUy5hc3N1bWVSb2xlfSBvclxuICAgKiB7QVdTLlNUUy5nZXRTZXNzaW9uVG9rZW59LCBkZXBlbmRpbmcgb24gd2hldGhlciBhbiBJQU0gcm9sZSBBUk4gd2FzIHBhc3NlZFxuICAgKiB0byB0aGUgY3JlZGVudGlhbHMge2NvbnN0cnVjdG9yfS5cbiAgICpcbiAgICogQGNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uKGVycilcbiAgICogICBDYWxsZWQgd2hlbiB0aGUgU1RTIHNlcnZpY2UgcmVzcG9uZHMgKG9yIGZhaWxzKS4gV2hlblxuICAgKiAgIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggbm8gZXJyb3IsIGl0IG1lYW5zIHRoYXQgdGhlIGNyZWRlbnRpYWxzXG4gICAqICAgaW5mb3JtYXRpb24gaGFzIGJlZW4gbG9hZGVkIGludG8gdGhlIG9iamVjdCAoYXMgdGhlIGBhY2Nlc3NLZXlJZGAsXG4gICAqICAgYHNlY3JldEFjY2Vzc0tleWAsIGFuZCBgc2Vzc2lvblRva2VuYCBwcm9wZXJ0aWVzKS5cbiAgICogICBAcGFyYW0gZXJyIFtFcnJvcl0gaWYgYW4gZXJyb3Igb2NjdXJyZWQsIHRoaXMgdmFsdWUgd2lsbCBiZSBmaWxsZWRcbiAgICogQHNlZSBBV1MuQ3JlZGVudGlhbHMuZ2V0XG4gICAqL1xuICByZWZyZXNoOiBmdW5jdGlvbiByZWZyZXNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5jb2FsZXNjZVJlZnJlc2goY2FsbGJhY2sgfHwgQVdTLnV0aWwuZm4uY2FsbGJhY2spO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICBsb2FkOiBmdW5jdGlvbiBsb2FkKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBvcGVyYXRpb24gPSBzZWxmLnNlcnZpY2UuY29uZmlnLnBhcmFtcy5Sb2xlQXJuID8gJ2Fzc3VtZVJvbGUnIDogJ2dldFNlc3Npb25Ub2tlbic7XG4gICAgdGhpcy5nZXRUb2tlbkNvZGUoZnVuY3Rpb24gKGVyciwgdG9rZW5Db2RlKSB7XG4gICAgICB2YXIgcGFyYW1zID0ge307XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0b2tlbkNvZGUpIHtcbiAgICAgICAgcGFyYW1zLlRva2VuQ29kZSA9IHRva2VuQ29kZTtcbiAgICAgIH1cbiAgICAgIHNlbGYuc2VydmljZVtvcGVyYXRpb25dKHBhcmFtcywgZnVuY3Rpb24gKGVyciwgZGF0YSkge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHNlbGYuc2VydmljZS5jcmVkZW50aWFsc0Zyb20oZGF0YSwgc2VsZik7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGdldFRva2VuQ29kZTogZnVuY3Rpb24gZ2V0VG9rZW5Db2RlKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmICh0aGlzLnRva2VuQ29kZUZuKSB7XG4gICAgICB0aGlzLnRva2VuQ29kZUZuKHRoaXMuc2VydmljZS5jb25maWcucGFyYW1zLlNlcmlhbE51bWJlciwgZnVuY3Rpb24gKGVyciwgdG9rZW4pIHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHZhciBtZXNzYWdlID0gZXJyO1xuICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgICAgbWVzc2FnZSA9IGVyci5tZXNzYWdlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFjayhcbiAgICAgICAgICAgIEFXUy51dGlsLmVycm9yKFxuICAgICAgICAgICAgICBuZXcgRXJyb3IoJ0Vycm9yIGZldGNoaW5nIE1GQSB0b2tlbjogJyArIG1lc3NhZ2UpLFxuICAgICAgICAgICAgICB7IGNvZGU6IHNlbGYuZXJyb3JDb2RlfVxuICAgICAgICAgICAgKVxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHRva2VuKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsKTtcbiAgICB9XG4gIH1cbn0pO1xuIiwidmFyIEFXUyA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcbnZhciBDb2duaXRvSWRlbnRpdHkgPSByZXF1aXJlKCcuLi8uLi9jbGllbnRzL2NvZ25pdG9pZGVudGl0eScpO1xudmFyIFNUUyA9IHJlcXVpcmUoJy4uLy4uL2NsaWVudHMvc3RzJyk7XG5cbi8qKlxuICogUmVwcmVzZW50cyBjcmVkZW50aWFscyByZXRyaWV2ZWQgZnJvbSBTVFMgV2ViIElkZW50aXR5IEZlZGVyYXRpb24gdXNpbmdcbiAqIHRoZSBBbWF6b24gQ29nbml0byBJZGVudGl0eSBzZXJ2aWNlLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhpcyBwcm92aWRlciBnZXRzIGNyZWRlbnRpYWxzIHVzaW5nIHRoZVxuICoge0FXUy5Db2duaXRvSWRlbnRpdHkuZ2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eX0gc2VydmljZSBvcGVyYXRpb24sIHdoaWNoXG4gKiByZXF1aXJlcyBlaXRoZXIgYW4gYElkZW50aXR5SWRgIG9yIGFuIGBJZGVudGl0eVBvb2xJZGAgKEFtYXpvbiBDb2duaXRvXG4gKiBJZGVudGl0eSBQb29sIElEKSwgd2hpY2ggaXMgdXNlZCB0byBjYWxsIHtBV1MuQ29nbml0b0lkZW50aXR5LmdldElkfSB0b1xuICogb2J0YWluIGFuIGBJZGVudGl0eUlkYC4gSWYgdGhlIGlkZW50aXR5IG9yIGlkZW50aXR5IHBvb2wgaXMgbm90IGNvbmZpZ3VyZWQgaW5cbiAqIHRoZSBBbWF6b24gQ29nbml0byBDb25zb2xlIHRvIHVzZSBJQU0gcm9sZXMgd2l0aCB0aGUgYXBwcm9wcmlhdGUgcGVybWlzc2lvbnMsXG4gKiB0aGVuIGFkZGl0aW9uYWxseSBhIGBSb2xlQXJuYCBpcyByZXF1aXJlZCBjb250YWluaW5nIHRoZSBBUk4gb2YgdGhlIElBTSB0cnVzdFxuICogcG9saWN5IGZvciB0aGUgQW1hem9uIENvZ25pdG8gcm9sZSB0aGF0IHRoZSB1c2VyIHdpbGwgbG9nIGludG8uIElmIGEgYFJvbGVBcm5gXG4gKiBpcyBwcm92aWRlZCwgdGhlbiB0aGlzIHByb3ZpZGVyIGdldHMgY3JlZGVudGlhbHMgdXNpbmcgdGhlXG4gKiB7QVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5fSBzZXJ2aWNlIG9wZXJhdGlvbiwgYWZ0ZXIgZmlyc3QgZ2V0dGluZyBhblxuICogT3BlbiBJRCB0b2tlbiBmcm9tIHtBV1MuQ29nbml0b0lkZW50aXR5LmdldE9wZW5JZFRva2VufS5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgaWYgdGhpcyBjcmVkZW50aWFsIHByb3ZpZGVyIGlzIHVzZWQgdG8gcHJvdmlkZSBhdXRoZW50aWNhdGVkXG4gKiBsb2dpbiwgdGhlIGBMb2dpbnNgIG1hcCBtYXkgYmUgc2V0IHRvIHRoZSB0b2tlbnMgcHJvdmlkZWQgYnkgdGhlIHJlc3BlY3RpdmVcbiAqIGlkZW50aXR5IHByb3ZpZGVycy4gU2VlIHtjb25zdHJ1Y3Rvcn0gZm9yIGFuIGV4YW1wbGUgb24gY3JlYXRpbmcgYSBjcmVkZW50aWFsc1xuICogb2JqZWN0IHdpdGggcHJvcGVyIHByb3BlcnR5IHZhbHVlcy5cbiAqXG4gKiAjIyBSZWZyZXNoaW5nIENyZWRlbnRpYWxzIGZyb20gSWRlbnRpdHkgU2VydmljZVxuICpcbiAqIEluIGFkZGl0aW9uIHRvIEFXUyBjcmVkZW50aWFscyBleHBpcmluZyBhZnRlciBhIGdpdmVuIGFtb3VudCBvZiB0aW1lLCB0aGVcbiAqIGxvZ2luIHRva2VuIGZyb20gdGhlIGlkZW50aXR5IHByb3ZpZGVyIHdpbGwgYWxzbyBleHBpcmUuIE9uY2UgdGhpcyB0b2tlblxuICogZXhwaXJlcywgaXQgd2lsbCBub3QgYmUgdXNhYmxlIHRvIHJlZnJlc2ggQVdTIGNyZWRlbnRpYWxzLCBhbmQgYW5vdGhlclxuICogdG9rZW4gd2lsbCBiZSBuZWVkZWQuIFRoZSBTREsgZG9lcyBub3QgbWFuYWdlIHJlZnJlc2hpbmcgb2YgdGhlIHRva2VuIHZhbHVlLFxuICogYnV0IHRoaXMgY2FuIGJlIGRvbmUgdGhyb3VnaCBhIFwicmVmcmVzaCB0b2tlblwiIHN1cHBvcnRlZCBieSBtb3N0IGlkZW50aXR5XG4gKiBwcm92aWRlcnMuIENvbnN1bHQgdGhlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBpZGVudGl0eSBwcm92aWRlciBmb3IgcmVmcmVzaGluZ1xuICogdG9rZW5zLiBPbmNlIHRoZSByZWZyZXNoZWQgdG9rZW4gaXMgYWNxdWlyZWQsIHlvdSBzaG91bGQgbWFrZSBzdXJlIHRvIHVwZGF0ZVxuICogdGhpcyBuZXcgdG9rZW4gaW4gdGhlIGNyZWRlbnRpYWxzIG9iamVjdCdzIHtwYXJhbXN9IHByb3BlcnR5LiBUaGUgZm9sbG93aW5nXG4gKiBjb2RlIHdpbGwgdXBkYXRlIHRoZSBXZWJJZGVudGl0eVRva2VuLCBhc3N1bWluZyB5b3UgaGF2ZSByZXRyaWV2ZWQgYW4gdXBkYXRlZFxuICogdG9rZW4gZnJvbSB0aGUgaWRlbnRpdHkgcHJvdmlkZXI6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogQVdTLmNvbmZpZy5jcmVkZW50aWFscy5wYXJhbXMuTG9naW5zWydncmFwaC5mYWNlYm9vay5jb20nXSA9IHVwZGF0ZWRUb2tlbjtcbiAqIGBgYFxuICpcbiAqIEZ1dHVyZSBjYWxscyB0byBgY3JlZGVudGlhbHMucmVmcmVzaCgpYCB3aWxsIG5vdyB1c2UgdGhlIG5ldyB0b2tlbi5cbiAqXG4gKiBAIWF0dHJpYnV0ZSBwYXJhbXNcbiAqICAgQHJldHVybiBbbWFwXSB0aGUgbWFwIG9mIHBhcmFtcyBwYXNzZWQgdG9cbiAqICAgICB7QVdTLkNvZ25pdG9JZGVudGl0eS5nZXRJZH0sXG4gKiAgICAge0FXUy5Db2duaXRvSWRlbnRpdHkuZ2V0T3BlbklkVG9rZW59LCBhbmRcbiAqICAgICB7QVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5fS4gVG8gdXBkYXRlIHRoZSB0b2tlbiwgc2V0IHRoZVxuICogICAgIGBwYXJhbXMuV2ViSWRlbnRpdHlUb2tlbmAgcHJvcGVydHkuXG4gKiBAIWF0dHJpYnV0ZSBkYXRhXG4gKiAgIEByZXR1cm4gW21hcF0gdGhlIHJhdyBkYXRhIHJlc3BvbnNlIGZyb20gdGhlIGNhbGwgdG9cbiAqICAgICB7QVdTLkNvZ25pdG9JZGVudGl0eS5nZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5fSwgb3JcbiAqICAgICB7QVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5fS4gVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gZ2V0XG4gKiAgICAgYWNjZXNzIHRvIG90aGVyIHByb3BlcnRpZXMgZnJvbSB0aGUgcmVzcG9uc2UuXG4gKiBAIWF0dHJpYnV0ZSBpZGVudGl0eUlkXG4gKiAgIEByZXR1cm4gW1N0cmluZ10gdGhlIENvZ25pdG8gSUQgcmV0dXJuZWQgYnkgdGhlIGxhc3QgY2FsbCB0b1xuICogICAgIHtBV1MuQ29nbml0b0lkZW50aXR5LmdldE9wZW5JZFRva2VufS4gVGhpcyBJRCByZXByZXNlbnRzIHRoZSBhY3R1YWxcbiAqICAgICBmaW5hbCByZXNvbHZlZCBpZGVudGl0eSBJRCBmcm9tIEFtYXpvbiBDb2duaXRvLlxuICovXG5BV1MuQ29nbml0b0lkZW50aXR5Q3JlZGVudGlhbHMgPSBBV1MudXRpbC5pbmhlcml0KEFXUy5DcmVkZW50aWFscywge1xuICAvKipcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBsb2NhbFN0b3JhZ2VLZXk6IHtcbiAgICBpZDogJ2F3cy5jb2duaXRvLmlkZW50aXR5LWlkLicsXG4gICAgcHJvdmlkZXJzOiAnYXdzLmNvZ25pdG8uaWRlbnRpdHktcHJvdmlkZXJzLidcbiAgfSxcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjcmVkZW50aWFscyBvYmplY3QuXG4gICAqIEBleGFtcGxlIENyZWF0aW5nIGEgbmV3IGNyZWRlbnRpYWxzIG9iamVjdFxuICAgKiAgIEFXUy5jb25maWcuY3JlZGVudGlhbHMgPSBuZXcgQVdTLkNvZ25pdG9JZGVudGl0eUNyZWRlbnRpYWxzKHtcbiAgICpcbiAgICogICAgIC8vIGVpdGhlciBJZGVudGl0eVBvb2xJZCBvciBJZGVudGl0eUlkIGlzIHJlcXVpcmVkXG4gICAqICAgICAvLyBTZWUgdGhlIElkZW50aXR5UG9vbElkIHBhcmFtIGZvciBBV1MuQ29nbml0b0lkZW50aXR5LmdldElEIChsaW5rZWQgYmVsb3cpXG4gICAqICAgICAvLyBTZWUgdGhlIElkZW50aXR5SWQgcGFyYW0gZm9yIEFXUy5Db2duaXRvSWRlbnRpdHkuZ2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eVxuICAgKiAgICAgLy8gb3IgQVdTLkNvZ25pdG9JZGVudGl0eS5nZXRPcGVuSWRUb2tlbiAobGlua2VkIGJlbG93KVxuICAgKiAgICAgSWRlbnRpdHlQb29sSWQ6ICd1cy1lYXN0LTE6MTY5OWViYzAtNzkwMC00MDk5LWI5MTAtMmRmOTRmNTJhMDMwJyxcbiAgICogICAgIElkZW50aXR5SWQ6ICd1cy1lYXN0LTE6MTI4ZDBhNzQtYzgyZi00NTUzLTkxNmQtOTAwNTNlNGE4YjBmJ1xuICAgKlxuICAgKiAgICAgLy8gb3B0aW9uYWwsIG9ubHkgbmVjZXNzYXJ5IHdoZW4gdGhlIGlkZW50aXR5IHBvb2wgaXMgbm90IGNvbmZpZ3VyZWRcbiAgICogICAgIC8vIHRvIHVzZSBJQU0gcm9sZXMgaW4gdGhlIEFtYXpvbiBDb2duaXRvIENvbnNvbGVcbiAgICogICAgIC8vIFNlZSB0aGUgUm9sZUFybiBwYXJhbSBmb3IgQVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5IChsaW5rZWQgYmVsb3cpXG4gICAqICAgICBSb2xlQXJuOiAnYXJuOmF3czppYW06OjEyMzQ1Njc4OTA6cm9sZS9NWUFQUC1Db2duaXRvSWRlbnRpdHknLFxuICAgKlxuICAgKiAgICAgLy8gb3B0aW9uYWwgdG9rZW5zLCB1c2VkIGZvciBhdXRoZW50aWNhdGVkIGxvZ2luXG4gICAqICAgICAvLyBTZWUgdGhlIExvZ2lucyBwYXJhbSBmb3IgQVdTLkNvZ25pdG9JZGVudGl0eS5nZXRJRCAobGlua2VkIGJlbG93KVxuICAgKiAgICAgTG9naW5zOiB7XG4gICAqICAgICAgICdncmFwaC5mYWNlYm9vay5jb20nOiAnRkJUT0tFTicsXG4gICAqICAgICAgICd3d3cuYW1hem9uLmNvbSc6ICdBTUFaT05UT0tFTicsXG4gICAqICAgICAgICdhY2NvdW50cy5nb29nbGUuY29tJzogJ0dPT0dMRVRPS0VOJyxcbiAgICogICAgICAgJ2FwaS50d2l0dGVyLmNvbSc6ICdUV0lUVEVSVE9LRU4nLFxuICAgKiAgICAgICAnd3d3LmRpZ2l0cy5jb20nOiAnRElHSVRTVE9LRU4nXG4gICAqICAgICB9LFxuICAgKlxuICAgKiAgICAgLy8gb3B0aW9uYWwgbmFtZSwgZGVmYXVsdHMgdG8gd2ViLWlkZW50aXR5XG4gICAqICAgICAvLyBTZWUgdGhlIFJvbGVTZXNzaW9uTmFtZSBwYXJhbSBmb3IgQVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5IChsaW5rZWQgYmVsb3cpXG4gICAqICAgICBSb2xlU2Vzc2lvbk5hbWU6ICd3ZWInLFxuICAgKlxuICAgKiAgICAgLy8gb3B0aW9uYWwsIG9ubHkgbmVjZXNzYXJ5IHdoZW4gYXBwbGljYXRpb24gcnVucyBpbiBhIGJyb3dzZXJcbiAgICogICAgIC8vIGFuZCBtdWx0aXBsZSB1c2VycyBhcmUgc2lnbmVkIGluIGF0IG9uY2UsIHVzZWQgZm9yIGNhY2hpbmdcbiAgICogICAgIExvZ2luSWQ6ICdleGFtcGxlQGdtYWlsLmNvbSdcbiAgICpcbiAgICogICB9LCB7XG4gICAqICAgICAgLy8gb3B0aW9uYWxseSBwcm92aWRlIGNvbmZpZ3VyYXRpb24gdG8gYXBwbHkgdG8gdGhlIHVuZGVybHlpbmcgc2VydmljZSBjbGllbnRzXG4gICAqICAgICAgLy8gaWYgY29uZmlndXJhdGlvbiBpcyBub3QgcHJvdmlkZWQsIHRoZW4gY29uZmlndXJhdGlvbiB3aWxsIGJlIHB1bGxlZCBmcm9tIEFXUy5jb25maWdcbiAgICpcbiAgICogICAgICAvLyByZWdpb24gc2hvdWxkIG1hdGNoIHRoZSByZWdpb24geW91ciBpZGVudGl0eSBwb29sIGlzIGxvY2F0ZWQgaW5cbiAgICogICAgICByZWdpb246ICd1cy1lYXN0LTEnLFxuICAgKlxuICAgKiAgICAgIC8vIHNwZWNpZnkgdGltZW91dCBvcHRpb25zXG4gICAqICAgICAgaHR0cE9wdGlvbnM6IHtcbiAgICogICAgICAgIHRpbWVvdXQ6IDEwMFxuICAgKiAgICAgIH1cbiAgICogICB9KTtcbiAgICogQHNlZSBBV1MuQ29nbml0b0lkZW50aXR5LmdldElkXG4gICAqIEBzZWUgQVdTLkNvZ25pdG9JZGVudGl0eS5nZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5XG4gICAqIEBzZWUgQVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5XG4gICAqIEBzZWUgQVdTLkNvZ25pdG9JZGVudGl0eS5nZXRPcGVuSWRUb2tlblxuICAgKiBAc2VlIEFXUy5Db25maWdcbiAgICogQG5vdGUgSWYgYSByZWdpb24gaXMgbm90IHByb3ZpZGVkIGluIHRoZSBnbG9iYWwgQVdTLmNvbmZpZywgb3JcbiAgICogICBzcGVjaWZpZWQgaW4gdGhlIGBjbGllbnRDb25maWdgIHRvIHRoZSBDb2duaXRvSWRlbnRpdHlDcmVkZW50aWFsc1xuICAgKiAgIGNvbnN0cnVjdG9yLCB5b3UgbWF5IGVuY291bnRlciBhICdNaXNzaW5nIGNyZWRlbnRpYWxzIGluIGNvbmZpZycgZXJyb3JcbiAgICogICB3aGVuIGNhbGxpbmcgbWFraW5nIGEgc2VydmljZSBjYWxsLlxuICAgKi9cbiAgY29uc3RydWN0b3I6IGZ1bmN0aW9uIENvZ25pdG9JZGVudGl0eUNyZWRlbnRpYWxzKHBhcmFtcywgY2xpZW50Q29uZmlnKSB7XG4gICAgQVdTLkNyZWRlbnRpYWxzLmNhbGwodGhpcyk7XG4gICAgdGhpcy5leHBpcmVkID0gdHJ1ZTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgICB0aGlzLmRhdGEgPSBudWxsO1xuICAgIHRoaXMuX2lkZW50aXR5SWQgPSBudWxsO1xuICAgIHRoaXMuX2NsaWVudENvbmZpZyA9IEFXUy51dGlsLmNvcHkoY2xpZW50Q29uZmlnIHx8IHt9KTtcbiAgICB0aGlzLmxvYWRDYWNoZWRJZCgpO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2lkZW50aXR5SWQnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICBzZWxmLmxvYWRDYWNoZWRJZCgpO1xuICAgICAgICByZXR1cm4gc2VsZi5faWRlbnRpdHlJZCB8fCBzZWxmLnBhcmFtcy5JZGVudGl0eUlkO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24oaWRlbnRpdHlJZCkge1xuICAgICAgICBzZWxmLl9pZGVudGl0eUlkID0gaWRlbnRpdHlJZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogUmVmcmVzaGVzIGNyZWRlbnRpYWxzIHVzaW5nIHtBV1MuQ29nbml0b0lkZW50aXR5LmdldENyZWRlbnRpYWxzRm9ySWRlbnRpdHl9LFxuICAgKiBvciB7QVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5fS5cbiAgICpcbiAgICogQGNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uKGVycilcbiAgICogICBDYWxsZWQgd2hlbiB0aGUgU1RTIHNlcnZpY2UgcmVzcG9uZHMgKG9yIGZhaWxzKS4gV2hlblxuICAgKiAgIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggbm8gZXJyb3IsIGl0IG1lYW5zIHRoYXQgdGhlIGNyZWRlbnRpYWxzXG4gICAqICAgaW5mb3JtYXRpb24gaGFzIGJlZW4gbG9hZGVkIGludG8gdGhlIG9iamVjdCAoYXMgdGhlIGBhY2Nlc3NLZXlJZGAsXG4gICAqICAgYHNlY3JldEFjY2Vzc0tleWAsIGFuZCBgc2Vzc2lvblRva2VuYCBwcm9wZXJ0aWVzKS5cbiAgICogICBAcGFyYW0gZXJyIFtFcnJvcl0gaWYgYW4gZXJyb3Igb2NjdXJyZWQsIHRoaXMgdmFsdWUgd2lsbCBiZSBmaWxsZWRcbiAgICogQHNlZSBBV1MuQ3JlZGVudGlhbHMuZ2V0XG4gICAqL1xuICByZWZyZXNoOiBmdW5jdGlvbiByZWZyZXNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5jb2FsZXNjZVJlZnJlc2goY2FsbGJhY2sgfHwgQVdTLnV0aWwuZm4uY2FsbGJhY2spO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICogQHBhcmFtIGNhbGxiYWNrXG4gICAqL1xuICBsb2FkOiBmdW5jdGlvbiBsb2FkKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuY3JlYXRlQ2xpZW50cygpO1xuICAgIHNlbGYuZGF0YSA9IG51bGw7XG4gICAgc2VsZi5faWRlbnRpdHlJZCA9IG51bGw7XG4gICAgc2VsZi5nZXRJZChmdW5jdGlvbihlcnIpIHtcbiAgICAgIGlmICghZXJyKSB7XG4gICAgICAgIGlmICghc2VsZi5wYXJhbXMuUm9sZUFybikge1xuICAgICAgICAgIHNlbGYuZ2V0Q3JlZGVudGlhbHNGb3JJZGVudGl0eShjYWxsYmFjayk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2VsZi5nZXRDcmVkZW50aWFsc0Zyb21TVFMoY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmLmNsZWFySWRPbk5vdEF1dGhvcml6ZWQoZXJyKTtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBjYWNoZWQgQ29nbml0byBJRCBhc3NvY2lhdGVkIHdpdGggdGhlIGN1cnJlbnRseSBjb25maWd1cmVkXG4gICAqIGlkZW50aXR5IHBvb2wgSUQuIFVzZSB0aGlzIHRvIG1hbnVhbGx5IGludmFsaWRhdGUgeW91ciBjYWNoZSBpZlxuICAgKiB0aGUgaWRlbnRpdHkgcG9vbCBJRCB3YXMgZGVsZXRlZC5cbiAgICovXG4gIGNsZWFyQ2FjaGVkSWQ6IGZ1bmN0aW9uIGNsZWFyQ2FjaGUoKSB7XG4gICAgdGhpcy5faWRlbnRpdHlJZCA9IG51bGw7XG4gICAgZGVsZXRlIHRoaXMucGFyYW1zLklkZW50aXR5SWQ7XG5cbiAgICB2YXIgcG9vbElkID0gdGhpcy5wYXJhbXMuSWRlbnRpdHlQb29sSWQ7XG4gICAgdmFyIGxvZ2luSWQgPSB0aGlzLnBhcmFtcy5Mb2dpbklkIHx8ICcnO1xuICAgIGRlbGV0ZSB0aGlzLnN0b3JhZ2VbdGhpcy5sb2NhbFN0b3JhZ2VLZXkuaWQgKyBwb29sSWQgKyBsb2dpbklkXTtcbiAgICBkZWxldGUgdGhpcy5zdG9yYWdlW3RoaXMubG9jYWxTdG9yYWdlS2V5LnByb3ZpZGVycyArIHBvb2xJZCArIGxvZ2luSWRdO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGNsZWFySWRPbk5vdEF1dGhvcml6ZWQ6IGZ1bmN0aW9uIGNsZWFySWRPbk5vdEF1dGhvcml6ZWQoZXJyKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGlmIChlcnIuY29kZSA9PSAnTm90QXV0aG9yaXplZEV4Y2VwdGlvbicpIHtcbiAgICAgIHNlbGYuY2xlYXJDYWNoZWRJZCgpO1xuICAgIH1cbiAgfSxcblxuICAvKipcbiAgICogUmV0cmlldmVzIGEgQ29nbml0byBJRCwgbG9hZGluZyBmcm9tIGNhY2hlIGlmIGl0IHdhcyBhbHJlYWR5IHJldHJpZXZlZFxuICAgKiBvbiB0aGlzIGRldmljZS5cbiAgICpcbiAgICogQGNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uKGVyciwgaWRlbnRpdHlJZClcbiAgICogICBAcGFyYW0gZXJyIFtFcnJvciwgbnVsbF0gYW4gZXJyb3Igb2JqZWN0IGlmIHRoZSBjYWxsIGZhaWxlZCBvciBudWxsIGlmXG4gICAqICAgICBpdCBzdWNjZWVkZWQuXG4gICAqICAgQHBhcmFtIGlkZW50aXR5SWQgW1N0cmluZywgbnVsbF0gaWYgc3VjY2Vzc2Z1bCwgdGhlIGNhbGxiYWNrIHdpbGwgcmV0dXJuXG4gICAqICAgICB0aGUgQ29nbml0byBJRC5cbiAgICogQG5vdGUgSWYgbm90IGxvYWRlZCBleHBsaWNpdGx5LCB0aGUgQ29nbml0byBJRCBpcyBsb2FkZWQgYW5kIHN0b3JlZCBpblxuICAgKiAgIGxvY2FsU3RvcmFnZSBpbiB0aGUgYnJvd3NlciBlbnZpcm9ubWVudCBvZiBhIGRldmljZS5cbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBnZXRJZDogZnVuY3Rpb24gZ2V0SWQoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiBzZWxmLnBhcmFtcy5JZGVudGl0eUlkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwsIHNlbGYucGFyYW1zLklkZW50aXR5SWQpO1xuICAgIH1cblxuICAgIHNlbGYuY29nbml0by5nZXRJZChmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmICghZXJyICYmIGRhdGEuSWRlbnRpdHlJZCkge1xuICAgICAgICBzZWxmLnBhcmFtcy5JZGVudGl0eUlkID0gZGF0YS5JZGVudGl0eUlkO1xuICAgICAgICBjYWxsYmFjayhudWxsLCBkYXRhLklkZW50aXR5SWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSxcblxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGxvYWRDcmVkZW50aWFsczogZnVuY3Rpb24gbG9hZENyZWRlbnRpYWxzKGRhdGEsIGNyZWRlbnRpYWxzKSB7XG4gICAgaWYgKCFkYXRhIHx8ICFjcmVkZW50aWFscykgcmV0dXJuO1xuICAgIGNyZWRlbnRpYWxzLmV4cGlyZWQgPSBmYWxzZTtcbiAgICBjcmVkZW50aWFscy5hY2Nlc3NLZXlJZCA9IGRhdGEuQ3JlZGVudGlhbHMuQWNjZXNzS2V5SWQ7XG4gICAgY3JlZGVudGlhbHMuc2VjcmV0QWNjZXNzS2V5ID0gZGF0YS5DcmVkZW50aWFscy5TZWNyZXRLZXk7XG4gICAgY3JlZGVudGlhbHMuc2Vzc2lvblRva2VuID0gZGF0YS5DcmVkZW50aWFscy5TZXNzaW9uVG9rZW47XG4gICAgY3JlZGVudGlhbHMuZXhwaXJlVGltZSA9IGRhdGEuQ3JlZGVudGlhbHMuRXhwaXJhdGlvbjtcbiAgfSxcblxuICAvKipcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBnZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5OiBmdW5jdGlvbiBnZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5KGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuY29nbml0by5nZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5KGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgc2VsZi5jYWNoZUlkKGRhdGEpO1xuICAgICAgICBzZWxmLmRhdGEgPSBkYXRhO1xuICAgICAgICBzZWxmLmxvYWRDcmVkZW50aWFscyhzZWxmLmRhdGEsIHNlbGYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZi5jbGVhcklkT25Ob3RBdXRob3JpemVkKGVycik7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGdldENyZWRlbnRpYWxzRnJvbVNUUzogZnVuY3Rpb24gZ2V0Q3JlZGVudGlhbHNGcm9tU1RTKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuY29nbml0by5nZXRPcGVuSWRUb2tlbihmdW5jdGlvbihlcnIsIGRhdGEpIHtcbiAgICAgIGlmICghZXJyKSB7XG4gICAgICAgIHNlbGYuY2FjaGVJZChkYXRhKTtcbiAgICAgICAgc2VsZi5wYXJhbXMuV2ViSWRlbnRpdHlUb2tlbiA9IGRhdGEuVG9rZW47XG4gICAgICAgIHNlbGYud2ViSWRlbnRpdHlDcmVkZW50aWFscy5yZWZyZXNoKGZ1bmN0aW9uKHdlYkVycikge1xuICAgICAgICAgIGlmICghd2ViRXJyKSB7XG4gICAgICAgICAgICBzZWxmLmRhdGEgPSBzZWxmLndlYklkZW50aXR5Q3JlZGVudGlhbHMuZGF0YTtcbiAgICAgICAgICAgIHNlbGYuc3RzLmNyZWRlbnRpYWxzRnJvbShzZWxmLmRhdGEsIHNlbGYpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYWxsYmFjayh3ZWJFcnIpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlbGYuY2xlYXJJZE9uTm90QXV0aG9yaXplZChlcnIpO1xuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGxvYWRDYWNoZWRJZDogZnVuY3Rpb24gbG9hZENhY2hlZElkKCkge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIC8vIGluIHRoZSBicm93c2VyIHdlIHNvdXJjZSBkZWZhdWx0IElkZW50aXR5SWQgZnJvbSBsb2NhbFN0b3JhZ2VcbiAgICBpZiAoQVdTLnV0aWwuaXNCcm93c2VyKCkgJiYgIXNlbGYucGFyYW1zLklkZW50aXR5SWQpIHtcbiAgICAgIHZhciBpZCA9IHNlbGYuZ2V0U3RvcmFnZSgnaWQnKTtcbiAgICAgIGlmIChpZCAmJiBzZWxmLnBhcmFtcy5Mb2dpbnMpIHtcbiAgICAgICAgdmFyIGFjdHVhbFByb3ZpZGVycyA9IE9iamVjdC5rZXlzKHNlbGYucGFyYW1zLkxvZ2lucyk7XG4gICAgICAgIHZhciBjYWNoZWRQcm92aWRlcnMgPVxuICAgICAgICAgIChzZWxmLmdldFN0b3JhZ2UoJ3Byb3ZpZGVycycpIHx8ICcnKS5zcGxpdCgnLCcpO1xuXG4gICAgICAgIC8vIG9ubHkgbG9hZCBJRCBpZiBhdCBsZWFzdCBvbmUgcHJvdmlkZXIgdXNlZCB0aGlzIElEIGJlZm9yZVxuICAgICAgICB2YXIgaW50ZXJzZWN0ID0gY2FjaGVkUHJvdmlkZXJzLmZpbHRlcihmdW5jdGlvbihuKSB7XG4gICAgICAgICAgcmV0dXJuIGFjdHVhbFByb3ZpZGVycy5pbmRleE9mKG4pICE9PSAtMTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpbnRlcnNlY3QubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgc2VsZi5wYXJhbXMuSWRlbnRpdHlJZCA9IGlkO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlkKSB7XG4gICAgICAgIHNlbGYucGFyYW1zLklkZW50aXR5SWQgPSBpZDtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgY3JlYXRlQ2xpZW50czogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNsaWVudENvbmZpZyA9IHRoaXMuX2NsaWVudENvbmZpZztcbiAgICB0aGlzLndlYklkZW50aXR5Q3JlZGVudGlhbHMgPSB0aGlzLndlYklkZW50aXR5Q3JlZGVudGlhbHMgfHxcbiAgICAgIG5ldyBBV1MuV2ViSWRlbnRpdHlDcmVkZW50aWFscyh0aGlzLnBhcmFtcywgY2xpZW50Q29uZmlnKTtcbiAgICBpZiAoIXRoaXMuY29nbml0bykge1xuICAgICAgdmFyIGNvZ25pdG9Db25maWcgPSBBV1MudXRpbC5tZXJnZSh7fSwgY2xpZW50Q29uZmlnKTtcbiAgICAgIGNvZ25pdG9Db25maWcucGFyYW1zID0gdGhpcy5wYXJhbXM7XG4gICAgICB0aGlzLmNvZ25pdG8gPSBuZXcgQ29nbml0b0lkZW50aXR5KGNvZ25pdG9Db25maWcpO1xuICAgIH1cbiAgICB0aGlzLnN0cyA9IHRoaXMuc3RzIHx8IG5ldyBTVFMoY2xpZW50Q29uZmlnKTtcbiAgfSxcblxuICAvKipcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBjYWNoZUlkOiBmdW5jdGlvbiBjYWNoZUlkKGRhdGEpIHtcbiAgICB0aGlzLl9pZGVudGl0eUlkID0gZGF0YS5JZGVudGl0eUlkO1xuICAgIHRoaXMucGFyYW1zLklkZW50aXR5SWQgPSB0aGlzLl9pZGVudGl0eUlkO1xuXG4gICAgLy8gY2FjaGUgdGhpcyBJZGVudGl0eUlkIGluIGJyb3dzZXIgbG9jYWxTdG9yYWdlIGlmIHBvc3NpYmxlXG4gICAgaWYgKEFXUy51dGlsLmlzQnJvd3NlcigpKSB7XG4gICAgICB0aGlzLnNldFN0b3JhZ2UoJ2lkJywgZGF0YS5JZGVudGl0eUlkKTtcblxuICAgICAgaWYgKHRoaXMucGFyYW1zLkxvZ2lucykge1xuICAgICAgICB0aGlzLnNldFN0b3JhZ2UoJ3Byb3ZpZGVycycsIE9iamVjdC5rZXlzKHRoaXMucGFyYW1zLkxvZ2lucykuam9pbignLCcpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgZ2V0U3RvcmFnZTogZnVuY3Rpb24gZ2V0U3RvcmFnZShrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yYWdlW3RoaXMubG9jYWxTdG9yYWdlS2V5W2tleV0gKyB0aGlzLnBhcmFtcy5JZGVudGl0eVBvb2xJZCArICh0aGlzLnBhcmFtcy5Mb2dpbklkIHx8ICcnKV07XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgc2V0U3RvcmFnZTogZnVuY3Rpb24gc2V0U3RvcmFnZShrZXksIHZhbCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnN0b3JhZ2VbdGhpcy5sb2NhbFN0b3JhZ2VLZXlba2V5XSArIHRoaXMucGFyYW1zLklkZW50aXR5UG9vbElkICsgKHRoaXMucGFyYW1zLkxvZ2luSWQgfHwgJycpXSA9IHZhbDtcbiAgICB9IGNhdGNoIChfKSB7fVxuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIHN0b3JhZ2U6IChmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN0b3JhZ2UgPSBBV1MudXRpbC5pc0Jyb3dzZXIoKSAmJiB3aW5kb3cubG9jYWxTdG9yYWdlICE9PSBudWxsICYmIHR5cGVvZiB3aW5kb3cubG9jYWxTdG9yYWdlID09PSAnb2JqZWN0JyA/XG4gICAgICAgICAgd2luZG93LmxvY2FsU3RvcmFnZSA6IHt9O1xuXG4gICAgICAvLyBUZXN0IHNldC9yZW1vdmUgd2hpY2ggd291bGQgdGhyb3cgYW4gZXJyb3IgaW4gU2FmYXJpJ3MgcHJpdmF0ZSBicm93c2luZ1xuICAgICAgc3RvcmFnZVsnYXdzLnRlc3Qtc3RvcmFnZSddID0gJ2Zvb2Jhcic7XG4gICAgICBkZWxldGUgc3RvcmFnZVsnYXdzLnRlc3Qtc3RvcmFnZSddO1xuXG4gICAgICByZXR1cm4gc3RvcmFnZTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9KSgpXG59KTtcbiIsInZhciBBV1MgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG52YXIgU1RTID0gcmVxdWlyZSgnLi4vLi4vY2xpZW50cy9zdHMnKTtcblxuLyoqXG4gKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIHJldHJpZXZlZCBmcm9tIFNUUyBTQU1MIHN1cHBvcnQuXG4gKlxuICogQnkgZGVmYXVsdCB0aGlzIHByb3ZpZGVyIGdldHMgY3JlZGVudGlhbHMgdXNpbmcgdGhlXG4gKiB7QVdTLlNUUy5hc3N1bWVSb2xlV2l0aFNBTUx9IHNlcnZpY2Ugb3BlcmF0aW9uLiBUaGlzIG9wZXJhdGlvblxuICogcmVxdWlyZXMgYSBgUm9sZUFybmAgY29udGFpbmluZyB0aGUgQVJOIG9mIHRoZSBJQU0gdHJ1c3QgcG9saWN5IGZvciB0aGVcbiAqIGFwcGxpY2F0aW9uIGZvciB3aGljaCBjcmVkZW50aWFscyB3aWxsIGJlIGdpdmVuLCBhcyB3ZWxsIGFzIGEgYFByaW5jaXBhbEFybmBcbiAqIHJlcHJlc2VudGluZyB0aGUgQVJOIGZvciB0aGUgU0FNTCBpZGVudGl0eSBwcm92aWRlci4gSW4gYWRkaXRpb24sIHRoZVxuICogYFNBTUxBc3NlcnRpb25gIG11c3QgYmUgc2V0IHRvIHRoZSB0b2tlbiBwcm92aWRlZCBieSB0aGUgaWRlbnRpdHlcbiAqIHByb3ZpZGVyLiBTZWUge2NvbnN0cnVjdG9yfSBmb3IgYW4gZXhhbXBsZSBvbiBjcmVhdGluZyBhIGNyZWRlbnRpYWxzXG4gKiBvYmplY3Qgd2l0aCBwcm9wZXIgYFJvbGVBcm5gLCBgUHJpbmNpcGFsQXJuYCwgYW5kIGBTQU1MQXNzZXJ0aW9uYCB2YWx1ZXMuXG4gKlxuICogIyMgUmVmcmVzaGluZyBDcmVkZW50aWFscyBmcm9tIElkZW50aXR5IFNlcnZpY2VcbiAqXG4gKiBJbiBhZGRpdGlvbiB0byBBV1MgY3JlZGVudGlhbHMgZXhwaXJpbmcgYWZ0ZXIgYSBnaXZlbiBhbW91bnQgb2YgdGltZSwgdGhlXG4gKiBsb2dpbiB0b2tlbiBmcm9tIHRoZSBpZGVudGl0eSBwcm92aWRlciB3aWxsIGFsc28gZXhwaXJlLiBPbmNlIHRoaXMgdG9rZW5cbiAqIGV4cGlyZXMsIGl0IHdpbGwgbm90IGJlIHVzYWJsZSB0byByZWZyZXNoIEFXUyBjcmVkZW50aWFscywgYW5kIGFub3RoZXJcbiAqIHRva2VuIHdpbGwgYmUgbmVlZGVkLiBUaGUgU0RLIGRvZXMgbm90IG1hbmFnZSByZWZyZXNoaW5nIG9mIHRoZSB0b2tlbiB2YWx1ZSxcbiAqIGJ1dCB0aGlzIGNhbiBiZSBkb25lIHRocm91Z2ggYSBcInJlZnJlc2ggdG9rZW5cIiBzdXBwb3J0ZWQgYnkgbW9zdCBpZGVudGl0eVxuICogcHJvdmlkZXJzLiBDb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgZm9yIHJlZnJlc2hpbmdcbiAqIHRva2Vucy4gT25jZSB0aGUgcmVmcmVzaGVkIHRva2VuIGlzIGFjcXVpcmVkLCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB0byB1cGRhdGVcbiAqIHRoaXMgbmV3IHRva2VuIGluIHRoZSBjcmVkZW50aWFscyBvYmplY3QncyB7cGFyYW1zfSBwcm9wZXJ0eS4gVGhlIGZvbGxvd2luZ1xuICogY29kZSB3aWxsIHVwZGF0ZSB0aGUgU0FNTEFzc2VydGlvbiwgYXNzdW1pbmcgeW91IGhhdmUgcmV0cmlldmVkIGFuIHVwZGF0ZWRcbiAqIHRva2VuIGZyb20gdGhlIGlkZW50aXR5IHByb3ZpZGVyOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIEFXUy5jb25maWcuY3JlZGVudGlhbHMucGFyYW1zLlNBTUxBc3NlcnRpb24gPSB1cGRhdGVkVG9rZW47XG4gKiBgYGBcbiAqXG4gKiBGdXR1cmUgY2FsbHMgdG8gYGNyZWRlbnRpYWxzLnJlZnJlc2goKWAgd2lsbCBub3cgdXNlIHRoZSBuZXcgdG9rZW4uXG4gKlxuICogQCFhdHRyaWJ1dGUgcGFyYW1zXG4gKiAgIEByZXR1cm4gW21hcF0gdGhlIG1hcCBvZiBwYXJhbXMgcGFzc2VkIHRvXG4gKiAgICAge0FXUy5TVFMuYXNzdW1lUm9sZVdpdGhTQU1MfS4gVG8gdXBkYXRlIHRoZSB0b2tlbiwgc2V0IHRoZVxuICogICAgIGBwYXJhbXMuU0FNTEFzc2VydGlvbmAgcHJvcGVydHkuXG4gKi9cbkFXUy5TQU1MQ3JlZGVudGlhbHMgPSBBV1MudXRpbC5pbmhlcml0KEFXUy5DcmVkZW50aWFscywge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjcmVkZW50aWFscyBvYmplY3QuXG4gICAqIEBwYXJhbSAoc2VlIEFXUy5TVFMuYXNzdW1lUm9sZVdpdGhTQU1MKVxuICAgKiBAZXhhbXBsZSBDcmVhdGluZyBhIG5ldyBjcmVkZW50aWFscyBvYmplY3RcbiAgICogICBBV1MuY29uZmlnLmNyZWRlbnRpYWxzID0gbmV3IEFXUy5TQU1MQ3JlZGVudGlhbHMoe1xuICAgKiAgICAgUm9sZUFybjogJ2Fybjphd3M6aWFtOjoxMjM0NTY3ODkwOnJvbGUvU0FNTFJvbGUnLFxuICAgKiAgICAgUHJpbmNpcGFsQXJuOiAnYXJuOmF3czppYW06OjEyMzQ1Njc4OTA6cm9sZS9TQU1MUHJpbmNpcGFsJyxcbiAgICogICAgIFNBTUxBc3NlcnRpb246ICdiYXNlNjQtdG9rZW4nLCAvLyBiYXNlNjQtZW5jb2RlZCB0b2tlbiBmcm9tIElkUFxuICAgKiAgIH0pO1xuICAgKiBAc2VlIEFXUy5TVFMuYXNzdW1lUm9sZVdpdGhTQU1MXG4gICAqL1xuICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gU0FNTENyZWRlbnRpYWxzKHBhcmFtcykge1xuICAgIEFXUy5DcmVkZW50aWFscy5jYWxsKHRoaXMpO1xuICAgIHRoaXMuZXhwaXJlZCA9IHRydWU7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBjcmVkZW50aWFscyB1c2luZyB7QVdTLlNUUy5hc3N1bWVSb2xlV2l0aFNBTUx9XG4gICAqXG4gICAqIEBjYWxsYmFjayBjYWxsYmFjayBmdW5jdGlvbihlcnIpXG4gICAqICAgQ2FsbGVkIHdoZW4gdGhlIFNUUyBzZXJ2aWNlIHJlc3BvbmRzIChvciBmYWlscykuIFdoZW5cbiAgICogICB0aGlzIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIG5vIGVycm9yLCBpdCBtZWFucyB0aGF0IHRoZSBjcmVkZW50aWFsc1xuICAgKiAgIGluZm9ybWF0aW9uIGhhcyBiZWVuIGxvYWRlZCBpbnRvIHRoZSBvYmplY3QgKGFzIHRoZSBgYWNjZXNzS2V5SWRgLFxuICAgKiAgIGBzZWNyZXRBY2Nlc3NLZXlgLCBhbmQgYHNlc3Npb25Ub2tlbmAgcHJvcGVydGllcykuXG4gICAqICAgQHBhcmFtIGVyciBbRXJyb3JdIGlmIGFuIGVycm9yIG9jY3VycmVkLCB0aGlzIHZhbHVlIHdpbGwgYmUgZmlsbGVkXG4gICAqIEBzZWUgZ2V0XG4gICAqL1xuICByZWZyZXNoOiBmdW5jdGlvbiByZWZyZXNoKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5jb2FsZXNjZVJlZnJlc2goY2FsbGJhY2sgfHwgQVdTLnV0aWwuZm4uY2FsbGJhY2spO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGxvYWQ6IGZ1bmN0aW9uIGxvYWQoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5jcmVhdGVDbGllbnRzKCk7XG4gICAgc2VsZi5zZXJ2aWNlLmFzc3VtZVJvbGVXaXRoU0FNTChmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAgICBpZiAoIWVycikge1xuICAgICAgICBzZWxmLnNlcnZpY2UuY3JlZGVudGlhbHNGcm9tKGRhdGEsIHNlbGYpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVDbGllbnRzOiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLnNlcnZpY2UgfHwgbmV3IFNUUyh7cGFyYW1zOiB0aGlzLnBhcmFtc30pO1xuICB9XG5cbn0pO1xuIiwidmFyIEFXUyA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcbnZhciBTVFMgPSByZXF1aXJlKCcuLi8uLi9jbGllbnRzL3N0cycpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzIHJldHJpZXZlZCBmcm9tIHtBV1MuU1RTfS4gV2l0aG91dCBhbnlcbiAqIGV4dHJhIHBhcmFtZXRlcnMsIGNyZWRlbnRpYWxzIHdpbGwgYmUgZmV0Y2hlZCBmcm9tIHRoZVxuICoge0FXUy5TVFMuZ2V0U2Vzc2lvblRva2VufSBvcGVyYXRpb24uIElmIGFuIElBTSByb2xlIGlzIHByb3ZpZGVkLCB0aGVcbiAqIHtBV1MuU1RTLmFzc3VtZVJvbGV9IG9wZXJhdGlvbiB3aWxsIGJlIHVzZWQgdG8gZmV0Y2ggY3JlZGVudGlhbHMgZm9yIHRoZVxuICogcm9sZSBpbnN0ZWFkLlxuICpcbiAqIEBub3RlIEFXUy5UZW1wb3JhcnlDcmVkZW50aWFscyBpcyBkZXByZWNhdGVkLCBidXQgcmVtYWlucyBhdmFpbGFibGUgZm9yXG4gKiAgIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiB7QVdTLkNoYWluYWJsZVRlbXBvcmFyeUNyZWRlbnRpYWxzfSBpcyB0aGVcbiAqICAgcHJlZmVycmVkIGNsYXNzIGZvciB0ZW1wb3JhcnkgY3JlZGVudGlhbHMuXG4gKlxuICogVG8gc2V0dXAgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzLCBjb25maWd1cmUgYSBzZXQgb2YgbWFzdGVyIGNyZWRlbnRpYWxzXG4gKiB1c2luZyB0aGUgc3RhbmRhcmQgY3JlZGVudGlhbHMgcHJvdmlkZXJzIChlbnZpcm9ubWVudCwgRUMyIGluc3RhbmNlIG1ldGFkYXRhLFxuICogb3IgZnJvbSB0aGUgZmlsZXN5c3RlbSksIHRoZW4gc2V0IHRoZSBnbG9iYWwgY3JlZGVudGlhbHMgdG8gYSBuZXdcbiAqIHRlbXBvcmFyeSBjcmVkZW50aWFscyBvYmplY3Q6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogLy8gTm90ZSB0aGF0IGVudmlyb25tZW50IGNyZWRlbnRpYWxzIGFyZSBsb2FkZWQgYnkgZGVmYXVsdCxcbiAqIC8vIHRoZSBmb2xsb3dpbmcgbGluZSBpcyBzaG93biBmb3IgY2xhcml0eTpcbiAqIEFXUy5jb25maWcuY3JlZGVudGlhbHMgPSBuZXcgQVdTLkVudmlyb25tZW50Q3JlZGVudGlhbHMoJ0FXUycpO1xuICpcbiAqIC8vIE5vdyBzZXQgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzIHNlZWRlZCBmcm9tIHRoZSBtYXN0ZXIgY3JlZGVudGlhbHNcbiAqIEFXUy5jb25maWcuY3JlZGVudGlhbHMgPSBuZXcgQVdTLlRlbXBvcmFyeUNyZWRlbnRpYWxzKCk7XG4gKlxuICogLy8gc3Vic2VxdWVudCByZXF1ZXN0cyB3aWxsIG5vdyB1c2UgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzIGZyb20gQVdTIFNUUy5cbiAqIG5ldyBBV1MuUzMoKS5saXN0QnVja2V0KGZ1bmN0aW9uKGVyciwgZGF0YSkgeyAuLi4gfSk7XG4gKiBgYGBcbiAqXG4gKiBAIWF0dHJpYnV0ZSBtYXN0ZXJDcmVkZW50aWFsc1xuICogICBAcmV0dXJuIFtBV1MuQ3JlZGVudGlhbHNdIHRoZSBtYXN0ZXIgKG5vbi10ZW1wb3JhcnkpIGNyZWRlbnRpYWxzIHVzZWQgdG9cbiAqICAgICBnZXQgYW5kIHJlZnJlc2ggdGVtcG9yYXJ5IGNyZWRlbnRpYWxzIGZyb20gQVdTIFNUUy5cbiAqIEBub3RlIChzZWUgY29uc3RydWN0b3IpXG4gKi9cbkFXUy5UZW1wb3JhcnlDcmVkZW50aWFscyA9IEFXUy51dGlsLmluaGVyaXQoQVdTLkNyZWRlbnRpYWxzLCB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IHRlbXBvcmFyeSBjcmVkZW50aWFscyBvYmplY3QuXG4gICAqXG4gICAqIEBub3RlIEluIG9yZGVyIHRvIGNyZWF0ZSB0ZW1wb3JhcnkgY3JlZGVudGlhbHMsIHlvdSBmaXJzdCBuZWVkIHRvIGhhdmVcbiAgICogICBcIm1hc3RlclwiIGNyZWRlbnRpYWxzIGNvbmZpZ3VyZWQgaW4ge0FXUy5Db25maWcuY3JlZGVudGlhbHN9LiBUaGVzZVxuICAgKiAgIG1hc3RlciBjcmVkZW50aWFscyBhcmUgbmVjZXNzYXJ5IHRvIHJldHJpZXZlIHRoZSB0ZW1wb3JhcnkgY3JlZGVudGlhbHMsXG4gICAqICAgYXMgd2VsbCBhcyByZWZyZXNoIHRoZSBjcmVkZW50aWFscyB3aGVuIHRoZXkgZXhwaXJlLlxuICAgKiBAcGFyYW0gcGFyYW1zIFttYXBdIGEgbWFwIG9mIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHRvIHRoZVxuICAgKiAgIHtBV1MuU1RTLmFzc3VtZVJvbGV9IG9yIHtBV1MuU1RTLmdldFNlc3Npb25Ub2tlbn0gb3BlcmF0aW9ucy5cbiAgICogICBJZiBhIGBSb2xlQXJuYCBwYXJhbWV0ZXIgaXMgcGFzc2VkIGluLCBjcmVkZW50aWFscyB3aWxsIGJlIGJhc2VkIG9uIHRoZVxuICAgKiAgIElBTSByb2xlLlxuICAgKiBAcGFyYW0gbWFzdGVyQ3JlZGVudGlhbHMgW0FXUy5DcmVkZW50aWFsc10gdGhlIG1hc3RlciAobm9uLXRlbXBvcmFyeSkgY3JlZGVudGlhbHNcbiAgICogIHVzZWQgdG8gZ2V0IGFuZCByZWZyZXNoIHRlbXBvcmFyeSBjcmVkZW50aWFscyBmcm9tIEFXUyBTVFMuXG4gICAqIEBleGFtcGxlIENyZWF0aW5nIGEgbmV3IGNyZWRlbnRpYWxzIG9iamVjdCBmb3IgZ2VuZXJpYyB0ZW1wb3JhcnkgY3JlZGVudGlhbHNcbiAgICogICBBV1MuY29uZmlnLmNyZWRlbnRpYWxzID0gbmV3IEFXUy5UZW1wb3JhcnlDcmVkZW50aWFscygpO1xuICAgKiBAZXhhbXBsZSBDcmVhdGluZyBhIG5ldyBjcmVkZW50aWFscyBvYmplY3QgZm9yIGFuIElBTSByb2xlXG4gICAqICAgQVdTLmNvbmZpZy5jcmVkZW50aWFscyA9IG5ldyBBV1MuVGVtcG9yYXJ5Q3JlZGVudGlhbHMoe1xuICAgKiAgICAgUm9sZUFybjogJ2Fybjphd3M6aWFtOjoxMjM0NTY3ODkwOnJvbGUvVGVtcG9yYXJ5Q3JlZGVudGlhbHMnLFxuICAgKiAgIH0pO1xuICAgKiBAc2VlIEFXUy5TVFMuYXNzdW1lUm9sZVxuICAgKiBAc2VlIEFXUy5TVFMuZ2V0U2Vzc2lvblRva2VuXG4gICAqL1xuICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gVGVtcG9yYXJ5Q3JlZGVudGlhbHMocGFyYW1zLCBtYXN0ZXJDcmVkZW50aWFscykge1xuICAgIEFXUy5DcmVkZW50aWFscy5jYWxsKHRoaXMpO1xuICAgIHRoaXMubG9hZE1hc3RlckNyZWRlbnRpYWxzKG1hc3RlckNyZWRlbnRpYWxzKTtcbiAgICB0aGlzLmV4cGlyZWQgPSB0cnVlO1xuXG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXMgfHwge307XG4gICAgaWYgKHRoaXMucGFyYW1zLlJvbGVBcm4pIHtcbiAgICAgIHRoaXMucGFyYW1zLlJvbGVTZXNzaW9uTmFtZSA9XG4gICAgICAgIHRoaXMucGFyYW1zLlJvbGVTZXNzaW9uTmFtZSB8fCAndGVtcG9yYXJ5LWNyZWRlbnRpYWxzJztcbiAgICB9XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBjcmVkZW50aWFscyB1c2luZyB7QVdTLlNUUy5hc3N1bWVSb2xlfSBvclxuICAgKiB7QVdTLlNUUy5nZXRTZXNzaW9uVG9rZW59LCBkZXBlbmRpbmcgb24gd2hldGhlciBhbiBJQU0gcm9sZSBBUk4gd2FzIHBhc3NlZFxuICAgKiB0byB0aGUgY3JlZGVudGlhbHMge2NvbnN0cnVjdG9yfS5cbiAgICpcbiAgICogQGNhbGxiYWNrIGNhbGxiYWNrIGZ1bmN0aW9uKGVycilcbiAgICogICBDYWxsZWQgd2hlbiB0aGUgU1RTIHNlcnZpY2UgcmVzcG9uZHMgKG9yIGZhaWxzKS4gV2hlblxuICAgKiAgIHRoaXMgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggbm8gZXJyb3IsIGl0IG1lYW5zIHRoYXQgdGhlIGNyZWRlbnRpYWxzXG4gICAqICAgaW5mb3JtYXRpb24gaGFzIGJlZW4gbG9hZGVkIGludG8gdGhlIG9iamVjdCAoYXMgdGhlIGBhY2Nlc3NLZXlJZGAsXG4gICAqICAgYHNlY3JldEFjY2Vzc0tleWAsIGFuZCBgc2Vzc2lvblRva2VuYCBwcm9wZXJ0aWVzKS5cbiAgICogICBAcGFyYW0gZXJyIFtFcnJvcl0gaWYgYW4gZXJyb3Igb2NjdXJyZWQsIHRoaXMgdmFsdWUgd2lsbCBiZSBmaWxsZWRcbiAgICogQHNlZSBnZXRcbiAgICovXG4gIHJlZnJlc2g6IGZ1bmN0aW9uIHJlZnJlc2ggKGNhbGxiYWNrKSB7XG4gICAgdGhpcy5jb2FsZXNjZVJlZnJlc2goY2FsbGJhY2sgfHwgQVdTLnV0aWwuZm4uY2FsbGJhY2spO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGxvYWQ6IGZ1bmN0aW9uIGxvYWQgKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuY3JlYXRlQ2xpZW50cygpO1xuICAgIHNlbGYubWFzdGVyQ3JlZGVudGlhbHMuZ2V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuc2VydmljZS5jb25maWcuY3JlZGVudGlhbHMgPSBzZWxmLm1hc3RlckNyZWRlbnRpYWxzO1xuICAgICAgdmFyIG9wZXJhdGlvbiA9IHNlbGYucGFyYW1zLlJvbGVBcm4gP1xuICAgICAgICBzZWxmLnNlcnZpY2UuYXNzdW1lUm9sZSA6IHNlbGYuc2VydmljZS5nZXRTZXNzaW9uVG9rZW47XG4gICAgICBvcGVyYXRpb24uY2FsbChzZWxmLnNlcnZpY2UsIGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICBzZWxmLnNlcnZpY2UuY3JlZGVudGlhbHNGcm9tKGRhdGEsIHNlbGYpO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBsb2FkTWFzdGVyQ3JlZGVudGlhbHM6IGZ1bmN0aW9uIGxvYWRNYXN0ZXJDcmVkZW50aWFscyAobWFzdGVyQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLm1hc3RlckNyZWRlbnRpYWxzID0gbWFzdGVyQ3JlZGVudGlhbHMgfHwgQVdTLmNvbmZpZy5jcmVkZW50aWFscztcbiAgICB3aGlsZSAodGhpcy5tYXN0ZXJDcmVkZW50aWFscy5tYXN0ZXJDcmVkZW50aWFscykge1xuICAgICAgdGhpcy5tYXN0ZXJDcmVkZW50aWFscyA9IHRoaXMubWFzdGVyQ3JlZGVudGlhbHMubWFzdGVyQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB0aGlzLm1hc3RlckNyZWRlbnRpYWxzLmdldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5tYXN0ZXJDcmVkZW50aWFscyA9IG5ldyBBV1MuQ3JlZGVudGlhbHModGhpcy5tYXN0ZXJDcmVkZW50aWFscyk7XG4gICAgfVxuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIGNyZWF0ZUNsaWVudHM6IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnNlcnZpY2UgPSB0aGlzLnNlcnZpY2UgfHwgbmV3IFNUUyh7cGFyYW1zOiB0aGlzLnBhcmFtc30pO1xuICB9XG5cbn0pO1xuIiwidmFyIEFXUyA9IHJlcXVpcmUoJy4uL2NvcmUnKTtcbnZhciBTVFMgPSByZXF1aXJlKCcuLi8uLi9jbGllbnRzL3N0cycpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgY3JlZGVudGlhbHMgcmV0cmlldmVkIGZyb20gU1RTIFdlYiBJZGVudGl0eSBGZWRlcmF0aW9uIHN1cHBvcnQuXG4gKlxuICogQnkgZGVmYXVsdCB0aGlzIHByb3ZpZGVyIGdldHMgY3JlZGVudGlhbHMgdXNpbmcgdGhlXG4gKiB7QVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5fSBzZXJ2aWNlIG9wZXJhdGlvbi4gVGhpcyBvcGVyYXRpb25cbiAqIHJlcXVpcmVzIGEgYFJvbGVBcm5gIGNvbnRhaW5pbmcgdGhlIEFSTiBvZiB0aGUgSUFNIHRydXN0IHBvbGljeSBmb3IgdGhlXG4gKiBhcHBsaWNhdGlvbiBmb3Igd2hpY2ggY3JlZGVudGlhbHMgd2lsbCBiZSBnaXZlbi4gSW4gYWRkaXRpb24sIHRoZVxuICogYFdlYklkZW50aXR5VG9rZW5gIG11c3QgYmUgc2V0IHRvIHRoZSB0b2tlbiBwcm92aWRlZCBieSB0aGUgaWRlbnRpdHlcbiAqIHByb3ZpZGVyLiBTZWUge2NvbnN0cnVjdG9yfSBmb3IgYW4gZXhhbXBsZSBvbiBjcmVhdGluZyBhIGNyZWRlbnRpYWxzXG4gKiBvYmplY3Qgd2l0aCBwcm9wZXIgYFJvbGVBcm5gIGFuZCBgV2ViSWRlbnRpdHlUb2tlbmAgdmFsdWVzLlxuICpcbiAqICMjIFJlZnJlc2hpbmcgQ3JlZGVudGlhbHMgZnJvbSBJZGVudGl0eSBTZXJ2aWNlXG4gKlxuICogSW4gYWRkaXRpb24gdG8gQVdTIGNyZWRlbnRpYWxzIGV4cGlyaW5nIGFmdGVyIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWUsIHRoZVxuICogbG9naW4gdG9rZW4gZnJvbSB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgd2lsbCBhbHNvIGV4cGlyZS4gT25jZSB0aGlzIHRva2VuXG4gKiBleHBpcmVzLCBpdCB3aWxsIG5vdCBiZSB1c2FibGUgdG8gcmVmcmVzaCBBV1MgY3JlZGVudGlhbHMsIGFuZCBhbm90aGVyXG4gKiB0b2tlbiB3aWxsIGJlIG5lZWRlZC4gVGhlIFNESyBkb2VzIG5vdCBtYW5hZ2UgcmVmcmVzaGluZyBvZiB0aGUgdG9rZW4gdmFsdWUsXG4gKiBidXQgdGhpcyBjYW4gYmUgZG9uZSB0aHJvdWdoIGEgXCJyZWZyZXNoIHRva2VuXCIgc3VwcG9ydGVkIGJ5IG1vc3QgaWRlbnRpdHlcbiAqIHByb3ZpZGVycy4gQ29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGlkZW50aXR5IHByb3ZpZGVyIGZvciByZWZyZXNoaW5nXG4gKiB0b2tlbnMuIE9uY2UgdGhlIHJlZnJlc2hlZCB0b2tlbiBpcyBhY3F1aXJlZCwgeW91IHNob3VsZCBtYWtlIHN1cmUgdG8gdXBkYXRlXG4gKiB0aGlzIG5ldyB0b2tlbiBpbiB0aGUgY3JlZGVudGlhbHMgb2JqZWN0J3Mge3BhcmFtc30gcHJvcGVydHkuIFRoZSBmb2xsb3dpbmdcbiAqIGNvZGUgd2lsbCB1cGRhdGUgdGhlIFdlYklkZW50aXR5VG9rZW4sIGFzc3VtaW5nIHlvdSBoYXZlIHJldHJpZXZlZCBhbiB1cGRhdGVkXG4gKiB0b2tlbiBmcm9tIHRoZSBpZGVudGl0eSBwcm92aWRlcjpcbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBBV1MuY29uZmlnLmNyZWRlbnRpYWxzLnBhcmFtcy5XZWJJZGVudGl0eVRva2VuID0gdXBkYXRlZFRva2VuO1xuICogYGBgXG4gKlxuICogRnV0dXJlIGNhbGxzIHRvIGBjcmVkZW50aWFscy5yZWZyZXNoKClgIHdpbGwgbm93IHVzZSB0aGUgbmV3IHRva2VuLlxuICpcbiAqIEAhYXR0cmlidXRlIHBhcmFtc1xuICogICBAcmV0dXJuIFttYXBdIHRoZSBtYXAgb2YgcGFyYW1zIHBhc3NlZCB0b1xuICogICAgIHtBV1MuU1RTLmFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHl9LiBUbyB1cGRhdGUgdGhlIHRva2VuLCBzZXQgdGhlXG4gKiAgICAgYHBhcmFtcy5XZWJJZGVudGl0eVRva2VuYCBwcm9wZXJ0eS5cbiAqIEAhYXR0cmlidXRlIGRhdGFcbiAqICAgQHJldHVybiBbbWFwXSB0aGUgcmF3IGRhdGEgcmVzcG9uc2UgZnJvbSB0aGUgY2FsbCB0b1xuICogICAgIHtBV1MuU1RTLmFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHl9LiBVc2UgdGhpcyBpZiB5b3Ugd2FudCB0byBnZXRcbiAqICAgICBhY2Nlc3MgdG8gb3RoZXIgcHJvcGVydGllcyBmcm9tIHRoZSByZXNwb25zZS5cbiAqL1xuQVdTLldlYklkZW50aXR5Q3JlZGVudGlhbHMgPSBBV1MudXRpbC5pbmhlcml0KEFXUy5DcmVkZW50aWFscywge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBjcmVkZW50aWFscyBvYmplY3QuXG4gICAqIEBwYXJhbSAoc2VlIEFXUy5TVFMuYXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eSlcbiAgICogQGV4YW1wbGUgQ3JlYXRpbmcgYSBuZXcgY3JlZGVudGlhbHMgb2JqZWN0XG4gICAqICAgQVdTLmNvbmZpZy5jcmVkZW50aWFscyA9IG5ldyBBV1MuV2ViSWRlbnRpdHlDcmVkZW50aWFscyh7XG4gICAqICAgICBSb2xlQXJuOiAnYXJuOmF3czppYW06OjEyMzQ1Njc4OTA6cm9sZS9XZWJJZGVudGl0eScsXG4gICAqICAgICBXZWJJZGVudGl0eVRva2VuOiAnQUJDREVGR0hJSktMTU5PUCcsIC8vIHRva2VuIGZyb20gaWRlbnRpdHkgc2VydmljZVxuICAgKiAgICAgUm9sZVNlc3Npb25OYW1lOiAnd2ViJyAvLyBvcHRpb25hbCBuYW1lLCBkZWZhdWx0cyB0byB3ZWItaWRlbnRpdHlcbiAgICogICB9LCB7XG4gICAqICAgICAvLyBvcHRpb25hbGx5IHByb3ZpZGUgY29uZmlndXJhdGlvbiB0byBhcHBseSB0byB0aGUgdW5kZXJseWluZyBBV1MuU1RTIHNlcnZpY2UgY2xpZW50XG4gICAqICAgICAvLyBpZiBjb25maWd1cmF0aW9uIGlzIG5vdCBwcm92aWRlZCwgdGhlbiBjb25maWd1cmF0aW9uIHdpbGwgYmUgcHVsbGVkIGZyb20gQVdTLmNvbmZpZ1xuICAgKlxuICAgKiAgICAgLy8gc3BlY2lmeSB0aW1lb3V0IG9wdGlvbnNcbiAgICogICAgIGh0dHBPcHRpb25zOiB7XG4gICAqICAgICAgIHRpbWVvdXQ6IDEwMFxuICAgKiAgICAgfVxuICAgKiAgIH0pO1xuICAgKiBAc2VlIEFXUy5TVFMuYXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eVxuICAgKiBAc2VlIEFXUy5Db25maWdcbiAgICovXG4gIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiBXZWJJZGVudGl0eUNyZWRlbnRpYWxzKHBhcmFtcywgY2xpZW50Q29uZmlnKSB7XG4gICAgQVdTLkNyZWRlbnRpYWxzLmNhbGwodGhpcyk7XG4gICAgdGhpcy5leHBpcmVkID0gdHJ1ZTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgICB0aGlzLnBhcmFtcy5Sb2xlU2Vzc2lvbk5hbWUgPSB0aGlzLnBhcmFtcy5Sb2xlU2Vzc2lvbk5hbWUgfHwgJ3dlYi1pZGVudGl0eSc7XG4gICAgdGhpcy5kYXRhID0gbnVsbDtcbiAgICB0aGlzLl9jbGllbnRDb25maWcgPSBBV1MudXRpbC5jb3B5KGNsaWVudENvbmZpZyB8fCB7fSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIFJlZnJlc2hlcyBjcmVkZW50aWFscyB1c2luZyB7QVdTLlNUUy5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5fVxuICAgKlxuICAgKiBAY2FsbGJhY2sgY2FsbGJhY2sgZnVuY3Rpb24oZXJyKVxuICAgKiAgIENhbGxlZCB3aGVuIHRoZSBTVFMgc2VydmljZSByZXNwb25kcyAob3IgZmFpbHMpLiBXaGVuXG4gICAqICAgdGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCBubyBlcnJvciwgaXQgbWVhbnMgdGhhdCB0aGUgY3JlZGVudGlhbHNcbiAgICogICBpbmZvcm1hdGlvbiBoYXMgYmVlbiBsb2FkZWQgaW50byB0aGUgb2JqZWN0IChhcyB0aGUgYGFjY2Vzc0tleUlkYCxcbiAgICogICBgc2VjcmV0QWNjZXNzS2V5YCwgYW5kIGBzZXNzaW9uVG9rZW5gIHByb3BlcnRpZXMpLlxuICAgKiAgIEBwYXJhbSBlcnIgW0Vycm9yXSBpZiBhbiBlcnJvciBvY2N1cnJlZCwgdGhpcyB2YWx1ZSB3aWxsIGJlIGZpbGxlZFxuICAgKiBAc2VlIGdldFxuICAgKi9cbiAgcmVmcmVzaDogZnVuY3Rpb24gcmVmcmVzaChjYWxsYmFjaykge1xuICAgIHRoaXMuY29hbGVzY2VSZWZyZXNoKGNhbGxiYWNrIHx8IEFXUy51dGlsLmZuLmNhbGxiYWNrKTtcbiAgfSxcblxuICAvKipcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBsb2FkOiBmdW5jdGlvbiBsb2FkKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGYuY3JlYXRlQ2xpZW50cygpO1xuICAgIHNlbGYuc2VydmljZS5hc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5KGZ1bmN0aW9uIChlcnIsIGRhdGEpIHtcbiAgICAgIHNlbGYuZGF0YSA9IG51bGw7XG4gICAgICBpZiAoIWVycikge1xuICAgICAgICBzZWxmLmRhdGEgPSBkYXRhO1xuICAgICAgICBzZWxmLnNlcnZpY2UuY3JlZGVudGlhbHNGcm9tKGRhdGEsIHNlbGYpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICB9KTtcbiAgfSxcblxuICAvKipcbiAgICogQGFwaSBwcml2YXRlXG4gICAqL1xuICBjcmVhdGVDbGllbnRzOiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgdmFyIHN0c0NvbmZpZyA9IEFXUy51dGlsLm1lcmdlKHt9LCB0aGlzLl9jbGllbnRDb25maWcpO1xuICAgICAgc3RzQ29uZmlnLnBhcmFtcyA9IHRoaXMucGFyYW1zO1xuICAgICAgdGhpcy5zZXJ2aWNlID0gbmV3IFNUUyhzdHNDb25maWcpO1xuICAgIH1cbiAgfVxuXG59KTtcbiIsInZhciBldmVudE1lc3NhZ2VDaHVua2VyID0gcmVxdWlyZSgnLi4vZXZlbnQtc3RyZWFtL2V2ZW50LW1lc3NhZ2UtY2h1bmtlcicpLmV2ZW50TWVzc2FnZUNodW5rZXI7XG52YXIgcGFyc2VFdmVudCA9IHJlcXVpcmUoJy4vcGFyc2UtZXZlbnQnKS5wYXJzZUV2ZW50O1xuXG5mdW5jdGlvbiBjcmVhdGVFdmVudFN0cmVhbShib2R5LCBwYXJzZXIsIG1vZGVsKSB7XG4gICAgdmFyIGV2ZW50TWVzc2FnZXMgPSBldmVudE1lc3NhZ2VDaHVua2VyKGJvZHkpO1xuXG4gICAgdmFyIGV2ZW50cyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudE1lc3NhZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV2ZW50cy5wdXNoKHBhcnNlRXZlbnQocGFyc2VyLCBldmVudE1lc3NhZ2VzW2ldLCBtb2RlbCkpO1xuICAgIH1cblxuICAgIHJldHVybiBldmVudHM7XG59XG5cbi8qKlxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGNyZWF0ZUV2ZW50U3RyZWFtOiBjcmVhdGVFdmVudFN0cmVhbVxufTtcbiIsIi8qKlxuICogVGFrZXMgaW4gYSBidWZmZXIgb2YgZXZlbnQgbWVzc2FnZXMgYW5kIHNwbGl0cyB0aGVtIGludG8gaW5kaXZpZHVhbCBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBldmVudE1lc3NhZ2VDaHVua2VyKGJ1ZmZlcikge1xuICAgIC8qKiBAdHlwZSBCdWZmZXJbXSAqL1xuICAgIHZhciBtZXNzYWdlcyA9IFtdO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgd2hpbGUgKG9mZnNldCA8IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHRvdGFsTGVuZ3RoID0gYnVmZmVyLnJlYWRJbnQzMkJFKG9mZnNldCk7XG5cbiAgICAgICAgLy8gY3JlYXRlIG5ldyBidWZmZXIgZm9yIGluZGl2aWR1YWwgbWVzc2FnZSAoc2hhcmVzIG1lbW9yeSB3aXRoIG9yaWdpbmFsKVxuICAgICAgICB2YXIgbWVzc2FnZSA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIHRvdGFsTGVuZ3RoICsgb2Zmc2V0KTtcbiAgICAgICAgLy8gaW5jcmVtZW50IG9mZnNldCB0byBpdCBzdGFydHMgYXQgdGhlIG5leHQgbWVzc2FnZVxuICAgICAgICBvZmZzZXQgKz0gdG90YWxMZW5ndGg7XG5cbiAgICAgICAgbWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVzc2FnZXM7XG59XG5cbi8qKlxuICogQGFwaSBwcml2YXRlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGV2ZW50TWVzc2FnZUNodW5rZXI6IGV2ZW50TWVzc2FnZUNodW5rZXJcbn07XG4iLCJ2YXIgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUnKS51dGlsO1xudmFyIHRvQnVmZmVyID0gdXRpbC5idWZmZXIudG9CdWZmZXI7XG5cbi8qKlxuICogQSBsb3NzbGVzcyByZXByZXNlbnRhdGlvbiBvZiBhIHNpZ25lZCwgNjQtYml0IGludGVnZXIuIEluc3RhbmNlcyBvZiB0aGlzXG4gKiBjbGFzcyBtYXkgYmUgdXNlZCBpbiBhcml0aG1ldGljIGV4cHJlc3Npb25zIGFzIGlmIHRoZXkgd2VyZSBudW1lcmljXG4gKiBwcmltaXRpdmVzLCBidXQgdGhlIGJpbmFyeSByZXByZXNlbnRhdGlvbiB3aWxsIGJlIHByZXNlcnZlZCB1bmNoYW5nZWQgYXMgdGhlXG4gKiBgYnl0ZXNgIHByb3BlcnR5IG9mIHRoZSBvYmplY3QuIFRoZSBieXRlcyBzaG91bGQgYmUgZW5jb2RlZCBhcyBiaWctZW5kaWFuLFxuICogdHdvJ3MgY29tcGxlbWVudCBpbnRlZ2Vycy5cbiAqIEBwYXJhbSB7QnVmZmVyfSBieXRlc1xuICpcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBJbnQ2NChieXRlcykge1xuICAgIGlmIChieXRlcy5sZW5ndGggIT09IDgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnQ2NCBidWZmZXJzIG11c3QgYmUgZXhhY3RseSA4IGJ5dGVzJyk7XG4gICAgfVxuICAgIGlmICghdXRpbC5CdWZmZXIuaXNCdWZmZXIoYnl0ZXMpKSBieXRlcyA9IHRvQnVmZmVyKGJ5dGVzKTtcblxuICAgIHRoaXMuYnl0ZXMgPSBieXRlcztcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyXG4gKiBAcmV0dXJucyB7SW50NjR9XG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cbkludDY0LmZyb21OdW1iZXIgPSBmdW5jdGlvbihudW1iZXIpIHtcbiAgICBpZiAobnVtYmVyID4gOTIyMzM3MjAzNjg1NDc3NTgwNyB8fCBudW1iZXIgPCAtOTIyMzM3MjAzNjg1NDc3NTgwOCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBudW1iZXIgKyAnIGlzIHRvbyBsYXJnZSAob3IsIGlmIG5lZ2F0aXZlLCB0b28gc21hbGwpIHRvIHJlcHJlc2VudCBhcyBhbiBJbnQ2NCdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheSg4KTtcbiAgICBmb3IgKFxuICAgICAgICB2YXIgaSA9IDcsIHJlbWFpbmluZyA9IE1hdGguYWJzKE1hdGgucm91bmQobnVtYmVyKSk7XG4gICAgICAgIGkgPiAtMSAmJiByZW1haW5pbmcgPiAwO1xuICAgICAgICBpLS0sIHJlbWFpbmluZyAvPSAyNTZcbiAgICApIHtcbiAgICAgICAgYnl0ZXNbaV0gPSByZW1haW5pbmc7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgbmVnYXRlKGJ5dGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEludDY0KGJ5dGVzKTtcbn07XG5cbi8qKlxuICogQHJldHVybnMge251bWJlcn1cbiAqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuSW50NjQucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYnl0ZXMgPSB0aGlzLmJ5dGVzLnNsaWNlKDApO1xuICAgIHZhciBuZWdhdGl2ZSA9IGJ5dGVzWzBdICYgMTI4O1xuICAgIGlmIChuZWdhdGl2ZSkge1xuICAgICAgICBuZWdhdGUoYnl0ZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZUludChieXRlcy50b1N0cmluZygnaGV4JyksIDE2KSAqIChuZWdhdGl2ZSA/IC0xIDogMSk7XG59O1xuXG5JbnQ2NC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gU3RyaW5nKHRoaXMudmFsdWVPZigpKTtcbn07XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ5dGVzXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIG5lZ2F0ZShieXRlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSB7XG4gICAgICAgIGJ5dGVzW2ldIF49IDB4RkY7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSA3OyBpID4gLTE7IGktLSkge1xuICAgICAgICBieXRlc1tpXSsrO1xuICAgICAgICBpZiAoYnl0ZXNbaV0gIT09IDApIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufVxuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBJbnQ2NDogSW50NjRcbn07XG4iLCJ2YXIgcGFyc2VNZXNzYWdlID0gcmVxdWlyZSgnLi9wYXJzZS1tZXNzYWdlJykucGFyc2VNZXNzYWdlO1xuXG4vKipcbiAqXG4gKiBAcGFyYW0geyp9IHBhcnNlclxuICogQHBhcmFtIHtCdWZmZXJ9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7Kn0gc2hhcGVcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBwYXJzZUV2ZW50KHBhcnNlciwgbWVzc2FnZSwgc2hhcGUpIHtcbiAgICB2YXIgcGFyc2VkTWVzc2FnZSA9IHBhcnNlTWVzc2FnZShtZXNzYWdlKTtcblxuICAgIC8vIGNoZWNrIGlmIG1lc3NhZ2UgaXMgYW4gZXZlbnQgb3IgZXJyb3JcbiAgICB2YXIgbWVzc2FnZVR5cGUgPSBwYXJzZWRNZXNzYWdlLmhlYWRlcnNbJzptZXNzYWdlLXR5cGUnXTtcbiAgICBpZiAobWVzc2FnZVR5cGUpIHtcbiAgICAgICAgaWYgKG1lc3NhZ2VUeXBlLnZhbHVlID09PSAnZXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBwYXJzZUVycm9yKHBhcnNlZE1lc3NhZ2UpO1xuICAgICAgICB9IGVsc2UgaWYgKG1lc3NhZ2VUeXBlLnZhbHVlICE9PSAnZXZlbnQnKSB7XG4gICAgICAgICAgICAvLyBub3Qgc3VyZSBob3cgdG8gcGFyc2Ugbm9uLWV2ZW50cy9ub24tZXJyb3JzLCBpZ25vcmUgZm9yIG5vd1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGV0ZXJtaW5lIGV2ZW50IHR5cGVcbiAgICB2YXIgZXZlbnRUeXBlID0gcGFyc2VkTWVzc2FnZS5oZWFkZXJzWyc6ZXZlbnQtdHlwZSddO1xuICAgIC8vIGNoZWNrIHRoYXQgdGhlIGV2ZW50IHR5cGUgaXMgbW9kZWxlZFxuICAgIHZhciBldmVudE1vZGVsID0gc2hhcGUubWVtYmVyc1tldmVudFR5cGUudmFsdWVdO1xuICAgIGlmICghZXZlbnRNb2RlbCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIC8vIGNoZWNrIGlmIGFuIGV2ZW50IHBheWxvYWQgZXhpc3RzXG4gICAgdmFyIGV2ZW50UGF5bG9hZE1lbWJlck5hbWUgPSBldmVudE1vZGVsLmV2ZW50UGF5bG9hZE1lbWJlck5hbWU7XG4gICAgaWYgKGV2ZW50UGF5bG9hZE1lbWJlck5hbWUpIHtcbiAgICAgICAgdmFyIHBheWxvYWRTaGFwZSA9IGV2ZW50TW9kZWwubWVtYmVyc1tldmVudFBheWxvYWRNZW1iZXJOYW1lXTtcbiAgICAgICAgLy8gaWYgdGhlIHNoYXBlIGlzIGJpbmFyeSwgcmV0dXJuIHRoZSBieXRlIGFycmF5XG4gICAgICAgIGlmIChwYXlsb2FkU2hhcGUudHlwZSA9PT0gJ2JpbmFyeScpIHtcbiAgICAgICAgICAgIHJlc3VsdFtldmVudFBheWxvYWRNZW1iZXJOYW1lXSA9IHBhcnNlZE1lc3NhZ2UuYm9keTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtldmVudFBheWxvYWRNZW1iZXJOYW1lXSA9IHBhcnNlci5wYXJzZShwYXJzZWRNZXNzYWdlLmJvZHkudG9TdHJpbmcoKSwgcGF5bG9hZFNoYXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJlYWQgZXZlbnQgaGVhZGVyc1xuICAgIHZhciBldmVudEhlYWRlck5hbWVzID0gZXZlbnRNb2RlbC5ldmVudEhlYWRlck1lbWJlck5hbWVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRIZWFkZXJOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgbmFtZSA9IGV2ZW50SGVhZGVyTmFtZXNbaV07XG4gICAgICAgIGlmIChwYXJzZWRNZXNzYWdlLmhlYWRlcnNbbmFtZV0pIHtcbiAgICAgICAgICAgIC8vIHBhcnNlIHRoZSBoZWFkZXIhXG4gICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBldmVudE1vZGVsLm1lbWJlcnNbbmFtZV0udG9UeXBlKHBhcnNlZE1lc3NhZ2UuaGVhZGVyc1tuYW1lXS52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgb3V0cHV0ID0ge307XG4gICAgb3V0cHV0W2V2ZW50VHlwZS52YWx1ZV0gPSByZXN1bHQ7XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cblxuZnVuY3Rpb24gcGFyc2VFcnJvcihtZXNzYWdlKSB7XG4gICAgdmFyIGVycm9yQ29kZSA9IG1lc3NhZ2UuaGVhZGVyc1snOmVycm9yLWNvZGUnXTtcbiAgICB2YXIgZXJyb3JNZXNzYWdlID0gbWVzc2FnZS5oZWFkZXJzWyc6ZXJyb3ItbWVzc2FnZSddO1xuICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UudmFsdWUgfHwgZXJyb3JNZXNzYWdlKTtcbiAgICBlcnJvci5jb2RlID0gZXJyb3IubmFtZSA9IGVycm9yQ29kZS52YWx1ZSB8fCBlcnJvckNvZGU7XG4gICAgcmV0dXJuIGVycm9yO1xufVxuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBwYXJzZUV2ZW50OiBwYXJzZUV2ZW50XG59O1xuIiwidmFyIEludDY0ID0gcmVxdWlyZSgnLi9pbnQ2NCcpLkludDY0O1xuXG52YXIgc3BsaXRNZXNzYWdlID0gcmVxdWlyZSgnLi9zcGxpdC1tZXNzYWdlJykuc3BsaXRNZXNzYWdlO1xuXG52YXIgQk9PTEVBTl9UQUcgPSAnYm9vbGVhbic7XG52YXIgQllURV9UQUcgPSAnYnl0ZSc7XG52YXIgU0hPUlRfVEFHID0gJ3Nob3J0JztcbnZhciBJTlRfVEFHID0gJ2ludGVnZXInO1xudmFyIExPTkdfVEFHID0gJ2xvbmcnO1xudmFyIEJJTkFSWV9UQUcgPSAnYmluYXJ5JztcbnZhciBTVFJJTkdfVEFHID0gJ3N0cmluZyc7XG52YXIgVElNRVNUQU1QX1RBRyA9ICd0aW1lc3RhbXAnO1xudmFyIFVVSURfVEFHID0gJ3V1aWQnO1xuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBoZWFkZXJzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyhoZWFkZXJzKSB7XG4gICAgdmFyIG91dCA9IHt9O1xuICAgIHZhciBwb3NpdGlvbiA9IDA7XG4gICAgd2hpbGUgKHBvc2l0aW9uIDwgaGVhZGVycy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIG5hbWVMZW5ndGggPSBoZWFkZXJzLnJlYWRVSW50OChwb3NpdGlvbisrKTtcbiAgICAgICAgdmFyIG5hbWUgPSBoZWFkZXJzLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIG5hbWVMZW5ndGgpLnRvU3RyaW5nKCk7XG4gICAgICAgIHBvc2l0aW9uICs9IG5hbWVMZW5ndGg7XG4gICAgICAgIHN3aXRjaCAoaGVhZGVycy5yZWFkVUludDgocG9zaXRpb24rKykpIHtcbiAgICAgICAgICAgIGNhc2UgMCAvKiBib29sVHJ1ZSAqLzpcbiAgICAgICAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEJPT0xFQU5fVEFHLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDEgLyogYm9vbEZhbHNlICovOlxuICAgICAgICAgICAgICAgIG91dFtuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQk9PTEVBTl9UQUcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDIgLyogYnl0ZSAqLzpcbiAgICAgICAgICAgICAgICBvdXRbbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IEJZVEVfVEFHLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaGVhZGVycy5yZWFkSW50OChwb3NpdGlvbisrKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDMgLyogc2hvcnQgKi86XG4gICAgICAgICAgICAgICAgb3V0W25hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTSE9SVF9UQUcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBoZWFkZXJzLnJlYWRJbnQxNkJFKHBvc2l0aW9uKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNCAvKiBpbnRlZ2VyICovOlxuICAgICAgICAgICAgICAgIG91dFtuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogSU5UX1RBRyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGhlYWRlcnMucmVhZEludDMyQkUocG9zaXRpb24pXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA1IC8qIGxvbmcgKi86XG4gICAgICAgICAgICAgICAgb3V0W25hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBMT05HX1RBRyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ldyBJbnQ2NChoZWFkZXJzLnNsaWNlKHBvc2l0aW9uLCBwb3NpdGlvbiArIDgpKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gODtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgNiAvKiBieXRlQXJyYXkgKi86XG4gICAgICAgICAgICAgICAgdmFyIGJpbmFyeUxlbmd0aCA9IGhlYWRlcnMucmVhZFVJbnQxNkJFKHBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSAyO1xuICAgICAgICAgICAgICAgIG91dFtuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogQklOQVJZX1RBRyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGhlYWRlcnMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgYmluYXJ5TGVuZ3RoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gYmluYXJ5TGVuZ3RoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA3IC8qIHN0cmluZyAqLzpcbiAgICAgICAgICAgICAgICB2YXIgc3RyaW5nTGVuZ3RoID0gaGVhZGVycy5yZWFkVUludDE2QkUocG9zaXRpb24pO1xuICAgICAgICAgICAgICAgIHBvc2l0aW9uICs9IDI7XG4gICAgICAgICAgICAgICAgb3V0W25hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBTVFJJTkdfVEFHLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaGVhZGVycy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gKyBzdHJpbmdMZW5ndGhcbiAgICAgICAgICAgICAgICAgICAgKS50b1N0cmluZygpXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSBzdHJpbmdMZW5ndGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIDggLyogdGltZXN0YW1wICovOlxuICAgICAgICAgICAgICAgIG91dFtuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogVElNRVNUQU1QX1RBRyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEludDY0KGhlYWRlcnMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgOCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBwb3NpdGlvbiArPSA4O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSA5IC8qIHV1aWQgKi86XG4gICAgICAgICAgICAgICAgdmFyIHV1aWRDaGFycyA9IGhlYWRlcnMuc2xpY2UocG9zaXRpb24sIHBvc2l0aW9uICsgMTYpXG4gICAgICAgICAgICAgICAgICAgIC50b1N0cmluZygnaGV4Jyk7XG4gICAgICAgICAgICAgICAgcG9zaXRpb24gKz0gMTY7XG4gICAgICAgICAgICAgICAgb3V0W25hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBVVUlEX1RBRyxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHV1aWRDaGFycy5zdWJzdHIoMCwgOCkgKyAnLScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgdXVpZENoYXJzLnN1YnN0cig4LCA0KSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkQ2hhcnMuc3Vic3RyKDEyLCA0KSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkQ2hhcnMuc3Vic3RyKDE2LCA0KSArICctJyArXG4gICAgICAgICAgICAgICAgICAgICAgICB1dWlkQ2hhcnMuc3Vic3RyKDIwKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGhlYWRlciB0eXBlIHRhZycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWVzc2FnZShtZXNzYWdlKSB7XG4gICAgdmFyIHBhcnNlZCA9IHNwbGl0TWVzc2FnZShtZXNzYWdlKTtcbiAgICByZXR1cm4geyBoZWFkZXJzOiBwYXJzZUhlYWRlcnMocGFyc2VkLmhlYWRlcnMpLCBib2R5OiBwYXJzZWQuYm9keSB9O1xufVxuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBwYXJzZU1lc3NhZ2U6IHBhcnNlTWVzc2FnZVxufTtcbiIsInZhciB1dGlsID0gcmVxdWlyZSgnLi4vY29yZScpLnV0aWw7XG52YXIgdG9CdWZmZXIgPSB1dGlsLmJ1ZmZlci50b0J1ZmZlcjtcblxuLy8gQWxsIHByZWx1ZGUgY29tcG9uZW50cyBhcmUgdW5zaWduZWQsIDMyLWJpdCBpbnRlZ2Vyc1xudmFyIFBSRUxVREVfTUVNQkVSX0xFTkdUSCA9IDQ7XG4vLyBUaGUgcHJlbHVkZSBjb25zaXN0cyBvZiB0d28gY29tcG9uZW50c1xudmFyIFBSRUxVREVfTEVOR1RIID0gUFJFTFVERV9NRU1CRVJfTEVOR1RIICogMjtcbi8vIENoZWNrc3VtcyBhcmUgYWx3YXlzIENSQzMyIGhhc2hlcy5cbnZhciBDSEVDS1NVTV9MRU5HVEggPSA0O1xuLy8gTWVzc2FnZXMgbXVzdCBpbmNsdWRlIGEgZnVsbCBwcmVsdWRlLCBhIHByZWx1ZGUgY2hlY2tzdW0sIGFuZCBhIG1lc3NhZ2UgY2hlY2tzdW1cbnZhciBNSU5JTVVNX01FU1NBR0VfTEVOR1RIID0gUFJFTFVERV9MRU5HVEggKyBDSEVDS1NVTV9MRU5HVEggKiAyO1xuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICpcbiAqIEBwYXJhbSB7QnVmZmVyfSBtZXNzYWdlXG4gKi9cbmZ1bmN0aW9uIHNwbGl0TWVzc2FnZShtZXNzYWdlKSB7XG4gICAgaWYgKCF1dGlsLkJ1ZmZlci5pc0J1ZmZlcihtZXNzYWdlKSkgbWVzc2FnZSA9IHRvQnVmZmVyKG1lc3NhZ2UpO1xuXG4gICAgaWYgKG1lc3NhZ2UubGVuZ3RoIDwgTUlOSU1VTV9NRVNTQUdFX0xFTkdUSCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3ZpZGVkIG1lc3NhZ2UgdG9vIHNob3J0IHRvIGFjY29tbW9kYXRlIGV2ZW50IHN0cmVhbSBtZXNzYWdlIG92ZXJoZWFkJyk7XG4gICAgfVxuXG4gICAgaWYgKG1lc3NhZ2UubGVuZ3RoICE9PSBtZXNzYWdlLnJlYWRVSW50MzJCRSgwKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JlcG9ydGVkIG1lc3NhZ2UgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIHJlY2VpdmVkIG1lc3NhZ2UgbGVuZ3RoJyk7XG4gICAgfVxuXG4gICAgdmFyIGV4cGVjdGVkUHJlbHVkZUNoZWNrc3VtID0gbWVzc2FnZS5yZWFkVUludDMyQkUoUFJFTFVERV9MRU5HVEgpO1xuXG4gICAgaWYgKFxuICAgICAgICBleHBlY3RlZFByZWx1ZGVDaGVja3N1bSAhPT0gdXRpbC5jcnlwdG8uY3JjMzIoXG4gICAgICAgICAgICBtZXNzYWdlLnNsaWNlKDAsIFBSRUxVREVfTEVOR1RIKVxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdUaGUgcHJlbHVkZSBjaGVja3N1bSBzcGVjaWZpZWQgaW4gdGhlIG1lc3NhZ2UgKCcgK1xuICAgICAgICAgICAgZXhwZWN0ZWRQcmVsdWRlQ2hlY2tzdW0gK1xuICAgICAgICAgICAgJykgZG9lcyBub3QgbWF0Y2ggdGhlIGNhbGN1bGF0ZWQgQ1JDMzIgY2hlY2tzdW0uJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBleHBlY3RlZE1lc3NhZ2VDaGVja3N1bSA9IG1lc3NhZ2UucmVhZFVJbnQzMkJFKG1lc3NhZ2UubGVuZ3RoIC0gQ0hFQ0tTVU1fTEVOR1RIKTtcblxuICAgIGlmIChcbiAgICAgICAgZXhwZWN0ZWRNZXNzYWdlQ2hlY2tzdW0gIT09IHV0aWwuY3J5cHRvLmNyYzMyKFxuICAgICAgICAgICAgbWVzc2FnZS5zbGljZSgwLCBtZXNzYWdlLmxlbmd0aCAtIENIRUNLU1VNX0xFTkdUSClcbiAgICAgICAgKVxuICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnVGhlIG1lc3NhZ2UgY2hlY2tzdW0gZGlkIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgdmFsdWUgb2YgJyArXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWRNZXNzYWdlQ2hlY2tzdW1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgaGVhZGVyc1N0YXJ0ID0gUFJFTFVERV9MRU5HVEggKyBDSEVDS1NVTV9MRU5HVEg7XG4gICAgdmFyIGhlYWRlcnNFbmQgPSBoZWFkZXJzU3RhcnQgKyBtZXNzYWdlLnJlYWRVSW50MzJCRShQUkVMVURFX01FTUJFUl9MRU5HVEgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaGVhZGVyczogbWVzc2FnZS5zbGljZShoZWFkZXJzU3RhcnQsIGhlYWRlcnNFbmQpLFxuICAgICAgICBib2R5OiBtZXNzYWdlLnNsaWNlKGhlYWRlcnNFbmQsIG1lc3NhZ2UubGVuZ3RoIC0gQ0hFQ0tTVU1fTEVOR1RIKSxcbiAgICB9O1xufVxuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBzcGxpdE1lc3NhZ2U6IHNwbGl0TWVzc2FnZVxufTtcbiIsInZhciBBV1MgPSByZXF1aXJlKCcuLi9jb3JlJyk7XG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xucmVxdWlyZSgnLi4vaHR0cCcpO1xuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5BV1MuWEhSQ2xpZW50ID0gQVdTLnV0aWwuaW5oZXJpdCh7XG4gIGhhbmRsZVJlcXVlc3Q6IGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3QoaHR0cFJlcXVlc3QsIGh0dHBPcHRpb25zLCBjYWxsYmFjaywgZXJyQ2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGVuZHBvaW50ID0gaHR0cFJlcXVlc3QuZW5kcG9pbnQ7XG4gICAgdmFyIGVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgdmFyIGhyZWYgPSBlbmRwb2ludC5wcm90b2NvbCArICcvLycgKyBlbmRwb2ludC5ob3N0bmFtZTtcbiAgICBpZiAoZW5kcG9pbnQucG9ydCAhPT0gODAgJiYgZW5kcG9pbnQucG9ydCAhPT0gNDQzKSB7XG4gICAgICBocmVmICs9ICc6JyArIGVuZHBvaW50LnBvcnQ7XG4gICAgfVxuICAgIGhyZWYgKz0gaHR0cFJlcXVlc3QucGF0aDtcblxuICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKSwgaGVhZGVyc0VtaXR0ZWQgPSBmYWxzZTtcbiAgICBodHRwUmVxdWVzdC5zdHJlYW0gPSB4aHI7XG5cbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcigncmVhZHlzdGF0ZWNoYW5nZScsIGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDApIHJldHVybjsgLy8gMCBjb2RlIGlzIGludmFsaWRcbiAgICAgIH0gY2F0Y2ggKGUpIHsgcmV0dXJuOyB9XG5cbiAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPj0gdGhpcy5IRUFERVJTX1JFQ0VJVkVEICYmICFoZWFkZXJzRW1pdHRlZCkge1xuICAgICAgICBlbWl0dGVyLnN0YXR1c0NvZGUgPSB4aHIuc3RhdHVzO1xuICAgICAgICBlbWl0dGVyLmhlYWRlcnMgPSBzZWxmLnBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpO1xuICAgICAgICBlbWl0dGVyLmVtaXQoXG4gICAgICAgICAgJ2hlYWRlcnMnLFxuICAgICAgICAgIGVtaXR0ZXIuc3RhdHVzQ29kZSxcbiAgICAgICAgICBlbWl0dGVyLmhlYWRlcnMsXG4gICAgICAgICAgeGhyLnN0YXR1c1RleHRcbiAgICAgICAgKTtcbiAgICAgICAgaGVhZGVyc0VtaXR0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PT0gdGhpcy5ET05FKSB7XG4gICAgICAgIHNlbGYuZmluaXNoUmVxdWVzdCh4aHIsIGVtaXR0ZXIpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcbiAgICB4aHIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZnVuY3Rpb24gKGV2dCkge1xuICAgICAgZW1pdHRlci5lbWl0KCdzZW5kUHJvZ3Jlc3MnLCBldnQpO1xuICAgIH0pO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChldnQpIHtcbiAgICAgIGVtaXR0ZXIuZW1pdCgncmVjZWl2ZVByb2dyZXNzJywgZXZ0KTtcbiAgICB9LCBmYWxzZSk7XG4gICAgeGhyLmFkZEV2ZW50TGlzdGVuZXIoJ3RpbWVvdXQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBlcnJDYWxsYmFjayhBV1MudXRpbC5lcnJvcihuZXcgRXJyb3IoJ1RpbWVvdXQnKSwge2NvZGU6ICdUaW1lb3V0RXJyb3InfSkpO1xuICAgIH0sIGZhbHNlKTtcbiAgICB4aHIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmdW5jdGlvbiAoKSB7XG4gICAgICBlcnJDYWxsYmFjayhBV1MudXRpbC5lcnJvcihuZXcgRXJyb3IoJ05ldHdvcmsgRmFpbHVyZScpLCB7XG4gICAgICAgIGNvZGU6ICdOZXR3b3JraW5nRXJyb3InXG4gICAgICB9KSk7XG4gICAgfSwgZmFsc2UpO1xuICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGVyckNhbGxiYWNrKEFXUy51dGlsLmVycm9yKG5ldyBFcnJvcignUmVxdWVzdCBhYm9ydGVkJyksIHtcbiAgICAgICAgY29kZTogJ1JlcXVlc3RBYm9ydGVkRXJyb3InXG4gICAgICB9KSk7XG4gICAgfSwgZmFsc2UpO1xuXG4gICAgY2FsbGJhY2soZW1pdHRlcik7XG4gICAgeGhyLm9wZW4oaHR0cFJlcXVlc3QubWV0aG9kLCBocmVmLCBodHRwT3B0aW9ucy54aHJBc3luYyAhPT0gZmFsc2UpO1xuICAgIEFXUy51dGlsLmVhY2goaHR0cFJlcXVlc3QuaGVhZGVycywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmIChrZXkgIT09ICdDb250ZW50LUxlbmd0aCcgJiYga2V5ICE9PSAnVXNlci1BZ2VudCcgJiYga2V5ICE9PSAnSG9zdCcpIHtcbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoaHR0cE9wdGlvbnMudGltZW91dCAmJiBodHRwT3B0aW9ucy54aHJBc3luYyAhPT0gZmFsc2UpIHtcbiAgICAgIHhoci50aW1lb3V0ID0gaHR0cE9wdGlvbnMudGltZW91dDtcbiAgICB9XG5cbiAgICBpZiAoaHR0cE9wdGlvbnMueGhyV2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZTtcbiAgICB9XG4gICAgdHJ5IHsgeGhyLnJlc3BvbnNlVHlwZSA9ICdhcnJheWJ1ZmZlcic7IH0gY2F0Y2ggKGUpIHt9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKGh0dHBSZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgeGhyLnNlbmQoaHR0cFJlcXVlc3QuYm9keSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGh0dHBSZXF1ZXN0LmJvZHkgJiYgdHlwZW9mIGh0dHBSZXF1ZXN0LmJvZHkuYnVmZmVyID09PSAnb2JqZWN0Jykge1xuICAgICAgICB4aHIuc2VuZChodHRwUmVxdWVzdC5ib2R5LmJ1ZmZlcik7IC8vIHNlbmQgQXJyYXlCdWZmZXIgZGlyZWN0bHlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZW1pdHRlcjtcbiAgfSxcblxuICBwYXJzZUhlYWRlcnM6IGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgdmFyIGhlYWRlcnMgPSB7fTtcbiAgICBBV1MudXRpbC5hcnJheUVhY2gocmF3SGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLCBmdW5jdGlvbiAobGluZSkge1xuICAgICAgdmFyIGtleSA9IGxpbmUuc3BsaXQoJzonLCAxKVswXTtcbiAgICAgIHZhciB2YWx1ZSA9IGxpbmUuc3Vic3RyaW5nKGtleS5sZW5ndGggKyAyKTtcbiAgICAgIGlmIChrZXkubGVuZ3RoID4gMCkgaGVhZGVyc1trZXkudG9Mb3dlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gaGVhZGVycztcbiAgfSxcblxuICBmaW5pc2hSZXF1ZXN0OiBmdW5jdGlvbiBmaW5pc2hSZXF1ZXN0KHhociwgZW1pdHRlcikge1xuICAgIHZhciBidWZmZXI7XG4gICAgaWYgKHhoci5yZXNwb25zZVR5cGUgPT09ICdhcnJheWJ1ZmZlcicgJiYgeGhyLnJlc3BvbnNlKSB7XG4gICAgICB2YXIgYWIgPSB4aHIucmVzcG9uc2U7XG4gICAgICBidWZmZXIgPSBuZXcgQVdTLnV0aWwuQnVmZmVyKGFiLmJ5dGVMZW5ndGgpO1xuICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShhYik7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZmZlci5sZW5ndGg7ICsraSkge1xuICAgICAgICBidWZmZXJbaV0gPSB2aWV3W2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIWJ1ZmZlciAmJiB0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYnVmZmVyID0gbmV3IEFXUy51dGlsLkJ1ZmZlcih4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7fVxuXG4gICAgaWYgKGJ1ZmZlcikgZW1pdHRlci5lbWl0KCdkYXRhJywgYnVmZmVyKTtcbiAgICBlbWl0dGVyLmVtaXQoJ2VuZCcpO1xuICB9XG59KTtcblxuLyoqXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuQVdTLkh0dHBDbGllbnQucHJvdG90eXBlID0gQVdTLlhIUkNsaWVudC5wcm90b3R5cGU7XG5cbi8qKlxuICogQGFwaSBwcml2YXRlXG4gKi9cbkFXUy5IdHRwQ2xpZW50LnN0cmVhbXNBcGlWZXJzaW9uID0gMTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICAvL3Byb3ZpZGUgcmVhbHRpbWUgY2xvY2sgZm9yIHBlcmZvcm1hbmNlIG1lYXN1cmVtZW50XG4gIG5vdzogZnVuY3Rpb24gbm93KCkge1xuICAgIGlmICh0eXBlb2YgcGVyZm9ybWFuY2UgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbiAgICB9XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH1cbn07XG4iLCJ2YXIgQVdTID0gcmVxdWlyZSgnLi4vY29yZScpO1xudmFyIHJlc29sdmVSZWdpb25hbEVuZHBvaW50c0ZsYWcgPSByZXF1aXJlKCcuLi9jb25maWdfcmVnaW9uYWxfZW5kcG9pbnQnKTtcbnZhciBFTlZfUkVHSU9OQUxfRU5EUE9JTlRfRU5BQkxFRCA9ICdBV1NfU1RTX1JFR0lPTkFMX0VORFBPSU5UUyc7XG52YXIgQ09ORklHX1JFR0lPTkFMX0VORFBPSU5UX0VOQUJMRUQgPSAnc3RzX3JlZ2lvbmFsX2VuZHBvaW50cyc7XG5cbkFXUy51dGlsLnVwZGF0ZShBV1MuU1RTLnByb3RvdHlwZSwge1xuICAvKipcbiAgICogQG92ZXJsb2FkIGNyZWRlbnRpYWxzRnJvbShkYXRhLCBjcmVkZW50aWFscyA9IG51bGwpXG4gICAqICAgQ3JlYXRlcyBhIGNyZWRlbnRpYWxzIG9iamVjdCBmcm9tIFNUUyByZXNwb25zZSBkYXRhIGNvbnRhaW5pbmdcbiAgICogICBjcmVkZW50aWFscyBpbmZvcm1hdGlvbi4gVXNlZnVsIGZvciBxdWlja2x5IHNldHRpbmcgQVdTIGNyZWRlbnRpYWxzLlxuICAgKlxuICAgKiAgIEBub3RlIFRoaXMgaXMgYSBsb3ctbGV2ZWwgdXRpbGl0eSBmdW5jdGlvbi4gSWYgeW91IHdhbnQgdG8gbG9hZCB0ZW1wb3JhcnlcbiAgICogICAgIGNyZWRlbnRpYWxzIGludG8geW91ciBwcm9jZXNzIGZvciBzdWJzZXF1ZW50IHJlcXVlc3RzIHRvIEFXUyByZXNvdXJjZXMsXG4gICAqICAgICB5b3Ugc2hvdWxkIHVzZSB7QVdTLlRlbXBvcmFyeUNyZWRlbnRpYWxzfSBpbnN0ZWFkLlxuICAgKiAgIEBwYXJhbSBkYXRhIFttYXBdIGRhdGEgcmV0cmlldmVkIGZyb20gYSBjYWxsIHRvIHtnZXRGZWRlcmF0ZWRUb2tlbn0sXG4gICAqICAgICB7Z2V0U2Vzc2lvblRva2VufSwge2Fzc3VtZVJvbGV9LCBvciB7YXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eX0uXG4gICAqICAgQHBhcmFtIGNyZWRlbnRpYWxzIFtBV1MuQ3JlZGVudGlhbHNdIGFuIG9wdGlvbmFsIGNyZWRlbnRpYWxzIG9iamVjdCB0b1xuICAgKiAgICAgZmlsbCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9iamVjdC4gVXNlZnVsIHdoZW4gbW9kaWZ5aW5nIGFuXG4gICAqICAgICBleGlzdGluZyBjcmVkZW50aWFscyBvYmplY3QgZnJvbSBhIHJlZnJlc2ggY2FsbC5cbiAgICogICBAcmV0dXJuIFtBV1MuVGVtcG9yYXJ5Q3JlZGVudGlhbHNdIHRoZSBzZXQgb2YgdGVtcG9yYXJ5IGNyZWRlbnRpYWxzXG4gICAqICAgICBsb2FkZWQgZnJvbSBhIHJhdyBTVFMgb3BlcmF0aW9uIHJlc3BvbnNlLlxuICAgKiAgIEBleGFtcGxlIFVzaW5nIGNyZWRlbnRpYWxzRnJvbSB0byBsb2FkIGdsb2JhbCBBV1MgY3JlZGVudGlhbHNcbiAgICogICAgIHZhciBzdHMgPSBuZXcgQVdTLlNUUygpO1xuICAgKiAgICAgc3RzLmdldFNlc3Npb25Ub2tlbihmdW5jdGlvbiAoZXJyLCBkYXRhKSB7XG4gICAqICAgICAgIGlmIChlcnIpIGNvbnNvbGUubG9nKFwiRXJyb3IgZ2V0dGluZyBjcmVkZW50aWFsc1wiKTtcbiAgICogICAgICAgZWxzZSB7XG4gICAqICAgICAgICAgQVdTLmNvbmZpZy5jcmVkZW50aWFscyA9IHN0cy5jcmVkZW50aWFsc0Zyb20oZGF0YSk7XG4gICAqICAgICAgIH1cbiAgICogICAgIH0pO1xuICAgKiAgIEBzZWUgQVdTLlRlbXBvcmFyeUNyZWRlbnRpYWxzXG4gICAqL1xuICBjcmVkZW50aWFsc0Zyb206IGZ1bmN0aW9uIGNyZWRlbnRpYWxzRnJvbShkYXRhLCBjcmVkZW50aWFscykge1xuICAgIGlmICghZGF0YSkgcmV0dXJuIG51bGw7XG4gICAgaWYgKCFjcmVkZW50aWFscykgY3JlZGVudGlhbHMgPSBuZXcgQVdTLlRlbXBvcmFyeUNyZWRlbnRpYWxzKCk7XG4gICAgY3JlZGVudGlhbHMuZXhwaXJlZCA9IGZhbHNlO1xuICAgIGNyZWRlbnRpYWxzLmFjY2Vzc0tleUlkID0gZGF0YS5DcmVkZW50aWFscy5BY2Nlc3NLZXlJZDtcbiAgICBjcmVkZW50aWFscy5zZWNyZXRBY2Nlc3NLZXkgPSBkYXRhLkNyZWRlbnRpYWxzLlNlY3JldEFjY2Vzc0tleTtcbiAgICBjcmVkZW50aWFscy5zZXNzaW9uVG9rZW4gPSBkYXRhLkNyZWRlbnRpYWxzLlNlc3Npb25Ub2tlbjtcbiAgICBjcmVkZW50aWFscy5leHBpcmVUaW1lID0gZGF0YS5DcmVkZW50aWFscy5FeHBpcmF0aW9uO1xuICAgIHJldHVybiBjcmVkZW50aWFscztcbiAgfSxcblxuICBhc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5OiBmdW5jdGlvbiBhc3N1bWVSb2xlV2l0aFdlYklkZW50aXR5KHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5tYWtlVW5hdXRoZW50aWNhdGVkUmVxdWVzdCgnYXNzdW1lUm9sZVdpdGhXZWJJZGVudGl0eScsIHBhcmFtcywgY2FsbGJhY2spO1xuICB9LFxuXG4gIGFzc3VtZVJvbGVXaXRoU0FNTDogZnVuY3Rpb24gYXNzdW1lUm9sZVdpdGhTQU1MKHBhcmFtcywgY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5tYWtlVW5hdXRoZW50aWNhdGVkUmVxdWVzdCgnYXNzdW1lUm9sZVdpdGhTQU1MJywgcGFyYW1zLCBjYWxsYmFjayk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEBhcGkgcHJpdmF0ZVxuICAgKi9cbiAgc2V0dXBSZXF1ZXN0TGlzdGVuZXJzOiBmdW5jdGlvbiBzZXR1cFJlcXVlc3RMaXN0ZW5lcnMocmVxdWVzdCkge1xuICAgIHJlcXVlc3QuYWRkTGlzdGVuZXIoJ3ZhbGlkYXRlJywgdGhpcy5vcHRJblJlZ2lvbmFsRW5kcG9pbnQsIHRydWUpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBAYXBpIHByaXZhdGVcbiAgICovXG4gIG9wdEluUmVnaW9uYWxFbmRwb2ludDogZnVuY3Rpb24gb3B0SW5SZWdpb25hbEVuZHBvaW50KHJlcSkge1xuICAgIHZhciBzZXJ2aWNlID0gcmVxLnNlcnZpY2U7XG4gICAgdmFyIGNvbmZpZyA9IHNlcnZpY2UuY29uZmlnO1xuICAgIGNvbmZpZy5zdHNSZWdpb25hbEVuZHBvaW50cyA9IHJlc29sdmVSZWdpb25hbEVuZHBvaW50c0ZsYWcoc2VydmljZS5fb3JpZ2luYWxDb25maWcsIHtcbiAgICAgIGVudjogRU5WX1JFR0lPTkFMX0VORFBPSU5UX0VOQUJMRUQsXG4gICAgICBzaGFyZWRDb25maWc6IENPTkZJR19SRUdJT05BTF9FTkRQT0lOVF9FTkFCTEVELFxuICAgICAgY2xpZW50Q29uZmlnOiAnc3RzUmVnaW9uYWxFbmRwb2ludHMnXG4gICAgfSk7XG4gICAgaWYgKFxuICAgICAgY29uZmlnLnN0c1JlZ2lvbmFsRW5kcG9pbnRzID09PSAncmVnaW9uYWwnICYmXG4gICAgICBzZXJ2aWNlLmlzR2xvYmFsRW5kcG9pbnRcbiAgICApIHtcbiAgICAgIC8vY2xpZW50IHdpbGwgdGhyb3cgaWYgcmVnaW9uIGlzIG5vdCBzdXBwbGllZDsgcmVxdWVzdCB3aWxsIGJlIHNpZ25lZCB3aXRoIHNwZWNpZmllZCByZWdpb25cbiAgICAgIGlmICghY29uZmlnLnJlZ2lvbikge1xuICAgICAgICB0aHJvdyBBV1MudXRpbC5lcnJvcihuZXcgRXJyb3IoKSxcbiAgICAgICAgICB7Y29kZTogJ0NvbmZpZ0Vycm9yJywgbWVzc2FnZTogJ01pc3NpbmcgcmVnaW9uIGluIGNvbmZpZyd9KTtcbiAgICAgIH1cbiAgICAgIHZhciBpbnNlcnRQb2ludCA9IGNvbmZpZy5lbmRwb2ludC5pbmRleE9mKCcuYW1hem9uYXdzLmNvbScpO1xuICAgICAgdmFyIHJlZ2lvbmFsRW5kcG9pbnQgPSBjb25maWcuZW5kcG9pbnQuc3Vic3RyaW5nKDAsIGluc2VydFBvaW50KSArXG4gICAgICAgICcuJyArIGNvbmZpZy5yZWdpb24gKyBjb25maWcuZW5kcG9pbnQuc3Vic3RyaW5nKGluc2VydFBvaW50KTtcbiAgICAgIHJlcS5odHRwUmVxdWVzdC51cGRhdGVFbmRwb2ludChyZWdpb25hbEVuZHBvaW50KTtcbiAgICAgIHJlcS5odHRwUmVxdWVzdC5yZWdpb24gPSBjb25maWcucmVnaW9uO1xuICAgIH1cbiAgfVxuXG59KTtcbiIsInZhciB1dGlsID0gcmVxdWlyZSgnLi4vdXRpbCcpO1xudmFyIFNoYXBlID0gcmVxdWlyZSgnLi4vbW9kZWwvc2hhcGUnKTtcblxuZnVuY3Rpb24gRG9tWG1sUGFyc2VyKCkgeyB9XG5cbkRvbVhtbFBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih4bWwsIHNoYXBlKSB7XG4gIGlmICh4bWwucmVwbGFjZSgvXlxccysvLCAnJykgPT09ICcnKSByZXR1cm4ge307XG5cbiAgdmFyIHJlc3VsdCwgZXJyb3I7XG4gIHRyeSB7XG4gICAgaWYgKHdpbmRvdy5ET01QYXJzZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBwYXJzZXIgPSBuZXcgRE9NUGFyc2VyKCk7XG4gICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZUZyb21TdHJpbmcoeG1sLCAndGV4dC94bWwnKTtcbiAgICAgIH0gY2F0Y2ggKHN5bnRheEVycm9yKSB7XG4gICAgICAgIHRocm93IHV0aWwuZXJyb3IobmV3IEVycm9yKCdQYXJzZSBlcnJvciBpbiBkb2N1bWVudCcpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRXJyb3I6IHN5bnRheEVycm9yLFxuICAgICAgICAgICAgY29kZTogJ1hNTFBhcnNlckVycm9yJyxcbiAgICAgICAgICAgIHJldHJ5YWJsZTogdHJ1ZVxuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LmRvY3VtZW50RWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyB1dGlsLmVycm9yKG5ldyBFcnJvcignQ2Fubm90IHBhcnNlIGVtcHR5IGRvY3VtZW50LicpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdYTUxQYXJzZXJFcnJvcicsXG4gICAgICAgICAgICByZXRyeWFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGlzRXJyb3IgPSByZXN1bHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3BhcnNlcmVycm9yJylbMF07XG4gICAgICBpZiAoaXNFcnJvciAmJiAoaXNFcnJvci5wYXJlbnROb2RlID09PSByZXN1bHQgfHxcbiAgICAgICAgICBpc0Vycm9yLnBhcmVudE5vZGUubm9kZU5hbWUgPT09ICdib2R5JyB8fFxuICAgICAgICAgIGlzRXJyb3IucGFyZW50Tm9kZS5wYXJlbnROb2RlID09PSByZXN1bHQgfHxcbiAgICAgICAgICBpc0Vycm9yLnBhcmVudE5vZGUucGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gJ2JvZHknKSkge1xuICAgICAgICB2YXIgZXJyb3JFbGVtZW50ID0gaXNFcnJvci5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0gfHwgaXNFcnJvcjtcbiAgICAgICAgdGhyb3cgdXRpbC5lcnJvcihuZXcgRXJyb3IoZXJyb3JFbGVtZW50LnRleHRDb250ZW50IHx8ICdQYXJzZXIgZXJyb3IgaW4gZG9jdW1lbnQnKSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb2RlOiAnWE1MUGFyc2VyRXJyb3InLFxuICAgICAgICAgICAgcmV0cnlhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh3aW5kb3cuQWN0aXZlWE9iamVjdCkge1xuICAgICAgcmVzdWx0ID0gbmV3IHdpbmRvdy5BY3RpdmVYT2JqZWN0KCdNaWNyb3NvZnQuWE1MRE9NJyk7XG4gICAgICByZXN1bHQuYXN5bmMgPSBmYWxzZTtcblxuICAgICAgaWYgKCFyZXN1bHQubG9hZFhNTCh4bWwpKSB7XG4gICAgICAgIHRocm93IHV0aWwuZXJyb3IobmV3IEVycm9yKCdQYXJzZSBlcnJvciBpbiBkb2N1bWVudCcpLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNvZGU6ICdYTUxQYXJzZXJFcnJvcicsXG4gICAgICAgICAgICByZXRyeWFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbG9hZCBYTUwgcGFyc2VyJyk7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3IgPSBlO1xuICB9XG5cbiAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZG9jdW1lbnRFbGVtZW50ICYmICFlcnJvcikge1xuICAgIHZhciBkYXRhID0gcGFyc2VYbWwocmVzdWx0LmRvY3VtZW50RWxlbWVudCwgc2hhcGUpO1xuICAgIHZhciBtZXRhZGF0YSA9IGdldEVsZW1lbnRCeVRhZ05hbWUocmVzdWx0LmRvY3VtZW50RWxlbWVudCwgJ1Jlc3BvbnNlTWV0YWRhdGEnKTtcbiAgICBpZiAobWV0YWRhdGEpIHtcbiAgICAgIGRhdGEuUmVzcG9uc2VNZXRhZGF0YSA9IHBhcnNlWG1sKG1ldGFkYXRhLCB7fSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhO1xuICB9IGVsc2UgaWYgKGVycm9yKSB7XG4gICAgdGhyb3cgdXRpbC5lcnJvcihlcnJvciB8fCBuZXcgRXJyb3IoKSwge2NvZGU6ICdYTUxQYXJzZXJFcnJvcicsIHJldHJ5YWJsZTogdHJ1ZX0pO1xuICB9IGVsc2UgeyAvLyBlbXB0eSB4bWwgZG9jdW1lbnRcbiAgICByZXR1cm4ge307XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRCeVRhZ05hbWUoeG1sLCB0YWcpIHtcbiAgdmFyIGVsZW1lbnRzID0geG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG4gIGZvciAodmFyIGkgPSAwLCBpTGVuID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgaUxlbjsgaSsrKSB7XG4gICAgaWYgKGVsZW1lbnRzW2ldLnBhcmVudE5vZGUgPT09IHhtbCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRzW2ldO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVhtbCh4bWwsIHNoYXBlKSB7XG4gIGlmICghc2hhcGUpIHNoYXBlID0ge307XG4gIHN3aXRjaCAoc2hhcGUudHlwZSkge1xuICAgIGNhc2UgJ3N0cnVjdHVyZSc6IHJldHVybiBwYXJzZVN0cnVjdHVyZSh4bWwsIHNoYXBlKTtcbiAgICBjYXNlICdtYXAnOiByZXR1cm4gcGFyc2VNYXAoeG1sLCBzaGFwZSk7XG4gICAgY2FzZSAnbGlzdCc6IHJldHVybiBwYXJzZUxpc3QoeG1sLCBzaGFwZSk7XG4gICAgY2FzZSB1bmRlZmluZWQ6IGNhc2UgbnVsbDogcmV0dXJuIHBhcnNlVW5rbm93bih4bWwpO1xuICAgIGRlZmF1bHQ6IHJldHVybiBwYXJzZVNjYWxhcih4bWwsIHNoYXBlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVN0cnVjdHVyZSh4bWwsIHNoYXBlKSB7XG4gIHZhciBkYXRhID0ge307XG4gIGlmICh4bWwgPT09IG51bGwpIHJldHVybiBkYXRhO1xuXG4gIHV0aWwuZWFjaChzaGFwZS5tZW1iZXJzLCBmdW5jdGlvbihtZW1iZXJOYW1lLCBtZW1iZXJTaGFwZSkge1xuICAgIGlmIChtZW1iZXJTaGFwZS5pc1htbEF0dHJpYnV0ZSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4bWwuYXR0cmlidXRlcywgbWVtYmVyU2hhcGUubmFtZSkpIHtcbiAgICAgICAgdmFyIHZhbHVlID0geG1sLmF0dHJpYnV0ZXNbbWVtYmVyU2hhcGUubmFtZV0udmFsdWU7XG4gICAgICAgIGRhdGFbbWVtYmVyTmFtZV0gPSBwYXJzZVhtbCh7dGV4dENvbnRlbnQ6IHZhbHVlfSwgbWVtYmVyU2hhcGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgeG1sQ2hpbGQgPSBtZW1iZXJTaGFwZS5mbGF0dGVuZWQgPyB4bWwgOlxuICAgICAgICBnZXRFbGVtZW50QnlUYWdOYW1lKHhtbCwgbWVtYmVyU2hhcGUubmFtZSk7XG4gICAgICBpZiAoeG1sQ2hpbGQpIHtcbiAgICAgICAgZGF0YVttZW1iZXJOYW1lXSA9IHBhcnNlWG1sKHhtbENoaWxkLCBtZW1iZXJTaGFwZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAhbWVtYmVyU2hhcGUuZmxhdHRlbmVkICYmXG4gICAgICAgIG1lbWJlclNoYXBlLnR5cGUgPT09ICdsaXN0JyAmJlxuICAgICAgICAhc2hhcGUuYXBpLnhtbE5vRGVmYXVsdExpc3RzKSB7XG4gICAgICAgIGRhdGFbbWVtYmVyTmFtZV0gPSBtZW1iZXJTaGFwZS5kZWZhdWx0VmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNYXAoeG1sLCBzaGFwZSkge1xuICB2YXIgZGF0YSA9IHt9O1xuICB2YXIgeG1sS2V5ID0gc2hhcGUua2V5Lm5hbWUgfHwgJ2tleSc7XG4gIHZhciB4bWxWYWx1ZSA9IHNoYXBlLnZhbHVlLm5hbWUgfHwgJ3ZhbHVlJztcbiAgdmFyIHRhZ05hbWUgPSBzaGFwZS5mbGF0dGVuZWQgPyBzaGFwZS5uYW1lIDogJ2VudHJ5JztcblxuICB2YXIgY2hpbGQgPSB4bWwuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGlmIChjaGlsZC5ub2RlTmFtZSA9PT0gdGFnTmFtZSkge1xuICAgICAgdmFyIGtleSA9IGdldEVsZW1lbnRCeVRhZ05hbWUoY2hpbGQsIHhtbEtleSkudGV4dENvbnRlbnQ7XG4gICAgICB2YXIgdmFsdWUgPSBnZXRFbGVtZW50QnlUYWdOYW1lKGNoaWxkLCB4bWxWYWx1ZSk7XG4gICAgICBkYXRhW2tleV0gPSBwYXJzZVhtbCh2YWx1ZSwgc2hhcGUudmFsdWUpO1xuICAgIH1cbiAgICBjaGlsZCA9IGNoaWxkLm5leHRFbGVtZW50U2libGluZztcbiAgfVxuICByZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaXN0KHhtbCwgc2hhcGUpIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgdmFyIHRhZ05hbWUgPSBzaGFwZS5mbGF0dGVuZWQgPyBzaGFwZS5uYW1lIDogKHNoYXBlLm1lbWJlci5uYW1lIHx8ICdtZW1iZXInKTtcblxuICB2YXIgY2hpbGQgPSB4bWwuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGlmIChjaGlsZC5ub2RlTmFtZSA9PT0gdGFnTmFtZSkge1xuICAgICAgZGF0YS5wdXNoKHBhcnNlWG1sKGNoaWxkLCBzaGFwZS5tZW1iZXIpKTtcbiAgICB9XG4gICAgY2hpbGQgPSBjaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlU2NhbGFyKHhtbCwgc2hhcGUpIHtcbiAgaWYgKHhtbC5nZXRBdHRyaWJ1dGUpIHtcbiAgICB2YXIgZW5jb2RpbmcgPSB4bWwuZ2V0QXR0cmlidXRlKCdlbmNvZGluZycpO1xuICAgIGlmIChlbmNvZGluZyA9PT0gJ2Jhc2U2NCcpIHtcbiAgICAgIHNoYXBlID0gbmV3IFNoYXBlLmNyZWF0ZSh7dHlwZTogZW5jb2Rpbmd9KTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGV4dCA9IHhtbC50ZXh0Q29udGVudDtcbiAgaWYgKHRleHQgPT09ICcnKSB0ZXh0ID0gbnVsbDtcbiAgaWYgKHR5cGVvZiBzaGFwZS50b1R5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gc2hhcGUudG9UeXBlKHRleHQpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5rbm93bih4bWwpIHtcbiAgaWYgKHhtbCA9PT0gdW5kZWZpbmVkIHx8IHhtbCA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gIC8vIGVtcHR5IG9iamVjdFxuICBpZiAoIXhtbC5maXJzdEVsZW1lbnRDaGlsZCkge1xuICAgIGlmICh4bWwucGFyZW50Tm9kZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4ge307XG4gICAgaWYgKHhtbC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAgIGVsc2UgcmV0dXJuIHhtbC50ZXh0Q29udGVudDtcbiAgfVxuXG4gIC8vIG9iamVjdCwgcGFyc2UgYXMgc3RydWN0dXJlXG4gIHZhciBzaGFwZSA9IHt0eXBlOiAnc3RydWN0dXJlJywgbWVtYmVyczoge319O1xuICB2YXIgY2hpbGQgPSB4bWwuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gIHdoaWxlIChjaGlsZCkge1xuICAgIHZhciB0YWcgPSBjaGlsZC5ub2RlTmFtZTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNoYXBlLm1lbWJlcnMsIHRhZykpIHtcbiAgICAgIC8vIG11bHRpcGxlIHRhZ3Mgb2YgdGhlIHNhbWUgbmFtZSBtYWtlcyBpdCBhIGxpc3RcbiAgICAgIHNoYXBlLm1lbWJlcnNbdGFnXS50eXBlID0gJ2xpc3QnO1xuICAgIH0gZWxzZSB7XG4gICAgICBzaGFwZS5tZW1iZXJzW3RhZ10gPSB7bmFtZTogdGFnfTtcbiAgICB9XG4gICAgY2hpbGQgPSBjaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gIH1cbiAgcmV0dXJuIHBhcnNlU3RydWN0dXJlKHhtbCwgc2hhcGUpO1xufVxuXG4vKipcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IERvbVhtbFBhcnNlcjtcbiIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIHBsYWNlSG9sZGVyc0NvdW50IChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG4gIC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcbiAgLy8gcmVwcmVzZW50IG9uZSBieXRlXG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuICAvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG4gIHJldHVybiBiNjRbbGVuIC0gMl0gPT09ICc9JyA/IDIgOiBiNjRbbGVuIC0gMV0gPT09ICc9JyA/IDEgOiAwXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICAvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbiAgcmV0dXJuIGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0NvdW50KGI2NClcbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBwbGFjZUhvbGRlcnMgPSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG5cbiAgYXJyID0gbmV3IEFycihsZW4gKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gbGVuIC0gNCA6IGxlblxuXG4gIHZhciBMID0gMFxuXG4gIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICsgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIG91dHB1dCA9ICcnXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAyXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9PSdcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgKHVpbnQ4W2xlbiAtIDFdKVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDEwXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz0nXG4gIH1cblxuICBwYXJ0cy5wdXNoKG91dHB1dClcblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cbiIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG4iLCJleHBvcnRzLnJlYWQgPSBmdW5jdGlvbiAoYnVmZmVyLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbVxuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgbSA9IGUgJiAoKDEgPDwgKC1uQml0cykpIC0gMSlcbiAgZSA+Pj0gKC1uQml0cylcbiAgbkJpdHMgKz0gbUxlblxuICBmb3IgKDsgbkJpdHMgPiAwOyBtID0gbSAqIDI1NiArIGJ1ZmZlcltvZmZzZXQgKyBpXSwgaSArPSBkLCBuQml0cyAtPSA4KSB7fVxuXG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhc1xuICB9IGVsc2UgaWYgKGUgPT09IGVNYXgpIHtcbiAgICByZXR1cm4gbSA/IE5hTiA6ICgocyA/IC0xIDogMSkgKiBJbmZpbml0eSlcbiAgfSBlbHNlIHtcbiAgICBtID0gbSArIE1hdGgucG93KDIsIG1MZW4pXG4gICAgZSA9IGUgLSBlQmlhc1xuICB9XG4gIHJldHVybiAocyA/IC0xIDogMSkgKiBtICogTWF0aC5wb3coMiwgZSAtIG1MZW4pXG59XG5cbmV4cG9ydHMud3JpdGUgPSBmdW5jdGlvbiAoYnVmZmVyLCB2YWx1ZSwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG0sIGNcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gZSArIGVCaWFzXG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIE1hdGgucG93KDIsIGVCaWFzIC0gMSkgKiBNYXRoLnBvdygyLCBtTGVuKVxuICAgICAgZSA9IDBcbiAgICB9XG4gIH1cblxuICBmb3IgKDsgbUxlbiA+PSA4OyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBtICYgMHhmZiwgaSArPSBkLCBtIC89IDI1NiwgbUxlbiAtPSA4KSB7fVxuXG4gIGUgPSAoZSA8PCBtTGVuKSB8IG1cbiAgZUxlbiArPSBtTGVuXG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW29mZnNldCArIGldID0gZSAmIDB4ZmYsIGkgKz0gZCwgZSAvPSAyNTYsIGVMZW4gLT0gOCkge31cblxuICBidWZmZXJbb2Zmc2V0ICsgaSAtIGRdIHw9IHMgKiAxMjhcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5mdW5jdGlvbiBFdmVudEVtaXR0ZXIoKSB7XG4gIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cyB8fCB7fTtcbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gdGhpcy5fbWF4TGlzdGVuZXJzIHx8IHVuZGVmaW5lZDtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xuXG4vLyBCYWNrd2FyZHMtY29tcGF0IHdpdGggbm9kZSAwLjEwLnhcbkV2ZW50RW1pdHRlci5FdmVudEVtaXR0ZXIgPSBFdmVudEVtaXR0ZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX2V2ZW50cyA9IHVuZGVmaW5lZDtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX21heExpc3RlbmVycyA9IHVuZGVmaW5lZDtcblxuLy8gQnkgZGVmYXVsdCBFdmVudEVtaXR0ZXJzIHdpbGwgcHJpbnQgYSB3YXJuaW5nIGlmIG1vcmUgdGhhbiAxMCBsaXN0ZW5lcnMgYXJlXG4vLyBhZGRlZCB0byBpdC4gVGhpcyBpcyBhIHVzZWZ1bCBkZWZhdWx0IHdoaWNoIGhlbHBzIGZpbmRpbmcgbWVtb3J5IGxlYWtzLlxuRXZlbnRFbWl0dGVyLmRlZmF1bHRNYXhMaXN0ZW5lcnMgPSAxMDtcblxuLy8gT2J2aW91c2x5IG5vdCBhbGwgRW1pdHRlcnMgc2hvdWxkIGJlIGxpbWl0ZWQgdG8gMTAuIFRoaXMgZnVuY3Rpb24gYWxsb3dzXG4vLyB0aGF0IHRvIGJlIGluY3JlYXNlZC4gU2V0IHRvIHplcm8gZm9yIHVubGltaXRlZC5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzID0gZnVuY3Rpb24obikge1xuICBpZiAoIWlzTnVtYmVyKG4pIHx8IG4gPCAwIHx8IGlzTmFOKG4pKVxuICAgIHRocm93IFR5cGVFcnJvcignbiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJyk7XG4gIHRoaXMuX21heExpc3RlbmVycyA9IG47XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24odHlwZSkge1xuICB2YXIgZXIsIGhhbmRsZXIsIGxlbiwgYXJncywgaSwgbGlzdGVuZXJzO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzKVxuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuXG4gIC8vIElmIHRoZXJlIGlzIG5vICdlcnJvcicgZXZlbnQgbGlzdGVuZXIgdGhlbiB0aHJvdy5cbiAgaWYgKHR5cGUgPT09ICdlcnJvcicpIHtcbiAgICBpZiAoIXRoaXMuX2V2ZW50cy5lcnJvciB8fFxuICAgICAgICAoaXNPYmplY3QodGhpcy5fZXZlbnRzLmVycm9yKSAmJiAhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpIHtcbiAgICAgIGVyID0gYXJndW1lbnRzWzFdO1xuICAgICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgdGhyb3cgZXI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ1VuY2F1Z2h0LCB1bnNwZWNpZmllZCBcImVycm9yXCIgZXZlbnQuICgnICsgZXIgKyAnKScpO1xuICAgICAgICBlcnIuY29udGV4dCA9IGVyO1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlciA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcblxuICBpZiAoaXNVbmRlZmluZWQoaGFuZGxlcikpXG4gICAgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGhhbmRsZXIpKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAvLyBmYXN0IGNhc2VzXG4gICAgICBjYXNlIDE6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIGhhbmRsZXIuY2FsbCh0aGlzLCBhcmd1bWVudHNbMV0pO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgaGFuZGxlci5jYWxsKHRoaXMsIGFyZ3VtZW50c1sxXSwgYXJndW1lbnRzWzJdKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBzbG93ZXJcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgICBoYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc09iamVjdChoYW5kbGVyKSkge1xuICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIGxpc3RlbmVycyA9IGhhbmRsZXIuc2xpY2UoKTtcbiAgICBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoO1xuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKylcbiAgICAgIGxpc3RlbmVyc1tpXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5hZGRMaXN0ZW5lciA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBtO1xuXG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICB0aGlzLl9ldmVudHMgPSB7fTtcblxuICAvLyBUbyBhdm9pZCByZWN1cnNpb24gaW4gdGhlIGNhc2UgdGhhdCB0eXBlID09PSBcIm5ld0xpc3RlbmVyXCIhIEJlZm9yZVxuICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gIGlmICh0aGlzLl9ldmVudHMubmV3TGlzdGVuZXIpXG4gICAgdGhpcy5lbWl0KCduZXdMaXN0ZW5lcicsIHR5cGUsXG4gICAgICAgICAgICAgIGlzRnVuY3Rpb24obGlzdGVuZXIubGlzdGVuZXIpID9cbiAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgOiBsaXN0ZW5lcik7XG5cbiAgaWYgKCF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgLy8gT3B0aW1pemUgdGhlIGNhc2Ugb2Ygb25lIGxpc3RlbmVyLiBEb24ndCBuZWVkIHRoZSBleHRyYSBhcnJheSBvYmplY3QuXG4gICAgdGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXI7XG4gIGVsc2UgaWYgKGlzT2JqZWN0KHRoaXMuX2V2ZW50c1t0eXBlXSkpXG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBnb3QgYW4gYXJyYXksIGp1c3QgYXBwZW5kLlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5wdXNoKGxpc3RlbmVyKTtcbiAgZWxzZVxuICAgIC8vIEFkZGluZyB0aGUgc2Vjb25kIGVsZW1lbnQsIG5lZWQgdG8gY2hhbmdlIHRvIGFycmF5LlxuICAgIHRoaXMuX2V2ZW50c1t0eXBlXSA9IFt0aGlzLl9ldmVudHNbdHlwZV0sIGxpc3RlbmVyXTtcblxuICAvLyBDaGVjayBmb3IgbGlzdGVuZXIgbGVha1xuICBpZiAoaXNPYmplY3QodGhpcy5fZXZlbnRzW3R5cGVdKSAmJiAhdGhpcy5fZXZlbnRzW3R5cGVdLndhcm5lZCkge1xuICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5fbWF4TGlzdGVuZXJzKSkge1xuICAgICAgbSA9IHRoaXMuX21heExpc3RlbmVycztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IEV2ZW50RW1pdHRlci5kZWZhdWx0TWF4TGlzdGVuZXJzO1xuICAgIH1cblxuICAgIGlmIChtICYmIG0gPiAwICYmIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGggPiBtKSB7XG4gICAgICB0aGlzLl9ldmVudHNbdHlwZV0ud2FybmVkID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJyhub2RlKSB3YXJuaW5nOiBwb3NzaWJsZSBFdmVudEVtaXR0ZXIgbWVtb3J5ICcgK1xuICAgICAgICAgICAgICAgICAgICAnbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ1VzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LicsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50c1t0eXBlXS5sZW5ndGgpO1xuICAgICAgaWYgKHR5cGVvZiBjb25zb2xlLnRyYWNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIG5vdCBzdXBwb3J0ZWQgaW4gSUUgMTBcbiAgICAgICAgY29uc29sZS50cmFjZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub25jZSA9IGZ1bmN0aW9uKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGlmICghaXNGdW5jdGlvbihsaXN0ZW5lcikpXG4gICAgdGhyb3cgVHlwZUVycm9yKCdsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblxuICB2YXIgZmlyZWQgPSBmYWxzZTtcblxuICBmdW5jdGlvbiBnKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXIodHlwZSwgZyk7XG5cbiAgICBpZiAoIWZpcmVkKSB7XG4gICAgICBmaXJlZCA9IHRydWU7XG4gICAgICBsaXN0ZW5lci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfVxuXG4gIGcubGlzdGVuZXIgPSBsaXN0ZW5lcjtcbiAgdGhpcy5vbih0eXBlLCBnKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIGVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZmYgdGhlIGxpc3RlbmVyIHdhcyByZW1vdmVkXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID0gZnVuY3Rpb24odHlwZSwgbGlzdGVuZXIpIHtcbiAgdmFyIGxpc3QsIHBvc2l0aW9uLCBsZW5ndGgsIGk7XG5cbiAgaWYgKCFpc0Z1bmN0aW9uKGxpc3RlbmVyKSlcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2xpc3RlbmVyIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuXG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0dXJuIHRoaXM7XG5cbiAgbGlzdCA9IHRoaXMuX2V2ZW50c1t0eXBlXTtcbiAgbGVuZ3RoID0gbGlzdC5sZW5ndGg7XG4gIHBvc2l0aW9uID0gLTE7XG5cbiAgaWYgKGxpc3QgPT09IGxpc3RlbmVyIHx8XG4gICAgICAoaXNGdW5jdGlvbihsaXN0Lmxpc3RlbmVyKSAmJiBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIGlmICh0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdGVuZXIpO1xuXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QobGlzdCkpIHtcbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSA+IDA7KSB7XG4gICAgICBpZiAobGlzdFtpXSA9PT0gbGlzdGVuZXIgfHxcbiAgICAgICAgICAobGlzdFtpXS5saXN0ZW5lciAmJiBsaXN0W2ldLmxpc3RlbmVyID09PSBsaXN0ZW5lcikpIHtcbiAgICAgICAgcG9zaXRpb24gPSBpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocG9zaXRpb24gPCAwKVxuICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAobGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICAgIGxpc3QubGVuZ3RoID0gMDtcbiAgICAgIGRlbGV0ZSB0aGlzLl9ldmVudHNbdHlwZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpc3Quc3BsaWNlKHBvc2l0aW9uLCAxKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKVxuICAgICAgdGhpcy5lbWl0KCdyZW1vdmVMaXN0ZW5lcicsIHR5cGUsIGxpc3RlbmVyKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciBrZXksIGxpc3RlbmVycztcblxuICBpZiAoIXRoaXMuX2V2ZW50cylcbiAgICByZXR1cm4gdGhpcztcblxuICAvLyBub3QgbGlzdGVuaW5nIGZvciByZW1vdmVMaXN0ZW5lciwgbm8gbmVlZCB0byBlbWl0XG4gIGlmICghdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApXG4gICAgICB0aGlzLl9ldmVudHMgPSB7fTtcbiAgICBlbHNlIGlmICh0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gZW1pdCByZW1vdmVMaXN0ZW5lciBmb3IgYWxsIGxpc3RlbmVycyBvbiBhbGwgZXZlbnRzXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChrZXkgaW4gdGhpcy5fZXZlbnRzKSB7XG4gICAgICBpZiAoa2V5ID09PSAncmVtb3ZlTGlzdGVuZXInKSBjb250aW51ZTtcbiAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGtleSk7XG4gICAgfVxuICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKCdyZW1vdmVMaXN0ZW5lcicpO1xuICAgIHRoaXMuX2V2ZW50cyA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgbGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGxpc3RlbmVycykpIHtcbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gIH0gZWxzZSBpZiAobGlzdGVuZXJzKSB7XG4gICAgLy8gTElGTyBvcmRlclxuICAgIHdoaWxlIChsaXN0ZW5lcnMubGVuZ3RoKVxuICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbbGlzdGVuZXJzLmxlbmd0aCAtIDFdKTtcbiAgfVxuICBkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lcnMgPSBmdW5jdGlvbih0eXBlKSB7XG4gIHZhciByZXQ7XG4gIGlmICghdGhpcy5fZXZlbnRzIHx8ICF0aGlzLl9ldmVudHNbdHlwZV0pXG4gICAgcmV0ID0gW107XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odGhpcy5fZXZlbnRzW3R5cGVdKSlcbiAgICByZXQgPSBbdGhpcy5fZXZlbnRzW3R5cGVdXTtcbiAgZWxzZVxuICAgIHJldCA9IHRoaXMuX2V2ZW50c1t0eXBlXS5zbGljZSgpO1xuICByZXR1cm4gcmV0O1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24odHlwZSkge1xuICBpZiAodGhpcy5fZXZlbnRzKSB7XG4gICAgdmFyIGV2bGlzdGVuZXIgPSB0aGlzLl9ldmVudHNbdHlwZV07XG5cbiAgICBpZiAoaXNGdW5jdGlvbihldmxpc3RlbmVyKSlcbiAgICAgIHJldHVybiAxO1xuICAgIGVsc2UgaWYgKGV2bGlzdGVuZXIpXG4gICAgICByZXR1cm4gZXZsaXN0ZW5lci5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIDA7XG59O1xuXG5FdmVudEVtaXR0ZXIubGlzdGVuZXJDb3VudCA9IGZ1bmN0aW9uKGVtaXR0ZXIsIHR5cGUpIHtcbiAgcmV0dXJuIGVtaXR0ZXIubGlzdGVuZXJDb3VudCh0eXBlKTtcbn07XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc051bWJlcihhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdudW1iZXInO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdChhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdvYmplY3QnICYmIGFyZyAhPT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IHZvaWQgMDtcbn1cbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxuLy8gSWYgb2JqLmhhc093blByb3BlcnR5IGhhcyBiZWVuIG92ZXJyaWRkZW4sIHRoZW4gY2FsbGluZ1xuLy8gb2JqLmhhc093blByb3BlcnR5KHByb3ApIHdpbGwgYnJlYWsuXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9pc3N1ZXMvMTcwN1xuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihxcywgc2VwLCBlcSwgb3B0aW9ucykge1xuICBzZXAgPSBzZXAgfHwgJyYnO1xuICBlcSA9IGVxIHx8ICc9JztcbiAgdmFyIG9iaiA9IHt9O1xuXG4gIGlmICh0eXBlb2YgcXMgIT09ICdzdHJpbmcnIHx8IHFzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICB2YXIgcmVnZXhwID0gL1xcKy9nO1xuICBxcyA9IHFzLnNwbGl0KHNlcCk7XG5cbiAgdmFyIG1heEtleXMgPSAxMDAwO1xuICBpZiAob3B0aW9ucyAmJiB0eXBlb2Ygb3B0aW9ucy5tYXhLZXlzID09PSAnbnVtYmVyJykge1xuICAgIG1heEtleXMgPSBvcHRpb25zLm1heEtleXM7XG4gIH1cblxuICB2YXIgbGVuID0gcXMubGVuZ3RoO1xuICAvLyBtYXhLZXlzIDw9IDAgbWVhbnMgdGhhdCB3ZSBzaG91bGQgbm90IGxpbWl0IGtleXMgY291bnRcbiAgaWYgKG1heEtleXMgPiAwICYmIGxlbiA+IG1heEtleXMpIHtcbiAgICBsZW4gPSBtYXhLZXlzO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciB4ID0gcXNbaV0ucmVwbGFjZShyZWdleHAsICclMjAnKSxcbiAgICAgICAgaWR4ID0geC5pbmRleE9mKGVxKSxcbiAgICAgICAga3N0ciwgdnN0ciwgaywgdjtcblxuICAgIGlmIChpZHggPj0gMCkge1xuICAgICAga3N0ciA9IHguc3Vic3RyKDAsIGlkeCk7XG4gICAgICB2c3RyID0geC5zdWJzdHIoaWR4ICsgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGtzdHIgPSB4O1xuICAgICAgdnN0ciA9ICcnO1xuICAgIH1cblxuICAgIGsgPSBkZWNvZGVVUklDb21wb25lbnQoa3N0cik7XG4gICAgdiA9IGRlY29kZVVSSUNvbXBvbmVudCh2c3RyKTtcblxuICAgIGlmICghaGFzT3duUHJvcGVydHkob2JqLCBrKSkge1xuICAgICAgb2JqW2tdID0gdjtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkob2JqW2tdKSkge1xuICAgICAgb2JqW2tdLnB1c2godik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9ialtrXSA9IFtvYmpba10sIHZdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuIiwiLy8gQ29weXJpZ2h0IEpveWVudCwgSW5jLiBhbmQgb3RoZXIgTm9kZSBjb250cmlidXRvcnMuXG4vL1xuLy8gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGFcbi8vIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGVcbi8vIFwiU29mdHdhcmVcIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZ1xuLy8gd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLFxuLy8gZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdFxuLy8gcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlXG4vLyBmb2xsb3dpbmcgY29uZGl0aW9uczpcbi8vXG4vLyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZFxuLy8gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4vL1xuLy8gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTU1xuLy8gT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRlxuLy8gTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTlxuLy8gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sXG4vLyBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1Jcbi8vIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEVcbi8vIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHN0cmluZ2lmeVByaW1pdGl2ZSA9IGZ1bmN0aW9uKHYpIHtcbiAgc3dpdGNoICh0eXBlb2Ygdikge1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICByZXR1cm4gdjtcblxuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgcmV0dXJuIHYgPyAndHJ1ZScgOiAnZmFsc2UnO1xuXG4gICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIHJldHVybiBpc0Zpbml0ZSh2KSA/IHYgOiAnJztcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24ob2JqLCBzZXAsIGVxLCBuYW1lKSB7XG4gIHNlcCA9IHNlcCB8fCAnJic7XG4gIGVxID0gZXEgfHwgJz0nO1xuICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgb2JqID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uKGspIHtcbiAgICAgIHZhciBrcyA9IGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdpZnlQcmltaXRpdmUoaykpICsgZXE7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmpba10pKSB7XG4gICAgICAgIHJldHVybiBvYmpba10ubWFwKGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICByZXR1cm4ga3MgKyBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKHYpKTtcbiAgICAgICAgfSkuam9pbihzZXApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGtzICsgZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShvYmpba10pKTtcbiAgICAgIH1cbiAgICB9KS5qb2luKHNlcCk7XG5cbiAgfVxuXG4gIGlmICghbmFtZSkgcmV0dXJuICcnO1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ2lmeVByaW1pdGl2ZShuYW1lKSkgKyBlcSArXG4gICAgICAgICBlbmNvZGVVUklDb21wb25lbnQoc3RyaW5naWZ5UHJpbWl0aXZlKG9iaikpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5kZWNvZGUgPSBleHBvcnRzLnBhcnNlID0gcmVxdWlyZSgnLi9kZWNvZGUnKTtcbmV4cG9ydHMuZW5jb2RlID0gZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2VuY29kZScpO1xuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9wdW55Y29kZSB2MS4zLjIgYnkgQG1hdGhpYXMgKi9cbjsoZnVuY3Rpb24ocm9vdCkge1xuXG5cdC8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZXMgKi9cblx0dmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJlxuXHRcdCFleHBvcnRzLm5vZGVUeXBlICYmIGV4cG9ydHM7XG5cdHZhciBmcmVlTW9kdWxlID0gdHlwZW9mIG1vZHVsZSA9PSAnb2JqZWN0JyAmJiBtb2R1bGUgJiZcblx0XHQhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblx0dmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbDtcblx0aWYgKFxuXHRcdGZyZWVHbG9iYWwuZ2xvYmFsID09PSBmcmVlR2xvYmFsIHx8XG5cdFx0ZnJlZUdsb2JhbC53aW5kb3cgPT09IGZyZWVHbG9iYWwgfHxcblx0XHRmcmVlR2xvYmFsLnNlbGYgPT09IGZyZWVHbG9iYWxcblx0KSB7XG5cdFx0cm9vdCA9IGZyZWVHbG9iYWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGBwdW55Y29kZWAgb2JqZWN0LlxuXHQgKiBAbmFtZSBwdW55Y29kZVxuXHQgKiBAdHlwZSBPYmplY3Rcblx0ICovXG5cdHZhciBwdW55Y29kZSxcblxuXHQvKiogSGlnaGVzdCBwb3NpdGl2ZSBzaWduZWQgMzItYml0IGZsb2F0IHZhbHVlICovXG5cdG1heEludCA9IDIxNDc0ODM2NDcsIC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuXHQvKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5cdGJhc2UgPSAzNixcblx0dE1pbiA9IDEsXG5cdHRNYXggPSAyNixcblx0c2tldyA9IDM4LFxuXHRkYW1wID0gNzAwLFxuXHRpbml0aWFsQmlhcyA9IDcyLFxuXHRpbml0aWFsTiA9IDEyOCwgLy8gMHg4MFxuXHRkZWxpbWl0ZXIgPSAnLScsIC8vICdcXHgyRCdcblxuXHQvKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuXHRyZWdleFB1bnljb2RlID0gL154bi0tLyxcblx0cmVnZXhOb25BU0NJSSA9IC9bXlxceDIwLVxceDdFXS8sIC8vIHVucHJpbnRhYmxlIEFTQ0lJIGNoYXJzICsgbm9uLUFTQ0lJIGNoYXJzXG5cdHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2csIC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuXHQvKiogRXJyb3IgbWVzc2FnZXMgKi9cblx0ZXJyb3JzID0ge1xuXHRcdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdFx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0XHQnaW52YWxpZC1pbnB1dCc6ICdJbnZhbGlkIGlucHV0J1xuXHR9LFxuXG5cdC8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cblx0YmFzZU1pbnVzVE1pbiA9IGJhc2UgLSB0TWluLFxuXHRmbG9vciA9IE1hdGguZmxvb3IsXG5cdHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGUsXG5cblx0LyoqIFRlbXBvcmFyeSB2YXJpYWJsZSAqL1xuXHRrZXk7XG5cblx0LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cblx0LyoqXG5cdCAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cblx0ICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuXHQgKi9cblx0ZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHRcdHRocm93IFJhbmdlRXJyb3IoZXJyb3JzW3R5cGVdKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIGdlbmVyaWMgYEFycmF5I21hcGAgdXRpbGl0eSBmdW5jdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5IGFycmF5XG5cdCAqIGl0ZW0uXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cblx0ICovXG5cdGZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0XHR2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXHRcdHZhciByZXN1bHQgPSBbXTtcblx0XHR3aGlsZSAobGVuZ3RoLS0pIHtcblx0XHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHQvKipcblx0ICogQSBzaW1wbGUgYEFycmF5I21hcGAtbGlrZSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBkb21haW4gbmFtZSBzdHJpbmdzIG9yIGVtYWlsXG5cdCAqIGFkZHJlc3Nlcy5cblx0ICogQHByaXZhdGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGRvbWFpbiBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcy5cblx0ICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG5cdCAqIGNoYXJhY3Rlci5cblx0ICogQHJldHVybnMge0FycmF5fSBBIG5ldyBzdHJpbmcgb2YgY2hhcmFjdGVycyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2tcblx0ICogZnVuY3Rpb24uXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXBEb21haW4oc3RyaW5nLCBmbikge1xuXHRcdHZhciBwYXJ0cyA9IHN0cmluZy5zcGxpdCgnQCcpO1xuXHRcdHZhciByZXN1bHQgPSAnJztcblx0XHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gSW4gZW1haWwgYWRkcmVzc2VzLCBvbmx5IHRoZSBkb21haW4gbmFtZSBzaG91bGQgYmUgcHVueWNvZGVkLiBMZWF2ZVxuXHRcdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdFx0c3RyaW5nID0gcGFydHNbMV07XG5cdFx0fVxuXHRcdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0XHRzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShyZWdleFNlcGFyYXRvcnMsICdcXHgyRScpO1xuXHRcdHZhciBsYWJlbHMgPSBzdHJpbmcuc3BsaXQoJy4nKTtcblx0XHR2YXIgZW5jb2RlZCA9IG1hcChsYWJlbHMsIGZuKS5qb2luKCcuJyk7XG5cdFx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuXHQgKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG5cdCAqIHRoaXMgZnVuY3Rpb24gd2lsbCBjb252ZXJ0IGEgcGFpciBvZiBzdXJyb2dhdGUgaGFsdmVzIChlYWNoIG9mIHdoaWNoXG5cdCAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuXHQgKiBtYXRjaGluZyBVVEYtMTYuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZW5jb2RlYFxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcblx0ICogQG5hbWUgZGVjb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cblx0ICovXG5cdGZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdFx0dmFyIG91dHB1dCA9IFtdLFxuXHRcdCAgICBjb3VudGVyID0gMCxcblx0XHQgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcblx0XHQgICAgdmFsdWUsXG5cdFx0ICAgIGV4dHJhO1xuXHRcdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHR2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0XHRcdC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuXHRcdFx0XHRleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGUgbmV4dFxuXHRcdFx0XHRcdC8vIGNvZGUgdW5pdCBpcyB0aGUgaGlnaCBzdXJyb2dhdGUgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0XHRjb3VudGVyLS07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgc3RyaW5nIGJhc2VkIG9uIGFuIGFycmF5IG9mIG51bWVyaWMgY29kZSBwb2ludHMuXG5cdCAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuXHQgKiBAbmFtZSBlbmNvZGVcblx0ICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuXHQgKi9cblx0ZnVuY3Rpb24gdWNzMmVuY29kZShhcnJheSkge1xuXHRcdHJldHVybiBtYXAoYXJyYXksIGZ1bmN0aW9uKHZhbHVlKSB7XG5cdFx0XHR2YXIgb3V0cHV0ID0gJyc7XG5cdFx0XHRpZiAodmFsdWUgPiAweEZGRkYpIHtcblx0XHRcdFx0dmFsdWUgLT0gMHgxMDAwMDtcblx0XHRcdFx0b3V0cHV0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZSh2YWx1ZSA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMCk7XG5cdFx0XHRcdHZhbHVlID0gMHhEQzAwIHwgdmFsdWUgJiAweDNGRjtcblx0XHRcdH1cblx0XHRcdG91dHB1dCArPSBzdHJpbmdGcm9tQ2hhckNvZGUodmFsdWUpO1xuXHRcdFx0cmV0dXJuIG91dHB1dDtcblx0XHR9KS5qb2luKCcnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG5cdCAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuXHQgKiBAcHJpdmF0ZVxuXHQgKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuXHQgKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGluIHRoZSByYW5nZSBgMGAgdG8gYGJhc2UgLSAxYCwgb3IgYGJhc2VgIGlmXG5cdCAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuXHQgKi9cblx0ZnVuY3Rpb24gYmFzaWNUb0RpZ2l0KGNvZGVQb2ludCkge1xuXHRcdGlmIChjb2RlUG9pbnQgLSA0OCA8IDEwKSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gMjI7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA2NSA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gNjU7XG5cdFx0fVxuXHRcdGlmIChjb2RlUG9pbnQgLSA5NyA8IDI2KSB7XG5cdFx0XHRyZXR1cm4gY29kZVBvaW50IC0gOTc7XG5cdFx0fVxuXHRcdHJldHVybiBiYXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cblx0ICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG5cdCAqIEBwcml2YXRlXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG5cdCAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG5cdCAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaXMgYGRpZ2l0YCwgd2hpY2ggbmVlZHMgdG8gYmUgaW4gdGhlIHJhbmdlXG5cdCAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuXHQgKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuXHQgKiBpZiBgZmxhZ2AgaXMgbm9uLXplcm8gYW5kIGBkaWdpdGAgaGFzIG5vIHVwcGVyY2FzZSBmb3JtLlxuXHQgKi9cblx0ZnVuY3Rpb24gZGlnaXRUb0Jhc2ljKGRpZ2l0LCBmbGFnKSB7XG5cdFx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0XHQvLyAyNi4uMzUgbWFwIHRvIEFTQ0lJIDAuLjlcblx0XHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG5cdCAqIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIGFkYXB0KGRlbHRhLCBudW1Qb2ludHMsIGZpcnN0VGltZSkge1xuXHRcdHZhciBrID0gMDtcblx0XHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRcdGRlbHRhICs9IGZsb29yKGRlbHRhIC8gbnVtUG9pbnRzKTtcblx0XHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuXHQgKiBzeW1ib2xzLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMuXG5cdCAqL1xuXHRmdW5jdGlvbiBkZWNvZGUoaW5wdXQpIHtcblx0XHQvLyBEb24ndCB1c2UgVUNTLTJcblx0XHR2YXIgb3V0cHV0ID0gW10sXG5cdFx0ICAgIGlucHV0TGVuZ3RoID0gaW5wdXQubGVuZ3RoLFxuXHRcdCAgICBvdXQsXG5cdFx0ICAgIGkgPSAwLFxuXHRcdCAgICBuID0gaW5pdGlhbE4sXG5cdFx0ICAgIGJpYXMgPSBpbml0aWFsQmlhcyxcblx0XHQgICAgYmFzaWMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIGluZGV4LFxuXHRcdCAgICBvbGRpLFxuXHRcdCAgICB3LFxuXHRcdCAgICBrLFxuXHRcdCAgICBkaWdpdCxcblx0XHQgICAgdCxcblx0XHQgICAgLyoqIENhY2hlZCBjYWxjdWxhdGlvbiByZXN1bHRzICovXG5cdFx0ICAgIGJhc2VNaW51c1Q7XG5cblx0XHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0XHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHRcdC8vIHRoZSBmaXJzdCBiYXNpYyBjb2RlIHBvaW50cyB0byB0aGUgb3V0cHV0LlxuXG5cdFx0YmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRcdGlmIChiYXNpYyA8IDApIHtcblx0XHRcdGJhc2ljID0gMDtcblx0XHR9XG5cblx0XHRmb3IgKGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0XHRpZiAoaW5wdXQuY2hhckNvZGVBdChqKSA+PSAweDgwKSB7XG5cdFx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHRcdH1cblx0XHRcdG91dHB1dC5wdXNoKGlucHV0LmNoYXJDb2RlQXQoaikpO1xuXHRcdH1cblxuXHRcdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0XHQvLyBwb2ludHMgd2VyZSBjb3BpZWQ7IHN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgb3RoZXJ3aXNlLlxuXG5cdFx0Zm9yIChpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdFx0Ly8gYGluZGV4YCBpcyB0aGUgaW5kZXggb2YgdGhlIG5leHQgY2hhcmFjdGVyIHRvIGJlIGNvbnN1bWVkLlxuXHRcdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHRcdC8vIGlmIHdlIGluY3JlYXNlIGBpYCBhcyB3ZSBnbywgdGhlbiBzdWJ0cmFjdCBvZmYgaXRzIHN0YXJ0aW5nXG5cdFx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdFx0Zm9yIChvbGRpID0gaSwgdyA9IDEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXG5cdFx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cblx0XHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHRcdH1cblxuXHRcdFx0b3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdFx0Ly8gYGlgIHdhcyBzdXBwb3NlZCB0byB3cmFwIGFyb3VuZCBmcm9tIGBvdXRgIHRvIGAwYCxcblx0XHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdFx0aSAlPSBvdXQ7XG5cblx0XHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXRcblx0XHRcdG91dHB1dC5zcGxpY2UoaSsrLCAwLCBuKTtcblxuXHRcdH1cblxuXHRcdHJldHVybiB1Y3MyZW5jb2RlKG91dHB1dCk7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcblx0ICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuXHQgKi9cblx0ZnVuY3Rpb24gZW5jb2RlKGlucHV0KSB7XG5cdFx0dmFyIG4sXG5cdFx0ICAgIGRlbHRhLFxuXHRcdCAgICBoYW5kbGVkQ1BDb3VudCxcblx0XHQgICAgYmFzaWNMZW5ndGgsXG5cdFx0ICAgIGJpYXMsXG5cdFx0ICAgIGosXG5cdFx0ICAgIG0sXG5cdFx0ICAgIHEsXG5cdFx0ICAgIGssXG5cdFx0ICAgIHQsXG5cdFx0ICAgIGN1cnJlbnRWYWx1ZSxcblx0XHQgICAgb3V0cHV0ID0gW10sXG5cdFx0ICAgIC8qKiBgaW5wdXRMZW5ndGhgIHdpbGwgaG9sZCB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIGBpbnB1dGAuICovXG5cdFx0ICAgIGlucHV0TGVuZ3RoLFxuXHRcdCAgICAvKiogQ2FjaGVkIGNhbGN1bGF0aW9uIHJlc3VsdHMgKi9cblx0XHQgICAgaGFuZGxlZENQQ291bnRQbHVzT25lLFxuXHRcdCAgICBiYXNlTWludXNULFxuXHRcdCAgICBxTWludXNUO1xuXG5cdFx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gVW5pY29kZVxuXHRcdGlucHV0ID0gdWNzMmRlY29kZShpbnB1dCk7XG5cblx0XHQvLyBDYWNoZSB0aGUgbGVuZ3RoXG5cdFx0aW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0XHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZVxuXHRcdG4gPSBpbml0aWFsTjtcblx0XHRkZWx0YSA9IDA7XG5cdFx0YmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdFx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50c1xuXHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRjdXJyZW50VmFsdWUgPSBpbnB1dFtqXTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShjdXJyZW50VmFsdWUpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblxuXHRcdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHRcdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHRcdC8vIEZpbmlzaCB0aGUgYmFzaWMgc3RyaW5nIC0gaWYgaXQgaXMgbm90IGVtcHR5IC0gd2l0aCBhIGRlbGltaXRlclxuXHRcdGlmIChiYXNpY0xlbmd0aCkge1xuXHRcdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0XHR9XG5cblx0XHQvLyBNYWluIGVuY29kaW5nIGxvb3A6XG5cdFx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdFx0Ly8gbGFyZ2VyIG9uZTpcblx0XHRcdGZvciAobSA9IG1heEludCwgaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdFx0Ly8gYnV0IGd1YXJkIGFnYWluc3Qgb3ZlcmZsb3dcblx0XHRcdGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRcdGlmIChtIC0gbiA+IGZsb29yKChtYXhJbnQgLSBkZWx0YSkgLyBoYW5kbGVkQ1BDb3VudFBsdXNPbmUpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWx0YSArPSAobSAtIG4pICogaGFuZGxlZENQQ291bnRQbHVzT25lO1xuXHRcdFx0biA9IG07XG5cblx0XHRcdGZvciAoaiA9IDA7IGogPCBpbnB1dExlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGN1cnJlbnRWYWx1ZSA9IGlucHV0W2pdO1xuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPCBuICYmICsrZGVsdGEgPiBtYXhJbnQpIHtcblx0XHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyXG5cdFx0XHRcdFx0Zm9yIChxID0gZGVsdGEsIGsgPSBiYXNlOyAvKiBubyBjb25kaXRpb24gKi87IGsgKz0gYmFzZSkge1xuXHRcdFx0XHRcdFx0dCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0XHRiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyhxLCAwKSkpO1xuXHRcdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHRcdCsraGFuZGxlZENQQ291bnQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0KytkZWx0YTtcblx0XHRcdCsrbjtcblxuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0LmpvaW4oJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3Ncblx0ICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuXHQgKiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCBvbiBhIHN0cmluZyB0aGF0IGhhcyBhbHJlYWR5IGJlZW5cblx0ICogY29udmVydGVkIHRvIFVuaWNvZGUuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIFB1bnljb2RlZCBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvXG5cdCAqIGNvbnZlcnQgdG8gVW5pY29kZS5cblx0ICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG5cdCAqIHN0cmluZy5cblx0ICovXG5cdGZ1bmN0aW9uIHRvVW5pY29kZShpbnB1dCkge1xuXHRcdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdFx0cmV0dXJuIHJlZ2V4UHVueWNvZGUudGVzdChzdHJpbmcpXG5cdFx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cblx0ICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG5cdCAqIGkuZS4gaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgd2l0aCBhIGRvbWFpbiB0aGF0J3MgYWxyZWFkeSBpblxuXHQgKiBBU0NJSS5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0byBjb252ZXJ0LCBhcyBhXG5cdCAqIFVuaWNvZGUgc3RyaW5nLlxuXHQgKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG5cdCAqIGVtYWlsIGFkZHJlc3MuXG5cdCAqL1xuXHRmdW5jdGlvbiB0b0FTQ0lJKGlucHV0KSB7XG5cdFx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0XHRyZXR1cm4gcmVnZXhOb25BU0NJSS50ZXN0KHN0cmluZylcblx0XHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0XHQ6IHN0cmluZztcblx0XHR9KTtcblx0fVxuXG5cdC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG5cdC8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cblx0cHVueWNvZGUgPSB7XG5cdFx0LyoqXG5cdFx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHRcdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHRcdCAqIEB0eXBlIFN0cmluZ1xuXHRcdCAqL1xuXHRcdCd2ZXJzaW9uJzogJzEuMy4yJyxcblx0XHQvKipcblx0XHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHRcdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdFx0ICogQHNlZSA8aHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmc+XG5cdFx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdFx0ICogQHR5cGUgT2JqZWN0XG5cdFx0ICovXG5cdFx0J3VjczInOiB7XG5cdFx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHRcdCdlbmNvZGUnOiB1Y3MyZW5jb2RlXG5cdFx0fSxcblx0XHQnZGVjb2RlJzogZGVjb2RlLFxuXHRcdCdlbmNvZGUnOiBlbmNvZGUsXG5cdFx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHRcdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcblx0fTtcblxuXHQvKiogRXhwb3NlIGBwdW55Y29kZWAgKi9cblx0Ly8gU29tZSBBTUQgYnVpbGQgb3B0aW1pemVycywgbGlrZSByLmpzLCBjaGVjayBmb3Igc3BlY2lmaWMgY29uZGl0aW9uIHBhdHRlcm5zXG5cdC8vIGxpa2UgdGhlIGZvbGxvd2luZzpcblx0aWYgKFxuXHRcdHR5cGVvZiBkZWZpbmUgPT0gJ2Z1bmN0aW9uJyAmJlxuXHRcdHR5cGVvZiBkZWZpbmUuYW1kID09ICdvYmplY3QnICYmXG5cdFx0ZGVmaW5lLmFtZFxuXHQpIHtcblx0XHRkZWZpbmUoJ3B1bnljb2RlJywgZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gcHVueWNvZGU7XG5cdFx0fSk7XG5cdH0gZWxzZSBpZiAoZnJlZUV4cG9ydHMgJiYgZnJlZU1vZHVsZSkge1xuXHRcdGlmIChtb2R1bGUuZXhwb3J0cyA9PSBmcmVlRXhwb3J0cykgeyAvLyBpbiBOb2RlLmpzIG9yIFJpbmdvSlMgdjAuOC4wK1xuXHRcdFx0ZnJlZU1vZHVsZS5leHBvcnRzID0gcHVueWNvZGU7XG5cdFx0fSBlbHNlIHsgLy8gaW4gTmFyd2hhbCBvciBSaW5nb0pTIHYwLjcuMC1cblx0XHRcdGZvciAoa2V5IGluIHB1bnljb2RlKSB7XG5cdFx0XHRcdHB1bnljb2RlLmhhc093blByb3BlcnR5KGtleSkgJiYgKGZyZWVFeHBvcnRzW2tleV0gPSBwdW55Y29kZVtrZXldKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSB7IC8vIGluIFJoaW5vIG9yIGEgd2ViIGJyb3dzZXJcblx0XHRyb290LnB1bnljb2RlID0gcHVueWNvZGU7XG5cdH1cblxufSh0aGlzKSk7XG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxudmFyIHB1bnljb2RlID0gcmVxdWlyZSgncHVueWNvZGUnKTtcblxuZXhwb3J0cy5wYXJzZSA9IHVybFBhcnNlO1xuZXhwb3J0cy5yZXNvbHZlID0gdXJsUmVzb2x2ZTtcbmV4cG9ydHMucmVzb2x2ZU9iamVjdCA9IHVybFJlc29sdmVPYmplY3Q7XG5leHBvcnRzLmZvcm1hdCA9IHVybEZvcm1hdDtcblxuZXhwb3J0cy5VcmwgPSBVcmw7XG5cbmZ1bmN0aW9uIFVybCgpIHtcbiAgdGhpcy5wcm90b2NvbCA9IG51bGw7XG4gIHRoaXMuc2xhc2hlcyA9IG51bGw7XG4gIHRoaXMuYXV0aCA9IG51bGw7XG4gIHRoaXMuaG9zdCA9IG51bGw7XG4gIHRoaXMucG9ydCA9IG51bGw7XG4gIHRoaXMuaG9zdG5hbWUgPSBudWxsO1xuICB0aGlzLmhhc2ggPSBudWxsO1xuICB0aGlzLnNlYXJjaCA9IG51bGw7XG4gIHRoaXMucXVlcnkgPSBudWxsO1xuICB0aGlzLnBhdGhuYW1lID0gbnVsbDtcbiAgdGhpcy5wYXRoID0gbnVsbDtcbiAgdGhpcy5ocmVmID0gbnVsbDtcbn1cblxuLy8gUmVmZXJlbmNlOiBSRkMgMzk4NiwgUkZDIDE4MDgsIFJGQyAyMzk2XG5cbi8vIGRlZmluZSB0aGVzZSBoZXJlIHNvIGF0IGxlYXN0IHRoZXkgb25seSBoYXZlIHRvIGJlXG4vLyBjb21waWxlZCBvbmNlIG9uIHRoZSBmaXJzdCBtb2R1bGUgbG9hZC5cbnZhciBwcm90b2NvbFBhdHRlcm4gPSAvXihbYS16MC05ListXSs6KS9pLFxuICAgIHBvcnRQYXR0ZXJuID0gLzpbMC05XSokLyxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIHJlc2VydmVkIGZvciBkZWxpbWl0aW5nIFVSTHMuXG4gICAgLy8gV2UgYWN0dWFsbHkganVzdCBhdXRvLWVzY2FwZSB0aGVzZS5cbiAgICBkZWxpbXMgPSBbJzwnLCAnPicsICdcIicsICdgJywgJyAnLCAnXFxyJywgJ1xcbicsICdcXHQnXSxcblxuICAgIC8vIFJGQyAyMzk2OiBjaGFyYWN0ZXJzIG5vdCBhbGxvd2VkIGZvciB2YXJpb3VzIHJlYXNvbnMuXG4gICAgdW53aXNlID0gWyd7JywgJ30nLCAnfCcsICdcXFxcJywgJ14nLCAnYCddLmNvbmNhdChkZWxpbXMpLFxuXG4gICAgLy8gQWxsb3dlZCBieSBSRkNzLCBidXQgY2F1c2Ugb2YgWFNTIGF0dGFja3MuICBBbHdheXMgZXNjYXBlIHRoZXNlLlxuICAgIGF1dG9Fc2NhcGUgPSBbJ1xcJyddLmNvbmNhdCh1bndpc2UpLFxuICAgIC8vIENoYXJhY3RlcnMgdGhhdCBhcmUgbmV2ZXIgZXZlciBhbGxvd2VkIGluIGEgaG9zdG5hbWUuXG4gICAgLy8gTm90ZSB0aGF0IGFueSBpbnZhbGlkIGNoYXJzIGFyZSBhbHNvIGhhbmRsZWQsIGJ1dCB0aGVzZVxuICAgIC8vIGFyZSB0aGUgb25lcyB0aGF0IGFyZSAqZXhwZWN0ZWQqIHRvIGJlIHNlZW4sIHNvIHdlIGZhc3QtcGF0aFxuICAgIC8vIHRoZW0uXG4gICAgbm9uSG9zdENoYXJzID0gWyclJywgJy8nLCAnPycsICc7JywgJyMnXS5jb25jYXQoYXV0b0VzY2FwZSksXG4gICAgaG9zdEVuZGluZ0NoYXJzID0gWycvJywgJz8nLCAnIyddLFxuICAgIGhvc3RuYW1lTWF4TGVuID0gMjU1LFxuICAgIGhvc3RuYW1lUGFydFBhdHRlcm4gPSAvXlthLXowLTlBLVpfLV17MCw2M30kLyxcbiAgICBob3N0bmFtZVBhcnRTdGFydCA9IC9eKFthLXowLTlBLVpfLV17MCw2M30pKC4qKSQvLFxuICAgIC8vIHByb3RvY29scyB0aGF0IGNhbiBhbGxvdyBcInVuc2FmZVwiIGFuZCBcInVud2lzZVwiIGNoYXJzLlxuICAgIHVuc2FmZVByb3RvY29sID0ge1xuICAgICAgJ2phdmFzY3JpcHQnOiB0cnVlLFxuICAgICAgJ2phdmFzY3JpcHQ6JzogdHJ1ZVxuICAgIH0sXG4gICAgLy8gcHJvdG9jb2xzIHRoYXQgbmV2ZXIgaGF2ZSBhIGhvc3RuYW1lLlxuICAgIGhvc3RsZXNzUHJvdG9jb2wgPSB7XG4gICAgICAnamF2YXNjcmlwdCc6IHRydWUsXG4gICAgICAnamF2YXNjcmlwdDonOiB0cnVlXG4gICAgfSxcbiAgICAvLyBwcm90b2NvbHMgdGhhdCBhbHdheXMgY29udGFpbiBhIC8vIGJpdC5cbiAgICBzbGFzaGVkUHJvdG9jb2wgPSB7XG4gICAgICAnaHR0cCc6IHRydWUsXG4gICAgICAnaHR0cHMnOiB0cnVlLFxuICAgICAgJ2Z0cCc6IHRydWUsXG4gICAgICAnZ29waGVyJzogdHJ1ZSxcbiAgICAgICdmaWxlJzogdHJ1ZSxcbiAgICAgICdodHRwOic6IHRydWUsXG4gICAgICAnaHR0cHM6JzogdHJ1ZSxcbiAgICAgICdmdHA6JzogdHJ1ZSxcbiAgICAgICdnb3BoZXI6JzogdHJ1ZSxcbiAgICAgICdmaWxlOic6IHRydWVcbiAgICB9LFxuICAgIHF1ZXJ5c3RyaW5nID0gcmVxdWlyZSgncXVlcnlzdHJpbmcnKTtcblxuZnVuY3Rpb24gdXJsUGFyc2UodXJsLCBwYXJzZVF1ZXJ5U3RyaW5nLCBzbGFzaGVzRGVub3RlSG9zdCkge1xuICBpZiAodXJsICYmIGlzT2JqZWN0KHVybCkgJiYgdXJsIGluc3RhbmNlb2YgVXJsKSByZXR1cm4gdXJsO1xuXG4gIHZhciB1ID0gbmV3IFVybDtcbiAgdS5wYXJzZSh1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KTtcbiAgcmV0dXJuIHU7XG59XG5cblVybC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbih1cmwsIHBhcnNlUXVlcnlTdHJpbmcsIHNsYXNoZXNEZW5vdGVIb3N0KSB7XG4gIGlmICghaXNTdHJpbmcodXJsKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXJhbWV0ZXIgJ3VybCcgbXVzdCBiZSBhIHN0cmluZywgbm90IFwiICsgdHlwZW9mIHVybCk7XG4gIH1cblxuICB2YXIgcmVzdCA9IHVybDtcblxuICAvLyB0cmltIGJlZm9yZSBwcm9jZWVkaW5nLlxuICAvLyBUaGlzIGlzIHRvIHN1cHBvcnQgcGFyc2Ugc3R1ZmYgbGlrZSBcIiAgaHR0cDovL2Zvby5jb20gIFxcblwiXG4gIHJlc3QgPSByZXN0LnRyaW0oKTtcblxuICB2YXIgcHJvdG8gPSBwcm90b2NvbFBhdHRlcm4uZXhlYyhyZXN0KTtcbiAgaWYgKHByb3RvKSB7XG4gICAgcHJvdG8gPSBwcm90b1swXTtcbiAgICB2YXIgbG93ZXJQcm90byA9IHByb3RvLnRvTG93ZXJDYXNlKCk7XG4gICAgdGhpcy5wcm90b2NvbCA9IGxvd2VyUHJvdG87XG4gICAgcmVzdCA9IHJlc3Quc3Vic3RyKHByb3RvLmxlbmd0aCk7XG4gIH1cblxuICAvLyBmaWd1cmUgb3V0IGlmIGl0J3MgZ290IGEgaG9zdFxuICAvLyB1c2VyQHNlcnZlciBpcyAqYWx3YXlzKiBpbnRlcnByZXRlZCBhcyBhIGhvc3RuYW1lLCBhbmQgdXJsXG4gIC8vIHJlc29sdXRpb24gd2lsbCB0cmVhdCAvL2Zvby9iYXIgYXMgaG9zdD1mb28scGF0aD1iYXIgYmVjYXVzZSB0aGF0J3NcbiAgLy8gaG93IHRoZSBicm93c2VyIHJlc29sdmVzIHJlbGF0aXZlIFVSTHMuXG4gIGlmIChzbGFzaGVzRGVub3RlSG9zdCB8fCBwcm90byB8fCByZXN0Lm1hdGNoKC9eXFwvXFwvW15AXFwvXStAW15AXFwvXSsvKSkge1xuICAgIHZhciBzbGFzaGVzID0gcmVzdC5zdWJzdHIoMCwgMikgPT09ICcvLyc7XG4gICAgaWYgKHNsYXNoZXMgJiYgIShwcm90byAmJiBob3N0bGVzc1Byb3RvY29sW3Byb3RvXSkpIHtcbiAgICAgIHJlc3QgPSByZXN0LnN1YnN0cigyKTtcbiAgICAgIHRoaXMuc2xhc2hlcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFob3N0bGVzc1Byb3RvY29sW3Byb3RvXSAmJlxuICAgICAgKHNsYXNoZXMgfHwgKHByb3RvICYmICFzbGFzaGVkUHJvdG9jb2xbcHJvdG9dKSkpIHtcblxuICAgIC8vIHRoZXJlJ3MgYSBob3N0bmFtZS5cbiAgICAvLyB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgLywgPywgOywgb3IgIyBlbmRzIHRoZSBob3N0LlxuICAgIC8vXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gQCBpbiB0aGUgaG9zdG5hbWUsIHRoZW4gbm9uLWhvc3QgY2hhcnMgKmFyZSogYWxsb3dlZFxuICAgIC8vIHRvIHRoZSBsZWZ0IG9mIHRoZSBsYXN0IEAgc2lnbiwgdW5sZXNzIHNvbWUgaG9zdC1lbmRpbmcgY2hhcmFjdGVyXG4gICAgLy8gY29tZXMgKmJlZm9yZSogdGhlIEAtc2lnbi5cbiAgICAvLyBVUkxzIGFyZSBvYm5veGlvdXMuXG4gICAgLy9cbiAgICAvLyBleDpcbiAgICAvLyBodHRwOi8vYUBiQGMvID0+IHVzZXI6YUBiIGhvc3Q6Y1xuICAgIC8vIGh0dHA6Ly9hQGI/QGMgPT4gdXNlcjphIGhvc3Q6YyBwYXRoOi8/QGNcblxuICAgIC8vIHYwLjEyIFRPRE8oaXNhYWNzKTogVGhpcyBpcyBub3QgcXVpdGUgaG93IENocm9tZSBkb2VzIHRoaW5ncy5cbiAgICAvLyBSZXZpZXcgb3VyIHRlc3QgY2FzZSBhZ2FpbnN0IGJyb3dzZXJzIG1vcmUgY29tcHJlaGVuc2l2ZWx5LlxuXG4gICAgLy8gZmluZCB0aGUgZmlyc3QgaW5zdGFuY2Ugb2YgYW55IGhvc3RFbmRpbmdDaGFyc1xuICAgIHZhciBob3N0RW5kID0gLTE7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBob3N0RW5kaW5nQ2hhcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBoZWMgPSByZXN0LmluZGV4T2YoaG9zdEVuZGluZ0NoYXJzW2ldKTtcbiAgICAgIGlmIChoZWMgIT09IC0xICYmIChob3N0RW5kID09PSAtMSB8fCBoZWMgPCBob3N0RW5kKSlcbiAgICAgICAgaG9zdEVuZCA9IGhlYztcbiAgICB9XG5cbiAgICAvLyBhdCB0aGlzIHBvaW50LCBlaXRoZXIgd2UgaGF2ZSBhbiBleHBsaWNpdCBwb2ludCB3aGVyZSB0aGVcbiAgICAvLyBhdXRoIHBvcnRpb24gY2Fubm90IGdvIHBhc3QsIG9yIHRoZSBsYXN0IEAgY2hhciBpcyB0aGUgZGVjaWRlci5cbiAgICB2YXIgYXV0aCwgYXRTaWduO1xuICAgIGlmIChob3N0RW5kID09PSAtMSkge1xuICAgICAgLy8gYXRTaWduIGNhbiBiZSBhbnl3aGVyZS5cbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYXRTaWduIG11c3QgYmUgaW4gYXV0aCBwb3J0aW9uLlxuICAgICAgLy8gaHR0cDovL2FAYi9jQGQgPT4gaG9zdDpiIGF1dGg6YSBwYXRoOi9jQGRcbiAgICAgIGF0U2lnbiA9IHJlc3QubGFzdEluZGV4T2YoJ0AnLCBob3N0RW5kKTtcbiAgICB9XG5cbiAgICAvLyBOb3cgd2UgaGF2ZSBhIHBvcnRpb24gd2hpY2ggaXMgZGVmaW5pdGVseSB0aGUgYXV0aC5cbiAgICAvLyBQdWxsIHRoYXQgb2ZmLlxuICAgIGlmIChhdFNpZ24gIT09IC0xKSB7XG4gICAgICBhdXRoID0gcmVzdC5zbGljZSgwLCBhdFNpZ24pO1xuICAgICAgcmVzdCA9IHJlc3Quc2xpY2UoYXRTaWduICsgMSk7XG4gICAgICB0aGlzLmF1dGggPSBkZWNvZGVVUklDb21wb25lbnQoYXV0aCk7XG4gICAgfVxuXG4gICAgLy8gdGhlIGhvc3QgaXMgdGhlIHJlbWFpbmluZyB0byB0aGUgbGVmdCBvZiB0aGUgZmlyc3Qgbm9uLWhvc3QgY2hhclxuICAgIGhvc3RFbmQgPSAtMTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vbkhvc3RDaGFycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGhlYyA9IHJlc3QuaW5kZXhPZihub25Ib3N0Q2hhcnNbaV0pO1xuICAgICAgaWYgKGhlYyAhPT0gLTEgJiYgKGhvc3RFbmQgPT09IC0xIHx8IGhlYyA8IGhvc3RFbmQpKVxuICAgICAgICBob3N0RW5kID0gaGVjO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBzdGlsbCBoYXZlIG5vdCBoaXQgaXQsIHRoZW4gdGhlIGVudGlyZSB0aGluZyBpcyBhIGhvc3QuXG4gICAgaWYgKGhvc3RFbmQgPT09IC0xKVxuICAgICAgaG9zdEVuZCA9IHJlc3QubGVuZ3RoO1xuXG4gICAgdGhpcy5ob3N0ID0gcmVzdC5zbGljZSgwLCBob3N0RW5kKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZShob3N0RW5kKTtcblxuICAgIC8vIHB1bGwgb3V0IHBvcnQuXG4gICAgdGhpcy5wYXJzZUhvc3QoKTtcblxuICAgIC8vIHdlJ3ZlIGluZGljYXRlZCB0aGF0IHRoZXJlIGlzIGEgaG9zdG5hbWUsXG4gICAgLy8gc28gZXZlbiBpZiBpdCdzIGVtcHR5LCBpdCBoYXMgdG8gYmUgcHJlc2VudC5cbiAgICB0aGlzLmhvc3RuYW1lID0gdGhpcy5ob3N0bmFtZSB8fCAnJztcblxuICAgIC8vIGlmIGhvc3RuYW1lIGJlZ2lucyB3aXRoIFsgYW5kIGVuZHMgd2l0aCBdXG4gICAgLy8gYXNzdW1lIHRoYXQgaXQncyBhbiBJUHY2IGFkZHJlc3MuXG4gICAgdmFyIGlwdjZIb3N0bmFtZSA9IHRoaXMuaG9zdG5hbWVbMF0gPT09ICdbJyAmJlxuICAgICAgICB0aGlzLmhvc3RuYW1lW3RoaXMuaG9zdG5hbWUubGVuZ3RoIC0gMV0gPT09ICddJztcblxuICAgIC8vIHZhbGlkYXRlIGEgbGl0dGxlLlxuICAgIGlmICghaXB2Nkhvc3RuYW1lKSB7XG4gICAgICB2YXIgaG9zdHBhcnRzID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgvXFwuLyk7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbCA9IGhvc3RwYXJ0cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBob3N0cGFydHNbaV07XG4gICAgICAgIGlmICghcGFydCkgY29udGludWU7XG4gICAgICAgIGlmICghcGFydC5tYXRjaChob3N0bmFtZVBhcnRQYXR0ZXJuKSkge1xuICAgICAgICAgIHZhciBuZXdwYXJ0ID0gJyc7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDAsIGsgPSBwYXJ0Lmxlbmd0aDsgaiA8IGs7IGorKykge1xuICAgICAgICAgICAgaWYgKHBhcnQuY2hhckNvZGVBdChqKSA+IDEyNykge1xuICAgICAgICAgICAgICAvLyB3ZSByZXBsYWNlIG5vbi1BU0NJSSBjaGFyIHdpdGggYSB0ZW1wb3JhcnkgcGxhY2Vob2xkZXJcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0aGlzIHRvIG1ha2Ugc3VyZSBzaXplIG9mIGhvc3RuYW1lIGlzIG5vdFxuICAgICAgICAgICAgICAvLyBicm9rZW4gYnkgcmVwbGFjaW5nIG5vbi1BU0NJSSBieSBub3RoaW5nXG4gICAgICAgICAgICAgIG5ld3BhcnQgKz0gJ3gnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbmV3cGFydCArPSBwYXJ0W2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB3ZSB0ZXN0IGFnYWluIHdpdGggQVNDSUkgY2hhciBvbmx5XG4gICAgICAgICAgaWYgKCFuZXdwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFBhdHRlcm4pKSB7XG4gICAgICAgICAgICB2YXIgdmFsaWRQYXJ0cyA9IGhvc3RwYXJ0cy5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgIHZhciBub3RIb3N0ID0gaG9zdHBhcnRzLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgICAgIHZhciBiaXQgPSBwYXJ0Lm1hdGNoKGhvc3RuYW1lUGFydFN0YXJ0KTtcbiAgICAgICAgICAgIGlmIChiaXQpIHtcbiAgICAgICAgICAgICAgdmFsaWRQYXJ0cy5wdXNoKGJpdFsxXSk7XG4gICAgICAgICAgICAgIG5vdEhvc3QudW5zaGlmdChiaXRbMl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5vdEhvc3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJlc3QgPSAnLycgKyBub3RIb3N0LmpvaW4oJy4nKSArIHJlc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmhvc3RuYW1lID0gdmFsaWRQYXJ0cy5qb2luKCcuJyk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5ob3N0bmFtZS5sZW5ndGggPiBob3N0bmFtZU1heExlbikge1xuICAgICAgdGhpcy5ob3N0bmFtZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBob3N0bmFtZXMgYXJlIGFsd2F5cyBsb3dlciBjYXNlLlxuICAgICAgdGhpcy5ob3N0bmFtZSA9IHRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlwdjZIb3N0bmFtZSkge1xuICAgICAgLy8gSUROQSBTdXBwb3J0OiBSZXR1cm5zIGEgcHVueSBjb2RlZCByZXByZXNlbnRhdGlvbiBvZiBcImRvbWFpblwiLlxuICAgICAgLy8gSXQgb25seSBjb252ZXJ0cyB0aGUgcGFydCBvZiB0aGUgZG9tYWluIG5hbWUgdGhhdFxuICAgICAgLy8gaGFzIG5vbiBBU0NJSSBjaGFyYWN0ZXJzLiBJLmUuIGl0IGRvc2VudCBtYXR0ZXIgaWZcbiAgICAgIC8vIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCBhbHJlYWR5IGlzIGluIEFTQ0lJLlxuICAgICAgdmFyIGRvbWFpbkFycmF5ID0gdGhpcy5ob3N0bmFtZS5zcGxpdCgnLicpO1xuICAgICAgdmFyIG5ld091dCA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb21haW5BcnJheS5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcyA9IGRvbWFpbkFycmF5W2ldO1xuICAgICAgICBuZXdPdXQucHVzaChzLm1hdGNoKC9bXkEtWmEtejAtOV8tXS8pID9cbiAgICAgICAgICAgICd4bi0tJyArIHB1bnljb2RlLmVuY29kZShzKSA6IHMpO1xuICAgICAgfVxuICAgICAgdGhpcy5ob3N0bmFtZSA9IG5ld091dC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSB0aGlzLnBvcnQgPyAnOicgKyB0aGlzLnBvcnQgOiAnJztcbiAgICB2YXIgaCA9IHRoaXMuaG9zdG5hbWUgfHwgJyc7XG4gICAgdGhpcy5ob3N0ID0gaCArIHA7XG4gICAgdGhpcy5ocmVmICs9IHRoaXMuaG9zdDtcblxuICAgIC8vIHN0cmlwIFsgYW5kIF0gZnJvbSB0aGUgaG9zdG5hbWVcbiAgICAvLyB0aGUgaG9zdCBmaWVsZCBzdGlsbCByZXRhaW5zIHRoZW0sIHRob3VnaFxuICAgIGlmIChpcHY2SG9zdG5hbWUpIHtcbiAgICAgIHRoaXMuaG9zdG5hbWUgPSB0aGlzLmhvc3RuYW1lLnN1YnN0cigxLCB0aGlzLmhvc3RuYW1lLmxlbmd0aCAtIDIpO1xuICAgICAgaWYgKHJlc3RbMF0gIT09ICcvJykge1xuICAgICAgICByZXN0ID0gJy8nICsgcmVzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBub3cgcmVzdCBpcyBzZXQgdG8gdGhlIHBvc3QtaG9zdCBzdHVmZi5cbiAgLy8gY2hvcCBvZmYgYW55IGRlbGltIGNoYXJzLlxuICBpZiAoIXVuc2FmZVByb3RvY29sW2xvd2VyUHJvdG9dKSB7XG5cbiAgICAvLyBGaXJzdCwgbWFrZSAxMDAlIHN1cmUgdGhhdCBhbnkgXCJhdXRvRXNjYXBlXCIgY2hhcnMgZ2V0XG4gICAgLy8gZXNjYXBlZCwgZXZlbiBpZiBlbmNvZGVVUklDb21wb25lbnQgZG9lc24ndCB0aGluayB0aGV5XG4gICAgLy8gbmVlZCB0byBiZS5cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGF1dG9Fc2NhcGUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2YXIgYWUgPSBhdXRvRXNjYXBlW2ldO1xuICAgICAgdmFyIGVzYyA9IGVuY29kZVVSSUNvbXBvbmVudChhZSk7XG4gICAgICBpZiAoZXNjID09PSBhZSkge1xuICAgICAgICBlc2MgPSBlc2NhcGUoYWUpO1xuICAgICAgfVxuICAgICAgcmVzdCA9IHJlc3Quc3BsaXQoYWUpLmpvaW4oZXNjKTtcbiAgICB9XG4gIH1cblxuXG4gIC8vIGNob3Agb2ZmIGZyb20gdGhlIHRhaWwgZmlyc3QuXG4gIHZhciBoYXNoID0gcmVzdC5pbmRleE9mKCcjJyk7XG4gIGlmIChoYXNoICE9PSAtMSkge1xuICAgIC8vIGdvdCBhIGZyYWdtZW50IHN0cmluZy5cbiAgICB0aGlzLmhhc2ggPSByZXN0LnN1YnN0cihoYXNoKTtcbiAgICByZXN0ID0gcmVzdC5zbGljZSgwLCBoYXNoKTtcbiAgfVxuICB2YXIgcW0gPSByZXN0LmluZGV4T2YoJz8nKTtcbiAgaWYgKHFtICE9PSAtMSkge1xuICAgIHRoaXMuc2VhcmNoID0gcmVzdC5zdWJzdHIocW0pO1xuICAgIHRoaXMucXVlcnkgPSByZXN0LnN1YnN0cihxbSArIDEpO1xuICAgIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnlzdHJpbmcucGFyc2UodGhpcy5xdWVyeSk7XG4gICAgfVxuICAgIHJlc3QgPSByZXN0LnNsaWNlKDAsIHFtKTtcbiAgfSBlbHNlIGlmIChwYXJzZVF1ZXJ5U3RyaW5nKSB7XG4gICAgLy8gbm8gcXVlcnkgc3RyaW5nLCBidXQgcGFyc2VRdWVyeVN0cmluZyBzdGlsbCByZXF1ZXN0ZWRcbiAgICB0aGlzLnNlYXJjaCA9ICcnO1xuICAgIHRoaXMucXVlcnkgPSB7fTtcbiAgfVxuICBpZiAocmVzdCkgdGhpcy5wYXRobmFtZSA9IHJlc3Q7XG4gIGlmIChzbGFzaGVkUHJvdG9jb2xbbG93ZXJQcm90b10gJiZcbiAgICAgIHRoaXMuaG9zdG5hbWUgJiYgIXRoaXMucGF0aG5hbWUpIHtcbiAgICB0aGlzLnBhdGhuYW1lID0gJy8nO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICBpZiAodGhpcy5wYXRobmFtZSB8fCB0aGlzLnNlYXJjaCkge1xuICAgIHZhciBwID0gdGhpcy5wYXRobmFtZSB8fCAnJztcbiAgICB2YXIgcyA9IHRoaXMuc2VhcmNoIHx8ICcnO1xuICAgIHRoaXMucGF0aCA9IHAgKyBzO1xuICB9XG5cbiAgLy8gZmluYWxseSwgcmVjb25zdHJ1Y3QgdGhlIGhyZWYgYmFzZWQgb24gd2hhdCBoYXMgYmVlbiB2YWxpZGF0ZWQuXG4gIHRoaXMuaHJlZiA9IHRoaXMuZm9ybWF0KCk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gZm9ybWF0IGEgcGFyc2VkIG9iamVjdCBpbnRvIGEgdXJsIHN0cmluZ1xuZnVuY3Rpb24gdXJsRm9ybWF0KG9iaikge1xuICAvLyBlbnN1cmUgaXQncyBhbiBvYmplY3QsIGFuZCBub3QgYSBzdHJpbmcgdXJsLlxuICAvLyBJZiBpdCdzIGFuIG9iaiwgdGhpcyBpcyBhIG5vLW9wLlxuICAvLyB0aGlzIHdheSwgeW91IGNhbiBjYWxsIHVybF9mb3JtYXQoKSBvbiBzdHJpbmdzXG4gIC8vIHRvIGNsZWFuIHVwIHBvdGVudGlhbGx5IHdvbmt5IHVybHMuXG4gIGlmIChpc1N0cmluZyhvYmopKSBvYmogPSB1cmxQYXJzZShvYmopO1xuICBpZiAoIShvYmogaW5zdGFuY2VvZiBVcmwpKSByZXR1cm4gVXJsLnByb3RvdHlwZS5mb3JtYXQuY2FsbChvYmopO1xuICByZXR1cm4gb2JqLmZvcm1hdCgpO1xufVxuXG5VcmwucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgYXV0aCA9IHRoaXMuYXV0aCB8fCAnJztcbiAgaWYgKGF1dGgpIHtcbiAgICBhdXRoID0gZW5jb2RlVVJJQ29tcG9uZW50KGF1dGgpO1xuICAgIGF1dGggPSBhdXRoLnJlcGxhY2UoLyUzQS9pLCAnOicpO1xuICAgIGF1dGggKz0gJ0AnO1xuICB9XG5cbiAgdmFyIHByb3RvY29sID0gdGhpcy5wcm90b2NvbCB8fCAnJyxcbiAgICAgIHBhdGhuYW1lID0gdGhpcy5wYXRobmFtZSB8fCAnJyxcbiAgICAgIGhhc2ggPSB0aGlzLmhhc2ggfHwgJycsXG4gICAgICBob3N0ID0gZmFsc2UsXG4gICAgICBxdWVyeSA9ICcnO1xuXG4gIGlmICh0aGlzLmhvc3QpIHtcbiAgICBob3N0ID0gYXV0aCArIHRoaXMuaG9zdDtcbiAgfSBlbHNlIGlmICh0aGlzLmhvc3RuYW1lKSB7XG4gICAgaG9zdCA9IGF1dGggKyAodGhpcy5ob3N0bmFtZS5pbmRleE9mKCc6JykgPT09IC0xID9cbiAgICAgICAgdGhpcy5ob3N0bmFtZSA6XG4gICAgICAgICdbJyArIHRoaXMuaG9zdG5hbWUgKyAnXScpO1xuICAgIGlmICh0aGlzLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdGhpcy5wb3J0O1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLnF1ZXJ5ICYmXG4gICAgICBpc09iamVjdCh0aGlzLnF1ZXJ5KSAmJlxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoKSB7XG4gICAgcXVlcnkgPSBxdWVyeXN0cmluZy5zdHJpbmdpZnkodGhpcy5xdWVyeSk7XG4gIH1cblxuICB2YXIgc2VhcmNoID0gdGhpcy5zZWFyY2ggfHwgKHF1ZXJ5ICYmICgnPycgKyBxdWVyeSkpIHx8ICcnO1xuXG4gIGlmIChwcm90b2NvbCAmJiBwcm90b2NvbC5zdWJzdHIoLTEpICE9PSAnOicpIHByb3RvY29sICs9ICc6JztcblxuICAvLyBvbmx5IHRoZSBzbGFzaGVkUHJvdG9jb2xzIGdldCB0aGUgLy8uICBOb3QgbWFpbHRvOiwgeG1wcDosIGV0Yy5cbiAgLy8gdW5sZXNzIHRoZXkgaGFkIHRoZW0gdG8gYmVnaW4gd2l0aC5cbiAgaWYgKHRoaXMuc2xhc2hlcyB8fFxuICAgICAgKCFwcm90b2NvbCB8fCBzbGFzaGVkUHJvdG9jb2xbcHJvdG9jb2xdKSAmJiBob3N0ICE9PSBmYWxzZSkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpO1xuICAgIGlmIChwYXRobmFtZSAmJiBwYXRobmFtZS5jaGFyQXQoMCkgIT09ICcvJykgcGF0aG5hbWUgPSAnLycgKyBwYXRobmFtZTtcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJztcbiAgfVxuXG4gIGlmIChoYXNoICYmIGhhc2guY2hhckF0KDApICE9PSAnIycpIGhhc2ggPSAnIycgKyBoYXNoO1xuICBpZiAoc2VhcmNoICYmIHNlYXJjaC5jaGFyQXQoMCkgIT09ICc/Jykgc2VhcmNoID0gJz8nICsgc2VhcmNoO1xuXG4gIHBhdGhuYW1lID0gcGF0aG5hbWUucmVwbGFjZSgvWz8jXS9nLCBmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQobWF0Y2gpO1xuICB9KTtcbiAgc2VhcmNoID0gc2VhcmNoLnJlcGxhY2UoJyMnLCAnJTIzJyk7XG5cbiAgcmV0dXJuIHByb3RvY29sICsgaG9zdCArIHBhdGhuYW1lICsgc2VhcmNoICsgaGFzaDtcbn07XG5cbmZ1bmN0aW9uIHVybFJlc29sdmUoc291cmNlLCByZWxhdGl2ZSkge1xuICByZXR1cm4gdXJsUGFyc2Uoc291cmNlLCBmYWxzZSwgdHJ1ZSkucmVzb2x2ZShyZWxhdGl2ZSk7XG59XG5cblVybC5wcm90b3R5cGUucmVzb2x2ZSA9IGZ1bmN0aW9uKHJlbGF0aXZlKSB7XG4gIHJldHVybiB0aGlzLnJlc29sdmVPYmplY3QodXJsUGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKSkuZm9ybWF0KCk7XG59O1xuXG5mdW5jdGlvbiB1cmxSZXNvbHZlT2JqZWN0KHNvdXJjZSwgcmVsYXRpdmUpIHtcbiAgaWYgKCFzb3VyY2UpIHJldHVybiByZWxhdGl2ZTtcbiAgcmV0dXJuIHVybFBhcnNlKHNvdXJjZSwgZmFsc2UsIHRydWUpLnJlc29sdmVPYmplY3QocmVsYXRpdmUpO1xufVxuXG5VcmwucHJvdG90eXBlLnJlc29sdmVPYmplY3QgPSBmdW5jdGlvbihyZWxhdGl2ZSkge1xuICBpZiAoaXNTdHJpbmcocmVsYXRpdmUpKSB7XG4gICAgdmFyIHJlbCA9IG5ldyBVcmwoKTtcbiAgICByZWwucGFyc2UocmVsYXRpdmUsIGZhbHNlLCB0cnVlKTtcbiAgICByZWxhdGl2ZSA9IHJlbDtcbiAgfVxuXG4gIHZhciByZXN1bHQgPSBuZXcgVXJsKCk7XG4gIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgIHJlc3VsdFtrXSA9IHRoaXNba107XG4gIH0sIHRoaXMpO1xuXG4gIC8vIGhhc2ggaXMgYWx3YXlzIG92ZXJyaWRkZW4sIG5vIG1hdHRlciB3aGF0LlxuICAvLyBldmVuIGhyZWY9XCJcIiB3aWxsIHJlbW92ZSBpdC5cbiAgcmVzdWx0Lmhhc2ggPSByZWxhdGl2ZS5oYXNoO1xuXG4gIC8vIGlmIHRoZSByZWxhdGl2ZSB1cmwgaXMgZW1wdHksIHRoZW4gdGhlcmUncyBub3RoaW5nIGxlZnQgdG8gZG8gaGVyZS5cbiAgaWYgKHJlbGF0aXZlLmhyZWYgPT09ICcnKSB7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8vIGhyZWZzIGxpa2UgLy9mb28vYmFyIGFsd2F5cyBjdXQgdG8gdGhlIHByb3RvY29sLlxuICBpZiAocmVsYXRpdmUuc2xhc2hlcyAmJiAhcmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAvLyB0YWtlIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBwcm90b2NvbCBmcm9tIHJlbGF0aXZlXG4gICAgT2JqZWN0LmtleXMocmVsYXRpdmUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgaWYgKGsgIT09ICdwcm90b2NvbCcpXG4gICAgICAgIHJlc3VsdFtrXSA9IHJlbGF0aXZlW2tdO1xuICAgIH0pO1xuXG4gICAgLy91cmxQYXJzZSBhcHBlbmRzIHRyYWlsaW5nIC8gdG8gdXJscyBsaWtlIGh0dHA6Ly93d3cuZXhhbXBsZS5jb21cbiAgICBpZiAoc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF0gJiZcbiAgICAgICAgcmVzdWx0Lmhvc3RuYW1lICYmICFyZXN1bHQucGF0aG5hbWUpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gcmVzdWx0LnBhdGhuYW1lID0gJy8nO1xuICAgIH1cblxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBpZiAocmVsYXRpdmUucHJvdG9jb2wgJiYgcmVsYXRpdmUucHJvdG9jb2wgIT09IHJlc3VsdC5wcm90b2NvbCkge1xuICAgIC8vIGlmIGl0J3MgYSBrbm93biB1cmwgcHJvdG9jb2wsIHRoZW4gY2hhbmdpbmdcbiAgICAvLyB0aGUgcHJvdG9jb2wgZG9lcyB3ZWlyZCB0aGluZ3NcbiAgICAvLyBmaXJzdCwgaWYgaXQncyBub3QgZmlsZTosIHRoZW4gd2UgTVVTVCBoYXZlIGEgaG9zdCxcbiAgICAvLyBhbmQgaWYgdGhlcmUgd2FzIGEgcGF0aFxuICAgIC8vIHRvIGJlZ2luIHdpdGgsIHRoZW4gd2UgTVVTVCBoYXZlIGEgcGF0aC5cbiAgICAvLyBpZiBpdCBpcyBmaWxlOiwgdGhlbiB0aGUgaG9zdCBpcyBkcm9wcGVkLFxuICAgIC8vIGJlY2F1c2UgdGhhdCdzIGtub3duIHRvIGJlIGhvc3RsZXNzLlxuICAgIC8vIGFueXRoaW5nIGVsc2UgaXMgYXNzdW1lZCB0byBiZSBhYnNvbHV0ZS5cbiAgICBpZiAoIXNsYXNoZWRQcm90b2NvbFtyZWxhdGl2ZS5wcm90b2NvbF0pIHtcbiAgICAgIE9iamVjdC5rZXlzKHJlbGF0aXZlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgcmVzdWx0W2tdID0gcmVsYXRpdmVba107XG4gICAgICB9KTtcbiAgICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQucHJvdG9jb2wgPSByZWxhdGl2ZS5wcm90b2NvbDtcbiAgICBpZiAoIXJlbGF0aXZlLmhvc3QgJiYgIWhvc3RsZXNzUHJvdG9jb2xbcmVsYXRpdmUucHJvdG9jb2xdKSB7XG4gICAgICB2YXIgcmVsUGF0aCA9IChyZWxhdGl2ZS5wYXRobmFtZSB8fCAnJykuc3BsaXQoJy8nKTtcbiAgICAgIHdoaWxlIChyZWxQYXRoLmxlbmd0aCAmJiAhKHJlbGF0aXZlLmhvc3QgPSByZWxQYXRoLnNoaWZ0KCkpKTtcbiAgICAgIGlmICghcmVsYXRpdmUuaG9zdCkgcmVsYXRpdmUuaG9zdCA9ICcnO1xuICAgICAgaWYgKCFyZWxhdGl2ZS5ob3N0bmFtZSkgcmVsYXRpdmUuaG9zdG5hbWUgPSAnJztcbiAgICAgIGlmIChyZWxQYXRoWzBdICE9PSAnJykgcmVsUGF0aC51bnNoaWZ0KCcnKTtcbiAgICAgIGlmIChyZWxQYXRoLmxlbmd0aCA8IDIpIHJlbFBhdGgudW5zaGlmdCgnJyk7XG4gICAgICByZXN1bHQucGF0aG5hbWUgPSByZWxQYXRoLmpvaW4oJy8nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnBhdGhuYW1lID0gcmVsYXRpdmUucGF0aG5hbWU7XG4gICAgfVxuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gICAgcmVzdWx0Lmhvc3QgPSByZWxhdGl2ZS5ob3N0IHx8ICcnO1xuICAgIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aDtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSByZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0O1xuICAgIHJlc3VsdC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcbiAgICAvLyB0byBzdXBwb3J0IGh0dHAucmVxdWVzdFxuICAgIGlmIChyZXN1bHQucGF0aG5hbWUgfHwgcmVzdWx0LnNlYXJjaCkge1xuICAgICAgdmFyIHAgPSByZXN1bHQucGF0aG5hbWUgfHwgJyc7XG4gICAgICB2YXIgcyA9IHJlc3VsdC5zZWFyY2ggfHwgJyc7XG4gICAgICByZXN1bHQucGF0aCA9IHAgKyBzO1xuICAgIH1cbiAgICByZXN1bHQuc2xhc2hlcyA9IHJlc3VsdC5zbGFzaGVzIHx8IHJlbGF0aXZlLnNsYXNoZXM7XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBpc1NvdXJjZUFicyA9IChyZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLmNoYXJBdCgwKSA9PT0gJy8nKSxcbiAgICAgIGlzUmVsQWJzID0gKFxuICAgICAgICAgIHJlbGF0aXZlLmhvc3QgfHxcbiAgICAgICAgICByZWxhdGl2ZS5wYXRobmFtZSAmJiByZWxhdGl2ZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJ1xuICAgICAgKSxcbiAgICAgIG11c3RFbmRBYnMgPSAoaXNSZWxBYnMgfHwgaXNTb3VyY2VBYnMgfHxcbiAgICAgICAgICAgICAgICAgICAgKHJlc3VsdC5ob3N0ICYmIHJlbGF0aXZlLnBhdGhuYW1lKSksXG4gICAgICByZW1vdmVBbGxEb3RzID0gbXVzdEVuZEFicyxcbiAgICAgIHNyY1BhdGggPSByZXN1bHQucGF0aG5hbWUgJiYgcmVzdWx0LnBhdGhuYW1lLnNwbGl0KCcvJykgfHwgW10sXG4gICAgICByZWxQYXRoID0gcmVsYXRpdmUucGF0aG5hbWUgJiYgcmVsYXRpdmUucGF0aG5hbWUuc3BsaXQoJy8nKSB8fCBbXSxcbiAgICAgIHBzeWNob3RpYyA9IHJlc3VsdC5wcm90b2NvbCAmJiAhc2xhc2hlZFByb3RvY29sW3Jlc3VsdC5wcm90b2NvbF07XG5cbiAgLy8gaWYgdGhlIHVybCBpcyBhIG5vbi1zbGFzaGVkIHVybCwgdGhlbiByZWxhdGl2ZVxuICAvLyBsaW5rcyBsaWtlIC4uLy4uIHNob3VsZCBiZSBhYmxlXG4gIC8vIHRvIGNyYXdsIHVwIHRvIHRoZSBob3N0bmFtZSwgYXMgd2VsbC4gIFRoaXMgaXMgc3RyYW5nZS5cbiAgLy8gcmVzdWx0LnByb3RvY29sIGhhcyBhbHJlYWR5IGJlZW4gc2V0IGJ5IG5vdy5cbiAgLy8gTGF0ZXIgb24sIHB1dCB0aGUgZmlyc3QgcGF0aCBwYXJ0IGludG8gdGhlIGhvc3QgZmllbGQuXG4gIGlmIChwc3ljaG90aWMpIHtcbiAgICByZXN1bHQuaG9zdG5hbWUgPSAnJztcbiAgICByZXN1bHQucG9ydCA9IG51bGw7XG4gICAgaWYgKHJlc3VsdC5ob3N0KSB7XG4gICAgICBpZiAoc3JjUGF0aFswXSA9PT0gJycpIHNyY1BhdGhbMF0gPSByZXN1bHQuaG9zdDtcbiAgICAgIGVsc2Ugc3JjUGF0aC51bnNoaWZ0KHJlc3VsdC5ob3N0KTtcbiAgICB9XG4gICAgcmVzdWx0Lmhvc3QgPSAnJztcbiAgICBpZiAocmVsYXRpdmUucHJvdG9jb2wpIHtcbiAgICAgIHJlbGF0aXZlLmhvc3RuYW1lID0gbnVsbDtcbiAgICAgIHJlbGF0aXZlLnBvcnQgPSBudWxsO1xuICAgICAgaWYgKHJlbGF0aXZlLmhvc3QpIHtcbiAgICAgICAgaWYgKHJlbFBhdGhbMF0gPT09ICcnKSByZWxQYXRoWzBdID0gcmVsYXRpdmUuaG9zdDtcbiAgICAgICAgZWxzZSByZWxQYXRoLnVuc2hpZnQocmVsYXRpdmUuaG9zdCk7XG4gICAgICB9XG4gICAgICByZWxhdGl2ZS5ob3N0ID0gbnVsbDtcbiAgICB9XG4gICAgbXVzdEVuZEFicyA9IG11c3RFbmRBYnMgJiYgKHJlbFBhdGhbMF0gPT09ICcnIHx8IHNyY1BhdGhbMF0gPT09ICcnKTtcbiAgfVxuXG4gIGlmIChpc1JlbEFicykge1xuICAgIC8vIGl0J3MgYWJzb2x1dGUuXG4gICAgcmVzdWx0Lmhvc3QgPSAocmVsYXRpdmUuaG9zdCB8fCByZWxhdGl2ZS5ob3N0ID09PSAnJykgP1xuICAgICAgICAgICAgICAgICAgcmVsYXRpdmUuaG9zdCA6IHJlc3VsdC5ob3N0O1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IChyZWxhdGl2ZS5ob3N0bmFtZSB8fCByZWxhdGl2ZS5ob3N0bmFtZSA9PT0gJycpID9cbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZS5ob3N0bmFtZSA6IHJlc3VsdC5ob3N0bmFtZTtcbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIHNyY1BhdGggPSByZWxQYXRoO1xuICAgIC8vIGZhbGwgdGhyb3VnaCB0byB0aGUgZG90LWhhbmRsaW5nIGJlbG93LlxuICB9IGVsc2UgaWYgKHJlbFBhdGgubGVuZ3RoKSB7XG4gICAgLy8gaXQncyByZWxhdGl2ZVxuICAgIC8vIHRocm93IGF3YXkgdGhlIGV4aXN0aW5nIGZpbGUsIGFuZCB0YWtlIHRoZSBuZXcgcGF0aCBpbnN0ZWFkLlxuICAgIGlmICghc3JjUGF0aCkgc3JjUGF0aCA9IFtdO1xuICAgIHNyY1BhdGgucG9wKCk7XG4gICAgc3JjUGF0aCA9IHNyY1BhdGguY29uY2F0KHJlbFBhdGgpO1xuICAgIHJlc3VsdC5zZWFyY2ggPSByZWxhdGl2ZS5zZWFyY2g7XG4gICAgcmVzdWx0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG4gIH0gZWxzZSBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKHJlbGF0aXZlLnNlYXJjaCkpIHtcbiAgICAvLyBqdXN0IHB1bGwgb3V0IHRoZSBzZWFyY2guXG4gICAgLy8gbGlrZSBocmVmPSc/Zm9vJy5cbiAgICAvLyBQdXQgdGhpcyBhZnRlciB0aGUgb3RoZXIgdHdvIGNhc2VzIGJlY2F1c2UgaXQgc2ltcGxpZmllcyB0aGUgYm9vbGVhbnNcbiAgICBpZiAocHN5Y2hvdGljKSB7XG4gICAgICByZXN1bHQuaG9zdG5hbWUgPSByZXN1bHQuaG9zdCA9IHNyY1BhdGguc2hpZnQoKTtcbiAgICAgIC8vb2NjYXRpb25hbHkgdGhlIGF1dGggY2FuIGdldCBzdHVjayBvbmx5IGluIGhvc3RcbiAgICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgICAvL3VybC5yZXNvbHZlT2JqZWN0KCdtYWlsdG86bG9jYWwxQGRvbWFpbjEnLCAnbG9jYWwyQGRvbWFpbjInKVxuICAgICAgdmFyIGF1dGhJbkhvc3QgPSByZXN1bHQuaG9zdCAmJiByZXN1bHQuaG9zdC5pbmRleE9mKCdAJykgPiAwID9cbiAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgICAgaWYgKGF1dGhJbkhvc3QpIHtcbiAgICAgICAgcmVzdWx0LmF1dGggPSBhdXRoSW5Ib3N0LnNoaWZ0KCk7XG4gICAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQuc2VhcmNoID0gcmVsYXRpdmUuc2VhcmNoO1xuICAgIHJlc3VsdC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICAgIHJlc3VsdC5wYXRoID0gKHJlc3VsdC5wYXRobmFtZSA/IHJlc3VsdC5wYXRobmFtZSA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQuc2VhcmNoID8gcmVzdWx0LnNlYXJjaCA6ICcnKTtcbiAgICB9XG4gICAgcmVzdWx0LmhyZWYgPSByZXN1bHQuZm9ybWF0KCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGlmICghc3JjUGF0aC5sZW5ndGgpIHtcbiAgICAvLyBubyBwYXRoIGF0IGFsbC4gIGVhc3kuXG4gICAgLy8gd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoZSBvdGhlciBzdHVmZiBhYm92ZS5cbiAgICByZXN1bHQucGF0aG5hbWUgPSBudWxsO1xuICAgIC8vdG8gc3VwcG9ydCBodHRwLnJlcXVlc3RcbiAgICBpZiAocmVzdWx0LnNlYXJjaCkge1xuICAgICAgcmVzdWx0LnBhdGggPSAnLycgKyByZXN1bHQuc2VhcmNoO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucGF0aCA9IG51bGw7XG4gICAgfVxuICAgIHJlc3VsdC5ocmVmID0gcmVzdWx0LmZvcm1hdCgpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBpZiBhIHVybCBFTkRzIGluIC4gb3IgLi4sIHRoZW4gaXQgbXVzdCBnZXQgYSB0cmFpbGluZyBzbGFzaC5cbiAgLy8gaG93ZXZlciwgaWYgaXQgZW5kcyBpbiBhbnl0aGluZyBlbHNlIG5vbi1zbGFzaHksXG4gIC8vIHRoZW4gaXQgbXVzdCBOT1QgZ2V0IGEgdHJhaWxpbmcgc2xhc2guXG4gIHZhciBsYXN0ID0gc3JjUGF0aC5zbGljZSgtMSlbMF07XG4gIHZhciBoYXNUcmFpbGluZ1NsYXNoID0gKFxuICAgICAgKHJlc3VsdC5ob3N0IHx8IHJlbGF0aXZlLmhvc3QpICYmIChsYXN0ID09PSAnLicgfHwgbGFzdCA9PT0gJy4uJykgfHxcbiAgICAgIGxhc3QgPT09ICcnKTtcblxuICAvLyBzdHJpcCBzaW5nbGUgZG90cywgcmVzb2x2ZSBkb3VibGUgZG90cyB0byBwYXJlbnQgZGlyXG4gIC8vIGlmIHRoZSBwYXRoIHRyaWVzIHRvIGdvIGFib3ZlIHRoZSByb290LCBgdXBgIGVuZHMgdXAgPiAwXG4gIHZhciB1cCA9IDA7XG4gIGZvciAodmFyIGkgPSBzcmNQYXRoLmxlbmd0aDsgaSA+PSAwOyBpLS0pIHtcbiAgICBsYXN0ID0gc3JjUGF0aFtpXTtcbiAgICBpZiAobGFzdCA9PSAnLicpIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgIH0gZWxzZSBpZiAobGFzdCA9PT0gJy4uJykge1xuICAgICAgc3JjUGF0aC5zcGxpY2UoaSwgMSk7XG4gICAgICB1cCsrO1xuICAgIH0gZWxzZSBpZiAodXApIHtcbiAgICAgIHNyY1BhdGguc3BsaWNlKGksIDEpO1xuICAgICAgdXAtLTtcbiAgICB9XG4gIH1cblxuICAvLyBpZiB0aGUgcGF0aCBpcyBhbGxvd2VkIHRvIGdvIGFib3ZlIHRoZSByb290LCByZXN0b3JlIGxlYWRpbmcgLi5zXG4gIGlmICghbXVzdEVuZEFicyAmJiAhcmVtb3ZlQWxsRG90cykge1xuICAgIGZvciAoOyB1cC0tOyB1cCkge1xuICAgICAgc3JjUGF0aC51bnNoaWZ0KCcuLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChtdXN0RW5kQWJzICYmIHNyY1BhdGhbMF0gIT09ICcnICYmXG4gICAgICAoIXNyY1BhdGhbMF0gfHwgc3JjUGF0aFswXS5jaGFyQXQoMCkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKGhhc1RyYWlsaW5nU2xhc2ggJiYgKHNyY1BhdGguam9pbignLycpLnN1YnN0cigtMSkgIT09ICcvJykpIHtcbiAgICBzcmNQYXRoLnB1c2goJycpO1xuICB9XG5cbiAgdmFyIGlzQWJzb2x1dGUgPSBzcmNQYXRoWzBdID09PSAnJyB8fFxuICAgICAgKHNyY1BhdGhbMF0gJiYgc3JjUGF0aFswXS5jaGFyQXQoMCkgPT09ICcvJyk7XG5cbiAgLy8gcHV0IHRoZSBob3N0IGJhY2tcbiAgaWYgKHBzeWNob3RpYykge1xuICAgIHJlc3VsdC5ob3N0bmFtZSA9IHJlc3VsdC5ob3N0ID0gaXNBYnNvbHV0ZSA/ICcnIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1BhdGgubGVuZ3RoID8gc3JjUGF0aC5zaGlmdCgpIDogJyc7XG4gICAgLy9vY2NhdGlvbmFseSB0aGUgYXV0aCBjYW4gZ2V0IHN0dWNrIG9ubHkgaW4gaG9zdFxuICAgIC8vdGhpcyBlc3BlY2lhbHkgaGFwcGVucyBpbiBjYXNlcyBsaWtlXG4gICAgLy91cmwucmVzb2x2ZU9iamVjdCgnbWFpbHRvOmxvY2FsMUBkb21haW4xJywgJ2xvY2FsMkBkb21haW4yJylcbiAgICB2YXIgYXV0aEluSG9zdCA9IHJlc3VsdC5ob3N0ICYmIHJlc3VsdC5ob3N0LmluZGV4T2YoJ0AnKSA+IDAgP1xuICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmhvc3Quc3BsaXQoJ0AnKSA6IGZhbHNlO1xuICAgIGlmIChhdXRoSW5Ib3N0KSB7XG4gICAgICByZXN1bHQuYXV0aCA9IGF1dGhJbkhvc3Quc2hpZnQoKTtcbiAgICAgIHJlc3VsdC5ob3N0ID0gcmVzdWx0Lmhvc3RuYW1lID0gYXV0aEluSG9zdC5zaGlmdCgpO1xuICAgIH1cbiAgfVxuXG4gIG11c3RFbmRBYnMgPSBtdXN0RW5kQWJzIHx8IChyZXN1bHQuaG9zdCAmJiBzcmNQYXRoLmxlbmd0aCk7XG5cbiAgaWYgKG11c3RFbmRBYnMgJiYgIWlzQWJzb2x1dGUpIHtcbiAgICBzcmNQYXRoLnVuc2hpZnQoJycpO1xuICB9XG5cbiAgaWYgKCFzcmNQYXRoLmxlbmd0aCkge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IG51bGw7XG4gICAgcmVzdWx0LnBhdGggPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdC5wYXRobmFtZSA9IHNyY1BhdGguam9pbignLycpO1xuICB9XG5cbiAgLy90byBzdXBwb3J0IHJlcXVlc3QuaHR0cFxuICBpZiAoIWlzTnVsbChyZXN1bHQucGF0aG5hbWUpIHx8ICFpc051bGwocmVzdWx0LnNlYXJjaCkpIHtcbiAgICByZXN1bHQucGF0aCA9IChyZXN1bHQucGF0aG5hbWUgPyByZXN1bHQucGF0aG5hbWUgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJlc3VsdC5zZWFyY2ggPyByZXN1bHQuc2VhcmNoIDogJycpO1xuICB9XG4gIHJlc3VsdC5hdXRoID0gcmVsYXRpdmUuYXV0aCB8fCByZXN1bHQuYXV0aDtcbiAgcmVzdWx0LnNsYXNoZXMgPSByZXN1bHQuc2xhc2hlcyB8fCByZWxhdGl2ZS5zbGFzaGVzO1xuICByZXN1bHQuaHJlZiA9IHJlc3VsdC5mb3JtYXQoKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblVybC5wcm90b3R5cGUucGFyc2VIb3N0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBob3N0ID0gdGhpcy5ob3N0O1xuICB2YXIgcG9ydCA9IHBvcnRQYXR0ZXJuLmV4ZWMoaG9zdCk7XG4gIGlmIChwb3J0KSB7XG4gICAgcG9ydCA9IHBvcnRbMF07XG4gICAgaWYgKHBvcnQgIT09ICc6Jykge1xuICAgICAgdGhpcy5wb3J0ID0gcG9ydC5zdWJzdHIoMSk7XG4gICAgfVxuICAgIGhvc3QgPSBob3N0LnN1YnN0cigwLCBob3N0Lmxlbmd0aCAtIHBvcnQubGVuZ3RoKTtcbiAgfVxuICBpZiAoaG9zdCkgdGhpcy5ob3N0bmFtZSA9IGhvc3Q7XG59O1xuXG5mdW5jdGlvbiBpc1N0cmluZyhhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCI7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KGFyZykge1xuICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ29iamVjdCcgJiYgYXJnICE9PSBudWxsO1xufVxuXG5mdW5jdGlvbiBpc051bGwoYXJnKSB7XG4gIHJldHVybiBhcmcgPT09IG51bGw7XG59XG5mdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZChhcmcpIHtcbiAgcmV0dXJuICBhcmcgPT0gbnVsbDtcbn1cbiJdLCJuYW1lcyI6WyJBV1MiLCJTZXJ2aWNlIiwiYXBpTG9hZGVyIiwic2VydmljZXMiLCJDb2duaXRvSWRlbnRpdHkiLCJkZWZpbmVTZXJ2aWNlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJtb2RlbCIsInBhZ2luYXRvcnMiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwibW9kdWxlIiwiZXhwb3J0cyIsIkZpcmVob3NlIiwiU1RTIiwiSG1hYyIsIk1kNSIsIlNoYTEiLCJTaGEyNTYiLCJjcmVhdGVIYXNoIiwiYWxnIiwidG9Mb3dlckNhc2UiLCJFcnJvciIsImNyZWF0ZUhtYWMiLCJrZXkiLCJjcmVhdGVTaWduIiwiQnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJhcmciLCJ2aWV3U3RyaW5ncyIsImluZGV4T2YiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJpc0VtcHR5RGF0YSIsImRhdGEiLCJsZW5ndGgiLCJieXRlTGVuZ3RoIiwiY29udmVydFRvQnVmZmVyIiwiVWludDhBcnJheSIsImJ1ZmZlciIsImJ5dGVPZmZzZXQiLCJCWVRFU19QRVJfRUxFTUVOVCIsImhhc2hVdGlscyIsImhhc2hDdG9yIiwic2VjcmV0IiwidGhpcyIsImhhc2giLCJvdXRlciIsImlubmVyIiwiYnVmZmVyRnJvbVNlY3JldCIsImlucHV0IiwiQkxPQ0tfU0laRSIsImJ1ZmZlckhhc2giLCJ1cGRhdGUiLCJkaWdlc3QiLCJzZXQiLCJpIiwidG9IYXNoIiwiZXJyb3IiLCJlIiwiZW5jb2RpbmciLCJmaW5pc2hlZCIsInN0YXRlIiwiRGF0YVZpZXciLCJidWZmZXJMZW5ndGgiLCJieXRlc0hhc2hlZCIsImNtbiIsInEiLCJhIiwiYiIsIngiLCJzIiwidCIsImZmIiwiYyIsImQiLCJnZyIsImhoIiwiaWkiLCJzb3VyY2VEYXRhIiwicG9zaXRpb24iLCJzZXRVaW50OCIsImhhc2hCdWZmZXIiLCJ1bmRlY29yYXRlZExlbmd0aCIsImJpdHNIYXNoZWQiLCJzZXRVaW50MzIiLCJNYXRoIiwiZmxvb3IiLCJvdXQiLCJidWZmIiwiZ2V0VWludDMyIiwiVWludDMyQXJyYXkiLCJwb3ciLCJoMCIsImgxIiwiaDIiLCJoMyIsImg0IiwiYmxvY2siLCJvZmZzZXQiLCJzaGlmdCIsInRvdGFsTGVuZ3RoIiwid3JpdGUiLCJieXRlIiwicHJvY2Vzc0Jsb2NrIiwib3V0VmlldyIsInciLCJmIiwiayIsInRlbXAiLCJLRVkiLCJNQVhfSEFTSEFCTEVfTEVOR1RIIiwiSW50MzJBcnJheSIsImJ1ZmZlclZpZXciLCJzdGF0ZTAiLCJzdGF0ZTEiLCJzdGF0ZTIiLCJzdGF0ZTMiLCJzdGF0ZTQiLCJzdGF0ZTUiLCJzdGF0ZTYiLCJzdGF0ZTciLCJ1IiwidDFfMSIsInQyXzEiLCJ0MSIsInQyIiwidXRpbCIsImNyeXB0byIsImxpYiIsInVybCIsInF1ZXJ5c3RyaW5nIiwicmVhbENsb2NrIiwiZW52aXJvbm1lbnQiLCJjcmVhdGVFdmVudFN0cmVhbSIsImlzQnJvd3NlciIsImlzTm9kZSIsIlhNTCIsIlBhcnNlciIsInByb2Nlc3MiLCJicm93c2VyIiwidmFsaWRhdGVSZWdpb25hbEVuZHBvaW50c0ZsYWdWYWx1ZSIsImNvbmZpZ1ZhbHVlIiwiZXJyb3JPcHRpb25zIiwicmVzb2x2ZVJlZ2lvbmFsRW5kcG9pbnRzRmxhZyIsIm9yaWdpbmFsQ29uZmlnIiwib3B0aW9ucyIsInJlc29sdmVkIiwiY2xpZW50Q29uZmlnIiwiY29kZSIsIm1lc3NhZ2UiLCJoYXNPd25Qcm9wZXJ0eSIsImVudiIsInByb2ZpbGUiLCJnZXRQcm9maWxlc0Zyb21TaGFyZWRDb25maWciLCJpbmlMb2FkZXIiLCJBV1NfUFJPRklMRSIsImRlZmF1bHRQcm9maWxlIiwic2hhcmVkQ29uZmlnIiwiQ2hhaW5hYmxlVGVtcG9yYXJ5Q3JlZGVudGlhbHMiLCJpbmhlcml0IiwiQ3JlZGVudGlhbHMiLCJjb25zdHJ1Y3RvciIsImVycm9yQ29kZSIsImV4cGlyZWQiLCJ0b2tlbkNvZGVGbiIsInBhcmFtcyIsImNvcHkiLCJSb2xlQXJuIiwiUm9sZVNlc3Npb25OYW1lIiwiU2VyaWFsTnVtYmVyIiwiY29uZmlnIiwibWVyZ2UiLCJjcmVkZW50aWFscyIsIm1hc3RlckNyZWRlbnRpYWxzIiwic3RzQ29uZmlnIiwic2VydmljZSIsInJlZnJlc2giLCJjYWxsYmFjayIsImNvYWxlc2NlUmVmcmVzaCIsImZuIiwibG9hZCIsInNlbGYiLCJvcGVyYXRpb24iLCJnZXRUb2tlbkNvZGUiLCJlcnIiLCJ0b2tlbkNvZGUiLCJUb2tlbkNvZGUiLCJjcmVkZW50aWFsc0Zyb20iLCJ0b2tlbiIsIkNvZ25pdG9JZGVudGl0eUNyZWRlbnRpYWxzIiwibG9jYWxTdG9yYWdlS2V5IiwiaWQiLCJwcm92aWRlcnMiLCJfaWRlbnRpdHlJZCIsIl9jbGllbnRDb25maWciLCJsb2FkQ2FjaGVkSWQiLCJJZGVudGl0eUlkIiwiaWRlbnRpdHlJZCIsImNyZWF0ZUNsaWVudHMiLCJnZXRJZCIsImNsZWFySWRPbk5vdEF1dGhvcml6ZWQiLCJnZXRDcmVkZW50aWFsc0Zyb21TVFMiLCJnZXRDcmVkZW50aWFsc0ZvcklkZW50aXR5IiwiY2xlYXJDYWNoZWRJZCIsImNsZWFyQ2FjaGUiLCJwb29sSWQiLCJJZGVudGl0eVBvb2xJZCIsImxvZ2luSWQiLCJMb2dpbklkIiwic3RvcmFnZSIsImNvZ25pdG8iLCJsb2FkQ3JlZGVudGlhbHMiLCJhY2Nlc3NLZXlJZCIsIkFjY2Vzc0tleUlkIiwic2VjcmV0QWNjZXNzS2V5IiwiU2VjcmV0S2V5Iiwic2Vzc2lvblRva2VuIiwiU2Vzc2lvblRva2VuIiwiZXhwaXJlVGltZSIsIkV4cGlyYXRpb24iLCJjYWNoZUlkIiwiZ2V0T3BlbklkVG9rZW4iLCJXZWJJZGVudGl0eVRva2VuIiwiVG9rZW4iLCJ3ZWJJZGVudGl0eUNyZWRlbnRpYWxzIiwid2ViRXJyIiwic3RzIiwiZ2V0U3RvcmFnZSIsIkxvZ2lucyIsImFjdHVhbFByb3ZpZGVycyIsImtleXMiLCJzcGxpdCIsImZpbHRlciIsIm4iLCJXZWJJZGVudGl0eUNyZWRlbnRpYWxzIiwiY29nbml0b0NvbmZpZyIsInNldFN0b3JhZ2UiLCJqb2luIiwidmFsIiwiXyIsIndpbmRvdyIsImxvY2FsU3RvcmFnZSIsIlNBTUxDcmVkZW50aWFscyIsImFzc3VtZVJvbGVXaXRoU0FNTCIsIlRlbXBvcmFyeUNyZWRlbnRpYWxzIiwibG9hZE1hc3RlckNyZWRlbnRpYWxzIiwiYXNzdW1lUm9sZSIsImdldFNlc3Npb25Ub2tlbiIsImFzc3VtZVJvbGVXaXRoV2ViSWRlbnRpdHkiLCJldmVudE1lc3NhZ2VDaHVua2VyIiwicGFyc2VFdmVudCIsImJvZHkiLCJwYXJzZXIiLCJldmVudE1lc3NhZ2VzIiwiZXZlbnRzIiwicHVzaCIsIm1lc3NhZ2VzIiwicmVhZEludDMyQkUiLCJzbGljZSIsInRvQnVmZmVyIiwiSW50NjQiLCJieXRlcyIsImlzQnVmZmVyIiwibmVnYXRlIiwiZnJvbU51bWJlciIsIm51bWJlciIsInJlbWFpbmluZyIsImFicyIsInJvdW5kIiwidmFsdWVPZiIsIm5lZ2F0aXZlIiwicGFyc2VJbnQiLCJTdHJpbmciLCJwYXJzZU1lc3NhZ2UiLCJzaGFwZSIsInBhcnNlZE1lc3NhZ2UiLCJtZXNzYWdlVHlwZSIsImhlYWRlcnMiLCJ2YWx1ZSIsInBhcnNlRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJuYW1lIiwiZXZlbnRUeXBlIiwiZXZlbnRNb2RlbCIsIm1lbWJlcnMiLCJyZXN1bHQiLCJldmVudFBheWxvYWRNZW1iZXJOYW1lIiwicGF5bG9hZFNoYXBlIiwidHlwZSIsInBhcnNlIiwiZXZlbnRIZWFkZXJOYW1lcyIsImV2ZW50SGVhZGVyTWVtYmVyTmFtZXMiLCJ0b1R5cGUiLCJvdXRwdXQiLCJzcGxpdE1lc3NhZ2UiLCJCT09MRUFOX1RBRyIsIkJZVEVfVEFHIiwiU0hPUlRfVEFHIiwiSU5UX1RBRyIsIkxPTkdfVEFHIiwiQklOQVJZX1RBRyIsIlNUUklOR19UQUciLCJUSU1FU1RBTVBfVEFHIiwiVVVJRF9UQUciLCJwYXJzZUhlYWRlcnMiLCJuYW1lTGVuZ3RoIiwicmVhZFVJbnQ4IiwicmVhZEludDgiLCJyZWFkSW50MTZCRSIsImJpbmFyeUxlbmd0aCIsInJlYWRVSW50MTZCRSIsInN0cmluZ0xlbmd0aCIsIkRhdGUiLCJ1dWlkQ2hhcnMiLCJzdWJzdHIiLCJwYXJzZWQiLCJQUkVMVURFX0xFTkdUSCIsInJlYWRVSW50MzJCRSIsImV4cGVjdGVkUHJlbHVkZUNoZWNrc3VtIiwiUFJFTFVERV9NRU1CRVJfTEVOR1RIIiwiY3JjMzIiLCJleHBlY3RlZE1lc3NhZ2VDaGVja3N1bSIsImhlYWRlcnNFbmQiLCJFdmVudEVtaXR0ZXIiLCJYSFJDbGllbnQiLCJoYW5kbGVSZXF1ZXN0IiwiaHR0cFJlcXVlc3QiLCJodHRwT3B0aW9ucyIsImVyckNhbGxiYWNrIiwiZW5kcG9pbnQiLCJlbWl0dGVyIiwiaHJlZiIsInByb3RvY29sIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aCIsInhociIsIlhNTEh0dHBSZXF1ZXN0IiwiaGVhZGVyc0VtaXR0ZWQiLCJzdHJlYW0iLCJhZGRFdmVudExpc3RlbmVyIiwic3RhdHVzIiwicmVhZHlTdGF0ZSIsIkhFQURFUlNfUkVDRUlWRUQiLCJzdGF0dXNDb2RlIiwiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzIiwiZW1pdCIsInN0YXR1c1RleHQiLCJET05FIiwiZmluaXNoUmVxdWVzdCIsInVwbG9hZCIsImV2dCIsIm9wZW4iLCJtZXRob2QiLCJ4aHJBc3luYyIsImVhY2giLCJzZXRSZXF1ZXN0SGVhZGVyIiwidGltZW91dCIsInhocldpdGhDcmVkZW50aWFscyIsIndpdGhDcmVkZW50aWFscyIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJyYXdIZWFkZXJzIiwiYXJyYXlFYWNoIiwibGluZSIsInN1YnN0cmluZyIsInJlc3BvbnNlIiwiYWIiLCJ2aWV3IiwicmVzcG9uc2VUZXh0IiwiSHR0cENsaWVudCIsInN0cmVhbXNBcGlWZXJzaW9uIiwibm93IiwicGVyZm9ybWFuY2UiLCJTZWNyZXRBY2Nlc3NLZXkiLCJtYWtlVW5hdXRoZW50aWNhdGVkUmVxdWVzdCIsInNldHVwUmVxdWVzdExpc3RlbmVycyIsInJlcXVlc3QiLCJhZGRMaXN0ZW5lciIsIm9wdEluUmVnaW9uYWxFbmRwb2ludCIsInJlcSIsInN0c1JlZ2lvbmFsRW5kcG9pbnRzIiwiX29yaWdpbmFsQ29uZmlnIiwiaXNHbG9iYWxFbmRwb2ludCIsInJlZ2lvbiIsImluc2VydFBvaW50IiwicmVnaW9uYWxFbmRwb2ludCIsInVwZGF0ZUVuZHBvaW50IiwiU2hhcGUiLCJEb21YbWxQYXJzZXIiLCJnZXRFbGVtZW50QnlUYWdOYW1lIiwieG1sIiwidGFnIiwiZWxlbWVudHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImlMZW4iLCJwYXJlbnROb2RlIiwicGFyc2VYbWwiLCJwYXJzZVN0cnVjdHVyZSIsInBhcnNlTWFwIiwieG1sS2V5IiwieG1sVmFsdWUiLCJ0YWdOYW1lIiwiZmxhdHRlbmVkIiwiY2hpbGQiLCJmaXJzdEVsZW1lbnRDaGlsZCIsIm5vZGVOYW1lIiwidGV4dENvbnRlbnQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJwYXJzZUxpc3QiLCJtZW1iZXIiLCJ1bmRlZmluZWQiLCJwYXJzZVVua25vd24iLCJjaGlsZE5vZGVzIiwicGFyc2VTY2FsYXIiLCJnZXRBdHRyaWJ1dGUiLCJjcmVhdGUiLCJ0ZXh0IiwibWVtYmVyTmFtZSIsIm1lbWJlclNoYXBlIiwiaXNYbWxBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVzIiwieG1sQ2hpbGQiLCJhcGkiLCJ4bWxOb0RlZmF1bHRMaXN0cyIsImRlZmF1bHRWYWx1ZSIsInJlcGxhY2UiLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJzeW50YXhFcnJvciIsIm9yaWdpbmFsRXJyb3IiLCJyZXRyeWFibGUiLCJkb2N1bWVudEVsZW1lbnQiLCJpc0Vycm9yIiwiZXJyb3JFbGVtZW50IiwiQWN0aXZlWE9iamVjdCIsImFzeW5jIiwibG9hZFhNTCIsIm1ldGFkYXRhIiwiUmVzcG9uc2VNZXRhZGF0YSIsImI2NCIsInBsYWNlSG9sZGVyc0NvdW50IiwidG9CeXRlQXJyYXkiLCJqIiwibCIsInRtcCIsInBsYWNlSG9sZGVycyIsImFyciIsImxlbiIsIkFyciIsIkwiLCJyZXZMb29rdXAiLCJjaGFyQ29kZUF0IiwiZnJvbUJ5dGVBcnJheSIsInVpbnQ4IiwiZXh0cmFCeXRlcyIsInBhcnRzIiwibGVuMiIsImVuY29kZUNodW5rIiwibG9va3VwIiwiQXJyYXkiLCJzdGFydCIsImVuZCIsIm51bSIsImJhc2U2NCIsImllZWU3NTQiLCJpc0FycmF5Iiwia01heExlbmd0aCIsIlRZUEVEX0FSUkFZX1NVUFBPUlQiLCJjcmVhdGVCdWZmZXIiLCJ0aGF0IiwiUmFuZ2VFcnJvciIsIl9fcHJvdG9fXyIsImVuY29kaW5nT3JPZmZzZXQiLCJhbGxvY1Vuc2FmZSIsImZyb20iLCJUeXBlRXJyb3IiLCJmcm9tQXJyYXlCdWZmZXIiLCJhcnJheSIsImZyb21BcnJheUxpa2UiLCJmcm9tU3RyaW5nIiwic3RyaW5nIiwiaXNFbmNvZGluZyIsImFjdHVhbCIsImZyb21PYmplY3QiLCJvYmoiLCJjaGVja2VkIiwiaXNuYW4iLCJhc3NlcnRTaXplIiwic2l6ZSIsImxvd2VyZWRDYXNlIiwidXRmOFRvQnl0ZXMiLCJiYXNlNjRUb0J5dGVzIiwic2xvd1RvU3RyaW5nIiwiaGV4U2xpY2UiLCJ1dGY4U2xpY2UiLCJhc2NpaVNsaWNlIiwibGF0aW4xU2xpY2UiLCJiYXNlNjRTbGljZSIsInV0ZjE2bGVTbGljZSIsInN3YXAiLCJtIiwiYmlkaXJlY3Rpb25hbEluZGV4T2YiLCJkaXIiLCJpc05hTiIsImFycmF5SW5kZXhPZiIsImxhc3RJbmRleE9mIiwiaW5kZXhTaXplIiwiYXJyTGVuZ3RoIiwidmFsTGVuZ3RoIiwicmVhZCIsImJ1ZiIsImZvdW5kSW5kZXgiLCJmb3VuZCIsImhleFdyaXRlIiwiTnVtYmVyIiwic3RyTGVuIiwidXRmOFdyaXRlIiwiYmxpdEJ1ZmZlciIsImFzY2lpV3JpdGUiLCJhc2NpaVRvQnl0ZXMiLCJzdHIiLCJieXRlQXJyYXkiLCJsYXRpbjFXcml0ZSIsImJhc2U2NFdyaXRlIiwidWNzMldyaXRlIiwidXRmMTZsZVRvQnl0ZXMiLCJ1bml0cyIsImhpIiwibG8iLCJtaW4iLCJyZXMiLCJzZWNvbmRCeXRlIiwidGhpcmRCeXRlIiwiZm91cnRoQnl0ZSIsInRlbXBDb2RlUG9pbnQiLCJmaXJzdEJ5dGUiLCJjb2RlUG9pbnQiLCJieXRlc1BlclNlcXVlbmNlIiwiZGVjb2RlQ29kZVBvaW50c0FycmF5IiwiY29kZVBvaW50cyIsIk1BWF9BUkdVTUVOVFNfTEVOR1RIIiwiZnJvbUNoYXJDb2RlIiwiYXBwbHkiLCJnIiwidHlwZWRBcnJheVN1cHBvcnQiLCJmb28iLCJzdWJhcnJheSIsInBvb2xTaXplIiwiX2F1Z21lbnQiLCJTeW1ib2wiLCJzcGVjaWVzIiwiYWxsb2MiLCJmaWxsIiwiYWxsb2NVbnNhZmVTbG93IiwiX2lzQnVmZmVyIiwiY29tcGFyZSIsInkiLCJjb25jYXQiLCJsaXN0IiwicG9zIiwic3dhcDE2Iiwic3dhcDMyIiwic3dhcDY0IiwiYXJndW1lbnRzIiwiZXF1YWxzIiwiaW5zcGVjdCIsIm1heCIsIm1hdGNoIiwidGFyZ2V0IiwidGhpc1N0YXJ0IiwidGhpc0VuZCIsInRoaXNDb3B5IiwidGFyZ2V0Q29weSIsImluY2x1ZGVzIiwiaXNGaW5pdGUiLCJ0b0pTT04iLCJfYXJyIiwicmV0IiwidG9IZXgiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50Iiwib2JqZWN0V3JpdGVVSW50MTYiLCJsaXR0bGVFbmRpYW4iLCJvYmplY3RXcml0ZVVJbnQzMiIsImNoZWNrSUVFRTc1NCIsIndyaXRlRmxvYXQiLCJub0Fzc2VydCIsIndyaXRlRG91YmxlIiwibmV3QnVmIiwic2xpY2VMZW4iLCJyZWFkVUludExFIiwibXVsIiwicmVhZFVJbnRCRSIsInJlYWRVSW50MTZMRSIsInJlYWRVSW50MzJMRSIsInJlYWRJbnRMRSIsInJlYWRJbnRCRSIsInJlYWRJbnQxNkxFIiwicmVhZEludDMyTEUiLCJyZWFkRmxvYXRMRSIsInJlYWRGbG9hdEJFIiwicmVhZERvdWJsZUxFIiwicmVhZERvdWJsZUJFIiwid3JpdGVVSW50TEUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVUludDgiLCJ3cml0ZVVJbnQxNkxFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVUludDMyTEUiLCJ3cml0ZVVJbnQzMkJFIiwid3JpdGVJbnRMRSIsImxpbWl0Iiwic3ViIiwid3JpdGVJbnRCRSIsIndyaXRlSW50OCIsIndyaXRlSW50MTZMRSIsIndyaXRlSW50MTZCRSIsIndyaXRlSW50MzJMRSIsIndyaXRlSW50MzJCRSIsIndyaXRlRmxvYXRMRSIsIndyaXRlRmxvYXRCRSIsIndyaXRlRG91YmxlTEUiLCJ3cml0ZURvdWJsZUJFIiwidGFyZ2V0U3RhcnQiLCJJTlZBTElEX0JBU0U2NF9SRSIsIkluZmluaXR5IiwibGVhZFN1cnJvZ2F0ZSIsImJhc2U2NGNsZWFuIiwic3RyaW5ndHJpbSIsInRyaW0iLCJzcmMiLCJkc3QiLCJpc0xFIiwibUxlbiIsIm5CeXRlcyIsImVMZW4iLCJlTWF4IiwiZUJpYXMiLCJuQml0cyIsIk5hTiIsInJ0IiwibG9nIiwiTE4yIiwiX2V2ZW50cyIsIl9tYXhMaXN0ZW5lcnMiLCJpc0Z1bmN0aW9uIiwiaXNPYmplY3QiLCJpc1VuZGVmaW5lZCIsImRlZmF1bHRNYXhMaXN0ZW5lcnMiLCJzZXRNYXhMaXN0ZW5lcnMiLCJpc051bWJlciIsImVyIiwiaGFuZGxlciIsImFyZ3MiLCJsaXN0ZW5lcnMiLCJjb250ZXh0IiwibGlzdGVuZXIiLCJuZXdMaXN0ZW5lciIsIndhcm5lZCIsImNvbnNvbGUiLCJ0cmFjZSIsIm9uIiwib25jZSIsImZpcmVkIiwicmVtb3ZlTGlzdGVuZXIiLCJzcGxpY2UiLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJsaXN0ZW5lckNvdW50IiwiZXZsaXN0ZW5lciIsInByb3AiLCJxcyIsInNlcCIsImVxIiwicmVnZXhwIiwibWF4S2V5cyIsImtzdHIiLCJ2c3RyIiwidiIsImlkeCIsImRlY29kZVVSSUNvbXBvbmVudCIsInN0cmluZ2lmeVByaW1pdGl2ZSIsIm1hcCIsImtzIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiZGVjb2RlIiwiZW5jb2RlIiwic3RyaW5naWZ5Iiwicm9vdCIsIm5vZGVUeXBlIiwiZnJlZUdsb2JhbCIsImdsb2JhbCIsInB1bnljb2RlIiwibWF4SW50IiwiYmFzZSIsInRNaW4iLCJ0TWF4Iiwic2tldyIsImRhbXAiLCJpbml0aWFsQmlhcyIsImluaXRpYWxOIiwiZGVsaW1pdGVyIiwicmVnZXhQdW55Y29kZSIsInJlZ2V4Tm9uQVNDSUkiLCJyZWdleFNlcGFyYXRvcnMiLCJlcnJvcnMiLCJiYXNlTWludXNUTWluIiwic3RyaW5nRnJvbUNoYXJDb2RlIiwibWFwRG9tYWluIiwidWNzMmRlY29kZSIsImV4dHJhIiwiY291bnRlciIsInVjczJlbmNvZGUiLCJkaWdpdFRvQmFzaWMiLCJkaWdpdCIsImZsYWciLCJhZGFwdCIsImRlbHRhIiwibnVtUG9pbnRzIiwiZmlyc3RUaW1lIiwiYmFzaWMiLCJpbmRleCIsIm9sZGkiLCJiYXNlTWludXNUIiwiaW5wdXRMZW5ndGgiLCJiaWFzIiwiaGFuZGxlZENQQ291bnQiLCJiYXNpY0xlbmd0aCIsImN1cnJlbnRWYWx1ZSIsImhhbmRsZWRDUENvdW50UGx1c09uZSIsInFNaW51c1QiLCJ0b0FTQ0lJIiwidGVzdCIsInRvVW5pY29kZSIsIlVybCIsInNsYXNoZXMiLCJhdXRoIiwiaG9zdCIsInNlYXJjaCIsInF1ZXJ5IiwicGF0aG5hbWUiLCJ1cmxQYXJzZSIsInJlc29sdmUiLCJ1cmxSZXNvbHZlIiwic291cmNlIiwicmVsYXRpdmUiLCJyZXNvbHZlT2JqZWN0IiwidXJsUmVzb2x2ZU9iamVjdCIsImZvcm1hdCIsInVybEZvcm1hdCIsImlzU3RyaW5nIiwicHJvdG9jb2xQYXR0ZXJuIiwicG9ydFBhdHRlcm4iLCJ1bndpc2UiLCJhdXRvRXNjYXBlIiwibm9uSG9zdENoYXJzIiwiaG9zdEVuZGluZ0NoYXJzIiwiaG9zdG5hbWVQYXJ0UGF0dGVybiIsImhvc3RuYW1lUGFydFN0YXJ0IiwidW5zYWZlUHJvdG9jb2wiLCJob3N0bGVzc1Byb3RvY29sIiwic2xhc2hlZFByb3RvY29sIiwicGFyc2VRdWVyeVN0cmluZyIsInNsYXNoZXNEZW5vdGVIb3N0IiwiaXNOdWxsIiwicmVzdCIsInByb3RvIiwiZXhlYyIsImxvd2VyUHJvdG8iLCJhdFNpZ24iLCJob3N0RW5kIiwiaGVjIiwicGFyc2VIb3N0IiwiaXB2Nkhvc3RuYW1lIiwiaG9zdHBhcnRzIiwicGFydCIsIm5ld3BhcnQiLCJ2YWxpZFBhcnRzIiwibm90SG9zdCIsImJpdCIsInVuc2hpZnQiLCJkb21haW5BcnJheSIsIm5ld091dCIsInAiLCJoIiwiYWUiLCJlc2MiLCJlc2NhcGUiLCJxbSIsImNoYXJBdCIsInJlbCIsImZvckVhY2giLCJyZWxQYXRoIiwiaXNTb3VyY2VBYnMiLCJpc1JlbEFicyIsIm11c3RFbmRBYnMiLCJyZW1vdmVBbGxEb3RzIiwic3JjUGF0aCIsInBzeWNob3RpYyIsInBvcCIsImlzTnVsbE9yVW5kZWZpbmVkIiwiYXV0aEluSG9zdCIsImxhc3QiLCJoYXNUcmFpbGluZ1NsYXNoIiwidXAiLCJpc0Fic29sdXRlIl0sInNvdXJjZVJvb3QiOiIifQ==