var jsencryptexports={};(function(exports){var dbits;var canary=0xdeadbeefcafe;var j_lm=((canary&0xffffff)==0xefcafe);function biginteger(a,b,c){if(a!=null) if("number"==typeof a)this.fromnumber(a,b,c);else if(b==null&&"string"!=typeof a)this.fromstring(a,256);else this.fromstring(a,b);} function nbi(){return new biginteger(null);} function am1(i,x,w,j,c,n){while(--n>=0){var v=x*this[i++]+w[j]+c;c=math.floor(v/0x4000000);w[j++]=v&0x3ffffff;} return c;} function am2(i,x,w,j,c,n){var xl=x&0x7fff,xh=x>>15;while(--n>=0){var l=this[i]&0x7fff;var h=this[i++]>>15;var m=xh*l+h*xl;l=xl*l+((m&0x7fff)<<15)+w[j]+(c&0x3fffffff);c=(l>>>30)+(m>>>15)+xh*h+(c>>>30);w[j++]=l&0x3fffffff;} return c;} function am3(i,x,w,j,c,n){var xl=x&0x3fff,xh=x>>14;while(--n>=0){var l=this[i]&0x3fff;var h=this[i++]>>14;var m=xh*l+h*xl;l=xl*l+((m&0x3fff)<<14)+w[j]+c;c=(l>>28)+(m>>14)+xh*h;w[j++]=l&0xfffffff;} return c;} if(j_lm&&(navigator.appname=="microsoft internet explorer")){biginteger.prototype.am=am2;dbits=30;} else if(j_lm&&(navigator.appname!="netscape")){biginteger.prototype.am=am1;dbits=26;} else{biginteger.prototype.am=am3;dbits=28;} biginteger.prototype.db=dbits;biginteger.prototype.dm=((1<=0;--i)r[i]=this[i];r.t=this.t;r.s=this.s;} function bnpfromint(x){this.t=1;this.s=(x<0)?-1:0;if(x>0)this[0]=x;else if(x<-1)this[0]=x+this.dv;else this.t=0;} function nbv(i){var r=nbi();r.fromint(i);return r;} function bnpfromstring(s,b){var k;if(b==16)k=4;else if(b==8)k=3;else if(b==256)k=8;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else{this.fromradix(s,b);return;} this.t=0;this.s=0;var i=s.length,mi=false,sh=0;while(--i>=0){var x=(k==8)?s[i]&0xff:intat(s,i);if(x<0){if(s.charat(i)=="-")mi=true;continue;} mi=false;if(sh==0) this[this.t++]=x;else if(sh+k>this.db){this[this.t-1]|=(x&((1<<(this.db-sh))-1))<>(this.db-sh));} else this[this.t-1]|=x<=this.db)sh-=this.db;} if(k==8&&(s[0]&0x80)!=0){this.s=-1;if(sh>0)this[this.t-1]|=((1<<(this.db-sh))-1)<0&&this[this.t-1]==c)--this.t;} function bntostring(b){if(this.s<0)return"-"+this.negate().tostring(b);var k;if(b==16)k=4;else if(b==8)k=3;else if(b==2)k=1;else if(b==32)k=5;else if(b==4)k=2;else return this.toradix(b);var km=(1<0){if(p>p)>0){m=true;r=int2char(d);} while(i>=0){if(p>(p+=this.db-k);} else{d=(this[i]>>(p-=k))&km;if(p<=0){p+=this.db;--i;}} if(d>0)m=true;if(m)r+=int2char(d);}} return m?r:"0";} function bnnegate(){var r=nbi();biginteger.zero.subto(this,r);return r;} function bnabs(){return(this.s<0)?this.negate():this;} function bncompareto(a){var r=this.s-a.s;if(r!=0)return r;var i=this.t;r=i-a.t;if(r!=0)return(this.s<0)?-r:r;while(--i>=0)if((r=this[i]-a[i])!=0)return r;return 0;} function nbits(x){var r=1,t;if((t=x>>>16)!=0){x=t;r+=16;} if((t=x>>8)!=0){x=t;r+=8;} if((t=x>>4)!=0){x=t;r+=4;} if((t=x>>2)!=0){x=t;r+=2;} if((t=x>>1)!=0){x=t;r+=1;} return r;} function bnbitlength(){if(this.t<=0)return 0;return this.db*(this.t-1)+nbits(this[this.t-1]^(this.s&this.dm));} function bnpdlshiftto(n,r){var i;for(i=this.t-1;i>=0;--i)r[i+n]=this[i];for(i=n-1;i>=0;--i)r[i]=0;r.t=this.t+n;r.s=this.s;} function bnpdrshiftto(n,r){for(var i=n;i=0;--i){r[i+ds+1]=(this[i]>>cbs)|c;c=(this[i]&bm)<=0;--i)r[i]=0;r[ds]=c;r.t=this.t+ds+1;r.s=this.s;r.clamp();} function bnprshiftto(n,r){r.s=this.s;var ds=math.floor(n/this.db);if(ds>=this.t){r.t=0;return;} var bs=n%this.db;var cbs=this.db-bs;var bm=(1<>bs;for(var i=ds+1;i>bs;} if(bs>0)r[this.t-ds-1]|=(this.s&bm)<>=this.db;} if(a.t>=this.db;} c+=this.s;} else{c+=this.s;while(i>=this.db;} c-=a.s;} r.s=(c<0)?-1:0;if(c<-1)r[i++]=this.dv+c;else if(c>0)r[i++]=c;r.t=i;r.clamp();} function bnpmultiplyto(a,r){var x=this.abs(),y=a.abs();var i=x.t;r.t=i+y.t;while(--i>=0)r[i]=0;for(i=0;i=0)r[i]=0;for(i=0;i=x.dv){r[i+x.t]-=x.dv;r[i+x.t+1]=1;}} if(r.t>0)r[r.t-1]+=x.am(i,x[i],r,2*i,0,1);r.s=0;r.clamp();} function bnpdivremto(m,q,r){var pm=m.abs();if(pm.t<=0)return;var pt=this.abs();if(pt.t0){pm.lshiftto(nsh,y);pt.lshiftto(nsh,r);} else{pm.copyto(y);pt.copyto(r);} var ys=y.t;var y0=y[ys-1];if(y0==0)return;var yt=y0*(1<1)?y[ys-2]>>this.f2:0);var d1=this.fv/yt,d2=(1<=0){r[r.t++]=1;r.subto(t,r);} biginteger.one.dlshiftto(ys,t);t.subto(y,y);while(y.t=0){var qd=(r[--i]==y0)?this.dm:math.floor(r[i]*d1+(r[i-1]+e)*d2);if((r[i]+=y.am(0,qd,r,j,0,ys))0)r.rshiftto(nsh,r);if(ts<0)biginteger.zero.subto(r,r);} function bnmod(a){var r=nbi();this.abs().divremto(a,null,r);if(this.s<0&&r.compareto(biginteger.zero)>0)a.subto(r,r);return r;} function classic(m){this.m=m;} function cconvert(x){if(x.s<0||x.compareto(this.m)>=0)return x.mod(this.m);else return x;} function crevert(x){return x;} function creduce(x){x.divremto(this.m,null,x);} function cmulto(x,y,r){x.multiplyto(y,r);this.reduce(r);} function csqrto(x,r){x.squareto(r);this.reduce(r);} classic.prototype.convert=cconvert;classic.prototype.revert=crevert;classic.prototype.reduce=creduce;classic.prototype.multo=cmulto;classic.prototype.sqrto=csqrto;function bnpinvdigit(){if(this.t<1)return 0;var x=this[0];if((x&1)==0)return 0;var y=x&3;y=(y*(2-(x&0xf)*y))&0xf;y=(y*(2-(x&0xff)*y))&0xff;y=(y*(2-(((x&0xffff)*y)&0xffff)))&0xffff;y=(y*(2-x*y%this.dv))%this.dv;return(y>0)?this.dv-y:-y;} function montgomery(m){this.m=m;this.mp=m.invdigit();this.mpl=this.mp&0x7fff;this.mph=this.mp>>15;this.um=(1<<(m.db-15))-1;this.mt2=2*m.t;} function montconvert(x){var r=nbi();x.abs().dlshiftto(this.m.t,r);r.divremto(this.m,null,r);if(x.s<0&&r.compareto(biginteger.zero)>0)this.m.subto(r,r);return r;} function montrevert(x){var r=nbi();x.copyto(r);this.reduce(r);return r;} function montreduce(x){while(x.t<=this.mt2) x[x.t++]=0;for(var i=0;i>15)*this.mpl)&this.um)<<15))&x.dm;j=i+this.m.t;x[j]+=this.m.am(0,u0,x,i,0,this.m.t);while(x[j]>=x.dv){x[j]-=x.dv;x[++j]++;}} x.clamp();x.drshiftto(this.m.t,x);if(x.compareto(this.m)>=0)x.subto(this.m,x);} function montsqrto(x,r){x.squareto(r);this.reduce(r);} function montmulto(x,y,r){x.multiplyto(y,r);this.reduce(r);} montgomery.prototype.convert=montconvert;montgomery.prototype.revert=montrevert;montgomery.prototype.reduce=montreduce;montgomery.prototype.multo=montmulto;montgomery.prototype.sqrto=montsqrto;function bnpiseven(){return((this.t>0)?(this[0]&1):this.s)==0;} function bnpexp(e,z){if(e>0xffffffff||e<1)return biginteger.one;var r=nbi(),r2=nbi(),g=z.convert(this),i=nbits(e)-1;g.copyto(r);while(--i>=0){z.sqrto(r,r2);if((e&(1<0)z.multo(r2,g,r);else{var t=r;r=r2;r2=t;}} return z.revert(r);} function bnmodpowint(e,m){var z;if(e<256||m.iseven())z=new classic(m);else z=new montgomery(m);return this.exp(e,z);} biginteger.prototype.copyto=bnpcopyto;biginteger.prototype.fromint=bnpfromint;biginteger.prototype.fromstring=bnpfromstring;biginteger.prototype.clamp=bnpclamp;biginteger.prototype.dlshiftto=bnpdlshiftto;biginteger.prototype.drshiftto=bnpdrshiftto;biginteger.prototype.lshiftto=bnplshiftto;biginteger.prototype.rshiftto=bnprshiftto;biginteger.prototype.subto=bnpsubto;biginteger.prototype.multiplyto=bnpmultiplyto;biginteger.prototype.squareto=bnpsquareto;biginteger.prototype.divremto=bnpdivremto;biginteger.prototype.invdigit=bnpinvdigit;biginteger.prototype.iseven=bnpiseven;biginteger.prototype.exp=bnpexp;biginteger.prototype.tostring=bntostring;biginteger.prototype.negate=bnnegate;biginteger.prototype.abs=bnabs;biginteger.prototype.compareto=bncompareto;biginteger.prototype.bitlength=bnbitlength;biginteger.prototype.mod=bnmod;biginteger.prototype.modpowint=bnmodpowint;biginteger.zero=nbv(0);biginteger.one=nbv(1);function bnclone(){var r=nbi();this.copyto(r);return r;} function bnintvalue(){if(this.s<0){if(this.t==1)return this[0]-this.dv;else if(this.t==0)return-1;} else if(this.t==1)return this[0];else if(this.t==0)return 0;return((this[1]&((1<<(32-this.db))-1))<>24;} function bnshortvalue(){return(this.t==0)?this.s:(this[0]<<16)>>16;} function bnpchunksize(r){return math.floor(math.ln2*this.db/math.log(r));} function bnsignum(){if(this.s<0)return-1;else if(this.t<=0||(this.t==1&&this[0]<=0))return 0;else return 1;} function bnptoradix(b){if(b==null)b=10;if(this.signum()==0||b<2||b>36)return"0";var cs=this.chunksize(b);var a=math.pow(b,cs);var d=nbv(a),y=nbi(),z=nbi(),r="";this.divremto(d,y,z);while(y.signum()>0){r=(a+z.intvalue()).tostring(b).substr(1)+ r;y.divremto(d,y,z);} return z.intvalue().tostring(b)+ r;} function bnpfromradix(s,b){this.fromint(0);if(b==null)b=10;var cs=this.chunksize(b);var d=math.pow(b,cs),mi=false,j=0,w=0;for(var i=0;i=cs){this.dmultiply(d);this.daddoffset(w,0);j=0;w=0;}} if(j>0){this.dmultiply(math.pow(b,j));this.daddoffset(w,0);} if(mi)biginteger.zero.subto(this,this);} function bnpfromnumber(a,b,c){if("number"==typeof b){if(a<2)this.fromint(1);else{this.fromnumber(a,c);if(!this.testbit(a-1)) this.bitwiseto(biginteger.one.shiftleft(a-1),op_or,this);if(this.iseven())this.daddoffset(1,0);while(!this.isprobableprime(b)){this.daddoffset(2,0);if(this.bitlength()>a)this.subto(biginteger.one.shiftleft(a-1),this);}}} else{var x=new array(),t=a&7;x.length=(a>>3)+1;b.nextbytes(x);if(t>0)x[0]&=((1<0){if(p>p)!=(this.s&this.dm)>>p) r[k++]=d|(this.s<<(this.db-p));while(i>=0){if(p<8){d=(this[i]&((1<>(p+=this.db-8);} else{d=(this[i]>>(p-=8))&0xff;if(p<=0){p+=this.db;--i;}} if((d&0x80)!=0)d|=-256;if(k==0&&(this.s&0x80)!=(d&0x80))++k;if(k>0||d!=this.s)r[k++]=d;}} return r;} function bnequals(a){return(this.compareto(a)==0);} function bnmin(a){return(this.compareto(a)<0)?this:a;} function bnmax(a){return(this.compareto(a)>0)?this:a;} function bnpbitwiseto(a,op,r){var i,f,m=math.min(a.t,this.t);for(i=0;i>=16;r+=16;} if((x&0xff)==0){x>>=8;r+=8;} if((x&0xf)==0){x>>=4;r+=4;} if((x&3)==0){x>>=2;r+=2;} if((x&1)==0)++r;return r;} function bngetlowestsetbit(){for(var i=0;i=this.t)return(this.s!=0);return((this[j]&(1<<(n%this.db)))!=0);} function bnpchangebit(n,op){var r=biginteger.one.shiftleft(n);this.bitwiseto(r,op,r);return r;} function bnsetbit(n){return this.changebit(n,op_or);} function bnclearbit(n){return this.changebit(n,op_andnot);} function bnflipbit(n){return this.changebit(n,op_xor);} function bnpaddto(a,r){var i=0,c=0,m=math.min(a.t,this.t);while(i>=this.db;} if(a.t>=this.db;} c+=this.s;} else{c+=this.s;while(i>=this.db;} c+=a.s;} r.s=(c<0)?-1:0;if(c>0)r[i++]=c;else if(c<-1)r[i++]=this.dv+c;r.t=i;r.clamp();} function bnadd(a){var r=nbi();this.addto(a,r);return r;} function bnsubtract(a){var r=nbi();this.subto(a,r);return r;} function bnmultiply(a){var r=nbi();this.multiplyto(a,r);return r;} function bnsquare(){var r=nbi();this.squareto(r);return r;} function bndivide(a){var r=nbi();this.divremto(a,r,null);return r;} function bnremainder(a){var r=nbi();this.divremto(a,null,r);return r;} function bndivideandremainder(a){var q=nbi(),r=nbi();this.divremto(a,q,r);return new array(q,r);} function bnpdmultiply(n){this[this.t]=this.am(0,n-1,this,0,0,this.t);++this.t;this.clamp();} function bnpdaddoffset(n,w){if(n==0)return;while(this.t<=w)this[this.t++]=0;this[w]+=n;while(this[w]>=this.dv){this[w]-=this.dv;if(++w>=this.t)this[this.t++]=0;++this[w];}} function nullexp(){} function nnop(x){return x;} function nmulto(x,y,r){x.multiplyto(y,r);} function nsqrto(x,r){x.squareto(r);} nullexp.prototype.convert=nnop;nullexp.prototype.revert=nnop;nullexp.prototype.multo=nmulto;nullexp.prototype.sqrto=nsqrto;function bnpow(e){return this.exp(e,new nullexp());} function bnpmultiplylowerto(a,n,r){var i=math.min(this.t+a.t,n);r.s=0;r.t=i;while(i>0)r[--i]=0;var j;for(j=r.t-this.t;i=0)r[i]=0;for(i=math.max(n-this.t,0);i2*this.m.t)return x.mod(this.m);else if(x.compareto(this.m)<0)return x;else{var r=nbi();x.copyto(r);this.reduce(r);return r;}} function barrettrevert(x){return x;} function barrettreduce(x){x.drshiftto(this.m.t-1,this.r2);if(x.t>this.m.t+1){x.t=this.m.t+1;x.clamp();} this.mu.multiplyupperto(this.r2,this.m.t+1,this.q3);this.m.multiplylowerto(this.q3,this.m.t+1,this.r2);while(x.compareto(this.r2)<0)x.daddoffset(1,this.m.t+1);x.subto(this.r2,x);while(x.compareto(this.m)>=0)x.subto(this.m,x);} function barrettsqrto(x,r){x.squareto(r);this.reduce(r);} function barrettmulto(x,y,r){x.multiplyto(y,r);this.reduce(r);} barrett.prototype.convert=barrettconvert;barrett.prototype.revert=barrettrevert;barrett.prototype.reduce=barrettreduce;barrett.prototype.multo=barrettmulto;barrett.prototype.sqrto=barrettsqrto;function bnmodpow(e,m){var i=e.bitlength(),k,r=nbv(1),z;if(i<=0)return r;else if(i<18)k=1;else if(i<48)k=3;else if(i<144)k=4;else if(i<768)k=5;else k=6;if(i<8) z=new classic(m);else if(m.iseven()) z=new barrett(m);else z=new montgomery(m);var g=new array(),n=3,k1=k-1,km=(1<1){var g2=nbi();z.sqrto(g[1],g2);while(n<=km){g[n]=nbi();z.multo(g2,g[n-2],g[n]);n+=2;}} var j=e.t-1,w,is1=true,r2=nbi(),t;i=nbits(e[j])-1;while(j>=0){if(i>=k1)w=(e[j]>>(i-k1))&km;else{w=(e[j]&((1<<(i+1))-1))<<(k1-i);if(j>0)w|=e[j-1]>>(this.db+i-k1);} n=k;while((w&1)==0){w>>=1;--n;} if((i-=n)<0){i+=this.db;--j;} if(is1){g[w].copyto(r);is1=false;} else{while(n>1){z.sqrto(r,r2);z.sqrto(r2,r);n-=2;} if(n>0)z.sqrto(r,r2);else{t=r;r=r2;r2=t;} z.multo(r2,g[w],r);} while(j>=0&&(e[j]&(1<0){x.rshiftto(g,x);y.rshiftto(g,y);} while(x.signum()>0){if((i=x.getlowestsetbit())>0)x.rshiftto(i,x);if((i=y.getlowestsetbit())>0)y.rshiftto(i,y);if(x.compareto(y)>=0){x.subto(y,x);x.rshiftto(1,x);} else{y.subto(x,y);y.rshiftto(1,y);}} if(g>0)y.lshiftto(g,y);return y;} function bnpmodint(n){if(n<=0)return 0;var d=this.dv%n,r=(this.s<0)?n-1:0;if(this.t>0) if(d==0)r=this[0]%n;else for(var i=this.t-1;i>=0;--i)r=(d*r+this[i])%n;return r;} function bnmodinverse(m){var ac=m.iseven();if((this.iseven()&&ac)||m.signum()==0)return biginteger.zero;var u=m.clone(),v=this.clone();var a=nbv(1),b=nbv(0),c=nbv(0),d=nbv(1);while(u.signum()!=0){while(u.iseven()){u.rshiftto(1,u);if(ac){if(!a.iseven()||!b.iseven()){a.addto(this,a);b.subto(m,b);} a.rshiftto(1,a);} else if(!b.iseven())b.subto(m,b);b.rshiftto(1,b);} while(v.iseven()){v.rshiftto(1,v);if(ac){if(!c.iseven()||!d.iseven()){c.addto(this,c);d.subto(m,d);} c.rshiftto(1,c);} else if(!d.iseven())d.subto(m,d);d.rshiftto(1,d);} if(u.compareto(v)>=0){u.subto(v,u);if(ac)a.subto(c,a);b.subto(d,b);} else{v.subto(u,v);if(ac)c.subto(a,c);d.subto(b,d);}} if(v.compareto(biginteger.one)!=0)return biginteger.zero;if(d.compareto(m)>=0)return d.subtract(m);if(d.signum()<0)d.addto(m,d);else return d;if(d.signum()<0)return d.add(m);else return d;} var lowprimes=[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];var lplim=(1<<26)/lowprimes[lowprimes.length-1]; function bnisprobableprime(t){var i,x=this.abs();if(x.t==1&&x[0]<=lowprimes[lowprimes.length-1]){for(i=0;i>1;if(t>lowprimes.length)t=lowprimes.length;var a=nbi();for(var i=0;i=256||rng_pptr>=rng_psize){if(window.removeeventlistener) window.removeeventlistener("mousemove",onmousemovelistener);else if(window.detachevent) window.detachevent("onmousemove",onmousemovelistener);return;} this.count+=1;var mousecoordinates=ev.x+ ev.y;rng_pool[rng_pptr++]=mousecoordinates&255;};if(window.addeventlistener) window.addeventlistener("mousemove",onmousemovelistener);else if(window.attachevent) window.attachevent("onmousemove",onmousemovelistener);} function rng_get_byte(){if(rng_state==null){rng_state=prng_newstate();while(rng_pptr=0&&n>0){var c=s.charcodeat(i--);if(c<128){ba[--n]=c;} else if((c>127)&&(c<2048)){ba[--n]=(c&63)|128;ba[--n]=(c>>6)|192;} else{ba[--n]=(c&63)|128;ba[--n]=((c>>6)&63)|128;ba[--n]=(c>>12)|224;}} ba[--n]=0;var rng=new securerandom();var x=new array();while(n>2){x[0]=0;while(x[0]==0)rng.nextbytes(x);ba[--n]=x[0];} ba[--n]=2;ba[--n]=0;return new biginteger(ba);} function rsakey(){this.n=null;this.e=0;this.d=null;this.p=null;this.q=null;this.dmp1=null;this.dmq1=null;this.coeff=null;} function rsasetpublic(n,e){if(n!=null&&e!=null&&n.length>0&&e.length>0){this.n=parsebigint(n,16);this.e=parseint(e,16);} else console.error("invalid rsa public key");} function rsadopublic(x){return x.modpowint(this.e,this.n);} function rsaencrypt(text){var m=pkcs1pad2(text,(this.n.bitlength()+7)>>3);if(m==null)return null;var c=this.dopublic(m);if(c==null)return null;var h=c.tostring(16);if((h.length&1)==0)return h;else return"0"+ h;} rsakey.prototype.dopublic=rsadopublic;rsakey.prototype.setpublic=rsasetpublic;rsakey.prototype.encrypt=rsaencrypt;function pkcs1unpad2(d,n){var b=d.tobytearray();var i=0;while(i=b.length)return null;var ret="";while(++i191)&&(c<224)){ret+=string.fromcharcode(((c&31)<<6)|(b[i+1]&63));++i;} else{ret+=string.fromcharcode(((c&15)<<12)|((b[i+1]&63)<<6)|(b[i+2]&63));i+=2;}} return ret;} function rsasetprivate(n,e,d){if(n!=null&&e!=null&&n.length>0&&e.length>0){this.n=parsebigint(n,16);this.e=parseint(e,16);this.d=parsebigint(d,16);} else console.error("invalid rsa private key");} function rsasetprivateex(n,e,d,p,q,dp,dq,c){if(n!=null&&e!=null&&n.length>0&&e.length>0){this.n=parsebigint(n,16);this.e=parseint(e,16);this.d=parsebigint(d,16);this.p=parsebigint(p,16);this.q=parsebigint(q,16);this.dmp1=parsebigint(dp,16);this.dmq1=parsebigint(dq,16);this.coeff=parsebigint(c,16);} else console.error("invalid rsa private key");} function rsagenerate(b,e){var rng=new securerandom();var qs=b>>1;this.e=parseint(e,16);var ee=new biginteger(e,16);for(;;){for(;;){this.p=new biginteger(b-qs,1,rng);if(this.p.subtract(biginteger.one).gcd(ee).compareto(biginteger.one)==0&&this.p.isprobableprime(10))break;} for(;;){this.q=new biginteger(qs,1,rng);if(this.q.subtract(biginteger.one).gcd(ee).compareto(biginteger.one)==0&&this.q.isprobableprime(10))break;} if(this.p.compareto(this.q)<=0){var t=this.p;this.p=this.q;this.q=t;} var p1=this.p.subtract(biginteger.one);var q1=this.q.subtract(biginteger.one);var phi=p1.multiply(q1);if(phi.gcd(ee).compareto(biginteger.one)==0){this.n=this.p.multiply(this.q);this.d=ee.modinverse(phi);this.dmp1=this.d.mod(p1);this.dmq1=this.d.mod(q1);this.coeff=this.q.modinverse(this.p);break;}}} function rsadoprivate(x){if(this.p==null||this.q==null) return x.modpow(this.d,this.n);var xp=x.mod(this.p).modpow(this.dmp1,this.p);var xq=x.mod(this.q).modpow(this.dmq1,this.q);while(xp.compareto(xq)<0) xp=xp.add(this.p);return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);} function rsadecrypt(ctext){var c=parsebigint(ctext,16);var m=this.doprivate(c);if(m==null)return null;return pkcs1unpad2(m,(this.n.bitlength()+7)>>3);} rsakey.prototype.doprivate=rsadoprivate;rsakey.prototype.setprivate=rsasetprivate;rsakey.prototype.setprivateex=rsasetprivateex;rsakey.prototype.generate=rsagenerate;rsakey.prototype.decrypt=rsadecrypt;(function(){var rsagenerateasync=function(b,e,callback){var rng=new securerandom();var qs=b>>1;this.e=parseint(e,16);var ee=new biginteger(e,16);var rsa=this;var loop1=function(){var loop4=function(){if(rsa.p.compareto(rsa.q)<=0){var t=rsa.p;rsa.p=rsa.q;rsa.q=t;} var p1=rsa.p.subtract(biginteger.one);var q1=rsa.q.subtract(biginteger.one);var phi=p1.multiply(q1);if(phi.gcd(ee).compareto(biginteger.one)==0){rsa.n=rsa.p.multiply(rsa.q);rsa.d=ee.modinverse(phi);rsa.dmp1=rsa.d.mod(p1);rsa.dmq1=rsa.d.mod(q1);rsa.coeff=rsa.q.modinverse(rsa.p);settimeout(function(){callback()},0);}else{settimeout(loop1,0);}};var loop3=function(){rsa.q=nbi();rsa.q.fromnumberasync(qs,1,rng,function(){rsa.q.subtract(biginteger.one).gcda(ee,function(r){if(r.compareto(biginteger.one)==0&&rsa.q.isprobableprime(10)){settimeout(loop4,0);}else{settimeout(loop3,0);}});});};var loop2=function(){rsa.p=nbi();rsa.p.fromnumberasync(b- qs,1,rng,function(){rsa.p.subtract(biginteger.one).gcda(ee,function(r){if(r.compareto(biginteger.one)==0&&rsa.p.isprobableprime(10)){settimeout(loop3,0);}else{settimeout(loop2,0);}});});};settimeout(loop2,0);};settimeout(loop1,0);};rsakey.prototype.generateasync=rsagenerateasync;var bngcdasync=function(a,callback){var x=(this.s<0)?this.negate():this.clone();var y=(a.s<0)?a.negate():a.clone();if(x.compareto(y)<0){var t=x;x=y;y=t;} var i=x.getlowestsetbit(),g=y.getlowestsetbit();if(g<0){callback(x);return;} if(i0){x.rshiftto(g,x);y.rshiftto(g,y);} var gcda1=function(){if((i=x.getlowestsetbit())>0){x.rshiftto(i,x);} if((i=y.getlowestsetbit())>0){y.rshiftto(i,y);} if(x.compareto(y)>=0){x.subto(y,x);x.rshiftto(1,x);}else{y.subto(x,y);y.rshiftto(1,y);} if(!(x.signum()>0)){if(g>0)y.lshiftto(g,y);settimeout(function(){callback(y)},0);}else{settimeout(gcda1,0);}};settimeout(gcda1,10);};biginteger.prototype.gcda=bngcdasync;var bnpfromnumberasync=function(a,b,c,callback){if("number"==typeof b){if(a<2){this.fromint(1);}else{this.fromnumber(a,c);if(!this.testbit(a-1)){this.bitwiseto(biginteger.one.shiftleft(a-1),op_or,this);} if(this.iseven()){this.daddoffset(1,0);} var bnp=this;var bnpfn1=function(){bnp.daddoffset(2,0);if(bnp.bitlength()>a)bnp.subto(biginteger.one.shiftleft(a-1),bnp);if(bnp.isprobableprime(b)){settimeout(function(){callback()},0);}else{settimeout(bnpfn1,0);}};settimeout(bnpfn1,0);}}else{var x=new array(),t=a&7;x.length=(a>>3)+1;b.nextbytes(x);if(t>0)x[0]&=((1<>6)+ b64map.charat(c&63);} if(i+1==h.length){c=parseint(h.substring(i,i+1),16);ret+=b64map.charat(c<<2);} else if(i+2==h.length){c=parseint(h.substring(i,i+2),16);ret+=b64map.charat(c>>2)+ b64map.charat((c&3)<<4);} while((ret.length&3)>0)ret+=b64pad;return ret;} function b64tohex(s){var ret="" var i;var k=0;var slop;for(i=0;i>2);slop=v&3;k=1;} else if(k==1){ret+=int2char((slop<<2)|(v>>4));slop=v&0xf;k=2;} else if(k==2){ret+=int2char(slop);ret+=int2char(v>>2);slop=v&3;k=3;} else{ret+=int2char((slop<<2)|(v>>4));ret+=int2char(v&0xf);k=0;}} if(k==1) ret+=int2char(slop<<2);return ret;} function b64toba(s){var h=b64tohex(s);var i;var a=new array();for(i=0;2*i15){throw"asn.1 length too long to represent by 8x: n = "+ n.tostring(16);} var head=128+ hnlen;return head.tostring(16)+ hn;}};this.getencodedhex=function(){if(this.htlv==null||this.ismodified){this.hv=this.getfreshvaluehex();this.hl=this.getlengthhexfromvalue();this.htlv=this.ht+ this.hl+ this.hv;this.ismodified=false;} return this.htlv;};this.getvaluehex=function(){this.getencodedhex();return this.hv;} this.getfreshvaluehex=function(){return'';};};kjur.asn1.derabstractstring=function(params){kjur.asn1.derabstractstring.superclass.constructor.call(this);var s=null;var hv=null;this.getstring=function(){return this.s;};this.setstring=function(news){this.htlv=null;this.ismodified=true;this.s=news;this.hv=stohex(this.s);};this.setstringhex=function(newhexstring){this.htlv=null;this.ismodified=true;this.s=null;this.hv=newhexstring;};this.getfreshvaluehex=function(){return this.hv;};if(typeof params!="undefined"){if(typeof params['str']!="undefined"){this.setstring(params['str']);}else if(typeof params['hex']!="undefined"){this.setstringhex(params['hex']);}}};jsx.extend(kjur.asn1.derabstractstring,kjur.asn1.asn1object);kjur.asn1.derabstracttime=function(params){kjur.asn1.derabstracttime.superclass.constructor.call(this);var s=null;var date=null;this.localdatetoutc=function(d){utc=d.gettime()+(d.gettimezoneoffset()*60000);var utcdate=new date(utc);return utcdate;};this.formatdate=function(dateobject,type){var pad=this.zeropadding;var d=this.localdatetoutc(dateobject);var year=string(d.getfullyear());if(type=='utc')year=year.substr(2,2);var month=pad(string(d.getmonth()+ 1),2);var day=pad(string(d.getdate()),2);var hour=pad(string(d.gethours()),2);var min=pad(string(d.getminutes()),2);var sec=pad(string(d.getseconds()),2);return year+ month+ day+ hour+ min+ sec+'z';};this.zeropadding=function(s,len){if(s.length>=len)return s;return new array(len- s.length+ 1).join('0')+ s;};this.getstring=function(){return this.s;};this.setstring=function(news){this.htlv=null;this.ismodified=true;this.s=news;this.hv=stohex(this.s);};this.setbydatevalue=function(year,month,day,hour,min,sec){var dateobject=new date(date.utc(year,month- 1,day,hour,min,sec,0));this.setbydate(dateobject);};this.getfreshvaluehex=function(){return this.hv;};};jsx.extend(kjur.asn1.derabstracttime,kjur.asn1.asn1object);kjur.asn1.derabstractstructured=function(params){kjur.asn1.derabstractstring.superclass.constructor.call(this);var asn1array=null;this.setbyasn1objectarray=function(asn1objectarray){this.htlv=null;this.ismodified=true;this.asn1array=asn1objectarray;};this.appendasn1object=function(asn1object){this.htlv=null;this.ismodified=true;this.asn1array.push(asn1object);};this.asn1array=new array();if(typeof params!="undefined"){if(typeof params['array']!="undefined"){this.asn1array=params['array'];}}};jsx.extend(kjur.asn1.derabstractstructured,kjur.asn1.asn1object);kjur.asn1.derboolean=function(){kjur.asn1.derboolean.superclass.constructor.call(this);this.ht="01";this.htlv="0101ff";};jsx.extend(kjur.asn1.derboolean,kjur.asn1.asn1object);kjur.asn1.derinteger=function(params){kjur.asn1.derinteger.superclass.constructor.call(this);this.ht="02";this.setbybiginteger=function(bigintegervalue){this.htlv=null;this.ismodified=true;this.hv=kjur.asn1.asn1util.biginttomintwoscomplementshex(bigintegervalue);};this.setbyinteger=function(intvalue){var bi=new biginteger(string(intvalue),10);this.setbybiginteger(bi);};this.setvaluehex=function(newhexstring){this.hv=newhexstring;};this.getfreshvaluehex=function(){return this.hv;};if(typeof params!="undefined"){if(typeof params['bigint']!="undefined"){this.setbybiginteger(params['bigint']);}else if(typeof params['int']!="undefined"){this.setbyinteger(params['int']);}else if(typeof params['hex']!="undefined"){this.setvaluehex(params['hex']);}}};jsx.extend(kjur.asn1.derinteger,kjur.asn1.asn1object);kjur.asn1.derbitstring=function(params){kjur.asn1.derbitstring.superclass.constructor.call(this);this.ht="03";this.sethexvalueincludingunusedbits=function(newhexstringincludingunusedbits){this.htlv=null;this.ismodified=true;this.hv=newhexstringincludingunusedbits;};this.setunusedbitsandhexvalue=function(unusedbits,hvalue){if(unusedbits<0||7=2){out[out.length]=bits;bits=0;char_count=0;}else{bits<<=4;}} if(char_count) throw"hex encoding incomplete: 4 bits missing";return out;};window.hex=hex;})();(function(undefined){"use strict";var base64={},decoder;base64.decode=function(a){var i;if(decoder===undefined){var b64="abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789+/",ignore="= \f\n\r\t\u00a0\u2028\u2029";decoder=[];for(i=0;i<64;++i) decoder[b64.charat(i)]=i;for(i=0;i=4){out[out.length]=(bits>>16);out[out.length]=(bits>>8)&0xff;out[out.length]=bits&0xff;bits=0;char_count=0;}else{bits<<=6;}} switch(char_count){case 1:throw"base64 encoding incomplete: at least 2 bits missing";case 2:out[out.length]=(bits>>10);break;case 3:out[out.length]=(bits>>16);out[out.length]=(bits>>8)&0xff;break;} return out;};base64.re=/-----begin [^-]+-----([a-za-z0-9+\/=\s]+)-----end [^-]+-----|begin-base64[^\n]+\n([a-za-z0-9+\/=\s]+)====/;base64.unarmor=function(a){var m=base64.re.exec(a);if(m){if(m[1]) a=m[1];else if(m[2]) a=m[2];else throw"regexp out of sync";} return base64.decode(a);};window.base64=base64;})();(function(undefined){"use strict";var hardlimit=100,ellipsis="\u2026",dom={tag:function(tagname,classname){var t=document.createelement(tagname);t.classname=classname;return t;},text:function(str){return document.createtextnode(str);}};function stream(enc,pos){if(enc instanceof stream){this.enc=enc.enc;this.pos=enc.pos;}else{this.enc=enc;this.pos=pos;}} stream.prototype.get=function(pos){if(pos===undefined) pos=this.pos++;if(pos>=this.enc.length) throw'requesting byte offset '+ pos+' on a stream of length '+ this.enc.length;return this.enc[pos];};stream.prototype.hexdigits="0123456789abcdef";stream.prototype.hexbyte=function(b){return this.hexdigits.charat((b>>4)&0xf)+ this.hexdigits.charat(b&0xf);};stream.prototype.hexdump=function(start,end,raw){var s="";for(var i=start;i191)&&(c<224)) s+=string.fromcharcode(((c&0x1f)<<6)|(this.get(i++)&0x3f));else s+=string.fromcharcode(((c&0x0f)<<12)|((this.get(i++)&0x3f)<<6)|(this.get(i++)&0x3f));} return s;};stream.prototype.parsestringbmp=function(start,end){var str="" for(var i=start;i4){len<<=3;var s=this.get(start);if(s===0) len-=8;else while(s<128){s<<=1;--len;} return"("+ len+" bit)";} var n=0;for(var i=start;istart;--i){var b=this.get(i);for(var j=skip;j<8;++j) s+=(b>>j)&1?"1":"0";skip=0;}} return s;};stream.prototype.parseoctetstring=function(start,end){var len=end- start,s="("+ len+" byte) ";if(len>hardlimit) end=start+ hardlimit;for(var i=start;ihardlimit) s+=ellipsis;return s;};stream.prototype.parseoid=function(start,end){var s='',n=0,bits=0;for(var i=start;i=31)?"bigint":n);n=bits=0;}} return s;};function asn1(stream,header,length,tag,sub){this.stream=stream;this.header=header;this.length=length;this.tag=tag;this.sub=sub;} asn1.prototype.typename=function(){if(this.tag===undefined) return"unknown";var tagclass=this.tag>>6,tagconstructed=(this.tag>>5)&1,tagnumber=this.tag&0x1f;switch(tagclass){case 0:switch(tagnumber){case 0x00:return"eoc";case 0x01:return"boolean";case 0x02:return"integer";case 0x03:return"bit_string";case 0x04:return"octet_string";case 0x05:return"null";case 0x06:return"object_identifier";case 0x07:return"objectdescriptor";case 0x08:return"external";case 0x09:return"real";case 0x0a:return"enumerated";case 0x0b:return"embedded_pdv";case 0x0c:return"utf8string";case 0x10:return"sequence";case 0x11:return"set";case 0x12:return"numericstring";case 0x13:return"printablestring";case 0x14:return"teletexstring";case 0x15:return"videotexstring";case 0x16:return"ia5string";case 0x17:return"utctime";case 0x18:return"generalizedtime";case 0x19:return"graphicstring";case 0x1a:return"visiblestring";case 0x1b:return"generalstring";case 0x1c:return"universalstring";case 0x1e:return"bmpstring";default:return"universal_"+ tagnumber.tostring(16);} case 1:return"application_"+ tagnumber.tostring(16);case 2:return"["+ tagnumber+"]";case 3:return"private_"+ tagnumber.tostring(16);}};asn1.prototype.reseemsascii=/^[ -~]+$/;asn1.prototype.content=function(){if(this.tag===undefined) return null;var tagclass=this.tag>>6,tagnumber=this.tag&0x1f,content=this.poscontent(),len=math.abs(this.length);if(tagclass!==0){if(this.sub!==null) return"("+ this.sub.length+" elem)";var s=this.stream.parsestringiso(content,content+ math.min(len,hardlimit));if(this.reseemsascii.test(s)) return s.substring(0,2*hardlimit)+((s.length>2*hardlimit)?ellipsis:"");else return this.stream.parseoctetstring(content,content+ len);} switch(tagnumber){case 0x01:return(this.stream.get(content)===0)?"false":"true";case 0x02:return this.stream.parseinteger(content,content+ len);case 0x03:return this.sub?"("+ this.sub.length+" elem)":this.stream.parsebitstring(content,content+ len);case 0x04:return this.sub?"("+ this.sub.length+" elem)":this.stream.parseoctetstring(content,content+ len);case 0x06:return this.stream.parseoid(content,content+ len);case 0x10:case 0x11:return"("+ this.sub.length+" elem)";case 0x0c:return this.stream.parsestringutf(content,content+ len);case 0x12:case 0x13:case 0x14:case 0x15:case 0x16:case 0x1a:return this.stream.parsestringiso(content,content+ len);case 0x1e:return this.stream.parsestringbmp(content,content+ len);case 0x17:case 0x18:return this.stream.parsetime(content,content+ len);} return null;};asn1.prototype.tostring=function(){return this.typename()+"@"+ this.stream.pos+"[header:"+ this.header+",length:"+ this.length+",sub:"+((this.sub===null)?'null':this.sub.length)+"]";};asn1.prototype.print=function(indent){if(indent===undefined)indent='';document.writeln(indent+ this);if(this.sub!==null){indent+=' ';for(var i=0,max=this.sub.length;i=0) s+="+";s+=this.length;if(this.tag&0x20) s+=" (constructed)";else if(((this.tag==0x03)||(this.tag==0x04))&&(this.sub!==null)) s+=" (encapsulates)";s+="\n";if(this.sub!==null){indent+=' ';for(var i=0,max=this.sub.length;i";s+="length: "+ this.header+"+";if(this.length>=0) s+=this.length;else s+=(-this.length)+" (undefined)";if(this.tag&0x20) s+="
(constructed)";else if(((this.tag==0x03)||(this.tag==0x04))&&(this.sub!==null)) s+="
(encapsulates)";if(content!==null){s+="
value:
"+ content+"";if((typeof oids==='object')&&(this.tag==0x06)){var oid=oids[content];if(oid){if(oid.d)s+="
"+ oid.d;if(oid.c)s+="
"+ oid.c;if(oid.w)s+="
(warning!)";}}} value.innerhtml=s;node.appendchild(value);var sub=dom.tag("div","sub");if(this.sub!==null){for(var i=0,max=this.sub.length;i=end) return;var sub=dom.tag("span",classname);sub.appendchild(dom.text(stream.hexdump(start,end)));node.appendchild(sub);};asn1.prototype.tohexdom=function(root){var node=dom.tag("span","hex");if(root===undefined)root=node;this.head.hexnode=node;this.head.onmouseover=function(){this.hexnode.classname="hexcurrent";};this.head.onmouseout=function(){this.hexnode.classname="hex";};node.asn1=this;node.onmouseover=function(){var current=!root.selected;if(current){root.selected=this.asn1;this.classname="hexcurrent";} this.asn1.fakehover(current);};node.onmouseout=function(){var current=(root.selected==this.asn1);this.asn1.fakeout(current);if(current){root.selected=null;this.classname="hex";}};this.tohexdom_sub(node,"tag",this.stream,this.posstart(),this.posstart()+ 1);this.tohexdom_sub(node,(this.length>=0)?"dlen":"ulen",this.stream,this.posstart()+ 1,this.poscontent());if(this.sub===null) node.appendchild(dom.text(this.stream.hexdump(this.poscontent(),this.posend())));else if(this.sub.length>0){var first=this.sub[0];var last=this.sub[this.sub.length- 1];this.tohexdom_sub(node,"intro",this.stream,this.poscontent(),first.posstart());for(var i=0,max=this.sub.length;i3) throw"length over 24 bits not supported at position "+(stream.pos- 1);if(len===0) return-1;buf=0;for(var i=0;i0x04)) return false;var p=new stream(stream);if(tag==0x03)p.get();var subtag=p.get();if((subtag>>6)&0x01) return false;try{var sublength=asn1.decodelength(p);return((p.pos- stream.pos)+ sublength==len);}catch(exception){return false;}};asn1.decode=function(stream){if(!(stream instanceof stream)) stream=new stream(stream,0);var streamstart=new stream(stream),tag=stream.get(),len=asn1.decodelength(stream),header=stream.pos- streamstart.pos,sub=null;if(asn1.hascontent(tag,len,stream)){var start=stream.pos;if(tag==0x03)stream.get();sub=[];if(len>=0){var end=start+ len;while(stream.pos