geekin-devtoys 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,14 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const vl=require("element-plus"),A=require("vue"),Il=require("../_plugin-vue_export-helper-BHFhmbuH.js");var sl=typeof document<"u"?document.currentScript:null,Tl="0123456789abcdefghijklmnopqrstuvwxyz";function U(t){return Tl.charAt(t)}function Hl(t,l){return t&l}function q(t,l){return t|l}function Wl(t,l){return t^l}function al(t,l){return t&~l}function Fl(t){if(t==0)return-1;var l=0;return(t&65535)==0&&(t>>=16,l+=16),(t&255)==0&&(t>>=8,l+=8),(t&15)==0&&(t>>=4,l+=4),(t&3)==0&&(t>>=2,l+=2),(t&1)==0&&++l,l}function kl(t){for(var l=0;t!=0;)t&=t-1,++l;return l}var z="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Kl="=";function D(t){var l,i,Z="";for(l=0;l+3<=t.length;l+=3)i=parseInt(t.substring(l,l+3),16),Z+=z.charAt(i>>6)+z.charAt(i&63);for(l+1==t.length?(i=parseInt(t.substring(l,l+1),16),Z+=z.charAt(i<<2)):l+2==t.length&&(i=parseInt(t.substring(l,l+2),16),Z+=z.charAt(i>>2)+z.charAt((i&3)<<4));(Z.length&3)>0;)Z+=Kl;return Z}function Vl(t){var l="",i,Z=0,d=0;for(i=0;i<t.length&&t.charAt(i)!=Kl;++i){var b=z.indexOf(t.charAt(i));b<0||(Z==0?(l+=U(b>>2),d=b&3,Z=1):Z==1?(l+=U(d<<2|b>>4),d=b&15,Z=2):Z==2?(l+=U(d),l+=U(b>>2),d=b&3,Z=3):(l+=U(d<<2|b>>4),l+=U(b&15),Z=0))}return Z==1&&(l+=U(d<<2)),l}var C,Cl={decode:function(t){var l;if(C===void 0){var i="0123456789ABCDEF",Z=` \f
2
+ \r  \u2028\u2029`;for(C={},l=0;l<16;++l)C[i.charAt(l)]=l;for(i=i.toLowerCase(),l=10;l<16;++l)C[i.charAt(l)]=l;for(l=0;l<Z.length;++l)C[Z.charAt(l)]=-1}var d=[],b=0,m=0;for(l=0;l<t.length;++l){var s=t.charAt(l);if(s=="=")break;if(s=C[s],s!=-1){if(s===void 0)throw new Error("Illegal character at offset "+l);b|=s,++m>=2?(d[d.length]=b,b=0,m=0):b<<=4}}if(m)throw new Error("Hex encoding incomplete: 4 bits missing");return d}},H,hl={decode:function(t){var l;if(H===void 0){var i="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",Z=`= \f
3
+ \r  \u2028\u2029`;for(H=Object.create(null),l=0;l<64;++l)H[i.charAt(l)]=l;for(H["-"]=62,H._=63,l=0;l<Z.length;++l)H[Z.charAt(l)]=-1}var d=[],b=0,m=0;for(l=0;l<t.length;++l){var s=t.charAt(l);if(s=="=")break;if(s=H[s],s!=-1){if(s===void 0)throw new Error("Illegal character at offset "+l);b|=s,++m>=4?(d[d.length]=b>>16,d[d.length]=b>>8&255,d[d.length]=b&255,b=0,m=0):b<<=6}}switch(m){case 1:throw new Error("Base64 encoding incomplete: at least 2 bits missing");case 2:d[d.length]=b>>10;break;case 3:d[d.length]=b>>16,d[d.length]=b>>8&255;break}return d},re:/-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/,unarmor:function(t){var l=hl.re.exec(t);if(l)if(l[1])t=l[1];else if(l[2])t=l[2];else throw new Error("RegExp out of sync");return hl.decode(t)}},g=1e13,M=(function(){function t(l){this.buf=[+l||0]}return t.prototype.mulAdd=function(l,i){var Z=this.buf,d=Z.length,b,m;for(b=0;b<d;++b)m=Z[b]*l+i,m<g?i=0:(i=0|m/g,m-=i*g),Z[b]=m;i>0&&(Z[b]=i)},t.prototype.sub=function(l){var i=this.buf,Z=i.length,d,b;for(d=0;d<Z;++d)b=i[d]-l,b<0?(b+=g,l=1):l=0,i[d]=b;for(;i[i.length-1]===0;)i.pop()},t.prototype.toString=function(l){if((l||10)!=10)throw new Error("only base 10 is supported");for(var i=this.buf,Z=i[i.length-1].toString(),d=i.length-2;d>=0;--d)Z+=(g+i[d]).toString().substring(1);return Z},t.prototype.valueOf=function(){for(var l=this.buf,i=0,Z=l.length-1;Z>=0;--Z)i=i*g+l[Z];return i},t.prototype.simplify=function(){var l=this.buf;return l.length==1?l[0]:this},t})(),Nl="…",gl=/^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/,zl=/^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/;function P(t,l){return t.length>l&&(t=t.substring(0,l)+Nl),t}var cl=(function(){function t(l,i){this.hexDigits="0123456789ABCDEF",l instanceof t?(this.enc=l.enc,this.pos=l.pos):(this.enc=l,this.pos=i)}return t.prototype.get=function(l){if(l===void 0&&(l=this.pos++),l>=this.enc.length)throw new Error("Requesting byte offset ".concat(l," on a stream of length ").concat(this.enc.length));return typeof this.enc=="string"?this.enc.charCodeAt(l):this.enc[l]},t.prototype.hexByte=function(l){return this.hexDigits.charAt(l>>4&15)+this.hexDigits.charAt(l&15)},t.prototype.hexDump=function(l,i,Z){for(var d="",b=l;b<i;++b)if(d+=this.hexByte(this.get(b)),Z!==!0)switch(b&15){case 7:d+=" ";break;case 15:d+=`
4
+ `;break;default:d+=" "}return d},t.prototype.isASCII=function(l,i){for(var Z=l;Z<i;++Z){var d=this.get(Z);if(d<32||d>176)return!1}return!0},t.prototype.parseStringISO=function(l,i){for(var Z="",d=l;d<i;++d)Z+=String.fromCharCode(this.get(d));return Z},t.prototype.parseStringUTF=function(l,i){for(var Z="",d=l;d<i;){var b=this.get(d++);b<128?Z+=String.fromCharCode(b):b>191&&b<224?Z+=String.fromCharCode((b&31)<<6|this.get(d++)&63):Z+=String.fromCharCode((b&15)<<12|(this.get(d++)&63)<<6|this.get(d++)&63)}return Z},t.prototype.parseStringBMP=function(l,i){for(var Z="",d,b,m=l;m<i;)d=this.get(m++),b=this.get(m++),Z+=String.fromCharCode(d<<8|b);return Z},t.prototype.parseTime=function(l,i,Z){var d=this.parseStringISO(l,i),b=(Z?gl:zl).exec(d);return b?(Z&&(b[1]=+b[1],b[1]+=+b[1]<70?2e3:1900),d=b[1]+"-"+b[2]+"-"+b[3]+" "+b[4],b[5]&&(d+=":"+b[5],b[6]&&(d+=":"+b[6],b[7]&&(d+="."+b[7]))),b[8]&&(d+=" UTC",b[8]!="Z"&&(d+=b[8],b[9]&&(d+=":"+b[9]))),d):"Unrecognized time: "+d},t.prototype.parseInteger=function(l,i){for(var Z=this.get(l),d=Z>127,b=d?255:0,m,s="";Z==b&&++l<i;)Z=this.get(l);if(m=i-l,m===0)return d?-1:0;if(m>4){for(s=Z,m<<=3;((+s^b)&128)==0;)s=+s<<1,--m;s="("+m+` bit)
5
+ `}d&&(Z=Z-256);for(var c=new M(Z),e=l+1;e<i;++e)c.mulAdd(256,this.get(e));return s+c.toString()},t.prototype.parseBitString=function(l,i,Z){for(var d=this.get(l),b=(i-l-1<<3)-d,m="("+b+` bit)
6
+ `,s="",c=l+1;c<i;++c){for(var e=this.get(c),h=c==i-1?d:0,n=7;n>=h;--n)s+=e>>n&1?"1":"0";if(s.length>Z)return m+P(s,Z)}return m+s},t.prototype.parseOctetString=function(l,i,Z){if(this.isASCII(l,i))return P(this.parseStringISO(l,i),Z);var d=i-l,b="("+d+` byte)
7
+ `;Z/=2,d>Z&&(i=l+Z);for(var m=l;m<i;++m)b+=this.hexByte(this.get(m));return d>Z&&(b+=Nl),b},t.prototype.parseOID=function(l,i,Z){for(var d="",b=new M,m=0,s=l;s<i;++s){var c=this.get(s);if(b.mulAdd(128,c&127),m+=7,!(c&128)){if(d==="")if(b=b.simplify(),b instanceof M)b.sub(80),d="2."+b.toString();else{var e=b<80?b<40?0:1:2;d=e+"."+(b-e*40)}else d+="."+b.toString();if(d.length>Z)return P(d,Z);b=new M,m=0}}return m>0&&(d+=".incomplete"),d},t})(),Pl=(function(){function t(l,i,Z,d,b){if(!(d instanceof pl))throw new Error("Invalid tag value.");this.stream=l,this.header=i,this.length=Z,this.tag=d,this.sub=b}return t.prototype.typeName=function(){switch(this.tag.tagClass){case 0:switch(this.tag.tagNumber){case 0:return"EOC";case 1:return"BOOLEAN";case 2:return"INTEGER";case 3:return"BIT_STRING";case 4:return"OCTET_STRING";case 5:return"NULL";case 6:return"OBJECT_IDENTIFIER";case 7:return"ObjectDescriptor";case 8:return"EXTERNAL";case 9:return"REAL";case 10:return"ENUMERATED";case 11:return"EMBEDDED_PDV";case 12:return"UTF8String";case 16:return"SEQUENCE";case 17:return"SET";case 18:return"NumericString";case 19:return"PrintableString";case 20:return"TeletexString";case 21:return"VideotexString";case 22:return"IA5String";case 23:return"UTCTime";case 24:return"GeneralizedTime";case 25:return"GraphicString";case 26:return"VisibleString";case 27:return"GeneralString";case 28:return"UniversalString";case 30:return"BMPString"}return"Universal_"+this.tag.tagNumber.toString();case 1:return"Application_"+this.tag.tagNumber.toString();case 2:return"["+this.tag.tagNumber.toString()+"]";case 3:return"Private_"+this.tag.tagNumber.toString()}},t.prototype.content=function(l){if(this.tag===void 0)return null;l===void 0&&(l=1/0);var i=this.posContent(),Z=Math.abs(this.length);if(!this.tag.isUniversal())return this.sub!==null?"("+this.sub.length+" elem)":this.stream.parseOctetString(i,i+Z,l);switch(this.tag.tagNumber){case 1:return this.stream.get(i)===0?"false":"true";case 2:return this.stream.parseInteger(i,i+Z);case 3:return this.sub?"("+this.sub.length+" elem)":this.stream.parseBitString(i,i+Z,l);case 4:return this.sub?"("+this.sub.length+" elem)":this.stream.parseOctetString(i,i+Z,l);case 6:return this.stream.parseOID(i,i+Z,l);case 16:case 17:return this.sub!==null?"("+this.sub.length+" elem)":"(no elem)";case 12:return P(this.stream.parseStringUTF(i,i+Z),l);case 18:case 19:case 20:case 21:case 22:case 26:return P(this.stream.parseStringISO(i,i+Z),l);case 30:return P(this.stream.parseStringBMP(i,i+Z),l);case 23:case 24:return this.stream.parseTime(i,i+Z,this.tag.tagNumber==23)}return null},t.prototype.toString=function(){return this.typeName()+"@"+this.stream.pos+"[header:"+this.header+",length:"+this.length+",sub:"+(this.sub===null?"null":this.sub.length)+"]"},t.prototype.toPrettyString=function(l){l===void 0&&(l="");var i=l+this.typeName()+" @"+this.stream.pos;if(this.length>=0&&(i+="+"),i+=this.length,this.tag.tagConstructed?i+=" (constructed)":this.tag.isUniversal()&&(this.tag.tagNumber==3||this.tag.tagNumber==4)&&this.sub!==null&&(i+=" (encapsulates)"),i+=`
8
+ `,this.sub!==null){l+=" ";for(var Z=0,d=this.sub.length;Z<d;++Z)i+=this.sub[Z].toPrettyString(l)}return i},t.prototype.posStart=function(){return this.stream.pos},t.prototype.posContent=function(){return this.stream.pos+this.header},t.prototype.posEnd=function(){return this.stream.pos+this.header+Math.abs(this.length)},t.prototype.toHexString=function(){return this.stream.hexDump(this.posStart(),this.posEnd(),!0)},t.decodeLength=function(l){var i=l.get(),Z=i&127;if(Z==i)return Z;if(Z>6)throw new Error("Length over 48 bits not supported at position "+(l.pos-1));if(Z===0)return null;i=0;for(var d=0;d<Z;++d)i=i*256+l.get();return i},t.prototype.getHexStringValue=function(){var l=this.toHexString(),i=this.header*2,Z=this.length*2;return l.substring(i,i+Z)},t.decode=function(l){var i;l instanceof cl?i=l:i=new cl(l,0);var Z=new cl(i),d=new pl(i),b=t.decodeLength(i),m=i.pos,s=m-Z.pos,c=null,e=function(){var n=[];if(b!==null){for(var W=m+b;i.pos<W;)n[n.length]=t.decode(i);if(i.pos!=W)throw new Error("Content size is not correct for container starting at offset "+m)}else try{for(;;){var X=t.decode(i);if(X.tag.isEOC())break;n[n.length]=X}b=m-i.pos}catch(p){throw new Error("Exception while decoding undefined length content: "+p)}return n};if(d.tagConstructed)c=e();else if(d.isUniversal()&&(d.tagNumber==3||d.tagNumber==4))try{if(d.tagNumber==3&&i.get()!=0)throw new Error("BIT STRINGs with unused bits cannot encapsulate.");c=e();for(var h=0;h<c.length;++h)if(c[h].tag.isEOC())throw new Error("EOC is not supposed to be actual content.")}catch{c=null}if(c===null){if(b===null)throw new Error("We can't skip over an invalid tag with undefined length at offset "+m);i.pos=m+Math.abs(b)}return new t(Z,s,b,d,c)},t})(),pl=(function(){function t(l){var i=l.get();if(this.tagClass=i>>6,this.tagConstructed=(i&32)!==0,this.tagNumber=i&31,this.tagNumber==31){var Z=new M;do i=l.get(),Z.mulAdd(128,i&127);while(i&128);this.tagNumber=Z.simplify()}}return t.prototype.isUniversal=function(){return this.tagClass===0},t.prototype.isEOC=function(){return this.tagClass===0&&this.tagNumber===0},t})(),I,jl=0xdeadbeefcafe,Gl=(jl&16777215)==15715070,S=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997],Ql=(1<<26)/S[S.length-1],o=(function(){function t(l,i,Z){l!=null&&(typeof l=="number"?this.fromNumber(l,i,Z):i==null&&typeof l!="string"?this.fromString(l,256):this.fromString(l,i))}return t.prototype.toString=function(l){if(this.s<0)return"-"+this.negate().toString(l);var i;if(l==16)i=4;else if(l==8)i=3;else if(l==2)i=1;else if(l==32)i=5;else if(l==4)i=2;else return this.toRadix(l);var Z=(1<<i)-1,d,b=!1,m="",s=this.t,c=this.DB-s*this.DB%i;if(s-- >0)for(c<this.DB&&(d=this[s]>>c)>0&&(b=!0,m=U(d));s>=0;)c<i?(d=(this[s]&(1<<c)-1)<<i-c,d|=this[--s]>>(c+=this.DB-i)):(d=this[s]>>(c-=i)&Z,c<=0&&(c+=this.DB,--s)),d>0&&(b=!0),b&&(m+=U(d));return b?m:"0"},t.prototype.negate=function(){var l=a();return t.ZERO.subTo(this,l),l},t.prototype.abs=function(){return this.s<0?this.negate():this},t.prototype.compareTo=function(l){var i=this.s-l.s;if(i!=0)return i;var Z=this.t;if(i=Z-l.t,i!=0)return this.s<0?-i:i;for(;--Z>=0;)if((i=this[Z]-l[Z])!=0)return i;return 0},t.prototype.bitLength=function(){return this.t<=0?0:this.DB*(this.t-1)+_(this[this.t-1]^this.s&this.DM)},t.prototype.mod=function(l){var i=a();return this.abs().divRemTo(l,null,i),this.s<0&&i.compareTo(t.ZERO)>0&&l.subTo(i,i),i},t.prototype.modPowInt=function(l,i){var Z;return l<256||i.isEven()?Z=new yl(i):Z=new Yl(i),this.exp(l,Z)},t.prototype.clone=function(){var l=a();return this.copyTo(l),l},t.prototype.intValue=function(){if(this.s<0){if(this.t==1)return this[0]-this.DV;if(this.t==0)return-1}else{if(this.t==1)return this[0];if(this.t==0)return 0}return(this[1]&(1<<32-this.DB)-1)<<this.DB|this[0]},t.prototype.byteValue=function(){return this.t==0?this.s:this[0]<<24>>24},t.prototype.shortValue=function(){return this.t==0?this.s:this[0]<<16>>16},t.prototype.signum=function(){return this.s<0?-1:this.t<=0||this.t==1&&this[0]<=0?0:1},t.prototype.toByteArray=function(){var l=this.t,i=[];i[0]=this.s;var Z=this.DB-l*this.DB%8,d,b=0;if(l-- >0)for(Z<this.DB&&(d=this[l]>>Z)!=(this.s&this.DM)>>Z&&(i[b++]=d|this.s<<this.DB-Z);l>=0;)Z<8?(d=(this[l]&(1<<Z)-1)<<8-Z,d|=this[--l]>>(Z+=this.DB-8)):(d=this[l]>>(Z-=8)&255,Z<=0&&(Z+=this.DB,--l)),(d&128)!=0&&(d|=-256),b==0&&(this.s&128)!=(d&128)&&++b,(b>0||d!=this.s)&&(i[b++]=d);return i},t.prototype.equals=function(l){return this.compareTo(l)==0},t.prototype.min=function(l){return this.compareTo(l)<0?this:l},t.prototype.max=function(l){return this.compareTo(l)>0?this:l},t.prototype.and=function(l){var i=a();return this.bitwiseTo(l,Hl,i),i},t.prototype.or=function(l){var i=a();return this.bitwiseTo(l,q,i),i},t.prototype.xor=function(l){var i=a();return this.bitwiseTo(l,Wl,i),i},t.prototype.andNot=function(l){var i=a();return this.bitwiseTo(l,al,i),i},t.prototype.not=function(){for(var l=a(),i=0;i<this.t;++i)l[i]=this.DM&~this[i];return l.t=this.t,l.s=~this.s,l},t.prototype.shiftLeft=function(l){var i=a();return l<0?this.rShiftTo(-l,i):this.lShiftTo(l,i),i},t.prototype.shiftRight=function(l){var i=a();return l<0?this.lShiftTo(-l,i):this.rShiftTo(l,i),i},t.prototype.getLowestSetBit=function(){for(var l=0;l<this.t;++l)if(this[l]!=0)return l*this.DB+Fl(this[l]);return this.s<0?this.t*this.DB:-1},t.prototype.bitCount=function(){for(var l=0,i=this.s&this.DM,Z=0;Z<this.t;++Z)l+=kl(this[Z]^i);return l},t.prototype.testBit=function(l){var i=Math.floor(l/this.DB);return i>=this.t?this.s!=0:(this[i]&1<<l%this.DB)!=0},t.prototype.setBit=function(l){return this.changeBit(l,q)},t.prototype.clearBit=function(l){return this.changeBit(l,al)},t.prototype.flipBit=function(l){return this.changeBit(l,Wl)},t.prototype.add=function(l){var i=a();return this.addTo(l,i),i},t.prototype.subtract=function(l){var i=a();return this.subTo(l,i),i},t.prototype.multiply=function(l){var i=a();return this.multiplyTo(l,i),i},t.prototype.divide=function(l){var i=a();return this.divRemTo(l,i,null),i},t.prototype.remainder=function(l){var i=a();return this.divRemTo(l,null,i),i},t.prototype.divideAndRemainder=function(l){var i=a(),Z=a();return this.divRemTo(l,i,Z),[i,Z]},t.prototype.modPow=function(l,i){var Z=l.bitLength(),d,b=f(1),m;if(Z<=0)return b;Z<18?d=1:Z<48?d=3:Z<144?d=4:Z<768?d=5:d=6,Z<8?m=new yl(i):i.isEven()?m=new Ml(i):m=new Yl(i);var s=[],c=3,e=d-1,h=(1<<d)-1;if(s[1]=m.convert(this),d>1){var n=a();for(m.sqrTo(s[1],n);c<=h;)s[c]=a(),m.mulTo(n,s[c-2],s[c]),c+=2}var W=l.t-1,X,p=!0,G=a(),R;for(Z=_(l[W])-1;W>=0;){for(Z>=e?X=l[W]>>Z-e&h:(X=(l[W]&(1<<Z+1)-1)<<e-Z,W>0&&(X|=l[W-1]>>this.DB+Z-e)),c=d;(X&1)==0;)X>>=1,--c;if((Z-=c)<0&&(Z+=this.DB,--W),p)s[X].copyTo(b),p=!1;else{for(;c>1;)m.sqrTo(b,G),m.sqrTo(G,b),c-=2;c>0?m.sqrTo(b,G):(R=b,b=G,G=R),m.mulTo(G,s[X],b)}for(;W>=0&&(l[W]&1<<Z)==0;)m.sqrTo(b,G),R=b,b=G,G=R,--Z<0&&(Z=this.DB-1,--W)}return m.revert(b)},t.prototype.modInverse=function(l){var i=l.isEven();if(this.isEven()&&i||l.signum()==0)return t.ZERO;for(var Z=l.clone(),d=this.clone(),b=f(1),m=f(0),s=f(0),c=f(1);Z.signum()!=0;){for(;Z.isEven();)Z.rShiftTo(1,Z),i?((!b.isEven()||!m.isEven())&&(b.addTo(this,b),m.subTo(l,m)),b.rShiftTo(1,b)):m.isEven()||m.subTo(l,m),m.rShiftTo(1,m);for(;d.isEven();)d.rShiftTo(1,d),i?((!s.isEven()||!c.isEven())&&(s.addTo(this,s),c.subTo(l,c)),s.rShiftTo(1,s)):c.isEven()||c.subTo(l,c),c.rShiftTo(1,c);Z.compareTo(d)>=0?(Z.subTo(d,Z),i&&b.subTo(s,b),m.subTo(c,m)):(d.subTo(Z,d),i&&s.subTo(b,s),c.subTo(m,c))}if(d.compareTo(t.ONE)!=0)return t.ZERO;if(c.compareTo(l)>=0)return c.subtract(l);if(c.signum()<0)c.addTo(l,c);else return c;return c.signum()<0?c.add(l):c},t.prototype.pow=function(l){return this.exp(l,new wl)},t.prototype.gcd=function(l){var i=this.s<0?this.negate():this.clone(),Z=l.s<0?l.negate():l.clone();if(i.compareTo(Z)<0){var d=i;i=Z,Z=d}var b=i.getLowestSetBit(),m=Z.getLowestSetBit();if(m<0)return i;for(b<m&&(m=b),m>0&&(i.rShiftTo(m,i),Z.rShiftTo(m,Z));i.signum()>0;)(b=i.getLowestSetBit())>0&&i.rShiftTo(b,i),(b=Z.getLowestSetBit())>0&&Z.rShiftTo(b,Z),i.compareTo(Z)>=0?(i.subTo(Z,i),i.rShiftTo(1,i)):(Z.subTo(i,Z),Z.rShiftTo(1,Z));return m>0&&Z.lShiftTo(m,Z),Z},t.prototype.isProbablePrime=function(l){var i,Z=this.abs();if(Z.t==1&&Z[0]<=S[S.length-1]){for(i=0;i<S.length;++i)if(Z[0]==S[i])return!0;return!1}if(Z.isEven())return!1;for(i=1;i<S.length;){for(var d=S[i],b=i+1;b<S.length&&d<Ql;)d*=S[b++];for(d=Z.modInt(d);i<b;)if(d%S[i++]==0)return!1}return Z.millerRabin(l)},t.prototype.copyTo=function(l){for(var i=this.t-1;i>=0;--i)l[i]=this[i];l.t=this.t,l.s=this.s},t.prototype.fromInt=function(l){this.t=1,this.s=l<0?-1:0,l>0?this[0]=l:l<-1?this[0]=l+this.DV:this.t=0},t.prototype.fromString=function(l,i){var Z;if(i==16)Z=4;else if(i==8)Z=3;else if(i==256)Z=8;else if(i==2)Z=1;else if(i==32)Z=5;else if(i==4)Z=2;else{this.fromRadix(l,i);return}this.t=0,this.s=0;for(var d=l.length,b=!1,m=0;--d>=0;){var s=Z==8?+l[d]&255:Sl(l,d);if(s<0){l.charAt(d)=="-"&&(b=!0);continue}b=!1,m==0?this[this.t++]=s:m+Z>this.DB?(this[this.t-1]|=(s&(1<<this.DB-m)-1)<<m,this[this.t++]=s>>this.DB-m):this[this.t-1]|=s<<m,m+=Z,m>=this.DB&&(m-=this.DB)}Z==8&&(+l[0]&128)!=0&&(this.s=-1,m>0&&(this[this.t-1]|=(1<<this.DB-m)-1<<m)),this.clamp(),b&&t.ZERO.subTo(this,this)},t.prototype.clamp=function(){for(var l=this.s&this.DM;this.t>0&&this[this.t-1]==l;)--this.t},t.prototype.dlShiftTo=function(l,i){var Z;for(Z=this.t-1;Z>=0;--Z)i[Z+l]=this[Z];for(Z=l-1;Z>=0;--Z)i[Z]=0;i.t=this.t+l,i.s=this.s},t.prototype.drShiftTo=function(l,i){for(var Z=l;Z<this.t;++Z)i[Z-l]=this[Z];i.t=Math.max(this.t-l,0),i.s=this.s},t.prototype.lShiftTo=function(l,i){for(var Z=l%this.DB,d=this.DB-Z,b=(1<<d)-1,m=Math.floor(l/this.DB),s=this.s<<Z&this.DM,c=this.t-1;c>=0;--c)i[c+m+1]=this[c]>>d|s,s=(this[c]&b)<<Z;for(var c=m-1;c>=0;--c)i[c]=0;i[m]=s,i.t=this.t+m+1,i.s=this.s,i.clamp()},t.prototype.rShiftTo=function(l,i){i.s=this.s;var Z=Math.floor(l/this.DB);if(Z>=this.t){i.t=0;return}var d=l%this.DB,b=this.DB-d,m=(1<<d)-1;i[0]=this[Z]>>d;for(var s=Z+1;s<this.t;++s)i[s-Z-1]|=(this[s]&m)<<b,i[s-Z]=this[s]>>d;d>0&&(i[this.t-Z-1]|=(this.s&m)<<b),i.t=this.t-Z,i.clamp()},t.prototype.subTo=function(l,i){for(var Z=0,d=0,b=Math.min(l.t,this.t);Z<b;)d+=this[Z]-l[Z],i[Z++]=d&this.DM,d>>=this.DB;if(l.t<this.t){for(d-=l.s;Z<this.t;)d+=this[Z],i[Z++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;Z<l.t;)d-=l[Z],i[Z++]=d&this.DM,d>>=this.DB;d-=l.s}i.s=d<0?-1:0,d<-1?i[Z++]=this.DV+d:d>0&&(i[Z++]=d),i.t=Z,i.clamp()},t.prototype.multiplyTo=function(l,i){var Z=this.abs(),d=l.abs(),b=Z.t;for(i.t=b+d.t;--b>=0;)i[b]=0;for(b=0;b<d.t;++b)i[b+Z.t]=Z.am(0,d[b],i,b,0,Z.t);i.s=0,i.clamp(),this.s!=l.s&&t.ZERO.subTo(i,i)},t.prototype.squareTo=function(l){for(var i=this.abs(),Z=l.t=2*i.t;--Z>=0;)l[Z]=0;for(Z=0;Z<i.t-1;++Z){var d=i.am(Z,i[Z],l,2*Z,0,1);(l[Z+i.t]+=i.am(Z+1,2*i[Z],l,2*Z+1,d,i.t-Z-1))>=i.DV&&(l[Z+i.t]-=i.DV,l[Z+i.t+1]=1)}l.t>0&&(l[l.t-1]+=i.am(Z,i[Z],l,2*Z,0,1)),l.s=0,l.clamp()},t.prototype.divRemTo=function(l,i,Z){var d=l.abs();if(!(d.t<=0)){var b=this.abs();if(b.t<d.t){i?.fromInt(0),Z!=null&&this.copyTo(Z);return}Z==null&&(Z=a());var m=a(),s=this.s,c=l.s,e=this.DB-_(d[d.t-1]);e>0?(d.lShiftTo(e,m),b.lShiftTo(e,Z)):(d.copyTo(m),b.copyTo(Z));var h=m.t,n=m[h-1];if(n!=0){var W=n*(1<<this.F1)+(h>1?m[h-2]>>this.F2:0),X=this.FV/W,p=(1<<this.F1)/W,G=1<<this.F2,R=Z.t,F=R-h,N=i??a();for(m.dlShiftTo(F,N),Z.compareTo(N)>=0&&(Z[Z.t++]=1,Z.subTo(N,Z)),t.ONE.dlShiftTo(h,N),N.subTo(m,m);m.t<h;)m[m.t++]=0;for(;--F>=0;){var k=Z[--R]==n?this.DM:Math.floor(Z[R]*X+(Z[R-1]+G)*p);if((Z[R]+=m.am(0,k,Z,F,0,h))<k)for(m.dlShiftTo(F,N),Z.subTo(N,Z);Z[R]<--k;)Z.subTo(N,Z)}i!=null&&(Z.drShiftTo(h,i),s!=c&&t.ZERO.subTo(i,i)),Z.t=h,Z.clamp(),e>0&&Z.rShiftTo(e,Z),s<0&&t.ZERO.subTo(Z,Z)}}},t.prototype.invDigit=function(){if(this.t<1)return 0;var l=this[0];if((l&1)==0)return 0;var i=l&3;return i=i*(2-(l&15)*i)&15,i=i*(2-(l&255)*i)&255,i=i*(2-((l&65535)*i&65535))&65535,i=i*(2-l*i%this.DV)%this.DV,i>0?this.DV-i:-i},t.prototype.isEven=function(){return(this.t>0?this[0]&1:this.s)==0},t.prototype.exp=function(l,i){if(l>4294967295||l<1)return t.ONE;var Z=a(),d=a(),b=i.convert(this),m=_(l)-1;for(b.copyTo(Z);--m>=0;)if(i.sqrTo(Z,d),(l&1<<m)>0)i.mulTo(d,b,Z);else{var s=Z;Z=d,d=s}return i.revert(Z)},t.prototype.chunkSize=function(l){return Math.floor(Math.LN2*this.DB/Math.log(l))},t.prototype.toRadix=function(l){if(l==null&&(l=10),this.signum()==0||l<2||l>36)return"0";var i=this.chunkSize(l),Z=Math.pow(l,i),d=f(Z),b=a(),m=a(),s="";for(this.divRemTo(d,b,m);b.signum()>0;)s=(Z+m.intValue()).toString(l).substring(1)+s,b.divRemTo(d,b,m);return m.intValue().toString(l)+s},t.prototype.fromRadix=function(l,i){this.fromInt(0),i==null&&(i=10);for(var Z=this.chunkSize(i),d=Math.pow(i,Z),b=!1,m=0,s=0,c=0;c<l.length;++c){var e=Sl(l,c);if(e<0){l.charAt(c)=="-"&&this.signum()==0&&(b=!0);continue}s=i*s+e,++m>=Z&&(this.dMultiply(d),this.dAddOffset(s,0),m=0,s=0)}m>0&&(this.dMultiply(Math.pow(i,m)),this.dAddOffset(s,0)),b&&t.ZERO.subTo(this,this)},t.prototype.fromNumber=function(l,i,Z){if(typeof i=="number")if(l<2)this.fromInt(1);else for(this.fromNumber(l,Z),this.testBit(l-1)||this.bitwiseTo(t.ONE.shiftLeft(l-1),q,this),this.isEven()&&this.dAddOffset(1,0);!this.isProbablePrime(i);)this.dAddOffset(2,0),this.bitLength()>l&&this.subTo(t.ONE.shiftLeft(l-1),this);else{var d=[],b=l&7;d.length=(l>>3)+1,i.nextBytes(d),b>0?d[0]&=(1<<b)-1:d[0]=0,this.fromString(d,256)}},t.prototype.bitwiseTo=function(l,i,Z){var d,b,m=Math.min(l.t,this.t);for(d=0;d<m;++d)Z[d]=i(this[d],l[d]);if(l.t<this.t){for(b=l.s&this.DM,d=m;d<this.t;++d)Z[d]=i(this[d],b);Z.t=this.t}else{for(b=this.s&this.DM,d=m;d<l.t;++d)Z[d]=i(b,l[d]);Z.t=l.t}Z.s=i(this.s,l.s),Z.clamp()},t.prototype.changeBit=function(l,i){var Z=t.ONE.shiftLeft(l);return this.bitwiseTo(Z,i,Z),Z},t.prototype.addTo=function(l,i){for(var Z=0,d=0,b=Math.min(l.t,this.t);Z<b;)d+=this[Z]+l[Z],i[Z++]=d&this.DM,d>>=this.DB;if(l.t<this.t){for(d+=l.s;Z<this.t;)d+=this[Z],i[Z++]=d&this.DM,d>>=this.DB;d+=this.s}else{for(d+=this.s;Z<l.t;)d+=l[Z],i[Z++]=d&this.DM,d>>=this.DB;d+=l.s}i.s=d<0?-1:0,d>0?i[Z++]=d:d<-1&&(i[Z++]=this.DV+d),i.t=Z,i.clamp()},t.prototype.dMultiply=function(l){this[this.t]=this.am(0,l-1,this,0,0,this.t),++this.t,this.clamp()},t.prototype.dAddOffset=function(l,i){if(l!=0){for(;this.t<=i;)this[this.t++]=0;for(this[i]+=l;this[i]>=this.DV;)this[i]-=this.DV,++i>=this.t&&(this[this.t++]=0),++this[i]}},t.prototype.multiplyLowerTo=function(l,i,Z){var d=Math.min(this.t+l.t,i);for(Z.s=0,Z.t=d;d>0;)Z[--d]=0;for(var b=Z.t-this.t;d<b;++d)Z[d+this.t]=this.am(0,l[d],Z,d,0,this.t);for(var b=Math.min(l.t,i);d<b;++d)this.am(0,l[d],Z,d,0,i-d);Z.clamp()},t.prototype.multiplyUpperTo=function(l,i,Z){--i;var d=Z.t=this.t+l.t-i;for(Z.s=0;--d>=0;)Z[d]=0;for(d=Math.max(i-this.t,0);d<l.t;++d)Z[this.t+d-i]=this.am(i-d,l[d],Z,0,0,this.t+d-i);Z.clamp(),Z.drShiftTo(1,Z)},t.prototype.modInt=function(l){if(l<=0)return 0;var i=this.DV%l,Z=this.s<0?l-1:0;if(this.t>0)if(i==0)Z=this[0]%l;else for(var d=this.t-1;d>=0;--d)Z=(i*Z+this[d])%l;return Z},t.prototype.millerRabin=function(l){var i=this.subtract(t.ONE),Z=i.getLowestSetBit();if(Z<=0)return!1;var d=i.shiftRight(Z);l=l+1>>1,l>S.length&&(l=S.length);for(var b=a(),m=0;m<l;++m){b.fromInt(S[Math.floor(Math.random()*S.length)]);var s=b.modPow(d,this);if(s.compareTo(t.ONE)!=0&&s.compareTo(i)!=0){for(var c=1;c++<Z&&s.compareTo(i)!=0;)if(s=s.modPowInt(2,this),s.compareTo(t.ONE)==0)return!1;if(s.compareTo(i)!=0)return!1}}return!0},t.prototype.square=function(){var l=a();return this.squareTo(l),l},t.prototype.gcda=function(l,i){var Z=this.s<0?this.negate():this.clone(),d=l.s<0?l.negate():l.clone();if(Z.compareTo(d)<0){var b=Z;Z=d,d=b}var m=Z.getLowestSetBit(),s=d.getLowestSetBit();if(s<0){i(Z);return}m<s&&(s=m),s>0&&(Z.rShiftTo(s,Z),d.rShiftTo(s,d));var c=function(){(m=Z.getLowestSetBit())>0&&Z.rShiftTo(m,Z),(m=d.getLowestSetBit())>0&&d.rShiftTo(m,d),Z.compareTo(d)>=0?(Z.subTo(d,Z),Z.rShiftTo(1,Z)):(d.subTo(Z,d),d.rShiftTo(1,d)),Z.signum()>0?setTimeout(c,0):(s>0&&d.lShiftTo(s,d),setTimeout(function(){i(d)},0))};setTimeout(c,10)},t.prototype.fromNumberAsync=function(l,i,Z,d){if(typeof i=="number")if(l<2)this.fromInt(1);else{this.fromNumber(l,Z),this.testBit(l-1)||this.bitwiseTo(t.ONE.shiftLeft(l-1),q,this),this.isEven()&&this.dAddOffset(1,0);var b=this,m=function(){b.dAddOffset(2,0),b.bitLength()>l&&b.subTo(t.ONE.shiftLeft(l-1),b),b.isProbablePrime(i)?setTimeout(function(){d()},0):setTimeout(m,0)};setTimeout(m,0)}else{var s=[],c=l&7;s.length=(l>>3)+1,i.nextBytes(s),c>0?s[0]&=(1<<c)-1:s[0]=0,this.fromString(s,256)}},t})(),wl=(function(){function t(){}return t.prototype.convert=function(l){return l},t.prototype.revert=function(l){return l},t.prototype.mulTo=function(l,i,Z){l.multiplyTo(i,Z)},t.prototype.sqrTo=function(l,i){l.squareTo(i)},t})(),yl=(function(){function t(l){this.m=l}return t.prototype.convert=function(l){return l.s<0||l.compareTo(this.m)>=0?l.mod(this.m):l},t.prototype.revert=function(l){return l},t.prototype.reduce=function(l){l.divRemTo(this.m,null,l)},t.prototype.mulTo=function(l,i,Z){l.multiplyTo(i,Z),this.reduce(Z)},t.prototype.sqrTo=function(l,i){l.squareTo(i),this.reduce(i)},t})(),Yl=(function(){function t(l){this.m=l,this.mp=l.invDigit(),this.mpl=this.mp&32767,this.mph=this.mp>>15,this.um=(1<<l.DB-15)-1,this.mt2=2*l.t}return t.prototype.convert=function(l){var i=a();return l.abs().dlShiftTo(this.m.t,i),i.divRemTo(this.m,null,i),l.s<0&&i.compareTo(o.ZERO)>0&&this.m.subTo(i,i),i},t.prototype.revert=function(l){var i=a();return l.copyTo(i),this.reduce(i),i},t.prototype.reduce=function(l){for(;l.t<=this.mt2;)l[l.t++]=0;for(var i=0;i<this.m.t;++i){var Z=l[i]&32767,d=Z*this.mpl+((Z*this.mph+(l[i]>>15)*this.mpl&this.um)<<15)&l.DM;for(Z=i+this.m.t,l[Z]+=this.m.am(0,d,l,i,0,this.m.t);l[Z]>=l.DV;)l[Z]-=l.DV,l[++Z]++}l.clamp(),l.drShiftTo(this.m.t,l),l.compareTo(this.m)>=0&&l.subTo(this.m,l)},t.prototype.mulTo=function(l,i,Z){l.multiplyTo(i,Z),this.reduce(Z)},t.prototype.sqrTo=function(l,i){l.squareTo(i),this.reduce(i)},t})(),Ml=(function(){function t(l){this.m=l,this.r2=a(),this.q3=a(),o.ONE.dlShiftTo(2*l.t,this.r2),this.mu=this.r2.divide(l)}return t.prototype.convert=function(l){if(l.s<0||l.t>2*this.m.t)return l.mod(this.m);if(l.compareTo(this.m)<0)return l;var i=a();return l.copyTo(i),this.reduce(i),i},t.prototype.revert=function(l){return l},t.prototype.reduce=function(l){for(l.drShiftTo(this.m.t-1,this.r2),l.t>this.m.t+1&&(l.t=this.m.t+1,l.clamp()),this.mu.multiplyUpperTo(this.r2,this.m.t+1,this.q3),this.m.multiplyLowerTo(this.q3,this.m.t+1,this.r2);l.compareTo(this.r2)<0;)l.dAddOffset(1,this.m.t+1);for(l.subTo(this.r2,l);l.compareTo(this.m)>=0;)l.subTo(this.m,l)},t.prototype.mulTo=function(l,i,Z){l.multiplyTo(i,Z),this.reduce(Z)},t.prototype.sqrTo=function(l,i){l.squareTo(i),this.reduce(i)},t})();function a(){return new o(null)}function y(t,l){return new o(t,l)}var rl=typeof navigator<"u";rl&&Gl&&navigator.appName=="Microsoft Internet Explorer"?(o.prototype.am=function(l,i,Z,d,b,m){for(var s=i&32767,c=i>>15;--m>=0;){var e=this[l]&32767,h=this[l++]>>15,n=c*e+h*s;e=s*e+((n&32767)<<15)+Z[d]+(b&1073741823),b=(e>>>30)+(n>>>15)+c*h+(b>>>30),Z[d++]=e&1073741823}return b},I=30):rl&&Gl&&navigator.appName!="Netscape"?(o.prototype.am=function(l,i,Z,d,b,m){for(;--m>=0;){var s=i*this[l++]+Z[d]+b;b=Math.floor(s/67108864),Z[d++]=s&67108863}return b},I=26):(o.prototype.am=function(l,i,Z,d,b,m){for(var s=i&16383,c=i>>14;--m>=0;){var e=this[l]&16383,h=this[l++]>>14,n=c*e+h*s;e=s*e+((n&16383)<<14)+Z[d]+b,b=(e>>28)+(n>>14)+c*h,Z[d++]=e&268435455}return b},I=28);o.prototype.DB=I;o.prototype.DM=(1<<I)-1;o.prototype.DV=1<<I;var Xl=52;o.prototype.FV=Math.pow(2,Xl);o.prototype.F1=Xl-I;o.prototype.F2=2*I-Xl;var bl=[],j,x;j=48;for(x=0;x<=9;++x)bl[j++]=x;j=97;for(x=10;x<36;++x)bl[j++]=x;j=65;for(x=10;x<36;++x)bl[j++]=x;function Sl(t,l){var i=bl[t.charCodeAt(l)];return i??-1}function f(t){var l=a();return l.fromInt(t),l}function _(t){var l=1,i;return(i=t>>>16)!=0&&(t=i,l+=16),(i=t>>8)!=0&&(t=i,l+=8),(i=t>>4)!=0&&(t=i,l+=4),(i=t>>2)!=0&&(t=i,l+=2),(i=t>>1)!=0&&(t=i,l+=1),l}o.ZERO=f(0);o.ONE=f(1);var Dl=(function(){function t(){this.i=0,this.j=0,this.S=[]}return t.prototype.init=function(l){var i,Z,d;for(i=0;i<256;++i)this.S[i]=i;for(Z=0,i=0;i<256;++i)Z=Z+this.S[i]+l[i%l.length]&255,d=this.S[i],this.S[i]=this.S[Z],this.S[Z]=d;this.i=0,this.j=0},t.prototype.next=function(){var l;return this.i=this.i+1&255,this.j=this.j+this.S[this.i]&255,l=this.S[this.i],this.S[this.i]=this.S[this.j],this.S[this.j]=l,this.S[l+this.S[this.i]&255]},t})();function El(){return new Dl}var Jl=256,$,v=null,K;if(v==null){v=[],K=0;var ll=void 0;if(typeof window<"u"&&self.crypto&&self.crypto.getRandomValues){var ul=new Uint32Array(256);for(self.crypto.getRandomValues(ul),ll=0;ll<ul.length;++ll)v[K++]=ul[ll]&255}var il=0,Zl=function(t){if(il=il||0,il>=256||K>=Jl){self.removeEventListener?self.removeEventListener("mousemove",Zl,!1):self.detachEvent&&self.detachEvent("onmousemove",Zl);return}try{var l=t.x+t.y;v[K++]=l&255,il+=1}catch{}};typeof window<"u"&&(self.addEventListener?self.addEventListener("mousemove",Zl,!1):self.attachEvent&&self.attachEvent("onmousemove",Zl))}function Bl(){if($==null){for($=El();K<Jl;){var t=Math.floor(65536*Math.random());v[K++]=t&255}for($.init(v),K=0;K<v.length;++K)v[K]=0;K=0}return $.next()}var dl=(function(){function t(){}return t.prototype.nextBytes=function(l){for(var i=0;i<l.length;++i)l[i]=Bl()},t})();function nl(t){return Al(di(Ol(t),t.length*8))}function Rl(t){for(var l="0123456789abcdef",i="",Z=0;Z<t.length;Z++){var d=t.charCodeAt(Z);i+=l.charAt(d>>>4&15)+l.charAt(d&15)}return i}function Ol(t){for(var l=Array(t.length>>2),i=0;i<l.length;i++)l[i]=0;for(var i=0;i<t.length*8;i+=8)l[i>>5]|=(t.charCodeAt(i/8)&255)<<24-i%32;return l}function Al(t){for(var l="",i=0;i<t.length*32;i+=8)l+=String.fromCharCode(t[i>>5]>>>24-i%32&255);return l}function J(t,l){return t>>>l|t<<32-l}function Ul(t,l){return t>>>l}function ql(t,l,i){return t&l^~t&i}function _l(t,l,i){return t&l^t&i^l&i}function $l(t){return J(t,2)^J(t,13)^J(t,22)}function li(t){return J(t,6)^J(t,11)^J(t,25)}function ii(t){return J(t,7)^J(t,18)^Ul(t,3)}function Zi(t){return J(t,17)^J(t,19)^Ul(t,10)}var ti=new Array(1116352408,1899447441,-1245643825,-373957723,961987163,1508970993,-1841331548,-1424204075,-670586216,310598401,607225278,1426881987,1925078388,-2132889090,-1680079193,-1046744716,-459576895,-272742522,264347078,604807628,770255983,1249150122,1555081692,1996064986,-1740746414,-1473132947,-1341970488,-1084653625,-958395405,-710438585,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,-2117940946,-1838011259,-1564481375,-1474664885,-1035236496,-949202525,-778901479,-694614492,-200395387,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,-2067236844,-1933114872,-1866530822,-1538233109,-1090935817,-965641998);function di(t,l){var i=new Array(1779033703,-1150833019,1013904242,-1521486534,1359893119,-1694144372,528734635,1541459225),Z=new Array(64),d,b,m,s,c,e,h,n,W,X,p,G;for(t[l>>5]|=128<<24-l%32,t[(l+64>>9<<4)+15]=l,W=0;W<t.length;W+=16){for(d=i[0],b=i[1],m=i[2],s=i[3],c=i[4],e=i[5],h=i[6],n=i[7],X=0;X<64;X++)X<16?Z[X]=t[X+W]:Z[X]=r(r(r(Zi(Z[X-2]),Z[X-7]),ii(Z[X-15])),Z[X-16]),p=r(r(r(r(n,li(c)),ql(c,e,h)),ti[X]),Z[X]),G=r($l(d),_l(d,b,m)),n=h,h=e,e=c,c=r(s,p),s=m,m=b,b=d,d=r(p,G);i[0]=r(d,i[0]),i[1]=r(b,i[1]),i[2]=r(m,i[2]),i[3]=r(s,i[3]),i[4]=r(c,i[4]),i[5]=r(e,i[5]),i[6]=r(h,i[6]),i[7]=r(n,i[7])}return i}function r(t,l){var i=(t&65535)+(l&65535),Z=(t>>16)+(l>>16)+(i>>16);return Z<<16|i&65535}function bi(t,l){if(l<t.length+22)return console.error("Message too long for RSA"),null;for(var i=l-t.length-6,Z="",d=0;d<i;d+=2)Z+="ff";var b="0001"+Z+"00"+t;return y(b,16)}function mi(t,l){if(l<t.length+11)return console.error("Message too long for RSA"),null;for(var i=[],Z=t.length-1;Z>=0&&l>0;){var d=t.charCodeAt(Z--);d<128?i[--l]=d:d>127&&d<2048?(i[--l]=d&63|128,i[--l]=d>>6|192):(i[--l]=d&63|128,i[--l]=d>>6&63|128,i[--l]=d>>12|224)}i[--l]=0;for(var b=new dl,m=[];l>2;){for(m[0]=0;m[0]==0;)b.nextBytes(m);i[--l]=m[0]}return i[--l]=2,i[--l]=0,new o(i)}function xl(t,l,i){for(var Z="",d=0;Z.length<l;)Z+=i(String.fromCharCode.apply(String,t.concat([(d&4278190080)>>24,(d&16711680)>>16,(d&65280)>>8,d&255]))),d+=1;return Z}var si=32;function ci(t,l){var i=si,Z=nl;if(t.length+2*i+2>l)throw"Message too long for RSA";var d="",b;for(b=0;b<l-t.length-2*i-2;b+=1)d+="\0";var m=Z("")+d+""+t,s=new Array(i);new dl().nextBytes(s);var c=xl(s,m.length,Z),e=[];for(b=0;b<m.length;b+=1)e[b]=m.charCodeAt(b)^c.charCodeAt(b);var h=xl(e,s.length,Z),n=[0];for(b=0;b<s.length;b+=1)n[b+1]=s[b]^h.charCodeAt(b);return new o(n.concat(e))}var ui=(function(){function t(){this.n=null,this.e=0,this.d=null,this.p=null,this.q=null,this.dmp1=null,this.dmq1=null,this.coeff=null}return t.prototype.doPublic=function(l){return l.modPowInt(this.e,this.n)},t.prototype.doPrivate=function(l){if(this.p==null||this.q==null)return l.modPow(this.d,this.n);for(var i=l.mod(this.p).modPow(this.dmp1,this.p),Z=l.mod(this.q).modPow(this.dmq1,this.q);i.compareTo(Z)<0;)i=i.add(this.p);return i.subtract(Z).multiply(this.coeff).mod(this.p).multiply(this.q).add(Z)},t.prototype.setPublic=function(l,i){l!=null&&i!=null&&l.length>0&&i.length>0?(this.n=y(l,16),this.e=parseInt(i,16)):console.error("Invalid RSA public key")},t.prototype.encrypt=function(l,i){typeof i>"u"&&(i=mi);var Z=this.n.bitLength()+7>>3,d=i(l,Z);if(d==null)return null;var b=this.doPublic(d);if(b==null)return null;for(var m=b.toString(16),s=m.length,c=0;c<Z*2-s;c++)m="0"+m;return m},t.prototype.setPrivate=function(l,i,Z){l!=null&&i!=null&&l.length>0&&i.length>0?(this.n=y(l,16),this.e=parseInt(i,16),this.d=y(Z,16)):console.error("Invalid RSA private key")},t.prototype.setPrivateEx=function(l,i,Z,d,b,m,s,c){l!=null&&i!=null&&l.length>0&&i.length>0?(this.n=y(l,16),this.e=parseInt(i,16),this.d=y(Z,16),this.p=y(d,16),this.q=y(b,16),this.dmp1=y(m,16),this.dmq1=y(s,16),this.coeff=y(c,16)):console.error("Invalid RSA private key")},t.prototype.generate=function(l,i){var Z=new dl,d=l>>1;this.e=parseInt(i,16);for(var b=new o(i,16);;){for(;this.p=new o(l-d,1,Z),!(this.p.subtract(o.ONE).gcd(b).compareTo(o.ONE)==0&&this.p.isProbablePrime(10)););for(;this.q=new o(d,1,Z),!(this.q.subtract(o.ONE).gcd(b).compareTo(o.ONE)==0&&this.q.isProbablePrime(10)););if(this.p.compareTo(this.q)<=0){var m=this.p;this.p=this.q,this.q=m}var s=this.p.subtract(o.ONE),c=this.q.subtract(o.ONE),e=s.multiply(c);if(e.gcd(b).compareTo(o.ONE)==0){this.n=this.p.multiply(this.q),this.d=b.modInverse(e),this.dmp1=this.d.mod(s),this.dmq1=this.d.mod(c),this.coeff=this.q.modInverse(this.p);break}}},t.prototype.decrypt=function(l){var i=y(l,16),Z=this.doPrivate(i);return Z==null?null:ei(Z,this.n.bitLength()+7>>3)},t.prototype.generateAsync=function(l,i,Z){var d=new dl,b=l>>1;this.e=parseInt(i,16);var m=new o(i,16),s=this,c=function(){var e=function(){if(s.p.compareTo(s.q)<=0){var W=s.p;s.p=s.q,s.q=W}var X=s.p.subtract(o.ONE),p=s.q.subtract(o.ONE),G=X.multiply(p);G.gcd(m).compareTo(o.ONE)==0?(s.n=s.p.multiply(s.q),s.d=m.modInverse(G),s.dmp1=s.d.mod(X),s.dmq1=s.d.mod(p),s.coeff=s.q.modInverse(s.p),setTimeout(function(){Z()},0)):setTimeout(c,0)},h=function(){s.q=a(),s.q.fromNumberAsync(b,1,d,function(){s.q.subtract(o.ONE).gcda(m,function(W){W.compareTo(o.ONE)==0&&s.q.isProbablePrime(10)?setTimeout(e,0):setTimeout(h,0)})})},n=function(){s.p=a(),s.p.fromNumberAsync(l-b,1,d,function(){s.p.subtract(o.ONE).gcda(m,function(W){W.compareTo(o.ONE)==0&&s.p.isProbablePrime(10)?setTimeout(h,0):setTimeout(n,0)})})};setTimeout(n,0)};setTimeout(c,0)},t.prototype.sign=function(l,i,Z){var d=hi(Z),b=d+i(l).toString(),m=this.n.bitLength()/4,s=bi(b,m);if(s==null)return null;var c=this.doPrivate(s);if(c==null)return null;for(var e=c.toString(16),h=e.length,n=0;n<m-h;n++)e="0"+e;return e},t.prototype.verify=function(l,i,Z){var d=y(i,16),b=this.doPublic(d);if(b==null)return null;var m=b.toString(16).replace(/^1f+00/,""),s=ni(m);return s==Z(l).toString()},t})();function ei(t,l){for(var i=t.toByteArray(),Z=0;Z<i.length&&i[Z]==0;)++Z;if(i.length-Z!=l-1||i[Z]!=2)return null;for(++Z;i[Z]!=0;)if(++Z>=i.length)return null;for(var d="";++Z<i.length;){var b=i[Z]&255;b<128?d+=String.fromCharCode(b):b>191&&b<224?(d+=String.fromCharCode((b&31)<<6|i[Z+1]&63),++Z):(d+=String.fromCharCode((b&15)<<12|(i[Z+1]&63)<<6|i[Z+2]&63),Z+=2)}return d}var tl={md2:"3020300c06082a864886f70d020205000410",md5:"3020300c06082a864886f70d020505000410",sha1:"3021300906052b0e03021a05000414",sha224:"302d300d06096086480165030402040500041c",sha256:"3031300d060960864801650304020105000420",sha384:"3041300d060960864801650304020205000430",sha512:"3051300d060960864801650304020305000440",ripemd160:"3021300906052b2403020105000414"};function hi(t){return tl[t]||""}function ni(t){for(var l in tl)if(tl.hasOwnProperty(l)){var i=tl[l],Z=i.length;if(t.substring(0,Z)==i)return t.substring(Z)}return t}function Y(t,l,i){if(!l||!t)throw new Error("extend failed, please check that all dependencies are included.");var Z=function(){};Z.prototype=l.prototype,t.prototype=new Z,t.prototype.constructor=t,t.superclass=l.prototype,l.prototype.constructor==Object.prototype.constructor&&(l.prototype.constructor=l)}var u={};(typeof u.asn1>"u"||!u.asn1)&&(u.asn1={});u.asn1.ASN1Util=new function(){this.integerToByteHex=function(t){var l=t.toString(16);return l.length%2==1&&(l="0"+l),l},this.bigIntToMinTwosComplementsHex=function(t){var l=t.toString(16);if(l.substring(0,1)!="-")l.length%2==1?l="0"+l:l.match(/^[0-7]/)||(l="00"+l);else{var i=l.substring(1),Z=i.length;Z%2==1?Z+=1:l.match(/^[0-7]/)||(Z+=2);for(var d="",b=0;b<Z;b++)d+="f";var m=new o(d,16),s=m.xor(t).add(o.ONE);l=s.toString(16).replace(/^-/,"")}return l},this.getPEMStringFromHex=function(t,l){return hextopem(t,l)},this.newObject=function(t){var l=u,i=l.asn1,Z=i.DERBoolean,d=i.DERInteger,b=i.DERBitString,m=i.DEROctetString,s=i.DERNull,c=i.DERObjectIdentifier,e=i.DEREnumerated,h=i.DERUTF8String,n=i.DERNumericString,W=i.DERPrintableString,X=i.DERTeletexString,p=i.DERIA5String,G=i.DERUTCTime,R=i.DERGeneralizedTime,F=i.DERSequence,N=i.DERSet,k=i.DERTaggedObject,B=i.ASN1Util.newObject,ol=Object.keys(t);if(ol.length!=1)throw"key of param shall be only one.";var V=ol[0];if(":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":"+V+":")==-1)throw"undefined key: "+V;if(V=="bool")return new Z(t[V]);if(V=="int")return new d(t[V]);if(V=="bitstr")return new b(t[V]);if(V=="octstr")return new m(t[V]);if(V=="null")return new s(t[V]);if(V=="oid")return new c(t[V]);if(V=="enum")return new e(t[V]);if(V=="utf8str")return new h(t[V]);if(V=="numstr")return new n(t[V]);if(V=="prnstr")return new W(t[V]);if(V=="telstr")return new X(t[V]);if(V=="ia5str")return new p(t[V]);if(V=="utctime")return new G(t[V]);if(V=="gentime")return new R(t[V]);if(V=="seq"){for(var Q=t[V],w=[],T=0;T<Q.length;T++){var ml=B(Q[T]);w.push(ml)}return new F({array:w})}if(V=="set"){for(var Q=t[V],w=[],T=0;T<Q.length;T++){var ml=B(Q[T]);w.push(ml)}return new N({array:w})}if(V=="tag"){var L=t[V];if(Object.prototype.toString.call(L)==="[object Array]"&&L.length==3){var fl=B(L[2]);return new k({tag:L[0],explicit:L[1],obj:fl})}else{var O={};if(L.explicit!==void 0&&(O.explicit=L.explicit),L.tag!==void 0&&(O.tag=L.tag),L.obj===void 0)throw"obj shall be specified for 'tag'.";return O.obj=B(L.obj),new k(O)}}},this.jsonToASN1HEX=function(t){var l=this.newObject(t);return l.getEncodedHex()}};u.asn1.ASN1Util.oidHexToInt=function(t){for(var d="",l=parseInt(t.substring(0,2),16),i=Math.floor(l/40),Z=l%40,d=i+"."+Z,b="",m=2;m<t.length;m+=2){var s=parseInt(t.substring(m,m+2),16),c=("00000000"+s.toString(2)).slice(-8);if(b=b+c.substring(1,8),c.substring(0,1)=="0"){var e=new o(b,2);d=d+"."+e.toString(10),b=""}}return d};u.asn1.ASN1Util.oidIntToHex=function(t){var l=function(s){var c=s.toString(16);return c.length==1&&(c="0"+c),c},i=function(s){var c="",e=new o(s,10),h=e.toString(2),n=7-h.length%7;n==7&&(n=0);for(var W="",X=0;X<n;X++)W+="0";h=W+h;for(var X=0;X<h.length-1;X+=7){var p=h.substring(X,X+7);X!=h.length-7&&(p="1"+p),c+=l(parseInt(p,2))}return c};if(!t.match(/^[0-9.]+$/))throw"malformed oid string: "+t;var Z="",d=t.split("."),b=parseInt(d[0])*40+parseInt(d[1]);Z+=l(b),d.splice(0,2);for(var m=0;m<d.length;m++)Z+=i(d[m]);return Z};u.asn1.ASN1Object=function(){var t="";this.getLengthHexFromValue=function(){if(typeof this.hV>"u"||this.hV==null)throw"this.hV is null or undefined.";if(this.hV.length%2==1)throw"value hex must be even length: n="+t.length+",v="+this.hV;var l=this.hV.length/2,i=l.toString(16);if(i.length%2==1&&(i="0"+i),l<128)return i;var Z=i.length/2;if(Z>15)throw"ASN.1 length too long to represent by 8x: n = "+l.toString(16);var d=128+Z;return d.toString(16)+i},this.getEncodedHex=function(){return(this.hTLV==null||this.isModified)&&(this.hV=this.getFreshValueHex(),this.hL=this.getLengthHexFromValue(),this.hTLV=this.hT+this.hL+this.hV,this.isModified=!1),this.hTLV},this.getValueHex=function(){return this.getEncodedHex(),this.hV},this.getFreshValueHex=function(){return""}};u.asn1.DERAbstractString=function(t){u.asn1.DERAbstractString.superclass.constructor.call(this),this.getString=function(){return this.s},this.setString=function(l){this.hTLV=null,this.isModified=!0,this.s=l,this.hV=stohex(this.s)},this.setStringHex=function(l){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=l},this.getFreshValueHex=function(){return this.hV},typeof t<"u"&&(typeof t=="string"?this.setString(t):typeof t.str<"u"?this.setString(t.str):typeof t.hex<"u"&&this.setStringHex(t.hex))};Y(u.asn1.DERAbstractString,u.asn1.ASN1Object);u.asn1.DERAbstractTime=function(t){u.asn1.DERAbstractTime.superclass.constructor.call(this),this.localDateToUTC=function(l){utc=l.getTime()+l.getTimezoneOffset()*6e4;var i=new Date(utc);return i},this.formatDate=function(l,i,Z){var d=this.zeroPadding,b=this.localDateToUTC(l),m=String(b.getFullYear());i=="utc"&&(m=m.substring(2,4));var s=d(String(b.getMonth()+1),2),c=d(String(b.getDate()),2),e=d(String(b.getHours()),2),h=d(String(b.getMinutes()),2),n=d(String(b.getSeconds()),2),W=m+s+c+e+h+n;if(Z===!0){var X=b.getMilliseconds();if(X!=0){var p=d(String(X),3);p=p.replace(/[0]+$/,""),W=W+"."+p}}return W+"Z"},this.zeroPadding=function(l,i){return l.length>=i?l:new Array(i-l.length+1).join("0")+l},this.getString=function(){return this.s},this.setString=function(l){this.hTLV=null,this.isModified=!0,this.s=l,this.hV=stohex(l)},this.setByDateValue=function(l,i,Z,d,b,m){var s=new Date(Date.UTC(l,i-1,Z,d,b,m,0));this.setByDate(s)},this.getFreshValueHex=function(){return this.hV}};Y(u.asn1.DERAbstractTime,u.asn1.ASN1Object);u.asn1.DERAbstractStructured=function(t){u.asn1.DERAbstractString.superclass.constructor.call(this),this.setByASN1ObjectArray=function(l){this.hTLV=null,this.isModified=!0,this.asn1Array=l},this.appendASN1Object=function(l){this.hTLV=null,this.isModified=!0,this.asn1Array.push(l)},this.asn1Array=new Array,typeof t<"u"&&typeof t.array<"u"&&(this.asn1Array=t.array)};Y(u.asn1.DERAbstractStructured,u.asn1.ASN1Object);u.asn1.DERBoolean=function(){u.asn1.DERBoolean.superclass.constructor.call(this),this.hT="01",this.hTLV="0101ff"};Y(u.asn1.DERBoolean,u.asn1.ASN1Object);u.asn1.DERInteger=function(t){u.asn1.DERInteger.superclass.constructor.call(this),this.hT="02",this.setByBigInteger=function(l){this.hTLV=null,this.isModified=!0,this.hV=u.asn1.ASN1Util.bigIntToMinTwosComplementsHex(l)},this.setByInteger=function(l){var i=new o(String(l),10);this.setByBigInteger(i)},this.setValueHex=function(l){this.hV=l},this.getFreshValueHex=function(){return this.hV},typeof t<"u"&&(typeof t.bigint<"u"?this.setByBigInteger(t.bigint):typeof t.int<"u"?this.setByInteger(t.int):typeof t=="number"?this.setByInteger(t):typeof t.hex<"u"&&this.setValueHex(t.hex))};Y(u.asn1.DERInteger,u.asn1.ASN1Object);u.asn1.DERBitString=function(t){if(t!==void 0&&typeof t.obj<"u"){var l=u.asn1.ASN1Util.newObject(t.obj);t.hex="00"+l.getEncodedHex()}u.asn1.DERBitString.superclass.constructor.call(this),this.hT="03",this.setHexValueIncludingUnusedBits=function(i){this.hTLV=null,this.isModified=!0,this.hV=i},this.setUnusedBitsAndHexValue=function(i,Z){if(i<0||7<i)throw"unused bits shall be from 0 to 7: u = "+i;var d="0"+i;this.hTLV=null,this.isModified=!0,this.hV=d+Z},this.setByBinaryString=function(i){i=i.replace(/0+$/,"");var Z=8-i.length%8;Z==8&&(Z=0);for(var d=0;d<=Z;d++)i+="0";for(var b="",d=0;d<i.length-1;d+=8){var m=i.substring(d,d+8),s=parseInt(m,2).toString(16);s.length==1&&(s="0"+s),b+=s}this.hTLV=null,this.isModified=!0,this.hV="0"+Z+b},this.setByBooleanArray=function(i){for(var Z="",d=0;d<i.length;d++)i[d]==!0?Z+="1":Z+="0";this.setByBinaryString(Z)},this.newFalseArray=function(i){for(var Z=new Array(i),d=0;d<i;d++)Z[d]=!1;return Z},this.getFreshValueHex=function(){return this.hV},typeof t<"u"&&(typeof t=="string"&&t.toLowerCase().match(/^[0-9a-f]+$/)?this.setHexValueIncludingUnusedBits(t):typeof t.hex<"u"?this.setHexValueIncludingUnusedBits(t.hex):typeof t.bin<"u"?this.setByBinaryString(t.bin):typeof t.array<"u"&&this.setByBooleanArray(t.array))};Y(u.asn1.DERBitString,u.asn1.ASN1Object);u.asn1.DEROctetString=function(t){if(t!==void 0&&typeof t.obj<"u"){var l=u.asn1.ASN1Util.newObject(t.obj);t.hex=l.getEncodedHex()}u.asn1.DEROctetString.superclass.constructor.call(this,t),this.hT="04"};Y(u.asn1.DEROctetString,u.asn1.DERAbstractString);u.asn1.DERNull=function(){u.asn1.DERNull.superclass.constructor.call(this),this.hT="05",this.hTLV="0500"};Y(u.asn1.DERNull,u.asn1.ASN1Object);u.asn1.DERObjectIdentifier=function(t){var l=function(Z){var d=Z.toString(16);return d.length==1&&(d="0"+d),d},i=function(Z){var d="",b=new o(Z,10),m=b.toString(2),s=7-m.length%7;s==7&&(s=0);for(var c="",e=0;e<s;e++)c+="0";m=c+m;for(var e=0;e<m.length-1;e+=7){var h=m.substring(e,e+7);e!=m.length-7&&(h="1"+h),d+=l(parseInt(h,2))}return d};u.asn1.DERObjectIdentifier.superclass.constructor.call(this),this.hT="06",this.setValueHex=function(Z){this.hTLV=null,this.isModified=!0,this.s=null,this.hV=Z},this.setValueOidString=function(Z){if(!Z.match(/^[0-9.]+$/))throw"malformed oid string: "+Z;var d="",b=Z.split("."),m=parseInt(b[0])*40+parseInt(b[1]);d+=l(m),b.splice(0,2);for(var s=0;s<b.length;s++)d+=i(b[s]);this.hTLV=null,this.isModified=!0,this.s=null,this.hV=d},this.setValueName=function(Z){var d=u.asn1.x509.OID.name2oid(Z);if(d!=="")this.setValueOidString(d);else throw"DERObjectIdentifier oidName undefined: "+Z},this.getFreshValueHex=function(){return this.hV},t!==void 0&&(typeof t=="string"?t.match(/^[0-2].[0-9.]+$/)?this.setValueOidString(t):this.setValueName(t):t.oid!==void 0?this.setValueOidString(t.oid):t.hex!==void 0?this.setValueHex(t.hex):t.name!==void 0&&this.setValueName(t.name))};Y(u.asn1.DERObjectIdentifier,u.asn1.ASN1Object);u.asn1.DEREnumerated=function(t){u.asn1.DEREnumerated.superclass.constructor.call(this),this.hT="0a",this.setByBigInteger=function(l){this.hTLV=null,this.isModified=!0,this.hV=u.asn1.ASN1Util.bigIntToMinTwosComplementsHex(l)},this.setByInteger=function(l){var i=new o(String(l),10);this.setByBigInteger(i)},this.setValueHex=function(l){this.hV=l},this.getFreshValueHex=function(){return this.hV},typeof t<"u"&&(typeof t.int<"u"?this.setByInteger(t.int):typeof t=="number"?this.setByInteger(t):typeof t.hex<"u"&&this.setValueHex(t.hex))};Y(u.asn1.DEREnumerated,u.asn1.ASN1Object);u.asn1.DERUTF8String=function(t){u.asn1.DERUTF8String.superclass.constructor.call(this,t),this.hT="0c"};Y(u.asn1.DERUTF8String,u.asn1.DERAbstractString);u.asn1.DERNumericString=function(t){u.asn1.DERNumericString.superclass.constructor.call(this,t),this.hT="12"};Y(u.asn1.DERNumericString,u.asn1.DERAbstractString);u.asn1.DERPrintableString=function(t){u.asn1.DERPrintableString.superclass.constructor.call(this,t),this.hT="13"};Y(u.asn1.DERPrintableString,u.asn1.DERAbstractString);u.asn1.DERTeletexString=function(t){u.asn1.DERTeletexString.superclass.constructor.call(this,t),this.hT="14"};Y(u.asn1.DERTeletexString,u.asn1.DERAbstractString);u.asn1.DERIA5String=function(t){u.asn1.DERIA5String.superclass.constructor.call(this,t),this.hT="16"};Y(u.asn1.DERIA5String,u.asn1.DERAbstractString);u.asn1.DERUTCTime=function(t){u.asn1.DERUTCTime.superclass.constructor.call(this,t),this.hT="17",this.setByDate=function(l){this.hTLV=null,this.isModified=!0,this.date=l,this.s=this.formatDate(this.date,"utc"),this.hV=stohex(this.s)},this.getFreshValueHex=function(){return typeof this.date>"u"&&typeof this.s>"u"&&(this.date=new Date,this.s=this.formatDate(this.date,"utc"),this.hV=stohex(this.s)),this.hV},t!==void 0&&(t.str!==void 0?this.setString(t.str):typeof t=="string"&&t.match(/^[0-9]{12}Z$/)?this.setString(t):t.hex!==void 0?this.setStringHex(t.hex):t.date!==void 0&&this.setByDate(t.date))};Y(u.asn1.DERUTCTime,u.asn1.DERAbstractTime);u.asn1.DERGeneralizedTime=function(t){u.asn1.DERGeneralizedTime.superclass.constructor.call(this,t),this.hT="18",this.withMillis=!1,this.setByDate=function(l){this.hTLV=null,this.isModified=!0,this.date=l,this.s=this.formatDate(this.date,"gen",this.withMillis),this.hV=stohex(this.s)},this.getFreshValueHex=function(){return this.date===void 0&&this.s===void 0&&(this.date=new Date,this.s=this.formatDate(this.date,"gen",this.withMillis),this.hV=stohex(this.s)),this.hV},t!==void 0&&(t.str!==void 0?this.setString(t.str):typeof t=="string"&&t.match(/^[0-9]{14}Z$/)?this.setString(t):t.hex!==void 0?this.setStringHex(t.hex):t.date!==void 0&&this.setByDate(t.date),t.millis===!0&&(this.withMillis=!0))};Y(u.asn1.DERGeneralizedTime,u.asn1.DERAbstractTime);u.asn1.DERSequence=function(t){u.asn1.DERSequence.superclass.constructor.call(this,t),this.hT="30",this.getFreshValueHex=function(){for(var l="",i=0;i<this.asn1Array.length;i++){var Z=this.asn1Array[i];l+=Z.getEncodedHex()}return this.hV=l,this.hV}};Y(u.asn1.DERSequence,u.asn1.DERAbstractStructured);u.asn1.DERSet=function(t){u.asn1.DERSet.superclass.constructor.call(this,t),this.hT="31",this.sortFlag=!0,this.getFreshValueHex=function(){for(var l=new Array,i=0;i<this.asn1Array.length;i++){var Z=this.asn1Array[i];l.push(Z.getEncodedHex())}return this.sortFlag==!0&&l.sort(),this.hV=l.join(""),this.hV},typeof t<"u"&&typeof t.sortflag<"u"&&t.sortflag==!1&&(this.sortFlag=!1)};Y(u.asn1.DERSet,u.asn1.DERAbstractStructured);u.asn1.DERTaggedObject=function(t){u.asn1.DERTaggedObject.superclass.constructor.call(this),this.hT="a0",this.hV="",this.isExplicit=!0,this.asn1Object=null,this.setASN1Object=function(l,i,Z){this.hT=i,this.isExplicit=l,this.asn1Object=Z,this.isExplicit?(this.hV=this.asn1Object.getEncodedHex(),this.hTLV=null,this.isModified=!0):(this.hV=null,this.hTLV=Z.getEncodedHex(),this.hTLV=this.hTLV.replace(/^../,i),this.isModified=!1)},this.getFreshValueHex=function(){return this.hV},typeof t<"u"&&(typeof t.tag<"u"&&(this.hT=t.tag),typeof t.explicit<"u"&&(this.isExplicit=t.explicit),typeof t.obj<"u"&&(this.asn1Object=t.obj,this.setASN1Object(this.isExplicit,this.hT,this.asn1Object)))};Y(u.asn1.DERTaggedObject,u.asn1.ASN1Object);var Xi=(function(){var t=function(l,i){return t=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(Z,d){Z.__proto__=d}||function(Z,d){for(var b in d)Object.prototype.hasOwnProperty.call(d,b)&&(Z[b]=d[b])},t(l,i)};return function(l,i){if(typeof i!="function"&&i!==null)throw new TypeError("Class extends value "+String(i)+" is not a constructor or null");t(l,i);function Z(){this.constructor=l}l.prototype=i===null?Object.create(i):(Z.prototype=i.prototype,new Z)}})(),Ll=(function(t){Xi(l,t);function l(i){var Z=t.call(this)||this;return i&&(typeof i=="string"?Z.parseKey(i):(l.hasPrivateKeyProperty(i)||l.hasPublicKeyProperty(i))&&Z.parsePropertiesFrom(i)),Z}return l.prototype.parseKey=function(i){try{var Z=0,d=0,b=/^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/,m=b.test(i)?Cl.decode(i):hl.unarmor(i),s=Pl.decode(m);if(s.sub.length===3&&(s=s.sub[2].sub[0]),s.sub.length===9){Z=s.sub[1].getHexStringValue(),this.n=y(Z,16),d=s.sub[2].getHexStringValue(),this.e=parseInt(d,16);var c=s.sub[3].getHexStringValue();this.d=y(c,16);var e=s.sub[4].getHexStringValue();this.p=y(e,16);var h=s.sub[5].getHexStringValue();this.q=y(h,16);var n=s.sub[6].getHexStringValue();this.dmp1=y(n,16);var W=s.sub[7].getHexStringValue();this.dmq1=y(W,16);var X=s.sub[8].getHexStringValue();this.coeff=y(X,16)}else if(s.sub.length===2)if(s.sub[0].sub){var p=s.sub[1],G=p.sub[0];Z=G.sub[0].getHexStringValue(),this.n=y(Z,16),d=G.sub[1].getHexStringValue(),this.e=parseInt(d,16)}else Z=s.sub[0].getHexStringValue(),this.n=y(Z,16),d=s.sub[1].getHexStringValue(),this.e=parseInt(d,16);else return!1;return!0}catch{return!1}},l.prototype.getPrivateBaseKey=function(){var i={array:[new u.asn1.DERInteger({int:0}),new u.asn1.DERInteger({bigint:this.n}),new u.asn1.DERInteger({int:this.e}),new u.asn1.DERInteger({bigint:this.d}),new u.asn1.DERInteger({bigint:this.p}),new u.asn1.DERInteger({bigint:this.q}),new u.asn1.DERInteger({bigint:this.dmp1}),new u.asn1.DERInteger({bigint:this.dmq1}),new u.asn1.DERInteger({bigint:this.coeff})]},Z=new u.asn1.DERSequence(i);return Z.getEncodedHex()},l.prototype.getPrivateBaseKeyB64=function(){return D(this.getPrivateBaseKey())},l.prototype.getPublicBaseKey=function(){var i=new u.asn1.DERSequence({array:[new u.asn1.DERObjectIdentifier({oid:"1.2.840.113549.1.1.1"}),new u.asn1.DERNull]}),Z=new u.asn1.DERSequence({array:[new u.asn1.DERInteger({bigint:this.n}),new u.asn1.DERInteger({int:this.e})]}),d=new u.asn1.DERBitString({hex:"00"+Z.getEncodedHex()}),b=new u.asn1.DERSequence({array:[i,d]});return b.getEncodedHex()},l.prototype.getPublicBaseKeyB64=function(){return D(this.getPublicBaseKey())},l.wordwrap=function(i,Z){if(Z=Z||64,!i)return i;var d="(.{1,"+Z+`})( +|$
9
+ ?)|(.{1,`+Z+"})";return i.match(RegExp(d,"g")).join(`
10
+ `)},l.prototype.getPrivateKey=function(){var i=`-----BEGIN RSA PRIVATE KEY-----
11
+ `;return i+=l.wordwrap(this.getPrivateBaseKeyB64())+`
12
+ `,i+="-----END RSA PRIVATE KEY-----",i},l.prototype.getPublicKey=function(){var i=`-----BEGIN PUBLIC KEY-----
13
+ `;return i+=l.wordwrap(this.getPublicBaseKeyB64())+`
14
+ `,i+="-----END PUBLIC KEY-----",i},l.hasPublicKeyProperty=function(i){return i=i||{},i.hasOwnProperty("n")&&i.hasOwnProperty("e")},l.hasPrivateKeyProperty=function(i){return i=i||{},i.hasOwnProperty("n")&&i.hasOwnProperty("e")&&i.hasOwnProperty("d")&&i.hasOwnProperty("p")&&i.hasOwnProperty("q")&&i.hasOwnProperty("dmp1")&&i.hasOwnProperty("dmq1")&&i.hasOwnProperty("coeff")},l.prototype.parsePropertiesFrom=function(i){this.n=i.n,this.e=i.e,i.hasOwnProperty("d")&&(this.d=i.d,this.p=i.p,this.q=i.q,this.dmp1=i.dmp1,this.dmq1=i.dmq1,this.coeff=i.coeff)},l})(ui),el,oi=typeof process<"u"?(el=process.env)===null||el===void 0?void 0:el.npm_package_version:void 0,Wi=(function(){function t(l){l===void 0&&(l={}),this.default_key_size=l.default_key_size?parseInt(l.default_key_size,10):1024,this.default_public_exponent=l.default_public_exponent||"010001",this.log=l.log||!1,this.key=l.key||null}return t.prototype.setKey=function(l){l?(this.log&&this.key&&console.warn("A key was already set, overriding existing."),this.key=new Ll(l)):!this.key&&this.log&&console.error("A key was not set.")},t.prototype.setPrivateKey=function(l){this.setKey(l)},t.prototype.setPublicKey=function(l){this.setKey(l)},t.prototype.decrypt=function(l){try{return this.getKey().decrypt(Vl(l))}catch{return!1}},t.prototype.encrypt=function(l){try{return D(this.getKey().encrypt(l))}catch{return!1}},t.prototype.encryptOAEP=function(l){try{return D(this.getKey().encrypt(l,ci))}catch{return!1}},t.prototype.sign=function(l,i,Z){i===void 0&&(i=function(d){return d}),Z===void 0&&(Z="");try{return D(this.getKey().sign(l,i,Z))}catch{return!1}},t.prototype.signSha256=function(l){return this.sign(l,function(i){return Rl(nl(i))},"sha256")},t.prototype.verify=function(l,i,Z){Z===void 0&&(Z=function(d){return d});try{return this.getKey().verify(l,Vl(i),Z)}catch{return!1}},t.prototype.verifySha256=function(l,i){return this.verify(l,i,function(Z){return Rl(nl(Z))})},t.prototype.getKey=function(l){if(!this.key){if(this.key=new Ll,l&&{}.toString.call(l)==="[object Function]"){this.key.generateAsync(this.default_key_size,this.default_public_exponent,l);return}this.key.generate(this.default_key_size,this.default_public_exponent)}return this.key},t.prototype.getPrivateKey=function(){return this.getKey().getPrivateKey()},t.prototype.getPrivateKeyB64=function(){return this.getKey().getPrivateBaseKeyB64()},t.prototype.getPublicKey=function(){return this.getKey().getPublicKey()},t.prototype.getPublicKeyB64=function(){return this.getKey().getPublicBaseKeyB64()},t.version=oi,t})();const ai={name:"GPluginVideo",props:{isPlayVideo:{type:Boolean,default:!1},isFullScreen:{type:Boolean,default:!1},cameraIndexCode:{type:String,default:""},currentPlayType:{type:Number,default:0},baseUrl:{type:String,default:"http://92.97.137.81:48181"},usefullData:{type:Object,default:{appkey:"24460774",secret:"vphyI4pTqEVk4lT67jVe",ip:"61.27.16.15",port:443}},size:{type:Object,default:{windowWidth:300,windowHeight:200}},isMulTip:{type:Boolean,default:!1},multipPointsArr:{type:Array,default:()=>[]},happenedTime:{type:String,default:""}},data(){return{camlength:"1x1",layoutMode:"1x1",oWebControl:null,initCount:0,pubKey:"",isLoading:!0,playText:"",videoTotal:0,selectAll:[],currentPage:1,currentArr:[],pageSize:0}},mounted(){this.loadH5PlayerScript().then(()=>{this.isPlayVideo&&this.initPlugin()}).catch(()=>{this.showPluginDownloadDialog()}),this.isMulTip&&(this.pageSize=4,this.videoTotal=this.multipPointsArr.length,this.videoTotal===1?this.layoutMode="1x1":this.videoTotal===2?this.layoutMode="2x2":this.videoTotal>2&&(this.layoutMode="2x2"),this.selectAll=this.multipPointsArr,this.selectAll=this.chunkArray(this.selectAll,4),this.currentArr=[...this.selectAll[this.currentPage-1]])},beforeDestroy(){this.oWebControl.JS_RequestInterface({funcName:"stopAllPreview"}),this.oWebControl.JS_HideWnd(),this.oWebControl.JS_RequestInterface({funcName:"destroyWnd"})},watch:{happenedTime(){this.startMultiPlayback()},cameraIndexCode(t,l){t!==l&&(this.oWebControl.JS_RequestInterface({funcName:"stopAllPreview"}),this.oWebControl.JS_HideWnd(),this.oWebControl.JS_RequestInterface({funcName:"destroyWnd"}),this.oWebControl.JS_Disconnect().then(()=>{this.initPlugin()},()=>{}))},playText(t){t!=""&&this.showPluginDownloadDialog()}},methods:{loadH5PlayerScript(){return new Promise((t,l)=>{if(window.WebControl){t();return}const i=document.createElement("script");let Z;try{Z=new URL("data:text/javascript;base64,dmFyIFdlYkNvbnRyb2w9ZnVuY3Rpb24oKXsidXNlIHN0cmljdCI7dmFyIGU9InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWxUaGlzP2dsb2JhbFRoaXM6InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OiJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsP2dsb2JhbDoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGY/c2VsZjp7fTtmdW5jdGlvbiB0KGUpe3JldHVybiB0PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSx0KGUpfWZ1bmN0aW9uIG4oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl07by5lbnVtZXJhYmxlPW8uZW51bWVyYWJsZXx8ITEsby5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG8mJihvLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLmtleSxvKX19ZnVuY3Rpb24gcihlLHQsbil7cmV0dXJuIHQmJm8oZS5wcm90b3R5cGUsdCksbiYmbyhlLG4pLGV9dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuTWF0aD09TWF0aCYmZX0scz1pKCJvYmplY3QiPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBnbG9iYWxUaGlzPyJ1bmRlZmluZWQiOnQoZ2xvYmFsVGhpcykpJiZnbG9iYWxUaGlzKXx8aSgib2JqZWN0Ij09KCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PyJ1bmRlZmluZWQiOnQod2luZG93KSkmJndpbmRvdyl8fGkoIm9iamVjdCI9PSgidW5kZWZpbmVkIj09dHlwZW9mIHNlbGY/InVuZGVmaW5lZCI6dChzZWxmKSkmJnNlbGYpfHxpKCJvYmplY3QiPT10KGUpJiZlKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKSxhPXt9LHU9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiEhZSgpfWNhdGNoKGUpe3JldHVybiEwfX0sYz0hdSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpLGw9RnVuY3Rpb24ucHJvdG90eXBlLmNhbGwsZD1sLmJpbmQ/bC5iaW5kKGwpOmZ1bmN0aW9uKCl7cmV0dXJuIGwuYXBwbHkobCxhcmd1bWVudHMpfSxmPXt9LGg9e30ucHJvcGVydHlJc0VudW1lcmFibGUscD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHY9cCYmIWguY2FsbCh7MToyfSwxKTtmLmY9dj9mdW5jdGlvbihlKXt2YXIgdD1wKHRoaXMsZSk7cmV0dXJuISF0JiZ0LmVudW1lcmFibGV9Omg7dmFyIGIsZyxtPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fSx5PUZ1bmN0aW9uLnByb3RvdHlwZSxfPXkuYmluZCx3PXkuY2FsbCxDPV8mJl8uYmluZCh3KSxrPV8/ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJkModyxlKX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmZ1bmN0aW9uKCl7cmV0dXJuIHcuYXBwbHkoZSxhcmd1bWVudHMpfX0sUz1rLFI9Uyh7fS50b1N0cmluZykscT1TKCIiLnNsaWNlKSxJPWZ1bmN0aW9uKGUpe3JldHVybiBxKFIoZSksOCwtMSl9LFA9ayxFPXUsTz1JLFQ9cy5PYmplY3Qsej1QKCIiLnNwbGl0KSxBPUUoKGZ1bmN0aW9uKCl7cmV0dXJuIVQoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09TyhlKT96KGUsIiIpOlQoZSl9OlQsVT1zLlR5cGVFcnJvcixEPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgVSgiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIitlKTtyZXR1cm4gZX0seD1BLFc9RCxGPWZ1bmN0aW9uKGUpe3JldHVybiB4KFcoZSkpfSxNPWZ1bmN0aW9uKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfSxMPU0sSj1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dChlKT9udWxsIT09ZTpMKGUpfSxqPXMsTj1NLEI9ZnVuY3Rpb24oZSl7cmV0dXJuIE4oZSk/ZTp2b2lkIDB9LFo9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP0IoaltlXSk6altlXSYmaltlXVt0XX0sSD1rKHt9LmlzUHJvdG90eXBlT2YpLEc9WigibmF2aWdhdG9yIiwidXNlckFnZW50Iil8fCIiLFY9cyxYPUcsWT1WLnByb2Nlc3MsSz1WLkRlbm8sJD1ZJiZZLnZlcnNpb25zfHxLJiZLLnZlcnNpb24sUT0kJiYkLnY4O1EmJihnPShiPVEuc3BsaXQoIi4iKSlbMF0+MCYmYlswXTw0PzE6KyhiWzBdK2JbMV0pKSwhZyYmWCYmKCEoYj1YLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8YlsxXT49NzQpJiYoYj1YLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYoZz0rYlsxXSk7dmFyIGVlPWcsdGU9ZWUsbmU9dSxvZT0hIU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJiFuZSgoZnVuY3Rpb24oKXt2YXIgZT1TeW1ib2woKTtyZXR1cm4hU3RyaW5nKGUpfHwhKE9iamVjdChlKWluc3RhbmNlb2YgU3ltYm9sKXx8IVN5bWJvbC5zaGFtJiZ0ZSYmdGU8NDF9KSkscmU9b2UmJiFTeW1ib2wuc2hhbSYmInN5bWJvbCI9PXQoU3ltYm9sLml0ZXJhdG9yKSxpZT1aLHNlPU0sYWU9SCx1ZT1yZSxjZT1zLk9iamVjdCxsZT11ZT9mdW5jdGlvbihlKXtyZXR1cm4ic3ltYm9sIj09dChlKX06ZnVuY3Rpb24oZSl7dmFyIHQ9aWUoIlN5bWJvbCIpO3JldHVybiBzZSh0KSYmYWUodC5wcm90b3R5cGUsY2UoZSkpfSxkZT1zLlN0cmluZyxmZT1mdW5jdGlvbihlKXt0cnl7cmV0dXJuIGRlKGUpfWNhdGNoKGUpe3JldHVybiJPYmplY3QifX0saGU9TSxwZT1mZSx2ZT1zLlR5cGVFcnJvcixiZT1mdW5jdGlvbihlKXtpZihoZShlKSlyZXR1cm4gZTt0aHJvdyB2ZShwZShlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9LGdlPWJlLG1lPWZ1bmN0aW9uKGUsdCl7dmFyIG49ZVt0XTtyZXR1cm4gbnVsbD09bj92b2lkIDA6Z2Uobil9LHllPWQsX2U9TSx3ZT1KLENlPXMuVHlwZUVycm9yLGtlPXtleHBvcnRzOnt9fSxTZT1zLFJlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxxZT1mdW5jdGlvbihlLHQpe3RyeXtSZShTZSxlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKG4pe1NlW2VdPXR9cmV0dXJuIHR9LEllPXFlLFBlPSJfX2NvcmUtanNfc2hhcmVkX18iLEVlPXNbUGVdfHxJZShQZSx7fSksT2U9RWU7KGtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2VbZV18fChPZVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjoiMy4xOS4xIixtb2RlOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAyMSBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSJ9KTt2YXIgVGU9RCx6ZT1zLk9iamVjdCxBZT1mdW5jdGlvbihlKXtyZXR1cm4gemUoVGUoZSkpfSxVZT1BZSxEZT1rKHt9Lmhhc093blByb3BlcnR5KSx4ZT1PYmplY3QuaGFzT3dufHxmdW5jdGlvbihlLHQpe3JldHVybiBEZShVZShlKSx0KX0sV2U9ayxGZT0wLE1lPU1hdGgucmFuZG9tKCksTGU9V2UoMS4udG9TdHJpbmcpLEplPWZ1bmN0aW9uKGUpe3JldHVybiJTeW1ib2woIisodm9pZCAwPT09ZT8iIjplKSsiKV8iK0xlKCsrRmUrTWUsMzYpfSxqZT1zLE5lPWtlLmV4cG9ydHMsQmU9eGUsWmU9SmUsSGU9b2UsR2U9cmUsVmU9TmUoIndrcyIpLFhlPWplLlN5bWJvbCxZZT1YZSYmWGUuZm9yLEtlPUdlP1hlOlhlJiZYZS53aXRob3V0U2V0dGVyfHxaZSwkZT1mdW5jdGlvbihlKXtpZighQmUoVmUsZSl8fCFIZSYmInN0cmluZyIhPXR5cGVvZiBWZVtlXSl7dmFyIHQ9IlN5bWJvbC4iK2U7SGUmJkJlKFhlLGUpP1ZlW2VdPVhlW2VdOlZlW2VdPUdlJiZZZT9ZZSh0KTpLZSh0KX1yZXR1cm4gVmVbZV19LFFlPWQsZXQ9Six0dD1sZSxudD1tZSxvdD1mdW5jdGlvbihlLHQpe3ZhciBuLG87aWYoInN0cmluZyI9PT10JiZfZShuPWUudG9TdHJpbmcpJiYhd2Uobz15ZShuLGUpKSlyZXR1cm4gbztpZihfZShuPWUudmFsdWVPZikmJiF3ZShvPXllKG4sZSkpKXJldHVybiBvO2lmKCJzdHJpbmciIT09dCYmX2Uobj1lLnRvU3RyaW5nKSYmIXdlKG89eWUobixlKSkpcmV0dXJuIG87dGhyb3cgQ2UoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfSxydD0kZSxpdD1zLlR5cGVFcnJvcixzdD1ydCgidG9QcmltaXRpdmUiKSxhdD1mdW5jdGlvbihlLHQpe2lmKCFldChlKXx8dHQoZSkpcmV0dXJuIGU7dmFyIG4sbz1udChlLHN0KTtpZihvKXtpZih2b2lkIDA9PT10JiYodD0iZGVmYXVsdCIpLG49UWUobyxlLHQpLCFldChuKXx8dHQobikpcmV0dXJuIG47dGhyb3cgaXQoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfXJldHVybiB2b2lkIDA9PT10JiYodD0ibnVtYmVyIiksb3QoZSx0KX0sdXQ9bGUsY3Q9ZnVuY3Rpb24oZSl7dmFyIHQ9YXQoZSwic3RyaW5nIik7cmV0dXJuIHV0KHQpP3Q6dCsiIn0sbHQ9SixkdD1zLmRvY3VtZW50LGZ0PWx0KGR0KSYmbHQoZHQuY3JlYXRlRWxlbWVudCksaHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ0P2R0LmNyZWF0ZUVsZW1lbnQoZSk6e319LHB0PWh0LHZ0PSFjJiYhdSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHB0KCJkaXYiKSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KSksYnQ9YyxndD1kLG10PWYseXQ9bSxfdD1GLHd0PWN0LEN0PXhlLGt0PXZ0LFN0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7YS5mPWJ0P1N0OmZ1bmN0aW9uKGUsdCl7aWYoZT1fdChlKSx0PXd0KHQpLGt0KXRyeXtyZXR1cm4gU3QoZSx0KX1jYXRjaChlKXt9aWYoQ3QoZSx0KSlyZXR1cm4geXQoIWd0KG10LmYsZSx0KSxlW3RdKX07dmFyIFJ0PXt9LHF0PXMsSXQ9SixQdD1xdC5TdHJpbmcsRXQ9cXQuVHlwZUVycm9yLE90PWZ1bmN0aW9uKGUpe2lmKEl0KGUpKXJldHVybiBlO3Rocm93IEV0KFB0KGUpKyIgaXMgbm90IGFuIG9iamVjdCIpfSxUdD1jLHp0PXZ0LEF0PU90LFV0PWN0LER0PXMuVHlwZUVycm9yLHh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtSdC5mPVR0P3h0OmZ1bmN0aW9uKGUsdCxuKXtpZihBdChlKSx0PVV0KHQpLEF0KG4pLHp0KXRyeXtyZXR1cm4geHQoZSx0LG4pfWNhdGNoKGUpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBEdCgiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm4idmFsdWUiaW4gbiYmKGVbdF09bi52YWx1ZSksZX07dmFyIFd0PVJ0LEZ0PW0sTXQ9Yz9mdW5jdGlvbihlLHQsbil7cmV0dXJuIFd0LmYoZSx0LEZ0KDEsbikpfTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGVbdF09bixlfSxMdD17ZXhwb3J0czp7fX0sSnQ9TSxqdD1FZSxOdD1rKEZ1bmN0aW9uLnRvU3RyaW5nKTtKdChqdC5pbnNwZWN0U291cmNlKXx8KGp0Lmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuIE50KGUpfSk7dmFyIEJ0LFp0LEh0LEd0PWp0Lmluc3BlY3RTb3VyY2UsVnQ9TSxYdD1HdCxZdD1zLldlYWtNYXAsS3Q9VnQoWXQpJiYvbmF0aXZlIGNvZGUvLnRlc3QoWHQoWXQpKSwkdD1rZS5leHBvcnRzLFF0PUplLGVuPSR0KCJrZXlzIiksdG49ZnVuY3Rpb24oZSl7cmV0dXJuIGVuW2VdfHwoZW5bZV09UXQoZSkpfSxubj17fSxvbj1LdCxybj1zLHNuPWssYW49Six1bj1NdCxjbj14ZSxsbj1FZSxkbj10bixmbj1ubixobj0iT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQiLHBuPXJuLlR5cGVFcnJvcix2bj1ybi5XZWFrTWFwO2lmKG9ufHxsbi5zdGF0ZSl7dmFyIGJuPWxuLnN0YXRlfHwobG4uc3RhdGU9bmV3IHZuKSxnbj1zbihibi5nZXQpLG1uPXNuKGJuLmhhcykseW49c24oYm4uc2V0KTtCdD1mdW5jdGlvbihlLHQpe2lmKG1uKGJuLGUpKXRocm93IG5ldyBwbihobik7cmV0dXJuIHQuZmFjYWRlPWUseW4oYm4sZSx0KSx0fSxadD1mdW5jdGlvbihlKXtyZXR1cm4gZ24oYm4sZSl8fHt9fSxIdD1mdW5jdGlvbihlKXtyZXR1cm4gbW4oYm4sZSl9fWVsc2V7dmFyIF9uPWRuKCJzdGF0ZSIpO2ZuW19uXT0hMCxCdD1mdW5jdGlvbihlLHQpe2lmKGNuKGUsX24pKXRocm93IG5ldyBwbihobik7cmV0dXJuIHQuZmFjYWRlPWUsdW4oZSxfbix0KSx0fSxadD1mdW5jdGlvbihlKXtyZXR1cm4gY24oZSxfbik/ZVtfbl06e319LEh0PWZ1bmN0aW9uKGUpe3JldHVybiBjbihlLF9uKX19dmFyIHduPXtzZXQ6QnQsZ2V0Olp0LGhhczpIdCxlbmZvcmNlOmZ1bmN0aW9uKGUpe3JldHVybiBIdChlKT9adChlKTpCdChlLHt9KX0sZ2V0dGVyRm9yOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXt2YXIgbjtpZighYW4odCl8fChuPVp0KHQpKS50eXBlIT09ZSl0aHJvdyBwbigiSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAiK2UrIiByZXF1aXJlZCIpO3JldHVybiBufX19LENuPWMsa249eGUsU249RnVuY3Rpb24ucHJvdG90eXBlLFJuPUNuJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHFuPWtuKFNuLCJuYW1lIiksSW49e0VYSVNUUzpxbixQUk9QRVI6cW4mJiJzb21ldGhpbmciPT09ZnVuY3Rpb24oKXt9Lm5hbWUsQ09ORklHVVJBQkxFOnFuJiYoIUNufHxDbiYmUm4oU24sIm5hbWUiKS5jb25maWd1cmFibGUpfSxQbj1zLEVuPU0sT249eGUsVG49TXQsem49cWUsQW49R3QsVW49SW4uQ09ORklHVVJBQkxFLERuPXduLmdldCx4bj13bi5lbmZvcmNlLFduPVN0cmluZyhTdHJpbmcpLnNwbGl0KCJTdHJpbmciKTsoTHQuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixvKXt2YXIgcixpPSEhbyYmISFvLnVuc2FmZSxzPSEhbyYmISFvLmVudW1lcmFibGUsYT0hIW8mJiEhby5ub1RhcmdldEdldCx1PW8mJnZvaWQgMCE9PW8ubmFtZT9vLm5hbWU6dDtFbihuKSYmKCJTeW1ib2woIj09PVN0cmluZyh1KS5zbGljZSgwLDcpJiYodT0iWyIrU3RyaW5nKHUpLnJlcGxhY2UoL15TeW1ib2xcKChbXildKilcKS8sIiQxIikrIl0iKSwoIU9uKG4sIm5hbWUiKXx8VW4mJm4ubmFtZSE9PXUpJiZUbihuLCJuYW1lIix1KSwocj14bihuKSkuc291cmNlfHwoci5zb3VyY2U9V24uam9pbigic3RyaW5nIj09dHlwZW9mIHU/dToiIikpKSxlIT09UG4/KGk/IWEmJmVbdF0mJihzPSEwKTpkZWxldGUgZVt0XSxzP2VbdF09bjpUbihlLHQsbikpOnM/ZVt0XT1uOnpuKHQsbil9KShGdW5jdGlvbi5wcm90b3R5cGUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gRW4odGhpcykmJkRuKHRoaXMpLnNvdXJjZXx8QW4odGhpcyl9KSk7dmFyIEZuPXt9LE1uPU1hdGguY2VpbCxMbj1NYXRoLmZsb29yLEpuPWZ1bmN0aW9uKGUpe3ZhciB0PStlO3JldHVybiB0IT10fHwwPT09dD8wOih0PjA/TG46TW4pKHQpfSxqbj1KbixObj1NYXRoLm1heCxCbj1NYXRoLm1pbixabj1KbixIbj1NYXRoLm1pbixHbj1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP0huKFpuKGUpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9LFZuPWZ1bmN0aW9uKGUpe3JldHVybiBHbihlLmxlbmd0aCl9LFhuPUYsWW49ZnVuY3Rpb24oZSx0KXt2YXIgbj1qbihlKTtyZXR1cm4gbjwwP05uKG4rdCwwKTpCbihuLHQpfSxLbj1Wbiwkbj1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuLG8pe3ZhciByLGk9WG4odCkscz1LbihpKSxhPVluKG8scyk7aWYoZSYmbiE9bil7Zm9yKDtzPmE7KWlmKChyPWlbYSsrXSkhPXIpcmV0dXJuITB9ZWxzZSBmb3IoO3M+YTthKyspaWYoKGV8fGEgaW4gaSkmJmlbYV09PT1uKXJldHVybiBlfHxhfHwwO3JldHVybiFlJiYtMX19LFFuPXtpbmNsdWRlczokbighMCksaW5kZXhPZjokbighMSl9LGVvPXhlLHRvPUYsbm89UW4uaW5kZXhPZixvbz1ubixybz1rKFtdLnB1c2gpLGlvPWZ1bmN0aW9uKGUsdCl7dmFyIG4sbz10byhlKSxyPTAsaT1bXTtmb3IobiBpbiBvKSFlbyhvbyxuKSYmZW8obyxuKSYmcm8oaSxuKTtmb3IoO3QubGVuZ3RoPnI7KWVvKG8sbj10W3IrK10pJiYofm5vKGksbil8fHJvKGksbikpO3JldHVybiBpfSxzbz1bImNvbnN0cnVjdG9yIiwiaGFzT3duUHJvcGVydHkiLCJpc1Byb3RvdHlwZU9mIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b0xvY2FsZVN0cmluZyIsInRvU3RyaW5nIiwidmFsdWVPZiJdLGFvPWlvLHVvPXNvLmNvbmNhdCgibGVuZ3RoIiwicHJvdG90eXBlIik7Rm4uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIGFvKGUsdW8pfTt2YXIgY289e307Y28uZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO3ZhciBsbz1aLGZvPUZuLGhvPWNvLHBvPU90LHZvPWsoW10uY29uY2F0KSxibz1sbygiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24oZSl7dmFyIHQ9Zm8uZihwbyhlKSksbj1oby5mO3JldHVybiBuP3ZvKHQsbihlKSk6dH0sZ289eGUsbW89Ym8seW89YSxfbz1SdCx3bz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgbj1tbyh0KSxvPV9vLmYscj15by5mLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIHM9bltpXTtnbyhlLHMpfHxvKGUscyxyKHQscykpfX0sQ289dSxrbz1NLFNvPS8jfFwucHJvdG90eXBlXC4vLFJvPWZ1bmN0aW9uKGUsdCl7dmFyIG49SW9bcW8oZSldO3JldHVybiBuPT1Fb3x8biE9UG8mJihrbyh0KT9Dbyh0KTohIXQpfSxxbz1Sby5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKFNvLCIuIikudG9Mb3dlckNhc2UoKX0sSW89Um8uZGF0YT17fSxQbz1Sby5OQVRJVkU9Ik4iLEVvPVJvLlBPTFlGSUxMPSJQIixPbz1SbyxUbz1zLHpvPWEuZixBbz1NdCxVbz1MdC5leHBvcnRzLERvPXFlLHhvPXdvLFdvPU9vLEZvPWZ1bmN0aW9uKGUsbil7dmFyIG8scixpLHMsYSx1PWUudGFyZ2V0LGM9ZS5nbG9iYWwsbD1lLnN0YXQ7aWYobz1jP1RvOmw/VG9bdV18fERvKHUse30pOihUb1t1XXx8e30pLnByb3RvdHlwZSlmb3IociBpbiBuKXtpZihzPW5bcl0saT1lLm5vVGFyZ2V0R2V0PyhhPXpvKG8scikpJiZhLnZhbHVlOm9bcl0sIVdvKGM/cjp1KyhsPyIuIjoiIyIpK3IsZS5mb3JjZWQpJiZ2b2lkIDAhPT1pKXtpZih0KHMpPT10KGkpKWNvbnRpbnVlO3hvKHMsaSl9KGUuc2hhbXx8aSYmaS5zaGFtKSYmQW8ocywic2hhbSIsITApLFVvKG8scixzLGUpfX0sTW89aW8sTG89c28sSm89T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiBNbyhlLExvKX0sam89YyxObz1rLEJvPWQsWm89dSxIbz1KbyxHbz1jbyxWbz1mLFhvPUFlLFlvPUEsS289T2JqZWN0LmFzc2lnbiwkbz1PYmplY3QuZGVmaW5lUHJvcGVydHksUW89Tm8oW10uY29uY2F0KSxlcj0hS298fFpvKChmdW5jdGlvbigpe2lmKGpvJiYxIT09S28oe2I6MX0sS28oJG8oe30sImEiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpeyRvKHRoaXMsImIiLHt2YWx1ZTozLGVudW1lcmFibGU6ITF9KX19KSx7YjoyfSkpLmIpcmV0dXJuITA7dmFyIGU9e30sdD17fSxuPVN5bWJvbCgpLG89ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gZVtuXT03LG8uc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZX0pKSw3IT1Lbyh7fSxlKVtuXXx8SG8oS28oe30sdCkpLmpvaW4oIiIpIT1vfSkpP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVhvKGUpLG89YXJndW1lbnRzLmxlbmd0aCxyPTEsaT1Hby5mLHM9Vm8uZjtvPnI7KWZvcih2YXIgYSx1PVlvKGFyZ3VtZW50c1tyKytdKSxjPWk/UW8oSG8odSksaSh1KSk6SG8odSksbD1jLmxlbmd0aCxkPTA7bD5kOylhPWNbZCsrXSxqbyYmIUJvKHMsdSxhKXx8KG5bYV09dVthXSk7cmV0dXJuIG59OktvLHRyPWVyO0ZvKHt0YXJnZXQ6Ik9iamVjdCIsc3RhdDohMCxmb3JjZWQ6T2JqZWN0LmFzc2lnbiE9PXRyfSx7YXNzaWduOnRyfSk7dmFyIG5yPXM7bnIuT2JqZWN0LmFzc2lnbjt2YXIgb3IscnI9IXUoKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbCxPYmplY3QuZ2V0UHJvdG90eXBlT2YobmV3IGUpIT09ZS5wcm90b3R5cGV9KSksaXI9cyxzcj14ZSxhcj1NLHVyPUFlLGNyPXJyLGxyPXRuKCJJRV9QUk9UTyIpLGRyPWlyLk9iamVjdCxmcj1kci5wcm90b3R5cGUsaHI9Y3I/ZHIuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7dmFyIHQ9dXIoZSk7aWYoc3IodCxscikpcmV0dXJuIHRbbHJdO3ZhciBuPXQuY29uc3RydWN0b3I7cmV0dXJuIGFyKG4pJiZ0IGluc3RhbmNlb2Ygbj9uLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgZHI/ZnI6bnVsbH0scHI9cyx2cj1NLGJyPXByLlN0cmluZyxncj1wci5UeXBlRXJyb3IsbXI9ayx5cj1PdCxfcj1mdW5jdGlvbihlKXtpZigib2JqZWN0Ij09dChlKXx8dnIoZSkpcmV0dXJuIGU7dGhyb3cgZ3IoIkNhbid0IHNldCAiK2JyKGUpKyIgYXMgYSBwcm90b3R5cGUiKX0sd3I9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxuPXt9O3RyeXsoZT1tcihPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIpLnNldCkpKG4sW10pLHQ9biBpbnN0YW5jZW9mIEFycmF5fWNhdGNoKGUpe31yZXR1cm4gZnVuY3Rpb24obixvKXtyZXR1cm4geXIobiksX3IobyksdD9lKG4sbyk6bi5fX3Byb3RvX189byxufX0oKTp2b2lkIDApLENyPVJ0LGtyPU90LFNyPUYsUnI9Sm8scXI9Yz9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe2tyKGUpO2Zvcih2YXIgbixvPVNyKHQpLHI9UnIodCksaT1yLmxlbmd0aCxzPTA7aT5zOylDci5mKGUsbj1yW3MrK10sb1tuXSk7cmV0dXJuIGV9LElyPVooImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50IiksUHI9T3QsRXI9cXIsT3I9c28sVHI9bm4senI9SXIsQXI9aHQsVXI9dG4oIklFX1BST1RPIiksRHI9ZnVuY3Rpb24oKXt9LHhyPWZ1bmN0aW9uKGUpe3JldHVybiI8c2NyaXB0PiIrZSsiPC8iKyJzY3JpcHQ+In0sV3I9ZnVuY3Rpb24oZSl7ZS53cml0ZSh4cigiIikpLGUuY2xvc2UoKTt2YXIgdD1lLnBhcmVudFdpbmRvdy5PYmplY3Q7cmV0dXJuIGU9bnVsbCx0fSxGcj1mdW5jdGlvbigpe3RyeXtvcj1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChlKXt9dmFyIGUsdDtGcj0idW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50LmRvbWFpbiYmb3I/V3Iob3IpOigodD1BcigiaWZyYW1lIikpLnN0eWxlLmRpc3BsYXk9Im5vbmUiLHpyLmFwcGVuZENoaWxkKHQpLHQuc3JjPVN0cmluZygiamF2YXNjcmlwdDoiKSwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKHhyKCJkb2N1bWVudC5GPU9iamVjdCIpKSxlLmNsb3NlKCksZS5GKTpXcihvcik7Zm9yKHZhciBuPU9yLmxlbmd0aDtuLS07KWRlbGV0ZSBGci5wcm90b3R5cGVbT3Jbbl1dO3JldHVybiBGcigpfTtUcltVcl09ITA7dmFyIE1yPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuIG51bGwhPT1lPyhEci5wcm90b3R5cGU9UHIoZSksbj1uZXcgRHIsRHIucHJvdG90eXBlPW51bGwsbltVcl09ZSk6bj1GcigpLHZvaWQgMD09PXQ/bjpFcihuLHQpfSxMcj1rKFtdLnNsaWNlKSxKcj1rLGpyPUxyLE5yPUpyKCIiLnJlcGxhY2UpLEJyPUpyKCIiLnNwbGl0KSxacj1KcihbXS5qb2luKSxIcj1TdHJpbmcoRXJyb3IoInp4Y2FzZCIpLnN0YWNrKSxHcj0vXG5ccyphdCBbXjpdKjpbXlxuXSovLFZyPUdyLnRlc3QoSHIpLFhyPS9AW15cbl0qXG4vLnRlc3QoSHIpJiYhL3p4Y2FzZC8udGVzdChIciksWXI9SixLcj1NdCwkcj1iZSxRcj1rKGsuYmluZCksZWk9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gJHIoZSksdm9pZCAwPT09dD9lOlFyP1FyKGUsdCk6ZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fSx0aT17fSxuaT10aSxvaT0kZSgiaXRlcmF0b3IiKSxyaT1BcnJheS5wcm90b3R5cGUsaWk9e307aWlbJGUoInRvU3RyaW5nVGFnIildPSJ6Ijt2YXIgc2k9IltvYmplY3Qgel0iPT09U3RyaW5nKGlpKSxhaT1zLHVpPXNpLGNpPU0sbGk9SSxkaT0kZSgidG9TdHJpbmdUYWciKSxmaT1haS5PYmplY3QsaGk9IkFyZ3VtZW50cyI9PWxpKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSkscGk9dWk/bGk6ZnVuY3Rpb24oZSl7dmFyIHQsbixvO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKG49ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1maShlKSxkaSkpP246aGk/bGkodCk6Ik9iamVjdCI9PShvPWxpKHQpKSYmY2kodC5jYWxsZWUpPyJBcmd1bWVudHMiOm99LHZpPXBpLGJpPW1lLGdpPXRpLG1pPSRlKCJpdGVyYXRvciIpLHlpPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIGJpKGUsbWkpfHxiaShlLCJAQGl0ZXJhdG9yIil8fGdpW3ZpKGUpXX0sX2k9ZCx3aT1iZSxDaT1PdCxraT1mZSxTaT15aSxSaT1zLlR5cGVFcnJvcixxaT1kLElpPU90LFBpPW1lLEVpPWVpLE9pPWQsVGk9T3Qsemk9ZmUsQWk9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihuaS5BcnJheT09PWV8fHJpW29pXT09PWUpfSxVaT1WbixEaT1ILHhpPWZ1bmN0aW9uKGUsdCl7dmFyIG49YXJndW1lbnRzLmxlbmd0aDwyP1NpKGUpOnQ7aWYod2kobikpcmV0dXJuIENpKF9pKG4sZSkpO3Rocm93IFJpKGtpKGUpKyIgaXMgbm90IGl0ZXJhYmxlIil9LFdpPXlpLEZpPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxyO0lpKGUpO3RyeXtpZighKG89UGkoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyBuO3JldHVybiBufW89cWkobyxlKX1jYXRjaChlKXtyPSEwLG89ZX1pZigidGhyb3ciPT09dCl0aHJvdyBuO2lmKHIpdGhyb3cgbztyZXR1cm4gSWkobyksbn0sTWk9cy5UeXBlRXJyb3IsTGk9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZSx0aGlzLnJlc3VsdD10fSxKaT1MaS5wcm90b3R5cGUsamk9ZnVuY3Rpb24oZSxuLG8pe3ZhciByLGkscyxhLHUsYyxsLGQ9byYmby50aGF0LGY9ISghb3x8IW8uQVNfRU5UUklFUyksaD0hKCFvfHwhby5JU19JVEVSQVRPUikscD0hKCFvfHwhby5JTlRFUlJVUFRFRCksdj1FaShuLGQpLGI9ZnVuY3Rpb24oZSl7cmV0dXJuIHImJkZpKHIsIm5vcm1hbCIsZSksbmV3IExpKCEwLGUpfSxnPWZ1bmN0aW9uKGUpe3JldHVybiBmPyhUaShlKSxwP3YoZVswXSxlWzFdLGIpOnYoZVswXSxlWzFdKSk6cD92KGUsYik6dihlKX07aWYoaClyPWU7ZWxzZXtpZighKGk9V2koZSkpKXRocm93IE1pKHppKGUpKyIgaXMgbm90IGl0ZXJhYmxlIik7aWYoQWkoaSkpe2ZvcihzPTAsYT1VaShlKTthPnM7cysrKWlmKCh1PWcoZVtzXSkpJiZEaShKaSx1KSlyZXR1cm4gdTtyZXR1cm4gbmV3IExpKCExKX1yPXhpKGUsaSl9Zm9yKGM9ci5uZXh0OyEobD1PaShjLHIpKS5kb25lOyl7dHJ5e3U9ZyhsLnZhbHVlKX1jYXRjaChlKXtGaShyLCJ0aHJvdyIsZSl9aWYoIm9iamVjdCI9PXQodSkmJnUmJkRpKEppLHUpKXJldHVybiB1fXJldHVybiBuZXcgTGkoITEpfSxOaT1waSxCaT1zLlN0cmluZyxaaT1mdW5jdGlvbihlKXtpZigiU3ltYm9sIj09PU5pKGUpKXRocm93IFR5cGVFcnJvcigiQ2Fubm90IGNvbnZlcnQgYSBTeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmciKTtyZXR1cm4gQmkoZSl9LEhpPVppLEdpPW0sVmk9IXUoKGZ1bmN0aW9uKCl7dmFyIGU9RXJyb3IoImEiKTtyZXR1cm4hKCJzdGFjayJpbiBlKXx8KE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdGFjayIsR2koMSw3KSksNyE9PWUuc3RhY2spfSkpLFhpPUZvLFlpPXMsS2k9SCwkaT1ocixRaT13cixlcz13byx0cz1Ncixucz1NdCxvcz1tLHJzPWZ1bmN0aW9uKGUsdCl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiBlO2lmKFZyKWZvcig7dC0tOyllPU5yKGUsR3IsIiIpO2Vsc2UgaWYoWHIpcmV0dXJuIFpyKGpyKEJyKGUsIlxuIiksdCksIlxuIik7cmV0dXJuIGV9LGlzPWZ1bmN0aW9uKGUsdCl7WXIodCkmJiJjYXVzZSJpbiB0JiZLcihlLCJjYXVzZSIsdC5jYXVzZSl9LHNzPWppLGFzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWU/YXJndW1lbnRzLmxlbmd0aDwyPyIiOnQ6SGkoZSl9LHVzPVZpLGNzPSRlKCJ0b1N0cmluZ1RhZyIpLGxzPVlpLkVycm9yLGRzPVtdLnB1c2gsZnM9ZnVuY3Rpb24oZSx0KXt2YXIgbixvPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLHI9S2koaHMsdGhpcyk7UWk/bj1RaShuZXcgbHModm9pZCAwKSxyPyRpKHRoaXMpOmhzKToobj1yP3RoaXM6dHMoaHMpLG5zKG4sY3MsIkVycm9yIikpLG5zKG4sIm1lc3NhZ2UiLGFzKHQsIiIpKSx1cyYmbnMobiwic3RhY2siLHJzKG4uc3RhY2ssMSkpLGlzKG4sbyk7dmFyIGk9W107cmV0dXJuIHNzKGUsZHMse3RoYXQ6aX0pLG5zKG4sImVycm9ycyIsaSksbn07UWk/UWkoZnMsbHMpOmVzKGZzLGxzKTt2YXIgaHM9ZnMucHJvdG90eXBlPXRzKGxzLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6b3MoMSxmcyksbWVzc2FnZTpvcygxLCIiKSxuYW1lOm9zKDEsIkFnZ3JlZ2F0ZUVycm9yIil9KTtYaSh7Z2xvYmFsOiEwfSx7QWdncmVnYXRlRXJyb3I6ZnN9KTt2YXIgcHM9TXIsdnM9UnQsYnM9JGUoInVuc2NvcGFibGVzIiksZ3M9QXJyYXkucHJvdG90eXBlO251bGw9PWdzW2JzXSYmdnMuZihncyxicyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnBzKG51bGwpfSk7dmFyIG1zLHlzLF9zLHdzPXUsQ3M9TSxrcz1ocixTcz1MdC5leHBvcnRzLFJzPSRlKCJpdGVyYXRvciIpLHFzPSExO1tdLmtleXMmJigibmV4dCJpbihfcz1bXS5rZXlzKCkpPyh5cz1rcyhrcyhfcykpKSE9PU9iamVjdC5wcm90b3R5cGUmJihtcz15cyk6cXM9ITApO3ZhciBJcz1udWxsPT1tc3x8d3MoKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIG1zW1JzXS5jYWxsKGUpIT09ZX0pKTtJcyYmKG1zPXt9KSxDcyhtc1tSc10pfHxTcyhtcyxScywoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTt2YXIgUHM9e0l0ZXJhdG9yUHJvdG90eXBlOm1zLEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6cXN9LEVzPVJ0LmYsT3M9eGUsVHM9JGUoInRvU3RyaW5nVGFnIiksenM9ZnVuY3Rpb24oZSx0LG4pe2UmJiFPcyhlPW4/ZTplLnByb3RvdHlwZSxUcykmJkVzKGUsVHMse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9LEFzPVBzLkl0ZXJhdG9yUHJvdG90eXBlLFVzPU1yLERzPW0seHM9enMsV3M9dGksRnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sTXM9Rm8sTHM9ZCxKcz1Jbixqcz1NLE5zPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz10KyIgSXRlcmF0b3IiO3JldHVybiBlLnByb3RvdHlwZT1VcyhBcyx7bmV4dDpEcygxLG4pfSkseHMoZSxvLCExKSxXc1tvXT1GcyxlfSxCcz1ocixacz13cixIcz16cyxHcz1NdCxWcz1MdC5leHBvcnRzLFhzPXRpLFlzPUpzLlBST1BFUixLcz1Kcy5DT05GSUdVUkFCTEUsJHM9UHMuSXRlcmF0b3JQcm90b3R5cGUsUXM9UHMuQlVHR1lfU0FGQVJJX0lURVJBVE9SUyxlYT0kZSgiaXRlcmF0b3IiKSx0YT0ia2V5cyIsbmE9InZhbHVlcyIsb2E9ImVudHJpZXMiLHJhPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGlhPWZ1bmN0aW9uKGUsdCxuLG8scixpLHMpe05zKG4sdCxvKTt2YXIgYSx1LGMsbD1mdW5jdGlvbihlKXtpZihlPT09ciYmdilyZXR1cm4gdjtpZighUXMmJmUgaW4gaClyZXR1cm4gaFtlXTtzd2l0Y2goZSl7Y2FzZSB0YTpjYXNlIG5hOmNhc2Ugb2E6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgbih0aGlzKX19LGQ9dCsiIEl0ZXJhdG9yIixmPSExLGg9ZS5wcm90b3R5cGUscD1oW2VhXXx8aFsiQEBpdGVyYXRvciJdfHxyJiZoW3JdLHY9IVFzJiZwfHxsKHIpLGI9IkFycmF5Ij09dCYmaC5lbnRyaWVzfHxwO2lmKGImJihhPUJzKGIuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJmEubmV4dCYmKEJzKGEpIT09JHMmJihacz9acyhhLCRzKTpqcyhhW2VhXSl8fFZzKGEsZWEscmEpKSxIcyhhLGQsITApKSxZcyYmcj09bmEmJnAmJnAubmFtZSE9PW5hJiYoS3M/R3MoaCwibmFtZSIsbmEpOihmPSEwLHY9ZnVuY3Rpb24oKXtyZXR1cm4gTHMocCx0aGlzKX0pKSxyKWlmKHU9e3ZhbHVlczpsKG5hKSxrZXlzOmk/djpsKHRhKSxlbnRyaWVzOmwob2EpfSxzKWZvcihjIGluIHUpKFFzfHxmfHwhKGMgaW4gaCkpJiZWcyhoLGMsdVtjXSk7ZWxzZSBNcyh7dGFyZ2V0OnQscHJvdG86ITAsZm9yY2VkOlFzfHxmfSx1KTtyZXR1cm4gaFtlYV0hPT12JiZWcyhoLGVhLHYse25hbWU6cn0pLFhzW3RdPXYsdX0sc2E9RixhYT1mdW5jdGlvbihlKXtnc1tic11bZV09ITB9LHVhPXRpLGNhPXduLGxhPWlhLGRhPSJBcnJheSBJdGVyYXRvciIsZmE9Y2Euc2V0LGhhPWNhLmdldHRlckZvcihkYSkscGE9bGEoQXJyYXksIkFycmF5IiwoZnVuY3Rpb24oZSx0KXtmYSh0aGlzLHt0eXBlOmRhLHRhcmdldDpzYShlKSxpbmRleDowLGtpbmQ6dH0pfSksKGZ1bmN0aW9uKCl7dmFyIGU9aGEodGhpcyksdD1lLnRhcmdldCxuPWUua2luZCxvPWUuaW5kZXgrKztyZXR1cm4hdHx8bz49dC5sZW5ndGg/KGUudGFyZ2V0PXZvaWQgMCx7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KToia2V5cyI9PW4/e3ZhbHVlOm8sZG9uZTohMX06InZhbHVlcyI9PW4/e3ZhbHVlOnRbb10sZG9uZTohMX06e3ZhbHVlOltvLHRbb11dLGRvbmU6ITF9fSksInZhbHVlcyIpO3VhLkFyZ3VtZW50cz11YS5BcnJheSxhYSgia2V5cyIpLGFhKCJ2YWx1ZXMiKSxhYSgiZW50cmllcyIpO3ZhciB2YT1waSxiYT1zaT97fS50b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrdmEodGhpcykrIl0ifSxnYT1zaSxtYT1MdC5leHBvcnRzLHlhPWJhO2dhfHxtYShPYmplY3QucHJvdG90eXBlLCJ0b1N0cmluZyIseWEse3Vuc2FmZTohMH0pO3ZhciBfYT1zLlByb21pc2Usd2E9THQuZXhwb3J0cyxDYT1aLGthPVJ0LFNhPWMsUmE9JGUoInNwZWNpZXMiKSxxYT1ILElhPXMuVHlwZUVycm9yLFBhPSRlKCJpdGVyYXRvciIpLEVhPSExO3RyeXt2YXIgT2E9MCxUYT17bmV4dDpmdW5jdGlvbigpe3JldHVybntkb25lOiEhT2ErK319LHJldHVybjpmdW5jdGlvbigpe0VhPSEwfX07VGFbUGFdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEFycmF5LmZyb20oVGEsKGZ1bmN0aW9uKCl7dGhyb3cgMn0pKX1jYXRjaChlKXt9dmFyIHphLEFhLFVhLERhLHhhPWssV2E9dSxGYT1NLE1hPXBpLExhPUd0LEphPWZ1bmN0aW9uKCl7fSxqYT1bXSxOYT1aKCJSZWZsZWN0IiwiY29uc3RydWN0IiksQmE9L15ccyooPzpjbGFzc3xmdW5jdGlvbilcYi8sWmE9eGEoQmEuZXhlYyksSGE9IUJhLmV4ZWMoSmEpLEdhPWZ1bmN0aW9uKGUpe2lmKCFGYShlKSlyZXR1cm4hMTt0cnl7cmV0dXJuIE5hKEphLGphLGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sVmE9IU5hfHxXYSgoZnVuY3Rpb24oKXt2YXIgZTtyZXR1cm4gR2EoR2EuY2FsbCl8fCFHYShPYmplY3QpfHwhR2EoKGZ1bmN0aW9uKCl7ZT0hMH0pKXx8ZX0pKT9mdW5jdGlvbihlKXtpZighRmEoZSkpcmV0dXJuITE7c3dpdGNoKE1hKGUpKXtjYXNlIkFzeW5jRnVuY3Rpb24iOmNhc2UiR2VuZXJhdG9yRnVuY3Rpb24iOmNhc2UiQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiI6cmV0dXJuITF9cmV0dXJuIEhhfHwhIVphKEJhLExhKGUpKX06R2EsWGE9VmEsWWE9ZmUsS2E9cy5UeXBlRXJyb3IsJGE9T3QsUWE9ZnVuY3Rpb24oZSl7aWYoWGEoZSkpcmV0dXJuIGU7dGhyb3cgS2EoWWEoZSkrIiBpcyBub3QgYSBjb25zdHJ1Y3RvciIpfSxldT0kZSgic3BlY2llcyIpLHR1PWZ1bmN0aW9uKGUsdCl7dmFyIG4sbz0kYShlKS5jb25zdHJ1Y3RvcjtyZXR1cm4gdm9pZCAwPT09b3x8bnVsbD09KG49JGEobylbZXVdKT90OlFhKG4pfSxudT1GdW5jdGlvbi5wcm90b3R5cGUsb3U9bnUuYXBwbHkscnU9bnUuYmluZCxpdT1udS5jYWxsLHN1PSJvYmplY3QiPT0oInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0PyJ1bmRlZmluZWQiOnQoUmVmbGVjdCkpJiZSZWZsZWN0LmFwcGx5fHwocnU/aXUuYmluZChvdSk6ZnVuY3Rpb24oKXtyZXR1cm4gaXUuYXBwbHkob3UsYXJndW1lbnRzKX0pLGF1PS8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KEcpLHV1PSJwcm9jZXNzIj09SShzLnByb2Nlc3MpLGN1PXMsbHU9c3UsZHU9ZWksZnU9TSxodT14ZSxwdT11LHZ1PUlyLGJ1PUxyLGd1PWh0LG11PWF1LHl1PXV1LF91PWN1LnNldEltbWVkaWF0ZSx3dT1jdS5jbGVhckltbWVkaWF0ZSxDdT1jdS5wcm9jZXNzLGt1PWN1LkRpc3BhdGNoLFN1PWN1LkZ1bmN0aW9uLFJ1PWN1Lk1lc3NhZ2VDaGFubmVsLHF1PWN1LlN0cmluZyxJdT0wLFB1PXt9LEV1PSJvbnJlYWR5c3RhdGVjaGFuZ2UiO3RyeXt6YT1jdS5sb2NhdGlvbn1jYXRjaChlKXt9dmFyIE91PWZ1bmN0aW9uKGUpe2lmKGh1KFB1LGUpKXt2YXIgdD1QdVtlXTtkZWxldGUgUHVbZV0sdCgpfX0sVHU9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7T3UoZSl9fSx6dT1mdW5jdGlvbihlKXtPdShlLmRhdGEpfSxBdT1mdW5jdGlvbihlKXtjdS5wb3N0TWVzc2FnZShxdShlKSx6YS5wcm90b2NvbCsiLy8iK3phLmhvc3QpfTtfdSYmd3V8fChfdT1mdW5jdGlvbihlKXt2YXIgdD1idShhcmd1bWVudHMsMSk7cmV0dXJuIFB1WysrSXVdPWZ1bmN0aW9uKCl7bHUoZnUoZSk/ZTpTdShlKSx2b2lkIDAsdCl9LEFhKEl1KSxJdX0sd3U9ZnVuY3Rpb24oZSl7ZGVsZXRlIFB1W2VdfSx5dT9BYT1mdW5jdGlvbihlKXtDdS5uZXh0VGljayhUdShlKSl9Omt1JiZrdS5ub3c/QWE9ZnVuY3Rpb24oZSl7a3Uubm93KFR1KGUpKX06UnUmJiFtdT8oRGE9KFVhPW5ldyBSdSkucG9ydDIsVWEucG9ydDEub25tZXNzYWdlPXp1LEFhPWR1KERhLnBvc3RNZXNzYWdlLERhKSk6Y3UuYWRkRXZlbnRMaXN0ZW5lciYmZnUoY3UucG9zdE1lc3NhZ2UpJiYhY3UuaW1wb3J0U2NyaXB0cyYmemEmJiJmaWxlOiIhPT16YS5wcm90b2NvbCYmIXB1KEF1KT8oQWE9QXUsY3UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsenUsITEpKTpBYT1FdSBpbiBndSgic2NyaXB0Iik/ZnVuY3Rpb24oZSl7dnUuYXBwZW5kQ2hpbGQoZ3UoInNjcmlwdCIpKS5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXt2dS5yZW1vdmVDaGlsZCh0aGlzKSxPdShlKX19OmZ1bmN0aW9uKGUpe3NldFRpbWVvdXQoVHUoZSksMCl9KTt2YXIgVXUsRHUseHUsV3UsRnUsTXUsTHUsSnUsanU9e3NldDpfdSxjbGVhcjp3dX0sTnU9cyxCdT0vaXBhZHxpcGhvbmV8aXBvZC9pLnRlc3QoRykmJnZvaWQgMCE9PU51LlBlYmJsZSxadT0vd2ViMHMoPyEuKmNocm9tZSkvaS50ZXN0KEcpLEh1PXMsR3U9ZWksVnU9YS5mLFh1PWp1LnNldCxZdT1hdSxLdT1CdSwkdT1adSxRdT11dSxlYz1IdS5NdXRhdGlvbk9ic2VydmVyfHxIdS5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLHRjPUh1LmRvY3VtZW50LG5jPUh1LnByb2Nlc3Msb2M9SHUuUHJvbWlzZSxyYz1WdShIdSwicXVldWVNaWNyb3Rhc2siKSxpYz1yYyYmcmMudmFsdWU7aWN8fChVdT1mdW5jdGlvbigpe3ZhciBlLHQ7Zm9yKFF1JiYoZT1uYy5kb21haW4pJiZlLmV4aXQoKTtEdTspe3Q9RHUuZm4sRHU9RHUubmV4dDt0cnl7dCgpfWNhdGNoKGUpe3Rocm93IER1P1d1KCk6eHU9dm9pZCAwLGV9fXh1PXZvaWQgMCxlJiZlLmVudGVyKCl9LFl1fHxRdXx8JHV8fCFlY3x8IXRjPyFLdSYmb2MmJm9jLnJlc29sdmU/KChMdT1vYy5yZXNvbHZlKHZvaWQgMCkpLmNvbnN0cnVjdG9yPW9jLEp1PUd1KEx1LnRoZW4sTHUpLFd1PWZ1bmN0aW9uKCl7SnUoVXUpfSk6UXU/V3U9ZnVuY3Rpb24oKXtuYy5uZXh0VGljayhVdSl9OihYdT1HdShYdSxIdSksV3U9ZnVuY3Rpb24oKXtYdShVdSl9KTooRnU9ITAsTXU9dGMuY3JlYXRlVGV4dE5vZGUoIiIpLG5ldyBlYyhVdSkub2JzZXJ2ZShNdSx7Y2hhcmFjdGVyRGF0YTohMH0pLFd1PWZ1bmN0aW9uKCl7TXUuZGF0YT1GdT0hRnV9KSk7dmFyIHNjPWljfHxmdW5jdGlvbihlKXt2YXIgdD17Zm46ZSxuZXh0OnZvaWQgMH07eHUmJih4dS5uZXh0PXQpLER1fHwoRHU9dCxXdSgpKSx4dT10fSxhYz17fSx1Yz1iZSxjYz1mdW5jdGlvbihlKXt2YXIgdCxuO3RoaXMucHJvbWlzZT1uZXcgZSgoZnVuY3Rpb24oZSxvKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1uKXRocm93IFR5cGVFcnJvcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PWUsbj1vfSkpLHRoaXMucmVzb2x2ZT11Yyh0KSx0aGlzLnJlamVjdD11YyhuKX07YWMuZj1mdW5jdGlvbihlKXtyZXR1cm4gbmV3IGNjKGUpfTt2YXIgbGMsZGMsZmMsaGMscGM9T3QsdmM9SixiYz1hYyxnYz1mdW5jdGlvbihlLHQpe2lmKHBjKGUpLHZjKHQpJiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgbj1iYy5mKGUpO3JldHVybigwLG4ucmVzb2x2ZSkodCksbi5wcm9taXNlfSxtYz1zLHljPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm57ZXJyb3I6ITEsdmFsdWU6ZSgpfX1jYXRjaChlKXtyZXR1cm57ZXJyb3I6ITAsdmFsdWU6ZX19fSxfYz0ib2JqZWN0Ij09KCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PyJ1bmRlZmluZWQiOnQod2luZG93KSksd2M9Rm8sQ2M9cyxrYz1aLFNjPWQsUmM9X2EscWM9THQuZXhwb3J0cyxJYz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpd2EoZSxvLHRbb10sbik7cmV0dXJuIGV9LFBjPXdyLEVjPXpzLE9jPWZ1bmN0aW9uKGUpe3ZhciB0PUNhKGUpLG49a2EuZjtTYSYmdCYmIXRbUmFdJiZuKHQsUmEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX0sVGM9YmUsemM9TSxBYz1KLFVjPWZ1bmN0aW9uKGUsdCl7aWYocWEodCxlKSlyZXR1cm4gZTt0aHJvdyBJYSgiSW5jb3JyZWN0IGludm9jYXRpb24iKX0sRGM9R3QseGM9amksV2M9ZnVuY3Rpb24oZSx0KXtpZighdCYmIUVhKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgbz17fTtvW1BhXT1mdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19fX0sZShvKX1jYXRjaChlKXt9cmV0dXJuIG59LEZjPXR1LE1jPWp1LnNldCxMYz1zYyxKYz1nYyxqYz1mdW5jdGlvbihlLHQpe3ZhciBuPW1jLmNvbnNvbGU7biYmbi5lcnJvciYmKDE9PWFyZ3VtZW50cy5sZW5ndGg/bi5lcnJvcihlKTpuLmVycm9yKGUsdCkpfSxOYz1hYyxCYz15YyxaYz13bixIYz1PbyxHYz1fYyxWYz11dSxYYz1lZSxZYz0kZSgic3BlY2llcyIpLEtjPSJQcm9taXNlIiwkYz1aYy5nZXQsUWM9WmMuc2V0LGVsPVpjLmdldHRlckZvcihLYyksdGw9UmMmJlJjLnByb3RvdHlwZSxubD1SYyxvbD10bCxybD1DYy5UeXBlRXJyb3IsaWw9Q2MuZG9jdW1lbnQsc2w9Q2MucHJvY2VzcyxhbD1OYy5mLHVsPWFsLGNsPSEhKGlsJiZpbC5jcmVhdGVFdmVudCYmQ2MuZGlzcGF0Y2hFdmVudCksbGw9emMoQ2MuUHJvbWlzZVJlamVjdGlvbkV2ZW50KSxkbD0idW5oYW5kbGVkcmVqZWN0aW9uIixmbD0hMSxobD1IYyhLYywoZnVuY3Rpb24oKXt2YXIgZT1EYyhubCksdD1lIT09U3RyaW5nKG5sKTtpZighdCYmNjY9PT1YYylyZXR1cm4hMDtpZihYYz49NTEmJi9uYXRpdmUgY29kZS8udGVzdChlKSlyZXR1cm4hMTt2YXIgbj1uZXcgbmwoKGZ1bmN0aW9uKGUpe2UoMSl9KSksbz1mdW5jdGlvbihlKXtlKChmdW5jdGlvbigpe30pLChmdW5jdGlvbigpe30pKX07cmV0dXJuKG4uY29uc3RydWN0b3I9e30pW1ljXT1vLCEoZmw9bi50aGVuKChmdW5jdGlvbigpe30pKWluc3RhbmNlb2Ygbyl8fCF0JiZHYyYmIWxsfSkpLHBsPWhsfHwhV2MoKGZ1bmN0aW9uKGUpe25sLmFsbChlKS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9KSksdmw9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuISghQWMoZSl8fCF6Yyh0PWUudGhlbikpJiZ0fSxibD1mdW5jdGlvbihlLHQpe2lmKCFlLm5vdGlmaWVkKXtlLm5vdGlmaWVkPSEwO3ZhciBuPWUucmVhY3Rpb25zO0xjKChmdW5jdGlvbigpe2Zvcih2YXIgbz1lLnZhbHVlLHI9MT09ZS5zdGF0ZSxpPTA7bi5sZW5ndGg+aTspe3ZhciBzLGEsdSxjPW5baSsrXSxsPXI/Yy5vazpjLmZhaWwsZD1jLnJlc29sdmUsZj1jLnJlamVjdCxoPWMuZG9tYWluO3RyeXtsPyhyfHwoMj09PWUucmVqZWN0aW9uJiZfbChlKSxlLnJlamVjdGlvbj0xKSwhMD09PWw/cz1vOihoJiZoLmVudGVyKCkscz1sKG8pLGgmJihoLmV4aXQoKSx1PSEwKSkscz09PWMucHJvbWlzZT9mKHJsKCJQcm9taXNlLWNoYWluIGN5Y2xlIikpOihhPXZsKHMpKT9TYyhhLHMsZCxmKTpkKHMpKTpmKG8pfWNhdGNoKGUpe2gmJiF1JiZoLmV4aXQoKSxmKGUpfX1lLnJlYWN0aW9ucz1bXSxlLm5vdGlmaWVkPSExLHQmJiFlLnJlamVjdGlvbiYmbWwoZSl9KSl9fSxnbD1mdW5jdGlvbihlLHQsbil7dmFyIG8scjtjbD8oKG89aWwuY3JlYXRlRXZlbnQoIkV2ZW50IikpLnByb21pc2U9dCxvLnJlYXNvbj1uLG8uaW5pdEV2ZW50KGUsITEsITApLENjLmRpc3BhdGNoRXZlbnQobykpOm89e3Byb21pc2U6dCxyZWFzb246bn0sIWxsJiYocj1DY1sib24iK2VdKT9yKG8pOmU9PT1kbCYmamMoIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIsbil9LG1sPWZ1bmN0aW9uKGUpe1NjKE1jLENjLChmdW5jdGlvbigpe3ZhciB0LG49ZS5mYWNhZGUsbz1lLnZhbHVlO2lmKHlsKGUpJiYodD1CYygoZnVuY3Rpb24oKXtWYz9zbC5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLG8sbik6Z2woZGwsbixvKX0pKSxlLnJlamVjdGlvbj1WY3x8eWwoZSk/MjoxLHQuZXJyb3IpKXRocm93IHQudmFsdWV9KSl9LHlsPWZ1bmN0aW9uKGUpe3JldHVybiAxIT09ZS5yZWplY3Rpb24mJiFlLnBhcmVudH0sX2w9ZnVuY3Rpb24oZSl7U2MoTWMsQ2MsKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5mYWNhZGU7VmM/c2wuZW1pdCgicmVqZWN0aW9uSGFuZGxlZCIsdCk6Z2woInJlamVjdGlvbmhhbmRsZWQiLHQsZS52YWx1ZSl9KSl9LHdsPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZnVuY3Rpb24obyl7ZSh0LG8sbil9fSxDbD1mdW5jdGlvbihlLHQsbil7ZS5kb25lfHwoZS5kb25lPSEwLG4mJihlPW4pLGUudmFsdWU9dCxlLnN0YXRlPTIsYmwoZSwhMCkpfSxrbD1mdW5jdGlvbiBlKHQsbixvKXtpZighdC5kb25lKXt0LmRvbmU9ITAsbyYmKHQ9byk7dHJ5e2lmKHQuZmFjYWRlPT09bil0aHJvdyBybCgiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTt2YXIgcj12bChuKTtyP0xjKChmdW5jdGlvbigpe3ZhciBvPXtkb25lOiExfTt0cnl7U2MocixuLHdsKGUsbyx0KSx3bChDbCxvLHQpKX1jYXRjaChlKXtDbChvLGUsdCl9fSkpOih0LnZhbHVlPW4sdC5zdGF0ZT0xLGJsKHQsITEpKX1jYXRjaChlKXtDbCh7ZG9uZTohMX0sZSx0KX19fTtpZihobCYmKG9sPShubD1mdW5jdGlvbihlKXtVYyh0aGlzLG9sKSxUYyhlKSxTYyhsYyx0aGlzKTt2YXIgdD0kYyh0aGlzKTt0cnl7ZSh3bChrbCx0KSx3bChDbCx0KSl9Y2F0Y2goZSl7Q2wodCxlKX19KS5wcm90b3R5cGUsKGxjPWZ1bmN0aW9uKGUpe1FjKHRoaXMse3R5cGU6S2MsZG9uZTohMSxub3RpZmllZDohMSxwYXJlbnQ6ITEscmVhY3Rpb25zOltdLHJlamVjdGlvbjohMSxzdGF0ZTowLHZhbHVlOnZvaWQgMH0pfSkucHJvdG90eXBlPUljKG9sLHt0aGVuOmZ1bmN0aW9uKGUsdCl7dmFyIG49ZWwodGhpcyksbz1uLnJlYWN0aW9ucyxyPWFsKEZjKHRoaXMsbmwpKTtyZXR1cm4gci5vaz0hemMoZSl8fGUsci5mYWlsPXpjKHQpJiZ0LHIuZG9tYWluPVZjP3NsLmRvbWFpbjp2b2lkIDAsbi5wYXJlbnQ9ITAsb1tvLmxlbmd0aF09ciwwIT1uLnN0YXRlJiZibChuLCExKSxyLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLGUpfX0pLGRjPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IGxjLHQ9JGMoZSk7dGhpcy5wcm9taXNlPWUsdGhpcy5yZXNvbHZlPXdsKGtsLHQpLHRoaXMucmVqZWN0PXdsKENsLHQpfSxOYy5mPWFsPWZ1bmN0aW9uKGUpe3JldHVybiBlPT09bmx8fGU9PT1mYz9uZXcgZGMoZSk6dWwoZSl9LHpjKFJjKSYmdGwhPT1PYmplY3QucHJvdG90eXBlKSl7aGM9dGwudGhlbixmbHx8KHFjKHRsLCJ0aGVuIiwoZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgbmwoKGZ1bmN0aW9uKGUsdCl7U2MoaGMsbixlLHQpfSkpLnRoZW4oZSx0KX0pLHt1bnNhZmU6ITB9KSxxYyh0bCwiY2F0Y2giLG9sLmNhdGNoLHt1bnNhZmU6ITB9KSk7dHJ5e2RlbGV0ZSB0bC5jb25zdHJ1Y3Rvcn1jYXRjaChlKXt9UGMmJlBjKHRsLG9sKX13Yyh7Z2xvYmFsOiEwLHdyYXA6ITAsZm9yY2VkOmhsfSx7UHJvbWlzZTpubH0pLEVjKG5sLEtjLCExKSxPYyhLYyksZmM9a2MoS2MpLHdjKHt0YXJnZXQ6S2Msc3RhdDohMCxmb3JjZWQ6aGx9LHtyZWplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9YWwodGhpcyk7cmV0dXJuIFNjKHQucmVqZWN0LHZvaWQgMCxlKSx0LnByb21pc2V9fSksd2Moe3RhcmdldDpLYyxzdGF0OiEwLGZvcmNlZDpobH0se3Jlc29sdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIEpjKHRoaXMsZSl9fSksd2Moe3RhcmdldDpLYyxzdGF0OiEwLGZvcmNlZDpwbH0se2FsbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49YWwodCksbz1uLnJlc29sdmUscj1uLnJlamVjdCxpPUJjKChmdW5jdGlvbigpe3ZhciBuPVRjKHQucmVzb2x2ZSksaT1bXSxzPTAsYT0xO3hjKGUsKGZ1bmN0aW9uKGUpe3ZhciB1PXMrKyxjPSExO2ErKyxTYyhuLHQsZSkudGhlbigoZnVuY3Rpb24oZSl7Y3x8KGM9ITAsaVt1XT1lLC0tYXx8byhpKSl9KSxyKX0pKSwtLWF8fG8oaSl9KSk7cmV0dXJuIGkuZXJyb3ImJnIoaS52YWx1ZSksbi5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1hbCh0KSxvPW4ucmVqZWN0LHI9QmMoKGZ1bmN0aW9uKCl7dmFyIHI9VGModC5yZXNvbHZlKTt4YyhlLChmdW5jdGlvbihlKXtTYyhyLHQsZSkudGhlbihuLnJlc29sdmUsbyl9KSl9KSk7cmV0dXJuIHIuZXJyb3ImJm8oci52YWx1ZSksbi5wcm9taXNlfX0pO3ZhciBTbD1kLFJsPWJlLHFsPWFjLElsPXljLFBsPWppO0ZvKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbGxTZXR0bGVkOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMsbj1xbC5mKHQpLG89bi5yZXNvbHZlLHI9bi5yZWplY3QsaT1JbCgoZnVuY3Rpb24oKXt2YXIgbj1SbCh0LnJlc29sdmUpLHI9W10saT0wLHM9MTtQbChlLChmdW5jdGlvbihlKXt2YXIgYT1pKyssdT0hMTtzKyssU2wobix0LGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3V8fCh1PSEwLHJbYV09e3N0YXR1czoiZnVsZmlsbGVkIix2YWx1ZTplfSwtLXN8fG8ocikpfSksKGZ1bmN0aW9uKGUpe3V8fCh1PSEwLHJbYV09e3N0YXR1czoicmVqZWN0ZWQiLHJlYXNvbjplfSwtLXN8fG8ocikpfSkpfSkpLC0tc3x8byhyKX0pKTtyZXR1cm4gaS5lcnJvciYmcihpLnZhbHVlKSxuLnByb21pc2V9fSk7dmFyIEVsPWJlLE9sPVosVGw9ZCx6bD1hYyxBbD15YyxVbD1qaSxEbD0iTm8gb25lIHByb21pc2UgcmVzb2x2ZWQiO0ZvKHt0YXJnZXQ6IlByb21pc2UiLHN0YXQ6ITB9LHthbnk6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxuPU9sKCJBZ2dyZWdhdGVFcnJvciIpLG89emwuZih0KSxyPW8ucmVzb2x2ZSxpPW8ucmVqZWN0LHM9QWwoKGZ1bmN0aW9uKCl7dmFyIG89RWwodC5yZXNvbHZlKSxzPVtdLGE9MCx1PTEsYz0hMTtVbChlLChmdW5jdGlvbihlKXt2YXIgbD1hKyssZD0hMTt1KyssVGwobyx0LGUpLnRoZW4oKGZ1bmN0aW9uKGUpe2R8fGN8fChjPSEwLHIoZSkpfSksKGZ1bmN0aW9uKGUpe2R8fGN8fChkPSEwLHNbbF09ZSwtLXV8fGkobmV3IG4ocyxEbCkpKX0pKX0pKSwtLXV8fGkobmV3IG4ocyxEbCkpfSkpO3JldHVybiBzLmVycm9yJiZpKHMudmFsdWUpLG8ucHJvbWlzZX19KTt2YXIgeGw9Rm8sV2w9X2EsRmw9dSxNbD1aLExsPU0sSmw9dHUsamw9Z2MsTmw9THQuZXhwb3J0cztpZih4bCh7dGFyZ2V0OiJQcm9taXNlIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDohIVdsJiZGbCgoZnVuY3Rpb24oKXtXbC5wcm90b3R5cGUuZmluYWxseS5jYWxsKHt0aGVuOmZ1bmN0aW9uKCl7fX0sKGZ1bmN0aW9uKCl7fSkpfSkpfSx7ZmluYWxseTpmdW5jdGlvbihlKXt2YXIgdD1KbCh0aGlzLE1sKCJQcm9taXNlIikpLG49TGwoZSk7cmV0dXJuIHRoaXMudGhlbihuP2Z1bmN0aW9uKG4pe3JldHVybiBqbCh0LGUoKSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbn0pKX06ZSxuP2Z1bmN0aW9uKG4pe3JldHVybiBqbCh0LGUoKSkudGhlbigoZnVuY3Rpb24oKXt0aHJvdyBufSkpfTplKX19KSxMbChXbCkpe3ZhciBCbD1NbCgiUHJvbWlzZSIpLnByb3RvdHlwZS5maW5hbGx5O1dsLnByb3RvdHlwZS5maW5hbGx5IT09QmwmJk5sKFdsLnByb3RvdHlwZSwiZmluYWxseSIsQmwse3Vuc2FmZTohMH0pfXZhciBabD1rLEhsPUpuLEdsPVppLFZsPUQsWGw9WmwoIiIuY2hhckF0KSxZbD1abCgiIi5jaGFyQ29kZUF0KSxLbD1abCgiIi5zbGljZSksJGw9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7dmFyIG8scixpPUdsKFZsKHQpKSxzPUhsKG4pLGE9aS5sZW5ndGg7cmV0dXJuIHM8MHx8cz49YT9lPyIiOnZvaWQgMDoobz1ZbChpLHMpKTw1NTI5Nnx8bz41NjMxOXx8cysxPT09YXx8KHI9WWwoaSxzKzEpKTw1NjMyMHx8cj41NzM0Mz9lP1hsKGkscyk6bzplP0tsKGkscyxzKzIpOnItNTYzMjArKG8tNTUyOTY8PDEwKSs2NTUzNn19LFFsPXtjb2RlQXQ6JGwoITEpLGNoYXJBdDokbCghMCl9LmNoYXJBdCxlZD1aaSx0ZD13bixuZD1pYSxvZD0iU3RyaW5nIEl0ZXJhdG9yIixyZD10ZC5zZXQsaWQ9dGQuZ2V0dGVyRm9yKG9kKTtuZChTdHJpbmcsIlN0cmluZyIsKGZ1bmN0aW9uKGUpe3JkKHRoaXMse3R5cGU6b2Qsc3RyaW5nOmVkKGUpLGluZGV4OjB9KX0pLChmdW5jdGlvbigpe3ZhciBlLHQ9aWQodGhpcyksbj10LnN0cmluZyxvPXQuaW5kZXg7cmV0dXJuIG8+PW4ubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9UWwobixvKSx0LmluZGV4Kz1lLmxlbmd0aCx7dmFsdWU6ZSxkb25lOiExfSl9KSksbnIuUHJvbWlzZTt2YXIgc2QsYWQ9aHQoInNwYW4iKS5jbGFzc0xpc3QsdWQ9YWQmJmFkLmNvbnN0cnVjdG9yJiZhZC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsY2Q9dWQ9PT1PYmplY3QucHJvdG90eXBlP3ZvaWQgMDp1ZCxsZD1zLGRkPXtDU1NSdWxlTGlzdDowLENTU1N0eWxlRGVjbGFyYXRpb246MCxDU1NWYWx1ZUxpc3Q6MCxDbGllbnRSZWN0TGlzdDowLERPTVJlY3RMaXN0OjAsRE9NU3RyaW5nTGlzdDowLERPTVRva2VuTGlzdDoxLERhdGFUcmFuc2Zlckl0ZW1MaXN0OjAsRmlsZUxpc3Q6MCxIVE1MQWxsQ29sbGVjdGlvbjowLEhUTUxDb2xsZWN0aW9uOjAsSFRNTEZvcm1FbGVtZW50OjAsSFRNTFNlbGVjdEVsZW1lbnQ6MCxNZWRpYUxpc3Q6MCxNaW1lVHlwZUFycmF5OjAsTmFtZWROb2RlTWFwOjAsTm9kZUxpc3Q6MSxQYWludFJlcXVlc3RMaXN0OjAsUGx1Z2luOjAsUGx1Z2luQXJyYXk6MCxTVkdMZW5ndGhMaXN0OjAsU1ZHTnVtYmVyTGlzdDowLFNWR1BhdGhTZWdMaXN0OjAsU1ZHUG9pbnRMaXN0OjAsU1ZHU3RyaW5nTGlzdDowLFNWR1RyYW5zZm9ybUxpc3Q6MCxTb3VyY2VCdWZmZXJMaXN0OjAsU3R5bGVTaGVldExpc3Q6MCxUZXh0VHJhY2tDdWVMaXN0OjAsVGV4dFRyYWNrTGlzdDowLFRvdWNoTGlzdDowfSxmZD1jZCxoZD1wYSxwZD1NdCx2ZD0kZSxiZD12ZCgiaXRlcmF0b3IiKSxnZD12ZCgidG9TdHJpbmdUYWciKSxtZD1oZC52YWx1ZXMseWQ9ZnVuY3Rpb24oZSx0KXtpZihlKXtpZihlW2JkXSE9PW1kKXRyeXtwZChlLGJkLG1kKX1jYXRjaCh0KXtlW2JkXT1tZH1pZihlW2dkXXx8cGQoZSxnZCx0KSxkZFt0XSlmb3IodmFyIG4gaW4gaGQpaWYoZVtuXSE9PWhkW25dKXRyeXtwZChlLG4saGRbbl0pfWNhdGNoKHQpe2Vbbl09aGRbbl19fX07Zm9yKHZhciBfZCBpbiBkZCl5ZChsZFtfZF0mJmxkW19kXS5wcm90b3R5cGUsX2QpO3lkKGZkLCJET01Ub2tlbkxpc3QiKTt2YXIgd2Q9bmV3IFVpbnQ4QXJyYXkoMTYpO2Z1bmN0aW9uIENkKCl7aWYoIXNkJiYhKHNkPSJ1bmRlZmluZWQiIT10eXBlb2YgY3J5cHRvJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzJiZjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQoY3J5cHRvKXx8InVuZGVmaW5lZCIhPXR5cGVvZiBtc0NyeXB0byYmImZ1bmN0aW9uIj09dHlwZW9mIG1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyYmbXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzLmJpbmQobXNDcnlwdG8pKSl0aHJvdyBuZXcgRXJyb3IoImNyeXB0by5nZXRSYW5kb21WYWx1ZXMoKSBub3Qgc3VwcG9ydGVkLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkI2dldHJhbmRvbXZhbHVlcy1ub3Qtc3VwcG9ydGVkIik7cmV0dXJuIHNkKHdkKX12YXIga2Q9L14oPzpbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMS01XVswLTlhLWZdezN9LVs4OWFiXVswLTlhLWZdezN9LVswLTlhLWZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO2Z1bmN0aW9uIFNkKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZSYma2QudGVzdChlKX1mb3IodmFyIFJkPVtdLHFkPTA7cWQ8MjU2OysrcWQpUmQucHVzaCgocWQrMjU2KS50b1N0cmluZygxNikuc3Vic3RyKDEpKTtmdW5jdGlvbiBJZChlLHQsbil7dmFyIG89KGU9ZXx8e30pLnJhbmRvbXx8KGUucm5nfHxDZCkoKTtpZihvWzZdPTE1Jm9bNl18NjQsb1s4XT02MyZvWzhdfDEyOCx0KXtuPW58fDA7Zm9yKHZhciByPTA7cjwxNjsrK3IpdFtuK3JdPW9bcl07cmV0dXJuIHR9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTowLG49KFJkW2VbdCswXV0rUmRbZVt0KzFdXStSZFtlW3QrMl1dK1JkW2VbdCszXV0rIi0iK1JkW2VbdCs0XV0rUmRbZVt0KzVdXSsiLSIrUmRbZVt0KzZdXStSZFtlW3QrN11dKyItIitSZFtlW3QrOF1dK1JkW2VbdCs5XV0rIi0iK1JkW2VbdCsxMF1dK1JkW2VbdCsxMV1dK1JkW2VbdCsxMl1dK1JkW2VbdCsxM11dK1JkW2VbdCsxNF1dK1JkW2VbdCsxNV1dKS50b0xvd2VyQ2FzZSgpO2lmKCFTZChuKSl0aHJvdyBUeXBlRXJyb3IoIlN0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCIpO3JldHVybiBufShvKX12YXIgUGQsRWQ9IjMuNy4yIixPZD0iZnVuY3Rpb24iPT10eXBlb2YgYXRvYixUZD0iZnVuY3Rpb24iPT10eXBlb2YgYnRvYSx6ZD0iZnVuY3Rpb24iPT10eXBlb2YgQnVmZmVyLEFkPSJmdW5jdGlvbiI9PXR5cGVvZiBUZXh0RGVjb2Rlcj9uZXcgVGV4dERlY29kZXI6dm9pZCAwLFVkPSJmdW5jdGlvbiI9PXR5cGVvZiBUZXh0RW5jb2Rlcj9uZXcgVGV4dEVuY29kZXI6dm9pZCAwLERkPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIpLHhkPShQZD17fSxEZC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe3JldHVybiBQZFtlXT10fSkpLFBkKSxXZD0vXig/OltBLVphLXpcZCtcL117NH0pKj8oPzpbQS1aYS16XGQrXC9dezJ9KD86PT0pP3xbQS1aYS16XGQrXC9dezN9PT8pPyQvLEZkPVN0cmluZy5mcm9tQ2hhckNvZGUuYmluZChTdHJpbmcpLE1kPSJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LmZyb20/VWludDhBcnJheS5mcm9tLmJpbmQoVWludDhBcnJheSk6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOmZ1bmN0aW9uKGUpe3JldHVybiBlfTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSwwKS5tYXAodCkpfSxMZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC89L2csIiIpLnJlcGxhY2UoL1srXC9dL2csKGZ1bmN0aW9uKGUpe3JldHVybiIrIj09ZT8iLSI6Il8ifSkpfSxKZD1mdW5jdGlvbihlKXtyZXR1cm4gZS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9dL2csIiIpfSxqZD1mdW5jdGlvbihlKXtmb3IodmFyIHQsbixvLHIsaT0iIixzPWUubGVuZ3RoJTMsYT0wO2E8ZS5sZW5ndGg7KXtpZigobj1lLmNoYXJDb2RlQXQoYSsrKSk+MjU1fHwobz1lLmNoYXJDb2RlQXQoYSsrKSk+MjU1fHwocj1lLmNoYXJDb2RlQXQoYSsrKSk+MjU1KXRocm93IG5ldyBUeXBlRXJyb3IoImludmFsaWQgY2hhcmFjdGVyIGZvdW5kIik7aSs9RGRbKHQ9bjw8MTZ8bzw8OHxyKT4+MTgmNjNdK0RkW3Q+PjEyJjYzXStEZFt0Pj42JjYzXStEZFs2MyZ0XX1yZXR1cm4gcz9pLnNsaWNlKDAscy0zKSsiPT09Ii5zdWJzdHJpbmcocyk6aX0sTmQ9VGQ/ZnVuY3Rpb24oZSl7cmV0dXJuIGJ0b2EoZSl9OnpkP2Z1bmN0aW9uKGUpe3JldHVybiBCdWZmZXIuZnJvbShlLCJiaW5hcnkiKS50b1N0cmluZygiYmFzZTY0Iil9OmpkLEJkPXpkP2Z1bmN0aW9uKGUpe3JldHVybiBCdWZmZXIuZnJvbShlKS50b1N0cmluZygiYmFzZTY0Iil9OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPTAsbz1lLmxlbmd0aDtuPG87bis9NDA5Nil0LnB1c2goRmQuYXBwbHkobnVsbCxlLnN1YmFycmF5KG4sbis0MDk2KSkpO3JldHVybiBOZCh0LmpvaW4oIiIpKX0sWmQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gdD9MZChCZChlKSk6QmQoZSl9LEhkPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDIpcmV0dXJuKHQ9ZS5jaGFyQ29kZUF0KDApKTwxMjg/ZTp0PDIwNDg/RmQoMTkyfHQ+Pj42KStGZCgxMjh8NjMmdCk6RmQoMjI0fHQ+Pj4xMiYxNSkrRmQoMTI4fHQ+Pj42JjYzKStGZCgxMjh8NjMmdCk7dmFyIHQ9NjU1MzYrMTAyNCooZS5jaGFyQ29kZUF0KDApLTU1Mjk2KSsoZS5jaGFyQ29kZUF0KDEpLTU2MzIwKTtyZXR1cm4gRmQoMjQwfHQ+Pj4xOCY3KStGZCgxMjh8dD4+PjEyJjYzKStGZCgxMjh8dD4+PjYmNjMpK0ZkKDEyOHw2MyZ0KX0sR2Q9L1tcdUQ4MDAtXHVEQkZGXVtcdURDMDAtXHVERkZGRl18W15ceDAwLVx4N0ZdL2csVmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVwbGFjZShHZCxIZCl9LFhkPXpkP2Z1bmN0aW9uKGUpe3JldHVybiBCdWZmZXIuZnJvbShlLCJ1dGY4IikudG9TdHJpbmcoImJhc2U2NCIpfTpVZD9mdW5jdGlvbihlKXtyZXR1cm4gQmQoVWQuZW5jb2RlKGUpKX06ZnVuY3Rpb24oZSl7cmV0dXJuIE5kKFZkKGUpKX0sWWQ9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXTtyZXR1cm4gdD9MZChYZChlKSk6WGQoZSl9LEtkPWZ1bmN0aW9uKGUpe3JldHVybiBZZChlLCEwKX0sJGQ9L1tceEMwLVx4REZdW1x4ODAtXHhCRl18W1x4RTAtXHhFRl1bXHg4MC1ceEJGXXsyfXxbXHhGMC1ceEY3XVtceDgwLVx4QkZdezN9L2csUWQ9ZnVuY3Rpb24oZSl7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDQ6dmFyIHQ9KCg3JmUuY2hhckNvZGVBdCgwKSk8PDE4fCg2MyZlLmNoYXJDb2RlQXQoMSkpPDwxMnwoNjMmZS5jaGFyQ29kZUF0KDIpKTw8Nnw2MyZlLmNoYXJDb2RlQXQoMykpLTY1NTM2O3JldHVybiBGZCg1NTI5NisodD4+PjEwKSkrRmQoNTYzMjArKDEwMjMmdCkpO2Nhc2UgMzpyZXR1cm4gRmQoKDE1JmUuY2hhckNvZGVBdCgwKSk8PDEyfCg2MyZlLmNoYXJDb2RlQXQoMSkpPDw2fDYzJmUuY2hhckNvZGVBdCgyKSk7ZGVmYXVsdDpyZXR1cm4gRmQoKDMxJmUuY2hhckNvZGVBdCgwKSk8PDZ8NjMmZS5jaGFyQ29kZUF0KDEpKX19LGVmPWZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoJGQsUWQpfSx0Zj1mdW5jdGlvbihlKXtpZihlPWUucmVwbGFjZSgvXHMrL2csIiIpLCFXZC50ZXN0KGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIm1hbGZvcm1lZCBiYXNlNjQuIik7ZSs9Ij09Ii5zbGljZSgyLSgzJmUubGVuZ3RoKSk7Zm9yKHZhciB0LG4sbyxyPSIiLGk9MDtpPGUubGVuZ3RoOyl0PXhkW2UuY2hhckF0KGkrKyldPDwxOHx4ZFtlLmNoYXJBdChpKyspXTw8MTJ8KG49eGRbZS5jaGFyQXQoaSsrKV0pPDw2fChvPXhkW2UuY2hhckF0KGkrKyldKSxyKz02ND09PW4/RmQodD4+MTYmMjU1KTo2ND09PW8/RmQodD4+MTYmMjU1LHQ+PjgmMjU1KTpGZCh0Pj4xNiYyNTUsdD4+OCYyNTUsMjU1JnQpO3JldHVybiByfSxuZj1PZD9mdW5jdGlvbihlKXtyZXR1cm4gYXRvYihKZChlKSl9OnpkP2Z1bmN0aW9uKGUpe3JldHVybiBCdWZmZXIuZnJvbShlLCJiYXNlNjQiKS50b1N0cmluZygiYmluYXJ5Iil9OnRmLG9mPXpkP2Z1bmN0aW9uKGUpe3JldHVybiBNZChCdWZmZXIuZnJvbShlLCJiYXNlNjQiKSl9OmZ1bmN0aW9uKGUpe3JldHVybiBNZChuZihlKSwoZnVuY3Rpb24oZSl7cmV0dXJuIGUuY2hhckNvZGVBdCgwKX0pKX0scmY9ZnVuY3Rpb24oZSl7cmV0dXJuIG9mKGFmKGUpKX0sc2Y9emQ/ZnVuY3Rpb24oZSl7cmV0dXJuIEJ1ZmZlci5mcm9tKGUsImJhc2U2NCIpLnRvU3RyaW5nKCJ1dGY4Iil9OkFkP2Z1bmN0aW9uKGUpe3JldHVybiBBZC5kZWNvZGUob2YoZSkpfTpmdW5jdGlvbihlKXtyZXR1cm4gZWYobmYoZSkpfSxhZj1mdW5jdGlvbihlKXtyZXR1cm4gSmQoZS5yZXBsYWNlKC9bLV9dL2csKGZ1bmN0aW9uKGUpe3JldHVybiItIj09ZT8iKyI6Ii8ifSkpKX0sdWY9ZnVuY3Rpb24oZSl7cmV0dXJuIHNmKGFmKGUpKX0sY2Y9ZnVuY3Rpb24oZSl7cmV0dXJue3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSxsZj1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJpbmcucHJvdG90eXBlLGUsY2YodCkpfTtlKCJmcm9tQmFzZTY0IiwoZnVuY3Rpb24oKXtyZXR1cm4gdWYodGhpcyl9KSksZSgidG9CYXNlNjQiLChmdW5jdGlvbihlKXtyZXR1cm4gWWQodGhpcyxlKX0pKSxlKCJ0b0Jhc2U2NFVSSSIsKGZ1bmN0aW9uKCl7cmV0dXJuIFlkKHRoaXMsITApfSkpLGUoInRvQmFzZTY0VVJMIiwoZnVuY3Rpb24oKXtyZXR1cm4gWWQodGhpcywhMCl9KSksZSgidG9VaW50OEFycmF5IiwoZnVuY3Rpb24oKXtyZXR1cm4gcmYodGhpcyl9KSl9LGRmPWZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KFVpbnQ4QXJyYXkucHJvdG90eXBlLGUsY2YodCkpfTtlKCJ0b0Jhc2U2NCIsKGZ1bmN0aW9uKGUpe3JldHVybiBaZCh0aGlzLGUpfSkpLGUoInRvQmFzZTY0VVJJIiwoZnVuY3Rpb24oKXtyZXR1cm4gWmQodGhpcywhMCl9KSksZSgidG9CYXNlNjRVUkwiLChmdW5jdGlvbigpe3JldHVybiBaZCh0aGlzLCEwKX0pKX0sZmY9e3ZlcnNpb246RWQsVkVSU0lPTjoiMy43LjIiLGF0b2I6bmYsYXRvYlBvbHlmaWxsOnRmLGJ0b2E6TmQsYnRvYVBvbHlmaWxsOmpkLGZyb21CYXNlNjQ6dWYsdG9CYXNlNjQ6WWQsZW5jb2RlOllkLGVuY29kZVVSSTpLZCxlbmNvZGVVUkw6S2QsdXRvYjpWZCxidG91OmVmLGRlY29kZTp1Zixpc1ZhbGlkOmZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciIT10eXBlb2YgZSlyZXR1cm4hMTt2YXIgdD1lLnJlcGxhY2UoL1xzKy9nLCIiKS5yZXBsYWNlKC89ezAsMn0kLywiIik7cmV0dXJuIS9bXlxzMC05YS16QS1aXCsvXS8udGVzdCh0KXx8IS9bXlxzMC05YS16QS1aXC1fXS8udGVzdCh0KX0sZnJvbVVpbnQ4QXJyYXk6WmQsdG9VaW50OEFycmF5OnJmLGV4dGVuZFN0cmluZzpsZixleHRlbmRVaW50OEFycmF5OmRmLGV4dGVuZEJ1aWx0aW5zOmZ1bmN0aW9uKCl7bGYoKSxkZigpfX0saGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bih0aGlzLGUpLHRoaXMub0Jhc2U2ND1mZn1yZXR1cm4gcihlLFt7a2V5OiJicm93c2VyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPW5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSx0PS8oZWRnZSlbL10oW1x3Ll0rKS8uZXhlYyhlKXx8LyhjaHJvbWUpWy9dKFtcdy5dKykvLmV4ZWMoZSl8fC8oc2FmYXJpKVsvXShbXHcuXSspLy5leGVjKGUpfHwvKG9wZXJhKSg/Oi4qdmVyc2lvbik/Wy9dKFtcdy5dKykvLmV4ZWMoZSl8fC8odHJpZGVudC4qcnY6KShbXHcuXSspLy5leGVjKGUpfHwvKG1zaWUpIChbXHcuXSspLy5leGVjKGUpfHxlLmluZGV4T2YoImNvbXBhdGlibGUiKTwwJiYvKG1vemlsbGEpKD86Lio/IHJ2OihbXHcuXSspKT8vLmV4ZWMoZSl8fFsidW5rbm93IiwiMCJdO3QubGVuZ3RoPjAmJnRbMV0uaW5kZXhPZigidHJpZGVudCIpPi0xJiYodFsxXT0ibXNpZSIpO3ZhciBuPXt9O3JldHVybiBuW3RbMV1dPSEwLG4udmVyc2lvbj10WzJdLG59fSx7a2V5OiJnZXRDcmVhdGVXbmRNb2RlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPW5hdmlnYXRvci51c2VyQWdlbnQsdD1uYXZpZ2F0b3IucGxhdGZvcm0sbj0iV2luNjQiPT09dHx8IldpbjMyIj09PXR8fCJXaW5kb3dzIj09PXQsbz10aGlzLmJyb3dzZXIoKSxyPSEwO3JldHVybiB3aW5kb3cudG9wIT09d2luZG93P3I9ITE6bj8oZS5pbmRleE9mKCJXaW5kb3dzIE5UIDEwLjAiKT4tMSYmby5tb3ppbGxhJiYocj0hMSksby5lZGdlJiYocj0hMSkpOnI9ITEscn19LHtrZXk6ImdldFduZFBvc3Rpb24iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLG8pe3ZhciByPTAsaT0wLHM9ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LGE9ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSx1PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGUpLGM9e3RvcDphLnRvcCtwYXJzZUludCh1WyJib3JkZXItdG9wLXdpZHRoIl0uc2xpY2UoMCwtMiksMTApLGxlZnQ6YS5sZWZ0K3BhcnNlSW50KHVbImJvcmRlci1sZWZ0LXdpZHRoIl0uc2xpY2UoMCwtMiksMTApfSxsPXRoaXMuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO2lmKHQpaWYodGhpcy5icm93c2VyKCkubXNpZSl7dmFyIGQ9cy5vdXRlcldpZHRoLXMuaW5uZXJXaWR0aC0ocy5zY3JlZW5MZWZ0LXMuc2NyZWVuWCk7cj1jLmxlZnQrKHMuc2NyZWVuTGVmdC1zLnNjcmVlblgpLWQsaT1jLnRvcCsocy5zY3JlZW5Ub3Atcy5zY3JlZW5ZKX1lbHNle3ZhciBmPTAsaD0wLHA9dGhpcy5icm93c2VyKCkuY2hyb21lP3Mub3V0ZXJXaWR0aC9sOnMub3V0ZXJXaWR0aCx2PXRoaXMuYnJvd3NlcigpLmNocm9tZT9zLm91dGVySGVpZ2h0L2w6cy5vdXRlckhlaWdodCxiPU1hdGgucm91bmQoKHAtcy5pbm5lcldpZHRoKS8yKTt0aGlzLmlzV2luZG93cygpJiZ0aGlzLmJyb3dzZXIoKS5jaHJvbWUmJigtOD09PWJ8fHMuc2NyZWVuLmhlaWdodC1zLm91dGVySGVpZ2h0PT0wPy04PT09YiYmKGY9OCxoPTgpOjg9PT1iP2Y9LTU6MD09PWImJihoPTgpKSx0aGlzLmJyb3dzZXIoKS5tb3ppbGxhJiYoNz09PWJ8fDY9PT1iP2Y9LTY6OD09PWImJihmPS04KSkscj1jLmxlZnQrYitmLGk9Yy50b3ArKHYtcy5pbm5lckhlaWdodC1iKStofWVsc2V7dmFyIGc9d2luZG93LnRvcCxtPTAseT0wLF89MCx3PTA7dHJ5e209Zy5vdXRlcldpZHRoLWcuaW5uZXJXaWR0aCx5PWcub3V0ZXJIZWlnaHQtZy5pbm5lckhlaWdodCxfPWcuc2NyZWVuTGVmdC1nLnNjcmVlblgsdz1nLnNjcmVlblRvcC1nLnNjcmVlbll9Y2F0Y2goZSl7bT1uLm91dGVyV2lkdGgtbi5pbm5lcldpZHRoLHk9bi5vdXRlckhlaWdodC1uLmlubmVySGVpZ2h0LF89bi5zY3JlZW5MZWZ0LW4uc2NyZWVuWCx3PW4uc2NyZWVuVG9wLW4uc2NyZWVuWX1pZih0aGlzLmJyb3dzZXIoKS5tc2llKXswLHI9Yy5sZWZ0K18tMCxpPWMudG9wK3d9ZWxzZXt2YXIgQz1tLzI7cj1jLmxlZnQrQyxpPWMudG9wKyh5LUMpLHRoaXMuaXNXaW5kb3dzKCkmJnRoaXMuYnJvd3NlcigpLmNocm9tZSYmMD09PUMmJihyKz04LGkrPTgpfXIrPW8ubGVmdCxpKz1vLnRvcH1yZXR1cm4gdGhpcy5pc1dpbmRvd3MoKSYmKHRoaXMuYnJvd3NlcigpLmNocm9tZXx8dGhpcy5icm93c2VyKCkuc2FmYXJpKSYmKHI9Yy5sZWZ0LGk9Yy50b3Ascis9by5sZWZ0LGkrPW8udG9wKSx0aGlzLmJyb3dzZXIoKS5tc2llJiYiMTAuMCI9PT10aGlzLmJyb3dzZXIoKS52ZXJzaW9uJiYocis9cy5wYWdlWE9mZnNldCxpKz1zLnBhZ2VZT2Zmc2V0KSx7bGVmdDpyPU1hdGgucm91bmQocipsKSx0b3A6aT1NYXRoLnJvdW5kKGkqbCl9fX0se2tleToiZGV0ZWN0UG9ydCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe2lmKGUhPT10KXt2YXIgbz0iSGlrQ2VudHJhbFdlYkNvbnRyb2xQb3J0OiIuY29uY2F0KGUsIi0iKS5jb25jYXQodCkscj10aGlzLGk9MCxzPSExLGE9bnVsbDtzZXNzaW9uU3RvcmFnZSYmbnVsbCE9PShhPXNlc3Npb25TdG9yYWdlLmdldEl0ZW0obykpJiYoYT1wYXJzZUludChhLDEwKSk7Zm9yKHZhciB1PVtdLGM9ZTtjPD10O2MrKyljIT09YSYmdS5wdXNoKGMpO251bGwhPT1hJiZ1LnVuc2hpZnQoYSk7Zm9yKHZhciBsPVtdLGQ9ZnVuY3Rpb24oKXtpPjAmJmNsZWFyVGltZW91dChpKX0sZj1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9bC5sZW5ndGg7ZTx0O2UrKylkZWxldGUgbFtlXX0saD0wLHA9KG5ldyBEYXRlKS5nZXRUaW1lKCksdj1mdW5jdGlvbihlLHQpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bC5wdXNoKHIuY3JlYXRlSW1hZ2VIdHRwKHVbdF0se3RpbWVTdGFtcDpwK3Qsc3VjY2VzczpmdW5jdGlvbihlKXshZnVuY3Rpb24oZSl7c2Vzc2lvblN0b3JhZ2UmJnNlc3Npb25TdG9yYWdlLnNldEl0ZW0obyxlKSwhcyYmbi5zdWNjZXNzJiYoZCgpLGYoKSxuLnN1Y2Nlc3MoZSkpfShlKX0sZXJyb3I6ZnVuY3Rpb24oKXtoKyssdS5sZW5ndGg9PT1oJiYhcyYmbi5lcnJvciYmKGQoKSxmKCksbi5lcnJvcigpKX19KSl9KSwxMDApfSxiPTAsZz11Lmxlbmd0aDtiPGc7YisrKXYoMCxiKTtpPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7cz0hMCxuLmVycm9yJiYoZigpLG4uZXJyb3IoKSl9KSw2ZTQpfWVsc2Ugbi5zdWNjZXNzKGUpfX0se2tleToiY3JlYXRlSW1hZ2VIdHRwIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPW5ldyBJbWFnZTtyZXR1cm4gbi5jcm9zc09yaWdpbj0iYW5vbnltb3VzIixuLm9ubG9hZD1mdW5jdGlvbigpe3Quc3VjY2VzcyYmdC5zdWNjZXNzKGUpfSxuLm9uZXJyb3I9ZnVuY3Rpb24oKXt0LmVycm9yJiZ0LmVycm9yKCl9LG4ub25hYm9ydD1mdW5jdGlvbigpe3QuYWJvcnQmJnQuYWJvcnQoKX0sbi5zcmM9Imh0dHA6Ly8xMjcuMC4wLjE6Ii5jb25jYXQoZSwiL2ltZ2h0dHAvbG9jYWw/dXBkYXRlPSIpLmNvbmNhdCh0LnRpbWVTdGFtcCksbn19LHtrZXk6InV0Zjh0bzE2Iix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQsbixvLHI9IiIsaT0wLHM9ZS5sZW5ndGg7aTxzOylzd2l0Y2goKHQ9ZS5jaGFyQ29kZUF0KGkrKykpPj40KXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmNhc2UgNTpjYXNlIDY6Y2FzZSA3OnIrPWUuY2hhckF0KGktMSk7YnJlYWs7Y2FzZSAxMjpjYXNlIDEzOm49ZS5jaGFyQ29kZUF0KGkrKykscis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMzEmdCk8PDZ8NjMmbik7YnJlYWs7Y2FzZSAxNDpuPWUuY2hhckNvZGVBdChpKyspLG89ZS5jaGFyQ29kZUF0KGkrKykscis9U3RyaW5nLmZyb21DaGFyQ29kZSgoMTUmdCk8PDEyfCg2MyZuKTw8NnwoNjMmbyk8PDApfXJldHVybiByfX0se2tleToiY3JlYXRlRXZlbnRTY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtvLmh0bWxGb3I9ZSxvLmV2ZW50PXQsby5pbm5lckhUTUw9bixkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlKS5hcHBlbmRDaGlsZChvKX19LHtrZXk6ImlzTWFjT1MiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIk1hY0ludGVsIj09PW5hdmlnYXRvci5wbGF0Zm9ybX19LHtrZXk6ImlzV2luZG93cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gbmF2aWdhdG9yLnBsYXRmb3JtLmluZGV4T2YoIldpbiIpPi0xfX0se2tleToiZ2V0RGV2aWNlUGl4ZWxSYXRpbyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0xO3JldHVybiB0aGlzLmlzTWFjT1MoKXx8KGU9d2luZG93LmRldmljZVBpeGVsUmF0aW98fHdpbmRvdy5zY3JlZW4uZGV2aWNlWERQSS93aW5kb3cuc2NyZWVuLmxvZ2ljYWxYRFBJKSxlfX0se2tleToiQmFzZTY0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9CYXNlNjR8fHt9fX1dKSxlfSgpLHBmPW5ldyBoZix2Zj0i44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CA44CAIjtmdW5jdGlvbiBiZihlKXt3aW5kb3cudG9wLmRvY3VtZW50LnRpdGxlPXdpbmRvdy50b3AuZG9jdW1lbnQudGl0bGUrdmYrZX1mdW5jdGlvbiBnZihlKXt3aW5kb3cudG9wLmRvY3VtZW50LnRpdGxlPXdpbmRvdy50b3AuZG9jdW1lbnQudGl0bGUucmVwbGFjZSh2ZitlLCIiKX1mdW5jdGlvbiBtZihlLHQpeyh0fHxiZikoZSl9ZnVuY3Rpb24geWYoZSx0KXsodHx8Z2YpKGUpfXZhciBfZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7bih0aGlzLGUpLHRoaXMub09wdGlvbnM9T2JqZWN0LmFzc2lnbih7aVBvcnQ6LTEsY2JDb25uZWN0U3VjY2VzczpudWxsLGNiQ29ubmVjdEVycm9yOm51bGwsY2JDb25uZWN0Q2xvc2U6bnVsbH0sdCksdGhpcy5vV2ViU29ja2V0PW51bGwsdGhpcy5zelVVSUQ9IiIsdGhpcy5zelZlcnNpb249IiIsdGhpcy5vUmVxdWVzdExpc3Q9e30sdGhpcy5iTm9ybWFsQ2xvc2U9ITEsdGhpcy5vV2luZG93Q29udHJvbENhbGxiYWNrPXt9LHRoaXMub1NhZHBDYWxsYmFjaz17fSx0aGlzLm9TbGljZUNhbGxiYWNrPXt9LHRoaXMub1NlcmlhbENhbGxiYWNrPXt9LHRoaXMub1VJQ29udHJvbENhbGxiYWNrPXt9LHRoaXMub1VwZ3JhZGVDYWxsYmFjaz17fSx0aGlzLmluaXQoKX1yZXR1cm4gcihlLFt7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1mdW5jdGlvbigpe2Uub09wdGlvbnMuY2JDb25uZWN0Q2xvc2UmJmUub09wdGlvbnMuY2JDb25uZWN0Q2xvc2UoZS5iTm9ybWFsQ2xvc2UpLGUuYk5vcm1hbENsb3NlPSExfTtlLm9XZWJTb2NrZXQ9bmV3IFdlYlNvY2tldCgid3M6Ly8xMjcuMC4wLjE6Ii5jb25jYXQoZS5vT3B0aW9ucy5pUG9ydCkpLGUub1dlYlNvY2tldC5vbmVycm9yPWZ1bmN0aW9uKCl7fSxlLm9XZWJTb2NrZXQub25vcGVuPWZ1bmN0aW9uKCl7dmFyIHQ9e3NlcXVlbmNlOklkKCksY21kOiJzeXN0ZW0uY29ubmVjdCJ9LG49SlNPTi5zdHJpbmdpZnkodCk7ZS5vV2ViU29ja2V0LnNlbmQobil9LGUub1dlYlNvY2tldC5vbm1lc3NhZ2U9ZnVuY3Rpb24odCl7dmFyIG49dC5kYXRhLG89SlNPTi5wYXJzZShuKSxyPW8uc2VxdWVuY2U7dm9pZCAwPT09ciYmdm9pZCAwPT09by5jbWQ/KGUuc3pVVUlEPW8udXVpZCxlLnN6VmVyc2lvbj1vLnZlcnNpb24sZS5vT3B0aW9ucy5jYkNvbm5lY3RTdWNjZXNzJiZlLm9PcHRpb25zLmNiQ29ubmVjdFN1Y2Nlc3MoKSk6dm9pZCAwIT09by5jbWQ/ZS5wYXJzZUNtZChvKTp2b2lkIDAhPT1lLm9SZXF1ZXN0TGlzdFtyXSYmKDA9PT1vLmVycm9yTW9kdWxlJiYwPT09by5lcnJvckNvZGU/ZS5vUmVxdWVzdExpc3Rbcl0ucmVzb2x2ZShvKTplLm9SZXF1ZXN0TGlzdFtyXS5yZWplY3QobyksZGVsZXRlIGUub1JlcXVlc3RMaXN0W3JdKX0sZS5vV2ViU29ja2V0Lm9uY2xvc2U9ZnVuY3Rpb24oKXtlLm9XZWJTb2NrZXQ9bnVsbCxwZi5icm93c2VyKCkubW96aWxsYT9zZXRUaW1lb3V0KChmdW5jdGlvbigpe3QoKX0pLDEwMCk6dCgpfX19LHtrZXk6InNldFdpbmRvd0NvbnRyb2xDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vV2luZG93Q29udHJvbENhbGxiYWNrPWV9fSx7a2V5OiJzZXRTYWRwQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub1NhZHBDYWxsYmFjaz1lfX0se2tleToic2V0U2xpY2VDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vU2xpY2VDYWxsYmFjaz1lfX0se2tleToic2V0U2VyaWFsQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub1NlcmlhbENhbGxiYWNrPWV9fSx7a2V5OiJzZXRVSUNvbnRyb2xDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vVUlDb250cm9sQ2FsbGJhY2s9ZX19LHtrZXk6InNldFVwZ3JhZGVDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vVXBncmFkZUNhbGxiYWNrPWV9fSx7a2V5OiJnZXRTZXJ2aWNlVmVyc2lvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zelZlcnNpb259fSx7a2V5OiJnZXRSZXF1ZXN0VVVJRCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zelVVSUR9fSx7a2V5OiJkaXNjb25uZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYk5vcm1hbENsb3NlPSEwLHRoaXMub1dlYlNvY2tldCYmV2ViU29ja2V0Lk9QRU49PT10aGlzLm9XZWJTb2NrZXQucmVhZHlTdGF0ZSYmKHRoaXMub1dlYlNvY2tldC5jbG9zZSgpLGRlbGV0ZSB0aGlzLm9XZWJTb2NrZXQpfX0se2tleToic2VuZFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLG8pe3ZhciByPUlkKCk7ZS5zZXF1ZW5jZT1yLHQub1JlcXVlc3RMaXN0W3JdPXtyZXNvbHZlOm4scmVqZWN0Om99LGUudXVpZD10LnN6VVVJRCxlLnRpbWVzdGFtcD0iIi5jb25jYXQoKG5ldyBEYXRlKS5nZXRUaW1lKCkpO3ZhciBpPUpTT04uc3RyaW5naWZ5KGUpO3Qub1dlYlNvY2tldCYmV2ViU29ja2V0Lk9QRU49PT10Lm9XZWJTb2NrZXQucmVhZHlTdGF0ZT90Lm9XZWJTb2NrZXQuc2VuZChpKTpvKCl9KSl9fSx7a2V5OiJwYXJzZUNtZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5jbWQuc3BsaXQoIi4iKSxuPXRbMV0ucmVwbGFjZSgvXlthLXpdezF9L2csKGZ1bmN0aW9uKGUpe3JldHVybiBlLnRvVXBwZXJDYXNlKCl9KSk7IndpbmRvdyI9PT10WzBdfHwicGxheSI9PT10WzBdP3RoaXMub1dpbmRvd0NvbnRyb2xDYWxsYmFja1siY2IiLmNvbmNhdChuKV0mJnRoaXMub1dpbmRvd0NvbnRyb2xDYWxsYmFja1siY2IiLmNvbmNhdChuKV0oZSk6InNhZHAiPT09dFswXT90aGlzLm9TYWRwQ2FsbGJhY2tbImNiIi5jb25jYXQobildJiZ0aGlzLm9TYWRwQ2FsbGJhY2tbImNiIi5jb25jYXQobildKGUpOiJzZXJpYWwiPT09dFswXT90aGlzLm9TZXJpYWxDYWxsYmFja1siY2IiLmNvbmNhdChuKV0mJnRoaXMub1NlcmlhbENhbGxiYWNrWyJjYiIuY29uY2F0KG4pXShlKToic2xpY2UiPT09dFswXT90aGlzLm9TbGljZUNhbGxiYWNrWyJjYiIuY29uY2F0KG4pXSYmdGhpcy5vU2xpY2VDYWxsYmFja1siY2IiLmNvbmNhdChuKV0oZSk6InVpIj09PXRbMF0/dGhpcy5vVUlDb250cm9sQ2FsbGJhY2tbImNiIi5jb25jYXQobildJiZ0aGlzLm9VSUNvbnRyb2xDYWxsYmFja1siY2IiLmNvbmNhdChuKV0oZSk6InVwZ3JhZGUiPT09dFswXSYmdGhpcy5vVXBncmFkZUNhbGxiYWNrWyJjYiIuY29uY2F0KG4pXSYmdGhpcy5vVXBncmFkZUNhbGxiYWNrWyJjYiIuY29uY2F0KG4pXShlKX19XSksZX0oKTsKLyohIHBha28gMi4wLjQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVjYS9wYWtvIEBsaWNlbnNlIChNSVQgQU5EIFpsaWIpICovZnVuY3Rpb24gd2YoZSl7Zm9yKHZhciB0PWUubGVuZ3RoOy0tdD49MDspZVt0XT0wfXZhciBDZj0yNTYsa2Y9Mjg2LFNmPTMwLFJmPTE1LHFmPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdKSxJZj1uZXcgVWludDhBcnJheShbMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10pLFBmPW5ldyBVaW50OEFycmF5KFswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMyw3XSksRWY9bmV3IFVpbnQ4QXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxPZj1uZXcgQXJyYXkoNTc2KTt3ZihPZik7dmFyIFRmPW5ldyBBcnJheSg2MCk7d2YoVGYpO3ZhciB6Zj1uZXcgQXJyYXkoNTEyKTt3Zih6Zik7dmFyIEFmPW5ldyBBcnJheSgyNTYpO3dmKEFmKTt2YXIgVWY9bmV3IEFycmF5KDI5KTt3ZihVZik7dmFyIERmLHhmLFdmLEZmPW5ldyBBcnJheShTZik7ZnVuY3Rpb24gTWYoZSx0LG4sbyxyKXt0aGlzLnN0YXRpY190cmVlPWUsdGhpcy5leHRyYV9iaXRzPXQsdGhpcy5leHRyYV9iYXNlPW4sdGhpcy5lbGVtcz1vLHRoaXMubWF4X2xlbmd0aD1yLHRoaXMuaGFzX3N0cmVlPWUmJmUubGVuZ3RofWZ1bmN0aW9uIExmKGUsdCl7dGhpcy5keW5fdHJlZT1lLHRoaXMubWF4X2NvZGU9MCx0aGlzLnN0YXRfZGVzYz10fXdmKEZmKTt2YXIgSmY9ZnVuY3Rpb24oZSl7cmV0dXJuIGU8MjU2P3pmW2VdOnpmWzI1NisoZT4+PjcpXX0samY9ZnVuY3Rpb24oZSx0KXtlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT0yNTUmdCxlLnBlbmRpbmdfYnVmW2UucGVuZGluZysrXT10Pj4+OCYyNTV9LE5mPWZ1bmN0aW9uKGUsdCxuKXtlLmJpX3ZhbGlkPjE2LW4/KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LGpmKGUsZS5iaV9idWYpLGUuYmlfYnVmPXQ+PjE2LWUuYmlfdmFsaWQsZS5iaV92YWxpZCs9bi0xNik6KGUuYmlfYnVmfD10PDxlLmJpX3ZhbGlkJjY1NTM1LGUuYmlfdmFsaWQrPW4pfSxCZj1mdW5jdGlvbihlLHQsbil7TmYoZSxuWzIqdF0sblsyKnQrMV0pfSxaZj1mdW5jdGlvbihlLHQpe3ZhciBuPTA7ZG97bnw9MSZlLGU+Pj49MSxuPDw9MX13aGlsZSgtLXQ+MCk7cmV0dXJuIG4+Pj4xfSxIZj1mdW5jdGlvbihlLHQsbil7dmFyIG8scixpPW5ldyBBcnJheSgxNikscz0wO2ZvcihvPTE7bzw9UmY7bysrKWlbb109cz1zK25bby0xXTw8MTtmb3Iocj0wO3I8PXQ7cisrKXt2YXIgYT1lWzIqcisxXTswIT09YSYmKGVbMipyXT1aZihpW2FdKyssYSkpfX0sR2Y9ZnVuY3Rpb24oZSl7dmFyIHQ7Zm9yKHQ9MDt0PGtmO3QrKyllLmR5bl9sdHJlZVsyKnRdPTA7Zm9yKHQ9MDt0PFNmO3QrKyllLmR5bl9kdHJlZVsyKnRdPTA7Zm9yKHQ9MDt0PDE5O3QrKyllLmJsX3RyZWVbMip0XT0wO2UuZHluX2x0cmVlWzUxMl09MSxlLm9wdF9sZW49ZS5zdGF0aWNfbGVuPTAsZS5sYXN0X2xpdD1lLm1hdGNoZXM9MH0sVmY9ZnVuY3Rpb24oZSl7ZS5iaV92YWxpZD44P2pmKGUsZS5iaV9idWYpOmUuYmlfdmFsaWQ+MCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPWUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MH0sWGY9ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIHI9Mip0LGk9MipuO3JldHVybiBlW3JdPGVbaV18fGVbcl09PT1lW2ldJiZvW3RdPD1vW25dfSxZZj1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvPWUuaGVhcFtuXSxyPW48PDE7cjw9ZS5oZWFwX2xlbiYmKHI8ZS5oZWFwX2xlbiYmWGYodCxlLmhlYXBbcisxXSxlLmhlYXBbcl0sZS5kZXB0aCkmJnIrKywhWGYodCxvLGUuaGVhcFtyXSxlLmRlcHRoKSk7KWUuaGVhcFtuXT1lLmhlYXBbcl0sbj1yLHI8PD0xO2UuaGVhcFtuXT1vfSxLZj1mdW5jdGlvbihlLHQsbil7dmFyIG8scixpLHMsYT0wO2lmKDAhPT1lLmxhc3RfbGl0KWRve289ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqYV08PDh8ZS5wZW5kaW5nX2J1ZltlLmRfYnVmKzIqYSsxXSxyPWUucGVuZGluZ19idWZbZS5sX2J1ZithXSxhKyssMD09PW8/QmYoZSxyLHQpOihpPUFmW3JdLEJmKGUsaStDZisxLHQpLDAhPT0ocz1xZltpXSkmJihyLT1VZltpXSxOZihlLHIscykpLG8tLSxpPUpmKG8pLEJmKGUsaSxuKSwwIT09KHM9SWZbaV0pJiYoby09RmZbaV0sTmYoZSxvLHMpKSl9d2hpbGUoYTxlLmxhc3RfbGl0KTtCZihlLDI1Nix0KX0sJGY9ZnVuY3Rpb24oZSx0KXt2YXIgbixvLHIsaT10LmR5bl90cmVlLHM9dC5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsYT10LnN0YXRfZGVzYy5oYXNfc3RyZWUsdT10LnN0YXRfZGVzYy5lbGVtcyxjPS0xO2ZvcihlLmhlYXBfbGVuPTAsZS5oZWFwX21heD01NzMsbj0wO248dTtuKyspMCE9PWlbMipuXT8oZS5oZWFwWysrZS5oZWFwX2xlbl09Yz1uLGUuZGVwdGhbbl09MCk6aVsyKm4rMV09MDtmb3IoO2UuaGVhcF9sZW48MjspaVsyKihyPWUuaGVhcFsrK2UuaGVhcF9sZW5dPWM8Mj8rK2M6MCldPTEsZS5kZXB0aFtyXT0wLGUub3B0X2xlbi0tLGEmJihlLnN0YXRpY19sZW4tPXNbMipyKzFdKTtmb3IodC5tYXhfY29kZT1jLG49ZS5oZWFwX2xlbj4+MTtuPj0xO24tLSlZZihlLGksbik7cj11O2Rve249ZS5oZWFwWzFdLGUuaGVhcFsxXT1lLmhlYXBbZS5oZWFwX2xlbi0tXSxZZihlLGksMSksbz1lLmhlYXBbMV0sZS5oZWFwWy0tZS5oZWFwX21heF09bixlLmhlYXBbLS1lLmhlYXBfbWF4XT1vLGlbMipyXT1pWzIqbl0raVsyKm9dLGUuZGVwdGhbcl09KGUuZGVwdGhbbl0+PWUuZGVwdGhbb10/ZS5kZXB0aFtuXTplLmRlcHRoW29dKSsxLGlbMipuKzFdPWlbMipvKzFdPXIsZS5oZWFwWzFdPXIrKyxZZihlLGksMSl9d2hpbGUoZS5oZWFwX2xlbj49Mik7ZS5oZWFwWy0tZS5oZWFwX21heF09ZS5oZWFwWzFdLGZ1bmN0aW9uKGUsdCl7dmFyIG4sbyxyLGkscyxhLHU9dC5keW5fdHJlZSxjPXQubWF4X2NvZGUsbD10LnN0YXRfZGVzYy5zdGF0aWNfdHJlZSxkPXQuc3RhdF9kZXNjLmhhc19zdHJlZSxmPXQuc3RhdF9kZXNjLmV4dHJhX2JpdHMsaD10LnN0YXRfZGVzYy5leHRyYV9iYXNlLHA9dC5zdGF0X2Rlc2MubWF4X2xlbmd0aCx2PTA7Zm9yKGk9MDtpPD1SZjtpKyspZS5ibF9jb3VudFtpXT0wO2Zvcih1WzIqZS5oZWFwW2UuaGVhcF9tYXhdKzFdPTAsbj1lLmhlYXBfbWF4KzE7bjw1NzM7bisrKShpPXVbMip1WzIqKG89ZS5oZWFwW25dKSsxXSsxXSsxKT5wJiYoaT1wLHYrKyksdVsyKm8rMV09aSxvPmN8fChlLmJsX2NvdW50W2ldKysscz0wLG8+PWgmJihzPWZbby1oXSksYT11WzIqb10sZS5vcHRfbGVuKz1hKihpK3MpLGQmJihlLnN0YXRpY19sZW4rPWEqKGxbMipvKzFdK3MpKSk7aWYoMCE9PXYpe2Rve2ZvcihpPXAtMTswPT09ZS5ibF9jb3VudFtpXTspaS0tO2UuYmxfY291bnRbaV0tLSxlLmJsX2NvdW50W2krMV0rPTIsZS5ibF9jb3VudFtwXS0tLHYtPTJ9d2hpbGUodj4wKTtmb3IoaT1wOzAhPT1pO2ktLSlmb3Iobz1lLmJsX2NvdW50W2ldOzAhPT1vOykocj1lLmhlYXBbLS1uXSk+Y3x8KHVbMipyKzFdIT09aSYmKGUub3B0X2xlbis9KGktdVsyKnIrMV0pKnVbMipyXSx1WzIqcisxXT1pKSxvLS0pfX0oZSx0KSxIZihpLGMsZS5ibF9jb3VudCl9LFFmPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxyLGk9LTEscz10WzFdLGE9MCx1PTcsYz00O2ZvcigwPT09cyYmKHU9MTM4LGM9MyksdFsyKihuKzEpKzFdPTY1NTM1LG89MDtvPD1uO28rKylyPXMscz10WzIqKG8rMSkrMV0sKythPHUmJnI9PT1zfHwoYTxjP2UuYmxfdHJlZVsyKnJdKz1hOjAhPT1yPyhyIT09aSYmZS5ibF90cmVlWzIqcl0rKyxlLmJsX3RyZWVbMzJdKyspOmE8PTEwP2UuYmxfdHJlZVszNF0rKzplLmJsX3RyZWVbMzZdKyssYT0wLGk9ciwwPT09cz8odT0xMzgsYz0zKTpyPT09cz8odT02LGM9Myk6KHU9NyxjPTQpKX0sZWg9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLHIsaT0tMSxzPXRbMV0sYT0wLHU9NyxjPTQ7Zm9yKDA9PT1zJiYodT0xMzgsYz0zKSxvPTA7bzw9bjtvKyspaWYocj1zLHM9dFsyKihvKzEpKzFdLCEoKythPHUmJnI9PT1zKSl7aWYoYTxjKWRve0JmKGUscixlLmJsX3RyZWUpfXdoaWxlKDAhPS0tYSk7ZWxzZSAwIT09cj8ociE9PWkmJihCZihlLHIsZS5ibF90cmVlKSxhLS0pLEJmKGUsMTYsZS5ibF90cmVlKSxOZihlLGEtMywyKSk6YTw9MTA/KEJmKGUsMTcsZS5ibF90cmVlKSxOZihlLGEtMywzKSk6KEJmKGUsMTgsZS5ibF90cmVlKSxOZihlLGEtMTEsNykpO2E9MCxpPXIsMD09PXM/KHU9MTM4LGM9Myk6cj09PXM/KHU9NixjPTMpOih1PTcsYz00KX19LHRoPSExLG5oPWZ1bmN0aW9uKGUsdCxuLG8pe05mKGUsMCsobz8xOjApLDMpLGZ1bmN0aW9uKGUsdCxuLG8pe1ZmKGUpLG8mJihqZihlLG4pLGpmKGUsfm4pKSxlLnBlbmRpbmdfYnVmLnNldChlLndpbmRvdy5zdWJhcnJheSh0LHQrbiksZS5wZW5kaW5nKSxlLnBlbmRpbmcrPW59KGUsdCxuLCEwKX0sb2g9ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIHIsaSxzPTA7ZS5sZXZlbD4wPygyPT09ZS5zdHJtLmRhdGFfdHlwZSYmKGUuc3RybS5kYXRhX3R5cGU9ZnVuY3Rpb24oZSl7dmFyIHQsbj00MDkzNjI0NDQ3O2Zvcih0PTA7dDw9MzE7dCsrLG4+Pj49MSlpZigxJm4mJjAhPT1lLmR5bl9sdHJlZVsyKnRdKXJldHVybiAwO2lmKDAhPT1lLmR5bl9sdHJlZVsxOF18fDAhPT1lLmR5bl9sdHJlZVsyMF18fDAhPT1lLmR5bl9sdHJlZVsyNl0pcmV0dXJuIDE7Zm9yKHQ9MzI7dDxDZjt0KyspaWYoMCE9PWUuZHluX2x0cmVlWzIqdF0pcmV0dXJuIDE7cmV0dXJuIDB9KGUpKSwkZihlLGUubF9kZXNjKSwkZihlLGUuZF9kZXNjKSxzPWZ1bmN0aW9uKGUpe3ZhciB0O2ZvcihRZihlLGUuZHluX2x0cmVlLGUubF9kZXNjLm1heF9jb2RlKSxRZihlLGUuZHluX2R0cmVlLGUuZF9kZXNjLm1heF9jb2RlKSwkZihlLGUuYmxfZGVzYyksdD0xODt0Pj0zJiYwPT09ZS5ibF90cmVlWzIqRWZbdF0rMV07dC0tKTtyZXR1cm4gZS5vcHRfbGVuKz0zKih0KzEpKzUrNSs0LHR9KGUpLHI9ZS5vcHRfbGVuKzMrNz4+PjMsKGk9ZS5zdGF0aWNfbGVuKzMrNz4+PjMpPD1yJiYocj1pKSk6cj1pPW4rNSxuKzQ8PXImJi0xIT09dD9uaChlLHQsbixvKTo0PT09ZS5zdHJhdGVneXx8aT09PXI/KE5mKGUsMisobz8xOjApLDMpLEtmKGUsT2YsVGYpKTooTmYoZSw0KyhvPzE6MCksMyksZnVuY3Rpb24oZSx0LG4sbyl7dmFyIHI7Zm9yKE5mKGUsdC0yNTcsNSksTmYoZSxuLTEsNSksTmYoZSxvLTQsNCkscj0wO3I8bztyKyspTmYoZSxlLmJsX3RyZWVbMipFZltyXSsxXSwzKTtlaChlLGUuZHluX2x0cmVlLHQtMSksZWgoZSxlLmR5bl9kdHJlZSxuLTEpfShlLGUubF9kZXNjLm1heF9jb2RlKzEsZS5kX2Rlc2MubWF4X2NvZGUrMSxzKzEpLEtmKGUsZS5keW5fbHRyZWUsZS5keW5fZHRyZWUpKSxHZihlKSxvJiZWZihlKX0scmg9e190cl9pbml0OmZ1bmN0aW9uKGUpe3RofHwoIWZ1bmN0aW9uKCl7dmFyIGUsdCxuLG8scixpPW5ldyBBcnJheSgxNik7Zm9yKG49MCxvPTA7bzwyODtvKyspZm9yKFVmW29dPW4sZT0wO2U8MTw8cWZbb107ZSsrKUFmW24rK109bztmb3IoQWZbbi0xXT1vLHI9MCxvPTA7bzwxNjtvKyspZm9yKEZmW29dPXIsZT0wO2U8MTw8SWZbb107ZSsrKXpmW3IrK109bztmb3Iocj4+PTc7bzxTZjtvKyspZm9yKEZmW29dPXI8PDcsZT0wO2U8MTw8SWZbb10tNztlKyspemZbMjU2K3IrK109bztmb3IodD0wO3Q8PVJmO3QrKylpW3RdPTA7Zm9yKGU9MDtlPD0xNDM7KU9mWzIqZSsxXT04LGUrKyxpWzhdKys7Zm9yKDtlPD0yNTU7KU9mWzIqZSsxXT05LGUrKyxpWzldKys7Zm9yKDtlPD0yNzk7KU9mWzIqZSsxXT03LGUrKyxpWzddKys7Zm9yKDtlPD0yODc7KU9mWzIqZSsxXT04LGUrKyxpWzhdKys7Zm9yKEhmKE9mLDI4NyxpKSxlPTA7ZTxTZjtlKyspVGZbMiplKzFdPTUsVGZbMiplXT1aZihlLDUpO0RmPW5ldyBNZihPZixxZiwyNTcsa2YsUmYpLHhmPW5ldyBNZihUZixJZiwwLFNmLFJmKSxXZj1uZXcgTWYobmV3IEFycmF5KDApLFBmLDAsMTksNyl9KCksdGg9ITApLGUubF9kZXNjPW5ldyBMZihlLmR5bl9sdHJlZSxEZiksZS5kX2Rlc2M9bmV3IExmKGUuZHluX2R0cmVlLHhmKSxlLmJsX2Rlc2M9bmV3IExmKGUuYmxfdHJlZSxXZiksZS5iaV9idWY9MCxlLmJpX3ZhbGlkPTAsR2YoZSl9LF90cl9zdG9yZWRfYmxvY2s6bmgsX3RyX2ZsdXNoX2Jsb2NrOm9oLF90cl90YWxseTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucGVuZGluZ19idWZbZS5kX2J1ZisyKmUubGFzdF9saXRdPXQ+Pj44JjI1NSxlLnBlbmRpbmdfYnVmW2UuZF9idWYrMiplLmxhc3RfbGl0KzFdPTI1NSZ0LGUucGVuZGluZ19idWZbZS5sX2J1ZitlLmxhc3RfbGl0XT0yNTUmbixlLmxhc3RfbGl0KyssMD09PXQ/ZS5keW5fbHRyZWVbMipuXSsrOihlLm1hdGNoZXMrKyx0LS0sZS5keW5fbHRyZWVbMiooQWZbbl0rQ2YrMSldKyssZS5keW5fZHRyZWVbMipKZih0KV0rKyksZS5sYXN0X2xpdD09PWUubGl0X2J1ZnNpemUtMX0sX3RyX2FsaWduOmZ1bmN0aW9uKGUpe05mKGUsMiwzKSxCZihlLDI1NixPZiksZnVuY3Rpb24oZSl7MTY9PT1lLmJpX3ZhbGlkPyhqZihlLGUuYmlfYnVmKSxlLmJpX2J1Zj0wLGUuYmlfdmFsaWQ9MCk6ZS5iaV92YWxpZD49OCYmKGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZlLmJpX2J1ZixlLmJpX2J1Zj4+PTgsZS5iaV92YWxpZC09OCl9KGUpfX0saWg9ZnVuY3Rpb24oZSx0LG4sbyl7Zm9yKHZhciByPTY1NTM1JmV8MCxpPWU+Pj4xNiY2NTUzNXwwLHM9MDswIT09bjspe24tPXM9bj4yZTM/MmUzOm47ZG97aT1pKyhyPXIrdFtvKytdfDApfDB9d2hpbGUoLS1zKTtyJT02NTUyMSxpJT02NTUyMX1yZXR1cm4gcnxpPDwxNnwwfSxzaD1uZXcgVWludDMyQXJyYXkoZnVuY3Rpb24oKXtmb3IodmFyIGUsdD1bXSxuPTA7bjwyNTY7bisrKXtlPW47Zm9yKHZhciBvPTA7bzw4O28rKyllPTEmZT8zOTg4MjkyMzg0XmU+Pj4xOmU+Pj4xO3Rbbl09ZX1yZXR1cm4gdH0oKSksYWg9ZnVuY3Rpb24oZSx0LG4sbyl7dmFyIHI9c2gsaT1vK247ZV49LTE7Zm9yKHZhciBzPW87czxpO3MrKyllPWU+Pj44XnJbMjU1JihlXnRbc10pXTtyZXR1cm4tMV5lfSx1aD17MjoibmVlZCBkaWN0aW9uYXJ5IiwxOiJzdHJlYW0gZW5kIiwwOiIiLCItMSI6ImZpbGUgZXJyb3IiLCItMiI6InN0cmVhbSBlcnJvciIsIi0zIjoiZGF0YSBlcnJvciIsIi00IjoiaW5zdWZmaWNpZW50IG1lbW9yeSIsIi01IjoiYnVmZmVyIGVycm9yIiwiLTYiOiJpbmNvbXBhdGlibGUgdmVyc2lvbiJ9LGNoPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfTUVNX0VSUk9SOi00LFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9LGxoPXJoLl90cl9pbml0LGRoPXJoLl90cl9zdG9yZWRfYmxvY2ssZmg9cmguX3RyX2ZsdXNoX2Jsb2NrLGhoPXJoLl90cl90YWxseSxwaD1yaC5fdHJfYWxpZ24sdmg9Y2guWl9OT19GTFVTSCxiaD1jaC5aX1BBUlRJQUxfRkxVU0gsZ2g9Y2guWl9GVUxMX0ZMVVNILG1oPWNoLlpfRklOSVNILHloPWNoLlpfQkxPQ0ssX2g9Y2guWl9PSyx3aD1jaC5aX1NUUkVBTV9FTkQsQ2g9Y2guWl9TVFJFQU1fRVJST1Isa2g9Y2guWl9EQVRBX0VSUk9SLFNoPWNoLlpfQlVGX0VSUk9SLFJoPWNoLlpfREVGQVVMVF9DT01QUkVTU0lPTixxaD1jaC5aX0ZJTFRFUkVELEloPWNoLlpfSFVGRk1BTl9PTkxZLFBoPWNoLlpfUkxFLEVoPWNoLlpfRklYRUQsT2g9Y2guWl9ERUZBVUxUX1NUUkFURUdZLFRoPWNoLlpfVU5LTk9XTix6aD1jaC5aX0RFRkxBVEVELEFoPTI1OCxVaD0yNjIsRGg9MTAzLHhoPTExMyxXaD02NjYsRmg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tc2c9dWhbdF0sdH0sTWg9ZnVuY3Rpb24oZSl7cmV0dXJuKGU8PDEpLShlPjQ/OTowKX0sTGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUubGVuZ3RoOy0tdD49MDspZVt0XT0wfSxKaD1mdW5jdGlvbihlLHQsbil7cmV0dXJuKHQ8PGUuaGFzaF9zaGlmdF5uKSZlLmhhc2hfbWFza30samg9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5zdGF0ZSxuPXQucGVuZGluZztuPmUuYXZhaWxfb3V0JiYobj1lLmF2YWlsX291dCksMCE9PW4mJihlLm91dHB1dC5zZXQodC5wZW5kaW5nX2J1Zi5zdWJhcnJheSh0LnBlbmRpbmdfb3V0LHQucGVuZGluZ19vdXQrbiksZS5uZXh0X291dCksZS5uZXh0X291dCs9bix0LnBlbmRpbmdfb3V0Kz1uLGUudG90YWxfb3V0Kz1uLGUuYXZhaWxfb3V0LT1uLHQucGVuZGluZy09biwwPT09dC5wZW5kaW5nJiYodC5wZW5kaW5nX291dD0wKSl9LE5oPWZ1bmN0aW9uKGUsdCl7ZmgoZSxlLmJsb2NrX3N0YXJ0Pj0wP2UuYmxvY2tfc3RhcnQ6LTEsZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0LHQpLGUuYmxvY2tfc3RhcnQ9ZS5zdHJzdGFydCxqaChlLnN0cm0pfSxCaD1mdW5jdGlvbihlLHQpe2UucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPXR9LFpoPWZ1bmN0aW9uKGUsdCl7ZS5wZW5kaW5nX2J1ZltlLnBlbmRpbmcrK109dD4+PjgmMjU1LGUucGVuZGluZ19idWZbZS5wZW5kaW5nKytdPTI1NSZ0fSxIaD1mdW5jdGlvbihlLHQpe3ZhciBuLG8scj1lLm1heF9jaGFpbl9sZW5ndGgsaT1lLnN0cnN0YXJ0LHM9ZS5wcmV2X2xlbmd0aCxhPWUubmljZV9tYXRjaCx1PWUuc3Ryc3RhcnQ+ZS53X3NpemUtVWg/ZS5zdHJzdGFydC0oZS53X3NpemUtVWgpOjAsYz1lLndpbmRvdyxsPWUud19tYXNrLGQ9ZS5wcmV2LGY9ZS5zdHJzdGFydCtBaCxoPWNbaStzLTFdLHA9Y1tpK3NdO2UucHJldl9sZW5ndGg+PWUuZ29vZF9tYXRjaCYmKHI+Pj0yKSxhPmUubG9va2FoZWFkJiYoYT1lLmxvb2thaGVhZCk7ZG97aWYoY1sobj10KStzXT09PXAmJmNbbitzLTFdPT09aCYmY1tuXT09PWNbaV0mJmNbKytuXT09PWNbaSsxXSl7aSs9MixuKys7ZG97fXdoaWxlKGNbKytpXT09PWNbKytuXSYmY1srK2ldPT09Y1srK25dJiZjWysraV09PT1jWysrbl0mJmNbKytpXT09PWNbKytuXSYmY1srK2ldPT09Y1srK25dJiZjWysraV09PT1jWysrbl0mJmNbKytpXT09PWNbKytuXSYmY1srK2ldPT09Y1srK25dJiZpPGYpO2lmKG89QWgtKGYtaSksaT1mLUFoLG8+cyl7aWYoZS5tYXRjaF9zdGFydD10LHM9byxvPj1hKWJyZWFrO2g9Y1tpK3MtMV0scD1jW2krc119fX13aGlsZSgodD1kW3QmbF0pPnUmJjAhPS0tcik7cmV0dXJuIHM8PWUubG9va2FoZWFkP3M6ZS5sb29rYWhlYWR9LEdoPWZ1bmN0aW9uKGUpe3ZhciB0LG4sbyxyLGkscyxhLHUsYyxsLGQ9ZS53X3NpemU7ZG97aWYocj1lLndpbmRvd19zaXplLWUubG9va2FoZWFkLWUuc3Ryc3RhcnQsZS5zdHJzdGFydD49ZCsoZC1VaCkpe2Uud2luZG93LnNldChlLndpbmRvdy5zdWJhcnJheShkLGQrZCksMCksZS5tYXRjaF9zdGFydC09ZCxlLnN0cnN0YXJ0LT1kLGUuYmxvY2tfc3RhcnQtPWQsdD1uPWUuaGFzaF9zaXplO2Rve289ZS5oZWFkWy0tdF0sZS5oZWFkW3RdPW8+PWQ/by1kOjB9d2hpbGUoLS1uKTt0PW49ZDtkb3tvPWUucHJldlstLXRdLGUucHJldlt0XT1vPj1kP28tZDowfXdoaWxlKC0tbik7cis9ZH1pZigwPT09ZS5zdHJtLmF2YWlsX2luKWJyZWFrO2lmKHM9ZS5zdHJtLGE9ZS53aW5kb3csdT1lLnN0cnN0YXJ0K2UubG9va2FoZWFkLGM9cixsPXZvaWQgMCwobD1zLmF2YWlsX2luKT5jJiYobD1jKSxuPTA9PT1sPzA6KHMuYXZhaWxfaW4tPWwsYS5zZXQocy5pbnB1dC5zdWJhcnJheShzLm5leHRfaW4scy5uZXh0X2luK2wpLHUpLDE9PT1zLnN0YXRlLndyYXA/cy5hZGxlcj1paChzLmFkbGVyLGEsbCx1KToyPT09cy5zdGF0ZS53cmFwJiYocy5hZGxlcj1haChzLmFkbGVyLGEsbCx1KSkscy5uZXh0X2luKz1sLHMudG90YWxfaW4rPWwsbCksZS5sb29rYWhlYWQrPW4sZS5sb29rYWhlYWQrZS5pbnNlcnQ+PTMpZm9yKGk9ZS5zdHJzdGFydC1lLmluc2VydCxlLmluc19oPWUud2luZG93W2ldLGUuaW5zX2g9SmgoZSxlLmluc19oLGUud2luZG93W2krMV0pO2UuaW5zZXJ0JiYoZS5pbnNfaD1KaChlLGUuaW5zX2gsZS53aW5kb3dbaSszLTFdKSxlLnByZXZbaSZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1pLGkrKyxlLmluc2VydC0tLCEoZS5sb29rYWhlYWQrZS5pbnNlcnQ8MykpOyk7fXdoaWxlKGUubG9va2FoZWFkPFVoJiYwIT09ZS5zdHJtLmF2YWlsX2luKX0sVmg9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4sbzs7KXtpZihlLmxvb2thaGVhZDxVaCl7aWYoR2goZSksZS5sb29rYWhlYWQ8VWgmJnQ9PT12aClyZXR1cm4gMTtpZigwPT09ZS5sb29rYWhlYWQpYnJlYWt9aWYobj0wLGUubG9va2FoZWFkPj0zJiYoZS5pbnNfaD1KaChlLGUuaW5zX2gsZS53aW5kb3dbZS5zdHJzdGFydCszLTFdKSxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLDAhPT1uJiZlLnN0cnN0YXJ0LW48PWUud19zaXplLVVoJiYoZS5tYXRjaF9sZW5ndGg9SGgoZSxuKSksZS5tYXRjaF9sZW5ndGg+PTMpaWYobz1oaChlLGUuc3Ryc3RhcnQtZS5tYXRjaF9zdGFydCxlLm1hdGNoX2xlbmd0aC0zKSxlLmxvb2thaGVhZC09ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg8PWUubWF4X2xhenlfbWF0Y2gmJmUubG9va2FoZWFkPj0zKXtlLm1hdGNoX2xlbmd0aC0tO2Rve2Uuc3Ryc3RhcnQrKyxlLmluc19oPUpoKGUsZS5pbnNfaCxlLndpbmRvd1tlLnN0cnN0YXJ0KzMtMV0pLG49ZS5wcmV2W2Uuc3Ryc3RhcnQmZS53X21hc2tdPWUuaGVhZFtlLmluc19oXSxlLmhlYWRbZS5pbnNfaF09ZS5zdHJzdGFydH13aGlsZSgwIT0tLWUubWF0Y2hfbGVuZ3RoKTtlLnN0cnN0YXJ0Kyt9ZWxzZSBlLnN0cnN0YXJ0Kz1lLm1hdGNoX2xlbmd0aCxlLm1hdGNoX2xlbmd0aD0wLGUuaW5zX2g9ZS53aW5kb3dbZS5zdHJzdGFydF0sZS5pbnNfaD1KaChlLGUuaW5zX2gsZS53aW5kb3dbZS5zdHJzdGFydCsxXSk7ZWxzZSBvPWhoKGUsMCxlLndpbmRvd1tlLnN0cnN0YXJ0XSksZS5sb29rYWhlYWQtLSxlLnN0cnN0YXJ0Kys7aWYobyYmKE5oKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gZS5pbnNlcnQ9ZS5zdHJzdGFydDwyP2Uuc3Ryc3RhcnQ6Mix0PT09bWg/KE5oKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0PzM6NCk6ZS5sYXN0X2xpdCYmKE5oKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KT8xOjJ9LFhoPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuLG8scjs7KXtpZihlLmxvb2thaGVhZDxVaCl7aWYoR2goZSksZS5sb29rYWhlYWQ8VWgmJnQ9PT12aClyZXR1cm4gMTtpZigwPT09ZS5sb29rYWhlYWQpYnJlYWt9aWYobj0wLGUubG9va2FoZWFkPj0zJiYoZS5pbnNfaD1KaChlLGUuaW5zX2gsZS53aW5kb3dbZS5zdHJzdGFydCszLTFdKSxuPWUucHJldltlLnN0cnN0YXJ0JmUud19tYXNrXT1lLmhlYWRbZS5pbnNfaF0sZS5oZWFkW2UuaW5zX2hdPWUuc3Ryc3RhcnQpLGUucHJldl9sZW5ndGg9ZS5tYXRjaF9sZW5ndGgsZS5wcmV2X21hdGNoPWUubWF0Y2hfc3RhcnQsZS5tYXRjaF9sZW5ndGg9MiwwIT09biYmZS5wcmV2X2xlbmd0aDxlLm1heF9sYXp5X21hdGNoJiZlLnN0cnN0YXJ0LW48PWUud19zaXplLVVoJiYoZS5tYXRjaF9sZW5ndGg9SGgoZSxuKSxlLm1hdGNoX2xlbmd0aDw9NSYmKGUuc3RyYXRlZ3k9PT1xaHx8Mz09PWUubWF0Y2hfbGVuZ3RoJiZlLnN0cnN0YXJ0LWUubWF0Y2hfc3RhcnQ+NDA5NikmJihlLm1hdGNoX2xlbmd0aD0yKSksZS5wcmV2X2xlbmd0aD49MyYmZS5tYXRjaF9sZW5ndGg8PWUucHJldl9sZW5ndGgpe3I9ZS5zdHJzdGFydCtlLmxvb2thaGVhZC0zLG89aGgoZSxlLnN0cnN0YXJ0LTEtZS5wcmV2X21hdGNoLGUucHJldl9sZW5ndGgtMyksZS5sb29rYWhlYWQtPWUucHJldl9sZW5ndGgtMSxlLnByZXZfbGVuZ3RoLT0yO2RveysrZS5zdHJzdGFydDw9ciYmKGUuaW5zX2g9SmgoZSxlLmluc19oLGUud2luZG93W2Uuc3Ryc3RhcnQrMy0xXSksbj1lLnByZXZbZS5zdHJzdGFydCZlLndfbWFza109ZS5oZWFkW2UuaW5zX2hdLGUuaGVhZFtlLmluc19oXT1lLnN0cnN0YXJ0KX13aGlsZSgwIT0tLWUucHJldl9sZW5ndGgpO2lmKGUubWF0Y2hfYXZhaWxhYmxlPTAsZS5tYXRjaF9sZW5ndGg9MixlLnN0cnN0YXJ0KyssbyYmKE5oKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1lbHNlIGlmKGUubWF0Y2hfYXZhaWxhYmxlKXtpZigobz1oaChlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSkpJiZOaChlLCExKSxlLnN0cnN0YXJ0KyssZS5sb29rYWhlYWQtLSwwPT09ZS5zdHJtLmF2YWlsX291dClyZXR1cm4gMX1lbHNlIGUubWF0Y2hfYXZhaWxhYmxlPTEsZS5zdHJzdGFydCsrLGUubG9va2FoZWFkLS19cmV0dXJuIGUubWF0Y2hfYXZhaWxhYmxlJiYobz1oaChlLDAsZS53aW5kb3dbZS5zdHJzdGFydC0xXSksZS5tYXRjaF9hdmFpbGFibGU9MCksZS5pbnNlcnQ9ZS5zdHJzdGFydDwyP2Uuc3Ryc3RhcnQ6Mix0PT09bWg/KE5oKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0PzM6NCk6ZS5sYXN0X2xpdCYmKE5oKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KT8xOjJ9O2Z1bmN0aW9uIFloKGUsdCxuLG8scil7dGhpcy5nb29kX2xlbmd0aD1lLHRoaXMubWF4X2xhenk9dCx0aGlzLm5pY2VfbGVuZ3RoPW4sdGhpcy5tYXhfY2hhaW49byx0aGlzLmZ1bmM9cn12YXIgS2g9W25ldyBZaCgwLDAsMCwwLChmdW5jdGlvbihlLHQpe3ZhciBuPTY1NTM1O2ZvcihuPmUucGVuZGluZ19idWZfc2l6ZS01JiYobj1lLnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYoZS5sb29rYWhlYWQ8PTEpe2lmKEdoKGUpLDA9PT1lLmxvb2thaGVhZCYmdD09PXZoKXJldHVybiAxO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31lLnN0cnN0YXJ0Kz1lLmxvb2thaGVhZCxlLmxvb2thaGVhZD0wO3ZhciBvPWUuYmxvY2tfc3RhcnQrbjtpZigoMD09PWUuc3Ryc3RhcnR8fGUuc3Ryc3RhcnQ+PW8pJiYoZS5sb29rYWhlYWQ9ZS5zdHJzdGFydC1vLGUuc3Ryc3RhcnQ9byxOaChlLCExKSwwPT09ZS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIDE7aWYoZS5zdHJzdGFydC1lLmJsb2NrX3N0YXJ0Pj1lLndfc2l6ZS1VaCYmKE5oKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gZS5pbnNlcnQ9MCx0PT09bWg/KE5oKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0PzM6NCk6KGUuc3Ryc3RhcnQ+ZS5ibG9ja19zdGFydCYmKE5oKGUsITEpLGUuc3RybS5hdmFpbF9vdXQpLDEpfSkpLG5ldyBZaCg0LDQsOCw0LFZoKSxuZXcgWWgoNCw1LDE2LDgsVmgpLG5ldyBZaCg0LDYsMzIsMzIsVmgpLG5ldyBZaCg0LDQsMTYsMTYsWGgpLG5ldyBZaCg4LDE2LDMyLDMyLFhoKSxuZXcgWWgoOCwxNiwxMjgsMTI4LFhoKSxuZXcgWWgoOCwzMiwxMjgsMjU2LFhoKSxuZXcgWWgoMzIsMTI4LDI1OCwxMDI0LFhoKSxuZXcgWWgoMzIsMjU4LDI1OCw0MDk2LFhoKV07ZnVuY3Rpb24gJGgoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD16aCx0aGlzLmxhc3RfZmx1c2g9LTEsdGhpcy53X3NpemU9MCx0aGlzLndfYml0cz0wLHRoaXMud19tYXNrPTAsdGhpcy53aW5kb3c9bnVsbCx0aGlzLndpbmRvd19zaXplPTAsdGhpcy5wcmV2PW51bGwsdGhpcy5oZWFkPW51bGwsdGhpcy5pbnNfaD0wLHRoaXMuaGFzaF9zaXplPTAsdGhpcy5oYXNoX2JpdHM9MCx0aGlzLmhhc2hfbWFzaz0wLHRoaXMuaGFzaF9zaGlmdD0wLHRoaXMuYmxvY2tfc3RhcnQ9MCx0aGlzLm1hdGNoX2xlbmd0aD0wLHRoaXMucHJldl9tYXRjaD0wLHRoaXMubWF0Y2hfYXZhaWxhYmxlPTAsdGhpcy5zdHJzdGFydD0wLHRoaXMubWF0Y2hfc3RhcnQ9MCx0aGlzLmxvb2thaGVhZD0wLHRoaXMucHJldl9sZW5ndGg9MCx0aGlzLm1heF9jaGFpbl9sZW5ndGg9MCx0aGlzLm1heF9sYXp5X21hdGNoPTAsdGhpcy5sZXZlbD0wLHRoaXMuc3RyYXRlZ3k9MCx0aGlzLmdvb2RfbWF0Y2g9MCx0aGlzLm5pY2VfbWF0Y2g9MCx0aGlzLmR5bl9sdHJlZT1uZXcgVWludDE2QXJyYXkoMTE0NiksdGhpcy5keW5fZHRyZWU9bmV3IFVpbnQxNkFycmF5KDEyMiksdGhpcy5ibF90cmVlPW5ldyBVaW50MTZBcnJheSg3OCksTGgodGhpcy5keW5fbHRyZWUpLExoKHRoaXMuZHluX2R0cmVlKSxMaCh0aGlzLmJsX3RyZWUpLHRoaXMubF9kZXNjPW51bGwsdGhpcy5kX2Rlc2M9bnVsbCx0aGlzLmJsX2Rlc2M9bnVsbCx0aGlzLmJsX2NvdW50PW5ldyBVaW50MTZBcnJheSgxNiksdGhpcy5oZWFwPW5ldyBVaW50MTZBcnJheSg1NzMpLExoKHRoaXMuaGVhcCksdGhpcy5oZWFwX2xlbj0wLHRoaXMuaGVhcF9tYXg9MCx0aGlzLmRlcHRoPW5ldyBVaW50MTZBcnJheSg1NzMpLExoKHRoaXMuZGVwdGgpLHRoaXMubF9idWY9MCx0aGlzLmxpdF9idWZzaXplPTAsdGhpcy5sYXN0X2xpdD0wLHRoaXMuZF9idWY9MCx0aGlzLm9wdF9sZW49MCx0aGlzLnN0YXRpY19sZW49MCx0aGlzLm1hdGNoZXM9MCx0aGlzLmluc2VydD0wLHRoaXMuYmlfYnVmPTAsdGhpcy5iaV92YWxpZD0wfXZhciBRaD1mdW5jdGlvbihlKXtpZighZXx8IWUuc3RhdGUpcmV0dXJuIEZoKGUsQ2gpO2UudG90YWxfaW49ZS50b3RhbF9vdXQ9MCxlLmRhdGFfdHlwZT1UaDt2YXIgdD1lLnN0YXRlO3JldHVybiB0LnBlbmRpbmc9MCx0LnBlbmRpbmdfb3V0PTAsdC53cmFwPDAmJih0LndyYXA9LXQud3JhcCksdC5zdGF0dXM9dC53cmFwPzQyOnhoLGUuYWRsZXI9Mj09PXQud3JhcD8wOjEsdC5sYXN0X2ZsdXNoPXZoLGxoKHQpLF9ofSxlcD1mdW5jdGlvbihlKXt2YXIgdCxuPVFoKGUpO3JldHVybiBuPT09X2gmJigodD1lLnN0YXRlKS53aW5kb3dfc2l6ZT0yKnQud19zaXplLExoKHQuaGVhZCksdC5tYXhfbGF6eV9tYXRjaD1LaFt0LmxldmVsXS5tYXhfbGF6eSx0Lmdvb2RfbWF0Y2g9S2hbdC5sZXZlbF0uZ29vZF9sZW5ndGgsdC5uaWNlX21hdGNoPUtoW3QubGV2ZWxdLm5pY2VfbGVuZ3RoLHQubWF4X2NoYWluX2xlbmd0aD1LaFt0LmxldmVsXS5tYXhfY2hhaW4sdC5zdHJzdGFydD0wLHQuYmxvY2tfc3RhcnQ9MCx0Lmxvb2thaGVhZD0wLHQuaW5zZXJ0PTAsdC5tYXRjaF9sZW5ndGg9dC5wcmV2X2xlbmd0aD0yLHQubWF0Y2hfYXZhaWxhYmxlPTAsdC5pbnNfaD0wKSxufSx0cD1mdW5jdGlvbihlLHQsbixvLHIsaSl7aWYoIWUpcmV0dXJuIENoO3ZhciBzPTE7aWYodD09PVJoJiYodD02KSxvPDA/KHM9MCxvPS1vKTpvPjE1JiYocz0yLG8tPTE2KSxyPDF8fHI+OXx8biE9PXpofHxvPDh8fG8+MTV8fHQ8MHx8dD45fHxpPDB8fGk+RWgpcmV0dXJuIEZoKGUsQ2gpOzg9PT1vJiYobz05KTt2YXIgYT1uZXcgJGg7cmV0dXJuIGUuc3RhdGU9YSxhLnN0cm09ZSxhLndyYXA9cyxhLmd6aGVhZD1udWxsLGEud19iaXRzPW8sYS53X3NpemU9MTw8YS53X2JpdHMsYS53X21hc2s9YS53X3NpemUtMSxhLmhhc2hfYml0cz1yKzcsYS5oYXNoX3NpemU9MTw8YS5oYXNoX2JpdHMsYS5oYXNoX21hc2s9YS5oYXNoX3NpemUtMSxhLmhhc2hfc2hpZnQ9fn4oKGEuaGFzaF9iaXRzKzMtMSkvMyksYS53aW5kb3c9bmV3IFVpbnQ4QXJyYXkoMiphLndfc2l6ZSksYS5oZWFkPW5ldyBVaW50MTZBcnJheShhLmhhc2hfc2l6ZSksYS5wcmV2PW5ldyBVaW50MTZBcnJheShhLndfc2l6ZSksYS5saXRfYnVmc2l6ZT0xPDxyKzYsYS5wZW5kaW5nX2J1Zl9zaXplPTQqYS5saXRfYnVmc2l6ZSxhLnBlbmRpbmdfYnVmPW5ldyBVaW50OEFycmF5KGEucGVuZGluZ19idWZfc2l6ZSksYS5kX2J1Zj0xKmEubGl0X2J1ZnNpemUsYS5sX2J1Zj0zKmEubGl0X2J1ZnNpemUsYS5sZXZlbD10LGEuc3RyYXRlZ3k9aSxhLm1ldGhvZD1uLGVwKGUpfSxucD1mdW5jdGlvbihlLHQpe3JldHVybiBlJiZlLnN0YXRlPzIhPT1lLnN0YXRlLndyYXA/Q2g6KGUuc3RhdGUuZ3poZWFkPXQsX2gpOkNofSxvcD1mdW5jdGlvbihlLHQpe3ZhciBuLG87aWYoIWV8fCFlLnN0YXRlfHx0PnlofHx0PDApcmV0dXJuIGU/RmgoZSxDaCk6Q2g7dmFyIHI9ZS5zdGF0ZTtpZighZS5vdXRwdXR8fCFlLmlucHV0JiYwIT09ZS5hdmFpbF9pbnx8ci5zdGF0dXM9PT1XaCYmdCE9PW1oKXJldHVybiBGaChlLDA9PT1lLmF2YWlsX291dD9TaDpDaCk7ci5zdHJtPWU7dmFyIGk9ci5sYXN0X2ZsdXNoO2lmKHIubGFzdF9mbHVzaD10LDQyPT09ci5zdGF0dXMpaWYoMj09PXIud3JhcCllLmFkbGVyPTAsQmgociwzMSksQmgociwxMzkpLEJoKHIsOCksci5nemhlYWQ/KEJoKHIsKHIuZ3poZWFkLnRleHQ/MTowKSsoci5nemhlYWQuaGNyYz8yOjApKyhyLmd6aGVhZC5leHRyYT80OjApKyhyLmd6aGVhZC5uYW1lPzg6MCkrKHIuZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLEJoKHIsMjU1JnIuZ3poZWFkLnRpbWUpLEJoKHIsci5nemhlYWQudGltZT4+OCYyNTUpLEJoKHIsci5nemhlYWQudGltZT4+MTYmMjU1KSxCaChyLHIuZ3poZWFkLnRpbWU+PjI0JjI1NSksQmgociw5PT09ci5sZXZlbD8yOnIuc3RyYXRlZ3k+PUlofHxyLmxldmVsPDI/NDowKSxCaChyLDI1NSZyLmd6aGVhZC5vcyksci5nemhlYWQuZXh0cmEmJnIuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKEJoKHIsMjU1JnIuZ3poZWFkLmV4dHJhLmxlbmd0aCksQmgocixyLmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksci5nemhlYWQuaGNyYyYmKGUuYWRsZXI9YWgoZS5hZGxlcixyLnBlbmRpbmdfYnVmLHIucGVuZGluZywwKSksci5nemluZGV4PTAsci5zdGF0dXM9NjkpOihCaChyLDApLEJoKHIsMCksQmgociwwKSxCaChyLDApLEJoKHIsMCksQmgociw5PT09ci5sZXZlbD8yOnIuc3RyYXRlZ3k+PUlofHxyLmxldmVsPDI/NDowKSxCaChyLDMpLHIuc3RhdHVzPXhoKTtlbHNle3ZhciBzPXpoKyhyLndfYml0cy04PDw0KTw8ODtzfD0oci5zdHJhdGVneT49SWh8fHIubGV2ZWw8Mj8wOnIubGV2ZWw8Nj8xOjY9PT1yLmxldmVsPzI6Myk8PDYsMCE9PXIuc3Ryc3RhcnQmJihzfD0zMikscys9MzEtcyUzMSxyLnN0YXR1cz14aCxaaChyLHMpLDAhPT1yLnN0cnN0YXJ0JiYoWmgocixlLmFkbGVyPj4+MTYpLFpoKHIsNjU1MzUmZS5hZGxlcikpLGUuYWRsZXI9MX1pZig2OT09PXIuc3RhdHVzKWlmKHIuZ3poZWFkLmV4dHJhKXtmb3Iobj1yLnBlbmRpbmc7ci5nemluZGV4PCg2NTUzNSZyLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoci5wZW5kaW5nIT09ci5wZW5kaW5nX2J1Zl9zaXplfHwoci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPm4mJihlLmFkbGVyPWFoKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctbixuKSksamgoZSksbj1yLnBlbmRpbmcsci5wZW5kaW5nIT09ci5wZW5kaW5nX2J1Zl9zaXplKSk7KUJoKHIsMjU1JnIuZ3poZWFkLmV4dHJhW3IuZ3ppbmRleF0pLHIuZ3ppbmRleCsrO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5uJiYoZS5hZGxlcj1haChlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW4sbikpLHIuZ3ppbmRleD09PXIuZ3poZWFkLmV4dHJhLmxlbmd0aCYmKHIuZ3ppbmRleD0wLHIuc3RhdHVzPTczKX1lbHNlIHIuc3RhdHVzPTczO2lmKDczPT09ci5zdGF0dXMpaWYoci5nemhlYWQubmFtZSl7bj1yLnBlbmRpbmc7ZG97aWYoci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplJiYoci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPm4mJihlLmFkbGVyPWFoKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctbixuKSksamgoZSksbj1yLnBlbmRpbmcsci5wZW5kaW5nPT09ci5wZW5kaW5nX2J1Zl9zaXplKSl7bz0xO2JyZWFrfW89ci5nemluZGV4PHIuZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZyLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoci5nemluZGV4KyspOjAsQmgocixvKX13aGlsZSgwIT09byk7ci5nemhlYWQuaGNyYyYmci5wZW5kaW5nPm4mJihlLmFkbGVyPWFoKGUuYWRsZXIsci5wZW5kaW5nX2J1ZixyLnBlbmRpbmctbixuKSksMD09PW8mJihyLmd6aW5kZXg9MCxyLnN0YXR1cz05MSl9ZWxzZSByLnN0YXR1cz05MTtpZig5MT09PXIuc3RhdHVzKWlmKHIuZ3poZWFkLmNvbW1lbnQpe249ci5wZW5kaW5nO2Rve2lmKHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSYmKHIuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5uJiYoZS5hZGxlcj1haChlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW4sbikpLGpoKGUpLG49ci5wZW5kaW5nLHIucGVuZGluZz09PXIucGVuZGluZ19idWZfc2l6ZSkpe289MTticmVha31vPXIuZ3ppbmRleDxyLmd6aGVhZC5jb21tZW50Lmxlbmd0aD8yNTUmci5nemhlYWQuY29tbWVudC5jaGFyQ29kZUF0KHIuZ3ppbmRleCsrKTowLEJoKHIsbyl9d2hpbGUoMCE9PW8pO3IuZ3poZWFkLmhjcmMmJnIucGVuZGluZz5uJiYoZS5hZGxlcj1haChlLmFkbGVyLHIucGVuZGluZ19idWYsci5wZW5kaW5nLW4sbikpLDA9PT1vJiYoci5zdGF0dXM9RGgpfWVsc2Ugci5zdGF0dXM9RGg7aWYoci5zdGF0dXM9PT1EaCYmKHIuZ3poZWFkLmhjcmM/KHIucGVuZGluZysyPnIucGVuZGluZ19idWZfc2l6ZSYmamgoZSksci5wZW5kaW5nKzI8PXIucGVuZGluZ19idWZfc2l6ZSYmKEJoKHIsMjU1JmUuYWRsZXIpLEJoKHIsZS5hZGxlcj4+OCYyNTUpLGUuYWRsZXI9MCxyLnN0YXR1cz14aCkpOnIuc3RhdHVzPXhoKSwwIT09ci5wZW5kaW5nKXtpZihqaChlKSwwPT09ZS5hdmFpbF9vdXQpcmV0dXJuIHIubGFzdF9mbHVzaD0tMSxfaH1lbHNlIGlmKDA9PT1lLmF2YWlsX2luJiZNaCh0KTw9TWgoaSkmJnQhPT1taClyZXR1cm4gRmgoZSxTaCk7aWYoci5zdGF0dXM9PT1XaCYmMCE9PWUuYXZhaWxfaW4pcmV0dXJuIEZoKGUsU2gpO2lmKDAhPT1lLmF2YWlsX2lufHwwIT09ci5sb29rYWhlYWR8fHQhPT12aCYmci5zdGF0dXMhPT1XaCl7dmFyIGE9ci5zdHJhdGVneT09PUloP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuOzspe2lmKDA9PT1lLmxvb2thaGVhZCYmKEdoKGUpLDA9PT1lLmxvb2thaGVhZCkpe2lmKHQ9PT12aClyZXR1cm4gMTticmVha31pZihlLm1hdGNoX2xlbmd0aD0wLG49aGgoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKyxuJiYoTmgoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpKXJldHVybiAxfXJldHVybiBlLmluc2VydD0wLHQ9PT1taD8oTmgoZSwhMCksMD09PWUuc3RybS5hdmFpbF9vdXQ/Mzo0KTplLmxhc3RfbGl0JiYoTmgoZSwhMSksMD09PWUuc3RybS5hdmFpbF9vdXQpPzE6Mn0ocix0KTpyLnN0cmF0ZWd5PT09UGg/ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4sbyxyLGkscz1lLndpbmRvdzs7KXtpZihlLmxvb2thaGVhZDw9QWgpe2lmKEdoKGUpLGUubG9va2FoZWFkPD1BaCYmdD09PXZoKXJldHVybiAxO2lmKDA9PT1lLmxvb2thaGVhZClicmVha31pZihlLm1hdGNoX2xlbmd0aD0wLGUubG9va2FoZWFkPj0zJiZlLnN0cnN0YXJ0PjAmJihvPXNbcj1lLnN0cnN0YXJ0LTFdKT09PXNbKytyXSYmbz09PXNbKytyXSYmbz09PXNbKytyXSl7aT1lLnN0cnN0YXJ0K0FoO2Rve313aGlsZShvPT09c1srK3JdJiZvPT09c1srK3JdJiZvPT09c1srK3JdJiZvPT09c1srK3JdJiZvPT09c1srK3JdJiZvPT09c1srK3JdJiZvPT09c1srK3JdJiZvPT09c1srK3JdJiZyPGkpO2UubWF0Y2hfbGVuZ3RoPUFoLShpLXIpLGUubWF0Y2hfbGVuZ3RoPmUubG9va2FoZWFkJiYoZS5tYXRjaF9sZW5ndGg9ZS5sb29rYWhlYWQpfWlmKGUubWF0Y2hfbGVuZ3RoPj0zPyhuPWhoKGUsMSxlLm1hdGNoX2xlbmd0aC0zKSxlLmxvb2thaGVhZC09ZS5tYXRjaF9sZW5ndGgsZS5zdHJzdGFydCs9ZS5tYXRjaF9sZW5ndGgsZS5tYXRjaF9sZW5ndGg9MCk6KG49aGgoZSwwLGUud2luZG93W2Uuc3Ryc3RhcnRdKSxlLmxvb2thaGVhZC0tLGUuc3Ryc3RhcnQrKyksbiYmKE5oKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gMX1yZXR1cm4gZS5pbnNlcnQ9MCx0PT09bWg/KE5oKGUsITApLDA9PT1lLnN0cm0uYXZhaWxfb3V0PzM6NCk6ZS5sYXN0X2xpdCYmKE5oKGUsITEpLDA9PT1lLnN0cm0uYXZhaWxfb3V0KT8xOjJ9KHIsdCk6S2hbci5sZXZlbF0uZnVuYyhyLHQpO2lmKDMhPT1hJiY0IT09YXx8KHIuc3RhdHVzPVdoKSwxPT09YXx8Mz09PWEpcmV0dXJuIDA9PT1lLmF2YWlsX291dCYmKHIubGFzdF9mbHVzaD0tMSksX2g7aWYoMj09PWEmJih0PT09Ymg/cGgocik6dCE9PXloJiYoZGgociwwLDAsITEpLHQ9PT1naCYmKExoKHIuaGVhZCksMD09PXIubG9va2FoZWFkJiYoci5zdHJzdGFydD0wLHIuYmxvY2tfc3RhcnQ9MCxyLmluc2VydD0wKSkpLGpoKGUpLDA9PT1lLmF2YWlsX291dCkpcmV0dXJuIHIubGFzdF9mbHVzaD0tMSxfaH1yZXR1cm4gdCE9PW1oP19oOnIud3JhcDw9MD93aDooMj09PXIud3JhcD8oQmgociwyNTUmZS5hZGxlciksQmgocixlLmFkbGVyPj44JjI1NSksQmgocixlLmFkbGVyPj4xNiYyNTUpLEJoKHIsZS5hZGxlcj4+MjQmMjU1KSxCaChyLDI1NSZlLnRvdGFsX2luKSxCaChyLGUudG90YWxfaW4+PjgmMjU1KSxCaChyLGUudG90YWxfaW4+PjE2JjI1NSksQmgocixlLnRvdGFsX2luPj4yNCYyNTUpKTooWmgocixlLmFkbGVyPj4+MTYpLFpoKHIsNjU1MzUmZS5hZGxlcikpLGpoKGUpLHIud3JhcD4wJiYoci53cmFwPS1yLndyYXApLDAhPT1yLnBlbmRpbmc/X2g6d2gpfSxycD17ZGVmbGF0ZUluaXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHAoZSx0LHpoLDE1LDgsT2gpfSxkZWZsYXRlSW5pdDI6dHAsZGVmbGF0ZVJlc2V0OmVwLGRlZmxhdGVSZXNldEtlZXA6UWgsZGVmbGF0ZVNldEhlYWRlcjpucCxkZWZsYXRlOm9wLGRlZmxhdGVFbmQ6ZnVuY3Rpb24oZSl7aWYoIWV8fCFlLnN0YXRlKXJldHVybiBDaDt2YXIgdD1lLnN0YXRlLnN0YXR1cztyZXR1cm4gNDIhPT10JiY2OSE9PXQmJjczIT09dCYmOTEhPT10JiZ0IT09RGgmJnQhPT14aCYmdCE9PVdoP0ZoKGUsQ2gpOihlLnN0YXRlPW51bGwsdD09PXhoP0ZoKGUsa2gpOl9oKX0sZGVmbGF0ZVNldERpY3Rpb25hcnk6ZnVuY3Rpb24oZSx0KXt2YXIgbj10Lmxlbmd0aDtpZighZXx8IWUuc3RhdGUpcmV0dXJuIENoO3ZhciBvPWUuc3RhdGUscj1vLndyYXA7aWYoMj09PXJ8fDE9PT1yJiY0MiE9PW8uc3RhdHVzfHxvLmxvb2thaGVhZClyZXR1cm4gQ2g7aWYoMT09PXImJihlLmFkbGVyPWloKGUuYWRsZXIsdCxuLDApKSxvLndyYXA9MCxuPj1vLndfc2l6ZSl7MD09PXImJihMaChvLmhlYWQpLG8uc3Ryc3RhcnQ9MCxvLmJsb2NrX3N0YXJ0PTAsby5pbnNlcnQ9MCk7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoby53X3NpemUpO2kuc2V0KHQuc3ViYXJyYXkobi1vLndfc2l6ZSxuKSwwKSx0PWksbj1vLndfc2l6ZX12YXIgcz1lLmF2YWlsX2luLGE9ZS5uZXh0X2luLHU9ZS5pbnB1dDtmb3IoZS5hdmFpbF9pbj1uLGUubmV4dF9pbj0wLGUuaW5wdXQ9dCxHaChvKTtvLmxvb2thaGVhZD49Mzspe3ZhciBjPW8uc3Ryc3RhcnQsbD1vLmxvb2thaGVhZC0yO2Rve28uaW5zX2g9SmgobyxvLmluc19oLG8ud2luZG93W2MrMy0xXSksby5wcmV2W2Mmby53X21hc2tdPW8uaGVhZFtvLmluc19oXSxvLmhlYWRbby5pbnNfaF09YyxjKyt9d2hpbGUoLS1sKTtvLnN0cnN0YXJ0PWMsby5sb29rYWhlYWQ9MixHaChvKX1yZXR1cm4gby5zdHJzdGFydCs9by5sb29rYWhlYWQsby5ibG9ja19zdGFydD1vLnN0cnN0YXJ0LG8uaW5zZXJ0PW8ubG9va2FoZWFkLG8ubG9va2FoZWFkPTAsby5tYXRjaF9sZW5ndGg9by5wcmV2X2xlbmd0aD0yLG8ubWF0Y2hfYXZhaWxhYmxlPTAsZS5uZXh0X2luPWEsZS5pbnB1dD11LGUuYXZhaWxfaW49cyxvLndyYXA9cixfaH0sZGVmbGF0ZUluZm86InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSxpcD1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sc3A9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtuLmxlbmd0aDspe3ZhciBvPW4uc2hpZnQoKTtpZihvKXtpZigib2JqZWN0IiE9PXQobykpdGhyb3cgbmV3IFR5cGVFcnJvcihvKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIHIgaW4gbylpcChvLHIpJiYoZVtyXT1vW3JdKX19cmV0dXJuIGV9LGFwPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49MCxvPWUubGVuZ3RoO248bztuKyspdCs9ZVtuXS5sZW5ndGg7Zm9yKHZhciByPW5ldyBVaW50OEFycmF5KHQpLGk9MCxzPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXt2YXIgdT1lW2ldO3Iuc2V0KHUscykscys9dS5sZW5ndGh9cmV0dXJuIHJ9O3RyeXtTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQ4QXJyYXkoMSkpfWNhdGNoKGUpeyExfWZvcih2YXIgdXA9bmV3IFVpbnQ4QXJyYXkoMjU2KSxjcD0wO2NwPDI1NjtjcCsrKXVwW2NwXT1jcD49MjUyPzY6Y3A+PTI0OD81OmNwPj0yNDA/NDpjcD49MjI0PzM6Y3A+PTE5Mj8yOjE7dXBbMjU0XT11cFsyNTRdPTE7dmFyIGxwPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBUZXh0RW5jb2RlciYmVGV4dEVuY29kZXIucHJvdG90eXBlLmVuY29kZSlyZXR1cm4obmV3IFRleHRFbmNvZGVyKS5lbmNvZGUoZSk7dmFyIHQsbixvLHIsaSxzPWUubGVuZ3RoLGE9MDtmb3Iocj0wO3I8cztyKyspNTUyOTY9PSg2NDUxMiYobj1lLmNoYXJDb2RlQXQocikpKSYmcisxPHMmJjU2MzIwPT0oNjQ1MTImKG89ZS5jaGFyQ29kZUF0KHIrMSkpKSYmKG49NjU1MzYrKG4tNTUyOTY8PDEwKSsoby01NjMyMCkscisrKSxhKz1uPDEyOD8xOm48MjA0OD8yOm48NjU1MzY/Mzo0O2Zvcih0PW5ldyBVaW50OEFycmF5KGEpLGk9MCxyPTA7aTxhO3IrKyk1NTI5Nj09KDY0NTEyJihuPWUuY2hhckNvZGVBdChyKSkpJiZyKzE8cyYmNTYzMjA9PSg2NDUxMiYobz1lLmNoYXJDb2RlQXQocisxKSkpJiYobj02NTUzNisobi01NTI5Njw8MTApKyhvLTU2MzIwKSxyKyspLG48MTI4P3RbaSsrXT1uOm48MjA0OD8odFtpKytdPTE5MnxuPj4+Nix0W2krK109MTI4fDYzJm4pOm48NjU1MzY/KHRbaSsrXT0yMjR8bj4+PjEyLHRbaSsrXT0xMjh8bj4+PjYmNjMsdFtpKytdPTEyOHw2MyZuKToodFtpKytdPTI0MHxuPj4+MTgsdFtpKytdPTEyOHxuPj4+MTImNjMsdFtpKytdPTEyOHxuPj4+NiY2Myx0W2krK109MTI4fDYzJm4pO3JldHVybiB0fTt2YXIgZHA9ZnVuY3Rpb24oKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfSxmcD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGhwPWNoLlpfTk9fRkxVU0gscHA9Y2guWl9TWU5DX0ZMVVNILHZwPWNoLlpfRlVMTF9GTFVTSCxicD1jaC5aX0ZJTklTSCxncD1jaC5aX09LLG1wPWNoLlpfU1RSRUFNX0VORCx5cD1jaC5aX0RFRkFVTFRfQ09NUFJFU1NJT04sX3A9Y2guWl9ERUZBVUxUX1NUUkFURUdZLHdwPWNoLlpfREVGTEFURUQ7ZnVuY3Rpb24gQ3AoZSl7dGhpcy5vcHRpb25zPXNwKHtsZXZlbDp5cCxtZXRob2Q6d3AsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTpfcH0sZXx8e30pO3ZhciB0PXRoaXMub3B0aW9uczt0LnJhdyYmdC53aW5kb3dCaXRzPjA/dC53aW5kb3dCaXRzPS10LndpbmRvd0JpdHM6dC5nemlwJiZ0LndpbmRvd0JpdHM+MCYmdC53aW5kb3dCaXRzPDE2JiYodC53aW5kb3dCaXRzKz0xNiksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgZHAsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBuPXJwLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sdC5sZXZlbCx0Lm1ldGhvZCx0LndpbmRvd0JpdHMsdC5tZW1MZXZlbCx0LnN0cmF0ZWd5KTtpZihuIT09Z3ApdGhyb3cgbmV3IEVycm9yKHVoW25dKTtpZih0LmhlYWRlciYmcnAuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sdC5oZWFkZXIpLHQuZGljdGlvbmFyeSl7dmFyIG87aWYobz0ic3RyaW5nIj09dHlwZW9mIHQuZGljdGlvbmFyeT9scCh0LmRpY3Rpb25hcnkpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1mcC5jYWxsKHQuZGljdGlvbmFyeSk/bmV3IFVpbnQ4QXJyYXkodC5kaWN0aW9uYXJ5KTp0LmRpY3Rpb25hcnksKG49cnAuZGVmbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLG8pKSE9PWdwKXRocm93IG5ldyBFcnJvcih1aFtuXSk7dGhpcy5fZGljdF9zZXQ9ITB9fWZ1bmN0aW9uIGtwKGUsdCl7dmFyIG49bmV3IENwKHQpO2lmKG4ucHVzaChlLCEwKSxuLmVycil0aHJvdyBuLm1zZ3x8dWhbbi5lcnJdO3JldHVybiBuLnJlc3VsdH1DcC5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihlLHQpe3ZhciBuLG8scj10aGlzLnN0cm0saT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7Zm9yKG89dD09PX5+dD90OiEwPT09dD9icDpocCwic3RyaW5nIj09dHlwZW9mIGU/ci5pbnB1dD1scChlKToiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09ZnAuY2FsbChlKT9yLmlucHV0PW5ldyBVaW50OEFycmF5KGUpOnIuaW5wdXQ9ZSxyLm5leHRfaW49MCxyLmF2YWlsX2luPXIuaW5wdXQubGVuZ3RoOzspaWYoMD09PXIuYXZhaWxfb3V0JiYoci5vdXRwdXQ9bmV3IFVpbnQ4QXJyYXkoaSksci5uZXh0X291dD0wLHIuYXZhaWxfb3V0PWkpLChvPT09cHB8fG89PT12cCkmJnIuYXZhaWxfb3V0PD02KXRoaXMub25EYXRhKHIub3V0cHV0LnN1YmFycmF5KDAsci5uZXh0X291dCkpLHIuYXZhaWxfb3V0PTA7ZWxzZXtpZigobj1ycC5kZWZsYXRlKHIsbykpPT09bXApcmV0dXJuIHIubmV4dF9vdXQ+MCYmdGhpcy5vbkRhdGEoci5vdXRwdXQuc3ViYXJyYXkoMCxyLm5leHRfb3V0KSksbj1ycC5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChuKSx0aGlzLmVuZGVkPSEwLG49PT1ncDtpZigwIT09ci5hdmFpbF9vdXQpe2lmKG8+MCYmci5uZXh0X291dD4wKXRoaXMub25EYXRhKHIub3V0cHV0LnN1YmFycmF5KDAsci5uZXh0X291dCkpLHIuYXZhaWxfb3V0PTA7ZWxzZSBpZigwPT09ci5hdmFpbF9pbilicmVha31lbHNlIHRoaXMub25EYXRhKHIub3V0cHV0KX1yZXR1cm4hMH0sQ3AucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihlKXt0aGlzLmNodW5rcy5wdXNoKGUpfSxDcC5wcm90b3R5cGUub25FbmQ9ZnVuY3Rpb24oZSl7ZT09PWdwJiYodGhpcy5yZXN1bHQ9YXAodGhpcy5jaHVua3MpKSx0aGlzLmNodW5rcz1bXSx0aGlzLmVycj1lLHRoaXMubXNnPXRoaXMuc3RybS5tc2d9O3ZhciBTcCxScCxxcCxJcD17RGVmbGF0ZTpDcCxkZWZsYXRlOmtwLGRlZmxhdGVSYXc6ZnVuY3Rpb24oZSx0KXtyZXR1cm4odD10fHx7fSkucmF3PSEwLGtwKGUsdCl9LGd6aXA6ZnVuY3Rpb24oZSx0KXtyZXR1cm4odD10fHx7fSkuZ3ppcD0hMCxrcChlLHQpfSxjb25zdGFudHM6Y2h9LmRlZmxhdGUsUHA9KFNwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtuKHRoaXMsZSksdGhpcy5vT3B0aW9ucz1PYmplY3QuYXNzaWduKHtpUG9ydDotMSxjYkNvbm5lY3RTdWNjZXNzOm51bGwsY2JDb25uZWN0RXJyb3I6bnVsbCxjYkNvbm5lY3RDbG9zZTpudWxsfSx0KSx0aGlzLnN6SG9zdD0iaHR0cDovLzEyNy4wLjAuMSIsdGhpcy5zelVVSUQ9IiIsdGhpcy5zelZlcnNpb249IiIsdGhpcy5iTm9ybWFsQ2xvc2U9ITEsdGhpcy5iQ29ubmVjdGVkPSExLHRoaXMuYkluaXRDb25uZWN0PSEwLHRoaXMuaUdldEVycm9yQ291bnQ9MCx0aGlzLm9XaW5kb3dDb250cm9sQ2FsbGJhY2s9e30sdGhpcy5vU2FkcENhbGxiYWNrPXt9LHRoaXMub1NsaWNlQ2FsbGJhY2s9e30sdGhpcy5vU2VyaWFsQ2FsbGJhY2s9e30sdGhpcy5vVUlDb250cm9sQ2FsbGJhY2s9e30sdGhpcy5vVXBncmFkZUNhbGxiYWNrPXt9LHRoaXMuaW5pdCgpfXJldHVybiByKGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PUlkKCksbj17c2VxdWVuY2U6dCxjbWQ6InN5c3RlbS5jb25uZWN0In0sbz1KU09OLnN0cmluZ2lmeShuKTtlLnNlbmRJbWFnZUh0dHAoIiIuY29uY2F0KGUuc3pIb3N0LCI6IikuY29uY2F0KGUub09wdGlvbnMuaVBvcnQsIi9pbWdodHRwL2xvY2FsIiksbyx0LHtzdWNjZXNzOmZ1bmN0aW9uKHQpe3ZhciBuPUpTT04ucGFyc2UodCk7ZS5zelVVSUQ9bi51dWlkLGUuc3pWZXJzaW9uPW4udmVyc2lvbixlLmJDb25uZWN0ZWQ9ITAsZS5iSW5pdENvbm5lY3Q9ITEsc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmltYWdlSHR0cFBvbGxpbmcoKX0pLDEwMCksZS5vT3B0aW9ucy5jYkNvbm5lY3RTdWNjZXNzJiZlLm9PcHRpb25zLmNiQ29ubmVjdFN1Y2Nlc3MoKX0sZXJyb3I6ZnVuY3Rpb24oKXt9fSl9fSx7a2V5OiJzZW5kSW1hZ2VIdHRwIix2YWx1ZTpmdW5jdGlvbihlLHQsbixvKXt2YXIgcj10aGlzO289T2JqZWN0LmFzc2lnbih7c3VjY2VzczpudWxsLGVycm9yOm51bGwsYWJvcnQ6bnVsbH0sbyk7dmFyIGk9SXAodCk7IiIhPT0obmV3IFVpbnQ4QXJyYXkpLnRvU3RyaW5nKCkmJihwZi5pc01hY09TKCl8fHBmLmJyb3dzZXIoKS5tc2llKSYmKGk9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoaSkpO2Zvcih2YXIgcz1lbmNvZGVVUklDb21wb25lbnQoYnRvYShpKSksYT10aGlzLnNwbGl0U3RyKHMpLHU9W10sYz0iIixsPTAsZD1hLmxlbmd0aDtsPGQ7bCsrKWM9bD09PWQtMT8idXBkYXRlPSIuY29uY2F0KChuZXcgRGF0ZSkuZ2V0VGltZSgpLCImaXNMYXN0PXRydWUmZGF0YT0iKS5jb25jYXQoYVtsXSwiJnNlcXVlbmNlPSIpLmNvbmNhdChuKToidXBkYXRlPSIuY29uY2F0KChuZXcgRGF0ZSkuZ2V0VGltZSgpLCImaXNMYXN0PWZhbHNlJmRhdGE9IikuY29uY2F0KGFbbF0sIiZzZXF1ZW5jZT0iKS5jb25jYXQobiksdS5wdXNoKGMpO3UubGVuZ3RoPjAmJmZ1bmN0aW9uIHQoKXtyLmltYWdlSHR0cCgiIi5jb25jYXQoZSwiPyIpLmNvbmNhdCh1WzBdKSx7c3VjY2VzczpmdW5jdGlvbihlKXt1LnNoaWZ0KCksdS5sZW5ndGg+MD8oci5iSW5pdENvbm5lY3R8fHIuYkNvbm5lY3RlZCkmJnQoKTpvLnN1Y2Nlc3MmJm8uc3VjY2VzcyhlKX0sZXJyb3I6ZnVuY3Rpb24oKXtvLmVycm9yJiZvLmVycm9yKCl9LGFib3J0OmZ1bmN0aW9uKCl7by5hYm9ydCYmby5hYm9ydCgpfX0pfSgpfX0se2tleToic3BsaXRTdHIiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmdldEJ5dGVMZW4oZSksbj1bXSxvPTE1MDAscj0wLGk9TWF0aC5jZWlsKHQvbyk7cjxpO3IrKyluW3JdPWUuc2xpY2UobypyLG8qKHIrMSkpO3JldHVybiBufX0se2tleToiZ2V0Qnl0ZUxlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAsbj0iIixvPTAscj1lLmxlbmd0aDtvPHI7bysrKW49ZS5jaGFyQXQobyksL1teXHgwMC1ceGZmXS8udGVzdChuKT90Kz0yOnQrPTE7cmV0dXJuIHR9fSx7a2V5OiJpbWFnZUh0dHAiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dD1PYmplY3QuYXNzaWduKHtzdWNjZXNzOm51bGwsZXJyb3I6bnVsbCxhYm9ydDpudWxsfSx0KTt2YXIgbj1uZXcgSW1hZ2U7bi5vbmxvYWQ9ZnVuY3Rpb24oKXtpZih0LnN1Y2Nlc3Mpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLG89ZS5nZXRDb250ZXh0KCIyZCIpLHI9bi53aWR0aCxpPW4uaGVpZ2h0O2Uud2lkdGg9cixlLmhlaWdodD1pO3RyeXtvLmRyYXdJbWFnZShuLDAsMCk7Zm9yKHZhciBzPW8uZ2V0SW1hZ2VEYXRhKDAsMCxyLGkpLmRhdGEsYT0iIix1PS0xLGM9aS0xO2M+PTA7Yy0tKWZvcih2YXIgbD0wO2w8NCpyJiYwIT09c1t1PWMqcio0K2xdO2wrKykyNTUhPT1zW3VdJiYoYSs9U3RyaW5nLmZyb21DaGFyQ29kZShzW3VdKSk7dC5zdWNjZXNzKHBmLnV0Zjh0bzE2KGEpKX1jYXRjaChlKXt0LmVycm9yJiZ0LmVycm9yKCl9fX0sbi5vbmVycm9yPWZ1bmN0aW9uKCl7dC5lcnJvciYmdC5lcnJvcigpfSxuLm9uYWJvcnQ9ZnVuY3Rpb24oKXt0LmFib3J0JiZ0LmFib3J0KCl9LG4uY3Jvc3NPcmlnaW49ImFub255bW91cyIsbi5zcmM9ZX19LHtrZXk6InNldFdpbmRvd0NvbnRyb2xDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vV2luZG93Q29udHJvbENhbGxiYWNrPWV9fSx7a2V5OiJzZXRTYWRwQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub1NhZHBDYWxsYmFjaz1lfX0se2tleToic2V0U2xpY2VDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vU2xpY2VDYWxsYmFjaz1lfX0se2tleToic2V0U2VyaWFsQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMub1NlcmlhbENhbGxiYWNrPWV9fSx7a2V5OiJzZXRVSUNvbnRyb2xDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vVUlDb250cm9sQ2FsbGJhY2s9ZX19LHtrZXk6InNldFVwZ3JhZGVDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vVXBncmFkZUNhbGxiYWNrPWV9fSx7a2V5OiJnZXRTZXJ2aWNlVmVyc2lvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zelZlcnNpb259fSx7a2V5OiJnZXRSZXF1ZXN0VVVJRCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zelVVSUR9fSx7a2V5OiJkaXNjb25uZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1JZCgpLG49e3NlcXVlbmNlOnQsdXVpZDplLnN6VVVJRCxjbWQ6InN5c3RlbS5kaXNjb25uZWN0In0sbz1KU09OLnN0cmluZ2lmeShuKTtlLmJDb25uZWN0ZWQmJmUuc2VuZEltYWdlSHR0cCgiIi5jb25jYXQoZS5zekhvc3QsIjoiKS5jb25jYXQoZS5vT3B0aW9ucy5pUG9ydCwiL2ltZ2h0dHAvbG9jYWwiKSxvLHQse3N1Y2Nlc3M6ZnVuY3Rpb24oKXtlLmJOb3JtYWxDbG9zZT0hMCxlLmJDb25uZWN0ZWQ9ITEsZS5vT3B0aW9ucy5jYkNvbm5lY3RDbG9zZSYmZS5vT3B0aW9ucy5jYkNvbm5lY3RDbG9zZShlLmJOb3JtYWxDbG9zZSl9LGVycm9yOmZ1bmN0aW9uKCl7ZS5iQ29ubmVjdGVkPSExfX0pfX0se2tleToiaW1hZ2VIdHRwUG9sbGluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9SWQoKSxuPXtzZXF1ZW5jZTp0LHV1aWQ6ZS5zelVVSUQsY21kOiJzeXN0ZW0uZ2V0In0sbz1KU09OLnN0cmluZ2lmeShuKTtlLmJDb25uZWN0ZWQmJmUuc2VuZEltYWdlSHR0cCgiIi5jb25jYXQoZS5zekhvc3QsIjoiKS5jb25jYXQoZS5vT3B0aW9ucy5pUG9ydCwiL2ltZ2h0dHAvbG9jYWwiKSxvLHQse3N1Y2Nlc3M6ZnVuY3Rpb24odCl7aWYoZS5pR2V0RXJyb3JDb3VudD0wLCJ0aW1lb3V0Ij09PXQpc2V0VGltZW91dCgoZnVuY3Rpb24oKXtlLmltYWdlSHR0cFBvbGxpbmcoKX0pLDEwMCk7ZWxzZSBpZigiaW52YWxpZCI9PT10KWUuYkNvbm5lY3RlZD0hMSxlLm9PcHRpb25zLmNiQ29ubmVjdEVycm9yJiZlLm9PcHRpb25zLmNiQ29ubmVjdEVycm9yKCk7ZWxzZSBpZigiY2xvc2VkIj09PXQpY29uc29sZS5sb2coImNvbm5lY3RlZCBpcyBkaXNjb25uZWN0ZWQiKTtlbHNle3ZhciBuPUpTT04ucGFyc2UodCk7dm9pZCAwIT09bi5jbWQ/ZS5wYXJzZUNtZChuKTpjb25zb2xlLmxvZygiW2pzV2ViQ29udHJvbF1pbWdIdHRwUG9sbGluZyBwdXNoIG1lc3NhZ2UgZXJyb3I6Ii5jb25jYXQodCkpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5pbWFnZUh0dHBQb2xsaW5nKCl9KSwxMDApfX0sZXJyb3I6ZnVuY3Rpb24oKXs1PT09ZS5pR2V0RXJyb3JDb3VudD8oY29uc29sZS5sb2coIltqc1dlYkNvbnRyb2xdaW1hZ2VIdHRwUG9sbGluZyBnZXQgcG9sbGluZyBmaW5pc2hlZCIpLGUuYk5vcm1hbENsb3NlPSExLGUuYkNvbm5lY3RlZD0hMSxlLm9PcHRpb25zLmNiQ29ubmVjdENsb3NlJiZlLm9PcHRpb25zLmNiQ29ubmVjdENsb3NlKGUuYk5vcm1hbENsb3NlKSk6c2V0VGltZW91dCgoZnVuY3Rpb24oKXtjb25zb2xlLmxvZygiW2pzV2ViQ29udHJvbF1pbWdIdHRwUG9sbGluZyBnZXQgcG9sbGluZyBmYWlsZWQiKSxlLmlHZXRFcnJvckNvdW50KyssZS5pbWFnZUh0dHBQb2xsaW5nKCl9KSwxMDApfX0pfX0se2tleToic2VuZFJlcXVlc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLG8pe3ZhciByPWUuY21kLnNwbGl0KCIuIiksaT0iIjtyLmxlbmd0aD4xP2k9ImxhcHV0YSI9PT1yWzBdPyJsYXB1dGEiOiJsb2NhbCI6bygpO3ZhciBzPUlkKCk7ZS5zZXF1ZW5jZT1zLGUudXVpZD10LnN6VVVJRCxlLnRpbWVzdGFtcD0iIi5jb25jYXQoKG5ldyBEYXRlKS5nZXRUaW1lKCkpO3ZhciBhPUpTT04uc3RyaW5naWZ5KGUpO3QuYkNvbm5lY3RlZD90LnNlbmRJbWFnZUh0dHAoIiIuY29uY2F0KHQuc3pIb3N0LCI6IikuY29uY2F0KHQub09wdGlvbnMuaVBvcnQsIi9pbWdodHRwLyIpLmNvbmNhdChpKSxhLHMse3N1Y2Nlc3M6ZnVuY3Rpb24oZSl7dmFyIHQ9SlNPTi5wYXJzZShlKTswPT09dC5lcnJvck1vZHVsZSYmMD09PXQuZXJyb3JDb2RlP24odCk6byh0KX0sZXJyb3I6ZnVuY3Rpb24oKXtvKCl9fSk6bygpfSkpfX0se2tleToicGFyc2VDbWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY21kLnNwbGl0KCIuIiksbj10WzFdLnJlcGxhY2UoL15bYS16XXsxfS9nLChmdW5jdGlvbihlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfSkpOyJ3aW5kb3ciPT09dFswXXx8InBsYXkiPT09dFswXT90aGlzLm9XaW5kb3dDb250cm9sQ2FsbGJhY2tbImNiIi5jb25jYXQobildJiZ0aGlzLm9XaW5kb3dDb250cm9sQ2FsbGJhY2tbImNiIi5jb25jYXQobildKGUpOiJzYWRwIj09PXRbMF0/dGhpcy5vU2FkcENhbGxiYWNrWyJjYiIuY29uY2F0KG4pXSYmdGhpcy5vU2FkcENhbGxiYWNrWyJjYiIuY29uY2F0KG4pXShlKToic2VyaWFsIj09PXRbMF0/dGhpcy5vU2VyaWFsQ2FsbGJhY2tbImNiIi5jb25jYXQobildJiZ0aGlzLm9TZXJpYWxDYWxsYmFja1siY2IiLmNvbmNhdChuKV0oZSk6InNsaWNlIj09PXRbMF0/dGhpcy5vU2xpY2VDYWxsYmFja1siY2IiLmNvbmNhdChuKV0mJnRoaXMub1NsaWNlQ2FsbGJhY2tbImNiIi5jb25jYXQobildKGUpOiJ1aSI9PT10WzBdP3RoaXMub1VJQ29udHJvbENhbGxiYWNrWyJjYiIuY29uY2F0KG4pXSYmdGhpcy5vVUlDb250cm9sQ2FsbGJhY2tbImNiIi5jb25jYXQobildKGUpOiJ1cGdyYWRlIj09PXRbMF0mJnRoaXMub1VwZ3JhZGVDYWxsYmFja1siY2IiLmNvbmNhdChuKV0mJnRoaXMub1VwZ3JhZGVDYWxsYmFja1siY2IiLmNvbmNhdChuKV0oZSl9fV0pLGV9KCksU3ApLEVwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtuKHRoaXMsZSksdGhpcy5vT3B0aW9ucz1PYmplY3QuYXNzaWduKHtzelBsdWdpbkNvbnRhaW5lcjoiIixpUG9ydDotMSxjYkNvbm5lY3RTdWNjZXNzOm51bGwsY2JDb25uZWN0RXJyb3I6bnVsbCxjYkNvbm5lY3RDbG9zZTpudWxsLHN6Q2xhc3NJZDoiIn0sdCksdGhpcy5vUGx1Z2luPW51bGwsdGhpcy5zelBsdWdpbklkPSIiLHRoaXMuc3pVVUlEPSIiLHRoaXMuc3pWZXJzaW9uPSIiLHRoaXMub1JlcXVlc3RMaXN0PXt9LHRoaXMuYk5vcm1hbENsb3NlPSExLHRoaXMuYU1lc3NhZ2U9W10sdGhpcy5vV2luZG93Q29udHJvbENhbGxiYWNrPXt9LHRoaXMub1NhZHBDYWxsYmFjaz17fSx0aGlzLm9TbGljZUNhbGxiYWNrPXt9LHRoaXMub1NlcmlhbENhbGxiYWNrPXt9LHRoaXMub1VJQ29udHJvbENhbGxiYWNrPXt9LHRoaXMub1VwZ3JhZGVDYWxsYmFjaz17fSx0aGlzLmluaXQoKX1yZXR1cm4gcihlLFt7a2V5OiJpbml0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7ZS5pbml0UGx1Z2luKCksZS5vUGx1Z2luLm9iamVjdCYmZS5vUGx1Z2luLmNyZWF0ZVNvY2tldCgid3M6Ly8xMjcuMC4wLjE6Ii5jb25jYXQoZS5vT3B0aW9ucy5pUG9ydCkpfX0se2tleToiaW5pdFBsdWdpbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuc3pQbHVnaW5JZD0id2ViQWN0aXZlWF8iLmNvbmNhdCgobmV3IERhdGUpLmdldFRpbWUoKSk7dmFyIHQ9IjxvYmplY3QgaWQ9JyIuY29uY2F0KHRoaXMuc3pQbHVnaW5JZCwiJyBjbGFzc2lkPSdjbHNpZDoiKS5jb25jYXQoZS5vT3B0aW9ucy5zekNsYXNzSWQsIicgY29kZWJhc2U9Jycgc3RhbmRieT0nV2FpdGluZy4uLicgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgYWxpZ249J2NlbnRlcicgPjwvb2JqZWN0PiIpLG49ZS5vT3B0aW9ucy5zelBsdWdpbkNvbnRhaW5lcjtpZigiIj09PW4pe249IiIuY29uY2F0KHRoaXMuc3pQbHVnaW5JZCwiX2RpdiIpO3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO28uaWQ9bixkb2N1bWVudC5ib2R5LnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQobyl9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQobikuaW5uZXJIVE1MPXQsZS5vUGx1Z2luPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuc3pQbHVnaW5JZCksd2luZG93Lm9uQ29ubmVjdE1lc3NhZ2U9ZnVuY3Rpb24odCxuKXtuPyhlLmFNZXNzYWdlLnB1c2godCksZS5vbkNvbm5lY3RNZXNzYWdlKGUuYU1lc3NhZ2Uuam9pbigiIikpLGUuYU1lc3NhZ2UubGVuZ3RoPTApOmUuYU1lc3NhZ2UucHVzaCh0KX0sd2luZG93Lm9uQ29ubmVjdENsb3NlPWZ1bmN0aW9uKCl7ZS5vbkNvbm5lY3RDbG9zZSgpfSx3aW5kb3cub25Db25uZWN0RXJyb3I9ZnVuY3Rpb24oKXtlLm9uQ29ubmVjdEVycm9yKCl9LHdpbmRvdy5vbkNvbm5lY3RDbG9zZUV4Y2VwdGlvbj1mdW5jdGlvbigpe2Uub25Db25uZWN0Q2xvc2VFeGNlcHRpb24oKX0sd2luZG93Lm9uQ29ubmVjdE9wZW49ZnVuY3Rpb24oKXtlLm9uQ29ubmVjdE9wZW4oKX0scGYuY3JlYXRlRXZlbnRTY3JpcHQodGhpcy5zelBsdWdpbklkLCJvbkNvbm5lY3RNZXNzYWdlKHN6RGF0YSwgYkxhc3QpIiwib25Db25uZWN0TWVzc2FnZShzekRhdGEsIGJMYXN0KTsiKSxwZi5jcmVhdGVFdmVudFNjcmlwdCh0aGlzLnN6UGx1Z2luSWQsIm9uQ29ubmVjdENsb3NlKCkiLCJvbkNvbm5lY3RDbG9zZSgpOyIpLHBmLmNyZWF0ZUV2ZW50U2NyaXB0KHRoaXMuc3pQbHVnaW5JZCwib25Db25uZWN0RXJyb3IoKSIsIm9uQ29ubmVjdEVycm9yKCk7IikscGYuY3JlYXRlRXZlbnRTY3JpcHQodGhpcy5zelBsdWdpbklkLCJvbkNvbm5lY3RDbG9zZUV4Y2VwdGlvbigpIiwib25Db25uZWN0Q2xvc2VFeGNlcHRpb24oKTsiKSxwZi5jcmVhdGVFdmVudFNjcmlwdCh0aGlzLnN6UGx1Z2luSWQsIm9uQ29ubmVjdE9wZW4oKSIsIm9uQ29ubmVjdE9wZW4oKTsiKX19LHtrZXk6Im9uQ29ubmVjdE1lc3NhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYoZSl7dmFyIG49SlNPTi5wYXJzZShlKSxvPW4uc2VxdWVuY2U7dm9pZCAwPT09byYmdm9pZCAwPT09bi5jbWQ/KHQuc3pVVUlEPW4udXVpZCx0LnN6VmVyc2lvbj1uLnZlcnNpb24sdC5vT3B0aW9ucy5jYkNvbm5lY3RTdWNjZXNzJiZ0Lm9PcHRpb25zLmNiQ29ubmVjdFN1Y2Nlc3MoKSk6dm9pZCAwIT09bi5jbWQ/dC5wYXJzZUNtZChuKTp2b2lkIDAhPT10Lm9SZXF1ZXN0TGlzdFtvXSYmKDA9PT1uLmVycm9yTW9kdWxlJiYwPT09bi5lcnJvckNvZGU/dC5vUmVxdWVzdExpc3Rbb10ucmVzb2x2ZShuKTp0Lm9SZXF1ZXN0TGlzdFtvXS5yZWplY3QobiksZGVsZXRlIHQub1JlcXVlc3RMaXN0W29dKX19fSx7a2V5OiJvbkNvbm5lY3RDbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLm9QbHVnaW49bnVsbCwiIiE9PXRoaXMuc3pQbHVnaW5JZCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5zelBsdWdpbklkKTtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSk7dmFyIHQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiIuY29uY2F0KHRoaXMuc3pQbHVnaW5JZCwiX2RpdiIpKTtudWxsIT09dCYmdC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHQpfXRoaXMub09wdGlvbnMuY2JDb25uZWN0Q2xvc2UmJnRoaXMub09wdGlvbnMuY2JDb25uZWN0Q2xvc2UodGhpcy5iTm9ybWFsQ2xvc2UpfX0se2tleToib25Db25uZWN0Q2xvc2VFeGNlcHRpb24iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztzZXRUaW1lb3V0KChmdW5jdGlvbigpe2Uub1BsdWdpbi5vYmplY3QmJmUub1BsdWdpbi5jbG9zZVNvY2tldCgpfSksMWUzKX19LHtrZXk6Im9uQ29ubmVjdE9wZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e3NlcXVlbmNlOklkKCksY21kOiJzeXN0ZW0uY29ubmVjdCJ9LHQ9SlNPTi5zdHJpbmdpZnkoZSk7dGhpcy5vUGx1Z2luLm9iamVjdCYmdGhpcy5vUGx1Z2luLnNlbmRSZXF1ZXN0KHQpfX0se2tleToib25Db25uZWN0RXJyb3IiLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToic2V0V2luZG93Q29udHJvbENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9XaW5kb3dDb250cm9sQ2FsbGJhY2s9ZX19LHtrZXk6InNldFNhZHBDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vU2FkcENhbGxiYWNrPWV9fSx7a2V5OiJzZXRTbGljZUNhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9TbGljZUNhbGxiYWNrPWV9fSx7a2V5OiJzZXRTZXJpYWxDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5vU2VyaWFsQ2FsbGJhY2s9ZX19LHtrZXk6InNldFVJQ29udHJvbENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9VSUNvbnRyb2xDYWxsYmFjaz1lfX0se2tleToic2V0VXBncmFkZUNhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLm9VcGdyYWRlQ2FsbGJhY2s9ZX19LHtrZXk6ImdldFNlcnZpY2VWZXJzaW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN6VmVyc2lvbn19LHtrZXk6ImdldFJlcXVlc3RVVUlEIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN6VVVJRH19LHtrZXk6ImRpc2Nvbm5lY3QiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5iTm9ybWFsQ2xvc2U9ITAsdGhpcy5vUGx1Z2luJiZ0aGlzLm9QbHVnaW4ub2JqZWN0JiZ0aGlzLm9QbHVnaW4uY2xvc2VTb2NrZXQoKX19LHtrZXk6InNlbmRSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiJ3aW5kb3cuaGlkZVduZCI9PT1lLmNtZD90Lm9QbHVnaW4mJnQub1BsdWdpbi5vYmplY3QmJih0Lm9QbHVnaW4uc3R5bGUudmlzaWJpbGl0eT0iaGlkZGVuIik6IndpbmRvdy5zaG93V25kIj09PWUuY21kJiZ0Lm9QbHVnaW4mJnQub1BsdWdpbi5vYmplY3QmJih0Lm9QbHVnaW4uc3R5bGUudmlzaWJpbGl0eT0idmlzaWJsZSIpLG5ldyBQcm9taXNlKChmdW5jdGlvbihuLG8pe3ZhciByPUlkKCk7ZS5zZXF1ZW5jZT1yLHQub1JlcXVlc3RMaXN0W3JdPXtyZXNvbHZlOm4scmVqZWN0Om99LGUudXVpZD10LnN6VVVJRCxlLnRpbWVzdGFtcD0iIi5jb25jYXQoKG5ldyBEYXRlKS5nZXRUaW1lKCkpO3ZhciBpPUpTT04uc3RyaW5naWZ5KGUpO3Qub1BsdWdpbiYmdC5vUGx1Z2luLm9iamVjdD90Lm9QbHVnaW4uc2VuZFJlcXVlc3QoaSk6bygpfSkpfX0se2tleToicGFyc2VDbWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY21kLnNwbGl0KCIuIiksbj10WzFdLnJlcGxhY2UoL15bYS16XXsxfS9nLChmdW5jdGlvbihlKXtyZXR1cm4gZS50b1VwcGVyQ2FzZSgpfSkpOyJ3aW5kb3ciPT09dFswXXx8InBsYXkiPT09dFswXT90aGlzLm9XaW5kb3dDb250cm9sQ2FsbGJhY2tbImNiIi5jb25jYXQobildJiZ0aGlzLm9XaW5kb3dDb250cm9sQ2FsbGJhY2tbImNiIi5jb25jYXQobildKGUpOiJzYWRwIj09PXRbMF0/dGhpcy5vU2FkcENhbGxiYWNrWyJjYiIuY29uY2F0KG4pXSYmdGhpcy5vU2FkcENhbGxiYWNrWyJjYiIuY29uY2F0KG4pXShlKToic2VyaWFsIj09PXRbMF0/dGhpcy5vU2VyaWFsQ2FsbGJhY2tbImNiIi5jb25jYXQobildJiZ0aGlzLm9TZXJpYWxDYWxsYmFja1siY2IiLmNvbmNhdChuKV0oZSk6InNsaWNlIj09PXRbMF0/dGhpcy5vU2xpY2VDYWxsYmFja1siY2IiLmNvbmNhdChuKV0mJnRoaXMub1NsaWNlQ2FsbGJhY2tbImNiIi5jb25jYXQobildKGUpOiJ1aSI9PT10WzBdP3RoaXMub1VJQ29udHJvbENhbGxiYWNrWyJjYiIuY29uY2F0KG4pXSYmdGhpcy5vVUlDb250cm9sQ2FsbGJhY2tbImNiIi5jb25jYXQobildKGUpOiJ1cGdyYWRlIj09PXRbMF0mJnRoaXMub1VwZ3JhZGVDYWxsYmFja1siY2IiLmNvbmNhdChuKV0mJnRoaXMub1VwZ3JhZGVDYWxsYmFja1siY2IiLmNvbmNhdChuKV0oZSl9fV0pLGV9KCksT3A9KFJwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtuKHRoaXMsZSksdGhpcy5vT3B0aW9ucz1PYmplY3QuYXNzaWduKHtzelBsdWdpbkNvbnRhaW5lcjoiIixjYkNvbm5lY3RTdWNjZXNzOm51bGwsY2JDb25uZWN0RXJyb3I6bnVsbCxjYkNvbm5lY3RDbG9zZTpudWxsLGlTZXJ2aWNlUG9ydFN0YXJ0Oi0xLGlTZXJ2aWNlUG9ydEVuZDotMSxzekNsYXNzSWQ6IiJ9LHQpLHRoaXMuaVBvcnQ9LTEsdGhpcy5vUmVxdWVzdD1udWxsLHRoaXMuYkluaXQ9ITEsdGhpcy5vQ2FsbGJhY2tzPXt9LHRoaXMuaW5pdCgpfXJldHVybiByKGUsW3trZXk6ImluaXQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztwZi5kZXRlY3RQb3J0KGUub09wdGlvbnMuaVNlcnZpY2VQb3J0U3RhcnQsZS5vT3B0aW9ucy5pU2VydmljZVBvcnRFbmQse3N1Y2Nlc3M6ZnVuY3Rpb24odCl7aWYoZS5pUG9ydD10LHBmLmJyb3dzZXIoKS5tc2llKSIxMS4wIj09PXBmLmJyb3dzZXIoKS52ZXJzaW9uPyJodHRwczoiPT09d2luZG93LmxvY2F0aW9uLnByb3RvY29sP2Uub1JlcXVlc3Q9bmV3IFBwKHtpUG9ydDplLmlQb3J0LGNiQ29ubmVjdFN1Y2Nlc3M6ZS5vT3B0aW9ucy5jYkNvbm5lY3RTdWNjZXNzLGNiQ29ubmVjdEVycm9yOmUub09wdGlvbnMuY2JDb25uZWN0RXJyb3IsY2JDb25uZWN0Q2xvc2U6ZS5vT3B0aW9ucy5jYkNvbm5lY3RDbG9zZX0pOmUub1JlcXVlc3Q9bmV3IF9mKHtpUG9ydDplLmlQb3J0LGNiQ29ubmVjdFN1Y2Nlc3M6ZS5vT3B0aW9ucy5jYkNvbm5lY3RTdWNjZXNzLGNiQ29ubmVjdEVycm9yOmUub09wdGlvbnMuY2JDb25uZWN0RXJyb3IsY2JDb25uZWN0Q2xvc2U6ZS5vT3B0aW9ucy5jYkNvbm5lY3RDbG9zZX0pOmUub1JlcXVlc3Q9bmV3IEVwKHtzelBsdWdpbkNvbnRhaW5lcjplLm9PcHRpb25zLnN6UGx1Z2luQ29udGFpbmVyLGlQb3J0OmUuaVBvcnQsY2JDb25uZWN0U3VjY2VzczplLm9PcHRpb25zLmNiQ29ubmVjdFN1Y2Nlc3MsY2JDb25uZWN0RXJyb3I6ZS5vT3B0aW9ucy5jYkNvbm5lY3RFcnJvcixjYkNvbm5lY3RDbG9zZTplLm9PcHRpb25zLmNiQ29ubmVjdENsb3NlLHN6Q2xhc3NJZDplLm9PcHRpb25zLnN6Q2xhc3NJZH0pO2Vsc2UgaWYoImh0dHBzOiI9PT13aW5kb3cubG9jYXRpb24ucHJvdG9jb2wpaWYocGYuYnJvd3NlcigpLmNocm9tZSl0cnl7ZS5vUmVxdWVzdD1uZXcgX2Yoe2lQb3J0OmUuaVBvcnQsY2JDb25uZWN0U3VjY2VzczplLm9PcHRpb25zLmNiQ29ubmVjdFN1Y2Nlc3MsY2JDb25uZWN0RXJyb3I6ZS5vT3B0aW9ucy5jYkNvbm5lY3RFcnJvcixjYkNvbm5lY3RDbG9zZTplLm9PcHRpb25zLmNiQ29ubmVjdENsb3NlfSl9Y2F0Y2godCl7ZS5vUmVxdWVzdD1uZXcgUHAoe2lQb3J0OmUuaVBvcnQsY2JDb25uZWN0U3VjY2VzczplLm9PcHRpb25zLmNiQ29ubmVjdFN1Y2Nlc3MsY2JDb25uZWN0RXJyb3I6ZS5vT3B0aW9ucy5jYkNvbm5lY3RFcnJvcixjYkNvbm5lY3RDbG9zZTplLm9PcHRpb25zLmNiQ29ubmVjdENsb3NlfSl9ZWxzZSBlLm9SZXF1ZXN0PW5ldyBQcCh7aVBvcnQ6ZS5pUG9ydCxjYkNvbm5lY3RTdWNjZXNzOmUub09wdGlvbnMuY2JDb25uZWN0U3VjY2VzcyxjYkNvbm5lY3RFcnJvcjplLm9PcHRpb25zLmNiQ29ubmVjdEVycm9yLGNiQ29ubmVjdENsb3NlOmUub09wdGlvbnMuY2JDb25uZWN0Q2xvc2V9KTtlbHNlIldlYlNvY2tldCJpbiB3aW5kb3cmJihlLm9SZXF1ZXN0PW5ldyBfZih7aVBvcnQ6ZS5pUG9ydCxjYkNvbm5lY3RTdWNjZXNzOmUub09wdGlvbnMuY2JDb25uZWN0U3VjY2VzcyxjYkNvbm5lY3RFcnJvcjplLm9PcHRpb25zLmNiQ29ubmVjdEVycm9yLGNiQ29ubmVjdENsb3NlOmUub09wdGlvbnMuY2JDb25uZWN0Q2xvc2V9KSk7Zm9yKHZhciBuIGluIGUuYkluaXQ9ITAsZS5vQ2FsbGJhY2tzKWUub1JlcXVlc3Rbbl0oZS5vQ2FsbGJhY2tzW25dKX0sZXJyb3I6ZnVuY3Rpb24oKXtlLm9PcHRpb25zLmNiQ29ubmVjdEVycm9yJiZlLm9PcHRpb25zLmNiQ29ubmVjdEVycm9yKCl9fSl9fSx7a2V5OiJzZXRXaW5kb3dDb250cm9sQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYkluaXQ/dGhpcy5vUmVxdWVzdC5zZXRXaW5kb3dDb250cm9sQ2FsbGJhY2soZSk6dGhpcy5vQ2FsbGJhY2tzLnNldFdpbmRvd0NvbnRyb2xDYWxsYmFjaz1lfX0se2tleToic2V0U2FkcENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmJJbml0P3RoaXMub1JlcXVlc3Quc2V0U2FkcENhbGxiYWNrKGUpOnRoaXMub0NhbGxiYWNrcy5zZXRTYWRwQ2FsbGJhY2s9ZX19LHtrZXk6InNldFNsaWNlQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYkluaXQ/dGhpcy5vUmVxdWVzdC5zZXRTbGljZUNhbGxiYWNrKGUpOnRoaXMub0NhbGxiYWNrcy5zZXRTbGljZUNhbGxiYWNrPWV9fSx7a2V5OiJzZXRTZXJpYWxDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5iSW5pdD90aGlzLm9SZXF1ZXN0LnNldFNlcmlhbENhbGxiYWNrKGUpOnRoaXMub0NhbGxiYWNrcy5zZXRTZXJpYWxDYWxsYmFjaz1lfX0se2tleToic2V0VUlDb250cm9sQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYkluaXQ/dGhpcy5vUmVxdWVzdC5zZXRVSUNvbnRyb2xDYWxsYmFjayhlKTp0aGlzLm9DYWxsYmFja3Muc2V0VUlDb250cm9sQ2FsbGJhY2s9ZX19LHtrZXk6InNldFVwZ3JhZGVDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5iSW5pdD90aGlzLm9SZXF1ZXN0LnNldFVwZ3JhZGVDYWxsYmFjayhlKTp0aGlzLm9DYWxsYmFja3Muc2V0VXBncmFkZUNhbGxiYWNrPWV9fSx7a2V5OiJnZXRTZXJ2aWNlVmVyc2lvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5nZXRTZXJ2aWNlVmVyc2lvbigpfX0se2tleToiZ2V0UmVxdWVzdFVVSUQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3QuZ2V0UmVxdWVzdFVVSUQoKX19LHtrZXk6InN0YXJ0U2VydmljZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj17Y21kOiJzeXN0ZW0uc3RhcnRTZXJ2aWNlIix0eXBlOmV9O3JldHVybiB2b2lkIDAhPT10JiYobi5vcHRpb25zPXQpLHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qobil9fSx7a2V5OiJzdG9wU2VydmljZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sbyl7bnVsbCE9PXQub1JlcXVlc3Q/dC5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzeXN0ZW0uc3RvcFNlcnZpY2UiLHR5cGU6ZX0pLnRoZW4oKGZ1bmN0aW9uKGUpe24oZSl9KSwoZnVuY3Rpb24oZSl7byhlKX0pKTpvKCl9KSl9fSx7a2V5OiJkaXNjb25uZWN0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe251bGwhPT1lLm9SZXF1ZXN0PyhlLm9SZXF1ZXN0LmRpc2Nvbm5lY3QoKSx0KCJjYkNvbm5lY3RDbG9zZSBjYWxsYmFjayBpcyByZWFsbHkgc3VjY2VzcyIpKTpuKCl9KSl9fSx7a2V5OiJvcGVuRGlyZWN0b3J5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzeXN0ZW0ub3BlbkRpcmVjdG9yeSIscGF0aDplfSl9fSx7a2V5OiJvcGVuRmlsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InN5c3RlbS5vcGVuRmlsZSIscGF0aDplLHJlbGF0aXZlOnQsdmVyc2lvbjpufSl9fSx7a2V5OiJzZWxlY3REaXJlY3RvcnkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8scil7bnVsbCE9PW4ub1JlcXVlc3Q/bi5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzeXN0ZW0uc2VsZWN0RGlyZWN0b3J5IixjYXB0aW9uOnZvaWQgMCE9PWUmJiIiIT09ZT9wZi5CYXNlNjQoKS5lbmNvZGUoZSk6IiIsZGlyOnZvaWQgMCE9PXQmJiIiIT09dD9wZi5CYXNlNjQoKS5lbmNvZGUodCk6IiJ9KS50aGVuKChmdW5jdGlvbihlKXsiIiE9PWUucGF0aCYmKGUucGF0aD1wZi5CYXNlNjQoKS5kZWNvZGUoZS5wYXRoKSksbyhlKX0pLChmdW5jdGlvbihlKXtyKGUpfSkpOnIoKX0pKX19LHtrZXk6InNlbGVjdEZpbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixpKXtudWxsIT09by5vUmVxdWVzdD9vLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InN5c3RlbS5zZWxlY3RGaWxlIixjYXB0aW9uOiIiIT09ZT9wZi5CYXNlNjQoKS5lbmNvZGUoZSk6IiIsZGlyOiIiIT09dD9wZi5CYXNlNjQoKS5lbmNvZGUodCk6IiIsZmlsdGVyOm59KS50aGVuKChmdW5jdGlvbihlKXsiIiE9PWUucGF0aCYmKGUucGF0aD1wZi5CYXNlNjQoKS5kZWNvZGUoZS5wYXRoKSkscihlKX0pLChmdW5jdGlvbihlKXtpKGUpfSkpOmkoKX0pKX19LHtrZXk6ImdldExvY2FsQ29uZmlnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzeXN0ZW0uZ2V0TG9jYWxDb25maWciLGRlZmF1bHQ6ZX0pfX0se2tleToic2V0TG9jYWxDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLmNtZD0ic3lzdGVtLnNldExvY2FsQ29uZmlnIix0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KGUpfX0se2tleToiY3JlYXRlV25kIix2YWx1ZTpmdW5jdGlvbihlLHQsbixvLHIsaSxzKXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjcmJnZvaWQgMCE9PWFyZ3VtZW50c1s3XT9hcmd1bWVudHNbN106IiI7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LmNyZWF0ZVduZCIscmVjdDp7bGVmdDplLHRvcDp0LHdpZHRoOm4saGVpZ2h0Om99LGNsYXNzTmFtZTpyLGVtYmVkOmksYWN0aXZlWFBhcmVudFduZDpzLEhXTkQ6YX0pfX0se2tleToic2hvd1duZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ3aW5kb3cuc2hvd1duZCJ9KX19LHtrZXk6ImhpZGVXbmQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LmhpZGVXbmQifSl9fSx7a2V5OiJkZXN0cm95V25kIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LG4pe251bGwhPT1lLm9SZXF1ZXN0P2Uub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LmRlc3Ryb3lXbmQifSkudGhlbigoZnVuY3Rpb24oZSl7dChlKX0pLChmdW5jdGlvbihlKXtuKGUpfSkpOm4oKX0pKX19LHtrZXk6InNldFduZEdlb21ldHJ5Iix2YWx1ZTpmdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ3aW5kb3cuc2V0V25kR2VvbWV0cnkiLHJlY3Q6e2xlZnQ6ZSx0b3A6dCx3aWR0aDpuLGhlaWdodDpvfX0pfX0se2tleToic2V0V25kQ292ZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG8scil7bnVsbCE9PW4ub1JlcXVlc3Q/bi5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ3aW5kb3cuc2V0V25kQ292ZXIiLHBvc2l0aW9uOmUsc2l6ZTp0fSkudGhlbigoZnVuY3Rpb24oZSl7byhlKX0pLChmdW5jdGlvbihlKXtyKGUpfSkpOnIoKX0pKX19LHtrZXk6ImN1dHRpbmdQYXJ0V2luZG93Iix2YWx1ZTpmdW5jdGlvbihlLHQsbixvLHIpe3ZhciBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihzLGEpe251bGwhPT1pLm9SZXF1ZXN0P2kub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LmN1dHRpbmdQYXJ0V2luZG93IixyZWN0OntsZWZ0OmUsdG9wOnQsd2lkdGg6bixoZWlnaHQ6b30scm91bmQ6cn0pLnRoZW4oKGZ1bmN0aW9uKGUpe3MoZSl9KSwoZnVuY3Rpb24oZSl7YShlKX0pKTphKCl9KSl9fSx7a2V5OiJyZXBhaXJQYXJ0V2luZG93Iix2YWx1ZTpmdW5jdGlvbihlLHQsbixvLHIpe3ZhciBpPXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihzLGEpe251bGwhPT1pLm9SZXF1ZXN0P2kub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LnJlcGFpclBhcnRXaW5kb3ciLHJlY3Q6e2xlZnQ6ZSx0b3A6dCx3aWR0aDpuLGhlaWdodDpvfSxyb3VuZDpyfSkudGhlbigoZnVuY3Rpb24oZSl7cyhlKX0pLChmdW5jdGlvbihlKXthKGUpfSkpOmEoKX0pKX19LHtrZXk6InNldFduZFpPcmRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LnNldFduZFpPcmRlciIsZmxhZzplfSl9fSx7a2V5OiJjaGFuZ2VQbGF5TW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LmNoYW5nZVBsYXlNb2RlIix0eXBlOmV9KX19LHtrZXk6InNldExhbmd1YWdlVHlwZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LnNldExhbmd1YWdlVHlwZSIsdHlwZTplfSl9fSx7a2V5OiJpbml0TG9naW5JbmZvIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ3aW5kb3cuaW5pdExvZ2luSW5mbyIsdnNtQWRkcmVzczplLnZzbUFkZHJlc3MsdnNtUG9ydDplLnZzbVBvcnQsc2Vzc2lvbklEOmUuc2Vzc2lvbklELGxvZ2luTW9kZWw6ZS5sb2dpbk1vZGVsLHVzZXJUeXBlOmUudXNlclR5cGUsbmV0d29ya1R5cGU6ZS5uZXR3b3JrVHlwZX0pfX0se2tleToic2V0VHJhbnNsYXRlRmlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LnNldFRyYW5zbGF0ZUZpbGUiLHVybDplfSl9fSx7a2V5OiJzd2l0Y2hUb1NpbXBsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LnN3aXRjaFRvU2ltcGxlIixzaW1wbGU6ZX0pfX0se2tleToic2V0VnNtVG9rZW4iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InBsYXkuc2V0VnNtVG9rZW4iLHRva2VuOmV9KX19LHtrZXk6InN0YXJ0UGxheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sbyxyLGkscyxhLHUpe3ZhciBjPXtjbWQ6InBsYXkuc3RhcnRQbGF5Iix1cmw6ZSx1c2VybmFtZTp0LHBhc3N3b3JkOm4sc2l0ZUlEOm8sYXJlYU5hbWU6cGYuQmFzZTY0KCkuZW5jb2RlKHIpLGNhbWVyYU5hbWU6cGYuQmFzZTY0KCkuZW5jb2RlKGkpLHBlcm1pc3Npb246cyx3bmRJbmRleDphfTtyZXR1cm4gdm9pZCAwIT09dSYmKGMub3B0aW9ucz11LHZvaWQgMCE9PWMub3B0aW9ucy5zaXRlTmFtZSYmKGMub3B0aW9ucy5zaXRlTmFtZT1wZi5CYXNlNjQoKS5lbmNvZGUoYy5vcHRpb25zLnNpdGVOYW1lKSkpLHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3QoYyl9fSx7a2V5OiJzZXRQcmV2aWV3M0RQb3NpdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoicGxheS5zZXRQcmV2aWV3M0RQb3NpdGlvbiIsb3BlbjplfSl9fSx7a2V5OiJzdG9wVG90YWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsbil7bnVsbCE9PWUub1JlcXVlc3Q/ZS5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJwbGF5LnN0b3BUb3RhbCJ9KS50aGVuKChmdW5jdGlvbihlKXt0KGUpfSksKGZ1bmN0aW9uKGUpe24oZSl9KSk6bigpfSkpfX0se2tleToic2V0RHJhZ01vZGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InBsYXkuc2V0RHJhZ01vZGUiLGRyYWc6ZX0pfX0se2tleToic2hvd0Vycm9ySW5mb0luRnVsbFNjcmVlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoicGxheS5zaG93RXJyb3JJbmZvSW5GdWxsU2NyZWVuIixlcnJvcjpwZi5CYXNlNjQoKS5lbmNvZGUoZSl9KX19LHtrZXk6InNldE51bWJlck9mV2luZG93cyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoicGxheS5zZXROdW1iZXJPZldpbmRvd3MiLG51bWJlcjplfSl9fSx7a2V5OiJpbml0Q2FyZFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoic2VyaWFsLkFDU0luaXRDYXJkUmVhZGVyIixwYXJhbTplfSl9fSx7a2V5OiJ1bkluaXRDYXJkUmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InNlcmlhbC5BQ1NVbkluaXRDYXJkUmVhZGVyIn0pfX0se2tleToic3RhcnRBdXRvTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzZXJpYWwuQUNTU3RhcnRBdXRvTW9kZSJ9KX19LHtrZXk6InN0b3BBdXRvTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzZXJpYWwuQUNTU3RvcEF1dG9Nb2RlIn0pfX0se2tleToiaW5pdEZpbmdlcnByaW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzZXJpYWwuQUNTSW5pdEZpbmdlcnByaW50IixwYXJhbTplfSl9fSx7a2V5OiJ1bkluaXRGaW5nZXJwcmludCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzZXJpYWwuQUNTVW5Jbml0RmluZ2VycHJpbnQifSl9fSx7a2V5OiJzdGFydENvbGxlY3RGaW5nZXJwcmludCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzZXJpYWwuQUNTU3RhcnRDb2xsZWN0RmluZ2VycHJpbnQifSl9fSx7a2V5OiJzdG9wQ29sbGVjdEZpbmdlcnByaW50Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InNlcmlhbC5BQ1NTdG9wQ29sbGVjdEZpbmdlcnByaW50In0pfX0se2tleToiaXNDb2xsZWN0aW5nRmluZ2VycHJpbnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoic2VyaWFsLkFDU0lzQ29sbGVjdGluZ0ZpbmdlcnByaW50In0pfX0se2tleToiaW5pdFZpZGVvY2FwdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUubWFqb3JUaXRsZT1wZi5CYXNlNjQoKS5lbmNvZGUoZS5tYWpvclRpdGxlKSxlLnRpcD1wZi5CYXNlNjQoKS5lbmNvZGUoZS50aXApLGUuY2FwdHVyZUJ0blR4dD1wZi5CYXNlNjQoKS5lbmNvZGUoZS5jYXB0dXJlQnRuVHh0KSxlLlVTQlJlbW92ZWRUaXA9cGYuQmFzZTY0KCkuZW5jb2RlKGUuVVNCUmVtb3ZlZFRpcCksdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzZXJpYWwuQUNTU3RhcnRDb2xsZWN0SW1hZ2UiLHBhcmFtOmV9KX19LHtrZXk6InVuSW5pdFZpZGVvY2FwdHVyZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzZXJpYWwuQUNTU3RvcENvbGxlY3RJbWFnZSJ9KX19LHtrZXk6InJlZ2lzdGVyRGV2aWNlVHlwZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoic2FkcC5yZWdpc3REZXZpY2VUeXBlIixkZXZpY2VUeXBlOmV9KX19LHtrZXk6ImFjdGl2ZU9ubGluZURldmljZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzYWRwLmFjdGl2ZURldmljZSIsc2VyaWFsTnVtYmVyOmUscGFzc3dvcmQ6dH0pfX0se2tleToicmVmcmVzaERldmljZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoic2FkcC5yZWZyZXNoRGV2aWNlTGlzdCJ9KX19LHtrZXk6Im1vZGlmeURldmljZU5ldFBhcmFtIix2YWx1ZTpmdW5jdGlvbihlLHQsbixvLHIsaSxzKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzYWRwLm1vZGlmeURldmljZVBhcmFtIixtYWNBZGRyZXNzOmUscGFzc3dvcmQ6dCxpcHY0QWRkcmVzczpuLGlwdjRHYXRld2F5Om8saXB2NFN1Ym5ldE1hc2s6cixwb3J0OmksaHR0cFBvcnQ6c30pfX0se2tleToiZXhwb3J0S2V5RmlsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoic2FkcC5leHBvcnRLZXlGaWxlIixzZXJpYWxOdW1iZXI6ZX0pfX0se2tleToiaW1wb3J0S2V5RmlsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzYWRwLmltcG9ydEtleUZpbGUifSl9fSx7a2V5OiJyZXNldFBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzYWRwLnJlc2V0UGFzc3dvcmQiLHNlcmlhbE51bWJlcjplLHBhc3N3b3JkOnQsaW1wb3J0RmlsZURhdGE6bixzekNvZGU6b30pfX0se2tleToidXBsb2FkUGljdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoic2xpY2UudXBsb2FkUGljdHVyZSIscGF0aDpwZi5CYXNlNjQoKS5lbmNvZGUoZSl9KX19LHtrZXk6InNob3dTZWxlY3RNZW51Iix2YWx1ZTpmdW5jdGlvbihlLHQsbixvLHIpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InVpLnNob3dTZWxlY3RNZW51IixpdGVtczpyLHJlY3Q6e2xlZnQ6ZSx0b3A6dCx3aWR0aDpuLGhlaWdodDpvfX0pfX0se2tleToiaGlkZVNlbGVjdE1lbnUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoidWkuaGlkZVNlbGVjdE1lbnUifSl9fSx7a2V5OiJkZXN0cm95U2VsZWN0TWVudSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXtudWxsIT09ZS5vUmVxdWVzdD9lLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InVpLmRlc3Ryb3lTZWxlY3RNZW51In0pLnRoZW4oKGZ1bmN0aW9uKGUpe3QoZSl9KSwoZnVuY3Rpb24oZSl7bihlKX0pKTpuKCl9KSl9fSx7a2V5OiJkZXZpY2VDb25maWciLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6ImxhcHV0YS5lbmNvZGluZ0RldmljZSIscGFyYW06ZX0pfX0se2tleToiY2xvdWRTdG9yYWdlQ29uZmlnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJsYXB1dGEuY2xvdWRTdG9yYWdlIixwYXJhbTplfSl9fSx7a2V5OiJlenZpelJlbW90ZUNvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoibGFwdXRhLmV6dml6UmVtb3RlIixwYXJhbTplfSl9fSx7a2V5OiJzaG93QWxhcm1JbmZvSW5GdWxsU2NyZWVuIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LnNob3dBbGFybUluZm9JbkZ1bGxTY3JlZW4iLGFsYXJtVGl0bGU6ZSxhbGFybU1lc3NhZ2U6dCxhbGFybUlkOm59KX19LHtrZXk6InVwZGF0ZVBhcmVudFduZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ3aW5kb3cudXBkYXRlUGFyZW50V25kIn0pfX0se2tleToicmVzdG9yZVduZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ3aW5kb3cucmVzdG9yZVduZCJ9KX19LHtrZXk6InNldEltbWVkaWF0ZVBsYXliYWNrVGltZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoicGxheS5zZXRJbW1lZGlhdGVQbGF5YmFja1RpbWUiLHNwZWNpZnlUaW1lOmV9KX19LHtrZXk6InNldERyYXdTdGF0dXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6ImRyYXcuc2V0RHJhd1N0YXR1cyIsZW5hYmxlOmV9KX19LHtrZXk6ImNsZWFyUmVnaW9uIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6ImRyYXcuY2xlYXJSZWdpb24ifSl9fSx7a2V5OiJzZXREcmF3U2hhcGVJbmZvIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6ImRyYXcuc2V0RHJhd1NoYXBlSW5mbyIsZHJhd1R5cGU6ZSxkcmF3SW5mbzp0fSl9fSx7a2V5OiJzZXRHcmlkSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoiZHJhdy5zZXRHcmlkSW5mbyIsZ3JpZEluZm86ZX0pfX0se2tleToiZ2V0R3JpZEluZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoiZHJhdy5nZXRHcmlkSW5mbyJ9KX19LHtrZXk6InNldFBvbHlnb25JbmZvIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJkcmF3LnNldFBvbHlnb25JbmZvIixwb2x5Z29uSW5mbzplfSl9fSx7a2V5OiJnZXRQb2x5Z29uSW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJkcmF3LmdldFBvbHlnb25JbmZvIn0pfX0se2tleToic2V0TGluZUluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6ImRyYXcuc2V0TGluZUluZm8iLGxpbmVJbmZvOmV9KX19LHtrZXk6ImdldExpbmVJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6ImRyYXcuZ2V0TGluZUluZm8ifSl9fSx7a2V5OiJzZXRSZWN0SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoiZHJhdy5zZXRSZWN0SW5mbyIscmVjdEluZm86ZX0pfX0se2tleToiZ2V0UmVjdEluZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoiZHJhdy5nZXRSZWN0SW5mbyJ9KX19LHtrZXk6ImNsZWFyU2hhcGVCeVR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6ImRyYXcuY2xlYXJTaGFwZUJ5VHlwZSIsdHlwZTplfSl9fSx7a2V5OiJzZW5zaXRpdmVFbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQsbil7dmFyIG89e2NtZDoibGFwdXRhLnNlbnNpdGl2ZUVuY3J5cHQiLGVuY3J5cHRUeXBlOmUsZW5jcnlwdEZpZWxkOnR9O3JldHVybiB2b2lkIDAhPT1uJiYoby5vcHRpb25zPW4pLHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qobyl9fSx7a2V5OiJzZW5kUmVxdWVzdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3QoZSl9fSx7a2V5OiJyZXF1ZXN0SW50ZXJmYWNlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD17Y21kOiJ3aW5kb3cucmVxdWVzdEludGVyZmFjZSJ9O3JldHVybiB0LnJlcXVlc3RQYXJhbXM9ZSx0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHQpfX0se2tleToic3RvcFBsYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDA9PT1lJiYoZT0tMSksdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJwbGF5LnN0b3BQbGF5Iix3bmRJbmRleDplfSl9fSx7a2V5OiJzaG93UmVtb3RlQ29uZmlnIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3JldHVybiBlLmNtZD0iY29uZmlnLnNob3dSZW1vdGVDb25maWciLG5ldyBQcm9taXNlKChmdW5jdGlvbihuLG8pe251bGwhPT10Lm9SZXF1ZXN0P3Qub1JlcXVlc3Quc2VuZFJlcXVlc3QoZSkudGhlbigoZnVuY3Rpb24oZSl7bihlKX0pLChmdW5jdGlvbihlKXtvKGUpfSkpOm8oKX0pKX19LHtrZXk6InZpZGVvMlBpY3R1cmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e2NtZDoid2luZG93LnZpZGVvMlBpY3R1cmUifTtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdChlKX19LHtrZXk6InBpY3R1cmUyVmlkZW8iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9e2NtZDoid2luZG93LnBpY3R1cmUyVmlkZW8ifTtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdChlKX19LHtrZXk6InB0ekNvbnRyb2wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6ImxhcHV0YS5wdHpDb250cm9sIixwYXJhbTplfSl9fSx7a2V5OiJzaW1Nb3VzZUNsaWNrRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoid2luZG93LnNpbU1vdXNlQ2xpY2tFdmVudCIscG9pbnRYOmUscG9pbnRZOnR9KX19LHtrZXk6InVzX1NldE1heEpvYkNvdW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ1cGdyYWRlLnNldE1heEpvYkNvdW50Iix4bWw6ZX0pfX0se2tleToidXNfR2V0TWF4Sm9iQ291bnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoidXBncmFkZS5nZXRNYXhKb2JDb3VudCJ9KX19LHtrZXk6InVzX0FkZFNjaGVkdWxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ1cGdyYWRlLmFkZFNjaGVkdWxlIix4bWw6cGYuQmFzZTY0KCkuZW5jb2RlKGUpfSl9fSx7a2V5OiJ1c19EZWxTY2hlZHVsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoidXBncmFkZS5kZWxTY2hlZHVsZSIsc2NoZWR1bGVJZDplfSl9fSx7a2V5OiJ1c19HZXRTY2hlZHVsZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLG8pe251bGwhPT10Lm9SZXF1ZXN0P3Qub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoidXBncmFkZS5nZXRTY2hlZHVsZUxpc3QiLHhtbDplfSkudGhlbigoZnVuY3Rpb24oZSl7IiIhPT1lLnhtbCYmKGUueG1sPXBmLkJhc2U2NCgpLmRlY29kZShlLnhtbCkpLG4oZSl9KSwoZnVuY3Rpb24oZSl7byhlKX0pKTpvKCl9KSl9fSx7a2V5OiJ1c19HZXRTY2hlZHVsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obyxyKXtudWxsIT09bi5vUmVxdWVzdD9uLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InVwZ3JhZGUuZ2V0U2NoZWR1bGUiLHhtbDp0LHNjaGVkdWxlSWQ6ZX0pLnRoZW4oKGZ1bmN0aW9uKGUpeyIiIT09ZS54bWwmJihlLnhtbD1wZi5CYXNlNjQoKS5kZWNvZGUoZS54bWwpKSxvKGUpfSksKGZ1bmN0aW9uKGUpe3IoZSl9KSk6cigpfSkpfX0se2tleToidXNfVXBncmFkZUFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ1cGdyYWRlLnVwZ3JhZGVBY3Rpb24iLHhtbDp0LHNjaGVkdWxlSWQ6ZX0pfX0se2tleToidXNfQ2hlY2tVcGdyYWRlYWJsZURldmljZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoidXBncmFkZS5jaGVja1VwZ3JhZGVhYmxlRGV2aWNlIixwYXJhbTplfSl9fSx7a2V5OiJ1c19DaGVja1VwZ3JhZGVhYmxlRGV2aWNlTGlzdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoidXBncmFkZS5jaGVja1VwZ3JhZGVhYmxlRGV2aWNlTGlzdCIscGFyYW06ZX0pfX0se2tleToidXNfSXNSdW5uaW5nQXN5Q2hlY2tVcGdyYWRlYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ1cGdyYWRlLmlzUnVubmluZ0FzeUNoZWNrVXBncmFkZWFibGUifSl9fSx7a2V5OiJ1c19TdG9wQXN5Q2hlY2tVcGdyYWRlYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ1cGdyYWRlLnN0b3BBc3lDaGVja1VwZ3JhZGVhYmxlIn0pfX0se2tleToiZ2V0RmlzaEV5ZVBUWlByZXNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoicGxheS5nZXRGaXNoRXllUFRaUHJlc2V0Iix3bmRJbmRleDplfSl9fSx7a2V5OiJzZXRGaXNoRXllUFRaUHJlc2V0Iix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VuZFJlcXVlc3Qoe2NtZDoicGxheS5zZXRGaXNoRXllUFRaUHJlc2V0Iix3bmRJbmRleDplLGNvbW1hbmQ6dCxwcmVzZXRJbmZvOm59KX19LHtrZXk6ImNvbnRyb2xGaXNoRXllUFRaIix2YWx1ZTpmdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJwbGF5LmNvbnRyb2xGaXNoRXllUFRaIix3bmRJbmRleDplLGNvbW1hbmQ6dCxzdG9wOm4sc3BlZWQ6b30pfX0se2tleToiY29udHJvbEZpc2hFeWVQYXJvbCIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InBsYXkuY29udHJvbEZpc2hFeWVQYXJvbCIsd25kSW5kZXg6ZSxjb21tYW5kOnQsY3J1aXNlUG9pbnRMaXN0Om59KX19LHtrZXk6InNldEZpcnN0RGF5T2ZXZWVrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJ3aW5kb3cuc2V0Rmlyc3REYXlPZldlZWsiLGZpcnN0RGF5OmV9KX19LHtrZXk6InNldEVob21lUGxheUluZm8iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLG8scixpKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJwbGF5LnNldEVob21lUGxheUluZm8iLGd1aWQ6ZSxwcm90b2NhbDp0LHNlc3Npb246bix0b2tlbjpvLGlwOnIscG9ydDppfSl9fSx7a2V5OiJzdGFydFBsYXlQYXRjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZS5sZW5ndGg+MClmb3IodmFyIHQ9MCxuPWUubGVuZ3RoO3Q8bjt0KyspZVt0XS5hcmVhTmFtZT1wZi5CYXNlNjQoKS5lbmNvZGUoZVt0XS5hcmVhTmFtZSksZVt0XS5jYW1lcmFOYW1lPXBmLkJhc2U2NCgpLmVuY29kZShlW3RdLmNhbWVyYU5hbWUpO3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InBsYXkuc3RhcnRQbGF5UGF0Y2giLHBhcmFtczplfSl9fSx7a2V5OiJncmFiT3BlbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxuKXtudWxsIT09ZS5vUmVxdWVzdD9lLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6IndpbmRvdy5ncmFiT3BlbiJ9KS50aGVuKChmdW5jdGlvbihlKXt0KGUpfSksKGZ1bmN0aW9uKGUpe24oZSl9KSk6bigpfSkpfX0se2tleToic2V0V25kQXV0b1BhblN0YXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNlbmRSZXF1ZXN0KHtjbWQ6InBsYXkuc2V0V25kQXV0b1BhblN0YXRlIix3bmRJbmRleDplLG9wZW46dH0pfX0se2tleToiZW5hYmxlUHJpdmlsZWdlcyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdCh7Y21kOiJzeXN0ZW0uZW5hYmxlUHJpdmlsZWdlcyJ9KX19XSksZX0oKSxScCksVHA9KHFwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXtuKHRoaXMsZSk7dmFyIG89dGhpczt0aGlzLm9PcHRpb25zPU9iamVjdC5hc3NpZ24oe3N6UGx1Z2luQ29udGFpbmVyOiIiLGNiQ29ubmVjdFN1Y2Nlc3M6bnVsbCxjYkNvbm5lY3RFcnJvcjpudWxsLGNiQ29ubmVjdENsb3NlOm51bGwsaVNlcnZpY2VQb3J0U3RhcnQ6MTY5NjAsaVNlcnZpY2VQb3J0RW5kOjE2OTY5LHN6Q2xhc3NJZDoiNTVBNzMyOUUtRkFBRC00MzlhLTg3QkMtNzVCQUIzMzMyRTdDIn0sdCksdGhpcy5iRnJlZXplPSExLHRoaXMuYkZvY3VzPSEwLHRoaXMuYkVtYmVkPXBmLmdldENyZWF0ZVduZE1vZGUoKSx0aGlzLnN6V25kSWQ9IiIsdGhpcy5pQ3JlYXRlV25kVGltZXI9LTEsdGhpcy5pVXBkYXRlUGFyZW50V25kVGltZXI9LTEsdGhpcy5iRGV2VG9vbD0hMSx0aGlzLmlWQ1RpbWVTdGFydD0tMSx0aGlzLmlWQ1RpbWVFbmQ9LTEsdGhpcy5vV25kQ292ZXI9e2xlZnQ6MCx0b3A6MCxyaWdodDowLGJvdHRvbTowfSx0aGlzLm9Eb2NPZmZzZXQ9e2xlZnQ6MCx0b3A6MH0sdGhpcy5zelRpdGxlPSIiLHRoaXMub1dpbmRvd0F0dHI9e291dGVyV2lkdGg6MCxpbm5lcldpZHRoOjAsb3V0ZXJIZWlnaHQ6MCxpbm5lckhlaWdodDowLHNjcmVlblRvcDowLHNjcmVlbkxlZnQ6MCxzY3JlZW5YOjAsc2NyZWVuWTowfSx0aGlzLmlGaXhlZFJlc2l6ZVRpbWVyPS0xLHRoaXMuZlZpc2liaWxpdHlDaGFuZ2U9ZnVuY3Rpb24oKXtpZihwZi5pc01hY09TKCkpZG9jdW1lbnQuaGlkZGVuP28uZkhpZGVXbmQoKTpvLmZTaG93V25kKCk7ZWxzZSBpZihkb2N1bWVudC5oaWRkZW4pby5pVkNUaW1lU3RhcnQ9KG5ldyBEYXRlKS5nZXRUaW1lKCksby5mSGlkZVduZCgpO2Vsc2V7by5pVkNUaW1lRW5kPShuZXcgRGF0ZSkuZ2V0VGltZSgpO3ZhciBlPXBmLmJyb3dzZXIoKTtpZihlLmNocm9tZXx8ZS5tb3ppbGxhKWlmKG8uaVVwZGF0ZVBhcmVudFduZFRpbWVyPjAmJihjbGVhclRpbWVvdXQoby5pVXBkYXRlUGFyZW50V25kVGltZXIpLG8uaVVwZGF0ZVBhcmVudFduZFRpbWVyPS0xKSxvLmlWQ1RpbWVFbmQtby5pVkNUaW1lU3RhcnQ8MTAwKXt2YXIgdD1vLm9SZXF1ZXN0LmdldFJlcXVlc3RVVUlEKCk7bWYodCxvLm9PcHRpb25zLmNiU2V0RG9jVGl0bGUpLG8uaVVwZGF0ZVBhcmVudFduZFRpbWVyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7by5vUmVxdWVzdC51cGRhdGVQYXJlbnRXbmQoKS50aGVuKChmdW5jdGlvbigpe3lmKHQsby5vT3B0aW9ucy5jYlVuc2V0RG9jVGl0bGUpLG8uYkZyZWV6ZXx8by5iRGV2VG9vbHx8by5mU2hvd1duZCgpfSksKGZ1bmN0aW9uKCl7eWYodCxvLm9PcHRpb25zLmNiVW5zZXREb2NUaXRsZSl9KSl9KSwxMDApfWVsc2Ugby5iRnJlZXplfHxvLmJEZXZUb29sfHxvLmZTaG93V25kKCk7ZWxzZSBvLmJGcmVlemV8fG8uYkRldlRvb2x8fG8uZlNob3dXbmQoKX19LHRoaXMuZkhpZGVXbmQ9ZnVuY3Rpb24oKXtvLm9SZXF1ZXN0LmhpZGVXbmQoKS50aGVuKChmdW5jdGlvbigpe30pLChmdW5jdGlvbigpe30pKX0sdGhpcy5mU2hvd1duZD1mdW5jdGlvbigpe28ub1JlcXVlc3Quc2hvd1duZCgpLnRoZW4oKGZ1bmN0aW9uKCl7fSksKGZ1bmN0aW9uKCl7fSkpfSx0aGlzLmZGb2N1cz1mdW5jdGlvbigpe28uYkZvY3VzPSEwLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7by5yZW1vdmVHcmFiSW1hZ2UoKSxkb2N1bWVudC5oaWRkZW58fG8uYkZyZWV6ZXx8by5iRGV2VG9vbHx8by5mU2hvd1duZCgpfSksMjAwKX0sdGhpcy5mQmx1cj1mdW5jdGlvbigpe28uYkZvY3VzPSExfSx0aGlzLnJlbW92ZUdyYWJJbWFnZT1mdW5jdGlvbigpe2lmKCFwZi5pc01hY09TKCkpe3ZhciBlPW51bGw7aWYoIiIhPT1vLnN6V25kSWQmJihlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8uc3pXbmRJZCkpKXt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLW5hbWU9IndjLWdyYWItb3Blbi1pbWFnZSJdJyk7QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGUpfSkpfX19LHRoaXMub1JlcXVlc3Q9bmV3IE9wKHtzelBsdWdpbkNvbnRhaW5lcjp0aGlzLm9PcHRpb25zLnN6UGx1Z2luQ29udGFpbmVyLGNiQ29ubmVjdFN1Y2Nlc3M6dGhpcy5vT3B0aW9ucy5jYkNvbm5lY3RTdWNjZXNzLGNiQ29ubmVjdEVycm9yOnRoaXMub09wdGlvbnMuY2JDb25uZWN0RXJyb3IsY2JDb25uZWN0Q2xvc2U6ZnVuY3Rpb24oZSl7by5pQ3JlYXRlV25kVGltZXI+MCYmKGNsZWFyVGltZW91dChvLmlDcmVhdGVXbmRUaW1lciksby5pQ3JlYXRlV25kVGltZXI9LTEpLG8ucmVtb3ZlR3JhYkltYWdlKCksby5vT3B0aW9ucy5jYkNvbm5lY3RDbG9zZSYmby5vT3B0aW9ucy5jYkNvbm5lY3RDbG9zZShlKX0saVNlcnZpY2VQb3J0U3RhcnQ6dGhpcy5vT3B0aW9ucy5pU2VydmljZVBvcnRTdGFydCxpU2VydmljZVBvcnRFbmQ6dGhpcy5vT3B0aW9ucy5pU2VydmljZVBvcnRFbmQsc3pDbGFzc0lkOnRoaXMub09wdGlvbnMuc3pDbGFzc0lkfSl9cmV0dXJuIHIoZSxbe2tleToiSlNfU2V0V2luZG93Q29udHJvbENhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLG49e2NiU2VsZWN0V25kOmZ1bmN0aW9uKHQpe2UuY2JTZWxlY3RXbmQmJmUuY2JTZWxlY3RXbmQocGFyc2VJbnQodC53bmRJbmRleCwxMCksdC5jYW1lcmFJRCx0LnNpdGVJRCx0Lm9wZW5kRmlzaGV5ZSl9LGNiVG9nZ2xlUFRaOmZ1bmN0aW9uKHQpe2UuY2JUb2dnbGVQVFomJmUuY2JUb2dnbGVQVFoodC5jYW1lcmFJRCx0LnNpdGVJRCl9LGNiVXBkYXRlQ2FtZXJhSWNvbjpmdW5jdGlvbih0KXtlLmNiVXBkYXRlQ2FtZXJhSWNvbiYmZS5jYlVwZGF0ZUNhbWVyYUljb24odC5jYW1lcmFJRCxwYXJzZUludCh0LnBsYXlpbmcsMTApLHQuc2l0ZUlEKX0sY2JHZXRMYXN0RXJyb3I6ZnVuY3Rpb24odCl7ZS5jYkdldExhc3RFcnJvciYmZS5jYkdldExhc3RFcnJvcih0LmVycm9yLHBhcnNlSW50KHQudHlwZSwxMCkpfSxjYlRhbGtVcmxFbXB0eTpmdW5jdGlvbih0KXtlLmNiVGFsa1VybEVtcHR5JiZlLmNiVGFsa1VybEVtcHR5KHQuY2FtZXJhSUQpfSxjYkdvdG9QbGF5YmFjazpmdW5jdGlvbih0KXtlLmNiR290b1BsYXliYWNrJiZlLmNiR290b1BsYXliYWNrKHQuY2FtZXJhSUQsdC5zaXRlSUQpfSxjYlNob3dEaXNwbGF5SW5mbzpmdW5jdGlvbih0KXtlLmNiU2hvd0Rpc3BsYXlJbmZvJiZlLmNiU2hvd0Rpc3BsYXlJbmZvKHBhcnNlSW50KHQudmlkZW9XaWR0aCwxMCkscGFyc2VJbnQodC52aWRlb0hlaWdodCwxMCkscGFyc2VJbnQodC5mcmFtZVJhdGUsMTApKX0sY2JQcmV2aWV3V25kM0RQb3N0aW9uOmZ1bmN0aW9uKHQpe2UuY2JQcmV2aWV3V25kM0RQb3N0aW9uJiZlLmNiUHJldmlld1duZDNEUG9zdGlvbihwYXJzZUludCh0LnN0YXJ0WCwxMCkscGFyc2VJbnQodC5zdGFydFksMTApLHBhcnNlSW50KHQuZW5kWCwxMCkscGFyc2VJbnQodC5lbmRZLDEwKSl9LGNiU3RvcFBsYXlBbGw6ZnVuY3Rpb24oKXtlLmNiU3RvcFBsYXlBbGwmJmUuY2JTdG9wUGxheUFsbCgpfSxjYldoZWVsRXZlbnQ6ZnVuY3Rpb24odCl7ZS5jYldoZWVsRXZlbnQmJmUuY2JXaGVlbEV2ZW50KHBhcnNlSW50KHQuZGVsdGEsMTApKX0sY2JBbGFybURldGFpbDpmdW5jdGlvbih0KXtlLmNiQWxhcm1EZXRhaWwmJmUuY2JBbGFybURldGFpbCh0LmFsYXJtSWQpfSxjYlF1aXRlZEZ1bGxTY3JlZW46ZnVuY3Rpb24oKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3QuZlNob3dXbmQoKX0pLDEwMCl9LGNiTWFudWFsbHlDbG9zZTpmdW5jdGlvbih0KXtlLmNiTWFudWFsbHlDbG9zZSYmZS5jYk1hbnVhbGx5Q2xvc2UodC5jYW1lcmFJRCx0LnNpdGVJRCxwYXJzZUludCh0LnduZEluZGV4LDEwKSl9LGNiSW50ZWdyYXRpb25DYWxsQmFjazpmdW5jdGlvbih0KXtlLmNiSW50ZWdyYXRpb25DYWxsQmFjayYmZS5jYkludGVncmF0aW9uQ2FsbEJhY2sodCl9LGNiQ2hhbmdlU3RvcmFnZTpmdW5jdGlvbih0KXtlLmNiQ2hhbmdlU3RvcmFnZSYmZS5jYkNoYW5nZVN0b3JhZ2UocGFyc2VJbnQodC5zdG9yYWdlVHlwZSwxMCksdC5jYW1lcmFJRCx0LnNpdGVJRCl9LGNiRmlzaGV5ZUV4cGFuZENoYW5nZWQ6ZnVuY3Rpb24odCl7ZS5jYkZpc2hleWVFeHBhbmRDaGFuZ2VkJiZlLmNiRmlzaGV5ZUV4cGFuZENoYW5nZWQodC5jYW1lcmFJRCx0LnNpdGVJRCxwYXJzZUludCh0LnduZEluZGV4LDEwKSx0Lm9wZW4pfSxjYkdldEVob21lUGxheUluZm86ZnVuY3Rpb24odCl7ZS5jYkdldEVob21lUGxheUluZm8mJmUuY2JHZXRFaG9tZVBsYXlJbmZvKHQuc2l0ZUlELHQuZ3VpZCl9LGNiV25kUHR6Q29udHJvbDpmdW5jdGlvbih0KXtlLmNiV25kUHR6Q29udHJvbCYmZS5jYlduZFB0ekNvbnRyb2wocGFyc2VJbnQodC53bmRJbmRleCwxMCksdC5jYW1lcmFJRCx0LmNvbW1hbmQsdC5zcGVlZCx0LnN0b3ApfSxjYk1lc3NhZ2VDYWxsQmFjazpmdW5jdGlvbihuKXtuPW4uZGF0YTt2YXIgbz10Lm9SZXF1ZXN0LmdldFJlcXVlc3RVVUlEKCk7Im1lbnVPcGVuIj09PW4udHlwZT8iIiE9PXQuc3pXbmRJZCYmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHQuc3pXbmRJZCkuaW5uZXJIVE1MPSI8aW1nIGRhdGEtbmFtZT0nd2MtZ3JhYi1vcGVuLWltYWdlJyBzcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiLmNvbmNhdChuLm1lc3NhZ2UuaW1hZ2UsIicgd2lkdGg9JzEwMCUnIGhlaWdodD0nMTAwJScgLz4iKSk6ImNoYW5nZVRpdGxlIj09PW4udHlwZT8tMT09PWRvY3VtZW50LnRpdGxlLmluZGV4T2YobykmJih0LnN6VGl0bGU9ZG9jdW1lbnQudGl0bGUsbWYobyx0Lm9PcHRpb25zLmNiU2V0RG9jVGl0bGUpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7InVwZGF0ZVBhcmVudFduZCI9PT1uLm1lc3NhZ2U/dC5vUmVxdWVzdC51cGRhdGVQYXJlbnRXbmQoKToicmVzdG9yZVduZCI9PT1uLm1lc3NhZ2UmJnQub1JlcXVlc3QucmVzdG9yZVduZCgpfSksMzAwKSk6ImNoYW5nZVRpdGxlRG9uZSI9PT1uLnR5cGU/IiIhPT10LnN6VGl0bGUmJnlmKG8sdC5vT3B0aW9ucy5jYlVuc2V0RG9jVGl0bGUpOiJzcGxpdENoYW5nZSI9PT1uLnR5cGU/ZS5jYlNwbGl0Q2hhbmdlJiZlLmNiU3BsaXRDaGFuZ2Uobi5tZXNzYWdlLnNwbGl0VHlwZSk6InNob3dNYXhpbWl6ZWQiPT09bi50eXBlJiZlLmNiU2hvd01heGltaXplZCYmZS5jYlNob3dNYXhpbWl6ZWQobi5tZXNzYWdlLnNob3dNYXgpfX07dGhpcy5vUmVxdWVzdC5zZXRXaW5kb3dDb250cm9sQ2FsbGJhY2sobil9fSx7a2V5OiJKU19TZXRTYWRwQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXtjYkRldmljZUZpbmQ6bnVsbH07T2JqZWN0LmFzc2lnbih0LGUpLHRoaXMub1JlcXVlc3Quc2V0U2FkcENhbGxiYWNrKHQpfX0se2tleToiSlNfU2V0U2xpY2VDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2NiSW1hZ2VTbGljZWQ6ZnVuY3Rpb24odCl7ZS5jYkltYWdlU2xpY2VkJiYoIiIhPT10LnBpY05hbWUmJih0LnBpY05hbWU9cGYuQmFzZTY0KCkuZGVjb2RlKHQucGljTmFtZSkpLGUuY2JJbWFnZVNsaWNlZCh0KSl9fTt0aGlzLm9SZXF1ZXN0LnNldFNsaWNlQ2FsbGJhY2sodCl9fSx7a2V5OiJKU19TZXRTZXJpYWxDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2NiQ2FyZEZpbmQ6ZnVuY3Rpb24odCl7ZS5jYkNhcmRGaW5kJiZlLmNiQ2FyZEZpbmQodCl9LGNiRmluZ2VyRmluZDpmdW5jdGlvbih0KXtlLmNiRmluZ2VyRmluZCYmZS5jYkZpbmdlckZpbmQodC5maW5nZXJQcmludCx0LmZpbmdlclF1YWxpdHkpfSxjYkltYWdlRmluZDpmdW5jdGlvbih0KXtlLmNiSW1hZ2VGaW5kJiZlLmNiSW1hZ2VGaW5kKHQuaW1hZ2UpfSxjYkltYWdlRXJyb3JGaW5kOmZ1bmN0aW9uKHQpe2UuY2JJbWFnZUVycm9yRmluZCYmZS5jYkltYWdlRXJyb3JGaW5kKHQuZXJyb3JNb2R1bGUsdC5lcnJvckNvZGUpfSxjYkltYWdlV25kVmlzaWJsZUZpbmQ6ZnVuY3Rpb24odCl7ZS5jYkltYWdlV25kVmlzaWJsZUZpbmQmJmUuY2JJbWFnZVduZFZpc2libGVGaW5kKHQudmlzaWJsZSl9fTt0aGlzLm9SZXF1ZXN0LnNldFNlcmlhbENhbGxiYWNrKHQpfX0se2tleToiSlNfU2V0VUlDb250cm9sQ2FsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXtjYkNsaWNrTWVudUl0ZW06ZnVuY3Rpb24odCl7ZS5jYkNsaWNrTWVudUl0ZW0mJmUuY2JDbGlja01lbnVJdGVtKHQuaXRlbUluZGV4KX0sY2JNZW51TW91c2VJbjpmdW5jdGlvbigpe2UuY2JNZW51TW91c2VJbiYmZS5jYk1lbnVNb3VzZUluKCl9LGNiTWVudU1vdXNlT3V0OmZ1bmN0aW9uKCl7ZS5jYk1lbnVNb3VzZU91dCYmZS5jYk1lbnVNb3VzZU91dCgpfX07dGhpcy5vUmVxdWVzdC5zZXRVSUNvbnRyb2xDYWxsYmFjayh0KX19LHtrZXk6IkpTX1NldFVwZ3JhZGVDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9e2NiQ2hlY2tVcGdyYWRlOmZ1bmN0aW9uKHQpe2UuY2JDaGVja1VwZ3JhZGUmJmUuY2JDaGVja1VwZ3JhZGUodCl9fTt0aGlzLm9SZXF1ZXN0LnNldFVwZ3JhZGVDYWxsYmFjayh0KX19LHtrZXk6IkpTX0NoZWNrVmVyc2lvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5vUmVxdWVzdC5nZXRTZXJ2aWNlVmVyc2lvbigpLG49W10sbz1bXTsiIiE9PXQmJihuPSh0PXQucmVwbGFjZSgvLFtcc10qL2csIi4iKSkuc3BsaXQoIi4iKSksIiIhPT1lJiYobz0oZT1lLnJlcGxhY2UoLyxbXHNdKi9nLCIuIikpLnNwbGl0KCIuIikpO3ZhciByPSExO2lmKG8ubGVuZ3RoPT09bi5sZW5ndGgpZm9yKHZhciBpPTAscz1uLmxlbmd0aDtpPHM7aSsrKWlmKHBhcnNlSW50KG9baV0sMTApIT09cGFyc2VJbnQobltpXSwxMCkpe2lmKHBhcnNlSW50KG9baV0sMTApPnBhcnNlSW50KG5baV0sMTApKXtyPSEwO2JyZWFrfWJyZWFrfXJldHVybiByfX0se2tleToiSlNfU3RhcnRTZXJ2aWNlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnN0YXJ0U2VydmljZShlLHQpfX0se2tleToiSlNfU3RvcFNlcnZpY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnN0b3BTZXJ2aWNlKGUpfX0se2tleToiSlNfRGlzY29ubmVjdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5kaXNjb25uZWN0KCl9fSx7a2V5OiJKU19PcGVuRGlyZWN0b3J5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5vcGVuRGlyZWN0b3J5KGUpfX0se2tleToiSlNfT3BlbkZpbGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5vcGVuRmlsZShlLHQsbil9fSx7a2V5OiJKU19TZWxlY3REaXJlY3RvcnkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VsZWN0RGlyZWN0b3J5KGUsdCl9fSx7a2V5OiJKU19TZWxlY3RGaWxlIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2VsZWN0RmlsZShlLHQsbil9fSx7a2V5OiJKU19HZXRMb2NhbENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QuZ2V0TG9jYWxDb25maWcoZSl9fSx7a2V5OiJKU19TZXRMb2NhbENvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2V0TG9jYWxDb25maWcoZSl9fSx7a2V5OiJKU19TZXREb2NPZmZzZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlJiYodGhpcy5vRG9jT2Zmc2V0PWUpLCEwfX0se2tleToiSlNfU2V0V2luZG93QXR0ciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJih0aGlzLm9XaW5kb3dBdHRyPWUpLCEwfX0se2tleToiSlNfQ3JlYXRlV25kIix2YWx1ZTpmdW5jdGlvbihlLHQsbixvKXt2YXIgcj10aGlzO3RoaXMuc3pXbmRJZD1lLHZvaWQgMCE9PShvPW98fHt9KS5iRW1iZWQmJih0aGlzLmJFbWJlZD1vLmJFbWJlZCk7dmFyIGk9ITA7cmV0dXJuIHZvaWQgMCE9PW8uYkFjdGl2ZVhQYXJlbnRXbmQmJihpPW8uYkFjdGl2ZVhQYXJlbnRXbmQpLG5ldyBQcm9taXNlKChmdW5jdGlvbihzLGEpe3ZhciB1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO2lmKHUpe3ZhciBjPSIiO3BmLmJyb3dzZXIoKS5tc2llP2M9IklFRnJhbWUiOnBmLmJyb3dzZXIoKS5jaHJvbWU/Yz0iQ2hyb21lIjpwZi5icm93c2VyKCkuc2FmYXJpJiYoYz13aW5kb3cudG9wLmRvY3VtZW50LnRpdGxlKSxvLmNiU2V0RG9jVGl0bGUmJihyLm9PcHRpb25zLmNiU2V0RG9jVGl0bGU9by5jYlNldERvY1RpdGxlKSxvLmNiVW5zZXREb2NUaXRsZSYmKHIub09wdGlvbnMuY2JVbnNldERvY1RpdGxlPW8uY2JVbnNldERvY1RpdGxlKTt2YXIgbD1yLm9SZXF1ZXN0LmdldFJlcXVlc3RVVUlEKCk7bWYobCxvLmNiU2V0RG9jVGl0bGUpLHIuaUNyZWF0ZVduZFRpbWVyPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aWYoIXIuYkRldlRvb2wpe3ZhciBlPXBmLmdldERldmljZVBpeGVsUmF0aW8oKSxkPXBmLmdldFduZFBvc3Rpb24odSxyLmJFbWJlZCxyLm9XaW5kb3dBdHRyLHIub0RvY09mZnNldCk7dD1NYXRoLnJvdW5kKHQqZSksbj1NYXRoLnJvdW5kKG4qZSksci5vUmVxdWVzdC5jcmVhdGVXbmQoZC5sZWZ0LGQudG9wLHQsbixjLHIuYkVtYmVkLGksby5IV05EfHwiIikudGhlbigoZnVuY3Rpb24oKXt5ZihsLG8uY2JVbnNldERvY1RpdGxlKSxzKCl9KSwoZnVuY3Rpb24oZSl7eWYobCxvLmNiVW5zZXREb2NUaXRsZSksNTAwMT09PWUuZXJyb3JDb2RlPyhkb2N1bWVudC5oaWRkZW58fHIuYkZyZWV6ZXx8IXIuYkZvY3VzfHxyLmZTaG93V25kKCkscygpKTphKGUpfSkpfX0pLDMwMCksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidmlzaWJpbGl0eWNoYW5nZSIsci5mVmlzaWJpbGl0eUNoYW5nZSwhMSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIixyLmZGb2N1cyksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLHIuZkJsdXIpfWVsc2UgYSgpfSkpfX0se2tleToiSlNfU2hvd1duZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJGcmVlemU9ITEsZG9jdW1lbnQuaGlkZGVufHx0aGlzLmJEZXZUb29sfHx0aGlzLmZTaG93V25kKCl9fSx7a2V5OiJKU19IaWRlV25kIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYkZyZWV6ZT0hMCx0aGlzLmZIaWRlV25kKCl9fSx7a2V5OiJKU19EZXN0cm95V25kIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ2aXNpYmlsaXR5Y2hhbmdlIix0aGlzLmZWaXNpYmlsaXR5Q2hhbmdlLCExKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZm9jdXMiLHRoaXMuZkZvY3VzKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYmx1ciIsdGhpcy5mQmx1ciksdGhpcy5vUmVxdWVzdC5kZXN0cm95V25kKCl9fSx7a2V5OiJKU19SZXNpemUiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXt2YXIgbz10aGlzLHI9bnVsbCxpPWUscz10O2lmKCIiIT09dGhpcy5zelduZElkJiYocj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLnN6V25kSWQpKSxyKXt2YXIgYT1wZi5nZXRXbmRQb3N0aW9uKHIsdGhpcy5iRW1iZWQsdGhpcy5vV2luZG93QXR0cix0aGlzLm9Eb2NPZmZzZXQpLHU9cGYuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpOyghcGYuYnJvd3NlcigpLm1zaWV8fHBmLmJyb3dzZXIoKS5tc2llJiYiMTEuMCI9PT1wZi5icm93c2VyKCkudmVyc2lvbikmJih0aGlzLm9XbmRDb3Zlci5sZWZ0PjAmJihhLmxlZnQrPU1hdGgucm91bmQodGhpcy5vV25kQ292ZXIubGVmdCp1KSxlLT10aGlzLm9XbmRDb3Zlci5sZWZ0KSx0aGlzLm9XbmRDb3Zlci50b3A+MCYmKGEudG9wKz1NYXRoLnJvdW5kKHRoaXMub1duZENvdmVyLnRvcCp1KSx0LT10aGlzLm9XbmRDb3Zlci50b3ApLHRoaXMub1duZENvdmVyLnJpZ2h0PjAmJihlLT10aGlzLm9XbmRDb3Zlci5yaWdodCksdGhpcy5vV25kQ292ZXIuYm90dG9tPjAmJih0LT10aGlzLm9XbmRDb3Zlci5ib3R0b20pKSxlPU1hdGgucm91bmQoZSp1KSx0PU1hdGgucm91bmQodCp1KSx0aGlzLm9SZXF1ZXN0LnNldFduZEdlb21ldHJ5KGEubGVmdCxhLnRvcCxlLHQpLChwZi5icm93c2VyKCkubXNpZSYmIjExLjAiPT09cGYuYnJvd3NlcigpLnZlcnNpb258fCFwZi5pc1dpbmRvd3MoKSkmJihuJiZuLmJGaXhlZD90aGlzLmlGaXhlZFJlc2l6ZVRpbWVyPS0xOih0aGlzLmlGaXhlZFJlc2l6ZVRpbWVyPi0xJiYoY2xlYXJUaW1lb3V0KHRoaXMuaUZpeGVkUmVzaXplVGltZXIpLHRoaXMuaUZpeGVkUmVzaXplVGltZXI9LTEpLHRoaXMuaUZpeGVkUmVzaXplVGltZXI9c2V0VGltZW91dCgoZnVuY3Rpb24oKXtvLkpTX1Jlc2l6ZShpLHMse2JGaXhlZDohMH0pfSksMzAwKSkpfX19LHtrZXk6IkpTX1NldFduZENvdmVyIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciBuPXBmLmdldERldmljZVBpeGVsUmF0aW8oKTtyZXR1cm4oIXBmLmJyb3dzZXIoKS5tc2llfHxwZi5icm93c2VyKCkubXNpZSYmIjExLjAiPT09cGYuYnJvd3NlcigpLnZlcnNpb24pJiYoImxlZnQiPT09ZT90aGlzLm9XbmRDb3Zlci5sZWZ0PXQ6InRvcCI9PT1lP3RoaXMub1duZENvdmVyLnRvcD10OiJyaWdodCI9PT1lP3RoaXMub1duZENvdmVyLnJpZ2h0PXQ6ImJvdHRvbSI9PT1lJiYodGhpcy5vV25kQ292ZXIuYm90dG9tPXQpKSx0PU1hdGgucm91bmQodCpuKSx0aGlzLm9SZXF1ZXN0LnNldFduZENvdmVyKGUsdCl9fSx7a2V5OiJKU19DdXR0aW5nUGFydFdpbmRvdyIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sbyxyKXt2YXIgaT1wZi5nZXREZXZpY2VQaXhlbFJhdGlvKCk7cmV0dXJuIGU9TWF0aC5yb3VuZChlKmkpLHQ9TWF0aC5yb3VuZCh0KmkpLG49TWF0aC5yb3VuZChuKmkpLG89TWF0aC5yb3VuZChvKmkpLHI9TWF0aC5yb3VuZChyKmkpLHRoaXMub1JlcXVlc3QuY3V0dGluZ1BhcnRXaW5kb3coZSx0LG4sbyxyKX19LHtrZXk6IkpTX1JlcGFpclBhcnRXaW5kb3ciLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLG8scil7dmFyIGk9cGYuZ2V0RGV2aWNlUGl4ZWxSYXRpbygpO3JldHVybiBlPU1hdGgucm91bmQoZSppKSx0PU1hdGgucm91bmQodCppKSxuPU1hdGgucm91bmQobippKSxvPU1hdGgucm91bmQobyppKSxyPU1hdGgucm91bmQocippKSx0aGlzLm9SZXF1ZXN0LnJlcGFpclBhcnRXaW5kb3coZSx0LG4sbyxyKX19LHtrZXk6IkpTX0NoYW5nZVBsYXlNb2RlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5jaGFuZ2VQbGF5TW9kZShlKX19LHtrZXk6IkpTX1NldExhbmd1YWdlVHlwZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2V0TGFuZ3VhZ2VUeXBlKGUpfX0se2tleToiSlNfSW5pdExvZ2luSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QuaW5pdExvZ2luSW5mbyhlKX19LHtrZXk6IkpTX1NldFRyYW5zbGF0ZUZpbGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNldFRyYW5zbGF0ZUZpbGUoZSl9fSx7a2V5OiJKU19Td2l0Y2hUb1NpbXBsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc3dpdGNoVG9TaW1wbGUoZSl9fSx7a2V5OiJKU19TZXRWc21Ub2tlbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2V0VnNtVG9rZW4oZSl9fSx7a2V5OiJKU19QbGF5Iix2YWx1ZTpmdW5jdGlvbihlLHQsbixvLHIsaSxzLGEsdSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc3RhcnRQbGF5KGUsdCxuLG8scixpLHMsYSx1KX19LHtrZXk6IkpTX0VuYWJsZTNEWm9vbSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2V0UHJldmlldzNEUG9zaXRpb24oZSl9fSx7a2V5OiJKU19TdG9wVG90YWwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc3RvcFRvdGFsKCl9fSx7a2V5OiJKU19TZXREcmFnTW9kZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2V0RHJhZ01vZGUoZSl9fSx7a2V5OiJKU19TaG93RXJyb3JJbmZvSW5GdWxsU2NyZWVuIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zaG93RXJyb3JJbmZvSW5GdWxsU2NyZWVuKGUpfX0se2tleToiSlNfU2V0TnVtYmVyT2ZXaW5kb3dzIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZXROdW1iZXJPZldpbmRvd3MoZSl9fSx7a2V5OiJKU19Jbml0Q2FyZFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QuaW5pdENhcmRSZWFkZXIoZSl9fSx7a2V5OiJKU19VbkluaXRDYXJkUmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnVuSW5pdENhcmRSZWFkZXIoKX19LHtrZXk6IkpTX1N0YXJ0QXV0b01vZGUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc3RhcnRBdXRvTW9kZSgpfX0se2tleToiSlNfU3RvcEF1dG9Nb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnN0b3BBdXRvTW9kZSgpfX0se2tleToiSlNfSW5pdEZpbmdlcnByaW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5pbml0RmluZ2VycHJpbnQoZSl9fSx7a2V5OiJKU19VbkluaXRGaW5nZXJwcmludCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC51bkluaXRGaW5nZXJwcmludCgpfX0se2tleToiSlNfU3RhcnRDb2xsZWN0RmluZ2VycHJpbnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc3RhcnRDb2xsZWN0RmluZ2VycHJpbnQoKX19LHtrZXk6IkpTX1N0b3BDb2xsZWN0RmluZ2VycHJpbnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc3RvcENvbGxlY3RGaW5nZXJwcmludCgpfX0se2tleToiSlNfSXNDb2xsZWN0aW5nRmluZ2VycHJpbnQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3QuaXNDb2xsZWN0aW5nRmluZ2VycHJpbnQoKX19LHtrZXk6IkpTX0luaXRWaWRlb2NhcHR1cmUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LmluaXRWaWRlb2NhcHR1cmUoZSl9fSx7a2V5OiJKU19VbkluaXRWaWRlb2NhcHR1cmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3QudW5Jbml0VmlkZW9jYXB0dXJlKCl9fSx7a2V5OiJKU19SZWdpc3RlckRldmljZVR5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnJlZ2lzdGVyRGV2aWNlVHlwZShlKX19LHtrZXk6IkpTX0FjdGl2ZU9ubGluZURldmljZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5hY3RpdmVPbmxpbmVEZXZpY2UoZSx0KX19LHtrZXk6IkpTX1JlZnJlc2hEZXZpY2VMaXN0Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnJlZnJlc2hEZXZpY2VMaXN0KCl9fSx7a2V5OiJKU19Nb2RpZnlEZXZpY2VOZXRQYXJhbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sbyxyLGkscyl7cmV0dXJuIHRoaXMub1JlcXVlc3QubW9kaWZ5RGV2aWNlTmV0UGFyYW0oZSx0LG4sbyxyLGkscyl9fSx7a2V5OiJKU19FeHBvcnRLZXlGaWxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5leHBvcnRLZXlGaWxlKGUpfX0se2tleToiSlNfSW1wb3J0S2V5RmlsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5pbXBvcnRLZXlGaWxlKCl9fSx7a2V5OiJKU19SZXNldFBhc3N3b3JkIix2YWx1ZTpmdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5yZXNldFBhc3N3b3JkKGUsdCxuLG8pfX0se2tleToiSlNfVXBsb2FkUGljdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QudXBsb2FkUGljdHVyZShlKX19LHtrZXk6IkpTX1Nob3dTZWxlY3RNZW51Iix2YWx1ZTpmdW5jdGlvbihlLHQsbixvLHIpe3ZhciBpPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGUpO2lmKGkpe3ZhciBzPXBmLmdldFduZFBvc3Rpb24oaSwhMSx0aGlzLm9XaW5kb3dBdHRyLHRoaXMub0RvY09mZnNldCk7ImNlbnRlciI9PT1yP3MubGVmdC09TWF0aC5yb3VuZCgodC1pLm9mZnNldFdpZHRoKS8yKToicmlnaHQiPT09ciYmKHMubGVmdC09TWF0aC5yb3VuZCh0LWkub2Zmc2V0V2lkdGgpKTt2YXIgYT1wZi5nZXREZXZpY2VQaXhlbFJhdGlvKCk7dD1NYXRoLnJvdW5kKHQqYSksbj1NYXRoLnJvdW5kKG4qYSk7dmFyIHU9MSp3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpKS5oZWlnaHQuc2xpY2UoMCwtMiksYz1NYXRoLnJvdW5kKHUqYSk7dGhpcy5vUmVxdWVzdC5zaG93U2VsZWN0TWVudShzLmxlZnQscy50b3ArYyx0LG4sbyl9fX0se2tleToiSlNfSGlkZVNlbGVjdE1lbnUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5vUmVxdWVzdC5oaWRlU2VsZWN0TWVudSgpfX0se2tleToiSlNfRGVzdHJveVNlbGVjdE1lbnUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3QuZGVzdHJveVNlbGVjdE1lbnUoKX19LHtrZXk6IkpTX0RldmljZUNvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QuZGV2aWNlQ29uZmlnKGUpfX0se2tleToiSlNfQ2xvdWRTdG9yYWdlQ29uZmlnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5jbG91ZFN0b3JhZ2VDb25maWcoZSl9fSx7a2V5OiJKU19FenZpelJlbW90ZUNvbmZpZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QuZXp2aXpSZW1vdGVDb25maWcoZSl9fSx7a2V5OiJKU19TaG93QWxhcm1JbmZvSW5GdWxsU2NyZWVuIix2YWx1ZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2hvd0FsYXJtSW5mb0luRnVsbFNjcmVlbihlLHQsbil9fSx7a2V5OiJKU19TZXRJbW1lZGlhdGVQbGF5YmFja1RpbWUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNldEltbWVkaWF0ZVBsYXliYWNrVGltZShlKX19LHtrZXk6IkpTX1NldERyYXdTdGF0dXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNldERyYXdTdGF0dXMoZSl9fSx7a2V5OiJKU19DbGVhclJlZ2lvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5jbGVhclJlZ2lvbigpfX0se2tleToiSlNfU2V0RHJhd1NoYXBlSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZXREcmF3U2hhcGVJbmZvKGUsdCl9fSx7a2V5OiJKU19TZXRHcmlkSW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2V0R3JpZEluZm8oZSl9fSx7a2V5OiJKU19HZXRHcmlkSW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5nZXRHcmlkSW5mbygpfX0se2tleToiSlNfU2V0UG9seWdvbkluZm8iLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnNldFBvbHlnb25JbmZvKGUpfX0se2tleToiSlNfR2V0UG9seWdvbkluZm8iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub1JlcXVlc3QuZ2V0UG9seWdvbkluZm8oKX19LHtrZXk6IkpTX1NldExpbmVJbmZvIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZXRMaW5lSW5mbyhlKX19LHtrZXk6IkpTX0dldExpbmVJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LmdldExpbmVJbmZvKCl9fSx7a2V5OiJKU19TZXRSZWN0SW5mbyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2V0UmVjdEluZm8oZSl9fSx7a2V5OiJKU19HZXRSZWN0SW5mbyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5nZXRSZWN0SW5mbygpfX0se2tleToiSlNfQ2xlYXJTaGFwZUJ5VHlwZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QuY2xlYXJTaGFwZUJ5VHlwZShlKX19LHtrZXk6IkpTX1NlbnNpdGl2ZUVuY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5zaXRpdmVFbmNyeXB0KGUsdCxuKX19LHtrZXk6IkpTX1NlbmRSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZW5kUmVxdWVzdChlKX19LHtrZXk6IkpTX1JlcXVlc3RJbnRlcmZhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnJlcXVlc3RJbnRlcmZhY2UoZSl9fSx7a2V5OiJKU19TdG9wUGxheSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc3RvcFBsYXkoZSl9fSx7a2V5OiJKU19TaG93UmVtb3RlQ29uZmlnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zaG93UmVtb3RlQ29uZmlnKGUpfX0se2tleToiSlNfVmlkZW8yUGljdHVyZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC52aWRlbzJQaWN0dXJlKCl9fSx7a2V5OiJKU19QaWN0dXJlMlZpZGVvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnBpY3R1cmUyVmlkZW8oKX19LHtrZXk6IkpTX1B0ekNvbnRyb2wiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnB0ekNvbnRyb2woZSl9fSx7a2V5OiJKU19TaW1Nb3VzZUNsaWNrRXZlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2ltTW91c2VDbGlja0V2ZW50KGUsdCl9fSx7a2V5OiJKU19VU19TZXRNYXhKb2JDb3VudCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QudXNfU2V0TWF4Sm9iQ291bnQoZSl9fSx7a2V5OiJKU19VU19HZXRNYXhKb2JDb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC51c19HZXRNYXhKb2JDb3VudCgpfX0se2tleToiSlNfVVNfQWRkU2NoZWR1bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnVzX0FkZFNjaGVkdWxlKGUpfX0se2tleToiSlNfVVNfRGVsU2NoZWR1bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnVzX0RlbFNjaGVkdWxlKGUpfX0se2tleToiSlNfVVNfR2V0U2NoZWR1bGVMaXN0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC51c19HZXRTY2hlZHVsZUxpc3QoZSl9fSx7a2V5OiJKU19VU19HZXRTY2hlZHVsZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vUmVxdWVzdC51c19HZXRTY2hlZHVsZShlLHQpfX0se2tleToiSlNfVVNfVXBncmFkZUFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5vUmVxdWVzdC51c19VcGdyYWRlQWN0aW9uKGUsdCl9fSx7a2V5OiJKU19VU19DaGVja1VwZ3JhZGVhYmxlRGV2aWNlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC51c19DaGVja1VwZ3JhZGVhYmxlRGV2aWNlKGUpfX0se2tleToiSlNfVVNfQ2hlY2tVcGdyYWRlYWJsZURldmljZUxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm9SZXF1ZXN0LnVzX0NoZWNrVXBncmFkZWFibGVEZXZpY2VMaXN0KGUpfX0se2tleToiSlNfVVNfSXNSdW5uaW5nQXN5Q2hlY2tVcGdyYWRlYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC51c19Jc1J1bm5pbmdBc3lDaGVja1VwZ3JhZGVhYmxlKCl9fSx7a2V5OiJKU19VU19TdG9wQXN5Q2hlY2tVcGdyYWRlYWJsZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC51c19TdG9wQXN5Q2hlY2tVcGdyYWRlYWJsZSgpfX0se2tleToiSlNfR2V0RmlzaEV5ZVBUWlByZXNldCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3QuZ2V0RmlzaEV5ZVBUWlByZXNldChlKX19LHtrZXk6IkpTX1NldEZpc2hFeWVQVFpQcmVzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZXRGaXNoRXllUFRaUHJlc2V0KGUsdCxuKX19LHtrZXk6IkpTX0NvbnRyb2xGaXNoRXllUFRaIix2YWx1ZTpmdW5jdGlvbihlLHQsbixvKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5jb250cm9sRmlzaEV5ZVBUWihlLHQsbixvKX19LHtrZXk6IkpTX0NvbnRyb2xGaXNoRXllUGFyb2wiLHZhbHVlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5jb250cm9sRmlzaEV5ZVBhcm9sKGUsdCxuKX19LHtrZXk6IkpTX1NldEZpcnN0RGF5T2ZXZWVrIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZXRGaXJzdERheU9mV2VlayhlKX19LHtrZXk6IkpTX1NldEVob21lUGxheUluZm8iLHZhbHVlOmZ1bmN0aW9uKGUsdCxuLG8scixpKXtyZXR1cm4gdGhpcy5vUmVxdWVzdC5zZXRFaG9tZVBsYXlJbmZvKGUsdCxuLG8scixpKX19LHtrZXk6IkpTX1BsYXlQYXRjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc3RhcnRQbGF5UGF0Y2goZSl9fSx7a2V5OiJKU19TZXRXbmRBdXRvUGFuU3RhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMub1JlcXVlc3Quc2V0V25kQXV0b1BhblN0YXRlKGUsdCl9fSx7a2V5OiJKU19FbmFibGVQcml2aWxlZ2VzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm9SZXF1ZXN0LmVuYWJsZVByaXZpbGVnZXMoKX19XSxbe2tleToiSlNfV2FrZVVwIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTt0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHQuc3JjPWUsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0KSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2RvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQodCl9KSwzZTMpfX1dKSxlfSgpLHFwKTtyZXR1cm4gVHAudmVyc2lvbj0iMS4yLjUiLFRwfSgpOwo=",typeof document>"u"?require("url").pathToFileURL(__filename).href:sl&&sl.tagName.toUpperCase()==="SCRIPT"&&sl.src||new URL("GPluginVideo/index.js",document.baseURI).href).href}catch{Z="./web-control_1.2.5.min.js"}i.src=Z,i.async=!0,i.onload=()=>{console.log("web-control_1.2.5.min.js加载成功"),t()},i.onerror=()=>{console.error("web-control_1.2.5.min加载失败"),l(new Error("加载hweb-control_1.2.5.min.js失败"))},document.head.appendChild(i)})},getPreviousMinute(t){const l=new Date(Number(t));return l.setMinutes(l.getMinutes()-1),l.getTime()},getNextMinute(t){const l=new Date(Number(t));return l.setMinutes(l.getMinutes()+1),l.getTime()},chunkArray(t,l){let i=[];for(let Z=0;Z<t.length;Z+=l){let d=t.slice(Z,Z+l);i.push(d)}return i},closeVideo(){this.$emit("closeVideoEmit"),this.oWebControl!==null&&(this.oWebControl.JS_RequestInterface({funcName:"stopAllPreview"}),this.oWebControl.JS_HideWnd(),this.oWebControl.JS_Disconnect().then(()=>{},()=>{}))},startMultiPreview(){const t={argument:{list:[]}};for(let l=0;l<this.currentArr.length;l++){let Z={cameraIndexCode:this.currentArr[l].indexCode.replace(/(^\s*)/g,""),gpuMode:0,streamMode:0,transMode:1,wndId:l+1};t.argument.list.unshift(Z)}this.oWebControl.JS_RequestInterface({funcName:"startMultiPreviewByCameraIndexCode",argument:JSON.stringify(t.argument)})},startMultiPlayback(){let t="",l="";this.happenedTime?(console.log(this.getPreviousMinute(this.happenedTime),this.getNextMinute(this.happenedTime)),t=this.getPreviousMinute(this.happenedTime),l=this.getNextMinute(this.happenedTime)):(t=new Date().getTime()-1440*60*1e3,l=new Date().getTime());const i={argument:{list:[]}};for(let Z=0;Z<this.currentArr.length;Z++){let d=this.currentArr[Z],b={startTimeStamp:Math.floor(t/1e3).toString(),endTimeStamp:Math.floor(l/1e3).toString(),cameraIndexCode:d.indexCode.replace(/(^\s*)/g,""),gpuMode:0,streamMode:0,transMode:1,wndId:Z+1};i.argument.list.unshift(b)}this.oWebControl.JS_RequestInterface({funcName:"startMultiPlaybackByCameraIndexCode",argument:JSON.stringify(i.argument)})},startPlayback(){console.log(this.getPreviousMinute(this.happenedTime));let t="",l="",i="";this.happenedTime?(console.log(this.getPreviousMinute(this.happenedTime),this.getNextMinute(this.happenedTime)),t=this.cameraIndexCode,l=this.getPreviousMinute(this.happenedTime),i=this.getNextMinute(this.happenedTime)):(t=this.cameraIndexCode,l=new Date().getTime()-1440*60*1e3,i=new Date().getTime()),this.oWebControl.JS_RequestInterface({funcName:"startPlayback",argument:JSON.stringify({cameraIndexCode:t,startTimeStamp:Math.floor(l/1e3).toString(),endTimeStamp:Math.floor(i/1e3).toString(),recordLocation:1,transMode:1,gpuMode:0,wndId:-1})})},startPlay(){let t=this.cameraIndexCode;const l=0,i=1,Z=0,d=-1;t=t.replace(/(^\s*)/g,""),t=t.replace(/(\s*$)/g,""),this.oWebControl.JS_RequestInterface({funcName:"startPreview",argument:JSON.stringify({cameraIndexCode:t,streamMode:l,transMode:i,gpuMode:Z,wndId:d})})},initPlugin(){this.oWebControl=new window.WebControl({szPluginContainer:"playWnd",iServicePortStart:15900,iServicePortEnd:15900,szClassId:"23BF3B0A-2C56-4D97-9C03-0CB103AA8F11",cbConnectSuccess:()=>{this.oWebControl.JS_StartService("window",{dllPath:"./VideoPluginConnect.dll"}).then(()=>{this.oWebControl.JS_SetWindowControlCallback({cbIntegrationCallBack:this.cbIntegrationCallBack}),this.oWebControl.JS_CreateWnd("playWnd",this.size.windowWidth,this.size.windowHeight).then(()=>{this.init()})},function(){})},cbConnectError:()=>{this.oWebControl=null,this.$message.error("插件未启动,正在尝试启动,请稍候..."),this.playText="插件未启动,正在尝试启动,请稍候...",window.WebControl.JS_WakeUp("VideoWebPlugin://"),this.initCount++,this.initCount<3?setTimeout(()=>{this.initPlugin()},3e3):(this.$message.error("插件启动失败,请检查插件是否安装!"),this.playText="插件启动失败,请检查插件是否安装!")},cbConnectClose:t=>{t||(this.oWebControl=null,this.playText="插件未启动,正在尝试启动,请稍候...",this.initCount++,this.initCount<3?setTimeout(()=>{this.initPlugin()},3e3):(this.$message.error("插件启动失败,请检查插件是否安装!"),this.playText="插件启动失败,请检查插件是否安装!"))}})},init(){this.getPubKey(()=>{this.oWebControl.JS_RequestInterface({funcName:"init",argument:JSON.stringify({appkey:this.usefullData.appkey,secret:this.setEncrypt(this.usefullData.secret),ip:this.usefullData.ip,playMode:this.currentPlayType,port:this.usefullData.port,snapDir:"D:\\SnapDir",videoDir:"D:\\VideoDir",layout:this.layoutMode,enableHTTPS:1,encryptedFields:"secret",showToolbar:1,showSmart:0,buttonIDs:"0,256,257,258,259,260,512,513,514,515,516,517,768,769"})}).then(()=>{this.oWebControl.JS_Resize(this.size.windowWidth,this.size.windowHeight),this.isMulTip?this.currentPlayType===1?this.startMultiPlayback():this.startMultiPreview():this.currentPlayType===1?this.startPlayback():this.startPlay()}),this.isFullScreen&&this.oWebControl.JS_RequestInterface({funcName:"setFullScreen"})})},getPubKey(t){this.oWebControl.JS_RequestInterface({funcName:"getRSAPubKey",argument:JSON.stringify({keyLength:1024})}).then(l=>{l.responseMsg.data&&(this.pubKey=l.responseMsg.data,t())})},setEncrypt(t){let l=new Wi;return l.setPublicKey(this.pubKey),l.encrypt(t)},dateFormat(t,l){let i={"M+":t.getMonth()+1,"d+":t.getDate(),"h+":t.getHours(),"m+":t.getMinutes(),"s+":t.getSeconds(),"q+":Math.floor((t.getMonth()+3)/3),S:t.getMilliseconds()};/(y+)/.test(l)&&(l=l.replace(RegExp.$1,(t.getFullYear()+"").substr(4-RegExp.$1.length)));for(let Z in i)new RegExp("("+Z+")").test(l)&&(l=l.replace(RegExp.$1,RegExp.$1.length==1?i[Z]:("00"+i[Z]).substr((""+i[Z]).length)));return l},cbIntegrationCallBack(t){const{responseMsg:l,responseMsg:i}=t;l.type===6&&(this.videoTotal=this.multipPointsArr.length,this.currentPage=1,this.selectAll=this.multipPointsArr,this.layoutMode=l.msg.layout,this.pageSize=l.msg.wndNum,this.selectAll=this.chunkArray(this.selectAll,l.msg.wndNum),this.currentArr=[...this.selectAll[this.currentPage-1]],this.oWebControl.JS_Disconnect().then(()=>{this.initPlugin()},()=>{})),l.type===7&&this.closeVideo()},showPluginDownloadDialog(){vl.ElMessageBox.confirm("播放视频需要下载插件","提示",{confirmButtonText:"下载插件",cancelButtonText:"取消",type:"info",showCancelButton:!0}).then(()=>{deleteSysMenu(row.id).then(()=>{this.downloadPlugin(),this.showLoading.close()})}).catch(()=>{this.closeVideo(),this.showLoading.close()})},downloadPlugin(){try{const t=this.baseUrl+"static/VideoWebPlugin.exe",l=document.createElement("a");l.href=t,l.download="VideoWebPlugin.exe",l.style.display="none",document.body.appendChild(l),l.click(),setTimeout(()=>{l.parentNode&&l.parentNode.removeChild(l),this.closeVideo()},100)}catch{this.closeVideo()}}}},Vi={ref:"playWnd",id:"playWnd",class:"playWnd"};function pi(t,l,i,Z,d,b){return A.withDirectives((A.openBlock(),A.createElementBlock("div",Vi,null,512)),[[A.vShow,!i.isFullScreen]])}const E=Il._export_sfc(ai,[["render",pi]]);E.install=t=>{t.component(E.name,E)};exports.GPluginVideo=E;exports.default=E;