diff --git a/javascript/src/lib/asmcrypto.all.es5.min.js b/javascript/src/lib/asmcrypto.all.es5.min.js deleted file mode 100644 index 2e5186da025105c027d86c4bcbff5432481c0147..0000000000000000000000000000000000000000 --- a/javascript/src/lib/asmcrypto.all.es5.min.js +++ /dev/null @@ -1 +0,0 @@ -var asmCrypto=function(f){"use strict";var t="undefined"==typeof atob?function(f){return Buffer.from(f,"base64").toString("binary")}:atob,e="undefined"==typeof btoa?function(f){return Buffer.from(f,"binary").toString("base64")}:btoa;function r(f,t){void 0===t&&(t=!1);for(var e=f.length,r=new Uint8Array(t?4*e:e),n=0,i=0;n<e;n++){var a=f.charCodeAt(n);if(t&&55296<=a&&a<=56319){if(++n>=e)throw new Error("Malformed string, low surrogate expected at position "+n);a=(55296^a)<<10|65536|56320^f.charCodeAt(n)}else if(!t&&a>>>8)throw new Error("Wide characters are not allowed.");!t||a<=127?r[i++]=a:(a<=2047?r[i++]=192|a>>6:(a<=65535?r[i++]=224|a>>12:(r[i++]=240|a>>18,r[i++]=128|a>>12&63),r[i++]=128|a>>6&63),r[i++]=128|63&a)}return r.subarray(0,i)}function n(f){var t=f.length;1&t&&(f="0"+f,t++);for(var e=new Uint8Array(t>>1),r=0;r<t;r+=2)e[r>>1]=parseInt(f.substr(r,2),16);return e}function i(f){return r(t(f))}function a(f,t){void 0===t&&(t=!1);for(var e=f.length,r=new Array(e),n=0,i=0;n<e;n++){var a=f[n];if(!t||a<128)r[i++]=a;else if(192<=a&&a<224&&n+1<e)r[i++]=(31&a)<<6|63&f[++n];else if(224<=a&&a<240&&n+2<e)r[i++]=(15&a)<<12|(63&f[++n])<<6|63&f[++n];else{if(!(240<=a&&a<248&&n+3<e))throw new Error("Malformed UTF8 character at byte offset "+n);var s=(7&a)<<18|(63&f[++n])<<12|(63&f[++n])<<6|63&f[++n];s<=65535?r[i++]=s:(s^=65536,r[i++]=55296|s>>10,r[i++]=56320|1023&s)}}var o="",x=16384;for(n=0;n<i;n+=x)o+=String.fromCharCode.apply(String,r.slice(n,n+x<=i?n+x:i));return o}function s(f){for(var t="",e=0;e<f.length;e++){var r=(255&f[e]).toString(16);r.length<2&&(t+="0"),t+=r}return t}function o(f){return e(a(f))}function p(f){return f instanceof Uint8Array}function x(f,t){var e=f?f.byteLength:t||65536;if(4095&e||e<=0)throw new Error("heap size must be a positive integer and a multiple of 4096");return f=f||new Uint8Array(new ArrayBuffer(e)),f}function y(f,t,e,r,n){var i=f.length-t,a=i<n?i:n;return f.set(e.subarray(r,r+a),t),a}function c(){for(var f=[],t=0;t<arguments.length;t++)f[t]=arguments[t];for(var e=f.reduce(function(f,t){return f+t.length},0),r=new Uint8Array(e),n=0,i=0;i<f.length;i++)r.set(f[i],n),n+=f[i].length;return r}var h=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),b=function(r){function f(){for(var f=[],t=0;t<arguments.length;t++)f[t]=arguments[t];var e=r.apply(this,f)||this;return e}return h(f,r),f}(Error),_=function(r){function f(){for(var f=[],t=0;t<arguments.length;t++)f[t]=arguments[t];var e=r.apply(this,f)||this;return e}return h(f,r),f}(Error),v=function(r){function f(){for(var f=[],t=0;t<arguments.length;t++)f[t]=arguments[t];var e=r.apply(this,f)||this;return e}return h(f,r),f}(Error),g=function(){var r,n,i=!1;function a(){r=[],n=[];var f,t,e=1;for(f=0;f<255;f++)r[f]=e,t=128&e,e<<=1,e&=255,128===t&&(e^=27),e^=r[f],n[r[f]]=f;r[255]=r[0],n[0]=0,i=!0}function s(f,t){var e=r[(n[f]+n[t])%255];return 0!==f&&0!==t||(e=0),e}function o(f){var t=r[255-n[f]];return 0===f&&(t=0),t}var _,x,c,v,h=!1;function u(){function f(f){var t,e,r;for(e=r=o(f),t=0;t<4;t++)e=255&(e<<1|e>>>7),r^=e;return r^=99,r}i||a(),_=[],x=[],c=[[],[],[],[]],v=[[],[],[],[]];for(var t=0;t<256;t++){var e=f(t);_[t]=e,x[e]=t,c[0][t]=s(2,e)<<24|e<<16|e<<8|s(3,e),v[0][e]=s(14,t)<<24|s(9,t)<<16|s(13,t)<<8|s(11,t);for(var r=1;r<4;r++)c[r][t]=c[r-1][t]>>>8|c[r-1][t]<<24,v[r][e]=v[r-1][e]>>>8|v[r-1][e]<<24}h=!0}var f=function(f,t){h||u();var b=new Uint32Array(t);b.set(_,512),b.set(x,768);for(var e=0;e<4;e++)b.set(c[e],4096+1024*e>>2),b.set(v[e],8192+1024*e>>2);function r(f,t,e,r,n,i,a,s,o){var x=b.subarray(0,60),c=b.subarray(256,316);x.set([t,e,r,n,i,a,s,o]);for(var h=f,u=1;h<4*f+28;h++){var l=x[h-1];(h%f==0||8===f&&h%f==4)&&(l=_[l>>>24]<<24^_[l>>>16&255]<<16^_[l>>>8&255]<<8^_[255&l]),h%f==0&&(l=l<<8^l>>>24^u<<24,u=u<<1^(128&u?27:0)),x[h]=x[h-f]^l}for(var p=0;p<h;p+=4)for(var y=0;y<4;y++){l=x[h-(4+p)+(4-y)%4];c[p+y]=p<4||h-4<=p?l:v[0][_[l>>>24]]^v[1][_[l>>>16&255]]^v[2][_[l>>>8&255]]^v[3][_[255&l]]}g.set_rounds(f+5)}var n={Uint8Array:Uint8Array,Uint32Array:Uint32Array},g=function(f,t,e){"use asm";var b=0,g=0,_=0,v=0,p=0,y=0,d=0,w=0,n=0,i=0,a=0,s=0,o=0,x=0,c=0,h=0,A=0,m=0,E=0,C=0,u=0;var S=new f.Uint32Array(e),l=new f.Uint8Array(e);function U(f,t,e,r,n,i,a,s){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;var o=0,x=0,c=0,h=0,u=0,l=0,p=0,y=0;o=e|0x400,x=e|0x800,c=e|0xc00;n=n^S[(f|0)>>2],i=i^S[(f|4)>>2],a=a^S[(f|8)>>2],s=s^S[(f|12)>>2];for(y=16;(y|0)<=r<<4;y=y+16|0){h=S[(e|n>>22&1020)>>2]^S[(o|i>>14&1020)>>2]^S[(x|a>>6&1020)>>2]^S[(c|s<<2&1020)>>2]^S[(f|y|0)>>2],u=S[(e|i>>22&1020)>>2]^S[(o|a>>14&1020)>>2]^S[(x|s>>6&1020)>>2]^S[(c|n<<2&1020)>>2]^S[(f|y|4)>>2],l=S[(e|a>>22&1020)>>2]^S[(o|s>>14&1020)>>2]^S[(x|n>>6&1020)>>2]^S[(c|i<<2&1020)>>2]^S[(f|y|8)>>2],p=S[(e|s>>22&1020)>>2]^S[(o|n>>14&1020)>>2]^S[(x|i>>6&1020)>>2]^S[(c|a<<2&1020)>>2]^S[(f|y|12)>>2];n=h,i=u,a=l,s=p}b=S[(t|n>>22&1020)>>2]<<24^S[(t|i>>14&1020)>>2]<<16^S[(t|a>>6&1020)>>2]<<8^S[(t|s<<2&1020)>>2]^S[(f|y|0)>>2],g=S[(t|i>>22&1020)>>2]<<24^S[(t|a>>14&1020)>>2]<<16^S[(t|s>>6&1020)>>2]<<8^S[(t|n<<2&1020)>>2]^S[(f|y|4)>>2],_=S[(t|a>>22&1020)>>2]<<24^S[(t|s>>14&1020)>>2]<<16^S[(t|n>>6&1020)>>2]<<8^S[(t|i<<2&1020)>>2]^S[(f|y|8)>>2],v=S[(t|s>>22&1020)>>2]<<24^S[(t|n>>14&1020)>>2]<<16^S[(t|i>>6&1020)>>2]<<8^S[(t|a<<2&1020)>>2]^S[(f|y|12)>>2]}function r(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;U(0x0000,0x0800,0x1000,u,f,t,e,r)}function M(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;var n=0;U(0x0400,0x0c00,0x2000,u,f,r,e,t);n=g,g=v,v=n}function O(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;U(0x0000,0x0800,0x1000,u,p^f,y^t,d^e,w^r);p=b,y=g,d=_,w=v}function H(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;var n=0;U(0x0400,0x0c00,0x2000,u,f,r,e,t);n=g,g=v,v=n;b=b^p,g=g^y,_=_^d,v=v^w;p=f,y=t,d=e,w=r}function L(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;U(0x0000,0x0800,0x1000,u,p,y,d,w);p=b=b^f,y=g=g^t,d=_=_^e,w=v=v^r}function k(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;U(0x0000,0x0800,0x1000,u,p,y,d,w);b=b^f,g=g^t,_=_^e,v=v^r;p=f,y=t,d=e,w=r}function P(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;U(0x0000,0x0800,0x1000,u,p,y,d,w);p=b,y=g,d=_,w=v;b=b^f,g=g^t,_=_^e,v=v^r}function D(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;U(0x0000,0x0800,0x1000,u,n,i,a,s);s=~h&s|h&s+1;a=~c&a|c&a+((s|0)==0);i=~x&i|x&i+((a|0)==0);n=~o&n|o&n+((i|0)==0);b=b^f;g=g^t;_=_^e;v=v^r}function R(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;var n=0,i=0,a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0;f=f^p,t=t^y,e=e^d,r=r^w;n=A|0,i=m|0,a=E|0,s=C|0;for(;(u|0)<128;u=u+1|0){if(n>>>31){o=o^f,x=x^t,c=c^e,h=h^r}n=n<<1|i>>>31,i=i<<1|a>>>31,a=a<<1|s>>>31,s=s<<1;l=r&1;r=r>>>1|e<<31,e=e>>>1|t<<31,t=t>>>1|f<<31,f=f>>>1;if(l)f=f^0xe1000000}p=o,y=x,d=c,w=h}function T(f){f=f|0;u=f}function Z(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;b=f,g=t,_=e,v=r}function B(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;p=f,y=t,d=e,w=r}function I(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;n=f,i=t,a=e,s=r}function z(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;o=f,x=t,c=e,h=r}function G(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;s=~h&s|h&r,a=~c&a|c&e,i=~x&i|x&t,n=~o&n|o&f}function N(f){f=f|0;if(f&15)return-1;l[f|0]=b>>>24,l[f|1]=b>>>16&255,l[f|2]=b>>>8&255,l[f|3]=b&255,l[f|4]=g>>>24,l[f|5]=g>>>16&255,l[f|6]=g>>>8&255,l[f|7]=g&255,l[f|8]=_>>>24,l[f|9]=_>>>16&255,l[f|10]=_>>>8&255,l[f|11]=_&255,l[f|12]=v>>>24,l[f|13]=v>>>16&255,l[f|14]=v>>>8&255,l[f|15]=v&255;return 16}function j(f){f=f|0;if(f&15)return-1;l[f|0]=p>>>24,l[f|1]=p>>>16&255,l[f|2]=p>>>8&255,l[f|3]=p&255,l[f|4]=y>>>24,l[f|5]=y>>>16&255,l[f|6]=y>>>8&255,l[f|7]=y&255,l[f|8]=d>>>24,l[f|9]=d>>>16&255,l[f|10]=d>>>8&255,l[f|11]=d&255,l[f|12]=w>>>24,l[f|13]=w>>>16&255,l[f|14]=w>>>8&255,l[f|15]=w&255;return 16}function F(){r(0,0,0,0);A=b,m=g,E=_,C=v}function q(f,t,e){f=f|0;t=t|0;e=e|0;var r=0;if(t&15)return-1;while((e|0)>=16){K[f&7](l[t|0]<<24|l[t|1]<<16|l[t|2]<<8|l[t|3],l[t|4]<<24|l[t|5]<<16|l[t|6]<<8|l[t|7],l[t|8]<<24|l[t|9]<<16|l[t|10]<<8|l[t|11],l[t|12]<<24|l[t|13]<<16|l[t|14]<<8|l[t|15]);l[t|0]=b>>>24,l[t|1]=b>>>16&255,l[t|2]=b>>>8&255,l[t|3]=b&255,l[t|4]=g>>>24,l[t|5]=g>>>16&255,l[t|6]=g>>>8&255,l[t|7]=g&255,l[t|8]=_>>>24,l[t|9]=_>>>16&255,l[t|10]=_>>>8&255,l[t|11]=_&255,l[t|12]=v>>>24,l[t|13]=v>>>16&255,l[t|14]=v>>>8&255,l[t|15]=v&255;r=r+16|0,t=t+16|0,e=e-16|0}return r|0}function V(f,t,e){f=f|0;t=t|0;e=e|0;var r=0;if(t&15)return-1;while((e|0)>=16){W[f&1](l[t|0]<<24|l[t|1]<<16|l[t|2]<<8|l[t|3],l[t|4]<<24|l[t|5]<<16|l[t|6]<<8|l[t|7],l[t|8]<<24|l[t|9]<<16|l[t|10]<<8|l[t|11],l[t|12]<<24|l[t|13]<<16|l[t|14]<<8|l[t|15]);r=r+16|0,t=t+16|0,e=e-16|0}return r|0}var K=[r,M,O,H,L,k,P,D];var W=[O,R];return{set_rounds:T,set_state:Z,set_iv:B,set_nonce:I,set_mask:z,set_counter:G,get_state:N,get_iv:j,gcm_init:F,cipher:q,mac:V}}(n,f,t);return g.set_key=r,g};return f.ENC={ECB:0,CBC:2,CFB:4,OFB:6,CTR:7},f.DEC={ECB:1,CBC:3,CFB:5,OFB:6,CTR:7},f.MAC={CBC:0,GCM:1},f.HEAP_DATA=16384,f}(),u=function(){function f(f,t,e,r){void 0===e&&(e=!0),this.pos=0,this.len=0,this.mode=r,this.heap=x().subarray(g.HEAP_DATA),this.asm=new g(null,this.heap.buffer),this.pos=0,this.len=0;var n=f.length;if(16!==n&&24!==n&&32!==n)throw new _("illegal key size");var i=new DataView(f.buffer,f.byteOffset,f.byteLength);if(this.asm.set_key(n>>2,i.getUint32(0),i.getUint32(4),i.getUint32(8),i.getUint32(12),16<n?i.getUint32(16):0,16<n?i.getUint32(20):0,24<n?i.getUint32(24):0,24<n?i.getUint32(28):0),void 0!==t){if(16!==t.length)throw new _("illegal iv size");var a=new DataView(t.buffer,t.byteOffset,t.byteLength);this.asm.set_iv(a.getUint32(0),a.getUint32(4),a.getUint32(8),a.getUint32(12))}else this.asm.set_iv(0,0,0,0);this.padding=e}return f.prototype.AES_Encrypt_process=function(f){if(!p(f))throw new TypeError("data isn't of expected type");for(var t=this.asm,e=this.heap,r=g.ENC[this.mode],n=g.HEAP_DATA,i=this.pos,a=this.len,s=0,o=f.length||0,x=0,c=a+o&-16,h=0,u=new Uint8Array(c);0<o;)h=y(e,i+a,f,s,o),a+=h,s+=h,o-=h,h=t.cipher(r,n+i,a),h&&u.set(e.subarray(i,i+h),x),x+=h,h<a?(i+=h,a-=h):(i=0,a=0);return this.pos=i,this.len=a,u},f.prototype.AES_Encrypt_finish=function(){var f=this.asm,t=this.heap,e=g.ENC[this.mode],r=g.HEAP_DATA,n=this.pos,i=this.len,a=16-i%16,s=i;if(this.hasOwnProperty("padding")){if(this.padding){for(var o=0;o<a;++o)t[n+i+o]=a;i+=a,s=i}else if(i%16)throw new _("data length must be a multiple of the block size")}else i+=a;var x=new Uint8Array(s);return i&&f.cipher(e,r+n,i),s&&x.set(t.subarray(n,n+s)),this.pos=0,this.len=0,x},f.prototype.AES_Decrypt_process=function(f){if(!p(f))throw new TypeError("data isn't of expected type");var t=this.asm,e=this.heap,r=g.DEC[this.mode],n=g.HEAP_DATA,i=this.pos,a=this.len,s=0,o=f.length||0,x=0,c=a+o&-16,h=0,u=0;this.padding&&(h=a+o-c||16,c-=h);for(var l=new Uint8Array(c);0<o;)u=y(e,i+a,f,s,o),a+=u,s+=u,o-=u,u=t.cipher(r,n+i,a-(o?0:h)),u&&l.set(e.subarray(i,i+u),x),x+=u,u<a?(i+=u,a-=u):(i=0,a=0);return this.pos=i,this.len=a,l},f.prototype.AES_Decrypt_finish=function(){var f=this.asm,t=this.heap,e=g.DEC[this.mode],r=g.HEAP_DATA,n=this.pos,i=this.len,a=i;if(0<i){if(i%16){if(this.hasOwnProperty("padding"))throw new _("data length must be a multiple of the block size");i+=16-i%16}if(f.cipher(e,r+n,i),this.hasOwnProperty("padding")&&this.padding){var s=t[n+a-1];if(s<1||16<s||a<s)throw new v("bad padding");for(var o=0,x=s;1<x;x--)o|=s^t[n+a-x];if(o)throw new v("bad padding");a-=s}}var c=new Uint8Array(a);return 0<a&&c.set(t.subarray(n,n+a)),this.pos=0,this.len=0,c},f}(),l=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),d=function(r){function n(f,t,e){return void 0===e&&(e=!0),r.call(this,f,t,e,"CBC")||this}return l(n,r),n.encrypt=function(f,t,e,r){return void 0===e&&(e=!0),new n(t,r,e).encrypt(f)},n.decrypt=function(f,t,e,r){return void 0===e&&(e=!0),new n(t,r,e).decrypt(f)},n.prototype.encrypt=function(f){var t=this.AES_Encrypt_process(f),e=this.AES_Encrypt_finish();return c(t,e)},n.prototype.decrypt=function(f){var t=this.AES_Decrypt_process(f),e=this.AES_Decrypt_finish();return c(t,e)},n}(u),w=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),A=65279,m=0xffffffffffff0,E=function(a){function i(f,t,e,r,n){void 0===r&&(r=16);var i=a.call(this,f,void 0,void 0,"CCM")||this;if(i.counter=1,i.dataLength=-1,r<4||16<r||1&r)throw new _("illegal tagSize value");if(i.tagSize=r,i.nonce=t,t.length<8||13<t.length)throw new _("illegal nonce length");if(i.lengthSize=15-t.length,t=new Uint8Array(t.length+1),t[0]=i.lengthSize-1,t.set(i.nonce,1),n<0||m<n||n>Math.pow(2,8*i.lengthSize)-16)throw new _("illegal dataLength value");if(void 0!==e){if(e.length>A)throw new _("illegal adata length");i.adata=e.length?e:void 0}return i.dataLength=n,i.counter=1,i.AES_CCM_calculate_iv(),i.AES_CTR_set_options(t,i.counter,8*i.lengthSize),i}return w(i,a),i.encrypt=function(f,t,e,r,n){return void 0===n&&(n=16),new i(t,e,r,n,f.length).encrypt(f)},i.decrypt=function(f,t,e,r,n){return void 0===n&&(n=16),new i(t,e,r,n,f.length-n).decrypt(f)},i.prototype.encrypt=function(f){this.dataLength=f.length||0;var t=this.AES_CCM_Encrypt_process(f),e=this.AES_CCM_Encrypt_finish(),r=new Uint8Array(t.length+e.length);return t.length&&r.set(t),e.length&&r.set(e,t.length),r},i.prototype.decrypt=function(f){this.dataLength=f.length||0;var t=this.AES_CCM_Decrypt_process(f),e=this.AES_CCM_Decrypt_finish(),r=new Uint8Array(t.length+e.length);return t.length&&r.set(t),e.length&&r.set(e,t.length),r},i.prototype.AES_CCM_calculate_iv=function(){var f=this.nonce,t=this.adata,e=this.tagSize,r=this.lengthSize,n=this.dataLength,i=new Uint8Array(16+(t?2+t.length:0));i[0]=(t?64:0)|e-2<<2|r-1,i.set(f,1),6<r&&(i[9]=n/4294967296>>>16&15),5<r&&(i[10]=n/4294967296>>>8&255),4<r&&(i[11]=n/4294967296&255),3<r&&(i[12]=n>>>24),2<r&&(i[13]=n>>>16&255),i[14]=n>>>8&255,i[15]=255&n,t&&(i[16]=t.length>>>8&255,i[17]=255&t.length,i.set(t,18)),this._cbc_mac_process(i),this.asm.get_state(g.HEAP_DATA);var a=new Uint8Array(this.heap.subarray(0,16)),s=new DataView(a.buffer,a.byteOffset,a.byteLength);this.asm.set_iv(s.getUint32(0),s.getUint32(4),s.getUint32(8),s.getUint32(12))},i.prototype._cbc_mac_process=function(f){for(var t=this.heap,e=this.asm,r=0,n=f.length||0,i=0;0<n;){for(i=y(t,0,f,r,n);15&i;)t[i++]=0;r+=i,n-=i,e.mac(g.MAC.CBC,g.HEAP_DATA,i)}},i.prototype.AES_CCM_Encrypt_process=function(f){var t=this.asm,e=this.heap,r=0,n=f.length||0,i=this.counter,a=this.pos,s=this.len,o=s+n&-16,x=0,c=0;if(m<(i-1<<4)+s+n)throw new RangeError("counter overflow");for(var h=new Uint8Array(o);0<n;)c=y(e,a+s,f,r,n),s+=c,r+=c,n-=c,c=t.mac(g.MAC.CBC,g.HEAP_DATA+a,s),c=t.cipher(g.ENC.CTR,g.HEAP_DATA+a,c),c&&h.set(e.subarray(a,a+c),x),i+=c>>>4,x+=c,c<s?(a+=c,s-=c):(a=0,s=0);return this.counter=i,this.pos=a,this.len=s,h},i.prototype.AES_CCM_Encrypt_finish=function(){for(var f=this.asm,t=this.heap,e=this.tagSize,r=this.pos,n=this.len,i=new Uint8Array(n+e),a=n;15&a;a++)t[r+a]=0;return f.mac(g.MAC.CBC,g.HEAP_DATA+r,a),f.cipher(g.ENC.CTR,g.HEAP_DATA+r,a),n&&i.set(t.subarray(r,r+n)),f.set_counter(0,0,0,0),f.get_iv(g.HEAP_DATA),f.cipher(g.ENC.CTR,g.HEAP_DATA,16),i.set(t.subarray(0,e),n),this.counter=1,this.pos=0,this.len=0,i},i.prototype.AES_CCM_Decrypt_process=function(f){var t=0,e=f.length||0,r=this.asm,n=this.heap,i=this.counter,a=this.tagSize,s=this.pos,o=this.len,x=0,c=a<o+e?o+e-a&-16:0,h=o+e-c,u=0;if(m<(i-1<<4)+o+e)throw new RangeError("counter overflow");for(var l=new Uint8Array(c);h<e;)u=y(n,s+o,f,t,e-h),o+=u,t+=u,e-=u,u=r.cipher(g.DEC.CTR,g.HEAP_DATA+s,u),u=r.mac(g.MAC.CBC,g.HEAP_DATA+s,u),u&&l.set(n.subarray(s,s+u),x),i+=u>>>4,x+=u,s=0,o=0;return 0<e&&(o+=y(n,0,f,t,e)),this.counter=i,this.pos=s,this.len=o,l},i.prototype.AES_CCM_Decrypt_finish=function(){var f=this.asm,t=this.heap,e=this.tagSize,r=this.pos,n=this.len,i=n-e;if(n<e)throw new b("authentication tag not found");var a=new Uint8Array(i),s=new Uint8Array(t.subarray(r+i,r+n));f.cipher(g.DEC.CTR,g.HEAP_DATA+r,i+15&-16),a.set(t.subarray(r,r+i));for(var o=i;15&o;o++)t[r+o]=0;f.mac(g.MAC.CBC,g.HEAP_DATA+r,o),f.set_counter(0,0,0,0),f.get_iv(g.HEAP_DATA),f.cipher(g.ENC.CTR,g.HEAP_DATA,16);for(var x=0,c=0;c<e;++c)x|=s[c]^t[c];if(x)throw new v("data integrity check failed");return this.counter=1,this.pos=0,this.len=0,a},i.prototype.AES_CTR_set_options=function(f,t,e){if(e<8||48<e)throw new _("illegal counter size");var r=Math.pow(2,e)-1;this.asm.set_mask(0,0,r/4294967296|0,0|r);var n=f.length;if(!n||16<n)throw new _("illegal nonce size");this.nonce=f;var i=new DataView(new ArrayBuffer(16));if(new Uint8Array(i.buffer).set(f),this.asm.set_nonce(i.getUint32(0),i.getUint32(4),i.getUint32(8),i.getUint32(12)),t<0||t>=Math.pow(2,e))throw new _("illegal counter value");this.counter=t,this.asm.set_counter(0,0,t/4294967296|0,0|t)},i}(u),C=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),S=function(r){function n(f,t){var e=r.call(this,f,t,!0,"CFB")||this;return delete e.padding,e}return C(n,r),n.encrypt=function(f,t,e){return new n(t,e).encrypt(f)},n.decrypt=function(f,t,e){return new n(t,e).decrypt(f)},n.prototype.encrypt=function(f){var t=this.AES_Encrypt_process(f),e=this.AES_Encrypt_finish();return c(t,e)},n.prototype.decrypt=function(f){var t=this.AES_Decrypt_process(f),e=this.AES_Decrypt_finish();return c(t,e)},n}(u),U=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),M=function(e){function r(f,t){return void 0===t&&(t=!1),e.call(this,f,void 0,t,"ECB")||this}return U(r,e),r.encrypt=function(f,t,e){return void 0===e&&(e=!1),new r(t,e).encrypt(f)},r.decrypt=function(f,t,e){return void 0===e&&(e=!1),new r(t,e).decrypt(f)},r.prototype.encrypt=function(f){var t=this.AES_Encrypt_process(f),e=this.AES_Encrypt_finish();return c(t,e)},r.prototype.decrypt=function(f){var t=this.AES_Decrypt_process(f),e=this.AES_Decrypt_finish();return c(t,e)},r}(u);function O(f){for(var t=128&f[0],e=0;e<15;e++)f[e]=f[e]<<1^(128&f[e+1]?1:0);f[15]=f[15]<<1^(t?135:0)}var H=function(){function e(f){this.bufferLength=0,this.k=new M(f).encrypt(new Uint8Array(16)),O(this.k),this.cbc=new d(f,new Uint8Array(16),!1),this.buffer=new Uint8Array(16),this.result=null}return e.bytes=function(f,t){return new e(t).process(f).finish().result},e.prototype.process=function(f){if(16<this.bufferLength+f.length){this.cbc.encrypt(this.buffer.subarray(0,this.bufferLength));var t=(this.bufferLength+f.length-1&-16)-this.bufferLength;this.cbc.encrypt(f.subarray(0,t)),this.buffer.set(f.subarray(t)),this.bufferLength=f.length-t}else this.buffer.set(f,this.bufferLength),this.bufferLength+=f.length;return this},e.prototype.finish=function(){if(16!==this.bufferLength){this.buffer[this.bufferLength]=128;for(var f=this.bufferLength+1;f<16;f++)this.buffer[f]=0;O(this.k)}for(f=0;f<16;f++)this.buffer[f]^=this.k[f];return this.result=this.cbc.encrypt(this.buffer),this},e}(),L=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),k=function(r){function n(f,t){var e=r.call(this,f,void 0,!1,"CTR")||this;return delete e.padding,e.AES_CTR_set_options(t),e}return L(n,r),n.encrypt=function(f,t,e){return new n(t,e).encrypt(f)},n.decrypt=function(f,t,e){return new n(t,e).encrypt(f)},n.prototype.encrypt=function(f){var t=this.AES_Encrypt_process(f),e=this.AES_Encrypt_finish();return c(t,e)},n.prototype.decrypt=function(f){var t=this.AES_Encrypt_process(f),e=this.AES_Encrypt_finish();return c(t,e)},n.prototype.AES_CTR_set_options=function(f,t,e){if(void 0!==e){if(e<8||48<e)throw new _("illegal counter size");var r=Math.pow(2,e)-1;this.asm.set_mask(0,0,r/4294967296|0,0|r)}else e=48,this.asm.set_mask(0,0,65535,4294967295);if(void 0===f)throw new Error("nonce is required");var n=f.length;if(!n||16<n)throw new _("illegal nonce size");var i=new DataView(new ArrayBuffer(16));if(new Uint8Array(i.buffer).set(f),this.asm.set_nonce(i.getUint32(0),i.getUint32(4),i.getUint32(8),i.getUint32(12)),void 0!==t){if(t<0||t>=Math.pow(2,e))throw new _("illegal counter value");this.asm.set_counter(0,0,t/4294967296|0,0|t)}},n}(u),P=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),D=68719476704,R=function(o){function i(f,t,e,r){void 0===r&&(r=16);var n=o.call(this,f,void 0,!1,"CTR")||this;if(n.tagSize=r,n.gamma0=0,n.counter=1,n.asm.gcm_init(),n.tagSize<4||16<n.tagSize)throw new _("illegal tagSize value");var i=t.length||0,a=new Uint8Array(16);12!==i?(n._gcm_mac_process(t),n.heap[0]=0,n.heap[1]=0,n.heap[2]=0,n.heap[3]=0,n.heap[4]=0,n.heap[5]=0,n.heap[6]=0,n.heap[7]=0,n.heap[8]=0,n.heap[9]=0,n.heap[10]=0,n.heap[11]=i>>>29,n.heap[12]=i>>>21&255,n.heap[13]=i>>>13&255,n.heap[14]=i>>>5&255,n.heap[15]=i<<3&255,n.asm.mac(g.MAC.GCM,g.HEAP_DATA,16),n.asm.get_iv(g.HEAP_DATA),n.asm.set_iv(0,0,0,0),a.set(n.heap.subarray(0,16))):(a.set(t),a[15]=1);var s=new DataView(a.buffer);if(n.gamma0=s.getUint32(12),n.asm.set_nonce(s.getUint32(0),s.getUint32(4),s.getUint32(8),0),n.asm.set_mask(0,0,0,4294967295),void 0!==e){if(e.length>D)throw new _("illegal adata length");e.length?(n.adata=e,n._gcm_mac_process(e)):n.adata=void 0}else n.adata=void 0;if(n.counter<1||4294967295<n.counter)throw new RangeError("counter must be a positive 32-bit integer");return n.asm.set_counter(0,0,0,n.gamma0+n.counter|0),n}return P(i,o),i.encrypt=function(f,t,e,r,n){return new i(t,e,r,n).encrypt(f)},i.decrypt=function(f,t,e,r,n){return new i(t,e,r,n).decrypt(f)},i.prototype.encrypt=function(f){return this.AES_GCM_encrypt(f)},i.prototype.decrypt=function(f){return this.AES_GCM_decrypt(f)},i.prototype.AES_GCM_Encrypt_process=function(f){var t=0,e=f.length||0,r=this.asm,n=this.heap,i=this.counter,a=this.pos,s=this.len,o=0,x=s+e&-16,c=0;if(D<(i-1<<4)+s+e)throw new RangeError("counter overflow");for(var h=new Uint8Array(x);0<e;)c=y(n,a+s,f,t,e),s+=c,t+=c,e-=c,c=r.cipher(g.ENC.CTR,g.HEAP_DATA+a,s),c=r.mac(g.MAC.GCM,g.HEAP_DATA+a,c),c&&h.set(n.subarray(a,a+c),o),i+=c>>>4,o+=c,c<s?(a+=c,s-=c):(a=0,s=0);return this.counter=i,this.pos=a,this.len=s,h},i.prototype.AES_GCM_Encrypt_finish=function(){var f=this.asm,t=this.heap,e=this.counter,r=this.tagSize,n=this.adata,i=this.pos,a=this.len,s=new Uint8Array(a+r);f.cipher(g.ENC.CTR,g.HEAP_DATA+i,a+15&-16),a&&s.set(t.subarray(i,i+a));for(var o=a;15&o;o++)t[i+o]=0;f.mac(g.MAC.GCM,g.HEAP_DATA+i,o);var x=void 0!==n?n.length:0,c=(e-1<<4)+a;return t[0]=0,t[1]=0,t[2]=0,t[3]=x>>>29,t[4]=x>>>21,t[5]=x>>>13&255,t[6]=x>>>5&255,t[7]=x<<3&255,t[8]=t[9]=t[10]=0,t[11]=c>>>29,t[12]=c>>>21&255,t[13]=c>>>13&255,t[14]=c>>>5&255,t[15]=c<<3&255,f.mac(g.MAC.GCM,g.HEAP_DATA,16),f.get_iv(g.HEAP_DATA),f.set_counter(0,0,0,this.gamma0),f.cipher(g.ENC.CTR,g.HEAP_DATA,16),s.set(t.subarray(0,r),a),this.counter=1,this.pos=0,this.len=0,s},i.prototype.AES_GCM_Decrypt_process=function(f){var t=0,e=f.length||0,r=this.asm,n=this.heap,i=this.counter,a=this.tagSize,s=this.pos,o=this.len,x=0,c=a<o+e?o+e-a&-16:0,h=o+e-c,u=0;if(D<(i-1<<4)+o+e)throw new RangeError("counter overflow");for(var l=new Uint8Array(c);h<e;)u=y(n,s+o,f,t,e-h),o+=u,t+=u,e-=u,u=r.mac(g.MAC.GCM,g.HEAP_DATA+s,u),u=r.cipher(g.DEC.CTR,g.HEAP_DATA+s,u),u&&l.set(n.subarray(s,s+u),x),i+=u>>>4,x+=u,s=0,o=0;return 0<e&&(o+=y(n,0,f,t,e)),this.counter=i,this.pos=s,this.len=o,l},i.prototype.AES_GCM_Decrypt_finish=function(){var f=this.asm,t=this.heap,e=this.tagSize,r=this.adata,n=this.counter,i=this.pos,a=this.len,s=a-e;if(a<e)throw new b("authentication tag not found");for(var o=new Uint8Array(s),x=new Uint8Array(t.subarray(i+s,i+a)),c=s;15&c;c++)t[i+c]=0;f.mac(g.MAC.GCM,g.HEAP_DATA+i,c),f.cipher(g.DEC.CTR,g.HEAP_DATA+i,c),s&&o.set(t.subarray(i,i+s));var h=void 0!==r?r.length:0,u=(n-1<<4)+a-e;t[0]=0,t[1]=0,t[2]=0,t[3]=h>>>29,t[4]=h>>>21,t[5]=h>>>13&255,t[6]=h>>>5&255,t[7]=h<<3&255,t[8]=t[9]=t[10]=0,t[11]=u>>>29,t[12]=u>>>21&255,t[13]=u>>>13&255,t[14]=u>>>5&255,t[15]=u<<3&255,f.mac(g.MAC.GCM,g.HEAP_DATA,16),f.get_iv(g.HEAP_DATA),f.set_counter(0,0,0,this.gamma0),f.cipher(g.ENC.CTR,g.HEAP_DATA,16);for(var l=0,p=0;p<e;++p)l|=x[p]^t[p];if(l)throw new v("data integrity check failed");return this.counter=1,this.pos=0,this.len=0,o},i.prototype.AES_GCM_decrypt=function(f){var t=this.AES_GCM_Decrypt_process(f),e=this.AES_GCM_Decrypt_finish(),r=new Uint8Array(t.length+e.length);return t.length&&r.set(t),e.length&&r.set(e,t.length),r},i.prototype.AES_GCM_encrypt=function(f){var t=this.AES_GCM_Encrypt_process(f),e=this.AES_GCM_Encrypt_finish(),r=new Uint8Array(t.length+e.length);return t.length&&r.set(t),e.length&&r.set(e,t.length),r},i.prototype._gcm_mac_process=function(f){for(var t=this.heap,e=this.asm,r=0,n=f.length||0,i=0;0<n;){for(i=y(t,0,f,r,n),r+=i,n-=i;15&i;)t[i++]=0;e.mac(g.MAC.GCM,g.HEAP_DATA,i)}},i}(u),T=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),Z=function(e){function r(f,t){return e.call(this,f,t,!1,"OFB")||this}return T(r,e),r.encrypt=function(f,t,e){return new r(t,e).encrypt(f)},r.decrypt=function(f,t,e){return new r(t,e).decrypt(f)},r.prototype.encrypt=function(f){var t=this.AES_Encrypt_process(f),e=this.AES_Encrypt_finish();return c(t,e)},r.prototype.decrypt=function(f){var t=this.AES_Decrypt_process(f),e=this.AES_Decrypt_finish();return c(t,e)},r}(u),B=function(f,t,e){"use asm";var r=0;var pf=new f.Uint32Array(e);var yf=f.Math.imul;function n(f){f=f|0;r=f=f+31&-32;return f|0}function d(f){f=f|0;var t=0;t=r;r=t+(f+31&-32)|0;return t|0}function w(f){f=f|0;r=r-(f+31&-32)|0}function A(f,t,e){f=f|0;t=t|0;e=e|0;var r=0;if((t|0)>(e|0)){for(;(r|0)<(f|0);r=r+4|0){pf[e+r>>2]=pf[t+r>>2]}}else{for(r=f-4|0;(r|0)>=0;r=r-4|0){pf[e+r>>2]=pf[t+r>>2]}}}function m(f,t,e){f=f|0;t=t|0;e=e|0;var r=0;for(;(r|0)<(f|0);r=r+4|0){pf[e+r>>2]=t}}function i(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;var n=0,i=0,a=0,s=0,o=0;if((r|0)<=0)r=t;if((r|0)<(t|0))t=r;i=1;for(;(o|0)<(t|0);o=o+4|0){n=~pf[f+o>>2];a=(n&0xffff)+i|0;s=(n>>>16)+(a>>>16)|0;pf[e+o>>2]=s<<16|a&0xffff;i=s>>>16}for(;(o|0)<(r|0);o=o+4|0){pf[e+o>>2]=i-1|0}return i|0}function E(f,t,e,r){f=f|0;t=t|0;e=e|0;r=r|0;var n=0,i=0,a=0;if((t|0)>(r|0)){for(a=t-4|0;(a|0)>=(r|0);a=a-4|0){if(pf[f+a>>2]|0)return 1}}else{for(a=r-4|0;(a|0)>=(t|0);a=a-4|0){if(pf[e+a>>2]|0)return-1}}for(;(a|0)>=0;a=a-4|0){n=pf[f+a>>2]|0,i=pf[e+a>>2]|0;if(n>>>0<i>>>0)return-1;if(n>>>0>i>>>0)return 1}return 0}function a(f,t){f=f|0;t=t|0;var e=0;for(e=t-4|0;(e|0)>=0;e=e-4|0){if(pf[f+e>>2]|0)return e+4|0}return 0}function s(f,t,e,r,n,i){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;var a=0,s=0,o=0,x=0,c=0,h=0;if((t|0)<(r|0)){x=f,f=e,e=x;x=t,t=r,r=x}if((i|0)<=0)i=t+4|0;if((i|0)<(r|0))t=r=i;for(;(h|0)<(r|0);h=h+4|0){a=pf[f+h>>2]|0;s=pf[e+h>>2]|0;x=((a&0xffff)+(s&0xffff)|0)+o|0;c=((a>>>16)+(s>>>16)|0)+(x>>>16)|0;pf[n+h>>2]=x&0xffff|c<<16;o=c>>>16}for(;(h|0)<(t|0);h=h+4|0){a=pf[f+h>>2]|0;x=(a&0xffff)+o|0;c=(a>>>16)+(x>>>16)|0;pf[n+h>>2]=x&0xffff|c<<16;o=c>>>16}for(;(h|0)<(i|0);h=h+4|0){pf[n+h>>2]=o|0;o=0}return o|0}function C(f,t,e,r,n,i){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;var a=0,s=0,o=0,x=0,c=0,h=0;if((i|0)<=0)i=(t|0)>(r|0)?t+4|0:r+4|0;if((i|0)<(t|0))t=i;if((i|0)<(r|0))r=i;if((t|0)<(r|0)){for(;(h|0)<(t|0);h=h+4|0){a=pf[f+h>>2]|0;s=pf[e+h>>2]|0;x=((a&0xffff)-(s&0xffff)|0)+o|0;c=((a>>>16)-(s>>>16)|0)+(x>>16)|0;pf[n+h>>2]=x&0xffff|c<<16;o=c>>16}for(;(h|0)<(r|0);h=h+4|0){s=pf[e+h>>2]|0;x=o-(s&0xffff)|0;c=(x>>16)-(s>>>16)|0;pf[n+h>>2]=x&0xffff|c<<16;o=c>>16}}else{for(;(h|0)<(r|0);h=h+4|0){a=pf[f+h>>2]|0;s=pf[e+h>>2]|0;x=((a&0xffff)-(s&0xffff)|0)+o|0;c=((a>>>16)-(s>>>16)|0)+(x>>16)|0;pf[n+h>>2]=x&0xffff|c<<16;o=c>>16}for(;(h|0)<(t|0);h=h+4|0){a=pf[f+h>>2]|0;x=(a&0xffff)+o|0;c=(a>>>16)+(x>>16)|0;pf[n+h>>2]=x&0xffff|c<<16;o=c>>16}}for(;(h|0)<(i|0);h=h+4|0){pf[n+h>>2]=o|0}return o|0}function o(f,t,e,r,n,i){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;var a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0,p=0,y=0,b=0,g=0,_=0,v=0,d=0,w=0,A=0,m=0,E=0,C=0,S=0,U=0,M=0,O=0,H=0,L=0,k=0,P=0,D=0,R=0,T=0,Z=0,B=0,I=0,z=0,G=0,N=0,j=0,F=0,q=0,V=0,K=0,W=0,J=0,Q=0,X=0,Y=0,$=0,ff=0,tf=0,ef=0,rf=0,nf=0,af=0,sf=0,of=0,xf=0;if((t|0)>(r|0)){ff=f,tf=t;f=e,t=r;e=ff,r=tf}rf=t+r|0;if((i|0)>(rf|0)|(i|0)<=0)i=rf;if((i|0)<(t|0))t=i;if((i|0)<(r|0))r=i;for(;(nf|0)<(t|0);nf=nf+32|0){af=f+nf|0;p=pf[(af|0)>>2]|0,y=pf[(af|4)>>2]|0,b=pf[(af|8)>>2]|0,g=pf[(af|12)>>2]|0,_=pf[(af|16)>>2]|0,v=pf[(af|20)>>2]|0,d=pf[(af|24)>>2]|0,w=pf[(af|28)>>2]|0,a=p&0xffff,s=y&0xffff,o=b&0xffff,x=g&0xffff,c=_&0xffff,h=v&0xffff,u=d&0xffff,l=w&0xffff,p=p>>>16,y=y>>>16,b=b>>>16,g=g>>>16,_=_>>>16,v=v>>>16,d=d>>>16,w=w>>>16;V=K=W=J=Q=X=Y=$=0;for(sf=0;(sf|0)<(r|0);sf=sf+32|0){of=e+sf|0;xf=n+(nf+sf|0)|0;H=pf[(of|0)>>2]|0,L=pf[(of|4)>>2]|0,k=pf[(of|8)>>2]|0,P=pf[(of|12)>>2]|0,D=pf[(of|16)>>2]|0,R=pf[(of|20)>>2]|0,T=pf[(of|24)>>2]|0,Z=pf[(of|28)>>2]|0,A=H&0xffff,m=L&0xffff,E=k&0xffff,C=P&0xffff,S=D&0xffff,U=R&0xffff,M=T&0xffff,O=Z&0xffff,H=H>>>16,L=L>>>16,k=k>>>16,P=P>>>16,D=D>>>16,R=R>>>16,T=T>>>16,Z=Z>>>16;B=pf[(xf|0)>>2]|0,I=pf[(xf|4)>>2]|0,z=pf[(xf|8)>>2]|0,G=pf[(xf|12)>>2]|0,N=pf[(xf|16)>>2]|0,j=pf[(xf|20)>>2]|0,F=pf[(xf|24)>>2]|0,q=pf[(xf|28)>>2]|0;ff=((yf(a,A)|0)+(V&0xffff)|0)+(B&0xffff)|0;tf=((yf(p,A)|0)+(V>>>16)|0)+(B>>>16)|0;ef=((yf(a,H)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(p,H)|0)+(tf>>>16)|0)+(ef>>>16)|0;B=ef<<16|ff&0xffff;ff=((yf(a,m)|0)+(rf&0xffff)|0)+(I&0xffff)|0;tf=((yf(p,m)|0)+(rf>>>16)|0)+(I>>>16)|0;ef=((yf(a,L)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(p,L)|0)+(tf>>>16)|0)+(ef>>>16)|0;I=ef<<16|ff&0xffff;ff=((yf(a,E)|0)+(rf&0xffff)|0)+(z&0xffff)|0;tf=((yf(p,E)|0)+(rf>>>16)|0)+(z>>>16)|0;ef=((yf(a,k)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(p,k)|0)+(tf>>>16)|0)+(ef>>>16)|0;z=ef<<16|ff&0xffff;ff=((yf(a,C)|0)+(rf&0xffff)|0)+(G&0xffff)|0;tf=((yf(p,C)|0)+(rf>>>16)|0)+(G>>>16)|0;ef=((yf(a,P)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(p,P)|0)+(tf>>>16)|0)+(ef>>>16)|0;G=ef<<16|ff&0xffff;ff=((yf(a,S)|0)+(rf&0xffff)|0)+(N&0xffff)|0;tf=((yf(p,S)|0)+(rf>>>16)|0)+(N>>>16)|0;ef=((yf(a,D)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(p,D)|0)+(tf>>>16)|0)+(ef>>>16)|0;N=ef<<16|ff&0xffff;ff=((yf(a,U)|0)+(rf&0xffff)|0)+(j&0xffff)|0;tf=((yf(p,U)|0)+(rf>>>16)|0)+(j>>>16)|0;ef=((yf(a,R)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(p,R)|0)+(tf>>>16)|0)+(ef>>>16)|0;j=ef<<16|ff&0xffff;ff=((yf(a,M)|0)+(rf&0xffff)|0)+(F&0xffff)|0;tf=((yf(p,M)|0)+(rf>>>16)|0)+(F>>>16)|0;ef=((yf(a,T)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(p,T)|0)+(tf>>>16)|0)+(ef>>>16)|0;F=ef<<16|ff&0xffff;ff=((yf(a,O)|0)+(rf&0xffff)|0)+(q&0xffff)|0;tf=((yf(p,O)|0)+(rf>>>16)|0)+(q>>>16)|0;ef=((yf(a,Z)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(p,Z)|0)+(tf>>>16)|0)+(ef>>>16)|0;q=ef<<16|ff&0xffff;V=rf;ff=((yf(s,A)|0)+(K&0xffff)|0)+(I&0xffff)|0;tf=((yf(y,A)|0)+(K>>>16)|0)+(I>>>16)|0;ef=((yf(s,H)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(y,H)|0)+(tf>>>16)|0)+(ef>>>16)|0;I=ef<<16|ff&0xffff;ff=((yf(s,m)|0)+(rf&0xffff)|0)+(z&0xffff)|0;tf=((yf(y,m)|0)+(rf>>>16)|0)+(z>>>16)|0;ef=((yf(s,L)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(y,L)|0)+(tf>>>16)|0)+(ef>>>16)|0;z=ef<<16|ff&0xffff;ff=((yf(s,E)|0)+(rf&0xffff)|0)+(G&0xffff)|0;tf=((yf(y,E)|0)+(rf>>>16)|0)+(G>>>16)|0;ef=((yf(s,k)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(y,k)|0)+(tf>>>16)|0)+(ef>>>16)|0;G=ef<<16|ff&0xffff;ff=((yf(s,C)|0)+(rf&0xffff)|0)+(N&0xffff)|0;tf=((yf(y,C)|0)+(rf>>>16)|0)+(N>>>16)|0;ef=((yf(s,P)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(y,P)|0)+(tf>>>16)|0)+(ef>>>16)|0;N=ef<<16|ff&0xffff;ff=((yf(s,S)|0)+(rf&0xffff)|0)+(j&0xffff)|0;tf=((yf(y,S)|0)+(rf>>>16)|0)+(j>>>16)|0;ef=((yf(s,D)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(y,D)|0)+(tf>>>16)|0)+(ef>>>16)|0;j=ef<<16|ff&0xffff;ff=((yf(s,U)|0)+(rf&0xffff)|0)+(F&0xffff)|0;tf=((yf(y,U)|0)+(rf>>>16)|0)+(F>>>16)|0;ef=((yf(s,R)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(y,R)|0)+(tf>>>16)|0)+(ef>>>16)|0;F=ef<<16|ff&0xffff;ff=((yf(s,M)|0)+(rf&0xffff)|0)+(q&0xffff)|0;tf=((yf(y,M)|0)+(rf>>>16)|0)+(q>>>16)|0;ef=((yf(s,T)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(y,T)|0)+(tf>>>16)|0)+(ef>>>16)|0;q=ef<<16|ff&0xffff;ff=((yf(s,O)|0)+(rf&0xffff)|0)+(V&0xffff)|0;tf=((yf(y,O)|0)+(rf>>>16)|0)+(V>>>16)|0;ef=((yf(s,Z)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(y,Z)|0)+(tf>>>16)|0)+(ef>>>16)|0;V=ef<<16|ff&0xffff;K=rf;ff=((yf(o,A)|0)+(W&0xffff)|0)+(z&0xffff)|0;tf=((yf(b,A)|0)+(W>>>16)|0)+(z>>>16)|0;ef=((yf(o,H)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(b,H)|0)+(tf>>>16)|0)+(ef>>>16)|0;z=ef<<16|ff&0xffff;ff=((yf(o,m)|0)+(rf&0xffff)|0)+(G&0xffff)|0;tf=((yf(b,m)|0)+(rf>>>16)|0)+(G>>>16)|0;ef=((yf(o,L)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(b,L)|0)+(tf>>>16)|0)+(ef>>>16)|0;G=ef<<16|ff&0xffff;ff=((yf(o,E)|0)+(rf&0xffff)|0)+(N&0xffff)|0;tf=((yf(b,E)|0)+(rf>>>16)|0)+(N>>>16)|0;ef=((yf(o,k)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(b,k)|0)+(tf>>>16)|0)+(ef>>>16)|0;N=ef<<16|ff&0xffff;ff=((yf(o,C)|0)+(rf&0xffff)|0)+(j&0xffff)|0;tf=((yf(b,C)|0)+(rf>>>16)|0)+(j>>>16)|0;ef=((yf(o,P)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(b,P)|0)+(tf>>>16)|0)+(ef>>>16)|0;j=ef<<16|ff&0xffff;ff=((yf(o,S)|0)+(rf&0xffff)|0)+(F&0xffff)|0;tf=((yf(b,S)|0)+(rf>>>16)|0)+(F>>>16)|0;ef=((yf(o,D)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(b,D)|0)+(tf>>>16)|0)+(ef>>>16)|0;F=ef<<16|ff&0xffff;ff=((yf(o,U)|0)+(rf&0xffff)|0)+(q&0xffff)|0;tf=((yf(b,U)|0)+(rf>>>16)|0)+(q>>>16)|0;ef=((yf(o,R)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(b,R)|0)+(tf>>>16)|0)+(ef>>>16)|0;q=ef<<16|ff&0xffff;ff=((yf(o,M)|0)+(rf&0xffff)|0)+(V&0xffff)|0;tf=((yf(b,M)|0)+(rf>>>16)|0)+(V>>>16)|0;ef=((yf(o,T)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(b,T)|0)+(tf>>>16)|0)+(ef>>>16)|0;V=ef<<16|ff&0xffff;ff=((yf(o,O)|0)+(rf&0xffff)|0)+(K&0xffff)|0;tf=((yf(b,O)|0)+(rf>>>16)|0)+(K>>>16)|0;ef=((yf(o,Z)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(b,Z)|0)+(tf>>>16)|0)+(ef>>>16)|0;K=ef<<16|ff&0xffff;W=rf;ff=((yf(x,A)|0)+(J&0xffff)|0)+(G&0xffff)|0;tf=((yf(g,A)|0)+(J>>>16)|0)+(G>>>16)|0;ef=((yf(x,H)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(g,H)|0)+(tf>>>16)|0)+(ef>>>16)|0;G=ef<<16|ff&0xffff;ff=((yf(x,m)|0)+(rf&0xffff)|0)+(N&0xffff)|0;tf=((yf(g,m)|0)+(rf>>>16)|0)+(N>>>16)|0;ef=((yf(x,L)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(g,L)|0)+(tf>>>16)|0)+(ef>>>16)|0;N=ef<<16|ff&0xffff;ff=((yf(x,E)|0)+(rf&0xffff)|0)+(j&0xffff)|0;tf=((yf(g,E)|0)+(rf>>>16)|0)+(j>>>16)|0;ef=((yf(x,k)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(g,k)|0)+(tf>>>16)|0)+(ef>>>16)|0;j=ef<<16|ff&0xffff;ff=((yf(x,C)|0)+(rf&0xffff)|0)+(F&0xffff)|0;tf=((yf(g,C)|0)+(rf>>>16)|0)+(F>>>16)|0;ef=((yf(x,P)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(g,P)|0)+(tf>>>16)|0)+(ef>>>16)|0;F=ef<<16|ff&0xffff;ff=((yf(x,S)|0)+(rf&0xffff)|0)+(q&0xffff)|0;tf=((yf(g,S)|0)+(rf>>>16)|0)+(q>>>16)|0;ef=((yf(x,D)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(g,D)|0)+(tf>>>16)|0)+(ef>>>16)|0;q=ef<<16|ff&0xffff;ff=((yf(x,U)|0)+(rf&0xffff)|0)+(V&0xffff)|0;tf=((yf(g,U)|0)+(rf>>>16)|0)+(V>>>16)|0;ef=((yf(x,R)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(g,R)|0)+(tf>>>16)|0)+(ef>>>16)|0;V=ef<<16|ff&0xffff;ff=((yf(x,M)|0)+(rf&0xffff)|0)+(K&0xffff)|0;tf=((yf(g,M)|0)+(rf>>>16)|0)+(K>>>16)|0;ef=((yf(x,T)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(g,T)|0)+(tf>>>16)|0)+(ef>>>16)|0;K=ef<<16|ff&0xffff;ff=((yf(x,O)|0)+(rf&0xffff)|0)+(W&0xffff)|0;tf=((yf(g,O)|0)+(rf>>>16)|0)+(W>>>16)|0;ef=((yf(x,Z)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(g,Z)|0)+(tf>>>16)|0)+(ef>>>16)|0;W=ef<<16|ff&0xffff;J=rf;ff=((yf(c,A)|0)+(Q&0xffff)|0)+(N&0xffff)|0;tf=((yf(_,A)|0)+(Q>>>16)|0)+(N>>>16)|0;ef=((yf(c,H)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(_,H)|0)+(tf>>>16)|0)+(ef>>>16)|0;N=ef<<16|ff&0xffff;ff=((yf(c,m)|0)+(rf&0xffff)|0)+(j&0xffff)|0;tf=((yf(_,m)|0)+(rf>>>16)|0)+(j>>>16)|0;ef=((yf(c,L)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(_,L)|0)+(tf>>>16)|0)+(ef>>>16)|0;j=ef<<16|ff&0xffff;ff=((yf(c,E)|0)+(rf&0xffff)|0)+(F&0xffff)|0;tf=((yf(_,E)|0)+(rf>>>16)|0)+(F>>>16)|0;ef=((yf(c,k)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(_,k)|0)+(tf>>>16)|0)+(ef>>>16)|0;F=ef<<16|ff&0xffff;ff=((yf(c,C)|0)+(rf&0xffff)|0)+(q&0xffff)|0;tf=((yf(_,C)|0)+(rf>>>16)|0)+(q>>>16)|0;ef=((yf(c,P)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(_,P)|0)+(tf>>>16)|0)+(ef>>>16)|0;q=ef<<16|ff&0xffff;ff=((yf(c,S)|0)+(rf&0xffff)|0)+(V&0xffff)|0;tf=((yf(_,S)|0)+(rf>>>16)|0)+(V>>>16)|0;ef=((yf(c,D)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(_,D)|0)+(tf>>>16)|0)+(ef>>>16)|0;V=ef<<16|ff&0xffff;ff=((yf(c,U)|0)+(rf&0xffff)|0)+(K&0xffff)|0;tf=((yf(_,U)|0)+(rf>>>16)|0)+(K>>>16)|0;ef=((yf(c,R)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(_,R)|0)+(tf>>>16)|0)+(ef>>>16)|0;K=ef<<16|ff&0xffff;ff=((yf(c,M)|0)+(rf&0xffff)|0)+(W&0xffff)|0;tf=((yf(_,M)|0)+(rf>>>16)|0)+(W>>>16)|0;ef=((yf(c,T)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(_,T)|0)+(tf>>>16)|0)+(ef>>>16)|0;W=ef<<16|ff&0xffff;ff=((yf(c,O)|0)+(rf&0xffff)|0)+(J&0xffff)|0;tf=((yf(_,O)|0)+(rf>>>16)|0)+(J>>>16)|0;ef=((yf(c,Z)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(_,Z)|0)+(tf>>>16)|0)+(ef>>>16)|0;J=ef<<16|ff&0xffff;Q=rf;ff=((yf(h,A)|0)+(X&0xffff)|0)+(j&0xffff)|0;tf=((yf(v,A)|0)+(X>>>16)|0)+(j>>>16)|0;ef=((yf(h,H)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(v,H)|0)+(tf>>>16)|0)+(ef>>>16)|0;j=ef<<16|ff&0xffff;ff=((yf(h,m)|0)+(rf&0xffff)|0)+(F&0xffff)|0;tf=((yf(v,m)|0)+(rf>>>16)|0)+(F>>>16)|0;ef=((yf(h,L)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(v,L)|0)+(tf>>>16)|0)+(ef>>>16)|0;F=ef<<16|ff&0xffff;ff=((yf(h,E)|0)+(rf&0xffff)|0)+(q&0xffff)|0;tf=((yf(v,E)|0)+(rf>>>16)|0)+(q>>>16)|0;ef=((yf(h,k)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(v,k)|0)+(tf>>>16)|0)+(ef>>>16)|0;q=ef<<16|ff&0xffff;ff=((yf(h,C)|0)+(rf&0xffff)|0)+(V&0xffff)|0;tf=((yf(v,C)|0)+(rf>>>16)|0)+(V>>>16)|0;ef=((yf(h,P)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(v,P)|0)+(tf>>>16)|0)+(ef>>>16)|0;V=ef<<16|ff&0xffff;ff=((yf(h,S)|0)+(rf&0xffff)|0)+(K&0xffff)|0;tf=((yf(v,S)|0)+(rf>>>16)|0)+(K>>>16)|0;ef=((yf(h,D)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(v,D)|0)+(tf>>>16)|0)+(ef>>>16)|0;K=ef<<16|ff&0xffff;ff=((yf(h,U)|0)+(rf&0xffff)|0)+(W&0xffff)|0;tf=((yf(v,U)|0)+(rf>>>16)|0)+(W>>>16)|0;ef=((yf(h,R)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(v,R)|0)+(tf>>>16)|0)+(ef>>>16)|0;W=ef<<16|ff&0xffff;ff=((yf(h,M)|0)+(rf&0xffff)|0)+(J&0xffff)|0;tf=((yf(v,M)|0)+(rf>>>16)|0)+(J>>>16)|0;ef=((yf(h,T)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(v,T)|0)+(tf>>>16)|0)+(ef>>>16)|0;J=ef<<16|ff&0xffff;ff=((yf(h,O)|0)+(rf&0xffff)|0)+(Q&0xffff)|0;tf=((yf(v,O)|0)+(rf>>>16)|0)+(Q>>>16)|0;ef=((yf(h,Z)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(v,Z)|0)+(tf>>>16)|0)+(ef>>>16)|0;Q=ef<<16|ff&0xffff;X=rf;ff=((yf(u,A)|0)+(Y&0xffff)|0)+(F&0xffff)|0;tf=((yf(d,A)|0)+(Y>>>16)|0)+(F>>>16)|0;ef=((yf(u,H)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(d,H)|0)+(tf>>>16)|0)+(ef>>>16)|0;F=ef<<16|ff&0xffff;ff=((yf(u,m)|0)+(rf&0xffff)|0)+(q&0xffff)|0;tf=((yf(d,m)|0)+(rf>>>16)|0)+(q>>>16)|0;ef=((yf(u,L)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(d,L)|0)+(tf>>>16)|0)+(ef>>>16)|0;q=ef<<16|ff&0xffff;ff=((yf(u,E)|0)+(rf&0xffff)|0)+(V&0xffff)|0;tf=((yf(d,E)|0)+(rf>>>16)|0)+(V>>>16)|0;ef=((yf(u,k)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(d,k)|0)+(tf>>>16)|0)+(ef>>>16)|0;V=ef<<16|ff&0xffff;ff=((yf(u,C)|0)+(rf&0xffff)|0)+(K&0xffff)|0;tf=((yf(d,C)|0)+(rf>>>16)|0)+(K>>>16)|0;ef=((yf(u,P)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(d,P)|0)+(tf>>>16)|0)+(ef>>>16)|0;K=ef<<16|ff&0xffff;ff=((yf(u,S)|0)+(rf&0xffff)|0)+(W&0xffff)|0;tf=((yf(d,S)|0)+(rf>>>16)|0)+(W>>>16)|0;ef=((yf(u,D)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(d,D)|0)+(tf>>>16)|0)+(ef>>>16)|0;W=ef<<16|ff&0xffff;ff=((yf(u,U)|0)+(rf&0xffff)|0)+(J&0xffff)|0;tf=((yf(d,U)|0)+(rf>>>16)|0)+(J>>>16)|0;ef=((yf(u,R)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(d,R)|0)+(tf>>>16)|0)+(ef>>>16)|0;J=ef<<16|ff&0xffff;ff=((yf(u,M)|0)+(rf&0xffff)|0)+(Q&0xffff)|0;tf=((yf(d,M)|0)+(rf>>>16)|0)+(Q>>>16)|0;ef=((yf(u,T)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(d,T)|0)+(tf>>>16)|0)+(ef>>>16)|0;Q=ef<<16|ff&0xffff;ff=((yf(u,O)|0)+(rf&0xffff)|0)+(X&0xffff)|0;tf=((yf(d,O)|0)+(rf>>>16)|0)+(X>>>16)|0;ef=((yf(u,Z)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(d,Z)|0)+(tf>>>16)|0)+(ef>>>16)|0;X=ef<<16|ff&0xffff;Y=rf;ff=((yf(l,A)|0)+($&0xffff)|0)+(q&0xffff)|0;tf=((yf(w,A)|0)+($>>>16)|0)+(q>>>16)|0;ef=((yf(l,H)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(w,H)|0)+(tf>>>16)|0)+(ef>>>16)|0;q=ef<<16|ff&0xffff;ff=((yf(l,m)|0)+(rf&0xffff)|0)+(V&0xffff)|0;tf=((yf(w,m)|0)+(rf>>>16)|0)+(V>>>16)|0;ef=((yf(l,L)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(w,L)|0)+(tf>>>16)|0)+(ef>>>16)|0;V=ef<<16|ff&0xffff;ff=((yf(l,E)|0)+(rf&0xffff)|0)+(K&0xffff)|0;tf=((yf(w,E)|0)+(rf>>>16)|0)+(K>>>16)|0;ef=((yf(l,k)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(w,k)|0)+(tf>>>16)|0)+(ef>>>16)|0;K=ef<<16|ff&0xffff;ff=((yf(l,C)|0)+(rf&0xffff)|0)+(W&0xffff)|0;tf=((yf(w,C)|0)+(rf>>>16)|0)+(W>>>16)|0;ef=((yf(l,P)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(w,P)|0)+(tf>>>16)|0)+(ef>>>16)|0;W=ef<<16|ff&0xffff;ff=((yf(l,S)|0)+(rf&0xffff)|0)+(J&0xffff)|0;tf=((yf(w,S)|0)+(rf>>>16)|0)+(J>>>16)|0;ef=((yf(l,D)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(w,D)|0)+(tf>>>16)|0)+(ef>>>16)|0;J=ef<<16|ff&0xffff;ff=((yf(l,U)|0)+(rf&0xffff)|0)+(Q&0xffff)|0;tf=((yf(w,U)|0)+(rf>>>16)|0)+(Q>>>16)|0;ef=((yf(l,R)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(w,R)|0)+(tf>>>16)|0)+(ef>>>16)|0;Q=ef<<16|ff&0xffff;ff=((yf(l,M)|0)+(rf&0xffff)|0)+(X&0xffff)|0;tf=((yf(w,M)|0)+(rf>>>16)|0)+(X>>>16)|0;ef=((yf(l,T)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(w,T)|0)+(tf>>>16)|0)+(ef>>>16)|0;X=ef<<16|ff&0xffff;ff=((yf(l,O)|0)+(rf&0xffff)|0)+(Y&0xffff)|0;tf=((yf(w,O)|0)+(rf>>>16)|0)+(Y>>>16)|0;ef=((yf(l,Z)|0)+(tf&0xffff)|0)+(ff>>>16)|0;rf=((yf(w,Z)|0)+(tf>>>16)|0)+(ef>>>16)|0;Y=ef<<16|ff&0xffff;$=rf;pf[(xf|0)>>2]=B,pf[(xf|4)>>2]=I,pf[(xf|8)>>2]=z,pf[(xf|12)>>2]=G,pf[(xf|16)>>2]=N,pf[(xf|20)>>2]=j,pf[(xf|24)>>2]=F,pf[(xf|28)>>2]=q}xf=n+(nf+sf|0)|0;pf[(xf|0)>>2]=V,pf[(xf|4)>>2]=K,pf[(xf|8)>>2]=W,pf[(xf|12)>>2]=J,pf[(xf|16)>>2]=Q,pf[(xf|20)>>2]=X,pf[(xf|24)>>2]=Y,pf[(xf|28)>>2]=$}}function x(f,t,e){f=f|0;t=t|0;e=e|0;var r=0,n=0,i=0,a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0,p=0,y=0,b=0,g=0,_=0,v=0,d=0,w=0,A=0,m=0,E=0,C=0,S=0,U=0,M=0,O=0,H=0,L=0,k=0,P=0,D=0,R=0,T=0,Z=0,B=0,I=0,z=0,G=0,N=0,j=0,F=0,q=0,V=0,K=0,W=0,J=0,Q=0,X=0,Y=0,$=0,ff=0,tf=0,ef=0,rf=0,nf=0,af=0,sf=0,of=0,xf=0,cf=0,hf=0,uf=0,lf=0;for(;(of|0)<(t|0);of=of+4|0){lf=e+(of<<1)|0;h=pf[f+of>>2]|0,r=h&0xffff,h=h>>>16;X=yf(r,r)|0;Y=(yf(r,h)|0)+(X>>>17)|0;$=(yf(h,h)|0)+(Y>>>15)|0;pf[lf>>2]=Y<<17|X&0x1ffff;pf[(lf|4)>>2]=$}for(sf=0;(sf|0)<(t|0);sf=sf+8|0){hf=f+sf|0,lf=e+(sf<<1)|0;h=pf[hf>>2]|0,r=h&0xffff,h=h>>>16;U=pf[(hf|4)>>2]|0,v=U&0xffff,U=U>>>16;X=yf(r,v)|0;Y=(yf(r,U)|0)+(X>>>16)|0;$=(yf(h,v)|0)+(Y&0xffff)|0;ef=((yf(h,U)|0)+(Y>>>16)|0)+($>>>16)|0;rf=pf[(lf|4)>>2]|0;X=(rf&0xffff)+((X&0xffff)<<1)|0;$=((rf>>>16)+(($&0xffff)<<1)|0)+(X>>>16)|0;pf[(lf|4)>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[(lf|8)>>2]|0;X=((rf&0xffff)+((ef&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(ef>>>16<<1)|0)+(X>>>16)|0;pf[(lf|8)>>2]=$<<16|X&0xffff;ff=$>>>16;if(ff){rf=pf[(lf|12)>>2]|0;X=(rf&0xffff)+ff|0;$=(rf>>>16)+(X>>>16)|0;pf[(lf|12)>>2]=$<<16|X&0xffff}}for(sf=0;(sf|0)<(t|0);sf=sf+16|0){hf=f+sf|0,lf=e+(sf<<1)|0;h=pf[hf>>2]|0,r=h&0xffff,h=h>>>16,u=pf[(hf|4)>>2]|0,n=u&0xffff,u=u>>>16;U=pf[(hf|8)>>2]|0,v=U&0xffff,U=U>>>16,M=pf[(hf|12)>>2]|0,d=M&0xffff,M=M>>>16;X=yf(r,v)|0;Y=yf(h,v)|0;$=((yf(r,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,U)|0)+(Y>>>16)|0)+($>>>16)|0;R=$<<16|X&0xffff;X=(yf(r,d)|0)+(ef&0xffff)|0;Y=(yf(h,d)|0)+(ef>>>16)|0;$=((yf(r,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,M)|0)+(Y>>>16)|0)+($>>>16)|0;T=$<<16|X&0xffff;Z=ef;X=(yf(n,v)|0)+(T&0xffff)|0;Y=(yf(u,v)|0)+(T>>>16)|0;$=((yf(n,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,U)|0)+(Y>>>16)|0)+($>>>16)|0;T=$<<16|X&0xffff;X=((yf(n,d)|0)+(Z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,d)|0)+(Z>>>16)|0)+(ef>>>16)|0;$=((yf(n,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,M)|0)+(Y>>>16)|0)+($>>>16)|0;Z=$<<16|X&0xffff;B=ef;rf=pf[(lf|8)>>2]|0;X=(rf&0xffff)+((R&0xffff)<<1)|0;$=((rf>>>16)+(R>>>16<<1)|0)+(X>>>16)|0;pf[(lf|8)>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[(lf|12)>>2]|0;X=((rf&0xffff)+((T&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(T>>>16<<1)|0)+(X>>>16)|0;pf[(lf|12)>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[(lf|16)>>2]|0;X=((rf&0xffff)+((Z&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(Z>>>16<<1)|0)+(X>>>16)|0;pf[(lf|16)>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[(lf|20)>>2]|0;X=((rf&0xffff)+((B&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(B>>>16<<1)|0)+(X>>>16)|0;pf[(lf|20)>>2]=$<<16|X&0xffff;ff=$>>>16;for(cf=24;!!ff&(cf|0)<32;cf=cf+4|0){rf=pf[(lf|cf)>>2]|0;X=(rf&0xffff)+ff|0;$=(rf>>>16)+(X>>>16)|0;pf[(lf|cf)>>2]=$<<16|X&0xffff;ff=$>>>16}}for(sf=0;(sf|0)<(t|0);sf=sf+32|0){hf=f+sf|0,lf=e+(sf<<1)|0;h=pf[hf>>2]|0,r=h&0xffff,h=h>>>16,u=pf[(hf|4)>>2]|0,n=u&0xffff,u=u>>>16,l=pf[(hf|8)>>2]|0,i=l&0xffff,l=l>>>16,p=pf[(hf|12)>>2]|0,a=p&0xffff,p=p>>>16;U=pf[(hf|16)>>2]|0,v=U&0xffff,U=U>>>16,M=pf[(hf|20)>>2]|0,d=M&0xffff,M=M>>>16,O=pf[(hf|24)>>2]|0,w=O&0xffff,O=O>>>16,H=pf[(hf|28)>>2]|0,A=H&0xffff,H=H>>>16;X=yf(r,v)|0;Y=yf(h,v)|0;$=((yf(r,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,U)|0)+(Y>>>16)|0)+($>>>16)|0;R=$<<16|X&0xffff;X=(yf(r,d)|0)+(ef&0xffff)|0;Y=(yf(h,d)|0)+(ef>>>16)|0;$=((yf(r,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,M)|0)+(Y>>>16)|0)+($>>>16)|0;T=$<<16|X&0xffff;X=(yf(r,w)|0)+(ef&0xffff)|0;Y=(yf(h,w)|0)+(ef>>>16)|0;$=((yf(r,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,O)|0)+(Y>>>16)|0)+($>>>16)|0;Z=$<<16|X&0xffff;X=(yf(r,A)|0)+(ef&0xffff)|0;Y=(yf(h,A)|0)+(ef>>>16)|0;$=((yf(r,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,H)|0)+(Y>>>16)|0)+($>>>16)|0;B=$<<16|X&0xffff;I=ef;X=(yf(n,v)|0)+(T&0xffff)|0;Y=(yf(u,v)|0)+(T>>>16)|0;$=((yf(n,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,U)|0)+(Y>>>16)|0)+($>>>16)|0;T=$<<16|X&0xffff;X=((yf(n,d)|0)+(Z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,d)|0)+(Z>>>16)|0)+(ef>>>16)|0;$=((yf(n,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,M)|0)+(Y>>>16)|0)+($>>>16)|0;Z=$<<16|X&0xffff;X=((yf(n,w)|0)+(B&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,w)|0)+(B>>>16)|0)+(ef>>>16)|0;$=((yf(n,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,O)|0)+(Y>>>16)|0)+($>>>16)|0;B=$<<16|X&0xffff;X=((yf(n,A)|0)+(I&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,A)|0)+(I>>>16)|0)+(ef>>>16)|0;$=((yf(n,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,H)|0)+(Y>>>16)|0)+($>>>16)|0;I=$<<16|X&0xffff;z=ef;X=(yf(i,v)|0)+(Z&0xffff)|0;Y=(yf(l,v)|0)+(Z>>>16)|0;$=((yf(i,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,U)|0)+(Y>>>16)|0)+($>>>16)|0;Z=$<<16|X&0xffff;X=((yf(i,d)|0)+(B&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,d)|0)+(B>>>16)|0)+(ef>>>16)|0;$=((yf(i,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,M)|0)+(Y>>>16)|0)+($>>>16)|0;B=$<<16|X&0xffff;X=((yf(i,w)|0)+(I&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,w)|0)+(I>>>16)|0)+(ef>>>16)|0;$=((yf(i,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,O)|0)+(Y>>>16)|0)+($>>>16)|0;I=$<<16|X&0xffff;X=((yf(i,A)|0)+(z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,A)|0)+(z>>>16)|0)+(ef>>>16)|0;$=((yf(i,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,H)|0)+(Y>>>16)|0)+($>>>16)|0;z=$<<16|X&0xffff;G=ef;X=(yf(a,v)|0)+(B&0xffff)|0;Y=(yf(p,v)|0)+(B>>>16)|0;$=((yf(a,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,U)|0)+(Y>>>16)|0)+($>>>16)|0;B=$<<16|X&0xffff;X=((yf(a,d)|0)+(I&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,d)|0)+(I>>>16)|0)+(ef>>>16)|0;$=((yf(a,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,M)|0)+(Y>>>16)|0)+($>>>16)|0;I=$<<16|X&0xffff;X=((yf(a,w)|0)+(z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,w)|0)+(z>>>16)|0)+(ef>>>16)|0;$=((yf(a,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,O)|0)+(Y>>>16)|0)+($>>>16)|0;z=$<<16|X&0xffff;X=((yf(a,A)|0)+(G&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,A)|0)+(G>>>16)|0)+(ef>>>16)|0;$=((yf(a,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,H)|0)+(Y>>>16)|0)+($>>>16)|0;G=$<<16|X&0xffff;N=ef;rf=pf[(lf|16)>>2]|0;X=(rf&0xffff)+((R&0xffff)<<1)|0;$=((rf>>>16)+(R>>>16<<1)|0)+(X>>>16)|0;pf[(lf|16)>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[(lf|20)>>2]|0;X=((rf&0xffff)+((T&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(T>>>16<<1)|0)+(X>>>16)|0;pf[(lf|20)>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[(lf|24)>>2]|0;X=((rf&0xffff)+((Z&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(Z>>>16<<1)|0)+(X>>>16)|0;pf[(lf|24)>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[(lf|28)>>2]|0;X=((rf&0xffff)+((B&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(B>>>16<<1)|0)+(X>>>16)|0;pf[(lf|28)>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[lf+32>>2]|0;X=((rf&0xffff)+((I&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(I>>>16<<1)|0)+(X>>>16)|0;pf[lf+32>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[lf+36>>2]|0;X=((rf&0xffff)+((z&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(z>>>16<<1)|0)+(X>>>16)|0;pf[lf+36>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[lf+40>>2]|0;X=((rf&0xffff)+((G&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(G>>>16<<1)|0)+(X>>>16)|0;pf[lf+40>>2]=$<<16|X&0xffff;ff=$>>>16;rf=pf[lf+44>>2]|0;X=((rf&0xffff)+((N&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(N>>>16<<1)|0)+(X>>>16)|0;pf[lf+44>>2]=$<<16|X&0xffff;ff=$>>>16;for(cf=48;!!ff&(cf|0)<64;cf=cf+4|0){rf=pf[lf+cf>>2]|0;X=(rf&0xffff)+ff|0;$=(rf>>>16)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16}}for(nf=32;(nf|0)<(t|0);nf=nf<<1){af=nf<<1;for(sf=0;(sf|0)<(t|0);sf=sf+af|0){lf=e+(sf<<1)|0;tf=0;for(of=0;(of|0)<(nf|0);of=of+32|0){hf=(f+sf|0)+of|0;h=pf[hf>>2]|0,r=h&0xffff,h=h>>>16,u=pf[(hf|4)>>2]|0,n=u&0xffff,u=u>>>16,l=pf[(hf|8)>>2]|0,i=l&0xffff,l=l>>>16,p=pf[(hf|12)>>2]|0,a=p&0xffff,p=p>>>16,y=pf[(hf|16)>>2]|0,s=y&0xffff,y=y>>>16,b=pf[(hf|20)>>2]|0,o=b&0xffff,b=b>>>16,g=pf[(hf|24)>>2]|0,x=g&0xffff,g=g>>>16,_=pf[(hf|28)>>2]|0,c=_&0xffff,_=_>>>16;j=F=q=V=K=W=J=Q=ff=0;for(xf=0;(xf|0)<(nf|0);xf=xf+32|0){uf=((f+sf|0)+nf|0)+xf|0;U=pf[uf>>2]|0,v=U&0xffff,U=U>>>16,M=pf[(uf|4)>>2]|0,d=M&0xffff,M=M>>>16,O=pf[(uf|8)>>2]|0,w=O&0xffff,O=O>>>16,H=pf[(uf|12)>>2]|0,A=H&0xffff,H=H>>>16,L=pf[(uf|16)>>2]|0,m=L&0xffff,L=L>>>16,k=pf[(uf|20)>>2]|0,E=k&0xffff,k=k>>>16,P=pf[(uf|24)>>2]|0,C=P&0xffff,P=P>>>16,D=pf[(uf|28)>>2]|0,S=D&0xffff,D=D>>>16;R=T=Z=B=I=z=G=N=0;X=((yf(r,v)|0)+(R&0xffff)|0)+(j&0xffff)|0;Y=((yf(h,v)|0)+(R>>>16)|0)+(j>>>16)|0;$=((yf(r,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,U)|0)+(Y>>>16)|0)+($>>>16)|0;R=$<<16|X&0xffff;X=((yf(r,d)|0)+(T&0xffff)|0)+(ef&0xffff)|0;Y=((yf(h,d)|0)+(T>>>16)|0)+(ef>>>16)|0;$=((yf(r,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,M)|0)+(Y>>>16)|0)+($>>>16)|0;T=$<<16|X&0xffff;X=((yf(r,w)|0)+(Z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(h,w)|0)+(Z>>>16)|0)+(ef>>>16)|0;$=((yf(r,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,O)|0)+(Y>>>16)|0)+($>>>16)|0;Z=$<<16|X&0xffff;X=((yf(r,A)|0)+(B&0xffff)|0)+(ef&0xffff)|0;Y=((yf(h,A)|0)+(B>>>16)|0)+(ef>>>16)|0;$=((yf(r,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,H)|0)+(Y>>>16)|0)+($>>>16)|0;B=$<<16|X&0xffff;X=((yf(r,m)|0)+(I&0xffff)|0)+(ef&0xffff)|0;Y=((yf(h,m)|0)+(I>>>16)|0)+(ef>>>16)|0;$=((yf(r,L)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,L)|0)+(Y>>>16)|0)+($>>>16)|0;I=$<<16|X&0xffff;X=((yf(r,E)|0)+(z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(h,E)|0)+(z>>>16)|0)+(ef>>>16)|0;$=((yf(r,k)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,k)|0)+(Y>>>16)|0)+($>>>16)|0;z=$<<16|X&0xffff;X=((yf(r,C)|0)+(G&0xffff)|0)+(ef&0xffff)|0;Y=((yf(h,C)|0)+(G>>>16)|0)+(ef>>>16)|0;$=((yf(r,P)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,P)|0)+(Y>>>16)|0)+($>>>16)|0;G=$<<16|X&0xffff;X=((yf(r,S)|0)+(N&0xffff)|0)+(ef&0xffff)|0;Y=((yf(h,S)|0)+(N>>>16)|0)+(ef>>>16)|0;$=((yf(r,D)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(h,D)|0)+(Y>>>16)|0)+($>>>16)|0;N=$<<16|X&0xffff;j=ef;X=((yf(n,v)|0)+(T&0xffff)|0)+(F&0xffff)|0;Y=((yf(u,v)|0)+(T>>>16)|0)+(F>>>16)|0;$=((yf(n,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,U)|0)+(Y>>>16)|0)+($>>>16)|0;T=$<<16|X&0xffff;X=((yf(n,d)|0)+(Z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,d)|0)+(Z>>>16)|0)+(ef>>>16)|0;$=((yf(n,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,M)|0)+(Y>>>16)|0)+($>>>16)|0;Z=$<<16|X&0xffff;X=((yf(n,w)|0)+(B&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,w)|0)+(B>>>16)|0)+(ef>>>16)|0;$=((yf(n,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,O)|0)+(Y>>>16)|0)+($>>>16)|0;B=$<<16|X&0xffff;X=((yf(n,A)|0)+(I&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,A)|0)+(I>>>16)|0)+(ef>>>16)|0;$=((yf(n,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,H)|0)+(Y>>>16)|0)+($>>>16)|0;I=$<<16|X&0xffff;X=((yf(n,m)|0)+(z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,m)|0)+(z>>>16)|0)+(ef>>>16)|0;$=((yf(n,L)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,L)|0)+(Y>>>16)|0)+($>>>16)|0;z=$<<16|X&0xffff;X=((yf(n,E)|0)+(G&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,E)|0)+(G>>>16)|0)+(ef>>>16)|0;$=((yf(n,k)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,k)|0)+(Y>>>16)|0)+($>>>16)|0;G=$<<16|X&0xffff;X=((yf(n,C)|0)+(N&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,C)|0)+(N>>>16)|0)+(ef>>>16)|0;$=((yf(n,P)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,P)|0)+(Y>>>16)|0)+($>>>16)|0;N=$<<16|X&0xffff;X=((yf(n,S)|0)+(j&0xffff)|0)+(ef&0xffff)|0;Y=((yf(u,S)|0)+(j>>>16)|0)+(ef>>>16)|0;$=((yf(n,D)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(u,D)|0)+(Y>>>16)|0)+($>>>16)|0;j=$<<16|X&0xffff;F=ef;X=((yf(i,v)|0)+(Z&0xffff)|0)+(q&0xffff)|0;Y=((yf(l,v)|0)+(Z>>>16)|0)+(q>>>16)|0;$=((yf(i,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,U)|0)+(Y>>>16)|0)+($>>>16)|0;Z=$<<16|X&0xffff;X=((yf(i,d)|0)+(B&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,d)|0)+(B>>>16)|0)+(ef>>>16)|0;$=((yf(i,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,M)|0)+(Y>>>16)|0)+($>>>16)|0;B=$<<16|X&0xffff;X=((yf(i,w)|0)+(I&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,w)|0)+(I>>>16)|0)+(ef>>>16)|0;$=((yf(i,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,O)|0)+(Y>>>16)|0)+($>>>16)|0;I=$<<16|X&0xffff;X=((yf(i,A)|0)+(z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,A)|0)+(z>>>16)|0)+(ef>>>16)|0;$=((yf(i,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,H)|0)+(Y>>>16)|0)+($>>>16)|0;z=$<<16|X&0xffff;X=((yf(i,m)|0)+(G&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,m)|0)+(G>>>16)|0)+(ef>>>16)|0;$=((yf(i,L)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,L)|0)+(Y>>>16)|0)+($>>>16)|0;G=$<<16|X&0xffff;X=((yf(i,E)|0)+(N&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,E)|0)+(N>>>16)|0)+(ef>>>16)|0;$=((yf(i,k)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,k)|0)+(Y>>>16)|0)+($>>>16)|0;N=$<<16|X&0xffff;X=((yf(i,C)|0)+(j&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,C)|0)+(j>>>16)|0)+(ef>>>16)|0;$=((yf(i,P)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,P)|0)+(Y>>>16)|0)+($>>>16)|0;j=$<<16|X&0xffff;X=((yf(i,S)|0)+(F&0xffff)|0)+(ef&0xffff)|0;Y=((yf(l,S)|0)+(F>>>16)|0)+(ef>>>16)|0;$=((yf(i,D)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(l,D)|0)+(Y>>>16)|0)+($>>>16)|0;F=$<<16|X&0xffff;q=ef;X=((yf(a,v)|0)+(B&0xffff)|0)+(V&0xffff)|0;Y=((yf(p,v)|0)+(B>>>16)|0)+(V>>>16)|0;$=((yf(a,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,U)|0)+(Y>>>16)|0)+($>>>16)|0;B=$<<16|X&0xffff;X=((yf(a,d)|0)+(I&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,d)|0)+(I>>>16)|0)+(ef>>>16)|0;$=((yf(a,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,M)|0)+(Y>>>16)|0)+($>>>16)|0;I=$<<16|X&0xffff;X=((yf(a,w)|0)+(z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,w)|0)+(z>>>16)|0)+(ef>>>16)|0;$=((yf(a,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,O)|0)+(Y>>>16)|0)+($>>>16)|0;z=$<<16|X&0xffff;X=((yf(a,A)|0)+(G&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,A)|0)+(G>>>16)|0)+(ef>>>16)|0;$=((yf(a,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,H)|0)+(Y>>>16)|0)+($>>>16)|0;G=$<<16|X&0xffff;X=((yf(a,m)|0)+(N&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,m)|0)+(N>>>16)|0)+(ef>>>16)|0;$=((yf(a,L)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,L)|0)+(Y>>>16)|0)+($>>>16)|0;N=$<<16|X&0xffff;X=((yf(a,E)|0)+(j&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,E)|0)+(j>>>16)|0)+(ef>>>16)|0;$=((yf(a,k)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,k)|0)+(Y>>>16)|0)+($>>>16)|0;j=$<<16|X&0xffff;X=((yf(a,C)|0)+(F&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,C)|0)+(F>>>16)|0)+(ef>>>16)|0;$=((yf(a,P)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,P)|0)+(Y>>>16)|0)+($>>>16)|0;F=$<<16|X&0xffff;X=((yf(a,S)|0)+(q&0xffff)|0)+(ef&0xffff)|0;Y=((yf(p,S)|0)+(q>>>16)|0)+(ef>>>16)|0;$=((yf(a,D)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(p,D)|0)+(Y>>>16)|0)+($>>>16)|0;q=$<<16|X&0xffff;V=ef;X=((yf(s,v)|0)+(I&0xffff)|0)+(K&0xffff)|0;Y=((yf(y,v)|0)+(I>>>16)|0)+(K>>>16)|0;$=((yf(s,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(y,U)|0)+(Y>>>16)|0)+($>>>16)|0;I=$<<16|X&0xffff;X=((yf(s,d)|0)+(z&0xffff)|0)+(ef&0xffff)|0;Y=((yf(y,d)|0)+(z>>>16)|0)+(ef>>>16)|0;$=((yf(s,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(y,M)|0)+(Y>>>16)|0)+($>>>16)|0;z=$<<16|X&0xffff;X=((yf(s,w)|0)+(G&0xffff)|0)+(ef&0xffff)|0;Y=((yf(y,w)|0)+(G>>>16)|0)+(ef>>>16)|0;$=((yf(s,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(y,O)|0)+(Y>>>16)|0)+($>>>16)|0;G=$<<16|X&0xffff;X=((yf(s,A)|0)+(N&0xffff)|0)+(ef&0xffff)|0;Y=((yf(y,A)|0)+(N>>>16)|0)+(ef>>>16)|0;$=((yf(s,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(y,H)|0)+(Y>>>16)|0)+($>>>16)|0;N=$<<16|X&0xffff;X=((yf(s,m)|0)+(j&0xffff)|0)+(ef&0xffff)|0;Y=((yf(y,m)|0)+(j>>>16)|0)+(ef>>>16)|0;$=((yf(s,L)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(y,L)|0)+(Y>>>16)|0)+($>>>16)|0;j=$<<16|X&0xffff;X=((yf(s,E)|0)+(F&0xffff)|0)+(ef&0xffff)|0;Y=((yf(y,E)|0)+(F>>>16)|0)+(ef>>>16)|0;$=((yf(s,k)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(y,k)|0)+(Y>>>16)|0)+($>>>16)|0;F=$<<16|X&0xffff;X=((yf(s,C)|0)+(q&0xffff)|0)+(ef&0xffff)|0;Y=((yf(y,C)|0)+(q>>>16)|0)+(ef>>>16)|0;$=((yf(s,P)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(y,P)|0)+(Y>>>16)|0)+($>>>16)|0;q=$<<16|X&0xffff;X=((yf(s,S)|0)+(V&0xffff)|0)+(ef&0xffff)|0;Y=((yf(y,S)|0)+(V>>>16)|0)+(ef>>>16)|0;$=((yf(s,D)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(y,D)|0)+(Y>>>16)|0)+($>>>16)|0;V=$<<16|X&0xffff;K=ef;X=((yf(o,v)|0)+(z&0xffff)|0)+(W&0xffff)|0;Y=((yf(b,v)|0)+(z>>>16)|0)+(W>>>16)|0;$=((yf(o,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(b,U)|0)+(Y>>>16)|0)+($>>>16)|0;z=$<<16|X&0xffff;X=((yf(o,d)|0)+(G&0xffff)|0)+(ef&0xffff)|0;Y=((yf(b,d)|0)+(G>>>16)|0)+(ef>>>16)|0;$=((yf(o,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(b,M)|0)+(Y>>>16)|0)+($>>>16)|0;G=$<<16|X&0xffff;X=((yf(o,w)|0)+(N&0xffff)|0)+(ef&0xffff)|0;Y=((yf(b,w)|0)+(N>>>16)|0)+(ef>>>16)|0;$=((yf(o,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(b,O)|0)+(Y>>>16)|0)+($>>>16)|0;N=$<<16|X&0xffff;X=((yf(o,A)|0)+(j&0xffff)|0)+(ef&0xffff)|0;Y=((yf(b,A)|0)+(j>>>16)|0)+(ef>>>16)|0;$=((yf(o,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(b,H)|0)+(Y>>>16)|0)+($>>>16)|0;j=$<<16|X&0xffff;X=((yf(o,m)|0)+(F&0xffff)|0)+(ef&0xffff)|0;Y=((yf(b,m)|0)+(F>>>16)|0)+(ef>>>16)|0;$=((yf(o,L)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(b,L)|0)+(Y>>>16)|0)+($>>>16)|0;F=$<<16|X&0xffff;X=((yf(o,E)|0)+(q&0xffff)|0)+(ef&0xffff)|0;Y=((yf(b,E)|0)+(q>>>16)|0)+(ef>>>16)|0;$=((yf(o,k)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(b,k)|0)+(Y>>>16)|0)+($>>>16)|0;q=$<<16|X&0xffff;X=((yf(o,C)|0)+(V&0xffff)|0)+(ef&0xffff)|0;Y=((yf(b,C)|0)+(V>>>16)|0)+(ef>>>16)|0;$=((yf(o,P)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(b,P)|0)+(Y>>>16)|0)+($>>>16)|0;V=$<<16|X&0xffff;X=((yf(o,S)|0)+(K&0xffff)|0)+(ef&0xffff)|0;Y=((yf(b,S)|0)+(K>>>16)|0)+(ef>>>16)|0;$=((yf(o,D)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(b,D)|0)+(Y>>>16)|0)+($>>>16)|0;K=$<<16|X&0xffff;W=ef;X=((yf(x,v)|0)+(G&0xffff)|0)+(J&0xffff)|0;Y=((yf(g,v)|0)+(G>>>16)|0)+(J>>>16)|0;$=((yf(x,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(g,U)|0)+(Y>>>16)|0)+($>>>16)|0;G=$<<16|X&0xffff;X=((yf(x,d)|0)+(N&0xffff)|0)+(ef&0xffff)|0;Y=((yf(g,d)|0)+(N>>>16)|0)+(ef>>>16)|0;$=((yf(x,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(g,M)|0)+(Y>>>16)|0)+($>>>16)|0;N=$<<16|X&0xffff;X=((yf(x,w)|0)+(j&0xffff)|0)+(ef&0xffff)|0;Y=((yf(g,w)|0)+(j>>>16)|0)+(ef>>>16)|0;$=((yf(x,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(g,O)|0)+(Y>>>16)|0)+($>>>16)|0;j=$<<16|X&0xffff;X=((yf(x,A)|0)+(F&0xffff)|0)+(ef&0xffff)|0;Y=((yf(g,A)|0)+(F>>>16)|0)+(ef>>>16)|0;$=((yf(x,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(g,H)|0)+(Y>>>16)|0)+($>>>16)|0;F=$<<16|X&0xffff;X=((yf(x,m)|0)+(q&0xffff)|0)+(ef&0xffff)|0;Y=((yf(g,m)|0)+(q>>>16)|0)+(ef>>>16)|0;$=((yf(x,L)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(g,L)|0)+(Y>>>16)|0)+($>>>16)|0;q=$<<16|X&0xffff;X=((yf(x,E)|0)+(V&0xffff)|0)+(ef&0xffff)|0;Y=((yf(g,E)|0)+(V>>>16)|0)+(ef>>>16)|0;$=((yf(x,k)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(g,k)|0)+(Y>>>16)|0)+($>>>16)|0;V=$<<16|X&0xffff;X=((yf(x,C)|0)+(K&0xffff)|0)+(ef&0xffff)|0;Y=((yf(g,C)|0)+(K>>>16)|0)+(ef>>>16)|0;$=((yf(x,P)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(g,P)|0)+(Y>>>16)|0)+($>>>16)|0;K=$<<16|X&0xffff;X=((yf(x,S)|0)+(W&0xffff)|0)+(ef&0xffff)|0;Y=((yf(g,S)|0)+(W>>>16)|0)+(ef>>>16)|0;$=((yf(x,D)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(g,D)|0)+(Y>>>16)|0)+($>>>16)|0;W=$<<16|X&0xffff;J=ef;X=((yf(c,v)|0)+(N&0xffff)|0)+(Q&0xffff)|0;Y=((yf(_,v)|0)+(N>>>16)|0)+(Q>>>16)|0;$=((yf(c,U)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(_,U)|0)+(Y>>>16)|0)+($>>>16)|0;N=$<<16|X&0xffff;X=((yf(c,d)|0)+(j&0xffff)|0)+(ef&0xffff)|0;Y=((yf(_,d)|0)+(j>>>16)|0)+(ef>>>16)|0;$=((yf(c,M)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(_,M)|0)+(Y>>>16)|0)+($>>>16)|0;j=$<<16|X&0xffff;X=((yf(c,w)|0)+(F&0xffff)|0)+(ef&0xffff)|0;Y=((yf(_,w)|0)+(F>>>16)|0)+(ef>>>16)|0;$=((yf(c,O)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(_,O)|0)+(Y>>>16)|0)+($>>>16)|0;F=$<<16|X&0xffff;X=((yf(c,A)|0)+(q&0xffff)|0)+(ef&0xffff)|0;Y=((yf(_,A)|0)+(q>>>16)|0)+(ef>>>16)|0;$=((yf(c,H)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(_,H)|0)+(Y>>>16)|0)+($>>>16)|0;q=$<<16|X&0xffff;X=((yf(c,m)|0)+(V&0xffff)|0)+(ef&0xffff)|0;Y=((yf(_,m)|0)+(V>>>16)|0)+(ef>>>16)|0;$=((yf(c,L)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(_,L)|0)+(Y>>>16)|0)+($>>>16)|0;V=$<<16|X&0xffff;X=((yf(c,E)|0)+(K&0xffff)|0)+(ef&0xffff)|0;Y=((yf(_,E)|0)+(K>>>16)|0)+(ef>>>16)|0;$=((yf(c,k)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(_,k)|0)+(Y>>>16)|0)+($>>>16)|0;K=$<<16|X&0xffff;X=((yf(c,C)|0)+(W&0xffff)|0)+(ef&0xffff)|0;Y=((yf(_,C)|0)+(W>>>16)|0)+(ef>>>16)|0;$=((yf(c,P)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(_,P)|0)+(Y>>>16)|0)+($>>>16)|0;W=$<<16|X&0xffff;X=((yf(c,S)|0)+(J&0xffff)|0)+(ef&0xffff)|0;Y=((yf(_,S)|0)+(J>>>16)|0)+(ef>>>16)|0;$=((yf(c,D)|0)+(Y&0xffff)|0)+(X>>>16)|0;ef=((yf(_,D)|0)+(Y>>>16)|0)+($>>>16)|0;J=$<<16|X&0xffff;Q=ef;cf=nf+(of+xf|0)|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((R&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(R>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((T&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(T>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((Z&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(Z>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((B&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(B>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((I&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(I>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((z&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(z>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((G&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(G>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((N&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(N>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16}cf=nf+(of+xf|0)|0;rf=pf[lf+cf>>2]|0;X=(((rf&0xffff)+((j&0xffff)<<1)|0)+ff|0)+tf|0;$=((rf>>>16)+(j>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((F&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(F>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((q&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(q>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((V&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(V>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((K&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(K>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((W&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(W>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((J&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(J>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;ff=$>>>16;cf=cf+4|0;rf=pf[lf+cf>>2]|0;X=((rf&0xffff)+((Q&0xffff)<<1)|0)+ff|0;$=((rf>>>16)+(Q>>>16<<1)|0)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;tf=$>>>16}for(cf=cf+4|0;!!tf&(cf|0)<af<<1;cf=cf+4|0){rf=pf[lf+cf>>2]|0;X=(rf&0xffff)+tf|0;$=(rf>>>16)+(X>>>16)|0;pf[lf+cf>>2]=$<<16|X&0xffff;tf=$>>>16}}}}function c(f,t,e,r,n){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;var i=0,a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0,p=0,y=0,b=0,g=0,_=0,v=0,d=0,w=0,A=0,m=0;for(w=t-1&-4;(w|0)>=0;w=w-4|0){i=pf[f+w>>2]|0;if(i){t=w;break}}for(w=r-1&-4;(w|0)>=0;w=w-4|0){a=pf[e+w>>2]|0;if(a){r=w;break}}while((a&0x80000000)==0){a=a<<1;s=s+1|0}x=pf[f+t>>2]|0;if(s){o=x>>>(32-s|0);for(w=t-4|0;(w|0)>=0;w=w-4|0){i=pf[f+w>>2]|0;pf[f+w+4>>2]=x<<s|(s?i>>>(32-s|0):0);x=i}pf[f>>2]=x<<s}if(s){c=pf[e+r>>2]|0;for(w=r-4|0;(w|0)>=0;w=w-4|0){a=pf[e+w>>2]|0;pf[e+w+4>>2]=c<<s|a>>>(32-s|0);c=a}pf[e>>2]=c<<s}c=pf[e+r>>2]|0;h=c>>>16,u=c&0xffff;for(w=t;(w|0)>=(r|0);w=w-4|0){A=w-r|0;x=pf[f+w>>2]|0;l=(o>>>0)/(h>>>0)|0,y=(o>>>0)%(h>>>0)|0,g=yf(l,u)|0;while((l|0)==0x10000|g>>>0>(y<<16|x>>>16)>>>0){l=l-1|0,y=y+h|0,g=g-u|0;if((y|0)>=0x10000)break}v=0,d=0;for(m=0;(m|0)<=(r|0);m=m+4|0){a=pf[e+m>>2]|0;g=(yf(l,a&0xffff)|0)+(v>>>16)|0;_=(yf(l,a>>>16)|0)+(g>>>16)|0;a=v&0xffff|g<<16;v=_;i=pf[f+A+m>>2]|0;g=((i&0xffff)-(a&0xffff)|0)+d|0;_=((i>>>16)-(a>>>16)|0)+(g>>16)|0;pf[f+A+m>>2]=_<<16|g&0xffff;d=_>>16}g=((o&0xffff)-(v&0xffff)|0)+d|0;_=((o>>>16)-(v>>>16)|0)+(g>>16)|0;o=_<<16|g&0xffff;d=_>>16;if(d){l=l-1|0;d=0;for(m=0;(m|0)<=(r|0);m=m+4|0){a=pf[e+m>>2]|0;i=pf[f+A+m>>2]|0;g=(i&0xffff)+d|0;_=(i>>>16)+a+(g>>>16)|0;pf[f+A+m>>2]=_<<16|g&0xffff;d=_>>>16}o=o+d|0}x=pf[f+w>>2]|0;i=o<<16|x>>>16;p=(i>>>0)/(h>>>0)|0,b=(i>>>0)%(h>>>0)|0,g=yf(p,u)|0;while((p|0)==0x10000|g>>>0>(b<<16|x&0xffff)>>>0){p=p-1|0,b=b+h|0,g=g-u|0;if((b|0)>=0x10000)break}v=0,d=0;for(m=0;(m|0)<=(r|0);m=m+4|0){a=pf[e+m>>2]|0;g=(yf(p,a&0xffff)|0)+(v&0xffff)|0;_=((yf(p,a>>>16)|0)+(g>>>16)|0)+(v>>>16)|0;a=g&0xffff|_<<16;v=_>>>16;i=pf[f+A+m>>2]|0;g=((i&0xffff)-(a&0xffff)|0)+d|0;_=((i>>>16)-(a>>>16)|0)+(g>>16)|0;d=_>>16;pf[f+A+m>>2]=_<<16|g&0xffff}g=((o&0xffff)-(v&0xffff)|0)+d|0;_=((o>>>16)-(v>>>16)|0)+(g>>16)|0;d=_>>16;if(d){p=p-1|0;d=0;for(m=0;(m|0)<=(r|0);m=m+4|0){a=pf[e+m>>2]|0;i=pf[f+A+m>>2]|0;g=((i&0xffff)+(a&0xffff)|0)+d|0;_=((i>>>16)+(a>>>16)|0)+(g>>>16)|0;d=_>>>16;pf[f+A+m>>2]=g&0xffff|_<<16}}pf[n+A>>2]=l<<16|p;o=pf[f+w>>2]|0}if(s){x=pf[f>>2]|0;for(w=4;(w|0)<=(r|0);w=w+4|0){i=pf[f+w>>2]|0;pf[f+w-4>>2]=i<<(32-s|0)|x>>>s;x=i}pf[f+r>>2]=x>>>s}}function h(f,t,e,r,n,i){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;var a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0,p=0,y=0,b=0,g=0,_=0,v=0;a=d(r<<1)|0;m(r<<1,0,a);A(t,f,a);for(g=0;(g|0)<(r|0);g=g+4|0){o=pf[a+g>>2]|0,x=o&0xffff,o=o>>>16;h=n>>>16,c=n&0xffff;u=yf(x,c)|0,l=((yf(x,h)|0)+(yf(o,c)|0)|0)+(u>>>16)|0;x=u&0xffff,o=l&0xffff;b=0;for(_=0;(_|0)<(r|0);_=_+4|0){v=g+_|0;h=pf[e+_>>2]|0,c=h&0xffff,h=h>>>16;y=pf[a+v>>2]|0;u=((yf(x,c)|0)+(b&0xffff)|0)+(y&0xffff)|0;l=((yf(x,h)|0)+(b>>>16)|0)+(y>>>16)|0;p=((yf(o,c)|0)+(l&0xffff)|0)+(u>>>16)|0;b=((yf(o,h)|0)+(p>>>16)|0)+(l>>>16)|0;y=p<<16|u&0xffff;pf[a+v>>2]=y}v=g+_|0;y=pf[a+v>>2]|0;u=((y&0xffff)+(b&0xffff)|0)+s|0;l=((y>>>16)+(b>>>16)|0)+(u>>>16)|0;pf[a+v>>2]=l<<16|u&0xffff;s=l>>>16}A(r,a+r|0,i);w(r<<1);if(s|(E(e,r,i,r)|0)<=0){C(i,r,e,r,i,r)|0}}return{sreset:n,salloc:d,sfree:w,z:m,tst:a,neg:i,cmp:E,add:s,sub:C,mul:o,sqr:x,div:c,mredc:h}};function I(f,t){var e,r,n,i,a=f<0?-1:1,s=t<0?-1:1,o=1,x=0,c=0,h=1;for(f*=a,t*=s,i=f<t,i&&(n=f,f=t,t=n,n=a,a=s,s=n),r=Math.floor(f/t),e=f-r*t;e;)n=o-r*x,o=x,x=n,n=c-r*h,c=h,h=n,f=t,t=e,r=Math.floor(f/t),e=f-r*t;return x*=a,h*=s,i&&(n=x,x=h,h=n),{gcd:t,x:x,y:h}}function z(f,t){var e=f.sign,r=t.sign;e<0&&(f=f.negate()),r<0&&(t=t.negate());var n=f.compare(t);if(n<0){var i=f;f=t,t=i;var a=e;e=r,r=a}var s,o,x,c=W.ONE,h=W.ZERO,u=t.bitLength,l=W.ZERO,p=W.ONE,y=f.bitLength;for(s=f.divide(t);(o=s.remainder)!==W.ZERO;)x=s.quotient,s=c.subtract(x.multiply(h).clamp(u)).clamp(u),c=h,h=s,s=l.subtract(x.multiply(p).clamp(y)).clamp(y),l=p,p=s,f=t,t=o,s=f.divide(t);if(e<0&&(h=h.negate()),r<0&&(p=p.negate()),n<0){i=h;h=p,p=i}return{gcd:t,x:h,y:p}}function G(f){if("undefined"==typeof process)if(window.crypto&&window.crypto.getRandomValues)window.crypto.getRandomValues(f);else if(self.crypto&&self.crypto.getRandomValues)self.crypto.getRandomValues(f);else{if(!window.msCrypto||!window.msCrypto.getRandomValues)throw new Error("No secure random number generator available.");window.msCrypto.getRandomValues(f)}else{var t=require("crypto"),e=t.randomBytes(f.length);f.set(e)}}var N,j=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),F={Uint32Array:Uint32Array,Math:Math},q=new Uint32Array(1048576);function V(f,t){return f*t|0}void 0===F.Math.imul?(F.Math.imul=V,N=B(F,null,q.buffer),delete F.Math.imul):N=B(F,null,q.buffer);var K=new Uint32Array(0),W=function(){function g(f){var t=K,e=0,r=0;if(void 0===f);else{for(var n=0;!f[n];n++);if(e=8*(f.length-n),!e)return g.ZERO;t=new Uint32Array(e+31>>5);for(var i=f.length-4;n<=i;i-=4)t[f.length-4-i>>2]=f[i]<<24|f[i+1]<<16|f[i+2]<<8|f[i+3];n-i==3?t[t.length-1]=f[n]:n-i==2?t[t.length-1]=f[n]<<8|f[n+1]:n-i==1&&(t[t.length-1]=f[n]<<16|f[n+1]<<8|f[n+2]),r=1}this.limbs=t,this.bitLength=e,this.sign=r}return g.fromString=function(f){var t=r(f);return new g(t)},g.fromNumber=function(f){var t=K,e=0,r=0,n=Math.abs(f);return 4294967295<n?(t=new Uint32Array(2),t[0]=0|n,t[1]=n/4294967296|0,e=52):0<n?(t=new Uint32Array(1),t[0]=n,e=32):(t=K,e=0),r=f<0?-1:1,g.fromConfig({limbs:t,bitLength:e,sign:r})},g.fromArrayBuffer=function(f){return new g(new Uint8Array(f))},g.fromConfig=function(f){var t=new g;return t.limbs=new Uint32Array(f.limbs),t.bitLength=f.bitLength,t.sign=f.sign,t},g.prototype.toString=function(f){f=f||16;var t=this.limbs,e=this.bitLength,r="";if(16!==f)throw new _("bad radix");for(var n=(e+31>>5)-1;0<=n;n--){var i=t[n].toString(16);r+="00000000".substr(i.length),r+=i}return r=r.replace(/^0+/,""),r.length||(r="0"),this.sign<0&&(r="-"+r),r},g.prototype.toBytes=function(){var f=this.bitLength,t=this.limbs;if(0===f)return new Uint8Array(0);for(var e=f+7>>3,r=new Uint8Array(e),n=0;n<e;n++){var i=e-n-1;r[n]=t[i>>2]>>((3&i)<<3)}return r},g.prototype.valueOf=function(){var f=this.limbs,t=this.bitLength,e=this.sign;if(!e)return 0;if(t<=32)return e*(f[0]>>>0);if(t<=52)return e*(4294967296*(f[1]>>>0)+(f[0]>>>0));var r,n,i=0;for(r=f.length-1;0<=r;r--)if(0!==(n=f[r])){for(;0==(n<<i&2147483648);)i++;break}return 0===r?e*(f[0]>>>0):e*(1048576*((f[r]<<i|(i?f[r-1]>>>32-i:0))>>>0)+((f[r-1]<<i|(i&&1<r?f[r-2]>>>32-i:0))>>>12))*Math.pow(2,32*r-i-52)},g.prototype.clamp=function(f){var t=this.limbs,e=this.bitLength;if(e<=f)return this;var r=new g,n=f+31>>5,i=f%32;return r.limbs=new Uint32Array(t.subarray(0,n)),r.bitLength=f,r.sign=this.sign,i&&(r.limbs[n-1]&=-1>>>32-i),r},g.prototype.slice=function(f,t){var e=this.limbs,r=this.bitLength;if(f<0)throw new RangeError("TODO");if(r<=f)return g.ZERO;(void 0===t||r-f<t)&&(t=r-f);var n=new g,i=f>>5,a=f+t+31>>5,s=t+31>>5,o=f%32,x=t%32,c=new Uint32Array(s);if(o){for(var h=0;h<a-i-1;h++)c[h]=e[i+h]>>>o|e[i+h+1]<<32-o;c[h]=e[i+h]>>>o}else c.set(e.subarray(i,a));return x&&(c[s-1]&=-1>>>32-x),n.limbs=c,n.bitLength=t,n.sign=this.sign,n},g.prototype.negate=function(){var f=new g;return f.limbs=this.limbs,f.bitLength=this.bitLength,f.sign=-1*this.sign,f},g.prototype.compare=function(f){var t=this.limbs,e=t.length,r=f.limbs,n=r.length,i=0;return this.sign<f.sign?-1:this.sign>f.sign?1:(q.set(t,0),q.set(r,e),i=N.cmp(0,e<<2,e<<2,n<<2),i*this.sign)},g.prototype.add=function(f){if(!this.sign)return f;if(!f.sign)return this;var t,e,r,n,i=this.bitLength,a=this.limbs,s=a.length,o=this.sign,x=f.bitLength,c=f.limbs,h=c.length,u=f.sign,l=new g;t=(x<i?i:x)+(0<o*u?1:0),e=t+31>>5,N.sreset();var p=N.salloc(s<<2),y=N.salloc(h<<2),b=N.salloc(e<<2);return N.z(b-p+(e<<2),0,p),q.set(a,p>>2),q.set(c,y>>2),0<o*u?(N.add(p,s<<2,y,h<<2,b,e<<2),r=o):u<o?(n=N.sub(p,s<<2,y,h<<2,b,e<<2),r=n?u:o):(n=N.sub(y,h<<2,p,s<<2,b,e<<2),r=n?o:u),n&&N.neg(b,e<<2,b,e<<2),0===N.tst(b,e<<2)?g.ZERO:(l.limbs=new Uint32Array(q.subarray(b>>2,(b>>2)+e)),l.bitLength=t,l.sign=r,l)},g.prototype.subtract=function(f){return this.add(f.negate())},g.prototype.square=function(){if(!this.sign)return g.ZERO;var f,t,e=this.bitLength,r=this.limbs,n=r.length,i=new g;f=e<<1,t=f+31>>5,N.sreset();var a=N.salloc(n<<2),s=N.salloc(t<<2);return N.z(s-a+(t<<2),0,a),q.set(r,a>>2),N.sqr(a,n<<2,s),i.limbs=new Uint32Array(q.subarray(s>>2,(s>>2)+t)),i.bitLength=f,i.sign=1,i},g.prototype.divide=function(f){var t,e,r=this.bitLength,n=this.limbs,i=n.length,a=f.bitLength,s=f.limbs,o=s.length,x=g.ZERO,c=g.ZERO;N.sreset();var h=N.salloc(i<<2),u=N.salloc(o<<2),l=N.salloc(i<<2);return N.z(l-h+(i<<2),0,h),q.set(n,h>>2),q.set(s,u>>2),N.div(h,i<<2,u,o<<2,l),t=N.tst(l,i<<2)>>2,t&&(x=new g,x.limbs=new Uint32Array(q.subarray(l>>2,(l>>2)+t)),x.bitLength=r<t<<5?r:t<<5,x.sign=this.sign*f.sign),e=N.tst(h,o<<2)>>2,e&&(c=new g,c.limbs=new Uint32Array(q.subarray(h>>2,(h>>2)+e)),c.bitLength=a<e<<5?a:e<<5,c.sign=this.sign),{quotient:x,remainder:c}},g.prototype.multiply=function(f){if(!this.sign||!f.sign)return g.ZERO;var t,e,r=this.bitLength,n=this.limbs,i=n.length,a=f.bitLength,s=f.limbs,o=s.length,x=new g;t=r+a,e=t+31>>5,N.sreset();var c=N.salloc(i<<2),h=N.salloc(o<<2),u=N.salloc(e<<2);return N.z(u-c+(e<<2),0,c),q.set(n,c>>2),q.set(s,h>>2),N.mul(c,i<<2,h,o<<2,u,e<<2),x.limbs=new Uint32Array(q.subarray(u>>2,(u>>2)+e)),x.sign=this.sign*f.sign,x.bitLength=t,x},g.prototype.isMillerRabinProbablePrime=function(f){var t=g.fromConfig(this),e=0;for(t.limbs[0]-=1;0===t.limbs[e>>5];)e+=32;for(;0==(t.limbs[e>>5]>>(31&e)&1);)e++;t=t.slice(e);for(var r=new J(this),n=this.subtract(g.ONE),i=g.fromConfig(this),a=this.limbs.length-1;0===i.limbs[a];)a--;for(;0<=--f;){for(G(i.limbs),i.limbs[0]<2&&(i.limbs[0]+=2);0<=i.compare(n);)i.limbs[a]>>>=1;var s=r.power(i,t);if(0!==s.compare(g.ONE)&&0!==s.compare(n)){for(var o=e;0<--o;){if(s=s.square().divide(r).remainder,0===s.compare(g.ONE))return!1;if(0===s.compare(n))break}if(0===o)return!1}}return!0},g.prototype.isProbablePrime=function(f){void 0===f&&(f=80);var t=this.limbs,e=0;if(0==(1&t[0]))return!1;if(f<=1)return!0;var r=0,n=0,i=0;for(e=0;e<t.length;e++){for(var a=t[e];a;)r+=3&a,a>>>=2;for(var s=t[e];s;)n+=3&s,s>>>=2,n-=3&s,s>>>=2;for(var o=t[e];o;)i+=15&o,o>>>=4,i-=15&o,o>>>=4}return!!(r%3&&n%5&&i%17)&&(f<=2||this.isMillerRabinProbablePrime(f>>>1))},g.extGCD=z,g.ZERO=g.fromNumber(0),g.ONE=g.fromNumber(1),g}(),J=function(a){function p(f){var t,e=a.call(this)||this;if(e.limbs=f.limbs,e.bitLength=f.bitLength,e.sign=f.sign,e.valueOf()<1)throw new RangeError;if(e.bitLength<=32)return e;if(!(1&e.limbs[0]))return e;var r=1+(e.bitLength+31&-32),n=new Uint32Array(r+31>>5);n[n.length-1]=1,t=new W,t.sign=1,t.bitLength=r,t.limbs=n;var i=I(4294967296,e.limbs[0]).y;return e.coefficient=i<0?-i:4294967296-i,e.comodulus=t,e.comodulusRemainder=t.divide(e).remainder,e.comodulusRemainderSquare=t.square().divide(e).remainder,e}return j(p,a),p.prototype.reduce=function(f){return f.bitLength<=32&&this.bitLength<=32?W.fromNumber(f.valueOf()%this.valueOf()):f.compare(this)<0?f:f.divide(this).remainder},p.prototype.inverse=function(f){f=this.reduce(f);var t=z(this,f);if(1!==t.gcd.valueOf())throw new Error("GCD is not 1");return t.y.sign<0?t.y.add(this).clamp(this.bitLength):t.y},p.prototype.power=function(f,t){for(var e=0,r=0;r<t.limbs.length;r++)for(var n=t.limbs[r];n;)1&n&&e++,n>>>=1;var i=8;t.bitLength<=4536&&(i=7),t.bitLength<=1736&&(i=6),t.bitLength<=630&&(i=5),t.bitLength<=210&&(i=4),t.bitLength<=60&&(i=3),t.bitLength<=12&&(i=2),e<=1<<i-1&&(i=1),f=p._Montgomery_reduce(this.reduce(f).multiply(this.comodulusRemainderSquare),this);var a=p._Montgomery_reduce(f.square(),this),s=new Array(1<<i-1);s[0]=f,s[1]=p._Montgomery_reduce(f.multiply(a),this);for(r=2;r<1<<i-1;r++)s[r]=p._Montgomery_reduce(s[r-1].multiply(a),this);var o=this.comodulusRemainder,x=o;for(r=t.limbs.length-1;0<=r;r--){n=t.limbs[r];for(var c=32;0<c;)if(2147483648&n){for(var h=n>>>32-i,u=i;0==(1&h);)h>>>=1,u--;for(var l=s[h>>>1];h;)h>>>=1,x!==o&&(x=p._Montgomery_reduce(x.square(),this));x=x!==o?p._Montgomery_reduce(x.multiply(l),this):l,n<<=u,c-=u}else x!==o&&(x=p._Montgomery_reduce(x.square(),this)),n<<=1,c--}return p._Montgomery_reduce(x,this)},p._Montgomery_reduce=function(f,t){var e=f.limbs,r=e.length,n=t.limbs,i=n.length,a=t.coefficient;N.sreset();var s=N.salloc(r<<2),o=N.salloc(i<<2),x=N.salloc(i<<2);N.z(x-s+(i<<2),0,s),q.set(e,s>>2),q.set(n,o>>2),N.mredc(s,r<<2,o,i<<2,a,x);var c=new W;return c.limbs=new Uint32Array(q.subarray(x>>2,(x>>2)+i)),c.bitLength=t.bitLength,c.sign=1,c},p}(W),Q=function(f,t,e){"use asm";var Df=0,Rf=0,Tf=0,Zf=0,Bf=0,b=0,g=0;var _=0,v=0,d=0,w=0,A=0,m=0,E=0,C=0,S=0,U=0;var y=new f.Uint8Array(e);function M(f,t,e,r,n,i,a,s,o,x,c,h,u,l,p,y){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;o=o|0;x=x|0;c=c|0;h=h|0;u=u|0;l=l|0;p=p|0;y=y|0;var b=0,g=0,_=0,v=0,d=0,w=0,A=0,m=0,E=0,C=0,S=0,U=0,M=0,O=0,H=0,L=0,k=0,P=0,D=0,R=0,T=0,Z=0,B=0,I=0,z=0,G=0,N=0,j=0,F=0,q=0,V=0,K=0,W=0,J=0,Q=0,X=0,Y=0,$=0,ff=0,tf=0,ef=0,rf=0,nf=0,af=0,sf=0,of=0,xf=0,cf=0,hf=0,uf=0,lf=0,pf=0,yf=0,bf=0,gf=0,_f=0,vf=0,df=0,wf=0,Af=0,mf=0,Ef=0,Cf=0,Sf=0,Uf=0,Mf=0,Of=0,Hf=0,Lf=0,kf=0,Pf=0;b=Df;g=Rf;_=Tf;v=Zf;d=Bf;A=f+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=t+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=e+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=r+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=n+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=i+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=a+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=s+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=o+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=x+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=c+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=h+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=u+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=l+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=p+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;A=y+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=l^o^e^f;m=w<<1|w>>>31;A=m+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=p^x^r^t;E=w<<1|w>>>31;A=E+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=y^c^n^e;C=w<<1|w>>>31;A=C+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=m^h^i^r;S=w<<1|w>>>31;A=S+(b<<5|b>>>27)+d+(g&_|~g&v)+0x5a827999|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=E^u^a^n;U=w<<1|w>>>31;A=U+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=C^l^s^i;M=w<<1|w>>>31;A=M+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=S^p^o^a;O=w<<1|w>>>31;A=O+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=U^y^x^s;H=w<<1|w>>>31;A=H+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=M^m^c^o;L=w<<1|w>>>31;A=L+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=O^E^h^x;k=w<<1|w>>>31;A=k+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=H^C^u^c;P=w<<1|w>>>31;A=P+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=L^S^l^h;D=w<<1|w>>>31;A=D+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=k^U^p^u;R=w<<1|w>>>31;A=R+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=P^M^y^l;T=w<<1|w>>>31;A=T+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=D^O^m^p;Z=w<<1|w>>>31;A=Z+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=R^H^E^y;B=w<<1|w>>>31;A=B+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=T^L^C^m;I=w<<1|w>>>31;A=I+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Z^k^S^E;z=w<<1|w>>>31;A=z+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=B^P^U^C;G=w<<1|w>>>31;A=G+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=I^D^M^S;N=w<<1|w>>>31;A=N+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=z^R^O^U;j=w<<1|w>>>31;A=j+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=G^T^H^M;F=w<<1|w>>>31;A=F+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=N^Z^L^O;q=w<<1|w>>>31;A=q+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=j^B^k^H;V=w<<1|w>>>31;A=V+(b<<5|b>>>27)+d+(g^_^v)+0x6ed9eba1|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=F^I^P^L;K=w<<1|w>>>31;A=K+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=q^z^D^k;W=w<<1|w>>>31;A=W+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=V^G^R^P;J=w<<1|w>>>31;A=J+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=K^N^T^D;Q=w<<1|w>>>31;A=Q+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=W^j^Z^R;X=w<<1|w>>>31;A=X+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=J^F^B^T;Y=w<<1|w>>>31;A=Y+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Q^q^I^Z;$=w<<1|w>>>31;A=$+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=X^V^z^B;ff=w<<1|w>>>31;A=ff+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Y^K^G^I;tf=w<<1|w>>>31;A=tf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=$^W^N^z;ef=w<<1|w>>>31;A=ef+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=ff^J^j^G;rf=w<<1|w>>>31;A=rf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=tf^Q^F^N;nf=w<<1|w>>>31;A=nf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=ef^X^q^j;af=w<<1|w>>>31;A=af+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=rf^Y^V^F;sf=w<<1|w>>>31;A=sf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=nf^$^K^q;of=w<<1|w>>>31;A=of+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=af^ff^W^V;xf=w<<1|w>>>31;A=xf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=sf^tf^J^K;cf=w<<1|w>>>31;A=cf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=of^ef^Q^W;hf=w<<1|w>>>31;A=hf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=xf^rf^X^J;uf=w<<1|w>>>31;A=uf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=cf^nf^Y^Q;lf=w<<1|w>>>31;A=lf+(b<<5|b>>>27)+d+(g&_|g&v|_&v)-0x70e44324|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=hf^af^$^X;pf=w<<1|w>>>31;A=pf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=uf^sf^ff^Y;yf=w<<1|w>>>31;A=yf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=lf^of^tf^$;bf=w<<1|w>>>31;A=bf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=pf^xf^ef^ff;gf=w<<1|w>>>31;A=gf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=yf^cf^rf^tf;_f=w<<1|w>>>31;A=_f+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=bf^hf^nf^ef;vf=w<<1|w>>>31;A=vf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=gf^uf^af^rf;df=w<<1|w>>>31;A=df+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=_f^lf^sf^nf;wf=w<<1|w>>>31;A=wf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=vf^pf^of^af;Af=w<<1|w>>>31;A=Af+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=df^yf^xf^sf;mf=w<<1|w>>>31;A=mf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=wf^bf^cf^of;Ef=w<<1|w>>>31;A=Ef+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Af^gf^hf^xf;Cf=w<<1|w>>>31;A=Cf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=mf^_f^uf^cf;Sf=w<<1|w>>>31;A=Sf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Ef^vf^lf^hf;Uf=w<<1|w>>>31;A=Uf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Cf^df^pf^uf;Mf=w<<1|w>>>31;A=Mf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Sf^wf^yf^lf;Of=w<<1|w>>>31;A=Of+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Uf^Af^bf^pf;Hf=w<<1|w>>>31;A=Hf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Mf^mf^gf^yf;Lf=w<<1|w>>>31;A=Lf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Of^Ef^_f^bf;kf=w<<1|w>>>31;A=kf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;w=Hf^Cf^vf^gf;Pf=w<<1|w>>>31;A=Pf+(b<<5|b>>>27)+d+(g^_^v)-0x359d3e2a|0;d=v;v=_;_=g<<30|g>>>2;g=b;b=A;Df=Df+b|0;Rf=Rf+g|0;Tf=Tf+_|0;Zf=Zf+v|0;Bf=Bf+d|0}function i(f){f=f|0;M(y[f|0]<<24|y[f|1]<<16|y[f|2]<<8|y[f|3],y[f|4]<<24|y[f|5]<<16|y[f|6]<<8|y[f|7],y[f|8]<<24|y[f|9]<<16|y[f|10]<<8|y[f|11],y[f|12]<<24|y[f|13]<<16|y[f|14]<<8|y[f|15],y[f|16]<<24|y[f|17]<<16|y[f|18]<<8|y[f|19],y[f|20]<<24|y[f|21]<<16|y[f|22]<<8|y[f|23],y[f|24]<<24|y[f|25]<<16|y[f|26]<<8|y[f|27],y[f|28]<<24|y[f|29]<<16|y[f|30]<<8|y[f|31],y[f|32]<<24|y[f|33]<<16|y[f|34]<<8|y[f|35],y[f|36]<<24|y[f|37]<<16|y[f|38]<<8|y[f|39],y[f|40]<<24|y[f|41]<<16|y[f|42]<<8|y[f|43],y[f|44]<<24|y[f|45]<<16|y[f|46]<<8|y[f|47],y[f|48]<<24|y[f|49]<<16|y[f|50]<<8|y[f|51],y[f|52]<<24|y[f|53]<<16|y[f|54]<<8|y[f|55],y[f|56]<<24|y[f|57]<<16|y[f|58]<<8|y[f|59],y[f|60]<<24|y[f|61]<<16|y[f|62]<<8|y[f|63])}function O(f){f=f|0;y[f|0]=Df>>>24;y[f|1]=Df>>>16&255;y[f|2]=Df>>>8&255;y[f|3]=Df&255;y[f|4]=Rf>>>24;y[f|5]=Rf>>>16&255;y[f|6]=Rf>>>8&255;y[f|7]=Rf&255;y[f|8]=Tf>>>24;y[f|9]=Tf>>>16&255;y[f|10]=Tf>>>8&255;y[f|11]=Tf&255;y[f|12]=Zf>>>24;y[f|13]=Zf>>>16&255;y[f|14]=Zf>>>8&255;y[f|15]=Zf&255;y[f|16]=Bf>>>24;y[f|17]=Bf>>>16&255;y[f|18]=Bf>>>8&255;y[f|19]=Bf&255}function H(){Df=0x67452301;Rf=0xefcdab89;Tf=0x98badcfe;Zf=0x10325476;Bf=0xc3d2e1f0;b=g=0}function r(f,t,e,r,n,i,a){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;Df=f;Rf=t;Tf=e;Zf=r;Bf=n;b=i;g=a}function a(f,t){f=f|0;t=t|0;var e=0;if(f&63)return-1;while((t|0)>=64){i(f);f=f+64|0;t=t-64|0;e=e+64|0}b=b+e|0;if(b>>>0<e>>>0)g=g+1|0;return e|0}function x(f,t,e){f=f|0;t=t|0;e=e|0;var r=0,n=0;if(f&63)return-1;if(~e)if(e&31)return-1;if((t|0)>=64){r=a(f,t)|0;if((r|0)==-1)return-1;f=f+r|0;t=t-r|0}r=r+t|0;b=b+t|0;if(b>>>0<t>>>0)g=g+1|0;y[f|t]=0x80;if((t|0)>=56){for(n=t+1|0;(n|0)<64;n=n+1|0)y[f|n]=0x00;i(f);t=0;y[f|0]=0}for(n=t+1|0;(n|0)<59;n=n+1|0)y[f|n]=0;y[f|56]=g>>>21&255;y[f|57]=g>>>13&255;y[f|58]=g>>>5&255;y[f|59]=g<<3&255|b>>>29;y[f|60]=b>>>21&255;y[f|61]=b>>>13&255;y[f|62]=b>>>5&255;y[f|63]=b<<3&255;i(f);if(~e)O(e);return r|0}function L(){Df=_;Rf=v;Tf=d;Zf=w;Bf=A;b=64;g=0}function k(){Df=m;Rf=E;Tf=C;Zf=S;Bf=U;b=64;g=0}function n(f,t,e,r,n,i,a,s,o,x,c,h,u,l,p,y){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;o=o|0;x=x|0;c=c|0;h=h|0;u=u|0;l=l|0;p=p|0;y=y|0;H();M(f^0x5c5c5c5c,t^0x5c5c5c5c,e^0x5c5c5c5c,r^0x5c5c5c5c,n^0x5c5c5c5c,i^0x5c5c5c5c,a^0x5c5c5c5c,s^0x5c5c5c5c,o^0x5c5c5c5c,x^0x5c5c5c5c,c^0x5c5c5c5c,h^0x5c5c5c5c,u^0x5c5c5c5c,l^0x5c5c5c5c,p^0x5c5c5c5c,y^0x5c5c5c5c);m=Df;E=Rf;C=Tf;S=Zf;U=Bf;H();M(f^0x36363636,t^0x36363636,e^0x36363636,r^0x36363636,n^0x36363636,i^0x36363636,a^0x36363636,s^0x36363636,o^0x36363636,x^0x36363636,c^0x36363636,h^0x36363636,u^0x36363636,l^0x36363636,p^0x36363636,y^0x36363636);_=Df;v=Rf;d=Tf;w=Zf;A=Bf;b=64;g=0}function P(f,t,e){f=f|0;t=t|0;e=e|0;var r=0,n=0,i=0,a=0,s=0,o=0;if(f&63)return-1;if(~e)if(e&31)return-1;o=x(f,t,-1)|0;r=Df,n=Rf,i=Tf,a=Zf,s=Bf;k();M(r,n,i,a,s,0x80000000,0,0,0,0,0,0,0,0,0,672);if(~e)O(e);return o|0}function s(f,t,e,r,n){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;var i=0,a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0,p=0;if(f&63)return-1;if(~n)if(n&31)return-1;y[f+t|0]=e>>>24;y[f+t+1|0]=e>>>16&255;y[f+t+2|0]=e>>>8&255;y[f+t+3|0]=e&255;P(f,t+4|0,-1)|0;i=c=Df,a=h=Rf,s=u=Tf,o=l=Zf,x=p=Bf;r=r-1|0;while((r|0)>0){L();M(c,h,u,l,p,0x80000000,0,0,0,0,0,0,0,0,0,672);c=Df,h=Rf,u=Tf,l=Zf,p=Bf;k();M(c,h,u,l,p,0x80000000,0,0,0,0,0,0,0,0,0,672);c=Df,h=Rf,u=Tf,l=Zf,p=Bf;i=i^Df;a=a^Rf;s=s^Tf;o=o^Zf;x=x^Bf;r=r-1|0}Df=i;Rf=a;Tf=s;Zf=o;Bf=x;if(~n)O(n);return 0}return{reset:H,init:r,process:a,finish:x,hmac_reset:L,hmac_init:n,hmac_finish:P,pbkdf2_generate_block:s}},X=function(){function f(){this.pos=0,this.len=0}return f.prototype.reset=function(){return this.result=null,this.pos=0,this.len=0,this.asm.reset(),this},f.prototype.process=function(f){if(null!==this.result)throw new b("state must be reset before processing new data");for(var t=this.asm,e=this.heap,r=this.pos,n=this.len,i=0,a=f.length,s=0;0<a;)s=y(e,r+n,f,i,a),n+=s,i+=s,a-=s,s=t.process(r,n),r+=s,n-=s,n||(r=0);return this.pos=r,this.len=n,this},f.prototype.finish=function(){if(null!==this.result)throw new b("state must be reset before processing new data");return this.asm.finish(this.pos,this.len,0),this.result=new Uint8Array(this.HASH_SIZE),this.result.set(this.heap.subarray(0,this.HASH_SIZE)),this.pos=0,this.len=0,this},f}(),Y=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),$=64,ff=20,tf=function(t){function f(){var f=t.call(this)||this;return f.NAME="sha1",f.BLOCK_SIZE=$,f.HASH_SIZE=ff,f.heap=x(),f.asm=Q({Uint8Array:Uint8Array},null,f.heap.buffer),f.reset(),f}return Y(f,t),f.NAME="sha1",f}(X),ef=function(f,t,e){"use asm";var E=0,C=0,S=0,U=0,M=0,O=0,H=0,L=0,b=0,g=0;var _=0,v=0,d=0,w=0,A=0,m=0,k=0,P=0,D=0,R=0,T=0,Z=0,B=0,I=0,z=0,G=0;var N=new f.Uint8Array(e);function j(f,t,e,r,n,i,a,s,o,x,c,h,u,l,p,y){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;o=o|0;x=x|0;c=c|0;h=h|0;u=u|0;l=l|0;p=p|0;y=y|0;var b=0,g=0,_=0,v=0,d=0,w=0,A=0,m=0;b=E;g=C;_=S;v=U;d=M;w=O;A=H;m=L;m=f+m+(d>>>6^d>>>11^d>>>25^d<<26^d<<21^d<<7)+(A^d&(w^A))+0x428a2f98|0;v=v+m|0;m=m+(b&g^_&(b^g))+(b>>>2^b>>>13^b>>>22^b<<30^b<<19^b<<10)|0;A=t+A+(v>>>6^v>>>11^v>>>25^v<<26^v<<21^v<<7)+(w^v&(d^w))+0x71374491|0;_=_+A|0;A=A+(m&b^g&(m^b))+(m>>>2^m>>>13^m>>>22^m<<30^m<<19^m<<10)|0;w=e+w+(_>>>6^_>>>11^_>>>25^_<<26^_<<21^_<<7)+(d^_&(v^d))+0xb5c0fbcf|0;g=g+w|0;w=w+(A&m^b&(A^m))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;d=r+d+(g>>>6^g>>>11^g>>>25^g<<26^g<<21^g<<7)+(v^g&(_^v))+0xe9b5dba5|0;b=b+d|0;d=d+(w&A^m&(w^A))+(w>>>2^w>>>13^w>>>22^w<<30^w<<19^w<<10)|0;v=n+v+(b>>>6^b>>>11^b>>>25^b<<26^b<<21^b<<7)+(_^b&(g^_))+0x3956c25b|0;m=m+v|0;v=v+(d&w^A&(d^w))+(d>>>2^d>>>13^d>>>22^d<<30^d<<19^d<<10)|0;_=i+_+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(g^m&(b^g))+0x59f111f1|0;A=A+_|0;_=_+(v&d^w&(v^d))+(v>>>2^v>>>13^v>>>22^v<<30^v<<19^v<<10)|0;g=a+g+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(b^A&(m^b))+0x923f82a4|0;w=w+g|0;g=g+(_&v^d&(_^v))+(_>>>2^_>>>13^_>>>22^_<<30^_<<19^_<<10)|0;b=s+b+(w>>>6^w>>>11^w>>>25^w<<26^w<<21^w<<7)+(m^w&(A^m))+0xab1c5ed5|0;d=d+b|0;b=b+(g&_^v&(g^_))+(g>>>2^g>>>13^g>>>22^g<<30^g<<19^g<<10)|0;m=o+m+(d>>>6^d>>>11^d>>>25^d<<26^d<<21^d<<7)+(A^d&(w^A))+0xd807aa98|0;v=v+m|0;m=m+(b&g^_&(b^g))+(b>>>2^b>>>13^b>>>22^b<<30^b<<19^b<<10)|0;A=x+A+(v>>>6^v>>>11^v>>>25^v<<26^v<<21^v<<7)+(w^v&(d^w))+0x12835b01|0;_=_+A|0;A=A+(m&b^g&(m^b))+(m>>>2^m>>>13^m>>>22^m<<30^m<<19^m<<10)|0;w=c+w+(_>>>6^_>>>11^_>>>25^_<<26^_<<21^_<<7)+(d^_&(v^d))+0x243185be|0;g=g+w|0;w=w+(A&m^b&(A^m))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;d=h+d+(g>>>6^g>>>11^g>>>25^g<<26^g<<21^g<<7)+(v^g&(_^v))+0x550c7dc3|0;b=b+d|0;d=d+(w&A^m&(w^A))+(w>>>2^w>>>13^w>>>22^w<<30^w<<19^w<<10)|0;v=u+v+(b>>>6^b>>>11^b>>>25^b<<26^b<<21^b<<7)+(_^b&(g^_))+0x72be5d74|0;m=m+v|0;v=v+(d&w^A&(d^w))+(d>>>2^d>>>13^d>>>22^d<<30^d<<19^d<<10)|0;_=l+_+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(g^m&(b^g))+0x80deb1fe|0;A=A+_|0;_=_+(v&d^w&(v^d))+(v>>>2^v>>>13^v>>>22^v<<30^v<<19^v<<10)|0;g=p+g+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(b^A&(m^b))+0x9bdc06a7|0;w=w+g|0;g=g+(_&v^d&(_^v))+(_>>>2^_>>>13^_>>>22^_<<30^_<<19^_<<10)|0;b=y+b+(w>>>6^w>>>11^w>>>25^w<<26^w<<21^w<<7)+(m^w&(A^m))+0xc19bf174|0;d=d+b|0;b=b+(g&_^v&(g^_))+(g>>>2^g>>>13^g>>>22^g<<30^g<<19^g<<10)|0;f=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+f+x|0;m=f+m+(d>>>6^d>>>11^d>>>25^d<<26^d<<21^d<<7)+(A^d&(w^A))+0xe49b69c1|0;v=v+m|0;m=m+(b&g^_&(b^g))+(b>>>2^b>>>13^b>>>22^b<<30^b<<19^b<<10)|0;t=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+t+c|0;A=t+A+(v>>>6^v>>>11^v>>>25^v<<26^v<<21^v<<7)+(w^v&(d^w))+0xefbe4786|0;_=_+A|0;A=A+(m&b^g&(m^b))+(m>>>2^m>>>13^m>>>22^m<<30^m<<19^m<<10)|0;e=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+e+h|0;w=e+w+(_>>>6^_>>>11^_>>>25^_<<26^_<<21^_<<7)+(d^_&(v^d))+0x0fc19dc6|0;g=g+w|0;w=w+(A&m^b&(A^m))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;r=(n>>>7^n>>>18^n>>>3^n<<25^n<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+r+u|0;d=r+d+(g>>>6^g>>>11^g>>>25^g<<26^g<<21^g<<7)+(v^g&(_^v))+0x240ca1cc|0;b=b+d|0;d=d+(w&A^m&(w^A))+(w>>>2^w>>>13^w>>>22^w<<30^w<<19^w<<10)|0;n=(i>>>7^i>>>18^i>>>3^i<<25^i<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+n+l|0;v=n+v+(b>>>6^b>>>11^b>>>25^b<<26^b<<21^b<<7)+(_^b&(g^_))+0x2de92c6f|0;m=m+v|0;v=v+(d&w^A&(d^w))+(d>>>2^d>>>13^d>>>22^d<<30^d<<19^d<<10)|0;i=(a>>>7^a>>>18^a>>>3^a<<25^a<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+i+p|0;_=i+_+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(g^m&(b^g))+0x4a7484aa|0;A=A+_|0;_=_+(v&d^w&(v^d))+(v>>>2^v>>>13^v>>>22^v<<30^v<<19^v<<10)|0;a=(s>>>7^s>>>18^s>>>3^s<<25^s<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+a+y|0;g=a+g+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(b^A&(m^b))+0x5cb0a9dc|0;w=w+g|0;g=g+(_&v^d&(_^v))+(_>>>2^_>>>13^_>>>22^_<<30^_<<19^_<<10)|0;s=(o>>>7^o>>>18^o>>>3^o<<25^o<<14)+(i>>>17^i>>>19^i>>>10^i<<15^i<<13)+s+f|0;b=s+b+(w>>>6^w>>>11^w>>>25^w<<26^w<<21^w<<7)+(m^w&(A^m))+0x76f988da|0;d=d+b|0;b=b+(g&_^v&(g^_))+(g>>>2^g>>>13^g>>>22^g<<30^g<<19^g<<10)|0;o=(x>>>7^x>>>18^x>>>3^x<<25^x<<14)+(a>>>17^a>>>19^a>>>10^a<<15^a<<13)+o+t|0;m=o+m+(d>>>6^d>>>11^d>>>25^d<<26^d<<21^d<<7)+(A^d&(w^A))+0x983e5152|0;v=v+m|0;m=m+(b&g^_&(b^g))+(b>>>2^b>>>13^b>>>22^b<<30^b<<19^b<<10)|0;x=(c>>>7^c>>>18^c>>>3^c<<25^c<<14)+(s>>>17^s>>>19^s>>>10^s<<15^s<<13)+x+e|0;A=x+A+(v>>>6^v>>>11^v>>>25^v<<26^v<<21^v<<7)+(w^v&(d^w))+0xa831c66d|0;_=_+A|0;A=A+(m&b^g&(m^b))+(m>>>2^m>>>13^m>>>22^m<<30^m<<19^m<<10)|0;c=(h>>>7^h>>>18^h>>>3^h<<25^h<<14)+(o>>>17^o>>>19^o>>>10^o<<15^o<<13)+c+r|0;w=c+w+(_>>>6^_>>>11^_>>>25^_<<26^_<<21^_<<7)+(d^_&(v^d))+0xb00327c8|0;g=g+w|0;w=w+(A&m^b&(A^m))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;h=(u>>>7^u>>>18^u>>>3^u<<25^u<<14)+(x>>>17^x>>>19^x>>>10^x<<15^x<<13)+h+n|0;d=h+d+(g>>>6^g>>>11^g>>>25^g<<26^g<<21^g<<7)+(v^g&(_^v))+0xbf597fc7|0;b=b+d|0;d=d+(w&A^m&(w^A))+(w>>>2^w>>>13^w>>>22^w<<30^w<<19^w<<10)|0;u=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(c>>>17^c>>>19^c>>>10^c<<15^c<<13)+u+i|0;v=u+v+(b>>>6^b>>>11^b>>>25^b<<26^b<<21^b<<7)+(_^b&(g^_))+0xc6e00bf3|0;m=m+v|0;v=v+(d&w^A&(d^w))+(d>>>2^d>>>13^d>>>22^d<<30^d<<19^d<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(h>>>17^h>>>19^h>>>10^h<<15^h<<13)+l+a|0;_=l+_+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(g^m&(b^g))+0xd5a79147|0;A=A+_|0;_=_+(v&d^w&(v^d))+(v>>>2^v>>>13^v>>>22^v<<30^v<<19^v<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(u>>>17^u>>>19^u>>>10^u<<15^u<<13)+p+s|0;g=p+g+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(b^A&(m^b))+0x06ca6351|0;w=w+g|0;g=g+(_&v^d&(_^v))+(_>>>2^_>>>13^_>>>22^_<<30^_<<19^_<<10)|0;y=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+o|0;b=y+b+(w>>>6^w>>>11^w>>>25^w<<26^w<<21^w<<7)+(m^w&(A^m))+0x14292967|0;d=d+b|0;b=b+(g&_^v&(g^_))+(g>>>2^g>>>13^g>>>22^g<<30^g<<19^g<<10)|0;f=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+f+x|0;m=f+m+(d>>>6^d>>>11^d>>>25^d<<26^d<<21^d<<7)+(A^d&(w^A))+0x27b70a85|0;v=v+m|0;m=m+(b&g^_&(b^g))+(b>>>2^b>>>13^b>>>22^b<<30^b<<19^b<<10)|0;t=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+t+c|0;A=t+A+(v>>>6^v>>>11^v>>>25^v<<26^v<<21^v<<7)+(w^v&(d^w))+0x2e1b2138|0;_=_+A|0;A=A+(m&b^g&(m^b))+(m>>>2^m>>>13^m>>>22^m<<30^m<<19^m<<10)|0;e=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+e+h|0;w=e+w+(_>>>6^_>>>11^_>>>25^_<<26^_<<21^_<<7)+(d^_&(v^d))+0x4d2c6dfc|0;g=g+w|0;w=w+(A&m^b&(A^m))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;r=(n>>>7^n>>>18^n>>>3^n<<25^n<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+r+u|0;d=r+d+(g>>>6^g>>>11^g>>>25^g<<26^g<<21^g<<7)+(v^g&(_^v))+0x53380d13|0;b=b+d|0;d=d+(w&A^m&(w^A))+(w>>>2^w>>>13^w>>>22^w<<30^w<<19^w<<10)|0;n=(i>>>7^i>>>18^i>>>3^i<<25^i<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+n+l|0;v=n+v+(b>>>6^b>>>11^b>>>25^b<<26^b<<21^b<<7)+(_^b&(g^_))+0x650a7354|0;m=m+v|0;v=v+(d&w^A&(d^w))+(d>>>2^d>>>13^d>>>22^d<<30^d<<19^d<<10)|0;i=(a>>>7^a>>>18^a>>>3^a<<25^a<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+i+p|0;_=i+_+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(g^m&(b^g))+0x766a0abb|0;A=A+_|0;_=_+(v&d^w&(v^d))+(v>>>2^v>>>13^v>>>22^v<<30^v<<19^v<<10)|0;a=(s>>>7^s>>>18^s>>>3^s<<25^s<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+a+y|0;g=a+g+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(b^A&(m^b))+0x81c2c92e|0;w=w+g|0;g=g+(_&v^d&(_^v))+(_>>>2^_>>>13^_>>>22^_<<30^_<<19^_<<10)|0;s=(o>>>7^o>>>18^o>>>3^o<<25^o<<14)+(i>>>17^i>>>19^i>>>10^i<<15^i<<13)+s+f|0;b=s+b+(w>>>6^w>>>11^w>>>25^w<<26^w<<21^w<<7)+(m^w&(A^m))+0x92722c85|0;d=d+b|0;b=b+(g&_^v&(g^_))+(g>>>2^g>>>13^g>>>22^g<<30^g<<19^g<<10)|0;o=(x>>>7^x>>>18^x>>>3^x<<25^x<<14)+(a>>>17^a>>>19^a>>>10^a<<15^a<<13)+o+t|0;m=o+m+(d>>>6^d>>>11^d>>>25^d<<26^d<<21^d<<7)+(A^d&(w^A))+0xa2bfe8a1|0;v=v+m|0;m=m+(b&g^_&(b^g))+(b>>>2^b>>>13^b>>>22^b<<30^b<<19^b<<10)|0;x=(c>>>7^c>>>18^c>>>3^c<<25^c<<14)+(s>>>17^s>>>19^s>>>10^s<<15^s<<13)+x+e|0;A=x+A+(v>>>6^v>>>11^v>>>25^v<<26^v<<21^v<<7)+(w^v&(d^w))+0xa81a664b|0;_=_+A|0;A=A+(m&b^g&(m^b))+(m>>>2^m>>>13^m>>>22^m<<30^m<<19^m<<10)|0;c=(h>>>7^h>>>18^h>>>3^h<<25^h<<14)+(o>>>17^o>>>19^o>>>10^o<<15^o<<13)+c+r|0;w=c+w+(_>>>6^_>>>11^_>>>25^_<<26^_<<21^_<<7)+(d^_&(v^d))+0xc24b8b70|0;g=g+w|0;w=w+(A&m^b&(A^m))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;h=(u>>>7^u>>>18^u>>>3^u<<25^u<<14)+(x>>>17^x>>>19^x>>>10^x<<15^x<<13)+h+n|0;d=h+d+(g>>>6^g>>>11^g>>>25^g<<26^g<<21^g<<7)+(v^g&(_^v))+0xc76c51a3|0;b=b+d|0;d=d+(w&A^m&(w^A))+(w>>>2^w>>>13^w>>>22^w<<30^w<<19^w<<10)|0;u=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(c>>>17^c>>>19^c>>>10^c<<15^c<<13)+u+i|0;v=u+v+(b>>>6^b>>>11^b>>>25^b<<26^b<<21^b<<7)+(_^b&(g^_))+0xd192e819|0;m=m+v|0;v=v+(d&w^A&(d^w))+(d>>>2^d>>>13^d>>>22^d<<30^d<<19^d<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(h>>>17^h>>>19^h>>>10^h<<15^h<<13)+l+a|0;_=l+_+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(g^m&(b^g))+0xd6990624|0;A=A+_|0;_=_+(v&d^w&(v^d))+(v>>>2^v>>>13^v>>>22^v<<30^v<<19^v<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(u>>>17^u>>>19^u>>>10^u<<15^u<<13)+p+s|0;g=p+g+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(b^A&(m^b))+0xf40e3585|0;w=w+g|0;g=g+(_&v^d&(_^v))+(_>>>2^_>>>13^_>>>22^_<<30^_<<19^_<<10)|0;y=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+o|0;b=y+b+(w>>>6^w>>>11^w>>>25^w<<26^w<<21^w<<7)+(m^w&(A^m))+0x106aa070|0;d=d+b|0;b=b+(g&_^v&(g^_))+(g>>>2^g>>>13^g>>>22^g<<30^g<<19^g<<10)|0;f=(t>>>7^t>>>18^t>>>3^t<<25^t<<14)+(p>>>17^p>>>19^p>>>10^p<<15^p<<13)+f+x|0;m=f+m+(d>>>6^d>>>11^d>>>25^d<<26^d<<21^d<<7)+(A^d&(w^A))+0x19a4c116|0;v=v+m|0;m=m+(b&g^_&(b^g))+(b>>>2^b>>>13^b>>>22^b<<30^b<<19^b<<10)|0;t=(e>>>7^e>>>18^e>>>3^e<<25^e<<14)+(y>>>17^y>>>19^y>>>10^y<<15^y<<13)+t+c|0;A=t+A+(v>>>6^v>>>11^v>>>25^v<<26^v<<21^v<<7)+(w^v&(d^w))+0x1e376c08|0;_=_+A|0;A=A+(m&b^g&(m^b))+(m>>>2^m>>>13^m>>>22^m<<30^m<<19^m<<10)|0;e=(r>>>7^r>>>18^r>>>3^r<<25^r<<14)+(f>>>17^f>>>19^f>>>10^f<<15^f<<13)+e+h|0;w=e+w+(_>>>6^_>>>11^_>>>25^_<<26^_<<21^_<<7)+(d^_&(v^d))+0x2748774c|0;g=g+w|0;w=w+(A&m^b&(A^m))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;r=(n>>>7^n>>>18^n>>>3^n<<25^n<<14)+(t>>>17^t>>>19^t>>>10^t<<15^t<<13)+r+u|0;d=r+d+(g>>>6^g>>>11^g>>>25^g<<26^g<<21^g<<7)+(v^g&(_^v))+0x34b0bcb5|0;b=b+d|0;d=d+(w&A^m&(w^A))+(w>>>2^w>>>13^w>>>22^w<<30^w<<19^w<<10)|0;n=(i>>>7^i>>>18^i>>>3^i<<25^i<<14)+(e>>>17^e>>>19^e>>>10^e<<15^e<<13)+n+l|0;v=n+v+(b>>>6^b>>>11^b>>>25^b<<26^b<<21^b<<7)+(_^b&(g^_))+0x391c0cb3|0;m=m+v|0;v=v+(d&w^A&(d^w))+(d>>>2^d>>>13^d>>>22^d<<30^d<<19^d<<10)|0;i=(a>>>7^a>>>18^a>>>3^a<<25^a<<14)+(r>>>17^r>>>19^r>>>10^r<<15^r<<13)+i+p|0;_=i+_+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(g^m&(b^g))+0x4ed8aa4a|0;A=A+_|0;_=_+(v&d^w&(v^d))+(v>>>2^v>>>13^v>>>22^v<<30^v<<19^v<<10)|0;a=(s>>>7^s>>>18^s>>>3^s<<25^s<<14)+(n>>>17^n>>>19^n>>>10^n<<15^n<<13)+a+y|0;g=a+g+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(b^A&(m^b))+0x5b9cca4f|0;w=w+g|0;g=g+(_&v^d&(_^v))+(_>>>2^_>>>13^_>>>22^_<<30^_<<19^_<<10)|0;s=(o>>>7^o>>>18^o>>>3^o<<25^o<<14)+(i>>>17^i>>>19^i>>>10^i<<15^i<<13)+s+f|0;b=s+b+(w>>>6^w>>>11^w>>>25^w<<26^w<<21^w<<7)+(m^w&(A^m))+0x682e6ff3|0;d=d+b|0;b=b+(g&_^v&(g^_))+(g>>>2^g>>>13^g>>>22^g<<30^g<<19^g<<10)|0;o=(x>>>7^x>>>18^x>>>3^x<<25^x<<14)+(a>>>17^a>>>19^a>>>10^a<<15^a<<13)+o+t|0;m=o+m+(d>>>6^d>>>11^d>>>25^d<<26^d<<21^d<<7)+(A^d&(w^A))+0x748f82ee|0;v=v+m|0;m=m+(b&g^_&(b^g))+(b>>>2^b>>>13^b>>>22^b<<30^b<<19^b<<10)|0;x=(c>>>7^c>>>18^c>>>3^c<<25^c<<14)+(s>>>17^s>>>19^s>>>10^s<<15^s<<13)+x+e|0;A=x+A+(v>>>6^v>>>11^v>>>25^v<<26^v<<21^v<<7)+(w^v&(d^w))+0x78a5636f|0;_=_+A|0;A=A+(m&b^g&(m^b))+(m>>>2^m>>>13^m>>>22^m<<30^m<<19^m<<10)|0;c=(h>>>7^h>>>18^h>>>3^h<<25^h<<14)+(o>>>17^o>>>19^o>>>10^o<<15^o<<13)+c+r|0;w=c+w+(_>>>6^_>>>11^_>>>25^_<<26^_<<21^_<<7)+(d^_&(v^d))+0x84c87814|0;g=g+w|0;w=w+(A&m^b&(A^m))+(A>>>2^A>>>13^A>>>22^A<<30^A<<19^A<<10)|0;h=(u>>>7^u>>>18^u>>>3^u<<25^u<<14)+(x>>>17^x>>>19^x>>>10^x<<15^x<<13)+h+n|0;d=h+d+(g>>>6^g>>>11^g>>>25^g<<26^g<<21^g<<7)+(v^g&(_^v))+0x8cc70208|0;b=b+d|0;d=d+(w&A^m&(w^A))+(w>>>2^w>>>13^w>>>22^w<<30^w<<19^w<<10)|0;u=(l>>>7^l>>>18^l>>>3^l<<25^l<<14)+(c>>>17^c>>>19^c>>>10^c<<15^c<<13)+u+i|0;v=u+v+(b>>>6^b>>>11^b>>>25^b<<26^b<<21^b<<7)+(_^b&(g^_))+0x90befffa|0;m=m+v|0;v=v+(d&w^A&(d^w))+(d>>>2^d>>>13^d>>>22^d<<30^d<<19^d<<10)|0;l=(p>>>7^p>>>18^p>>>3^p<<25^p<<14)+(h>>>17^h>>>19^h>>>10^h<<15^h<<13)+l+a|0;_=l+_+(m>>>6^m>>>11^m>>>25^m<<26^m<<21^m<<7)+(g^m&(b^g))+0xa4506ceb|0;A=A+_|0;_=_+(v&d^w&(v^d))+(v>>>2^v>>>13^v>>>22^v<<30^v<<19^v<<10)|0;p=(y>>>7^y>>>18^y>>>3^y<<25^y<<14)+(u>>>17^u>>>19^u>>>10^u<<15^u<<13)+p+s|0;g=p+g+(A>>>6^A>>>11^A>>>25^A<<26^A<<21^A<<7)+(b^A&(m^b))+0xbef9a3f7|0;w=w+g|0;g=g+(_&v^d&(_^v))+(_>>>2^_>>>13^_>>>22^_<<30^_<<19^_<<10)|0;y=(f>>>7^f>>>18^f>>>3^f<<25^f<<14)+(l>>>17^l>>>19^l>>>10^l<<15^l<<13)+y+o|0;b=y+b+(w>>>6^w>>>11^w>>>25^w<<26^w<<21^w<<7)+(m^w&(A^m))+0xc67178f2|0;d=d+b|0;b=b+(g&_^v&(g^_))+(g>>>2^g>>>13^g>>>22^g<<30^g<<19^g<<10)|0;E=E+b|0;C=C+g|0;S=S+_|0;U=U+v|0;M=M+d|0;O=O+w|0;H=H+A|0;L=L+m|0}function i(f){f=f|0;j(N[f|0]<<24|N[f|1]<<16|N[f|2]<<8|N[f|3],N[f|4]<<24|N[f|5]<<16|N[f|6]<<8|N[f|7],N[f|8]<<24|N[f|9]<<16|N[f|10]<<8|N[f|11],N[f|12]<<24|N[f|13]<<16|N[f|14]<<8|N[f|15],N[f|16]<<24|N[f|17]<<16|N[f|18]<<8|N[f|19],N[f|20]<<24|N[f|21]<<16|N[f|22]<<8|N[f|23],N[f|24]<<24|N[f|25]<<16|N[f|26]<<8|N[f|27],N[f|28]<<24|N[f|29]<<16|N[f|30]<<8|N[f|31],N[f|32]<<24|N[f|33]<<16|N[f|34]<<8|N[f|35],N[f|36]<<24|N[f|37]<<16|N[f|38]<<8|N[f|39],N[f|40]<<24|N[f|41]<<16|N[f|42]<<8|N[f|43],N[f|44]<<24|N[f|45]<<16|N[f|46]<<8|N[f|47],N[f|48]<<24|N[f|49]<<16|N[f|50]<<8|N[f|51],N[f|52]<<24|N[f|53]<<16|N[f|54]<<8|N[f|55],N[f|56]<<24|N[f|57]<<16|N[f|58]<<8|N[f|59],N[f|60]<<24|N[f|61]<<16|N[f|62]<<8|N[f|63])}function F(f){f=f|0;N[f|0]=E>>>24;N[f|1]=E>>>16&255;N[f|2]=E>>>8&255;N[f|3]=E&255;N[f|4]=C>>>24;N[f|5]=C>>>16&255;N[f|6]=C>>>8&255;N[f|7]=C&255;N[f|8]=S>>>24;N[f|9]=S>>>16&255;N[f|10]=S>>>8&255;N[f|11]=S&255;N[f|12]=U>>>24;N[f|13]=U>>>16&255;N[f|14]=U>>>8&255;N[f|15]=U&255;N[f|16]=M>>>24;N[f|17]=M>>>16&255;N[f|18]=M>>>8&255;N[f|19]=M&255;N[f|20]=O>>>24;N[f|21]=O>>>16&255;N[f|22]=O>>>8&255;N[f|23]=O&255;N[f|24]=H>>>24;N[f|25]=H>>>16&255;N[f|26]=H>>>8&255;N[f|27]=H&255;N[f|28]=L>>>24;N[f|29]=L>>>16&255;N[f|30]=L>>>8&255;N[f|31]=L&255}function q(){E=0x6a09e667;C=0xbb67ae85;S=0x3c6ef372;U=0xa54ff53a;M=0x510e527f;O=0x9b05688c;H=0x1f83d9ab;L=0x5be0cd19;b=g=0}function r(f,t,e,r,n,i,a,s,o,x){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;o=o|0;x=x|0;E=f;C=t;S=e;U=r;M=n;O=i;H=a;L=s;b=o;g=x}function a(f,t){f=f|0;t=t|0;var e=0;if(f&63)return-1;while((t|0)>=64){i(f);f=f+64|0;t=t-64|0;e=e+64|0}b=b+e|0;if(b>>>0<e>>>0)g=g+1|0;return e|0}function u(f,t,e){f=f|0;t=t|0;e=e|0;var r=0,n=0;if(f&63)return-1;if(~e)if(e&31)return-1;if((t|0)>=64){r=a(f,t)|0;if((r|0)==-1)return-1;f=f+r|0;t=t-r|0}r=r+t|0;b=b+t|0;if(b>>>0<t>>>0)g=g+1|0;N[f|t]=0x80;if((t|0)>=56){for(n=t+1|0;(n|0)<64;n=n+1|0)N[f|n]=0x00;i(f);t=0;N[f|0]=0}for(n=t+1|0;(n|0)<59;n=n+1|0)N[f|n]=0;N[f|56]=g>>>21&255;N[f|57]=g>>>13&255;N[f|58]=g>>>5&255;N[f|59]=g<<3&255|b>>>29;N[f|60]=b>>>21&255;N[f|61]=b>>>13&255;N[f|62]=b>>>5&255;N[f|63]=b<<3&255;i(f);if(~e)F(e);return r|0}function V(){E=_;C=v;S=d;U=w;M=A;O=m;H=k;L=P;b=64;g=0}function K(){E=D;C=R;S=T;U=Z;M=B;O=I;H=z;L=G;b=64;g=0}function n(f,t,e,r,n,i,a,s,o,x,c,h,u,l,p,y){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;o=o|0;x=x|0;c=c|0;h=h|0;u=u|0;l=l|0;p=p|0;y=y|0;q();j(f^0x5c5c5c5c,t^0x5c5c5c5c,e^0x5c5c5c5c,r^0x5c5c5c5c,n^0x5c5c5c5c,i^0x5c5c5c5c,a^0x5c5c5c5c,s^0x5c5c5c5c,o^0x5c5c5c5c,x^0x5c5c5c5c,c^0x5c5c5c5c,h^0x5c5c5c5c,u^0x5c5c5c5c,l^0x5c5c5c5c,p^0x5c5c5c5c,y^0x5c5c5c5c);D=E;R=C;T=S;Z=U;B=M;I=O;z=H;G=L;q();j(f^0x36363636,t^0x36363636,e^0x36363636,r^0x36363636,n^0x36363636,i^0x36363636,a^0x36363636,s^0x36363636,o^0x36363636,x^0x36363636,c^0x36363636,h^0x36363636,u^0x36363636,l^0x36363636,p^0x36363636,y^0x36363636);_=E;v=C;d=S;w=U;A=M;m=O;k=H;P=L;b=64;g=0}function W(f,t,e){f=f|0;t=t|0;e=e|0;var r=0,n=0,i=0,a=0,s=0,o=0,x=0,c=0,h=0;if(f&63)return-1;if(~e)if(e&31)return-1;h=u(f,t,-1)|0;r=E,n=C,i=S,a=U,s=M,o=O,x=H,c=L;K();j(r,n,i,a,s,o,x,c,0x80000000,0,0,0,0,0,0,768);if(~e)F(e);return h|0}function s(f,t,e,r,n){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;var i=0,a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0,p=0,y=0,b=0,g=0,_=0,v=0,d=0;if(f&63)return-1;if(~n)if(n&31)return-1;N[f+t|0]=e>>>24;N[f+t+1|0]=e>>>16&255;N[f+t+2|0]=e>>>8&255;N[f+t+3|0]=e&255;W(f,t+4|0,-1)|0;i=l=E,a=p=C,s=y=S,o=b=U,x=g=M,c=_=O,h=v=H,u=d=L;r=r-1|0;while((r|0)>0){V();j(l,p,y,b,g,_,v,d,0x80000000,0,0,0,0,0,0,768);l=E,p=C,y=S,b=U,g=M,_=O,v=H,d=L;K();j(l,p,y,b,g,_,v,d,0x80000000,0,0,0,0,0,0,768);l=E,p=C,y=S,b=U,g=M,_=O,v=H,d=L;i=i^E;a=a^C;s=s^S;o=o^U;x=x^M;c=c^O;h=h^H;u=u^L;r=r-1|0}E=i;C=a;S=s;U=o;M=x;O=c;H=h;L=u;if(~n)F(n);return 0}return{reset:q,init:r,process:a,finish:u,hmac_reset:V,hmac_init:n,hmac_finish:W,pbkdf2_generate_block:s}},rf=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),nf=64,af=32,sf=function(t){function f(){var f=t.call(this)||this;return f.NAME="sha256",f.BLOCK_SIZE=nf,f.HASH_SIZE=af,f.heap=x(),f.asm=ef({Uint8Array:Uint8Array},null,f.heap.buffer),f.reset(),f}return rf(f,t),f.NAME="sha256",f}(X),of=function(f,t,e){"use asm";var X=0,Y=0,$=0,ff=0,tf=0,ef=0,rf=0,nf=0,af=0,sf=0,of=0,xf=0,cf=0,hf=0,uf=0,lf=0,k=0,P=0;var D=0,R=0,T=0,Z=0,B=0,I=0,z=0,G=0,N=0,j=0,F=0,q=0,V=0,K=0,W=0,J=0,Q=0,pf=0,yf=0,bf=0,gf=0,_f=0,vf=0,df=0,wf=0,Af=0,mf=0,Ef=0,Cf=0,Sf=0,Uf=0,Mf=0;var Of=new f.Uint8Array(e);function Hf(f,t,e,r,n,i,a,s,o,x,c,h,u,l,p,y,b,g,_,v,d,w,A,m,E,C,S,U,M,O,H,L){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;o=o|0;x=x|0;c=c|0;h=h|0;u=u|0;l=l|0;p=p|0;y=y|0;b=b|0;g=g|0;_=_|0;v=v|0;d=d|0;w=w|0;A=A|0;m=m|0;E=E|0;C=C|0;S=S|0;U=U|0;M=M|0;O=O|0;H=H|0;L=L|0;var k=0,P=0,D=0,R=0,T=0,Z=0,B=0,I=0,z=0,G=0,N=0,j=0,F=0,q=0,V=0,K=0,W=0,J=0,Q=0;k=X;P=Y;D=$;R=ff;T=tf;Z=ef;B=rf;I=nf;z=af;G=sf;N=of;j=xf;F=cf;q=hf;V=uf;K=lf;J=0xd728ae22+t|0;W=0x428a2f98+f+(J>>>0<t>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0x23ef65cd+r|0;W=0x71374491+e+(J>>>0<r>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xec4d3b2f+i|0;W=0xb5c0fbcf+n+(J>>>0<i>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0x8189dbbc+s|0;W=0xe9b5dba5+a+(J>>>0<s>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xf348b538+x|0;W=0x3956c25b+o+(J>>>0<x>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xb605d019+h|0;W=0x59f111f1+c+(J>>>0<h>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xaf194f9b+l|0;W=0x923f82a4+u+(J>>>0<l>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xda6d8118+y|0;W=0xab1c5ed5+p+(J>>>0<y>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xa3030242+g|0;W=0xd807aa98+b+(J>>>0<g>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0x45706fbe+v|0;W=0x12835b01+_+(J>>>0<v>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0x4ee4b28c+w|0;W=0x243185be+d+(J>>>0<w>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xd5ffb4e2+m|0;W=0x550c7dc3+A+(J>>>0<m>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xf27b896f+C|0;W=0x72be5d74+E+(J>>>0<C>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0x3b1696b1+U|0;W=0x80deb1fe+S+(J>>>0<U>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0x25c71235+O|0;W=0x9bdc06a7+M+(J>>>0<O>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;J=0xcf692694+L|0;W=0xc19bf174+H+(J>>>0<L>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;t=t+v|0;f=f+_+(t>>>0<v>>>0?1:0)|0;Q=(r>>>1|e<<31)^(r>>>8|e<<24)^(r>>>7|e<<25)|0;t=t+Q|0;f=f+((e>>>1|r<<31)^(e>>>8|r<<24)^e>>>7)+(t>>>0<Q>>>0?1:0)|0;Q=(O>>>19|M<<13)^(O<<3|M>>>29)^(O>>>6|M<<26)|0;t=t+Q|0;f=f+((M>>>19|O<<13)^(M<<3|O>>>29)^M>>>6)+(t>>>0<Q>>>0?1:0)|0;J=0x9ef14ad2+t|0;W=0xe49b69c1+f+(J>>>0<t>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;r=r+w|0;e=e+d+(r>>>0<w>>>0?1:0)|0;Q=(i>>>1|n<<31)^(i>>>8|n<<24)^(i>>>7|n<<25)|0;r=r+Q|0;e=e+((n>>>1|i<<31)^(n>>>8|i<<24)^n>>>7)+(r>>>0<Q>>>0?1:0)|0;Q=(L>>>19|H<<13)^(L<<3|H>>>29)^(L>>>6|H<<26)|0;r=r+Q|0;e=e+((H>>>19|L<<13)^(H<<3|L>>>29)^H>>>6)+(r>>>0<Q>>>0?1:0)|0;J=0x384f25e3+r|0;W=0xefbe4786+e+(J>>>0<r>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;i=i+m|0;n=n+A+(i>>>0<m>>>0?1:0)|0;Q=(s>>>1|a<<31)^(s>>>8|a<<24)^(s>>>7|a<<25)|0;i=i+Q|0;n=n+((a>>>1|s<<31)^(a>>>8|s<<24)^a>>>7)+(i>>>0<Q>>>0?1:0)|0;Q=(t>>>19|f<<13)^(t<<3|f>>>29)^(t>>>6|f<<26)|0;i=i+Q|0;n=n+((f>>>19|t<<13)^(f<<3|t>>>29)^f>>>6)+(i>>>0<Q>>>0?1:0)|0;J=0x8b8cd5b5+i|0;W=0xfc19dc6+n+(J>>>0<i>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;s=s+C|0;a=a+E+(s>>>0<C>>>0?1:0)|0;Q=(x>>>1|o<<31)^(x>>>8|o<<24)^(x>>>7|o<<25)|0;s=s+Q|0;a=a+((o>>>1|x<<31)^(o>>>8|x<<24)^o>>>7)+(s>>>0<Q>>>0?1:0)|0;Q=(r>>>19|e<<13)^(r<<3|e>>>29)^(r>>>6|e<<26)|0;s=s+Q|0;a=a+((e>>>19|r<<13)^(e<<3|r>>>29)^e>>>6)+(s>>>0<Q>>>0?1:0)|0;J=0x77ac9c65+s|0;W=0x240ca1cc+a+(J>>>0<s>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;x=x+U|0;o=o+S+(x>>>0<U>>>0?1:0)|0;Q=(h>>>1|c<<31)^(h>>>8|c<<24)^(h>>>7|c<<25)|0;x=x+Q|0;o=o+((c>>>1|h<<31)^(c>>>8|h<<24)^c>>>7)+(x>>>0<Q>>>0?1:0)|0;Q=(i>>>19|n<<13)^(i<<3|n>>>29)^(i>>>6|n<<26)|0;x=x+Q|0;o=o+((n>>>19|i<<13)^(n<<3|i>>>29)^n>>>6)+(x>>>0<Q>>>0?1:0)|0;J=0x592b0275+x|0;W=0x2de92c6f+o+(J>>>0<x>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;h=h+O|0;c=c+M+(h>>>0<O>>>0?1:0)|0;Q=(l>>>1|u<<31)^(l>>>8|u<<24)^(l>>>7|u<<25)|0;h=h+Q|0;c=c+((u>>>1|l<<31)^(u>>>8|l<<24)^u>>>7)+(h>>>0<Q>>>0?1:0)|0;Q=(s>>>19|a<<13)^(s<<3|a>>>29)^(s>>>6|a<<26)|0;h=h+Q|0;c=c+((a>>>19|s<<13)^(a<<3|s>>>29)^a>>>6)+(h>>>0<Q>>>0?1:0)|0;J=0x6ea6e483+h|0;W=0x4a7484aa+c+(J>>>0<h>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;l=l+L|0;u=u+H+(l>>>0<L>>>0?1:0)|0;Q=(y>>>1|p<<31)^(y>>>8|p<<24)^(y>>>7|p<<25)|0;l=l+Q|0;u=u+((p>>>1|y<<31)^(p>>>8|y<<24)^p>>>7)+(l>>>0<Q>>>0?1:0)|0;Q=(x>>>19|o<<13)^(x<<3|o>>>29)^(x>>>6|o<<26)|0;l=l+Q|0;u=u+((o>>>19|x<<13)^(o<<3|x>>>29)^o>>>6)+(l>>>0<Q>>>0?1:0)|0;J=0xbd41fbd4+l|0;W=0x5cb0a9dc+u+(J>>>0<l>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;y=y+t|0;p=p+f+(y>>>0<t>>>0?1:0)|0;Q=(g>>>1|b<<31)^(g>>>8|b<<24)^(g>>>7|b<<25)|0;y=y+Q|0;p=p+((b>>>1|g<<31)^(b>>>8|g<<24)^b>>>7)+(y>>>0<Q>>>0?1:0)|0;Q=(h>>>19|c<<13)^(h<<3|c>>>29)^(h>>>6|c<<26)|0;y=y+Q|0;p=p+((c>>>19|h<<13)^(c<<3|h>>>29)^c>>>6)+(y>>>0<Q>>>0?1:0)|0;J=0x831153b5+y|0;W=0x76f988da+p+(J>>>0<y>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;g=g+r|0;b=b+e+(g>>>0<r>>>0?1:0)|0;Q=(v>>>1|_<<31)^(v>>>8|_<<24)^(v>>>7|_<<25)|0;g=g+Q|0;b=b+((_>>>1|v<<31)^(_>>>8|v<<24)^_>>>7)+(g>>>0<Q>>>0?1:0)|0;Q=(l>>>19|u<<13)^(l<<3|u>>>29)^(l>>>6|u<<26)|0;g=g+Q|0;b=b+((u>>>19|l<<13)^(u<<3|l>>>29)^u>>>6)+(g>>>0<Q>>>0?1:0)|0;J=0xee66dfab+g|0;W=0x983e5152+b+(J>>>0<g>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;v=v+i|0;_=_+n+(v>>>0<i>>>0?1:0)|0;Q=(w>>>1|d<<31)^(w>>>8|d<<24)^(w>>>7|d<<25)|0;v=v+Q|0;_=_+((d>>>1|w<<31)^(d>>>8|w<<24)^d>>>7)+(v>>>0<Q>>>0?1:0)|0;Q=(y>>>19|p<<13)^(y<<3|p>>>29)^(y>>>6|p<<26)|0;v=v+Q|0;_=_+((p>>>19|y<<13)^(p<<3|y>>>29)^p>>>6)+(v>>>0<Q>>>0?1:0)|0;J=0x2db43210+v|0;W=0xa831c66d+_+(J>>>0<v>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;w=w+s|0;d=d+a+(w>>>0<s>>>0?1:0)|0;Q=(m>>>1|A<<31)^(m>>>8|A<<24)^(m>>>7|A<<25)|0;w=w+Q|0;d=d+((A>>>1|m<<31)^(A>>>8|m<<24)^A>>>7)+(w>>>0<Q>>>0?1:0)|0;Q=(g>>>19|b<<13)^(g<<3|b>>>29)^(g>>>6|b<<26)|0;w=w+Q|0;d=d+((b>>>19|g<<13)^(b<<3|g>>>29)^b>>>6)+(w>>>0<Q>>>0?1:0)|0;J=0x98fb213f+w|0;W=0xb00327c8+d+(J>>>0<w>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;m=m+x|0;A=A+o+(m>>>0<x>>>0?1:0)|0;Q=(C>>>1|E<<31)^(C>>>8|E<<24)^(C>>>7|E<<25)|0;m=m+Q|0;A=A+((E>>>1|C<<31)^(E>>>8|C<<24)^E>>>7)+(m>>>0<Q>>>0?1:0)|0;Q=(v>>>19|_<<13)^(v<<3|_>>>29)^(v>>>6|_<<26)|0;m=m+Q|0;A=A+((_>>>19|v<<13)^(_<<3|v>>>29)^_>>>6)+(m>>>0<Q>>>0?1:0)|0;J=0xbeef0ee4+m|0;W=0xbf597fc7+A+(J>>>0<m>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;C=C+h|0;E=E+c+(C>>>0<h>>>0?1:0)|0;Q=(U>>>1|S<<31)^(U>>>8|S<<24)^(U>>>7|S<<25)|0;C=C+Q|0;E=E+((S>>>1|U<<31)^(S>>>8|U<<24)^S>>>7)+(C>>>0<Q>>>0?1:0)|0;Q=(w>>>19|d<<13)^(w<<3|d>>>29)^(w>>>6|d<<26)|0;C=C+Q|0;E=E+((d>>>19|w<<13)^(d<<3|w>>>29)^d>>>6)+(C>>>0<Q>>>0?1:0)|0;J=0x3da88fc2+C|0;W=0xc6e00bf3+E+(J>>>0<C>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;U=U+l|0;S=S+u+(U>>>0<l>>>0?1:0)|0;Q=(O>>>1|M<<31)^(O>>>8|M<<24)^(O>>>7|M<<25)|0;U=U+Q|0;S=S+((M>>>1|O<<31)^(M>>>8|O<<24)^M>>>7)+(U>>>0<Q>>>0?1:0)|0;Q=(m>>>19|A<<13)^(m<<3|A>>>29)^(m>>>6|A<<26)|0;U=U+Q|0;S=S+((A>>>19|m<<13)^(A<<3|m>>>29)^A>>>6)+(U>>>0<Q>>>0?1:0)|0;J=0x930aa725+U|0;W=0xd5a79147+S+(J>>>0<U>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;O=O+y|0;M=M+p+(O>>>0<y>>>0?1:0)|0;Q=(L>>>1|H<<31)^(L>>>8|H<<24)^(L>>>7|H<<25)|0;O=O+Q|0;M=M+((H>>>1|L<<31)^(H>>>8|L<<24)^H>>>7)+(O>>>0<Q>>>0?1:0)|0;Q=(C>>>19|E<<13)^(C<<3|E>>>29)^(C>>>6|E<<26)|0;O=O+Q|0;M=M+((E>>>19|C<<13)^(E<<3|C>>>29)^E>>>6)+(O>>>0<Q>>>0?1:0)|0;J=0xe003826f+O|0;W=0x6ca6351+M+(J>>>0<O>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;L=L+g|0;H=H+b+(L>>>0<g>>>0?1:0)|0;Q=(t>>>1|f<<31)^(t>>>8|f<<24)^(t>>>7|f<<25)|0;L=L+Q|0;H=H+((f>>>1|t<<31)^(f>>>8|t<<24)^f>>>7)+(L>>>0<Q>>>0?1:0)|0;Q=(U>>>19|S<<13)^(U<<3|S>>>29)^(U>>>6|S<<26)|0;L=L+Q|0;H=H+((S>>>19|U<<13)^(S<<3|U>>>29)^S>>>6)+(L>>>0<Q>>>0?1:0)|0;J=0xa0e6e70+L|0;W=0x14292967+H+(J>>>0<L>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;t=t+v|0;f=f+_+(t>>>0<v>>>0?1:0)|0;Q=(r>>>1|e<<31)^(r>>>8|e<<24)^(r>>>7|e<<25)|0;t=t+Q|0;f=f+((e>>>1|r<<31)^(e>>>8|r<<24)^e>>>7)+(t>>>0<Q>>>0?1:0)|0;Q=(O>>>19|M<<13)^(O<<3|M>>>29)^(O>>>6|M<<26)|0;t=t+Q|0;f=f+((M>>>19|O<<13)^(M<<3|O>>>29)^M>>>6)+(t>>>0<Q>>>0?1:0)|0;J=0x46d22ffc+t|0;W=0x27b70a85+f+(J>>>0<t>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;r=r+w|0;e=e+d+(r>>>0<w>>>0?1:0)|0;Q=(i>>>1|n<<31)^(i>>>8|n<<24)^(i>>>7|n<<25)|0;r=r+Q|0;e=e+((n>>>1|i<<31)^(n>>>8|i<<24)^n>>>7)+(r>>>0<Q>>>0?1:0)|0;Q=(L>>>19|H<<13)^(L<<3|H>>>29)^(L>>>6|H<<26)|0;r=r+Q|0;e=e+((H>>>19|L<<13)^(H<<3|L>>>29)^H>>>6)+(r>>>0<Q>>>0?1:0)|0;J=0x5c26c926+r|0;W=0x2e1b2138+e+(J>>>0<r>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;i=i+m|0;n=n+A+(i>>>0<m>>>0?1:0)|0;Q=(s>>>1|a<<31)^(s>>>8|a<<24)^(s>>>7|a<<25)|0;i=i+Q|0;n=n+((a>>>1|s<<31)^(a>>>8|s<<24)^a>>>7)+(i>>>0<Q>>>0?1:0)|0;Q=(t>>>19|f<<13)^(t<<3|f>>>29)^(t>>>6|f<<26)|0;i=i+Q|0;n=n+((f>>>19|t<<13)^(f<<3|t>>>29)^f>>>6)+(i>>>0<Q>>>0?1:0)|0;J=0x5ac42aed+i|0;W=0x4d2c6dfc+n+(J>>>0<i>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;s=s+C|0;a=a+E+(s>>>0<C>>>0?1:0)|0;Q=(x>>>1|o<<31)^(x>>>8|o<<24)^(x>>>7|o<<25)|0;s=s+Q|0;a=a+((o>>>1|x<<31)^(o>>>8|x<<24)^o>>>7)+(s>>>0<Q>>>0?1:0)|0;Q=(r>>>19|e<<13)^(r<<3|e>>>29)^(r>>>6|e<<26)|0;s=s+Q|0;a=a+((e>>>19|r<<13)^(e<<3|r>>>29)^e>>>6)+(s>>>0<Q>>>0?1:0)|0;J=0x9d95b3df+s|0;W=0x53380d13+a+(J>>>0<s>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;x=x+U|0;o=o+S+(x>>>0<U>>>0?1:0)|0;Q=(h>>>1|c<<31)^(h>>>8|c<<24)^(h>>>7|c<<25)|0;x=x+Q|0;o=o+((c>>>1|h<<31)^(c>>>8|h<<24)^c>>>7)+(x>>>0<Q>>>0?1:0)|0;Q=(i>>>19|n<<13)^(i<<3|n>>>29)^(i>>>6|n<<26)|0;x=x+Q|0;o=o+((n>>>19|i<<13)^(n<<3|i>>>29)^n>>>6)+(x>>>0<Q>>>0?1:0)|0;J=0x8baf63de+x|0;W=0x650a7354+o+(J>>>0<x>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;h=h+O|0;c=c+M+(h>>>0<O>>>0?1:0)|0;Q=(l>>>1|u<<31)^(l>>>8|u<<24)^(l>>>7|u<<25)|0;h=h+Q|0;c=c+((u>>>1|l<<31)^(u>>>8|l<<24)^u>>>7)+(h>>>0<Q>>>0?1:0)|0;Q=(s>>>19|a<<13)^(s<<3|a>>>29)^(s>>>6|a<<26)|0;h=h+Q|0;c=c+((a>>>19|s<<13)^(a<<3|s>>>29)^a>>>6)+(h>>>0<Q>>>0?1:0)|0;J=0x3c77b2a8+h|0;W=0x766a0abb+c+(J>>>0<h>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;l=l+L|0;u=u+H+(l>>>0<L>>>0?1:0)|0;Q=(y>>>1|p<<31)^(y>>>8|p<<24)^(y>>>7|p<<25)|0;l=l+Q|0;u=u+((p>>>1|y<<31)^(p>>>8|y<<24)^p>>>7)+(l>>>0<Q>>>0?1:0)|0;Q=(x>>>19|o<<13)^(x<<3|o>>>29)^(x>>>6|o<<26)|0;l=l+Q|0;u=u+((o>>>19|x<<13)^(o<<3|x>>>29)^o>>>6)+(l>>>0<Q>>>0?1:0)|0;J=0x47edaee6+l|0;W=0x81c2c92e+u+(J>>>0<l>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;y=y+t|0;p=p+f+(y>>>0<t>>>0?1:0)|0;Q=(g>>>1|b<<31)^(g>>>8|b<<24)^(g>>>7|b<<25)|0;y=y+Q|0;p=p+((b>>>1|g<<31)^(b>>>8|g<<24)^b>>>7)+(y>>>0<Q>>>0?1:0)|0;Q=(h>>>19|c<<13)^(h<<3|c>>>29)^(h>>>6|c<<26)|0;y=y+Q|0;p=p+((c>>>19|h<<13)^(c<<3|h>>>29)^c>>>6)+(y>>>0<Q>>>0?1:0)|0;J=0x1482353b+y|0;W=0x92722c85+p+(J>>>0<y>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;g=g+r|0;b=b+e+(g>>>0<r>>>0?1:0)|0;Q=(v>>>1|_<<31)^(v>>>8|_<<24)^(v>>>7|_<<25)|0;g=g+Q|0;b=b+((_>>>1|v<<31)^(_>>>8|v<<24)^_>>>7)+(g>>>0<Q>>>0?1:0)|0;Q=(l>>>19|u<<13)^(l<<3|u>>>29)^(l>>>6|u<<26)|0;g=g+Q|0;b=b+((u>>>19|l<<13)^(u<<3|l>>>29)^u>>>6)+(g>>>0<Q>>>0?1:0)|0;J=0x4cf10364+g|0;W=0xa2bfe8a1+b+(J>>>0<g>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;v=v+i|0;_=_+n+(v>>>0<i>>>0?1:0)|0;Q=(w>>>1|d<<31)^(w>>>8|d<<24)^(w>>>7|d<<25)|0;v=v+Q|0;_=_+((d>>>1|w<<31)^(d>>>8|w<<24)^d>>>7)+(v>>>0<Q>>>0?1:0)|0;Q=(y>>>19|p<<13)^(y<<3|p>>>29)^(y>>>6|p<<26)|0;v=v+Q|0;_=_+((p>>>19|y<<13)^(p<<3|y>>>29)^p>>>6)+(v>>>0<Q>>>0?1:0)|0;J=0xbc423001+v|0;W=0xa81a664b+_+(J>>>0<v>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;w=w+s|0;d=d+a+(w>>>0<s>>>0?1:0)|0;Q=(m>>>1|A<<31)^(m>>>8|A<<24)^(m>>>7|A<<25)|0;w=w+Q|0;d=d+((A>>>1|m<<31)^(A>>>8|m<<24)^A>>>7)+(w>>>0<Q>>>0?1:0)|0;Q=(g>>>19|b<<13)^(g<<3|b>>>29)^(g>>>6|b<<26)|0;w=w+Q|0;d=d+((b>>>19|g<<13)^(b<<3|g>>>29)^b>>>6)+(w>>>0<Q>>>0?1:0)|0;J=0xd0f89791+w|0;W=0xc24b8b70+d+(J>>>0<w>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;m=m+x|0;A=A+o+(m>>>0<x>>>0?1:0)|0;Q=(C>>>1|E<<31)^(C>>>8|E<<24)^(C>>>7|E<<25)|0;m=m+Q|0;A=A+((E>>>1|C<<31)^(E>>>8|C<<24)^E>>>7)+(m>>>0<Q>>>0?1:0)|0;Q=(v>>>19|_<<13)^(v<<3|_>>>29)^(v>>>6|_<<26)|0;m=m+Q|0;A=A+((_>>>19|v<<13)^(_<<3|v>>>29)^_>>>6)+(m>>>0<Q>>>0?1:0)|0;J=0x654be30+m|0;W=0xc76c51a3+A+(J>>>0<m>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;C=C+h|0;E=E+c+(C>>>0<h>>>0?1:0)|0;Q=(U>>>1|S<<31)^(U>>>8|S<<24)^(U>>>7|S<<25)|0;C=C+Q|0;E=E+((S>>>1|U<<31)^(S>>>8|U<<24)^S>>>7)+(C>>>0<Q>>>0?1:0)|0;Q=(w>>>19|d<<13)^(w<<3|d>>>29)^(w>>>6|d<<26)|0;C=C+Q|0;E=E+((d>>>19|w<<13)^(d<<3|w>>>29)^d>>>6)+(C>>>0<Q>>>0?1:0)|0;J=0xd6ef5218+C|0;W=0xd192e819+E+(J>>>0<C>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;U=U+l|0;S=S+u+(U>>>0<l>>>0?1:0)|0;Q=(O>>>1|M<<31)^(O>>>8|M<<24)^(O>>>7|M<<25)|0;U=U+Q|0;S=S+((M>>>1|O<<31)^(M>>>8|O<<24)^M>>>7)+(U>>>0<Q>>>0?1:0)|0;Q=(m>>>19|A<<13)^(m<<3|A>>>29)^(m>>>6|A<<26)|0;U=U+Q|0;S=S+((A>>>19|m<<13)^(A<<3|m>>>29)^A>>>6)+(U>>>0<Q>>>0?1:0)|0;J=0x5565a910+U|0;W=0xd6990624+S+(J>>>0<U>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;O=O+y|0;M=M+p+(O>>>0<y>>>0?1:0)|0;Q=(L>>>1|H<<31)^(L>>>8|H<<24)^(L>>>7|H<<25)|0;O=O+Q|0;M=M+((H>>>1|L<<31)^(H>>>8|L<<24)^H>>>7)+(O>>>0<Q>>>0?1:0)|0;Q=(C>>>19|E<<13)^(C<<3|E>>>29)^(C>>>6|E<<26)|0;O=O+Q|0;M=M+((E>>>19|C<<13)^(E<<3|C>>>29)^E>>>6)+(O>>>0<Q>>>0?1:0)|0;J=0x5771202a+O|0;W=0xf40e3585+M+(J>>>0<O>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;L=L+g|0;H=H+b+(L>>>0<g>>>0?1:0)|0;Q=(t>>>1|f<<31)^(t>>>8|f<<24)^(t>>>7|f<<25)|0;L=L+Q|0;H=H+((f>>>1|t<<31)^(f>>>8|t<<24)^f>>>7)+(L>>>0<Q>>>0?1:0)|0;Q=(U>>>19|S<<13)^(U<<3|S>>>29)^(U>>>6|S<<26)|0;L=L+Q|0;H=H+((S>>>19|U<<13)^(S<<3|U>>>29)^S>>>6)+(L>>>0<Q>>>0?1:0)|0;J=0x32bbd1b8+L|0;W=0x106aa070+H+(J>>>0<L>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;t=t+v|0;f=f+_+(t>>>0<v>>>0?1:0)|0;Q=(r>>>1|e<<31)^(r>>>8|e<<24)^(r>>>7|e<<25)|0;t=t+Q|0;f=f+((e>>>1|r<<31)^(e>>>8|r<<24)^e>>>7)+(t>>>0<Q>>>0?1:0)|0;Q=(O>>>19|M<<13)^(O<<3|M>>>29)^(O>>>6|M<<26)|0;t=t+Q|0;f=f+((M>>>19|O<<13)^(M<<3|O>>>29)^M>>>6)+(t>>>0<Q>>>0?1:0)|0;J=0xb8d2d0c8+t|0;W=0x19a4c116+f+(J>>>0<t>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;r=r+w|0;e=e+d+(r>>>0<w>>>0?1:0)|0;Q=(i>>>1|n<<31)^(i>>>8|n<<24)^(i>>>7|n<<25)|0;r=r+Q|0;e=e+((n>>>1|i<<31)^(n>>>8|i<<24)^n>>>7)+(r>>>0<Q>>>0?1:0)|0;Q=(L>>>19|H<<13)^(L<<3|H>>>29)^(L>>>6|H<<26)|0;r=r+Q|0;e=e+((H>>>19|L<<13)^(H<<3|L>>>29)^H>>>6)+(r>>>0<Q>>>0?1:0)|0;J=0x5141ab53+r|0;W=0x1e376c08+e+(J>>>0<r>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;i=i+m|0;n=n+A+(i>>>0<m>>>0?1:0)|0;Q=(s>>>1|a<<31)^(s>>>8|a<<24)^(s>>>7|a<<25)|0;i=i+Q|0;n=n+((a>>>1|s<<31)^(a>>>8|s<<24)^a>>>7)+(i>>>0<Q>>>0?1:0)|0;Q=(t>>>19|f<<13)^(t<<3|f>>>29)^(t>>>6|f<<26)|0;i=i+Q|0;n=n+((f>>>19|t<<13)^(f<<3|t>>>29)^f>>>6)+(i>>>0<Q>>>0?1:0)|0;J=0xdf8eeb99+i|0;W=0x2748774c+n+(J>>>0<i>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;s=s+C|0;a=a+E+(s>>>0<C>>>0?1:0)|0;Q=(x>>>1|o<<31)^(x>>>8|o<<24)^(x>>>7|o<<25)|0;s=s+Q|0;a=a+((o>>>1|x<<31)^(o>>>8|x<<24)^o>>>7)+(s>>>0<Q>>>0?1:0)|0;Q=(r>>>19|e<<13)^(r<<3|e>>>29)^(r>>>6|e<<26)|0;s=s+Q|0;a=a+((e>>>19|r<<13)^(e<<3|r>>>29)^e>>>6)+(s>>>0<Q>>>0?1:0)|0;J=0xe19b48a8+s|0;W=0x34b0bcb5+a+(J>>>0<s>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;x=x+U|0;o=o+S+(x>>>0<U>>>0?1:0)|0;Q=(h>>>1|c<<31)^(h>>>8|c<<24)^(h>>>7|c<<25)|0;x=x+Q|0;o=o+((c>>>1|h<<31)^(c>>>8|h<<24)^c>>>7)+(x>>>0<Q>>>0?1:0)|0;Q=(i>>>19|n<<13)^(i<<3|n>>>29)^(i>>>6|n<<26)|0;x=x+Q|0;o=o+((n>>>19|i<<13)^(n<<3|i>>>29)^n>>>6)+(x>>>0<Q>>>0?1:0)|0;J=0xc5c95a63+x|0;W=0x391c0cb3+o+(J>>>0<x>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;h=h+O|0;c=c+M+(h>>>0<O>>>0?1:0)|0;Q=(l>>>1|u<<31)^(l>>>8|u<<24)^(l>>>7|u<<25)|0;h=h+Q|0;c=c+((u>>>1|l<<31)^(u>>>8|l<<24)^u>>>7)+(h>>>0<Q>>>0?1:0)|0;Q=(s>>>19|a<<13)^(s<<3|a>>>29)^(s>>>6|a<<26)|0;h=h+Q|0;c=c+((a>>>19|s<<13)^(a<<3|s>>>29)^a>>>6)+(h>>>0<Q>>>0?1:0)|0;J=0xe3418acb+h|0;W=0x4ed8aa4a+c+(J>>>0<h>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;l=l+L|0;u=u+H+(l>>>0<L>>>0?1:0)|0;Q=(y>>>1|p<<31)^(y>>>8|p<<24)^(y>>>7|p<<25)|0;l=l+Q|0;u=u+((p>>>1|y<<31)^(p>>>8|y<<24)^p>>>7)+(l>>>0<Q>>>0?1:0)|0;Q=(x>>>19|o<<13)^(x<<3|o>>>29)^(x>>>6|o<<26)|0;l=l+Q|0;u=u+((o>>>19|x<<13)^(o<<3|x>>>29)^o>>>6)+(l>>>0<Q>>>0?1:0)|0;J=0x7763e373+l|0;W=0x5b9cca4f+u+(J>>>0<l>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;y=y+t|0;p=p+f+(y>>>0<t>>>0?1:0)|0;Q=(g>>>1|b<<31)^(g>>>8|b<<24)^(g>>>7|b<<25)|0;y=y+Q|0;p=p+((b>>>1|g<<31)^(b>>>8|g<<24)^b>>>7)+(y>>>0<Q>>>0?1:0)|0;Q=(h>>>19|c<<13)^(h<<3|c>>>29)^(h>>>6|c<<26)|0;y=y+Q|0;p=p+((c>>>19|h<<13)^(c<<3|h>>>29)^c>>>6)+(y>>>0<Q>>>0?1:0)|0;J=0xd6b2b8a3+y|0;W=0x682e6ff3+p+(J>>>0<y>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;g=g+r|0;b=b+e+(g>>>0<r>>>0?1:0)|0;Q=(v>>>1|_<<31)^(v>>>8|_<<24)^(v>>>7|_<<25)|0;g=g+Q|0;b=b+((_>>>1|v<<31)^(_>>>8|v<<24)^_>>>7)+(g>>>0<Q>>>0?1:0)|0;Q=(l>>>19|u<<13)^(l<<3|u>>>29)^(l>>>6|u<<26)|0;g=g+Q|0;b=b+((u>>>19|l<<13)^(u<<3|l>>>29)^u>>>6)+(g>>>0<Q>>>0?1:0)|0;J=0x5defb2fc+g|0;W=0x748f82ee+b+(J>>>0<g>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;v=v+i|0;_=_+n+(v>>>0<i>>>0?1:0)|0;Q=(w>>>1|d<<31)^(w>>>8|d<<24)^(w>>>7|d<<25)|0;v=v+Q|0;_=_+((d>>>1|w<<31)^(d>>>8|w<<24)^d>>>7)+(v>>>0<Q>>>0?1:0)|0;Q=(y>>>19|p<<13)^(y<<3|p>>>29)^(y>>>6|p<<26)|0;v=v+Q|0;_=_+((p>>>19|y<<13)^(p<<3|y>>>29)^p>>>6)+(v>>>0<Q>>>0?1:0)|0;J=0x43172f60+v|0;W=0x78a5636f+_+(J>>>0<v>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;w=w+s|0;d=d+a+(w>>>0<s>>>0?1:0)|0;Q=(m>>>1|A<<31)^(m>>>8|A<<24)^(m>>>7|A<<25)|0;w=w+Q|0;d=d+((A>>>1|m<<31)^(A>>>8|m<<24)^A>>>7)+(w>>>0<Q>>>0?1:0)|0;Q=(g>>>19|b<<13)^(g<<3|b>>>29)^(g>>>6|b<<26)|0;w=w+Q|0;d=d+((b>>>19|g<<13)^(b<<3|g>>>29)^b>>>6)+(w>>>0<Q>>>0?1:0)|0;J=0xa1f0ab72+w|0;W=0x84c87814+d+(J>>>0<w>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;m=m+x|0;A=A+o+(m>>>0<x>>>0?1:0)|0;Q=(C>>>1|E<<31)^(C>>>8|E<<24)^(C>>>7|E<<25)|0;m=m+Q|0;A=A+((E>>>1|C<<31)^(E>>>8|C<<24)^E>>>7)+(m>>>0<Q>>>0?1:0)|0;Q=(v>>>19|_<<13)^(v<<3|_>>>29)^(v>>>6|_<<26)|0;m=m+Q|0;A=A+((_>>>19|v<<13)^(_<<3|v>>>29)^_>>>6)+(m>>>0<Q>>>0?1:0)|0;J=0x1a6439ec+m|0;W=0x8cc70208+A+(J>>>0<m>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;C=C+h|0;E=E+c+(C>>>0<h>>>0?1:0)|0;Q=(U>>>1|S<<31)^(U>>>8|S<<24)^(U>>>7|S<<25)|0;C=C+Q|0;E=E+((S>>>1|U<<31)^(S>>>8|U<<24)^S>>>7)+(C>>>0<Q>>>0?1:0)|0;Q=(w>>>19|d<<13)^(w<<3|d>>>29)^(w>>>6|d<<26)|0;C=C+Q|0;E=E+((d>>>19|w<<13)^(d<<3|w>>>29)^d>>>6)+(C>>>0<Q>>>0?1:0)|0;J=0x23631e28+C|0;W=0x90befffa+E+(J>>>0<C>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;U=U+l|0;S=S+u+(U>>>0<l>>>0?1:0)|0;Q=(O>>>1|M<<31)^(O>>>8|M<<24)^(O>>>7|M<<25)|0;U=U+Q|0;S=S+((M>>>1|O<<31)^(M>>>8|O<<24)^M>>>7)+(U>>>0<Q>>>0?1:0)|0;Q=(m>>>19|A<<13)^(m<<3|A>>>29)^(m>>>6|A<<26)|0;U=U+Q|0;S=S+((A>>>19|m<<13)^(A<<3|m>>>29)^A>>>6)+(U>>>0<Q>>>0?1:0)|0;J=0xde82bde9+U|0;W=0xa4506ceb+S+(J>>>0<U>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;O=O+y|0;M=M+p+(O>>>0<y>>>0?1:0)|0;Q=(L>>>1|H<<31)^(L>>>8|H<<24)^(L>>>7|H<<25)|0;O=O+Q|0;M=M+((H>>>1|L<<31)^(H>>>8|L<<24)^H>>>7)+(O>>>0<Q>>>0?1:0)|0;Q=(C>>>19|E<<13)^(C<<3|E>>>29)^(C>>>6|E<<26)|0;O=O+Q|0;M=M+((E>>>19|C<<13)^(E<<3|C>>>29)^E>>>6)+(O>>>0<Q>>>0?1:0)|0;J=0xb2c67915+O|0;W=0xbef9a3f7+M+(J>>>0<O>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;L=L+g|0;H=H+b+(L>>>0<g>>>0?1:0)|0;Q=(t>>>1|f<<31)^(t>>>8|f<<24)^(t>>>7|f<<25)|0;L=L+Q|0;H=H+((f>>>1|t<<31)^(f>>>8|t<<24)^f>>>7)+(L>>>0<Q>>>0?1:0)|0;Q=(U>>>19|S<<13)^(U<<3|S>>>29)^(U>>>6|S<<26)|0;L=L+Q|0;H=H+((S>>>19|U<<13)^(S<<3|U>>>29)^S>>>6)+(L>>>0<Q>>>0?1:0)|0;J=0xe372532b+L|0;W=0xc67178f2+H+(J>>>0<L>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;t=t+v|0;f=f+_+(t>>>0<v>>>0?1:0)|0;Q=(r>>>1|e<<31)^(r>>>8|e<<24)^(r>>>7|e<<25)|0;t=t+Q|0;f=f+((e>>>1|r<<31)^(e>>>8|r<<24)^e>>>7)+(t>>>0<Q>>>0?1:0)|0;Q=(O>>>19|M<<13)^(O<<3|M>>>29)^(O>>>6|M<<26)|0;t=t+Q|0;f=f+((M>>>19|O<<13)^(M<<3|O>>>29)^M>>>6)+(t>>>0<Q>>>0?1:0)|0;J=0xea26619c+t|0;W=0xca273ece+f+(J>>>0<t>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;r=r+w|0;e=e+d+(r>>>0<w>>>0?1:0)|0;Q=(i>>>1|n<<31)^(i>>>8|n<<24)^(i>>>7|n<<25)|0;r=r+Q|0;e=e+((n>>>1|i<<31)^(n>>>8|i<<24)^n>>>7)+(r>>>0<Q>>>0?1:0)|0;Q=(L>>>19|H<<13)^(L<<3|H>>>29)^(L>>>6|H<<26)|0;r=r+Q|0;e=e+((H>>>19|L<<13)^(H<<3|L>>>29)^H>>>6)+(r>>>0<Q>>>0?1:0)|0;J=0x21c0c207+r|0;W=0xd186b8c7+e+(J>>>0<r>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;i=i+m|0;n=n+A+(i>>>0<m>>>0?1:0)|0;Q=(s>>>1|a<<31)^(s>>>8|a<<24)^(s>>>7|a<<25)|0;i=i+Q|0;n=n+((a>>>1|s<<31)^(a>>>8|s<<24)^a>>>7)+(i>>>0<Q>>>0?1:0)|0;Q=(t>>>19|f<<13)^(t<<3|f>>>29)^(t>>>6|f<<26)|0;i=i+Q|0;n=n+((f>>>19|t<<13)^(f<<3|t>>>29)^f>>>6)+(i>>>0<Q>>>0?1:0)|0;J=0xcde0eb1e+i|0;W=0xeada7dd6+n+(J>>>0<i>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;s=s+C|0;a=a+E+(s>>>0<C>>>0?1:0)|0;Q=(x>>>1|o<<31)^(x>>>8|o<<24)^(x>>>7|o<<25)|0;s=s+Q|0;a=a+((o>>>1|x<<31)^(o>>>8|x<<24)^o>>>7)+(s>>>0<Q>>>0?1:0)|0;Q=(r>>>19|e<<13)^(r<<3|e>>>29)^(r>>>6|e<<26)|0;s=s+Q|0;a=a+((e>>>19|r<<13)^(e<<3|r>>>29)^e>>>6)+(s>>>0<Q>>>0?1:0)|0;J=0xee6ed178+s|0;W=0xf57d4f7f+a+(J>>>0<s>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;x=x+U|0;o=o+S+(x>>>0<U>>>0?1:0)|0;Q=(h>>>1|c<<31)^(h>>>8|c<<24)^(h>>>7|c<<25)|0;x=x+Q|0;o=o+((c>>>1|h<<31)^(c>>>8|h<<24)^c>>>7)+(x>>>0<Q>>>0?1:0)|0;Q=(i>>>19|n<<13)^(i<<3|n>>>29)^(i>>>6|n<<26)|0;x=x+Q|0;o=o+((n>>>19|i<<13)^(n<<3|i>>>29)^n>>>6)+(x>>>0<Q>>>0?1:0)|0;J=0x72176fba+x|0;W=0x6f067aa+o+(J>>>0<x>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;h=h+O|0;c=c+M+(h>>>0<O>>>0?1:0)|0;Q=(l>>>1|u<<31)^(l>>>8|u<<24)^(l>>>7|u<<25)|0;h=h+Q|0;c=c+((u>>>1|l<<31)^(u>>>8|l<<24)^u>>>7)+(h>>>0<Q>>>0?1:0)|0;Q=(s>>>19|a<<13)^(s<<3|a>>>29)^(s>>>6|a<<26)|0;h=h+Q|0;c=c+((a>>>19|s<<13)^(a<<3|s>>>29)^a>>>6)+(h>>>0<Q>>>0?1:0)|0;J=0xa2c898a6+h|0;W=0xa637dc5+c+(J>>>0<h>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;l=l+L|0;u=u+H+(l>>>0<L>>>0?1:0)|0;Q=(y>>>1|p<<31)^(y>>>8|p<<24)^(y>>>7|p<<25)|0;l=l+Q|0;u=u+((p>>>1|y<<31)^(p>>>8|y<<24)^p>>>7)+(l>>>0<Q>>>0?1:0)|0;Q=(x>>>19|o<<13)^(x<<3|o>>>29)^(x>>>6|o<<26)|0;l=l+Q|0;u=u+((o>>>19|x<<13)^(o<<3|x>>>29)^o>>>6)+(l>>>0<Q>>>0?1:0)|0;J=0xbef90dae+l|0;W=0x113f9804+u+(J>>>0<l>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;y=y+t|0;p=p+f+(y>>>0<t>>>0?1:0)|0;Q=(g>>>1|b<<31)^(g>>>8|b<<24)^(g>>>7|b<<25)|0;y=y+Q|0;p=p+((b>>>1|g<<31)^(b>>>8|g<<24)^b>>>7)+(y>>>0<Q>>>0?1:0)|0;Q=(h>>>19|c<<13)^(h<<3|c>>>29)^(h>>>6|c<<26)|0;y=y+Q|0;p=p+((c>>>19|h<<13)^(c<<3|h>>>29)^c>>>6)+(y>>>0<Q>>>0?1:0)|0;J=0x131c471b+y|0;W=0x1b710b35+p+(J>>>0<y>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;g=g+r|0;b=b+e+(g>>>0<r>>>0?1:0)|0;Q=(v>>>1|_<<31)^(v>>>8|_<<24)^(v>>>7|_<<25)|0;g=g+Q|0;b=b+((_>>>1|v<<31)^(_>>>8|v<<24)^_>>>7)+(g>>>0<Q>>>0?1:0)|0;Q=(l>>>19|u<<13)^(l<<3|u>>>29)^(l>>>6|u<<26)|0;g=g+Q|0;b=b+((u>>>19|l<<13)^(u<<3|l>>>29)^u>>>6)+(g>>>0<Q>>>0?1:0)|0;J=0x23047d84+g|0;W=0x28db77f5+b+(J>>>0<g>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;v=v+i|0;_=_+n+(v>>>0<i>>>0?1:0)|0;Q=(w>>>1|d<<31)^(w>>>8|d<<24)^(w>>>7|d<<25)|0;v=v+Q|0;_=_+((d>>>1|w<<31)^(d>>>8|w<<24)^d>>>7)+(v>>>0<Q>>>0?1:0)|0;Q=(y>>>19|p<<13)^(y<<3|p>>>29)^(y>>>6|p<<26)|0;v=v+Q|0;_=_+((p>>>19|y<<13)^(p<<3|y>>>29)^p>>>6)+(v>>>0<Q>>>0?1:0)|0;J=0x40c72493+v|0;W=0x32caab7b+_+(J>>>0<v>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;w=w+s|0;d=d+a+(w>>>0<s>>>0?1:0)|0;Q=(m>>>1|A<<31)^(m>>>8|A<<24)^(m>>>7|A<<25)|0;w=w+Q|0;d=d+((A>>>1|m<<31)^(A>>>8|m<<24)^A>>>7)+(w>>>0<Q>>>0?1:0)|0;Q=(g>>>19|b<<13)^(g<<3|b>>>29)^(g>>>6|b<<26)|0;w=w+Q|0;d=d+((b>>>19|g<<13)^(b<<3|g>>>29)^b>>>6)+(w>>>0<Q>>>0?1:0)|0;J=0x15c9bebc+w|0;W=0x3c9ebe0a+d+(J>>>0<w>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;m=m+x|0;A=A+o+(m>>>0<x>>>0?1:0)|0;Q=(C>>>1|E<<31)^(C>>>8|E<<24)^(C>>>7|E<<25)|0;m=m+Q|0;A=A+((E>>>1|C<<31)^(E>>>8|C<<24)^E>>>7)+(m>>>0<Q>>>0?1:0)|0;Q=(v>>>19|_<<13)^(v<<3|_>>>29)^(v>>>6|_<<26)|0;m=m+Q|0;A=A+((_>>>19|v<<13)^(_<<3|v>>>29)^_>>>6)+(m>>>0<Q>>>0?1:0)|0;J=0x9c100d4c+m|0;W=0x431d67c4+A+(J>>>0<m>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;C=C+h|0;E=E+c+(C>>>0<h>>>0?1:0)|0;Q=(U>>>1|S<<31)^(U>>>8|S<<24)^(U>>>7|S<<25)|0;C=C+Q|0;E=E+((S>>>1|U<<31)^(S>>>8|U<<24)^S>>>7)+(C>>>0<Q>>>0?1:0)|0;Q=(w>>>19|d<<13)^(w<<3|d>>>29)^(w>>>6|d<<26)|0;C=C+Q|0;E=E+((d>>>19|w<<13)^(d<<3|w>>>29)^d>>>6)+(C>>>0<Q>>>0?1:0)|0;J=0xcb3e42b6+C|0;W=0x4cc5d4be+E+(J>>>0<C>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;U=U+l|0;S=S+u+(U>>>0<l>>>0?1:0)|0;Q=(O>>>1|M<<31)^(O>>>8|M<<24)^(O>>>7|M<<25)|0;U=U+Q|0;S=S+((M>>>1|O<<31)^(M>>>8|O<<24)^M>>>7)+(U>>>0<Q>>>0?1:0)|0;Q=(m>>>19|A<<13)^(m<<3|A>>>29)^(m>>>6|A<<26)|0;U=U+Q|0;S=S+((A>>>19|m<<13)^(A<<3|m>>>29)^A>>>6)+(U>>>0<Q>>>0?1:0)|0;J=0xfc657e2a+U|0;W=0x597f299c+S+(J>>>0<U>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;O=O+y|0;M=M+p+(O>>>0<y>>>0?1:0)|0;Q=(L>>>1|H<<31)^(L>>>8|H<<24)^(L>>>7|H<<25)|0;O=O+Q|0;M=M+((H>>>1|L<<31)^(H>>>8|L<<24)^H>>>7)+(O>>>0<Q>>>0?1:0)|0;Q=(C>>>19|E<<13)^(C<<3|E>>>29)^(C>>>6|E<<26)|0;O=O+Q|0;M=M+((E>>>19|C<<13)^(E<<3|C>>>29)^E>>>6)+(O>>>0<Q>>>0?1:0)|0;J=0x3ad6faec+O|0;W=0x5fcb6fab+M+(J>>>0<O>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;L=L+g|0;H=H+b+(L>>>0<g>>>0?1:0)|0;Q=(t>>>1|f<<31)^(t>>>8|f<<24)^(t>>>7|f<<25)|0;L=L+Q|0;H=H+((f>>>1|t<<31)^(f>>>8|t<<24)^f>>>7)+(L>>>0<Q>>>0?1:0)|0;Q=(U>>>19|S<<13)^(U<<3|S>>>29)^(U>>>6|S<<26)|0;L=L+Q|0;H=H+((S>>>19|U<<13)^(S<<3|U>>>29)^S>>>6)+(L>>>0<Q>>>0?1:0)|0;J=0x4a475817+L|0;W=0x6c44198c+H+(J>>>0<L>>>0?1:0)|0;J=J+K|0;W=W+V+(J>>>0<K>>>0?1:0)|0;Q=(G>>>14|z<<18)^(G>>>18|z<<14)^(G<<23|z>>>9)|0;J=J+Q|0;W=W+((z>>>14|G<<18)^(z>>>18|G<<14)^(z<<23|G>>>9))+(J>>>0<Q>>>0?1:0)|0;Q=q^G&(j^q)|0;J=J+Q|0;W=W+(F^z&(N^F))+(J>>>0<Q>>>0?1:0)|0;K=q;V=F;q=j;F=N;j=G;N=z;G=I+J|0;z=B+W+(G>>>0<I>>>0?1:0)|0;I=Z;B=T;Z=R;T=D;R=P;D=k;P=J+(R&Z^I&(R^Z))|0;k=W+(D&T^B&(D^T))+(P>>>0<J>>>0?1:0)|0;Q=(R>>>28|D<<4)^(R<<30|D>>>2)^(R<<25|D>>>7)|0;P=P+Q|0;k=k+((D>>>28|R<<4)^(D<<30|R>>>2)^(D<<25|R>>>7))+(P>>>0<Q>>>0?1:0)|0;Y=Y+P|0;X=X+k+(Y>>>0<P>>>0?1:0)|0;ff=ff+R|0;$=$+D+(ff>>>0<R>>>0?1:0)|0;ef=ef+Z|0;tf=tf+T+(ef>>>0<Z>>>0?1:0)|0;nf=nf+I|0;rf=rf+B+(nf>>>0<I>>>0?1:0)|0;sf=sf+G|0;af=af+z+(sf>>>0<G>>>0?1:0)|0;xf=xf+j|0;of=of+N+(xf>>>0<j>>>0?1:0)|0;hf=hf+q|0;cf=cf+F+(hf>>>0<q>>>0?1:0)|0;lf=lf+K|0;uf=uf+V+(lf>>>0<K>>>0?1:0)|0}function i(f){f=f|0;Hf(Of[f|0]<<24|Of[f|1]<<16|Of[f|2]<<8|Of[f|3],Of[f|4]<<24|Of[f|5]<<16|Of[f|6]<<8|Of[f|7],Of[f|8]<<24|Of[f|9]<<16|Of[f|10]<<8|Of[f|11],Of[f|12]<<24|Of[f|13]<<16|Of[f|14]<<8|Of[f|15],Of[f|16]<<24|Of[f|17]<<16|Of[f|18]<<8|Of[f|19],Of[f|20]<<24|Of[f|21]<<16|Of[f|22]<<8|Of[f|23],Of[f|24]<<24|Of[f|25]<<16|Of[f|26]<<8|Of[f|27],Of[f|28]<<24|Of[f|29]<<16|Of[f|30]<<8|Of[f|31],Of[f|32]<<24|Of[f|33]<<16|Of[f|34]<<8|Of[f|35],Of[f|36]<<24|Of[f|37]<<16|Of[f|38]<<8|Of[f|39],Of[f|40]<<24|Of[f|41]<<16|Of[f|42]<<8|Of[f|43],Of[f|44]<<24|Of[f|45]<<16|Of[f|46]<<8|Of[f|47],Of[f|48]<<24|Of[f|49]<<16|Of[f|50]<<8|Of[f|51],Of[f|52]<<24|Of[f|53]<<16|Of[f|54]<<8|Of[f|55],Of[f|56]<<24|Of[f|57]<<16|Of[f|58]<<8|Of[f|59],Of[f|60]<<24|Of[f|61]<<16|Of[f|62]<<8|Of[f|63],Of[f|64]<<24|Of[f|65]<<16|Of[f|66]<<8|Of[f|67],Of[f|68]<<24|Of[f|69]<<16|Of[f|70]<<8|Of[f|71],Of[f|72]<<24|Of[f|73]<<16|Of[f|74]<<8|Of[f|75],Of[f|76]<<24|Of[f|77]<<16|Of[f|78]<<8|Of[f|79],Of[f|80]<<24|Of[f|81]<<16|Of[f|82]<<8|Of[f|83],Of[f|84]<<24|Of[f|85]<<16|Of[f|86]<<8|Of[f|87],Of[f|88]<<24|Of[f|89]<<16|Of[f|90]<<8|Of[f|91],Of[f|92]<<24|Of[f|93]<<16|Of[f|94]<<8|Of[f|95],Of[f|96]<<24|Of[f|97]<<16|Of[f|98]<<8|Of[f|99],Of[f|100]<<24|Of[f|101]<<16|Of[f|102]<<8|Of[f|103],Of[f|104]<<24|Of[f|105]<<16|Of[f|106]<<8|Of[f|107],Of[f|108]<<24|Of[f|109]<<16|Of[f|110]<<8|Of[f|111],Of[f|112]<<24|Of[f|113]<<16|Of[f|114]<<8|Of[f|115],Of[f|116]<<24|Of[f|117]<<16|Of[f|118]<<8|Of[f|119],Of[f|120]<<24|Of[f|121]<<16|Of[f|122]<<8|Of[f|123],Of[f|124]<<24|Of[f|125]<<16|Of[f|126]<<8|Of[f|127])}function Lf(f){f=f|0;Of[f|0]=X>>>24;Of[f|1]=X>>>16&255;Of[f|2]=X>>>8&255;Of[f|3]=X&255;Of[f|4]=Y>>>24;Of[f|5]=Y>>>16&255;Of[f|6]=Y>>>8&255;Of[f|7]=Y&255;Of[f|8]=$>>>24;Of[f|9]=$>>>16&255;Of[f|10]=$>>>8&255;Of[f|11]=$&255;Of[f|12]=ff>>>24;Of[f|13]=ff>>>16&255;Of[f|14]=ff>>>8&255;Of[f|15]=ff&255;Of[f|16]=tf>>>24;Of[f|17]=tf>>>16&255;Of[f|18]=tf>>>8&255;Of[f|19]=tf&255;Of[f|20]=ef>>>24;Of[f|21]=ef>>>16&255;Of[f|22]=ef>>>8&255;Of[f|23]=ef&255;Of[f|24]=rf>>>24;Of[f|25]=rf>>>16&255;Of[f|26]=rf>>>8&255;Of[f|27]=rf&255;Of[f|28]=nf>>>24;Of[f|29]=nf>>>16&255;Of[f|30]=nf>>>8&255;Of[f|31]=nf&255;Of[f|32]=af>>>24;Of[f|33]=af>>>16&255;Of[f|34]=af>>>8&255;Of[f|35]=af&255;Of[f|36]=sf>>>24;Of[f|37]=sf>>>16&255;Of[f|38]=sf>>>8&255;Of[f|39]=sf&255;Of[f|40]=of>>>24;Of[f|41]=of>>>16&255;Of[f|42]=of>>>8&255;Of[f|43]=of&255;Of[f|44]=xf>>>24;Of[f|45]=xf>>>16&255;Of[f|46]=xf>>>8&255;Of[f|47]=xf&255;Of[f|48]=cf>>>24;Of[f|49]=cf>>>16&255;Of[f|50]=cf>>>8&255;Of[f|51]=cf&255;Of[f|52]=hf>>>24;Of[f|53]=hf>>>16&255;Of[f|54]=hf>>>8&255;Of[f|55]=hf&255;Of[f|56]=uf>>>24;Of[f|57]=uf>>>16&255;Of[f|58]=uf>>>8&255;Of[f|59]=uf&255;Of[f|60]=lf>>>24;Of[f|61]=lf>>>16&255;Of[f|62]=lf>>>8&255;Of[f|63]=lf&255}function kf(){X=0x6a09e667;Y=0xf3bcc908;$=0xbb67ae85;ff=0x84caa73b;tf=0x3c6ef372;ef=0xfe94f82b;rf=0xa54ff53a;nf=0x5f1d36f1;af=0x510e527f;sf=0xade682d1;of=0x9b05688c;xf=0x2b3e6c1f;cf=0x1f83d9ab;hf=0xfb41bd6b;uf=0x5be0cd19;lf=0x137e2179;k=P=0}function r(f,t,e,r,n,i,a,s,o,x,c,h,u,l,p,y,b,g){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;o=o|0;x=x|0;c=c|0;h=h|0;u=u|0;l=l|0;p=p|0;y=y|0;b=b|0;g=g|0;X=f;Y=t;$=e;ff=r;tf=n;ef=i;rf=a;nf=s;af=o;sf=x;of=c;xf=h;cf=u;hf=l;uf=p;lf=y;k=b;P=g}function a(f,t){f=f|0;t=t|0;var e=0;if(f&127)return-1;while((t|0)>=128){i(f);f=f+128|0;t=t-128|0;e=e+128|0}k=k+e|0;if(k>>>0<e>>>0)P=P+1|0;return e|0}function d(f,t,e){f=f|0;t=t|0;e=e|0;var r=0,n=0;if(f&127)return-1;if(~e)if(e&63)return-1;if((t|0)>=128){r=a(f,t)|0;if((r|0)==-1)return-1;f=f+r|0;t=t-r|0}r=r+t|0;k=k+t|0;if(k>>>0<t>>>0)P=P+1|0;Of[f|t]=0x80;if((t|0)>=112){for(n=t+1|0;(n|0)<128;n=n+1|0)Of[f|n]=0x00;i(f);t=0;Of[f|0]=0}for(n=t+1|0;(n|0)<123;n=n+1|0)Of[f|n]=0;Of[f|120]=P>>>21&255;Of[f|121]=P>>>13&255;Of[f|122]=P>>>5&255;Of[f|123]=P<<3&255|k>>>29;Of[f|124]=k>>>21&255;Of[f|125]=k>>>13&255;Of[f|126]=k>>>5&255;Of[f|127]=k<<3&255;i(f);if(~e)Lf(e);return r|0}function Pf(){X=D;Y=R;$=T;ff=Z;tf=B;ef=I;rf=z;nf=G;af=N;sf=j;of=F;xf=q;cf=V;hf=K;uf=W;lf=J;k=128;P=0}function Df(){X=Q;Y=pf;$=yf;ff=bf;tf=gf;ef=_f;rf=vf;nf=df;af=wf;sf=Af;of=mf;xf=Ef;cf=Cf;hf=Sf;uf=Uf;lf=Mf;k=128;P=0}function n(f,t,e,r,n,i,a,s,o,x,c,h,u,l,p,y,b,g,_,v,d,w,A,m,E,C,S,U,M,O,H,L){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;i=i|0;a=a|0;s=s|0;o=o|0;x=x|0;c=c|0;h=h|0;u=u|0;l=l|0;p=p|0;y=y|0;b=b|0;g=g|0;_=_|0;v=v|0;d=d|0;w=w|0;A=A|0;m=m|0;E=E|0;C=C|0;S=S|0;U=U|0;M=M|0;O=O|0;H=H|0;L=L|0;kf();Hf(f^0x5c5c5c5c,t^0x5c5c5c5c,e^0x5c5c5c5c,r^0x5c5c5c5c,n^0x5c5c5c5c,i^0x5c5c5c5c,a^0x5c5c5c5c,s^0x5c5c5c5c,o^0x5c5c5c5c,x^0x5c5c5c5c,c^0x5c5c5c5c,h^0x5c5c5c5c,u^0x5c5c5c5c,l^0x5c5c5c5c,p^0x5c5c5c5c,y^0x5c5c5c5c,b^0x5c5c5c5c,g^0x5c5c5c5c,_^0x5c5c5c5c,v^0x5c5c5c5c,d^0x5c5c5c5c,w^0x5c5c5c5c,A^0x5c5c5c5c,m^0x5c5c5c5c,E^0x5c5c5c5c,C^0x5c5c5c5c,S^0x5c5c5c5c,U^0x5c5c5c5c,M^0x5c5c5c5c,O^0x5c5c5c5c,H^0x5c5c5c5c,L^0x5c5c5c5c);Q=X;pf=Y;yf=$;bf=ff;gf=tf;_f=ef;vf=rf;df=nf;wf=af;Af=sf;mf=of;Ef=xf;Cf=cf;Sf=hf;Uf=uf;Mf=lf;kf();Hf(f^0x36363636,t^0x36363636,e^0x36363636,r^0x36363636,n^0x36363636,i^0x36363636,a^0x36363636,s^0x36363636,o^0x36363636,x^0x36363636,c^0x36363636,h^0x36363636,u^0x36363636,l^0x36363636,p^0x36363636,y^0x36363636,b^0x36363636,g^0x36363636,_^0x36363636,v^0x36363636,d^0x36363636,w^0x36363636,A^0x36363636,m^0x36363636,E^0x36363636,C^0x36363636,S^0x36363636,U^0x36363636,M^0x36363636,O^0x36363636,H^0x36363636,L^0x36363636);D=X;R=Y;T=$;Z=ff;B=tf;I=ef;z=rf;G=nf;N=af;j=sf;F=of;q=xf;V=cf;K=hf;W=uf;J=lf;k=128;P=0}function Rf(f,t,e){f=f|0;t=t|0;e=e|0;var r=0,n=0,i=0,a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0,p=0,y=0,b=0,g=0,_=0,v=0;if(f&127)return-1;if(~e)if(e&63)return-1;v=d(f,t,-1)|0;r=X;n=Y;i=$;a=ff;s=tf;o=ef;x=rf;c=nf;h=af;u=sf;l=of;p=xf;y=cf;b=hf;g=uf;_=lf;Df();Hf(r,n,i,a,s,o,x,c,h,u,l,p,y,b,g,_,0x80000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1536);if(~e)Lf(e);return v|0}function s(f,t,e,r,n){f=f|0;t=t|0;e=e|0;r=r|0;n=n|0;var i=0,a=0,s=0,o=0,x=0,c=0,h=0,u=0,l=0,p=0,y=0,b=0,g=0,_=0,v=0,d=0,w=0,A=0,m=0,E=0,C=0,S=0,U=0,M=0,O=0,H=0,L=0,k=0,P=0,D=0,R=0,T=0;if(f&127)return-1;if(~n)if(n&63)return-1;Of[f+t|0]=e>>>24;Of[f+t+1|0]=e>>>16&255;Of[f+t+2|0]=e>>>8&255;Of[f+t+3|0]=e&255;Rf(f,t+4|0,-1)|0;i=w=X;a=A=Y;s=m=$;o=E=ff;x=C=tf;c=S=ef;h=U=rf;u=M=nf;l=O=af;p=H=sf;y=L=of;b=k=xf;g=P=cf;_=D=hf;v=R=uf;d=T=lf;r=r-1|0;while((r|0)>0){Pf();Hf(w,A,m,E,C,S,U,M,O,H,L,k,P,D,R,T,0x80000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1536);w=X;A=Y;m=$;E=ff;C=tf;S=ef;U=rf;M=nf;O=af;H=sf;L=of;k=xf;P=cf;D=hf;R=uf;T=lf;Df();Hf(w,A,m,E,C,S,U,M,O,H,L,k,P,D,R,T,0x80000000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1536);w=X;A=Y;m=$;E=ff;C=tf;S=ef;U=rf;M=nf;O=af;H=sf;L=of;k=xf;P=cf;D=hf;R=uf;T=lf;i=i^X;a=a^Y;s=s^$;o=o^ff;x=x^tf;c=c^ef;h=h^rf;u=u^nf;l=l^af;p=p^sf;y=y^of;b=b^xf;g=g^cf;_=_^hf;v=v^uf;d=d^lf;r=r-1|0}X=i;Y=a;$=s;ff=o;tf=x;ef=c;rf=h;nf=u;af=l;sf=p;of=y;xf=b;cf=g;hf=_;uf=v;lf=d;if(~n)Lf(n);return 0}return{reset:kf,init:r,process:a,finish:d,hmac_reset:Pf,hmac_init:n,hmac_finish:Rf,pbkdf2_generate_block:s}},xf=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),cf=128,hf=64,uf=function(t){function f(){var f=t.call(this)||this;return f.NAME="sha512",f.BLOCK_SIZE=cf,f.HASH_SIZE=hf,f.heap=x(),f.asm=of({Uint8Array:Uint8Array},null,f.heap.buffer),f.reset(),f}return xf(f,t),f.NAME="sha512",f}(X),lf=function(){function f(f,t,e){if(!f.HASH_SIZE)throw new SyntaxError("option 'hash' supplied doesn't seem to be a valid hash function");this.hash=f,this.BLOCK_SIZE=this.hash.BLOCK_SIZE,this.HMAC_SIZE=this.hash.HASH_SIZE,this.result=null,this.key=pf(this.hash,t);for(var r=new Uint8Array(this.key),n=0;n<r.length;++n)r[n]^=54;this.hash.reset().process(r),void 0!==e?this._hmac_init_verify(e):this.verify=null}return f.prototype.process=function(f){if(null!==this.result)throw new b("state must be reset before processing new data");return this.hash.process(f),this},f.prototype.finish=function(){if(null!==this.result)throw new b("state must be reset before processing new data");for(var f=this.hash.finish().result,t=new Uint8Array(this.key),e=0;e<t.length;++e)t[e]^=92;var r=this.verify,n=this.hash.reset().process(t).process(f).finish().result;if(r){if(r.length!==n.length)throw new Error("HMAC verification failed, lengths doesn't match");var i=0;for(e=0;e<r.length;e++)i|=r[e]^n[e];if(0!==i)throw new Error("HMAC verification failed, hash value doesn't match")}return this.result=n,this},f.prototype._hmac_init_verify=function(f){if(f.length!==this.HMAC_SIZE)throw new _("illegal verification tag size");this.verify=f},f}();function pf(f,t){var e=new Uint8Array(f.BLOCK_SIZE);return t.length>f.BLOCK_SIZE?e.set(f.reset().process(t).finish().result):e.set(t),e}var yf=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),bf=function(n){function f(f,t){var e=this,r=new tf;return e=n.call(this,r,f,t)||this,e.reset(),void 0!==t?e._hmac_init_verify(t):e.verify=null,e}return yf(f,n),f.prototype.reset=function(){this.result=null;var f=this.key;return this.hash.reset().asm.hmac_init(f[0]<<24|f[1]<<16|f[2]<<8|f[3],f[4]<<24|f[5]<<16|f[6]<<8|f[7],f[8]<<24|f[9]<<16|f[10]<<8|f[11],f[12]<<24|f[13]<<16|f[14]<<8|f[15],f[16]<<24|f[17]<<16|f[18]<<8|f[19],f[20]<<24|f[21]<<16|f[22]<<8|f[23],f[24]<<24|f[25]<<16|f[26]<<8|f[27],f[28]<<24|f[29]<<16|f[30]<<8|f[31],f[32]<<24|f[33]<<16|f[34]<<8|f[35],f[36]<<24|f[37]<<16|f[38]<<8|f[39],f[40]<<24|f[41]<<16|f[42]<<8|f[43],f[44]<<24|f[45]<<16|f[46]<<8|f[47],f[48]<<24|f[49]<<16|f[50]<<8|f[51],f[52]<<24|f[53]<<16|f[54]<<8|f[55],f[56]<<24|f[57]<<16|f[58]<<8|f[59],f[60]<<24|f[61]<<16|f[62]<<8|f[63]),this},f.prototype.finish=function(){if(null!==this.result)throw new b("state must be reset before processing new data");var f=this.hash,t=this.hash.asm,e=this.hash.heap;t.hmac_finish(f.pos,f.len,0);var r=this.verify,n=new Uint8Array(ff);if(n.set(e.subarray(0,ff)),r){if(r.length!==n.length)throw new Error("HMAC verification failed, lengths doesn't match");for(var i=0,a=0;a<r.length;a++)i|=r[a]^n[a];if(0!==i)throw new Error("HMAC verification failed, hash value doesn't match")}else this.result=n;return this},f}(lf),gf=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),_f=function(n){function f(f,t){var e=this,r=new sf;return e=n.call(this,r,f,t)||this,e.reset(),void 0!==t?e._hmac_init_verify(t):e.verify=null,e}return gf(f,n),f.prototype.reset=function(){var f=this.key;return this.hash.reset().asm.hmac_init(f[0]<<24|f[1]<<16|f[2]<<8|f[3],f[4]<<24|f[5]<<16|f[6]<<8|f[7],f[8]<<24|f[9]<<16|f[10]<<8|f[11],f[12]<<24|f[13]<<16|f[14]<<8|f[15],f[16]<<24|f[17]<<16|f[18]<<8|f[19],f[20]<<24|f[21]<<16|f[22]<<8|f[23],f[24]<<24|f[25]<<16|f[26]<<8|f[27],f[28]<<24|f[29]<<16|f[30]<<8|f[31],f[32]<<24|f[33]<<16|f[34]<<8|f[35],f[36]<<24|f[37]<<16|f[38]<<8|f[39],f[40]<<24|f[41]<<16|f[42]<<8|f[43],f[44]<<24|f[45]<<16|f[46]<<8|f[47],f[48]<<24|f[49]<<16|f[50]<<8|f[51],f[52]<<24|f[53]<<16|f[54]<<8|f[55],f[56]<<24|f[57]<<16|f[58]<<8|f[59],f[60]<<24|f[61]<<16|f[62]<<8|f[63]),this},f.prototype.finish=function(){if(null===this.key)throw new b("no key is associated with the instance");if(null!==this.result)throw new b("state must be reset before processing new data");var f=this.hash,t=this.hash.asm,e=this.hash.heap;t.hmac_finish(f.pos,f.len,0);var r=this.verify,n=new Uint8Array(af);if(n.set(e.subarray(0,af)),r){if(r.length!==n.length)throw new Error("HMAC verification failed, lengths doesn't match");for(var i=0,a=0;a<r.length;a++)i|=r[a]^n[a];if(0!==i)throw new Error("HMAC verification failed, hash value doesn't match")}else this.result=n;return this},f}(lf),vf=function(){var r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(f,t){f.__proto__=t}||function(f,t){for(var e in t)t.hasOwnProperty(e)&&(f[e]=t[e])};return function(f,t){function e(){this.constructor=f}r(f,t),f.prototype=null===t?Object.create(t):(e.prototype=t.prototype,new e)}}(),df=function(n){function f(f,t){var e=this,r=new uf;return e=n.call(this,r,f,t)||this,e.reset(),void 0!==t?e._hmac_init_verify(t):e.verify=null,e}return vf(f,n),f.prototype.reset=function(){var f=this.key;return this.hash.reset().asm.hmac_init(f[0]<<24|f[1]<<16|f[2]<<8|f[3],f[4]<<24|f[5]<<16|f[6]<<8|f[7],f[8]<<24|f[9]<<16|f[10]<<8|f[11],f[12]<<24|f[13]<<16|f[14]<<8|f[15],f[16]<<24|f[17]<<16|f[18]<<8|f[19],f[20]<<24|f[21]<<16|f[22]<<8|f[23],f[24]<<24|f[25]<<16|f[26]<<8|f[27],f[28]<<24|f[29]<<16|f[30]<<8|f[31],f[32]<<24|f[33]<<16|f[34]<<8|f[35],f[36]<<24|f[37]<<16|f[38]<<8|f[39],f[40]<<24|f[41]<<16|f[42]<<8|f[43],f[44]<<24|f[45]<<16|f[46]<<8|f[47],f[48]<<24|f[49]<<16|f[50]<<8|f[51],f[52]<<24|f[53]<<16|f[54]<<8|f[55],f[56]<<24|f[57]<<16|f[58]<<8|f[59],f[60]<<24|f[61]<<16|f[62]<<8|f[63],f[64]<<24|f[65]<<16|f[66]<<8|f[67],f[68]<<24|f[69]<<16|f[70]<<8|f[71],f[72]<<24|f[73]<<16|f[74]<<8|f[75],f[76]<<24|f[77]<<16|f[78]<<8|f[79],f[80]<<24|f[81]<<16|f[82]<<8|f[83],f[84]<<24|f[85]<<16|f[86]<<8|f[87],f[88]<<24|f[89]<<16|f[90]<<8|f[91],f[92]<<24|f[93]<<16|f[94]<<8|f[95],f[96]<<24|f[97]<<16|f[98]<<8|f[99],f[100]<<24|f[101]<<16|f[102]<<8|f[103],f[104]<<24|f[105]<<16|f[106]<<8|f[107],f[108]<<24|f[109]<<16|f[110]<<8|f[111],f[112]<<24|f[113]<<16|f[114]<<8|f[115],f[116]<<24|f[117]<<16|f[118]<<8|f[119],f[120]<<24|f[121]<<16|f[122]<<8|f[123],f[124]<<24|f[125]<<16|f[126]<<8|f[127]),this},f.prototype.finish=function(){if(null===this.key)throw new b("no key is associated with the instance");if(null!==this.result)throw new b("state must be reset before processing new data");var f=this.hash,t=this.hash.asm,e=this.hash.heap;t.hmac_finish(f.pos,f.len,0);var r=this.verify,n=new Uint8Array(hf);if(n.set(e.subarray(0,hf)),r){if(r.length!==n.length)throw new Error("HMAC verification failed, lengths doesn't match");for(var i=0,a=0;a<r.length;a++)i|=r[a]^n[a];if(0!==i)throw new Error("HMAC verification failed, hash value doesn't match")}else this.result=n;return this},f}(lf);function wf(f,t,e,r){for(var n=new bf(f),i=new Uint8Array(r),a=Math.ceil(r/n.HMAC_SIZE),s=1;s<=a;++s){var o=(s-1)*n.HMAC_SIZE,x=(s<a?0:r%n.HMAC_SIZE)||n.HMAC_SIZE;n.reset().process(t),n.hash.asm.pbkdf2_generate_block(n.hash.pos,n.hash.len,s,e,0),i.set(n.hash.heap.subarray(0,x),o)}return i}function Af(f,t,e,r){for(var n=new _f(f),i=new Uint8Array(r),a=Math.ceil(r/n.HMAC_SIZE),s=1;s<=a;++s){var o=(s-1)*n.HMAC_SIZE,x=(s<a?0:r%n.HMAC_SIZE)||n.HMAC_SIZE;n.reset().process(t),n.hash.asm.pbkdf2_generate_block(n.hash.pos,n.hash.len,s,e,0),i.set(n.hash.heap.subarray(0,x),o)}return i}function mf(f,t,e,r){for(var n=new df(f),i=new Uint8Array(r),a=Math.ceil(r/n.HMAC_SIZE),s=1;s<=a;++s){var o=(s-1)*n.HMAC_SIZE,x=(s<a?0:r%n.HMAC_SIZE)||n.HMAC_SIZE;n.reset().process(t),n.hash.asm.pbkdf2_generate_block(n.hash.pos,n.hash.len,s,e,0),i.set(n.hash.heap.subarray(0,x),o)}return i}var Ef=function(){function f(f){var t=f.length;if(2!==t&&3!==t&&8!==t)throw new SyntaxError("unexpected key type");var e=new J(new W(f[0])),r=new W(f[1]);this.key={0:e,1:r},2<t&&(this.key[2]=new W(f[2])),3<t&&(this.key[3]=new J(new W(f[3])),this.key[4]=new J(new W(f[4])),this.key[5]=new W(f[5]),this.key[6]=new W(f[6]),this.key[7]=new W(f[7]))}return f.prototype.encrypt=function(f){if(!this.key)throw new b("no key is associated with the instance");if(this.key[0].compare(f)<=0)throw new RangeError("data too large");var t=this.key[0],e=this.key[1],r=t.power(f,e).toBytes(),n=t.bitLength+7>>3;if(r.length<n){var i=new Uint8Array(n);i.set(r,n-r.length),r=i}return this.result=r,this},f.prototype.decrypt=function(f){if(this.key[0].compare(f)<=0)throw new RangeError("data too large");var t,e;if(void 0!==this.key[3]){e=this.key[0];for(var r=this.key[3],n=this.key[4],i=this.key[5],a=this.key[6],s=this.key[7],o=r.power(f,i),x=n.power(f,a),c=o.subtract(x);c.sign<0;)c=c.add(r);var h=r.reduce(s.multiply(c));t=h.multiply(n).add(x).clamp(e.bitLength).toBytes()}else{e=this.key[0];var u=this.key[2];t=e.power(f,u).toBytes()}var l=e.bitLength+7>>3;if(t.length<l){var p=new Uint8Array(l);p.set(t,l-t.length),t=p}return this.result=t,this},f}(),Cf=function(){function f(f,t,e){this.rsa=new Ef(f),this.hash=t,this.label=void 0!==e&&0<e.length?e:null}return f.prototype.encrypt=function(f,t){var e=Math.ceil(this.rsa.key[0].bitLength/8),r=this.hash.HASH_SIZE,n=f.byteLength||f.length||0,i=e-n-2*r-2;if(n>e-2*this.hash.HASH_SIZE-2)throw new _("data too large");var a=new Uint8Array(e),s=a.subarray(1,r+1),o=a.subarray(r+1);if(o.set(f,r+i+1),o.set(this.hash.process(this.label||new Uint8Array(0)).finish().result,0),o[r+i]=1,void 0!==t){if(s.length!==t.length)throw new _("random size must equal the hash size");s.set(t)}else G(s);for(var x=this.RSA_MGF1_generate(s,o.length),c=0;c<o.length;c++)o[c]^=x[c];var h=this.RSA_MGF1_generate(o,s.length);for(c=0;c<s.length;c++)s[c]^=h[c];return this.rsa.encrypt(new W(a)),new Uint8Array(this.rsa.result)},f.prototype.decrypt=function(f){if(!this.rsa.key)throw new b("no key is associated with the instance");var t=Math.ceil(this.rsa.key[0].bitLength/8),e=this.hash.HASH_SIZE,r=f.byteLength||f.length||0;if(r!==t)throw new _("bad data");this.rsa.decrypt(new W(f));var n=this.rsa.result[0],i=this.rsa.result.subarray(1,e+1),a=this.rsa.result.subarray(e+1);if(0!==n)throw new v("decryption failed");for(var s=this.RSA_MGF1_generate(a,i.length),o=0;o<i.length;o++)i[o]^=s[o];var x=this.RSA_MGF1_generate(i,a.length);for(o=0;o<a.length;o++)a[o]^=x[o];var c=this.hash.reset().process(this.label||new Uint8Array(0)).finish().result;for(o=0;o<e;o++)if(c[o]!==a[o])throw new v("decryption failed");for(var h=e;h<a.length;h++){var u=a[h];if(1===u)break;if(0!==u)throw new v("decryption failed")}if(h===a.length)throw new v("decryption failed");return this.rsa.result=a.subarray(h+1),new Uint8Array(this.rsa.result)},f.prototype.RSA_MGF1_generate=function(f,t){void 0===t&&(t=0);for(var e=this.hash.HASH_SIZE,r=new Uint8Array(t),n=new Uint8Array(4),i=Math.ceil(t/e),a=0;a<i;a++){n[0]=a>>>24,n[1]=a>>>16&255,n[2]=a>>>8&255,n[3]=255&a;var s=r.subarray(a*e),o=this.hash.reset().process(f).process(n).finish().result;o.length>s.length&&(o=o.subarray(0,s.length)),s.set(o)}return r},f}(),Sf=function(){function f(f,t,e){if(void 0===e&&(e=4),this.rsa=new Ef(f),this.hash=t,this.saltLength=e,this.saltLength<0)throw new TypeError("saltLength should be a non-negative number");if(null!==this.rsa.key&&Math.ceil((this.rsa.key[0].bitLength-1)/8)<this.hash.HASH_SIZE+this.saltLength+2)throw new SyntaxError("saltLength is too large")}return f.prototype.sign=function(f,t){var e=this.rsa.key[0].bitLength,r=this.hash.HASH_SIZE,n=Math.ceil((e-1)/8),i=this.saltLength,a=n-i-r-2,s=new Uint8Array(n),o=s.subarray(n-r-1,n-1),x=s.subarray(0,n-r-1),c=x.subarray(a+1),h=new Uint8Array(8+r+i),u=h.subarray(8,8+r),l=h.subarray(8+r);if(u.set(this.hash.process(f).finish().result),0<i)if(void 0!==t){if(l.length!==t.length)throw new _("random size must equal the salt size");l.set(t)}else G(l);x[a]=1,c.set(l),o.set(this.hash.reset().process(h).finish().result);for(var p=this.RSA_MGF1_generate(o,x.length),y=0;y<x.length;y++)x[y]^=p[y];s[n-1]=188;var b=8*n-e+1;return b%8&&(s[0]&=255>>>b),this.rsa.decrypt(new W(s)),this.rsa.result},f.prototype.verify=function(f,t){var e=this.rsa.key[0].bitLength,r=this.hash.HASH_SIZE,n=Math.ceil((e-1)/8),i=this.saltLength,a=n-i-r-2;this.rsa.encrypt(new W(f));var s=this.rsa.result;if(188!==s[n-1])throw new v("bad signature");var o=s.subarray(n-r-1,n-1),x=s.subarray(0,n-r-1),c=x.subarray(a+1),h=8*n-e+1;if(h%8&&s[0]>>>8-h)throw new v("bad signature");for(var u=this.RSA_MGF1_generate(o,x.length),l=0;l<x.length;l++)x[l]^=u[l];h%8&&(s[0]&=255>>>h);for(l=0;l<a;l++)if(0!==x[l])throw new v("bad signature");if(1!==x[a])throw new v("bad signature");var p=new Uint8Array(8+r+i),y=p.subarray(8,8+r),b=p.subarray(8+r);y.set(this.hash.reset().process(t).finish().result),b.set(c);var g=this.hash.reset().process(p).finish().result;for(l=0;l<r;l++)if(o[l]!==g[l])throw new v("bad signature")},f.prototype.RSA_MGF1_generate=function(f,t){void 0===t&&(t=0);for(var e=this.hash.HASH_SIZE,r=new Uint8Array(t),n=new Uint8Array(4),i=Math.ceil(t/e),a=0;a<i;a++){n[0]=a>>>24,n[1]=a>>>16&255,n[2]=a>>>8&255,n[3]=255&a;var s=r.subarray(a*e),o=this.hash.reset().process(f).process(n).finish().result;o.length>s.length&&(o=o.subarray(0,s.length)),s.set(o)}return r},f}(),Uf=function(){function f(f,t){this.rsa=new Ef(f),this.hash=t}return f.prototype.sign=function(f){if(!this.rsa.key)throw new b("no key is associated with the instance");var t=Of(this.hash),e=this.hash.HASH_SIZE,r=t.length+e,n=this.rsa.key[0].bitLength+7>>3;if(n<r+11)throw new Error("Message too long");var i=new Uint8Array(e);i.set(this.hash.process(f).finish().result);var a=new Uint8Array(n),s=0;for(a[s++]=0,a[s++]=1;s<n-r-1;s++)a[s]=255;return a[s++]=0,a.set(t,s),a.set(i,a.length-e),this.rsa.decrypt(new W(a)),this.rsa.result},f.prototype.verify=function(f,t){var e=Of(this.hash),r=this.hash.HASH_SIZE,n=e.length+r,i=this.rsa.key[0].bitLength+7>>3;if(i<n+11)throw new v("Bad signature");this.rsa.encrypt(new W(f));var a=new Uint8Array(r);a.set(this.hash.process(t).finish().result);var s=1,o=this.rsa.result,x=0;for(s&=0===o[x++]?1:0,s&=1===o[x++]?1:0;x<i-n-1;x++)s&=255===o[x]?1:0;s&=0===o[x++]?1:0;for(var c=0,h=x+e.length;x<h;x++)s&=o[x]===e[c++]?1:0;for(c=0,h=x+a.length;x<h;x++)s&=o[x]===a[c++]?1:0;if(!s)throw new v("Bad signature")},f}(),Mf={sha1:new Uint8Array([48,33,48,9,6,5,43,14,3,2,26,5,0,4,20]),sha256:new Uint8Array([48,49,48,13,6,9,96,134,72,1,101,3,4,2,1,5,0,4,32]),sha384:new Uint8Array([48,65,48,13,6,9,96,134,72,1,101,3,4,2,2,5,0,4,48]),sha512:new Uint8Array([48,81,48,13,6,9,96,134,72,1,101,3,4,2,3,5,0,4,64])};function Of(f){var t=Mf[f.NAME];if(!t)throw new Error("Cannot get hash prefix for hash algorithm '"+f.NAME+"'");return t}return f.string_to_bytes=r,f.hex_to_bytes=n,f.base64_to_bytes=i,f.bytes_to_string=a,f.bytes_to_hex=s,f.bytes_to_base64=o,f.IllegalStateError=b,f.IllegalArgumentError=_,f.SecurityError=v,f.AES_CBC=d,f.AES_CCM=E,f.AES_CFB=S,f.AES_CMAC=H,f.AES_CTR=k,f.AES_ECB=M,f.AES_GCM=R,f.AES_OFB=Z,f.BigNumber=W,f.Modulus=J,f.Sha1=tf,f.Sha256=sf,f.Sha512=uf,f.HmacSha1=bf,f.HmacSha256=_f,f.HmacSha512=df,f.Pbkdf2HmacSha1=wf,f.Pbkdf2HmacSha256=Af,f.Pbkdf2HmacSha512=mf,f.RSA_OAEP=Cf,f.RSA_PKCS1_v1_5=Uf,f.RSA_PSS=Sf,f.RSA=Ef,f}({}); \ No newline at end of file diff --git a/javascript/src/lib/elliptic.min.js b/javascript/src/lib/elliptic.min.js deleted file mode 100644 index 743f2aa701b6cd9c95e08f4521d06ffaea05ba9e..0000000000000000000000000000000000000000 --- a/javascript/src/lib/elliptic.min.js +++ /dev/null @@ -1,5 +0,0 @@ -!function(a){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=a();else if("function"==typeof define&&define.amd)define([],a);else{var b;b="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,b.elliptic=a()}}(function(){return function(){function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c||a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}return a}()({1:[function(a,b,c){"use strict";var d=c;d.version=a("../package.json").version,d.utils=a("./elliptic/utils"),d.rand=a("brorand"),d.curve=a("./elliptic/curve"),d.curves=a("./elliptic/curves"),d.ec=a("./elliptic/ec"),d.eddsa=a("./elliptic/eddsa")},{"../package.json":35,"./elliptic/curve":4,"./elliptic/curves":7,"./elliptic/ec":8,"./elliptic/eddsa":11,"./elliptic/utils":15,brorand:17}],2:[function(a,b,c){"use strict";function d(a,b){this.type=a,this.p=new f(b.p,16),this.red=b.prime?f.red(b.prime):f.mont(this.p),this.zero=new f(0).toRed(this.red),this.one=new f(1).toRed(this.red),this.two=new f(2).toRed(this.red),this.n=b.n&&new f(b.n,16),this.g=b.g&&this.pointFromJSON(b.g,b.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4),this._bitLength=this.n?this.n.bitLength():0;var c=this.n&&this.p.div(this.n);!c||c.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function e(a,b){this.curve=a,this.type=b,this.precomputed=null}var f=a("bn.js"),g=a("../utils"),h=g.getNAF,i=g.getJSF,j=g.assert;b.exports=d,d.prototype.point=function(){throw new Error("Not implemented")},d.prototype.validate=function(){throw new Error("Not implemented")},d.prototype._fixedNafMul=function(a,b){j(a.precomputed);var c=a._getDoubles(),d=h(b,1,this._bitLength),e=(1<<c.step+1)-(c.step%2===0?2:1);e/=3;for(var f=[],g=0;g<d.length;g+=c.step){for(var i=0,b=g+c.step-1;b>=g;b--)i=(i<<1)+d[b];f.push(i)}for(var k=this.jpoint(null,null,null),l=this.jpoint(null,null,null),m=e;m>0;m--){for(var g=0;g<f.length;g++){var i=f[g];i===m?l=l.mixedAdd(c.points[g]):i===-m&&(l=l.mixedAdd(c.points[g].neg()))}k=k.add(l)}return k.toP()},d.prototype._wnafMul=function(a,b){var c=4,d=a._getNAFPoints(c);c=d.wnd;for(var e=d.points,f=h(b,c,this._bitLength),g=this.jpoint(null,null,null),i=f.length-1;i>=0;i--){for(var b=0;i>=0&&0===f[i];i--)b++;if(i>=0&&b++,g=g.dblp(b),i<0)break;var k=f[i];j(0!==k),g="affine"===a.type?k>0?g.mixedAdd(e[k-1>>1]):g.mixedAdd(e[-k-1>>1].neg()):k>0?g.add(e[k-1>>1]):g.add(e[-k-1>>1].neg())}return"affine"===a.type?g.toP():g},d.prototype._wnafMulAdd=function(a,b,c,d,e){for(var f=this._wnafT1,g=this._wnafT2,j=this._wnafT3,k=0,l=0;l<d;l++){var m=b[l],n=m._getNAFPoints(a);f[l]=n.wnd,g[l]=n.points}for(var l=d-1;l>=1;l-=2){var o=l-1,p=l;if(1===f[o]&&1===f[p]){var q=[b[o],null,null,b[p]];0===b[o].y.cmp(b[p].y)?(q[1]=b[o].add(b[p]),q[2]=b[o].toJ().mixedAdd(b[p].neg())):0===b[o].y.cmp(b[p].y.redNeg())?(q[1]=b[o].toJ().mixedAdd(b[p]),q[2]=b[o].add(b[p].neg())):(q[1]=b[o].toJ().mixedAdd(b[p]),q[2]=b[o].toJ().mixedAdd(b[p].neg()));var r=[-3,-1,-5,-7,0,7,5,1,3],s=i(c[o],c[p]);k=Math.max(s[0].length,k),j[o]=new Array(k),j[p]=new Array(k);for(var t=0;t<k;t++){var u=0|s[0][t],v=0|s[1][t];j[o][t]=r[3*(u+1)+(v+1)],j[p][t]=0,g[o]=q}}else j[o]=h(c[o],f[o],this._bitLength),j[p]=h(c[p],f[p],this._bitLength),k=Math.max(j[o].length,k),k=Math.max(j[p].length,k)}for(var w=this.jpoint(null,null,null),x=this._wnafT4,l=k;l>=0;l--){for(var y=0;l>=0;){for(var z=!0,t=0;t<d;t++)x[t]=0|j[t][l],0!==x[t]&&(z=!1);if(!z)break;y++,l--}if(l>=0&&y++,w=w.dblp(y),l<0)break;for(var t=0;t<d;t++){var m,A=x[t];0!==A&&(A>0?m=g[t][A-1>>1]:A<0&&(m=g[t][-A-1>>1].neg()),w="affine"===m.type?w.mixedAdd(m):w.add(m))}}for(var l=0;l<d;l++)g[l]=null;return e?w:w.toP()},d.BasePoint=e,e.prototype.eq=function(){throw new Error("Not implemented")},e.prototype.validate=function(){return this.curve.validate(this)},d.prototype.decodePoint=function(a,b){a=g.toArray(a,b);var c=this.p.byteLength();if((4===a[0]||6===a[0]||7===a[0])&&a.length-1===2*c){6===a[0]?j(a[a.length-1]%2===0):7===a[0]&&j(a[a.length-1]%2===1);var d=this.point(a.slice(1,1+c),a.slice(1+c,1+2*c));return d}if((2===a[0]||3===a[0])&&a.length-1===c)return this.pointFromX(a.slice(1,1+c),3===a[0]);throw new Error("Unknown point format")},e.prototype.encodeCompressed=function(a){return this.encode(a,!0)},e.prototype._encode=function(a){var b=this.curve.p.byteLength(),c=this.getX().toArray("be",b);return a?[this.getY().isEven()?2:3].concat(c):[4].concat(c,this.getY().toArray("be",b))},e.prototype.encode=function(a,b){return g.encode(this._encode(b),a)},e.prototype.precompute=function(a){if(this.precomputed)return this;var b={doubles:null,naf:null,beta:null};return b.naf=this._getNAFPoints(8),b.doubles=this._getDoubles(4,a),b.beta=this._getBeta(),this.precomputed=b,this},e.prototype._hasDoubles=function(a){if(!this.precomputed)return!1;var b=this.precomputed.doubles;return!!b&&b.points.length>=Math.ceil((a.bitLength()+1)/b.step)},e.prototype._getDoubles=function(a,b){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var c=[this],d=this,e=0;e<b;e+=a){for(var f=0;f<a;f++)d=d.dbl();c.push(d)}return{step:a,points:c}},e.prototype._getNAFPoints=function(a){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var b=[this],c=(1<<a)-1,d=1===c?null:this.dbl(),e=1;e<c;e++)b[e]=b[e-1].add(d);return{wnd:a,points:b}},e.prototype._getBeta=function(){return null},e.prototype.dblp=function(a){for(var b=this,c=0;c<a;c++)b=b.dbl();return b}},{"../utils":15,"bn.js":16}],3:[function(a,b,c){"use strict";function d(a){this.twisted=1!==(0|a.a),this.mOneA=this.twisted&&(0|a.a)===-1,this.extended=this.mOneA,i.call(this,"edwards",a),this.a=new g(a.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new g(a.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new g(a.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),j(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1===(0|a.c)}function e(a,b,c,d,e){i.BasePoint.call(this,a,"projective"),null===b&&null===c&&null===d?(this.x=this.curve.zero,this.y=this.curve.one,this.z=this.curve.one,this.t=this.curve.zero,this.zOne=!0):(this.x=new g(b,16),this.y=new g(c,16),this.z=d?new g(d,16):this.curve.one,this.t=e&&new g(e,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.t&&!this.t.red&&(this.t=this.t.toRed(this.curve.red)),this.zOne=this.z===this.curve.one,this.curve.extended&&!this.t&&(this.t=this.x.redMul(this.y),this.zOne||(this.t=this.t.redMul(this.z.redInvm()))))}var f=a("../utils"),g=a("bn.js"),h=a("inherits"),i=a("./base"),j=f.assert;h(d,i),b.exports=d,d.prototype._mulA=function(a){return this.mOneA?a.redNeg():this.a.redMul(a)},d.prototype._mulC=function(a){return this.oneC?a:this.c.redMul(a)},d.prototype.jpoint=function(a,b,c,d){return this.point(a,b,c,d)},d.prototype.pointFromX=function(a,b){a=new g(a,16),a.red||(a=a.toRed(this.red));var c=a.redSqr(),d=this.c2.redSub(this.a.redMul(c)),e=this.one.redSub(this.c2.redMul(this.d).redMul(c)),f=d.redMul(e.redInvm()),h=f.redSqrt();if(0!==h.redSqr().redSub(f).cmp(this.zero))throw new Error("invalid point");var i=h.fromRed().isOdd();return(b&&!i||!b&&i)&&(h=h.redNeg()),this.point(a,h)},d.prototype.pointFromY=function(a,b){a=new g(a,16),a.red||(a=a.toRed(this.red));var c=a.redSqr(),d=c.redSub(this.c2),e=c.redMul(this.d).redMul(this.c2).redSub(this.a),f=d.redMul(e.redInvm());if(0===f.cmp(this.zero)){if(b)throw new Error("invalid point");return this.point(this.zero,a)}var h=f.redSqrt();if(0!==h.redSqr().redSub(f).cmp(this.zero))throw new Error("invalid point");return h.fromRed().isOdd()!==b&&(h=h.redNeg()),this.point(h,a)},d.prototype.validate=function(a){if(a.isInfinity())return!0;a.normalize();var b=a.x.redSqr(),c=a.y.redSqr(),d=b.redMul(this.a).redAdd(c),e=this.c2.redMul(this.one.redAdd(this.d.redMul(b).redMul(c)));return 0===d.cmp(e)},h(e,i.BasePoint),d.prototype.pointFromJSON=function(a){return e.fromJSON(this,a)},d.prototype.point=function(a,b,c,d){return new e(this,a,b,c,d)},e.fromJSON=function(a,b){return new e(a,b[0],b[1],b[2])},e.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},e.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},e.prototype._extDbl=function(){var a=this.x.redSqr(),b=this.y.redSqr(),c=this.z.redSqr();c=c.redIAdd(c);var d=this.curve._mulA(a),e=this.x.redAdd(this.y).redSqr().redISub(a).redISub(b),f=d.redAdd(b),g=f.redSub(c),h=d.redSub(b),i=e.redMul(g),j=f.redMul(h),k=e.redMul(h),l=g.redMul(f);return this.curve.point(i,j,l,k)},e.prototype._projDbl=function(){var a,b,c,d=this.x.redAdd(this.y).redSqr(),e=this.x.redSqr(),f=this.y.redSqr();if(this.curve.twisted){var g=this.curve._mulA(e),h=g.redAdd(f);if(this.zOne)a=d.redSub(e).redSub(f).redMul(h.redSub(this.curve.two)),b=h.redMul(g.redSub(f)),c=h.redSqr().redSub(h).redSub(h);else{var i=this.z.redSqr(),j=h.redSub(i).redISub(i);a=d.redSub(e).redISub(f).redMul(j),b=h.redMul(g.redSub(f)),c=h.redMul(j)}}else{var g=e.redAdd(f),i=this.curve._mulC(this.z).redSqr(),j=g.redSub(i).redSub(i);a=this.curve._mulC(d.redISub(g)).redMul(j),b=this.curve._mulC(g).redMul(e.redISub(f)),c=g.redMul(j)}return this.curve.point(a,b,c)},e.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},e.prototype._extAdd=function(a){var b=this.y.redSub(this.x).redMul(a.y.redSub(a.x)),c=this.y.redAdd(this.x).redMul(a.y.redAdd(a.x)),d=this.t.redMul(this.curve.dd).redMul(a.t),e=this.z.redMul(a.z.redAdd(a.z)),f=c.redSub(b),g=e.redSub(d),h=e.redAdd(d),i=c.redAdd(b),j=f.redMul(g),k=h.redMul(i),l=f.redMul(i),m=g.redMul(h);return this.curve.point(j,k,m,l)},e.prototype._projAdd=function(a){var b,c,d=this.z.redMul(a.z),e=d.redSqr(),f=this.x.redMul(a.x),g=this.y.redMul(a.y),h=this.curve.d.redMul(f).redMul(g),i=e.redSub(h),j=e.redAdd(h),k=this.x.redAdd(this.y).redMul(a.x.redAdd(a.y)).redISub(f).redISub(g),l=d.redMul(i).redMul(k);return this.curve.twisted?(b=d.redMul(j).redMul(g.redSub(this.curve._mulA(f))),c=i.redMul(j)):(b=d.redMul(j).redMul(g.redSub(f)),c=this.curve._mulC(i).redMul(j)),this.curve.point(l,b,c)},e.prototype.add=function(a){return this.isInfinity()?a:a.isInfinity()?this:this.curve.extended?this._extAdd(a):this._projAdd(a)},e.prototype.mul=function(a){return this._hasDoubles(a)?this.curve._fixedNafMul(this,a):this.curve._wnafMul(this,a)},e.prototype.mulAdd=function(a,b,c){return this.curve._wnafMulAdd(1,[this,b],[a,c],2,!1)},e.prototype.jmulAdd=function(a,b,c){return this.curve._wnafMulAdd(1,[this,b],[a,c],2,!0)},e.prototype.normalize=function(){if(this.zOne)return this;var a=this.z.redInvm();return this.x=this.x.redMul(a),this.y=this.y.redMul(a),this.t&&(this.t=this.t.redMul(a)),this.z=this.curve.one,this.zOne=!0,this},e.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},e.prototype.getX=function(){return this.normalize(),this.x.fromRed()},e.prototype.getY=function(){return this.normalize(),this.y.fromRed()},e.prototype.eq=function(a){return this===a||0===this.getX().cmp(a.getX())&&0===this.getY().cmp(a.getY())},e.prototype.eqXToP=function(a){var b=a.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(b))return!0;for(var c=a.clone(),d=this.curve.redN.redMul(this.z);;){if(c.iadd(this.curve.n),c.cmp(this.curve.p)>=0)return!1;if(b.redIAdd(d),0===this.x.cmp(b))return!0}},e.prototype.toP=e.prototype.normalize,e.prototype.mixedAdd=e.prototype.add},{"../utils":15,"./base":2,"bn.js":16,inherits:32}],4:[function(a,b,c){"use strict";var d=c;d.base=a("./base"),d["short"]=a("./short"),d.mont=a("./mont"),d.edwards=a("./edwards")},{"./base":2,"./edwards":3,"./mont":5,"./short":6}],5:[function(a,b,c){"use strict";function d(a){h.call(this,"mont",a),this.a=new f(a.a,16).toRed(this.red),this.b=new f(a.b,16).toRed(this.red),this.i4=new f(4).toRed(this.red).redInvm(),this.two=new f(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function e(a,b,c){h.BasePoint.call(this,a,"projective"),null===b&&null===c?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new f(b,16),this.z=new f(c,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}var f=a("bn.js"),g=a("inherits"),h=a("./base"),i=a("../utils");g(d,h),b.exports=d,d.prototype.validate=function(a){var b=a.normalize().x,c=b.redSqr(),d=c.redMul(b).redAdd(c.redMul(this.a)).redAdd(b),e=d.redSqrt();return 0===e.redSqr().cmp(d)},g(e,h.BasePoint),d.prototype.decodePoint=function(a,b){return this.point(i.toArray(a,b),1)},d.prototype.point=function(a,b){return new e(this,a,b)},d.prototype.pointFromJSON=function(a){return e.fromJSON(this,a)},e.prototype.precompute=function(){},e.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},e.fromJSON=function(a,b){return new e(a,b[0],b[1]||a.one)},e.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" z: "+this.z.fromRed().toString(16,2)+">"},e.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},e.prototype.dbl=function(){var a=this.x.redAdd(this.z),b=a.redSqr(),c=this.x.redSub(this.z),d=c.redSqr(),e=b.redSub(d),f=b.redMul(d),g=e.redMul(d.redAdd(this.curve.a24.redMul(e)));return this.curve.point(f,g)},e.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},e.prototype.diffAdd=function(a,b){var c=this.x.redAdd(this.z),d=this.x.redSub(this.z),e=a.x.redAdd(a.z),f=a.x.redSub(a.z),g=f.redMul(c),h=e.redMul(d),i=b.z.redMul(g.redAdd(h).redSqr()),j=b.x.redMul(g.redISub(h).redSqr());return this.curve.point(i,j)},e.prototype.mul=function(a){for(var b=a.clone(),c=this,d=this.curve.point(null,null),e=this,f=[];0!==b.cmpn(0);b.iushrn(1))f.push(b.andln(1));for(var g=f.length-1;g>=0;g--)0===f[g]?(c=c.diffAdd(d,e),d=d.dbl()):(d=c.diffAdd(d,e),c=c.dbl());return d},e.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},e.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},e.prototype.eq=function(a){return 0===this.getX().cmp(a.getX())},e.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},e.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{"../utils":15,"./base":2,"bn.js":16,inherits:32}],6:[function(a,b,c){"use strict";function d(a){j.call(this,"short",a),this.a=new h(a.a,16).toRed(this.red),this.b=new h(a.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(a),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function e(a,b,c,d){j.BasePoint.call(this,a,"affine"),null===b&&null===c?(this.x=null,this.y=null,this.inf=!0):(this.x=new h(b,16),this.y=new h(c,16),d&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function f(a,b,c,d){j.BasePoint.call(this,a,"jacobian"),null===b&&null===c&&null===d?(this.x=this.curve.one,this.y=this.curve.one,this.z=new h(0)):(this.x=new h(b,16),this.y=new h(c,16),this.z=new h(d,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}var g=a("../utils"),h=a("bn.js"),i=a("inherits"),j=a("./base"),k=g.assert;i(d,j),b.exports=d,d.prototype._getEndomorphism=function(a){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var b,c;if(a.beta)b=new h(a.beta,16).toRed(this.red);else{var d=this._getEndoRoots(this.p);b=d[0].cmp(d[1])<0?d[0]:d[1],b=b.toRed(this.red)}if(a.lambda)c=new h(a.lambda,16);else{var e=this._getEndoRoots(this.n);0===this.g.mul(e[0]).x.cmp(this.g.x.redMul(b))?c=e[0]:(c=e[1],k(0===this.g.mul(c).x.cmp(this.g.x.redMul(b))))}var f;return f=a.basis?a.basis.map(function(a){return{a:new h(a.a,16),b:new h(a.b,16)}}):this._getEndoBasis(c),{beta:b,lambda:c,basis:f}}},d.prototype._getEndoRoots=function(a){var b=a===this.p?this.red:h.mont(a),c=new h(2).toRed(b).redInvm(),d=c.redNeg(),e=new h(3).toRed(b).redNeg().redSqrt().redMul(c),f=d.redAdd(e).fromRed(),g=d.redSub(e).fromRed();return[f,g]},d.prototype._getEndoBasis=function(a){for(var b,c,d,e,f,g,i,j,k,l=this.n.ushrn(Math.floor(this.n.bitLength()/2)),m=a,n=this.n.clone(),o=new h(1),p=new h(0),q=new h(0),r=new h(1),s=0;0!==m.cmpn(0);){var t=n.div(m);j=n.sub(t.mul(m)),k=q.sub(t.mul(o));var u=r.sub(t.mul(p));if(!d&&j.cmp(l)<0)b=i.neg(),c=o,d=j.neg(),e=k;else if(d&&2===++s)break;i=j,n=m,m=j,q=o,o=k,r=p,p=u}f=j.neg(),g=k;var v=d.sqr().add(e.sqr()),w=f.sqr().add(g.sqr());return w.cmp(v)>=0&&(f=b,g=c),d.negative&&(d=d.neg(),e=e.neg()),f.negative&&(f=f.neg(),g=g.neg()),[{a:d,b:e},{a:f,b:g}]},d.prototype._endoSplit=function(a){var b=this.endo.basis,c=b[0],d=b[1],e=d.b.mul(a).divRound(this.n),f=c.b.neg().mul(a).divRound(this.n),g=e.mul(c.a),h=f.mul(d.a),i=e.mul(c.b),j=f.mul(d.b),k=a.sub(g).sub(h),l=i.add(j).neg();return{k1:k,k2:l}},d.prototype.pointFromX=function(a,b){a=new h(a,16),a.red||(a=a.toRed(this.red));var c=a.redSqr().redMul(a).redIAdd(a.redMul(this.a)).redIAdd(this.b),d=c.redSqrt();if(0!==d.redSqr().redSub(c).cmp(this.zero))throw new Error("invalid point");var e=d.fromRed().isOdd();return(b&&!e||!b&&e)&&(d=d.redNeg()),this.point(a,d)},d.prototype.validate=function(a){if(a.inf)return!0;var b=a.x,c=a.y,d=this.a.redMul(b),e=b.redSqr().redMul(b).redIAdd(d).redIAdd(this.b);return 0===c.redSqr().redISub(e).cmpn(0)},d.prototype._endoWnafMulAdd=function(a,b,c){for(var d=this._endoWnafT1,e=this._endoWnafT2,f=0;f<a.length;f++){var g=this._endoSplit(b[f]),h=a[f],i=h._getBeta();g.k1.negative&&(g.k1.ineg(),h=h.neg(!0)),g.k2.negative&&(g.k2.ineg(),i=i.neg(!0)),d[2*f]=h,d[2*f+1]=i,e[2*f]=g.k1,e[2*f+1]=g.k2}for(var j=this._wnafMulAdd(1,d,e,2*f,c),k=0;k<2*f;k++)d[k]=null,e[k]=null;return j},i(e,j.BasePoint),d.prototype.point=function(a,b,c){return new e(this,a,b,c)},d.prototype.pointFromJSON=function(a,b){return e.fromJSON(this,a,b)},e.prototype._getBeta=function(){if(this.curve.endo){var a=this.precomputed;if(a&&a.beta)return a.beta;var b=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(a){var c=this.curve,d=function(a){return c.point(a.x.redMul(c.endo.beta),a.y)};a.beta=b,b.precomputed={beta:null,naf:a.naf&&{wnd:a.naf.wnd,points:a.naf.points.map(d)},doubles:a.doubles&&{step:a.doubles.step,points:a.doubles.points.map(d)}}}return b}},e.prototype.toJSON=function(){return this.precomputed?[this.x,this.y,this.precomputed&&{doubles:this.precomputed.doubles&&{step:this.precomputed.doubles.step,points:this.precomputed.doubles.points.slice(1)},naf:this.precomputed.naf&&{wnd:this.precomputed.naf.wnd,points:this.precomputed.naf.points.slice(1)}}]:[this.x,this.y]},e.fromJSON=function(a,b,c){function d(b){return a.point(b[0],b[1],c)}"string"==typeof b&&(b=JSON.parse(b));var e=a.point(b[0],b[1],c);if(!b[2])return e;var f=b[2];return e.precomputed={beta:null,doubles:f.doubles&&{step:f.doubles.step,points:[e].concat(f.doubles.points.map(d))},naf:f.naf&&{wnd:f.naf.wnd,points:[e].concat(f.naf.points.map(d))}},e},e.prototype.inspect=function(){return this.isInfinity()?"<EC Point Infinity>":"<EC Point x: "+this.x.fromRed().toString(16,2)+" y: "+this.y.fromRed().toString(16,2)+">"},e.prototype.isInfinity=function(){return this.inf},e.prototype.add=function(a){if(this.inf)return a;if(a.inf)return this;if(this.eq(a))return this.dbl();if(this.neg().eq(a))return this.curve.point(null,null);if(0===this.x.cmp(a.x))return this.curve.point(null,null);var b=this.y.redSub(a.y);0!==b.cmpn(0)&&(b=b.redMul(this.x.redSub(a.x).redInvm()));var c=b.redSqr().redISub(this.x).redISub(a.x),d=b.redMul(this.x.redSub(c)).redISub(this.y);return this.curve.point(c,d)},e.prototype.dbl=function(){if(this.inf)return this;var a=this.y.redAdd(this.y);if(0===a.cmpn(0))return this.curve.point(null,null);var b=this.curve.a,c=this.x.redSqr(),d=a.redInvm(),e=c.redAdd(c).redIAdd(c).redIAdd(b).redMul(d),f=e.redSqr().redISub(this.x.redAdd(this.x)),g=e.redMul(this.x.redSub(f)).redISub(this.y);return this.curve.point(f,g)},e.prototype.getX=function(){return this.x.fromRed()},e.prototype.getY=function(){return this.y.fromRed()},e.prototype.mul=function(a){return a=new h(a,16),this.isInfinity()?this:this._hasDoubles(a)?this.curve._fixedNafMul(this,a):this.curve.endo?this.curve._endoWnafMulAdd([this],[a]):this.curve._wnafMul(this,a)},e.prototype.mulAdd=function(a,b,c){var d=[this,b],e=[a,c];return this.curve.endo?this.curve._endoWnafMulAdd(d,e):this.curve._wnafMulAdd(1,d,e,2)},e.prototype.jmulAdd=function(a,b,c){var d=[this,b],e=[a,c];return this.curve.endo?this.curve._endoWnafMulAdd(d,e,!0):this.curve._wnafMulAdd(1,d,e,2,!0)},e.prototype.eq=function(a){return this===a||this.inf===a.inf&&(this.inf||0===this.x.cmp(a.x)&&0===this.y.cmp(a.y))},e.prototype.neg=function(a){if(this.inf)return this;var b=this.curve.point(this.x,this.y.redNeg());if(a&&this.precomputed){var c=this.precomputed,d=function(a){return a.neg()};b.precomputed={naf:c.naf&&{wnd:c.naf.wnd,points:c.naf.points.map(d)},doubles:c.doubles&&{step:c.doubles.step,points:c.doubles.points.map(d)}}}return b},e.prototype.toJ=function(){if(this.inf)return this.curve.jpoint(null,null,null);var a=this.curve.jpoint(this.x,this.y,this.curve.one);return a},i(f,j.BasePoint),d.prototype.jpoint=function(a,b,c){return new f(this,a,b,c)},f.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var a=this.z.redInvm(),b=a.redSqr(),c=this.x.redMul(b),d=this.y.redMul(b).redMul(a);return this.curve.point(c,d)},f.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},f.prototype.add=function(a){if(this.isInfinity())return a;if(a.isInfinity())return this;var b=a.z.redSqr(),c=this.z.redSqr(),d=this.x.redMul(b),e=a.x.redMul(c),f=this.y.redMul(b.redMul(a.z)),g=a.y.redMul(c.redMul(this.z)),h=d.redSub(e),i=f.redSub(g);if(0===h.cmpn(0))return 0!==i.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var j=h.redSqr(),k=j.redMul(h),l=d.redMul(j),m=i.redSqr().redIAdd(k).redISub(l).redISub(l),n=i.redMul(l.redISub(m)).redISub(f.redMul(k)),o=this.z.redMul(a.z).redMul(h);return this.curve.jpoint(m,n,o)},f.prototype.mixedAdd=function(a){if(this.isInfinity())return a.toJ();if(a.isInfinity())return this;var b=this.z.redSqr(),c=this.x,d=a.x.redMul(b),e=this.y,f=a.y.redMul(b).redMul(this.z),g=c.redSub(d),h=e.redSub(f);if(0===g.cmpn(0))return 0!==h.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var i=g.redSqr(),j=i.redMul(g),k=c.redMul(i),l=h.redSqr().redIAdd(j).redISub(k).redISub(k),m=h.redMul(k.redISub(l)).redISub(e.redMul(j)),n=this.z.redMul(g);return this.curve.jpoint(l,m,n)},f.prototype.dblp=function(a){if(0===a)return this;if(this.isInfinity())return this;if(!a)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var b=this,c=0;c<a;c++)b=b.dbl();return b}for(var d=this.curve.a,e=this.curve.tinv,f=this.x,g=this.y,h=this.z,i=h.redSqr().redSqr(),j=g.redAdd(g),c=0;c<a;c++){var k=f.redSqr(),l=j.redSqr(),m=l.redSqr(),n=k.redAdd(k).redIAdd(k).redIAdd(d.redMul(i)),o=f.redMul(l),p=n.redSqr().redISub(o.redAdd(o)),q=o.redISub(p),r=n.redMul(q);r=r.redIAdd(r).redISub(m);var s=j.redMul(h);c+1<a&&(i=i.redMul(m)),f=p,h=s,j=r}return this.curve.jpoint(f,j.redMul(e),h)},f.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},f.prototype._zeroDbl=function(){var a,b,c;if(this.zOne){var d=this.x.redSqr(),e=this.y.redSqr(),f=e.redSqr(),g=this.x.redAdd(e).redSqr().redISub(d).redISub(f);g=g.redIAdd(g);var h=d.redAdd(d).redIAdd(d),i=h.redSqr().redISub(g).redISub(g),j=f.redIAdd(f);j=j.redIAdd(j),j=j.redIAdd(j),a=i,b=h.redMul(g.redISub(i)).redISub(j),c=this.y.redAdd(this.y)}else{var k=this.x.redSqr(),l=this.y.redSqr(),m=l.redSqr(),n=this.x.redAdd(l).redSqr().redISub(k).redISub(m);n=n.redIAdd(n);var o=k.redAdd(k).redIAdd(k),p=o.redSqr(),q=m.redIAdd(m);q=q.redIAdd(q),q=q.redIAdd(q),a=p.redISub(n).redISub(n),b=o.redMul(n.redISub(a)).redISub(q),c=this.y.redMul(this.z),c=c.redIAdd(c)}return this.curve.jpoint(a,b,c)},f.prototype._threeDbl=function(){var a,b,c;if(this.zOne){var d=this.x.redSqr(),e=this.y.redSqr(),f=e.redSqr(),g=this.x.redAdd(e).redSqr().redISub(d).redISub(f);g=g.redIAdd(g);var h=d.redAdd(d).redIAdd(d).redIAdd(this.curve.a),i=h.redSqr().redISub(g).redISub(g);a=i;var j=f.redIAdd(f);j=j.redIAdd(j),j=j.redIAdd(j),b=h.redMul(g.redISub(i)).redISub(j),c=this.y.redAdd(this.y)}else{var k=this.z.redSqr(),l=this.y.redSqr(),m=this.x.redMul(l),n=this.x.redSub(k).redMul(this.x.redAdd(k));n=n.redAdd(n).redIAdd(n);var o=m.redIAdd(m);o=o.redIAdd(o);var p=o.redAdd(o);a=n.redSqr().redISub(p),c=this.y.redAdd(this.z).redSqr().redISub(l).redISub(k);var q=l.redSqr();q=q.redIAdd(q),q=q.redIAdd(q),q=q.redIAdd(q),b=n.redMul(o.redISub(a)).redISub(q)}return this.curve.jpoint(a,b,c)},f.prototype._dbl=function(){var a=this.curve.a,b=this.x,c=this.y,d=this.z,e=d.redSqr().redSqr(),f=b.redSqr(),g=c.redSqr(),h=f.redAdd(f).redIAdd(f).redIAdd(a.redMul(e)),i=b.redAdd(b);i=i.redIAdd(i);var j=i.redMul(g),k=h.redSqr().redISub(j.redAdd(j)),l=j.redISub(k),m=g.redSqr();m=m.redIAdd(m),m=m.redIAdd(m),m=m.redIAdd(m);var n=h.redMul(l).redISub(m),o=c.redAdd(c).redMul(d);return this.curve.jpoint(k,n,o)},f.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var a=this.x.redSqr(),b=this.y.redSqr(),c=this.z.redSqr(),d=b.redSqr(),e=a.redAdd(a).redIAdd(a),f=e.redSqr(),g=this.x.redAdd(b).redSqr().redISub(a).redISub(d);g=g.redIAdd(g),g=g.redAdd(g).redIAdd(g),g=g.redISub(f);var h=g.redSqr(),i=d.redIAdd(d);i=i.redIAdd(i),i=i.redIAdd(i),i=i.redIAdd(i);var j=e.redIAdd(g).redSqr().redISub(f).redISub(h).redISub(i),k=b.redMul(j);k=k.redIAdd(k),k=k.redIAdd(k);var l=this.x.redMul(h).redISub(k);l=l.redIAdd(l),l=l.redIAdd(l);var m=this.y.redMul(j.redMul(i.redISub(j)).redISub(g.redMul(h)));m=m.redIAdd(m),m=m.redIAdd(m),m=m.redIAdd(m);var n=this.z.redAdd(g).redSqr().redISub(c).redISub(h);return this.curve.jpoint(l,m,n)},f.prototype.mul=function(a,b){return a=new h(a,b),this.curve._wnafMul(this,a)},f.prototype.eq=function(a){if("affine"===a.type)return this.eq(a.toJ());if(this===a)return!0;var b=this.z.redSqr(),c=a.z.redSqr();if(0!==this.x.redMul(c).redISub(a.x.redMul(b)).cmpn(0))return!1;var d=b.redMul(this.z),e=c.redMul(a.z);return 0===this.y.redMul(e).redISub(a.y.redMul(d)).cmpn(0)},f.prototype.eqXToP=function(a){var b=this.z.redSqr(),c=a.toRed(this.curve.red).redMul(b);if(0===this.x.cmp(c))return!0;for(var d=a.clone(),e=this.curve.redN.redMul(b);;){if(d.iadd(this.curve.n),d.cmp(this.curve.p)>=0)return!1;if(c.redIAdd(e),0===this.x.cmp(c))return!0}},f.prototype.inspect=function(){return this.isInfinity()?"<EC JPoint Infinity>":"<EC JPoint x: "+this.x.toString(16,2)+" y: "+this.y.toString(16,2)+" z: "+this.z.toString(16,2)+">"},f.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{"../utils":15,"./base":2,"bn.js":16,inherits:32}],7:[function(a,b,c){"use strict";function d(a){"short"===a.type?this.curve=new h["short"](a):"edwards"===a.type?this.curve=new h.edwards(a):this.curve=new h.mont(a),this.g=this.curve.g,this.n=this.curve.n,this.hash=a.hash,j(this.g.validate(),"Invalid curve"),j(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function e(a,b){Object.defineProperty(f,a,{configurable:!0,enumerable:!0,get:function(){var c=new d(b);return Object.defineProperty(f,a,{configurable:!0,enumerable:!0,value:c}),c}})}var f=c,g=a("hash.js"),h=a("./curve"),i=a("./utils"),j=i.assert;f.PresetCurve=d,e("p192",{type:"short",prime:"p192",p:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff",a:"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc",b:"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1",n:"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831",hash:g.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),e("p224",{type:"short",prime:"p224",p:"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001",a:"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe",b:"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4",n:"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d",hash:g.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),e("p256",{type:"short",prime:null,p:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff",a:"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc",b:"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b",n:"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551",hash:g.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),e("p384",{type:"short",prime:null,p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff",a:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc",b:"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef",n:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973",hash:g.sha384,gRed:!1,g:["aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7","3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f"]}),e("p521",{type:"short",prime:null,p:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff",a:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc",b:"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00",n:"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409",hash:g.sha512,gRed:!1,g:["000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66","00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650"]}),e("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:g.sha256,gRed:!1,g:["9"]}),e("ed25519",{type:"edwards",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"-1",c:"1",d:"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:g.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"] -});var k;try{k=a("./precomputed/secp256k1")}catch(l){k=void 0}e("secp256k1",{type:"short",prime:"k256",p:"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f",a:"0",b:"7",n:"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141",h:"1",hash:g.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",k]})},{"./curve":4,"./precomputed/secp256k1":14,"./utils":15,"hash.js":19}],8:[function(a,b,c){"use strict";function d(a){return this instanceof d?("string"==typeof a&&(j(h.hasOwnProperty(a),"Unknown curve "+a),a=h[a]),a instanceof h.PresetCurve&&(a={curve:a}),this.curve=a.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=a.curve.g,this.g.precompute(a.curve.n.bitLength()+1),void(this.hash=a.hash||a.curve.hash)):new d(a)}var e=a("bn.js"),f=a("hmac-drbg"),g=a("../utils"),h=a("../curves"),i=a("brorand"),j=g.assert,k=a("./key"),l=a("./signature");b.exports=d,d.prototype.keyPair=function(a){return new k(this,a)},d.prototype.keyFromPrivate=function(a,b){return k.fromPrivate(this,a,b)},d.prototype.keyFromPublic=function(a,b){return k.fromPublic(this,a,b)},d.prototype.genKeyPair=function(a){a||(a={});for(var b=new f({hash:this.hash,pers:a.pers,persEnc:a.persEnc||"utf8",entropy:a.entropy||i(this.hash.hmacStrength),entropyEnc:a.entropy&&a.entropyEnc||"utf8",nonce:this.n.toArray()}),c=this.n.byteLength(),d=this.n.sub(new e(2));;){var g=new e(b.generate(c));if(!(g.cmp(d)>0))return g.iaddn(1),this.keyFromPrivate(g)}},d.prototype._truncateToN=function(a,b){var c=8*a.byteLength()-this.n.bitLength();return c>0&&(a=a.ushrn(c)),!b&&a.cmp(this.n)>=0?a.sub(this.n):a},d.prototype.sign=function(a,b,c,d){"object"==typeof c&&(d=c,c=null),d||(d={}),b=this.keyFromPrivate(b,c),a=this._truncateToN(new e(a,16));for(var g=this.n.byteLength(),h=b.getPrivate().toArray("be",g),i=a.toArray("be",g),j=new f({hash:this.hash,entropy:h,nonce:i,pers:d.pers,persEnc:d.persEnc||"utf8"}),k=this.n.sub(new e(1)),m=0;!0;m++){var n=d.k?d.k(m):new e(j.generate(this.n.byteLength()));if(n=this._truncateToN(n,!0),!(n.cmpn(1)<=0||n.cmp(k)>=0)){var o=this.g.mul(n);if(!o.isInfinity()){var p=o.getX(),q=p.umod(this.n);if(0!==q.cmpn(0)){var r=n.invm(this.n).mul(q.mul(b.getPrivate()).iadd(a));if(r=r.umod(this.n),0!==r.cmpn(0)){var s=(o.getY().isOdd()?1:0)|(0!==p.cmp(q)?2:0);return d.canonical&&r.cmp(this.nh)>0&&(r=this.n.sub(r),s^=1),new l({r:q,s:r,recoveryParam:s})}}}}}},d.prototype.verify=function(a,b,c,d){a=this._truncateToN(new e(a,16)),c=this.keyFromPublic(c,d),b=new l(b,"hex");var f=b.r,g=b.s;if(f.cmpn(1)<0||f.cmp(this.n)>=0)return!1;if(g.cmpn(1)<0||g.cmp(this.n)>=0)return!1;var h=g.invm(this.n),i=h.mul(a).umod(this.n),j=h.mul(f).umod(this.n);if(!this.curve._maxwellTrick){var k=this.g.mulAdd(i,c.getPublic(),j);return!k.isInfinity()&&0===k.getX().umod(this.n).cmp(f)}var k=this.g.jmulAdd(i,c.getPublic(),j);return!k.isInfinity()&&k.eqXToP(f)},d.prototype.recoverPubKey=function(a,b,c,d){j((3&c)===c,"The recovery param is more than two bits"),b=new l(b,d);var f=this.n,g=new e(a),h=b.r,i=b.s,k=1&c,m=c>>1;if(h.cmp(this.curve.p.umod(this.curve.n))>=0&&m)throw new Error("Unable to find sencond key candinate");h=m?this.curve.pointFromX(h.add(this.curve.n),k):this.curve.pointFromX(h,k);var n=b.r.invm(f),o=f.sub(g).mul(n).umod(f),p=i.mul(n).umod(f);return this.g.mulAdd(o,h,p)},d.prototype.getKeyRecoveryParam=function(a,b,c,d){if(b=new l(b,d),null!==b.recoveryParam)return b.recoveryParam;for(var e=0;e<4;e++){var f;try{f=this.recoverPubKey(a,b,e)}catch(a){continue}if(f.eq(c))return e}throw new Error("Unable to find valid recovery factor")}},{"../curves":7,"../utils":15,"./key":9,"./signature":10,"bn.js":16,brorand:17,"hmac-drbg":31}],9:[function(a,b,c){"use strict";function d(a,b){this.ec=a,this.priv=null,this.pub=null,b.priv&&this._importPrivate(b.priv,b.privEnc),b.pub&&this._importPublic(b.pub,b.pubEnc)}var e=a("bn.js"),f=a("../utils"),g=f.assert;b.exports=d,d.fromPublic=function(a,b,c){return b instanceof d?b:new d(a,{pub:b,pubEnc:c})},d.fromPrivate=function(a,b,c){return b instanceof d?b:new d(a,{priv:b,privEnc:c})},d.prototype.validate=function(){var a=this.getPublic();return a.isInfinity()?{result:!1,reason:"Invalid public key"}:a.validate()?a.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:"Public key * N != O"}:{result:!1,reason:"Public key is not a point"}},d.prototype.getPublic=function(a,b){return"string"==typeof a&&(b=a,a=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),b?this.pub.encode(b,a):this.pub},d.prototype.getPrivate=function(a){return"hex"===a?this.priv.toString(16,2):this.priv},d.prototype._importPrivate=function(a,b){this.priv=new e(a,b||16),this.priv=this.priv.umod(this.ec.curve.n)},d.prototype._importPublic=function(a,b){return a.x||a.y?("mont"===this.ec.curve.type?g(a.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||g(a.x&&a.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(a.x,a.y))):void(this.pub=this.ec.curve.decodePoint(a,b))},d.prototype.derive=function(a){return a.mul(this.priv).getX()},d.prototype.sign=function(a,b,c){return this.ec.sign(a,this,b,c)},d.prototype.verify=function(a,b){return this.ec.verify(a,b,this)},d.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},{"../utils":15,"bn.js":16}],10:[function(a,b,c){"use strict";function d(a,b){return a instanceof d?a:void(this._importDER(a,b)||(k(a.r&&a.s,"Signature without r or s"),this.r=new i(a.r,16),this.s=new i(a.s,16),void 0===a.recoveryParam?this.recoveryParam=null:this.recoveryParam=a.recoveryParam))}function e(){this.place=0}function f(a,b){var c=a[b.place++];if(!(128&c))return c;for(var d=15&c,e=0,f=0,g=b.place;f<d;f++,g++)e<<=8,e|=a[g];return b.place=g,e}function g(a){for(var b=0,c=a.length-1;!a[b]&&!(128&a[b+1])&&b<c;)b++;return 0===b?a:a.slice(b)}function h(a,b){if(b<128)return void a.push(b);var c=1+(Math.log(b)/Math.LN2>>>3);for(a.push(128|c);--c;)a.push(b>>>(c<<3)&255);a.push(b)}var i=a("bn.js"),j=a("../utils"),k=j.assert;b.exports=d,d.prototype._importDER=function(a,b){a=j.toArray(a,b);var c=new e;if(48!==a[c.place++])return!1;var d=f(a,c);if(d+c.place!==a.length)return!1;if(2!==a[c.place++])return!1;var g=f(a,c),h=a.slice(c.place,g+c.place);if(c.place+=g,2!==a[c.place++])return!1;var k=f(a,c);if(a.length!==k+c.place)return!1;var l=a.slice(c.place,k+c.place);return 0===h[0]&&128&h[1]&&(h=h.slice(1)),0===l[0]&&128&l[1]&&(l=l.slice(1)),this.r=new i(h),this.s=new i(l),this.recoveryParam=null,!0},d.prototype.toDER=function(a){var b=this.r.toArray(),c=this.s.toArray();for(128&b[0]&&(b=[0].concat(b)),128&c[0]&&(c=[0].concat(c)),b=g(b),c=g(c);!(c[0]||128&c[1]);)c=c.slice(1);var d=[2];h(d,b.length),d=d.concat(b),d.push(2),h(d,c.length);var e=d.concat(c),f=[48];return h(f,e.length),f=f.concat(e),j.encode(f,a)}},{"../utils":15,"bn.js":16}],11:[function(a,b,c){"use strict";function d(a){if(h("ed25519"===a,"only tested with ed25519 so far"),!(this instanceof d))return new d(a);var a=f[a].curve;this.curve=a,this.g=a.g,this.g.precompute(a.n.bitLength()+1),this.pointClass=a.point().constructor,this.encodingLength=Math.ceil(a.n.bitLength()/8),this.hash=e.sha512}var e=a("hash.js"),f=a("../curves"),g=a("../utils"),h=g.assert,i=g.parseBytes,j=a("./key"),k=a("./signature");b.exports=d,d.prototype.sign=function(a,b){a=i(a);var c=this.keyFromSecret(b),d=this.hashInt(c.messagePrefix(),a),e=this.g.mul(d),f=this.encodePoint(e),g=this.hashInt(f,c.pubBytes(),a).mul(c.priv()),h=d.add(g).umod(this.curve.n);return this.makeSignature({R:e,S:h,Rencoded:f})},d.prototype.verify=function(a,b,c){a=i(a),b=this.makeSignature(b);var d=this.keyFromPublic(c),e=this.hashInt(b.Rencoded(),d.pubBytes(),a),f=this.g.mul(b.S()),g=b.R().add(d.pub().mul(e));return g.eq(f)},d.prototype.hashInt=function(){for(var a=this.hash(),b=0;b<arguments.length;b++)a.update(arguments[b]);return g.intFromLE(a.digest()).umod(this.curve.n)},d.prototype.keyFromPublic=function(a){return j.fromPublic(this,a)},d.prototype.keyFromSecret=function(a){return j.fromSecret(this,a)},d.prototype.makeSignature=function(a){return a instanceof k?a:new k(this,a)},d.prototype.encodePoint=function(a){var b=a.getY().toArray("le",this.encodingLength);return b[this.encodingLength-1]|=a.getX().isOdd()?128:0,b},d.prototype.decodePoint=function(a){a=g.parseBytes(a);var b=a.length-1,c=a.slice(0,b).concat(a[b]&-129),d=0!==(128&a[b]),e=g.intFromLE(c);return this.curve.pointFromY(e,d)},d.prototype.encodeInt=function(a){return a.toArray("le",this.encodingLength)},d.prototype.decodeInt=function(a){return g.intFromLE(a)},d.prototype.isPoint=function(a){return a instanceof this.pointClass}},{"../curves":7,"../utils":15,"./key":12,"./signature":13,"hash.js":19}],12:[function(a,b,c){"use strict";function d(a,b){this.eddsa=a,this._secret=g(b.secret),a.isPoint(b.pub)?this._pub=b.pub:this._pubBytes=g(b.pub)}var e=a("../utils"),f=e.assert,g=e.parseBytes,h=e.cachedProperty;d.fromPublic=function(a,b){return b instanceof d?b:new d(a,{pub:b})},d.fromSecret=function(a,b){return b instanceof d?b:new d(a,{secret:b})},d.prototype.secret=function(){return this._secret},h(d,"pubBytes",function(){return this.eddsa.encodePoint(this.pub())}),h(d,"pub",function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())}),h(d,"privBytes",function(){var a=this.eddsa,b=this.hash(),c=a.encodingLength-1,d=b.slice(0,a.encodingLength);return d[0]&=248,d[c]&=127,d[c]|=64,d}),h(d,"priv",function(){return this.eddsa.decodeInt(this.privBytes())}),h(d,"hash",function(){return this.eddsa.hash().update(this.secret()).digest()}),h(d,"messagePrefix",function(){return this.hash().slice(this.eddsa.encodingLength)}),d.prototype.sign=function(a){return f(this._secret,"KeyPair can only verify"),this.eddsa.sign(a,this)},d.prototype.verify=function(a,b){return this.eddsa.verify(a,b,this)},d.prototype.getSecret=function(a){return f(this._secret,"KeyPair is public only"),e.encode(this.secret(),a)},d.prototype.getPublic=function(a){return e.encode(this.pubBytes(),a)},b.exports=d},{"../utils":15}],13:[function(a,b,c){"use strict";function d(a,b){this.eddsa=a,"object"!=typeof b&&(b=i(b)),Array.isArray(b)&&(b={R:b.slice(0,a.encodingLength),S:b.slice(a.encodingLength)}),g(b.R&&b.S,"Signature without R or S"),a.isPoint(b.R)&&(this._R=b.R),b.S instanceof e&&(this._S=b.S),this._Rencoded=Array.isArray(b.R)?b.R:b.Rencoded,this._Sencoded=Array.isArray(b.S)?b.S:b.Sencoded}var e=a("bn.js"),f=a("../utils"),g=f.assert,h=f.cachedProperty,i=f.parseBytes;h(d,"S",function(){return this.eddsa.decodeInt(this.Sencoded())}),h(d,"R",function(){return this.eddsa.decodePoint(this.Rencoded())}),h(d,"Rencoded",function(){return this.eddsa.encodePoint(this.R())}),h(d,"Sencoded",function(){return this.eddsa.encodeInt(this.S())}),d.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},d.prototype.toHex=function(){return f.encode(this.toBytes(),"hex").toUpperCase()},b.exports=d},{"../utils":15,"bn.js":16}],14:[function(a,b,c){b.exports={doubles:{step:4,points:[["e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a","f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821"],["8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508","11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf"],["175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739","d3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695"],["363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640","4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9"],["8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c","4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36"],["723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda","96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f"],["eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa","5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999"],["100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0","cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09"],["e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d","9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d"],["feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d","e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088"],["da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1","9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d"],["53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0","5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8"],["8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047","10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a"],["385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862","283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453"],["6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7","7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160"],["3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd","56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0"],["85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83","7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6"],["948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a","53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589"],["6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8","bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17"],["e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d","4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda"],["e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725","7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd"],["213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754","4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2"],["4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c","17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6"],["fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6","6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f"],["76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39","c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01"],["c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891","893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3"],["d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b","febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f"],["b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03","2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7"],["e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d","eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78"],["a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070","7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1"],["90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4","e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150"],["8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da","662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82"],["e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11","1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc"],["8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e","efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b"],["e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41","2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51"],["b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef","67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45"],["d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8","db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120"],["324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d","648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84"],["4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96","35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d"],["9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd","ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d"],["6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5","9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8"],["a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266","40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8"],["7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71","34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac"],["928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac","c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f"],["85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751","1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962"],["ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e","493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907"],["827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241","c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec"],["eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3","be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d"],["e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f","4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414"],["1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19","aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd"],["146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be","b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0"],["fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9","6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811"],["da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2","8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1"],["a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13","7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c"],["174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c","ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73"],["959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba","2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd"],["d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151","e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405"],["64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073","d99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589"],["8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458","38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e"],["13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b","69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27"],["bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366","d3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1"],["8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa","40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482"],["8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0","620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945"],["dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787","7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573"],["f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e","ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82"]]},naf:{wnd:7,points:[["f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9","388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672"],["2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4","d8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6"],["5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc","6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da"],["acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe","cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37"],["774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb","d984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b"],["f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8","ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81"],["d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e","581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58"],["defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34","4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77"],["2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c","85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a"],["352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5","321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c"],["2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f","2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67"],["9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714","73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402"],["daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729","a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55"],["c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db","2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482"],["6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4","e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82"],["1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5","b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396"],["605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479","2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49"],["62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d","80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf"],["80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f","1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a"],["7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb","d0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7"],["d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9","eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933"],["49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963","758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a"],["77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74","958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6"],["f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530","e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37"],["463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b","5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e"],["f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247","cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6"],["caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1","cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476"],["2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120","4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40"],["7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435","91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61"],["754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18","673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683"],["e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8","59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5"],["186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb","3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b"],["df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f","55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417"],["5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143","efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868"],["290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba","e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a"],["af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45","f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6"],["766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a","744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996"],["59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e","c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e"],["f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8","e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d"],["7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c","30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2"],["948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519","e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e"],["7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab","100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437"],["3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca","ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311"],["d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf","8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4"],["1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610","68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575"],["733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4","f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d"],["15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c","d56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d"],["a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940","edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629"],["e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980","a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06"],["311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3","66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374"],["34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf","9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee"],["f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63","4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1"],["d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448","fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b"],["32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf","5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661"],["7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5","8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6"],["ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6","8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e"],["16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5","5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d"],["eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99","f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc"],["78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51","f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4"],["494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5","42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c"],["a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5","204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b"],["c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997","4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913"],["841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881","73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154"],["5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5","39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865"],["36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66","d2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc"],["336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726","ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224"],["8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede","6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e"],["1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94","60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6"],["85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31","3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511"],["29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51","b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b"],["a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252","ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2"],["4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5","cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c"],["d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b","6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3"],["ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4","322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d"],["af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f","6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700"],["e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889","2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4"],["591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246","b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196"],["11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984","998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4"],["3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a","b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257"],["cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030","bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13"],["c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197","6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096"],["c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593","c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38"],["a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef","21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f"],["347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38","60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448"],["da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a","49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a"],["c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111","5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4"],["4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502","7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437"],["3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea","be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7"],["cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26","8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d"],["b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986","39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a"],["d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e","62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54"],["48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4","25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77"],["dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda","ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517"],["6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859","cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10"],["e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f","f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125"],["eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c","6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e"],["13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942","fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1"],["ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a","1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2"],["b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80","5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423"],["ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d","438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8"],["8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1","cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758"],["52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63","c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375"],["e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352","6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d"],["7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193","ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec"],["5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00","9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0"],["32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58","ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c"],["e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7","d3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4"],["8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8","c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f"],["4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e","67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649"],["3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d","cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826"],["674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b","299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5"],["d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f","f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87"],["30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6","462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b"],["be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297","62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc"],["93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a","7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c"],["b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c","ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f"],["d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52","4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a"],["d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb","bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46"],["463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065","bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f"],["7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917","603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03"],["74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9","cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08"],["30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3","553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8"],["9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57","712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373"],["176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66","ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3"],["75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8","9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8"],["809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721","9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1"],["1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180","4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9"]] -}}},{}],15:[function(a,b,c){"use strict";function d(a,b,c){var d=new Array(Math.max(a.bitLength(),c)+1);d.fill(0);for(var e=1<<b+1,f=a.clone(),g=0;g<d.length;g++){var h,i=f.andln(e-1);f.isOdd()?(h=i>(e>>1)-1?(e>>1)-i:i,f.isubn(h)):h=0,d[g]=h,f.iushrn(1)}return d}function e(a,b){var c=[[],[]];a=a.clone(),b=b.clone();for(var d=0,e=0;a.cmpn(-d)>0||b.cmpn(-e)>0;){var f=a.andln(3)+d&3,g=b.andln(3)+e&3;3===f&&(f=-1),3===g&&(g=-1);var h;if(0===(1&f))h=0;else{var i=a.andln(7)+d&7;h=3!==i&&5!==i||2!==g?f:-f}c[0].push(h);var j;if(0===(1&g))j=0;else{var i=b.andln(7)+e&7;j=3!==i&&5!==i||2!==f?g:-g}c[1].push(j),2*d===h+1&&(d=1-d),2*e===j+1&&(e=1-e),a.iushrn(1),b.iushrn(1)}return c}function f(a,b,c){var d="_"+b;a.prototype[b]=function(){return void 0!==this[d]?this[d]:this[d]=c.call(this)}}function g(a){return"string"==typeof a?i.toArray(a,"hex"):a}function h(a){return new j(a,"hex","le")}var i=c,j=a("bn.js"),k=a("minimalistic-assert"),l=a("minimalistic-crypto-utils");i.assert=k,i.toArray=l.toArray,i.zero2=l.zero2,i.toHex=l.toHex,i.encode=l.encode,i.getNAF=d,i.getJSF=e,i.cachedProperty=f,i.parseBytes=g,i.intFromLE=h},{"bn.js":16,"minimalistic-assert":33,"minimalistic-crypto-utils":34}],16:[function(a,b,c){!function(b,c){"use strict";function d(a,b){if(!a)throw new Error(b||"Assertion failed")}function e(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}function f(a,b,c){return f.isBN(a)?a:(this.negative=0,this.words=null,this.length=0,this.red=null,void(null!==a&&("le"!==b&&"be"!==b||(c=b,b=10),this._init(a||0,b||10,c||"be"))))}function g(a,b,c){for(var d=0,e=Math.min(a.length,c),f=b;f<e;f++){var g=a.charCodeAt(f)-48;d<<=4,d|=g>=49&&g<=54?g-49+10:g>=17&&g<=22?g-17+10:15&g}return d}function h(a,b,c,d){for(var e=0,f=Math.min(a.length,c),g=b;g<f;g++){var h=a.charCodeAt(g)-48;e*=d,e+=h>=49?h-49+10:h>=17?h-17+10:h}return e}function i(a){for(var b=new Array(a.bitLength()),c=0;c<b.length;c++){var d=c/26|0,e=c%26;b[c]=(a.words[d]&1<<e)>>>e}return b}function j(a,b,c){c.negative=b.negative^a.negative;var d=a.length+b.length|0;c.length=d,d=d-1|0;var e=0|a.words[0],f=0|b.words[0],g=e*f,h=67108863&g,i=g/67108864|0;c.words[0]=h;for(var j=1;j<d;j++){for(var k=i>>>26,l=67108863&i,m=Math.min(j,b.length-1),n=Math.max(0,j-a.length+1);n<=m;n++){var o=j-n|0;e=0|a.words[o],f=0|b.words[n],g=e*f+l,k+=g/67108864|0,l=67108863&g}c.words[j]=0|l,i=0|k}return 0!==i?c.words[j]=0|i:c.length--,c.strip()}function k(a,b,c){c.negative=b.negative^a.negative,c.length=a.length+b.length;for(var d=0,e=0,f=0;f<c.length-1;f++){var g=e;e=0;for(var h=67108863&d,i=Math.min(f,b.length-1),j=Math.max(0,f-a.length+1);j<=i;j++){var k=f-j,l=0|a.words[k],m=0|b.words[j],n=l*m,o=67108863&n;g=g+(n/67108864|0)|0,o=o+h|0,h=67108863&o,g=g+(o>>>26)|0,e+=g>>>26,g&=67108863}c.words[f]=h,d=g,g=e}return 0!==d?c.words[f]=d:c.length--,c.strip()}function l(a,b,c){var d=new m;return d.mulp(a,b,c)}function m(a,b){this.x=a,this.y=b}function n(a,b){this.name=a,this.p=new f(b,16),this.n=this.p.bitLength(),this.k=new f(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function o(){n.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function p(){n.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function q(){n.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function r(){n.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function s(a){if("string"==typeof a){var b=f._prime(a);this.m=b.p,this.prime=b}else d(a.gtn(1),"modulus must be greater than 1"),this.m=a,this.prime=null}function t(a){s.call(this,a),this.shift=this.m.bitLength(),this.shift%26!==0&&(this.shift+=26-this.shift%26),this.r=new f(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof b?b.exports=f:c.BN=f,f.BN=f,f.wordSize=26;var u;try{u=a("buffer").Buffer}catch(v){}f.isBN=function(a){return a instanceof f||null!==a&&"object"==typeof a&&a.constructor.wordSize===f.wordSize&&Array.isArray(a.words)},f.max=function(a,b){return a.cmp(b)>0?a:b},f.min=function(a,b){return a.cmp(b)<0?a:b},f.prototype._init=function(a,b,c){if("number"==typeof a)return this._initNumber(a,b,c);if("object"==typeof a)return this._initArray(a,b,c);"hex"===b&&(b=16),d(b===(0|b)&&b>=2&&b<=36),a=a.toString().replace(/\s+/g,"");var e=0;"-"===a[0]&&e++,16===b?this._parseHex(a,e):this._parseBase(a,b,e),"-"===a[0]&&(this.negative=1),this.strip(),"le"===c&&this._initArray(this.toArray(),b,c)},f.prototype._initNumber=function(a,b,c){a<0&&(this.negative=1,a=-a),a<67108864?(this.words=[67108863&a],this.length=1):a<4503599627370496?(this.words=[67108863&a,a/67108864&67108863],this.length=2):(d(a<9007199254740992),this.words=[67108863&a,a/67108864&67108863,1],this.length=3),"le"===c&&this._initArray(this.toArray(),b,c)},f.prototype._initArray=function(a,b,c){if(d("number"==typeof a.length),a.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(a.length/3),this.words=new Array(this.length);for(var e=0;e<this.length;e++)this.words[e]=0;var f,g,h=0;if("be"===c)for(e=a.length-1,f=0;e>=0;e-=3)g=a[e]|a[e-1]<<8|a[e-2]<<16,this.words[f]|=g<<h&67108863,this.words[f+1]=g>>>26-h&67108863,h+=24,h>=26&&(h-=26,f++);else if("le"===c)for(e=0,f=0;e<a.length;e+=3)g=a[e]|a[e+1]<<8|a[e+2]<<16,this.words[f]|=g<<h&67108863,this.words[f+1]=g>>>26-h&67108863,h+=24,h>=26&&(h-=26,f++);return this.strip()},f.prototype._parseHex=function(a,b){this.length=Math.ceil((a.length-b)/6),this.words=new Array(this.length);for(var c=0;c<this.length;c++)this.words[c]=0;var d,e,f=0;for(c=a.length-6,d=0;c>=b;c-=6)e=g(a,c,c+6),this.words[d]|=e<<f&67108863,this.words[d+1]|=e>>>26-f&4194303,f+=24,f>=26&&(f-=26,d++);c+6!==b&&(e=g(a,b,c+6),this.words[d]|=e<<f&67108863,this.words[d+1]|=e>>>26-f&4194303),this.strip()},f.prototype._parseBase=function(a,b,c){this.words=[0],this.length=1;for(var d=0,e=1;e<=67108863;e*=b)d++;d--,e=e/b|0;for(var f=a.length-c,g=f%d,i=Math.min(f,f-g)+c,j=0,k=c;k<i;k+=d)j=h(a,k,k+d,b),this.imuln(e),this.words[0]+j<67108864?this.words[0]+=j:this._iaddn(j);if(0!==g){var l=1;for(j=h(a,k,a.length,b),k=0;k<g;k++)l*=b;this.imuln(l),this.words[0]+j<67108864?this.words[0]+=j:this._iaddn(j)}},f.prototype.copy=function(a){a.words=new Array(this.length);for(var b=0;b<this.length;b++)a.words[b]=this.words[b];a.length=this.length,a.negative=this.negative,a.red=this.red},f.prototype.clone=function(){var a=new f(null);return this.copy(a),a},f.prototype._expand=function(a){for(;this.length<a;)this.words[this.length++]=0;return this},f.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},f.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},f.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var w=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],x=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],y=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];f.prototype.toString=function(a,b){a=a||10,b=0|b||1;var c;if(16===a||"hex"===a){c="";for(var e=0,f=0,g=0;g<this.length;g++){var h=this.words[g],i=(16777215&(h<<e|f)).toString(16);f=h>>>24-e&16777215,c=0!==f||g!==this.length-1?w[6-i.length]+i+c:i+c,e+=2,e>=26&&(e-=26,g--)}for(0!==f&&(c=f.toString(16)+c);c.length%b!==0;)c="0"+c;return 0!==this.negative&&(c="-"+c),c}if(a===(0|a)&&a>=2&&a<=36){var j=x[a],k=y[a];c="";var l=this.clone();for(l.negative=0;!l.isZero();){var m=l.modn(k).toString(a);l=l.idivn(k),c=l.isZero()?m+c:w[j-m.length]+m+c}for(this.isZero()&&(c="0"+c);c.length%b!==0;)c="0"+c;return 0!==this.negative&&(c="-"+c),c}d(!1,"Base should be between 2 and 36")},f.prototype.toNumber=function(){var a=this.words[0];return 2===this.length?a+=67108864*this.words[1]:3===this.length&&1===this.words[2]?a+=4503599627370496+67108864*this.words[1]:this.length>2&&d(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-a:a},f.prototype.toJSON=function(){return this.toString(16)},f.prototype.toBuffer=function(a,b){return d("undefined"!=typeof u),this.toArrayLike(u,a,b)},f.prototype.toArray=function(a,b){return this.toArrayLike(Array,a,b)},f.prototype.toArrayLike=function(a,b,c){var e=this.byteLength(),f=c||Math.max(1,e);d(e<=f,"byte array longer than desired length"),d(f>0,"Requested array length <= 0"),this.strip();var g,h,i="le"===b,j=new a(f),k=this.clone();if(i){for(h=0;!k.isZero();h++)g=k.andln(255),k.iushrn(8),j[h]=g;for(;h<f;h++)j[h]=0}else{for(h=0;h<f-e;h++)j[h]=0;for(h=0;!k.isZero();h++)g=k.andln(255),k.iushrn(8),j[f-h-1]=g}return j},Math.clz32?f.prototype._countBits=function(a){return 32-Math.clz32(a)}:f.prototype._countBits=function(a){var b=a,c=0;return b>=4096&&(c+=13,b>>>=13),b>=64&&(c+=7,b>>>=7),b>=8&&(c+=4,b>>>=4),b>=2&&(c+=2,b>>>=2),c+b},f.prototype._zeroBits=function(a){if(0===a)return 26;var b=a,c=0;return 0===(8191&b)&&(c+=13,b>>>=13),0===(127&b)&&(c+=7,b>>>=7),0===(15&b)&&(c+=4,b>>>=4),0===(3&b)&&(c+=2,b>>>=2),0===(1&b)&&c++,c},f.prototype.bitLength=function(){var a=this.words[this.length-1],b=this._countBits(a);return 26*(this.length-1)+b},f.prototype.zeroBits=function(){if(this.isZero())return 0;for(var a=0,b=0;b<this.length;b++){var c=this._zeroBits(this.words[b]);if(a+=c,26!==c)break}return a},f.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},f.prototype.toTwos=function(a){return 0!==this.negative?this.abs().inotn(a).iaddn(1):this.clone()},f.prototype.fromTwos=function(a){return this.testn(a-1)?this.notn(a).iaddn(1).ineg():this.clone()},f.prototype.isNeg=function(){return 0!==this.negative},f.prototype.neg=function(){return this.clone().ineg()},f.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},f.prototype.iuor=function(a){for(;this.length<a.length;)this.words[this.length++]=0;for(var b=0;b<a.length;b++)this.words[b]=this.words[b]|a.words[b];return this.strip()},f.prototype.ior=function(a){return d(0===(this.negative|a.negative)),this.iuor(a)},f.prototype.or=function(a){return this.length>a.length?this.clone().ior(a):a.clone().ior(this)},f.prototype.uor=function(a){return this.length>a.length?this.clone().iuor(a):a.clone().iuor(this)},f.prototype.iuand=function(a){var b;b=this.length>a.length?a:this;for(var c=0;c<b.length;c++)this.words[c]=this.words[c]&a.words[c];return this.length=b.length,this.strip()},f.prototype.iand=function(a){return d(0===(this.negative|a.negative)),this.iuand(a)},f.prototype.and=function(a){return this.length>a.length?this.clone().iand(a):a.clone().iand(this)},f.prototype.uand=function(a){return this.length>a.length?this.clone().iuand(a):a.clone().iuand(this)},f.prototype.iuxor=function(a){var b,c;this.length>a.length?(b=this,c=a):(b=a,c=this);for(var d=0;d<c.length;d++)this.words[d]=b.words[d]^c.words[d];if(this!==b)for(;d<b.length;d++)this.words[d]=b.words[d];return this.length=b.length,this.strip()},f.prototype.ixor=function(a){return d(0===(this.negative|a.negative)),this.iuxor(a)},f.prototype.xor=function(a){return this.length>a.length?this.clone().ixor(a):a.clone().ixor(this)},f.prototype.uxor=function(a){return this.length>a.length?this.clone().iuxor(a):a.clone().iuxor(this)},f.prototype.inotn=function(a){d("number"==typeof a&&a>=0);var b=0|Math.ceil(a/26),c=a%26;this._expand(b),c>0&&b--;for(var e=0;e<b;e++)this.words[e]=67108863&~this.words[e];return c>0&&(this.words[e]=~this.words[e]&67108863>>26-c),this.strip()},f.prototype.notn=function(a){return this.clone().inotn(a)},f.prototype.setn=function(a,b){d("number"==typeof a&&a>=0);var c=a/26|0,e=a%26;return this._expand(c+1),b?this.words[c]=this.words[c]|1<<e:this.words[c]=this.words[c]&~(1<<e),this.strip()},f.prototype.iadd=function(a){var b;if(0!==this.negative&&0===a.negative)return this.negative=0,b=this.isub(a),this.negative^=1,this._normSign();if(0===this.negative&&0!==a.negative)return a.negative=0,b=this.isub(a),a.negative=1,b._normSign();var c,d;this.length>a.length?(c=this,d=a):(c=a,d=this);for(var e=0,f=0;f<d.length;f++)b=(0|c.words[f])+(0|d.words[f])+e,this.words[f]=67108863&b,e=b>>>26;for(;0!==e&&f<c.length;f++)b=(0|c.words[f])+e,this.words[f]=67108863&b,e=b>>>26;if(this.length=c.length,0!==e)this.words[this.length]=e,this.length++;else if(c!==this)for(;f<c.length;f++)this.words[f]=c.words[f];return this},f.prototype.add=function(a){var b;return 0!==a.negative&&0===this.negative?(a.negative=0,b=this.sub(a),a.negative^=1,b):0===a.negative&&0!==this.negative?(this.negative=0,b=a.sub(this),this.negative=1,b):this.length>a.length?this.clone().iadd(a):a.clone().iadd(this)},f.prototype.isub=function(a){if(0!==a.negative){a.negative=0;var b=this.iadd(a);return a.negative=1,b._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(a),this.negative=1,this._normSign();var c=this.cmp(a);if(0===c)return this.negative=0,this.length=1,this.words[0]=0,this;var d,e;c>0?(d=this,e=a):(d=a,e=this);for(var f=0,g=0;g<e.length;g++)b=(0|d.words[g])-(0|e.words[g])+f,f=b>>26,this.words[g]=67108863&b;for(;0!==f&&g<d.length;g++)b=(0|d.words[g])+f,f=b>>26,this.words[g]=67108863&b;if(0===f&&g<d.length&&d!==this)for(;g<d.length;g++)this.words[g]=d.words[g];return this.length=Math.max(this.length,g),d!==this&&(this.negative=1),this.strip()},f.prototype.sub=function(a){return this.clone().isub(a)};var z=function(a,b,c){var d,e,f,g=a.words,h=b.words,i=c.words,j=0,k=0|g[0],l=8191&k,m=k>>>13,n=0|g[1],o=8191&n,p=n>>>13,q=0|g[2],r=8191&q,s=q>>>13,t=0|g[3],u=8191&t,v=t>>>13,w=0|g[4],x=8191&w,y=w>>>13,z=0|g[5],A=8191&z,B=z>>>13,C=0|g[6],D=8191&C,E=C>>>13,F=0|g[7],G=8191&F,H=F>>>13,I=0|g[8],J=8191&I,K=I>>>13,L=0|g[9],M=8191&L,N=L>>>13,O=0|h[0],P=8191&O,Q=O>>>13,R=0|h[1],S=8191&R,T=R>>>13,U=0|h[2],V=8191&U,W=U>>>13,X=0|h[3],Y=8191&X,Z=X>>>13,$=0|h[4],_=8191&$,aa=$>>>13,ba=0|h[5],ca=8191&ba,da=ba>>>13,ea=0|h[6],fa=8191&ea,ga=ea>>>13,ha=0|h[7],ia=8191&ha,ja=ha>>>13,ka=0|h[8],la=8191&ka,ma=ka>>>13,na=0|h[9],oa=8191&na,pa=na>>>13;c.negative=a.negative^b.negative,c.length=19,d=Math.imul(l,P),e=Math.imul(l,Q),e=e+Math.imul(m,P)|0,f=Math.imul(m,Q);var qa=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(qa>>>26)|0,qa&=67108863,d=Math.imul(o,P),e=Math.imul(o,Q),e=e+Math.imul(p,P)|0,f=Math.imul(p,Q),d=d+Math.imul(l,S)|0,e=e+Math.imul(l,T)|0,e=e+Math.imul(m,S)|0,f=f+Math.imul(m,T)|0;var ra=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(ra>>>26)|0,ra&=67108863,d=Math.imul(r,P),e=Math.imul(r,Q),e=e+Math.imul(s,P)|0,f=Math.imul(s,Q),d=d+Math.imul(o,S)|0,e=e+Math.imul(o,T)|0,e=e+Math.imul(p,S)|0,f=f+Math.imul(p,T)|0,d=d+Math.imul(l,V)|0,e=e+Math.imul(l,W)|0,e=e+Math.imul(m,V)|0,f=f+Math.imul(m,W)|0;var sa=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(sa>>>26)|0,sa&=67108863,d=Math.imul(u,P),e=Math.imul(u,Q),e=e+Math.imul(v,P)|0,f=Math.imul(v,Q),d=d+Math.imul(r,S)|0,e=e+Math.imul(r,T)|0,e=e+Math.imul(s,S)|0,f=f+Math.imul(s,T)|0,d=d+Math.imul(o,V)|0,e=e+Math.imul(o,W)|0,e=e+Math.imul(p,V)|0,f=f+Math.imul(p,W)|0,d=d+Math.imul(l,Y)|0,e=e+Math.imul(l,Z)|0,e=e+Math.imul(m,Y)|0,f=f+Math.imul(m,Z)|0;var ta=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(ta>>>26)|0,ta&=67108863,d=Math.imul(x,P),e=Math.imul(x,Q),e=e+Math.imul(y,P)|0,f=Math.imul(y,Q),d=d+Math.imul(u,S)|0,e=e+Math.imul(u,T)|0,e=e+Math.imul(v,S)|0,f=f+Math.imul(v,T)|0,d=d+Math.imul(r,V)|0,e=e+Math.imul(r,W)|0,e=e+Math.imul(s,V)|0,f=f+Math.imul(s,W)|0,d=d+Math.imul(o,Y)|0,e=e+Math.imul(o,Z)|0,e=e+Math.imul(p,Y)|0,f=f+Math.imul(p,Z)|0,d=d+Math.imul(l,_)|0,e=e+Math.imul(l,aa)|0,e=e+Math.imul(m,_)|0,f=f+Math.imul(m,aa)|0;var ua=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(ua>>>26)|0,ua&=67108863,d=Math.imul(A,P),e=Math.imul(A,Q),e=e+Math.imul(B,P)|0,f=Math.imul(B,Q),d=d+Math.imul(x,S)|0,e=e+Math.imul(x,T)|0,e=e+Math.imul(y,S)|0,f=f+Math.imul(y,T)|0,d=d+Math.imul(u,V)|0,e=e+Math.imul(u,W)|0,e=e+Math.imul(v,V)|0,f=f+Math.imul(v,W)|0,d=d+Math.imul(r,Y)|0,e=e+Math.imul(r,Z)|0,e=e+Math.imul(s,Y)|0,f=f+Math.imul(s,Z)|0,d=d+Math.imul(o,_)|0,e=e+Math.imul(o,aa)|0,e=e+Math.imul(p,_)|0,f=f+Math.imul(p,aa)|0,d=d+Math.imul(l,ca)|0,e=e+Math.imul(l,da)|0,e=e+Math.imul(m,ca)|0,f=f+Math.imul(m,da)|0;var va=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(va>>>26)|0,va&=67108863,d=Math.imul(D,P),e=Math.imul(D,Q),e=e+Math.imul(E,P)|0,f=Math.imul(E,Q),d=d+Math.imul(A,S)|0,e=e+Math.imul(A,T)|0,e=e+Math.imul(B,S)|0,f=f+Math.imul(B,T)|0,d=d+Math.imul(x,V)|0,e=e+Math.imul(x,W)|0,e=e+Math.imul(y,V)|0,f=f+Math.imul(y,W)|0,d=d+Math.imul(u,Y)|0,e=e+Math.imul(u,Z)|0,e=e+Math.imul(v,Y)|0,f=f+Math.imul(v,Z)|0,d=d+Math.imul(r,_)|0,e=e+Math.imul(r,aa)|0,e=e+Math.imul(s,_)|0,f=f+Math.imul(s,aa)|0,d=d+Math.imul(o,ca)|0,e=e+Math.imul(o,da)|0,e=e+Math.imul(p,ca)|0,f=f+Math.imul(p,da)|0,d=d+Math.imul(l,fa)|0,e=e+Math.imul(l,ga)|0,e=e+Math.imul(m,fa)|0,f=f+Math.imul(m,ga)|0;var wa=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(wa>>>26)|0,wa&=67108863,d=Math.imul(G,P),e=Math.imul(G,Q),e=e+Math.imul(H,P)|0,f=Math.imul(H,Q),d=d+Math.imul(D,S)|0,e=e+Math.imul(D,T)|0,e=e+Math.imul(E,S)|0,f=f+Math.imul(E,T)|0,d=d+Math.imul(A,V)|0,e=e+Math.imul(A,W)|0,e=e+Math.imul(B,V)|0,f=f+Math.imul(B,W)|0,d=d+Math.imul(x,Y)|0,e=e+Math.imul(x,Z)|0,e=e+Math.imul(y,Y)|0,f=f+Math.imul(y,Z)|0,d=d+Math.imul(u,_)|0,e=e+Math.imul(u,aa)|0,e=e+Math.imul(v,_)|0,f=f+Math.imul(v,aa)|0,d=d+Math.imul(r,ca)|0,e=e+Math.imul(r,da)|0,e=e+Math.imul(s,ca)|0,f=f+Math.imul(s,da)|0,d=d+Math.imul(o,fa)|0,e=e+Math.imul(o,ga)|0,e=e+Math.imul(p,fa)|0,f=f+Math.imul(p,ga)|0,d=d+Math.imul(l,ia)|0,e=e+Math.imul(l,ja)|0,e=e+Math.imul(m,ia)|0,f=f+Math.imul(m,ja)|0;var xa=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(xa>>>26)|0,xa&=67108863,d=Math.imul(J,P),e=Math.imul(J,Q),e=e+Math.imul(K,P)|0,f=Math.imul(K,Q),d=d+Math.imul(G,S)|0,e=e+Math.imul(G,T)|0,e=e+Math.imul(H,S)|0,f=f+Math.imul(H,T)|0,d=d+Math.imul(D,V)|0,e=e+Math.imul(D,W)|0,e=e+Math.imul(E,V)|0,f=f+Math.imul(E,W)|0,d=d+Math.imul(A,Y)|0,e=e+Math.imul(A,Z)|0,e=e+Math.imul(B,Y)|0,f=f+Math.imul(B,Z)|0,d=d+Math.imul(x,_)|0,e=e+Math.imul(x,aa)|0,e=e+Math.imul(y,_)|0,f=f+Math.imul(y,aa)|0,d=d+Math.imul(u,ca)|0,e=e+Math.imul(u,da)|0,e=e+Math.imul(v,ca)|0,f=f+Math.imul(v,da)|0,d=d+Math.imul(r,fa)|0,e=e+Math.imul(r,ga)|0,e=e+Math.imul(s,fa)|0,f=f+Math.imul(s,ga)|0,d=d+Math.imul(o,ia)|0,e=e+Math.imul(o,ja)|0,e=e+Math.imul(p,ia)|0,f=f+Math.imul(p,ja)|0,d=d+Math.imul(l,la)|0,e=e+Math.imul(l,ma)|0,e=e+Math.imul(m,la)|0,f=f+Math.imul(m,ma)|0;var ya=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(ya>>>26)|0,ya&=67108863,d=Math.imul(M,P),e=Math.imul(M,Q),e=e+Math.imul(N,P)|0,f=Math.imul(N,Q),d=d+Math.imul(J,S)|0,e=e+Math.imul(J,T)|0,e=e+Math.imul(K,S)|0,f=f+Math.imul(K,T)|0,d=d+Math.imul(G,V)|0,e=e+Math.imul(G,W)|0,e=e+Math.imul(H,V)|0,f=f+Math.imul(H,W)|0,d=d+Math.imul(D,Y)|0,e=e+Math.imul(D,Z)|0,e=e+Math.imul(E,Y)|0,f=f+Math.imul(E,Z)|0,d=d+Math.imul(A,_)|0,e=e+Math.imul(A,aa)|0,e=e+Math.imul(B,_)|0,f=f+Math.imul(B,aa)|0,d=d+Math.imul(x,ca)|0,e=e+Math.imul(x,da)|0,e=e+Math.imul(y,ca)|0,f=f+Math.imul(y,da)|0,d=d+Math.imul(u,fa)|0,e=e+Math.imul(u,ga)|0,e=e+Math.imul(v,fa)|0,f=f+Math.imul(v,ga)|0,d=d+Math.imul(r,ia)|0,e=e+Math.imul(r,ja)|0,e=e+Math.imul(s,ia)|0,f=f+Math.imul(s,ja)|0,d=d+Math.imul(o,la)|0,e=e+Math.imul(o,ma)|0,e=e+Math.imul(p,la)|0,f=f+Math.imul(p,ma)|0,d=d+Math.imul(l,oa)|0,e=e+Math.imul(l,pa)|0,e=e+Math.imul(m,oa)|0,f=f+Math.imul(m,pa)|0;var za=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(za>>>26)|0,za&=67108863,d=Math.imul(M,S),e=Math.imul(M,T),e=e+Math.imul(N,S)|0,f=Math.imul(N,T),d=d+Math.imul(J,V)|0,e=e+Math.imul(J,W)|0,e=e+Math.imul(K,V)|0,f=f+Math.imul(K,W)|0,d=d+Math.imul(G,Y)|0,e=e+Math.imul(G,Z)|0,e=e+Math.imul(H,Y)|0,f=f+Math.imul(H,Z)|0,d=d+Math.imul(D,_)|0,e=e+Math.imul(D,aa)|0,e=e+Math.imul(E,_)|0,f=f+Math.imul(E,aa)|0,d=d+Math.imul(A,ca)|0,e=e+Math.imul(A,da)|0,e=e+Math.imul(B,ca)|0,f=f+Math.imul(B,da)|0,d=d+Math.imul(x,fa)|0,e=e+Math.imul(x,ga)|0,e=e+Math.imul(y,fa)|0,f=f+Math.imul(y,ga)|0,d=d+Math.imul(u,ia)|0,e=e+Math.imul(u,ja)|0,e=e+Math.imul(v,ia)|0,f=f+Math.imul(v,ja)|0,d=d+Math.imul(r,la)|0,e=e+Math.imul(r,ma)|0,e=e+Math.imul(s,la)|0,f=f+Math.imul(s,ma)|0,d=d+Math.imul(o,oa)|0,e=e+Math.imul(o,pa)|0,e=e+Math.imul(p,oa)|0,f=f+Math.imul(p,pa)|0;var Aa=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(Aa>>>26)|0,Aa&=67108863,d=Math.imul(M,V),e=Math.imul(M,W),e=e+Math.imul(N,V)|0,f=Math.imul(N,W),d=d+Math.imul(J,Y)|0,e=e+Math.imul(J,Z)|0,e=e+Math.imul(K,Y)|0,f=f+Math.imul(K,Z)|0,d=d+Math.imul(G,_)|0,e=e+Math.imul(G,aa)|0,e=e+Math.imul(H,_)|0,f=f+Math.imul(H,aa)|0,d=d+Math.imul(D,ca)|0,e=e+Math.imul(D,da)|0,e=e+Math.imul(E,ca)|0,f=f+Math.imul(E,da)|0,d=d+Math.imul(A,fa)|0,e=e+Math.imul(A,ga)|0,e=e+Math.imul(B,fa)|0,f=f+Math.imul(B,ga)|0,d=d+Math.imul(x,ia)|0,e=e+Math.imul(x,ja)|0,e=e+Math.imul(y,ia)|0,f=f+Math.imul(y,ja)|0,d=d+Math.imul(u,la)|0,e=e+Math.imul(u,ma)|0,e=e+Math.imul(v,la)|0,f=f+Math.imul(v,ma)|0,d=d+Math.imul(r,oa)|0,e=e+Math.imul(r,pa)|0,e=e+Math.imul(s,oa)|0,f=f+Math.imul(s,pa)|0;var Ba=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(Ba>>>26)|0,Ba&=67108863,d=Math.imul(M,Y),e=Math.imul(M,Z),e=e+Math.imul(N,Y)|0,f=Math.imul(N,Z),d=d+Math.imul(J,_)|0,e=e+Math.imul(J,aa)|0,e=e+Math.imul(K,_)|0,f=f+Math.imul(K,aa)|0,d=d+Math.imul(G,ca)|0,e=e+Math.imul(G,da)|0,e=e+Math.imul(H,ca)|0,f=f+Math.imul(H,da)|0,d=d+Math.imul(D,fa)|0,e=e+Math.imul(D,ga)|0,e=e+Math.imul(E,fa)|0,f=f+Math.imul(E,ga)|0,d=d+Math.imul(A,ia)|0,e=e+Math.imul(A,ja)|0,e=e+Math.imul(B,ia)|0,f=f+Math.imul(B,ja)|0,d=d+Math.imul(x,la)|0,e=e+Math.imul(x,ma)|0,e=e+Math.imul(y,la)|0,f=f+Math.imul(y,ma)|0,d=d+Math.imul(u,oa)|0,e=e+Math.imul(u,pa)|0,e=e+Math.imul(v,oa)|0,f=f+Math.imul(v,pa)|0;var Ca=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(Ca>>>26)|0,Ca&=67108863,d=Math.imul(M,_),e=Math.imul(M,aa),e=e+Math.imul(N,_)|0,f=Math.imul(N,aa),d=d+Math.imul(J,ca)|0,e=e+Math.imul(J,da)|0,e=e+Math.imul(K,ca)|0,f=f+Math.imul(K,da)|0,d=d+Math.imul(G,fa)|0,e=e+Math.imul(G,ga)|0,e=e+Math.imul(H,fa)|0,f=f+Math.imul(H,ga)|0,d=d+Math.imul(D,ia)|0,e=e+Math.imul(D,ja)|0,e=e+Math.imul(E,ia)|0,f=f+Math.imul(E,ja)|0,d=d+Math.imul(A,la)|0,e=e+Math.imul(A,ma)|0,e=e+Math.imul(B,la)|0,f=f+Math.imul(B,ma)|0,d=d+Math.imul(x,oa)|0,e=e+Math.imul(x,pa)|0,e=e+Math.imul(y,oa)|0,f=f+Math.imul(y,pa)|0;var Da=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(Da>>>26)|0,Da&=67108863,d=Math.imul(M,ca),e=Math.imul(M,da),e=e+Math.imul(N,ca)|0,f=Math.imul(N,da),d=d+Math.imul(J,fa)|0,e=e+Math.imul(J,ga)|0,e=e+Math.imul(K,fa)|0,f=f+Math.imul(K,ga)|0,d=d+Math.imul(G,ia)|0,e=e+Math.imul(G,ja)|0,e=e+Math.imul(H,ia)|0,f=f+Math.imul(H,ja)|0,d=d+Math.imul(D,la)|0,e=e+Math.imul(D,ma)|0,e=e+Math.imul(E,la)|0,f=f+Math.imul(E,ma)|0,d=d+Math.imul(A,oa)|0,e=e+Math.imul(A,pa)|0,e=e+Math.imul(B,oa)|0,f=f+Math.imul(B,pa)|0;var Ea=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(Ea>>>26)|0,Ea&=67108863,d=Math.imul(M,fa),e=Math.imul(M,ga),e=e+Math.imul(N,fa)|0,f=Math.imul(N,ga),d=d+Math.imul(J,ia)|0,e=e+Math.imul(J,ja)|0,e=e+Math.imul(K,ia)|0,f=f+Math.imul(K,ja)|0,d=d+Math.imul(G,la)|0,e=e+Math.imul(G,ma)|0,e=e+Math.imul(H,la)|0,f=f+Math.imul(H,ma)|0,d=d+Math.imul(D,oa)|0,e=e+Math.imul(D,pa)|0,e=e+Math.imul(E,oa)|0,f=f+Math.imul(E,pa)|0;var Fa=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(Fa>>>26)|0,Fa&=67108863,d=Math.imul(M,ia),e=Math.imul(M,ja),e=e+Math.imul(N,ia)|0,f=Math.imul(N,ja),d=d+Math.imul(J,la)|0,e=e+Math.imul(J,ma)|0,e=e+Math.imul(K,la)|0,f=f+Math.imul(K,ma)|0,d=d+Math.imul(G,oa)|0,e=e+Math.imul(G,pa)|0,e=e+Math.imul(H,oa)|0,f=f+Math.imul(H,pa)|0;var Ga=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(Ga>>>26)|0,Ga&=67108863,d=Math.imul(M,la),e=Math.imul(M,ma),e=e+Math.imul(N,la)|0,f=Math.imul(N,ma),d=d+Math.imul(J,oa)|0,e=e+Math.imul(J,pa)|0,e=e+Math.imul(K,oa)|0,f=f+Math.imul(K,pa)|0;var Ha=(j+d|0)+((8191&e)<<13)|0;j=(f+(e>>>13)|0)+(Ha>>>26)|0,Ha&=67108863,d=Math.imul(M,oa),e=Math.imul(M,pa),e=e+Math.imul(N,oa)|0,f=Math.imul(N,pa);var Ia=(j+d|0)+((8191&e)<<13)|0;return j=(f+(e>>>13)|0)+(Ia>>>26)|0,Ia&=67108863,i[0]=qa,i[1]=ra,i[2]=sa,i[3]=ta,i[4]=ua,i[5]=va,i[6]=wa,i[7]=xa,i[8]=ya,i[9]=za,i[10]=Aa,i[11]=Ba,i[12]=Ca,i[13]=Da,i[14]=Ea,i[15]=Fa,i[16]=Ga,i[17]=Ha,i[18]=Ia,0!==j&&(i[19]=j,c.length++),c};Math.imul||(z=j),f.prototype.mulTo=function(a,b){var c,d=this.length+a.length;return c=10===this.length&&10===a.length?z(this,a,b):d<63?j(this,a,b):d<1024?k(this,a,b):l(this,a,b)},m.prototype.makeRBT=function(a){for(var b=new Array(a),c=f.prototype._countBits(a)-1,d=0;d<a;d++)b[d]=this.revBin(d,c,a);return b},m.prototype.revBin=function(a,b,c){if(0===a||a===c-1)return a;for(var d=0,e=0;e<b;e++)d|=(1&a)<<b-e-1,a>>=1;return d},m.prototype.permute=function(a,b,c,d,e,f){for(var g=0;g<f;g++)d[g]=b[a[g]],e[g]=c[a[g]]},m.prototype.transform=function(a,b,c,d,e,f){this.permute(f,a,b,c,d,e);for(var g=1;g<e;g<<=1)for(var h=g<<1,i=Math.cos(2*Math.PI/h),j=Math.sin(2*Math.PI/h),k=0;k<e;k+=h)for(var l=i,m=j,n=0;n<g;n++){var o=c[k+n],p=d[k+n],q=c[k+n+g],r=d[k+n+g],s=l*q-m*r;r=l*r+m*q,q=s,c[k+n]=o+q,d[k+n]=p+r,c[k+n+g]=o-q,d[k+n+g]=p-r,n!==h&&(s=i*l-j*m,m=i*m+j*l,l=s)}},m.prototype.guessLen13b=function(a,b){var c=1|Math.max(b,a),d=1&c,e=0;for(c=c/2|0;c;c>>>=1)e++;return 1<<e+1+d},m.prototype.conjugate=function(a,b,c){if(!(c<=1))for(var d=0;d<c/2;d++){var e=a[d];a[d]=a[c-d-1],a[c-d-1]=e,e=b[d],b[d]=-b[c-d-1],b[c-d-1]=-e}},m.prototype.normalize13b=function(a,b){for(var c=0,d=0;d<b/2;d++){var e=8192*Math.round(a[2*d+1]/b)+Math.round(a[2*d]/b)+c;a[d]=67108863&e,c=e<67108864?0:e/67108864|0}return a},m.prototype.convert13b=function(a,b,c,e){for(var f=0,g=0;g<b;g++)f+=0|a[g],c[2*g]=8191&f,f>>>=13,c[2*g+1]=8191&f,f>>>=13;for(g=2*b;g<e;++g)c[g]=0;d(0===f),d(0===(f&-8192))},m.prototype.stub=function(a){for(var b=new Array(a),c=0;c<a;c++)b[c]=0;return b},m.prototype.mulp=function(a,b,c){var d=2*this.guessLen13b(a.length,b.length),e=this.makeRBT(d),f=this.stub(d),g=new Array(d),h=new Array(d),i=new Array(d),j=new Array(d),k=new Array(d),l=new Array(d),m=c.words;m.length=d,this.convert13b(a.words,a.length,g,d),this.convert13b(b.words,b.length,j,d),this.transform(g,f,h,i,d,e),this.transform(j,f,k,l,d,e);for(var n=0;n<d;n++){var o=h[n]*k[n]-i[n]*l[n];i[n]=h[n]*l[n]+i[n]*k[n],h[n]=o}return this.conjugate(h,i,d),this.transform(h,i,m,f,d,e),this.conjugate(m,f,d),this.normalize13b(m,d),c.negative=a.negative^b.negative,c.length=a.length+b.length,c.strip()},f.prototype.mul=function(a){var b=new f(null);return b.words=new Array(this.length+a.length),this.mulTo(a,b)},f.prototype.mulf=function(a){var b=new f(null);return b.words=new Array(this.length+a.length),l(this,a,b)},f.prototype.imul=function(a){return this.clone().mulTo(a,this)},f.prototype.imuln=function(a){d("number"==typeof a),d(a<67108864);for(var b=0,c=0;c<this.length;c++){var e=(0|this.words[c])*a,f=(67108863&e)+(67108863&b);b>>=26,b+=e/67108864|0,b+=f>>>26,this.words[c]=67108863&f}return 0!==b&&(this.words[c]=b,this.length++),this},f.prototype.muln=function(a){return this.clone().imuln(a)},f.prototype.sqr=function(){return this.mul(this)},f.prototype.isqr=function(){return this.imul(this.clone())},f.prototype.pow=function(a){var b=i(a);if(0===b.length)return new f(1);for(var c=this,d=0;d<b.length&&0===b[d];d++,c=c.sqr());if(++d<b.length)for(var e=c.sqr();d<b.length;d++,e=e.sqr())0!==b[d]&&(c=c.mul(e));return c},f.prototype.iushln=function(a){d("number"==typeof a&&a>=0);var b,c=a%26,e=(a-c)/26,f=67108863>>>26-c<<26-c;if(0!==c){var g=0;for(b=0;b<this.length;b++){var h=this.words[b]&f,i=(0|this.words[b])-h<<c;this.words[b]=i|g,g=h>>>26-c}g&&(this.words[b]=g,this.length++)}if(0!==e){for(b=this.length-1;b>=0;b--)this.words[b+e]=this.words[b];for(b=0;b<e;b++)this.words[b]=0;this.length+=e}return this.strip()},f.prototype.ishln=function(a){return d(0===this.negative),this.iushln(a)},f.prototype.iushrn=function(a,b,c){d("number"==typeof a&&a>=0);var e;e=b?(b-b%26)/26:0;var f=a%26,g=Math.min((a-f)/26,this.length),h=67108863^67108863>>>f<<f,i=c;if(e-=g,e=Math.max(0,e),i){for(var j=0;j<g;j++)i.words[j]=this.words[j];i.length=g}if(0===g);else if(this.length>g)for(this.length-=g,j=0;j<this.length;j++)this.words[j]=this.words[j+g];else this.words[0]=0,this.length=1;var k=0;for(j=this.length-1;j>=0&&(0!==k||j>=e);j--){var l=0|this.words[j];this.words[j]=k<<26-f|l>>>f,k=l&h}return i&&0!==k&&(i.words[i.length++]=k),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},f.prototype.ishrn=function(a,b,c){return d(0===this.negative),this.iushrn(a,b,c)},f.prototype.shln=function(a){return this.clone().ishln(a)},f.prototype.ushln=function(a){return this.clone().iushln(a)},f.prototype.shrn=function(a){return this.clone().ishrn(a)},f.prototype.ushrn=function(a){return this.clone().iushrn(a)},f.prototype.testn=function(a){d("number"==typeof a&&a>=0);var b=a%26,c=(a-b)/26,e=1<<b;if(this.length<=c)return!1;var f=this.words[c];return!!(f&e)},f.prototype.imaskn=function(a){d("number"==typeof a&&a>=0);var b=a%26,c=(a-b)/26;if(d(0===this.negative,"imaskn works only with positive numbers"),this.length<=c)return this;if(0!==b&&c++,this.length=Math.min(c,this.length),0!==b){var e=67108863^67108863>>>b<<b;this.words[this.length-1]&=e}return this.strip()},f.prototype.maskn=function(a){return this.clone().imaskn(a)},f.prototype.iaddn=function(a){return d("number"==typeof a),d(a<67108864),a<0?this.isubn(-a):0!==this.negative?1===this.length&&(0|this.words[0])<a?(this.words[0]=a-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(a),this.negative=1,this):this._iaddn(a)},f.prototype._iaddn=function(a){this.words[0]+=a;for(var b=0;b<this.length&&this.words[b]>=67108864;b++)this.words[b]-=67108864,b===this.length-1?this.words[b+1]=1:this.words[b+1]++;return this.length=Math.max(this.length,b+1),this},f.prototype.isubn=function(a){if(d("number"==typeof a),d(a<67108864),a<0)return this.iaddn(-a);if(0!==this.negative)return this.negative=0,this.iaddn(a),this.negative=1,this;if(this.words[0]-=a,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var b=0;b<this.length&&this.words[b]<0;b++)this.words[b]+=67108864,this.words[b+1]-=1;return this.strip()},f.prototype.addn=function(a){return this.clone().iaddn(a)},f.prototype.subn=function(a){return this.clone().isubn(a)},f.prototype.iabs=function(){return this.negative=0,this},f.prototype.abs=function(){return this.clone().iabs()},f.prototype._ishlnsubmul=function(a,b,c){var e,f=a.length+c;this._expand(f);var g,h=0;for(e=0;e<a.length;e++){g=(0|this.words[e+c])+h;var i=(0|a.words[e])*b;g-=67108863&i,h=(g>>26)-(i/67108864|0),this.words[e+c]=67108863&g}for(;e<this.length-c;e++)g=(0|this.words[e+c])+h,h=g>>26,this.words[e+c]=67108863&g;if(0===h)return this.strip();for(d(h===-1),h=0,e=0;e<this.length;e++)g=-(0|this.words[e])+h,h=g>>26,this.words[e]=67108863&g;return this.negative=1,this.strip()},f.prototype._wordDiv=function(a,b){var c=this.length-a.length,d=this.clone(),e=a,g=0|e.words[e.length-1],h=this._countBits(g);c=26-h,0!==c&&(e=e.ushln(c),d.iushln(c),g=0|e.words[e.length-1]);var i,j=d.length-e.length;if("mod"!==b){i=new f(null),i.length=j+1,i.words=new Array(i.length);for(var k=0;k<i.length;k++)i.words[k]=0}var l=d.clone()._ishlnsubmul(e,1,j);0===l.negative&&(d=l,i&&(i.words[j]=1));for(var m=j-1;m>=0;m--){var n=67108864*(0|d.words[e.length+m])+(0|d.words[e.length+m-1]);for(n=Math.min(n/g|0,67108863),d._ishlnsubmul(e,n,m);0!==d.negative;)n--,d.negative=0,d._ishlnsubmul(e,1,m),d.isZero()||(d.negative^=1);i&&(i.words[m]=n); -}return i&&i.strip(),d.strip(),"div"!==b&&0!==c&&d.iushrn(c),{div:i||null,mod:d}},f.prototype.divmod=function(a,b,c){if(d(!a.isZero()),this.isZero())return{div:new f(0),mod:new f(0)};var e,g,h;return 0!==this.negative&&0===a.negative?(h=this.neg().divmod(a,b),"mod"!==b&&(e=h.div.neg()),"div"!==b&&(g=h.mod.neg(),c&&0!==g.negative&&g.iadd(a)),{div:e,mod:g}):0===this.negative&&0!==a.negative?(h=this.divmod(a.neg(),b),"mod"!==b&&(e=h.div.neg()),{div:e,mod:h.mod}):0!==(this.negative&a.negative)?(h=this.neg().divmod(a.neg(),b),"div"!==b&&(g=h.mod.neg(),c&&0!==g.negative&&g.isub(a)),{div:h.div,mod:g}):a.length>this.length||this.cmp(a)<0?{div:new f(0),mod:this}:1===a.length?"div"===b?{div:this.divn(a.words[0]),mod:null}:"mod"===b?{div:null,mod:new f(this.modn(a.words[0]))}:{div:this.divn(a.words[0]),mod:new f(this.modn(a.words[0]))}:this._wordDiv(a,b)},f.prototype.div=function(a){return this.divmod(a,"div",!1).div},f.prototype.mod=function(a){return this.divmod(a,"mod",!1).mod},f.prototype.umod=function(a){return this.divmod(a,"mod",!0).mod},f.prototype.divRound=function(a){var b=this.divmod(a);if(b.mod.isZero())return b.div;var c=0!==b.div.negative?b.mod.isub(a):b.mod,d=a.ushrn(1),e=a.andln(1),f=c.cmp(d);return f<0||1===e&&0===f?b.div:0!==b.div.negative?b.div.isubn(1):b.div.iaddn(1)},f.prototype.modn=function(a){d(a<=67108863);for(var b=(1<<26)%a,c=0,e=this.length-1;e>=0;e--)c=(b*c+(0|this.words[e]))%a;return c},f.prototype.idivn=function(a){d(a<=67108863);for(var b=0,c=this.length-1;c>=0;c--){var e=(0|this.words[c])+67108864*b;this.words[c]=e/a|0,b=e%a}return this.strip()},f.prototype.divn=function(a){return this.clone().idivn(a)},f.prototype.egcd=function(a){d(0===a.negative),d(!a.isZero());var b=this,c=a.clone();b=0!==b.negative?b.umod(a):b.clone();for(var e=new f(1),g=new f(0),h=new f(0),i=new f(1),j=0;b.isEven()&&c.isEven();)b.iushrn(1),c.iushrn(1),++j;for(var k=c.clone(),l=b.clone();!b.isZero();){for(var m=0,n=1;0===(b.words[0]&n)&&m<26;++m,n<<=1);if(m>0)for(b.iushrn(m);m-- >0;)(e.isOdd()||g.isOdd())&&(e.iadd(k),g.isub(l)),e.iushrn(1),g.iushrn(1);for(var o=0,p=1;0===(c.words[0]&p)&&o<26;++o,p<<=1);if(o>0)for(c.iushrn(o);o-- >0;)(h.isOdd()||i.isOdd())&&(h.iadd(k),i.isub(l)),h.iushrn(1),i.iushrn(1);b.cmp(c)>=0?(b.isub(c),e.isub(h),g.isub(i)):(c.isub(b),h.isub(e),i.isub(g))}return{a:h,b:i,gcd:c.iushln(j)}},f.prototype._invmp=function(a){d(0===a.negative),d(!a.isZero());var b=this,c=a.clone();b=0!==b.negative?b.umod(a):b.clone();for(var e=new f(1),g=new f(0),h=c.clone();b.cmpn(1)>0&&c.cmpn(1)>0;){for(var i=0,j=1;0===(b.words[0]&j)&&i<26;++i,j<<=1);if(i>0)for(b.iushrn(i);i-- >0;)e.isOdd()&&e.iadd(h),e.iushrn(1);for(var k=0,l=1;0===(c.words[0]&l)&&k<26;++k,l<<=1);if(k>0)for(c.iushrn(k);k-- >0;)g.isOdd()&&g.iadd(h),g.iushrn(1);b.cmp(c)>=0?(b.isub(c),e.isub(g)):(c.isub(b),g.isub(e))}var m;return m=0===b.cmpn(1)?e:g,m.cmpn(0)<0&&m.iadd(a),m},f.prototype.gcd=function(a){if(this.isZero())return a.abs();if(a.isZero())return this.abs();var b=this.clone(),c=a.clone();b.negative=0,c.negative=0;for(var d=0;b.isEven()&&c.isEven();d++)b.iushrn(1),c.iushrn(1);for(;;){for(;b.isEven();)b.iushrn(1);for(;c.isEven();)c.iushrn(1);var e=b.cmp(c);if(e<0){var f=b;b=c,c=f}else if(0===e||0===c.cmpn(1))break;b.isub(c)}return c.iushln(d)},f.prototype.invm=function(a){return this.egcd(a).a.umod(a)},f.prototype.isEven=function(){return 0===(1&this.words[0])},f.prototype.isOdd=function(){return 1===(1&this.words[0])},f.prototype.andln=function(a){return this.words[0]&a},f.prototype.bincn=function(a){d("number"==typeof a);var b=a%26,c=(a-b)/26,e=1<<b;if(this.length<=c)return this._expand(c+1),this.words[c]|=e,this;for(var f=e,g=c;0!==f&&g<this.length;g++){var h=0|this.words[g];h+=f,f=h>>>26,h&=67108863,this.words[g]=h}return 0!==f&&(this.words[g]=f,this.length++),this},f.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},f.prototype.cmpn=function(a){var b=a<0;if(0!==this.negative&&!b)return-1;if(0===this.negative&&b)return 1;this.strip();var c;if(this.length>1)c=1;else{b&&(a=-a),d(a<=67108863,"Number is too big");var e=0|this.words[0];c=e===a?0:e<a?-1:1}return 0!==this.negative?0|-c:c},f.prototype.cmp=function(a){if(0!==this.negative&&0===a.negative)return-1;if(0===this.negative&&0!==a.negative)return 1;var b=this.ucmp(a);return 0!==this.negative?0|-b:b},f.prototype.ucmp=function(a){if(this.length>a.length)return 1;if(this.length<a.length)return-1;for(var b=0,c=this.length-1;c>=0;c--){var d=0|this.words[c],e=0|a.words[c];if(d!==e){d<e?b=-1:d>e&&(b=1);break}}return b},f.prototype.gtn=function(a){return 1===this.cmpn(a)},f.prototype.gt=function(a){return 1===this.cmp(a)},f.prototype.gten=function(a){return this.cmpn(a)>=0},f.prototype.gte=function(a){return this.cmp(a)>=0},f.prototype.ltn=function(a){return this.cmpn(a)===-1},f.prototype.lt=function(a){return this.cmp(a)===-1},f.prototype.lten=function(a){return this.cmpn(a)<=0},f.prototype.lte=function(a){return this.cmp(a)<=0},f.prototype.eqn=function(a){return 0===this.cmpn(a)},f.prototype.eq=function(a){return 0===this.cmp(a)},f.red=function(a){return new s(a)},f.prototype.toRed=function(a){return d(!this.red,"Already a number in reduction context"),d(0===this.negative,"red works only with positives"),a.convertTo(this)._forceRed(a)},f.prototype.fromRed=function(){return d(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},f.prototype._forceRed=function(a){return this.red=a,this},f.prototype.forceRed=function(a){return d(!this.red,"Already a number in reduction context"),this._forceRed(a)},f.prototype.redAdd=function(a){return d(this.red,"redAdd works only with red numbers"),this.red.add(this,a)},f.prototype.redIAdd=function(a){return d(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,a)},f.prototype.redSub=function(a){return d(this.red,"redSub works only with red numbers"),this.red.sub(this,a)},f.prototype.redISub=function(a){return d(this.red,"redISub works only with red numbers"),this.red.isub(this,a)},f.prototype.redShl=function(a){return d(this.red,"redShl works only with red numbers"),this.red.shl(this,a)},f.prototype.redMul=function(a){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,a),this.red.mul(this,a)},f.prototype.redIMul=function(a){return d(this.red,"redMul works only with red numbers"),this.red._verify2(this,a),this.red.imul(this,a)},f.prototype.redSqr=function(){return d(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},f.prototype.redISqr=function(){return d(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},f.prototype.redSqrt=function(){return d(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},f.prototype.redInvm=function(){return d(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},f.prototype.redNeg=function(){return d(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},f.prototype.redPow=function(a){return d(this.red&&!a.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,a)};var A={k256:null,p224:null,p192:null,p25519:null};n.prototype._tmp=function(){var a=new f(null);return a.words=new Array(Math.ceil(this.n/13)),a},n.prototype.ireduce=function(a){var b,c=a;do this.split(c,this.tmp),c=this.imulK(c),c=c.iadd(this.tmp),b=c.bitLength();while(b>this.n);var d=b<this.n?-1:c.ucmp(this.p);return 0===d?(c.words[0]=0,c.length=1):d>0?c.isub(this.p):c.strip(),c},n.prototype.split=function(a,b){a.iushrn(this.n,0,b)},n.prototype.imulK=function(a){return a.imul(this.k)},e(o,n),o.prototype.split=function(a,b){for(var c=4194303,d=Math.min(a.length,9),e=0;e<d;e++)b.words[e]=a.words[e];if(b.length=d,a.length<=9)return a.words[0]=0,void(a.length=1);var f=a.words[9];for(b.words[b.length++]=f&c,e=10;e<a.length;e++){var g=0|a.words[e];a.words[e-10]=(g&c)<<4|f>>>22,f=g}f>>>=22,a.words[e-10]=f,0===f&&a.length>10?a.length-=10:a.length-=9},o.prototype.imulK=function(a){a.words[a.length]=0,a.words[a.length+1]=0,a.length+=2;for(var b=0,c=0;c<a.length;c++){var d=0|a.words[c];b+=977*d,a.words[c]=67108863&b,b=64*d+(b/67108864|0)}return 0===a.words[a.length-1]&&(a.length--,0===a.words[a.length-1]&&a.length--),a},e(p,n),e(q,n),e(r,n),r.prototype.imulK=function(a){for(var b=0,c=0;c<a.length;c++){var d=19*(0|a.words[c])+b,e=67108863&d;d>>>=26,a.words[c]=e,b=d}return 0!==b&&(a.words[a.length++]=b),a},f._prime=function B(a){if(A[a])return A[a];var B;if("k256"===a)B=new o;else if("p224"===a)B=new p;else if("p192"===a)B=new q;else{if("p25519"!==a)throw new Error("Unknown prime "+a);B=new r}return A[a]=B,B},s.prototype._verify1=function(a){d(0===a.negative,"red works only with positives"),d(a.red,"red works only with red numbers")},s.prototype._verify2=function(a,b){d(0===(a.negative|b.negative),"red works only with positives"),d(a.red&&a.red===b.red,"red works only with red numbers")},s.prototype.imod=function(a){return this.prime?this.prime.ireduce(a)._forceRed(this):a.umod(this.m)._forceRed(this)},s.prototype.neg=function(a){return a.isZero()?a.clone():this.m.sub(a)._forceRed(this)},s.prototype.add=function(a,b){this._verify2(a,b);var c=a.add(b);return c.cmp(this.m)>=0&&c.isub(this.m),c._forceRed(this)},s.prototype.iadd=function(a,b){this._verify2(a,b);var c=a.iadd(b);return c.cmp(this.m)>=0&&c.isub(this.m),c},s.prototype.sub=function(a,b){this._verify2(a,b);var c=a.sub(b);return c.cmpn(0)<0&&c.iadd(this.m),c._forceRed(this)},s.prototype.isub=function(a,b){this._verify2(a,b);var c=a.isub(b);return c.cmpn(0)<0&&c.iadd(this.m),c},s.prototype.shl=function(a,b){return this._verify1(a),this.imod(a.ushln(b))},s.prototype.imul=function(a,b){return this._verify2(a,b),this.imod(a.imul(b))},s.prototype.mul=function(a,b){return this._verify2(a,b),this.imod(a.mul(b))},s.prototype.isqr=function(a){return this.imul(a,a.clone())},s.prototype.sqr=function(a){return this.mul(a,a)},s.prototype.sqrt=function(a){if(a.isZero())return a.clone();var b=this.m.andln(3);if(d(b%2===1),3===b){var c=this.m.add(new f(1)).iushrn(2);return this.pow(a,c)}for(var e=this.m.subn(1),g=0;!e.isZero()&&0===e.andln(1);)g++,e.iushrn(1);d(!e.isZero());var h=new f(1).toRed(this),i=h.redNeg(),j=this.m.subn(1).iushrn(1),k=this.m.bitLength();for(k=new f(2*k*k).toRed(this);0!==this.pow(k,j).cmp(i);)k.redIAdd(i);for(var l=this.pow(k,e),m=this.pow(a,e.addn(1).iushrn(1)),n=this.pow(a,e),o=g;0!==n.cmp(h);){for(var p=n,q=0;0!==p.cmp(h);q++)p=p.redSqr();d(q<o);var r=this.pow(l,new f(1).iushln(o-q-1));m=m.redMul(r),l=r.redSqr(),n=n.redMul(l),o=q}return m},s.prototype.invm=function(a){var b=a._invmp(this.m);return 0!==b.negative?(b.negative=0,this.imod(b).redNeg()):this.imod(b)},s.prototype.pow=function(a,b){if(b.isZero())return new f(1).toRed(this);if(0===b.cmpn(1))return a.clone();var c=4,d=new Array(1<<c);d[0]=new f(1).toRed(this),d[1]=a;for(var e=2;e<d.length;e++)d[e]=this.mul(d[e-1],a);var g=d[0],h=0,i=0,j=b.bitLength()%26;for(0===j&&(j=26),e=b.length-1;e>=0;e--){for(var k=b.words[e],l=j-1;l>=0;l--){var m=k>>l&1;g!==d[0]&&(g=this.sqr(g)),0!==m||0!==h?(h<<=1,h|=m,i++,(i===c||0===e&&0===l)&&(g=this.mul(g,d[h]),i=0,h=0)):i=0}j=26}return g},s.prototype.convertTo=function(a){var b=a.umod(this.m);return b===a?b.clone():b},s.prototype.convertFrom=function(a){var b=a.clone();return b.red=null,b},f.mont=function(a){return new t(a)},e(t,s),t.prototype.convertTo=function(a){return this.imod(a.ushln(this.shift))},t.prototype.convertFrom=function(a){var b=this.imod(a.mul(this.rinv));return b.red=null,b},t.prototype.imul=function(a,b){if(a.isZero()||b.isZero())return a.words[0]=0,a.length=1,a;var c=a.imul(b),d=c.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),e=c.isub(d).iushrn(this.shift),f=e;return e.cmp(this.m)>=0?f=e.isub(this.m):e.cmpn(0)<0&&(f=e.iadd(this.m)),f._forceRed(this)},t.prototype.mul=function(a,b){if(a.isZero()||b.isZero())return new f(0)._forceRed(this);var c=a.mul(b),d=c.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),e=c.isub(d).iushrn(this.shift),g=e;return e.cmp(this.m)>=0?g=e.isub(this.m):e.cmpn(0)<0&&(g=e.iadd(this.m)),g._forceRed(this)},t.prototype.invm=function(a){var b=this.imod(a._invmp(this.m).mul(this.r2));return b._forceRed(this)}}("undefined"==typeof b||b,this)},{buffer:18}],17:[function(a,b,c){function d(a){this.rand=a}var e;if(b.exports=function(a){return e||(e=new d(null)),e.generate(a)},b.exports.Rand=d,d.prototype.generate=function(a){return this._rand(a)},d.prototype._rand=function(a){if(this.rand.getBytes)return this.rand.getBytes(a);for(var b=new Uint8Array(a),c=0;c<b.length;c++)b[c]=this.rand.getByte();return b},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?d.prototype._rand=function(a){var b=new Uint8Array(a);return self.crypto.getRandomValues(b),b}:self.msCrypto&&self.msCrypto.getRandomValues?d.prototype._rand=function(a){var b=new Uint8Array(a);return self.msCrypto.getRandomValues(b),b}:"object"==typeof window&&(d.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var f=a("crypto");if("function"!=typeof f.randomBytes)throw new Error("Not supported");d.prototype._rand=function(a){return f.randomBytes(a)}}catch(g){}},{crypto:18}],18:[function(a,b,c){},{}],19:[function(a,b,c){var d=c;d.utils=a("./hash/utils"),d.common=a("./hash/common"),d.sha=a("./hash/sha"),d.ripemd=a("./hash/ripemd"),d.hmac=a("./hash/hmac"),d.sha1=d.sha.sha1,d.sha256=d.sha.sha256,d.sha224=d.sha.sha224,d.sha384=d.sha.sha384,d.sha512=d.sha.sha512,d.ripemd160=d.ripemd.ripemd160},{"./hash/common":20,"./hash/hmac":21,"./hash/ripemd":22,"./hash/sha":23,"./hash/utils":30}],20:[function(a,b,c){"use strict";function d(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian="big",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}var e=a("./utils"),f=a("minimalistic-assert");c.BlockHash=d,d.prototype.update=function(a,b){if(a=e.toArray(a,b),this.pending?this.pending=this.pending.concat(a):this.pending=a,this.pendingTotal+=a.length,this.pending.length>=this._delta8){a=this.pending;var c=a.length%this._delta8;this.pending=a.slice(a.length-c,a.length),0===this.pending.length&&(this.pending=null),a=e.join32(a,0,a.length-c,this.endian);for(var d=0;d<a.length;d+=this._delta32)this._update(a,d,d+this._delta32)}return this},d.prototype.digest=function(a){return this.update(this._pad()),f(null===this.pending),this._digest(a)},d.prototype._pad=function(){var a=this.pendingTotal,b=this._delta8,c=b-(a+this.padLength)%b,d=new Array(c+this.padLength);d[0]=128;for(var e=1;e<c;e++)d[e]=0;if(a<<=3,"big"===this.endian){for(var f=8;f<this.padLength;f++)d[e++]=0;d[e++]=0,d[e++]=0,d[e++]=0,d[e++]=0,d[e++]=a>>>24&255,d[e++]=a>>>16&255,d[e++]=a>>>8&255,d[e++]=255&a}else for(d[e++]=255&a,d[e++]=a>>>8&255,d[e++]=a>>>16&255,d[e++]=a>>>24&255,d[e++]=0,d[e++]=0,d[e++]=0,d[e++]=0,f=8;f<this.padLength;f++)d[e++]=0;return d}},{"./utils":30,"minimalistic-assert":33}],21:[function(a,b,c){"use strict";function d(a,b,c){return this instanceof d?(this.Hash=a,this.blockSize=a.blockSize/8,this.outSize=a.outSize/8,this.inner=null,this.outer=null,void this._init(e.toArray(b,c))):new d(a,b,c)}var e=a("./utils"),f=a("minimalistic-assert");b.exports=d,d.prototype._init=function(a){a.length>this.blockSize&&(a=(new this.Hash).update(a).digest()),f(a.length<=this.blockSize);for(var b=a.length;b<this.blockSize;b++)a.push(0);for(b=0;b<a.length;b++)a[b]^=54;for(this.inner=(new this.Hash).update(a),b=0;b<a.length;b++)a[b]^=106;this.outer=(new this.Hash).update(a)},d.prototype.update=function(a,b){return this.inner.update(a,b),this},d.prototype.digest=function(a){return this.outer.update(this.inner.digest()),this.outer.digest(a)}},{"./utils":30,"minimalistic-assert":33}],22:[function(a,b,c){"use strict";function d(){return this instanceof d?(n.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.endian="little")):new d}function e(a,b,c,d){return a<=15?b^c^d:a<=31?b&c|~b&d:a<=47?(b|~c)^d:a<=63?b&d|c&~d:b^(c|~d)}function f(a){return a<=15?0:a<=31?1518500249:a<=47?1859775393:a<=63?2400959708:2840853838}function g(a){return a<=15?1352829926:a<=31?1548603684:a<=47?1836072691:a<=63?2053994217:0}var h=a("./utils"),i=a("./common"),j=h.rotl32,k=h.sum32,l=h.sum32_3,m=h.sum32_4,n=i.BlockHash;h.inherits(d,n),c.ripemd160=d,d.blockSize=512,d.outSize=160,d.hmacStrength=192,d.padLength=64,d.prototype._update=function(a,b){for(var c=this.h[0],d=this.h[1],h=this.h[2],i=this.h[3],n=this.h[4],s=c,t=d,u=h,v=i,w=n,x=0;x<80;x++){var y=k(j(m(c,e(x,d,h,i),a[o[x]+b],f(x)),q[x]),n);c=n,n=i,i=j(h,10),h=d,d=y,y=k(j(m(s,e(79-x,t,u,v),a[p[x]+b],g(x)),r[x]),w),s=w,w=v,v=j(u,10),u=t,t=y}y=l(this.h[1],h,v),this.h[1]=l(this.h[2],i,w),this.h[2]=l(this.h[3],n,s),this.h[3]=l(this.h[4],c,t),this.h[4]=l(this.h[0],d,u),this.h[0]=y},d.prototype._digest=function(a){return"hex"===a?h.toHex32(this.h,"little"):h.split32(this.h,"little")};var o=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],p=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],q=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],r=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11]},{"./common":20,"./utils":30}],23:[function(a,b,c){"use strict";c.sha1=a("./sha/1"),c.sha224=a("./sha/224"),c.sha256=a("./sha/256"),c.sha384=a("./sha/384"),c.sha512=a("./sha/512")},{"./sha/1":24,"./sha/224":25,"./sha/256":26,"./sha/384":27,"./sha/512":28}],24:[function(a,b,c){"use strict";function d(){return this instanceof d?(l.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],void(this.W=new Array(80))):new d}var e=a("../utils"),f=a("../common"),g=a("./common"),h=e.rotl32,i=e.sum32,j=e.sum32_5,k=g.ft_1,l=f.BlockHash,m=[1518500249,1859775393,2400959708,3395469782];e.inherits(d,l),b.exports=d,d.blockSize=512,d.outSize=160,d.hmacStrength=80,d.padLength=64,d.prototype._update=function(a,b){for(var c=this.W,d=0;d<16;d++)c[d]=a[b+d];for(;d<c.length;d++)c[d]=h(c[d-3]^c[d-8]^c[d-14]^c[d-16],1);var e=this.h[0],f=this.h[1],g=this.h[2],l=this.h[3],n=this.h[4];for(d=0;d<c.length;d++){var o=~~(d/20),p=j(h(e,5),k(o,f,g,l),n,c[d],m[o]);n=l,l=g,g=h(f,30),f=e,e=p}this.h[0]=i(this.h[0],e),this.h[1]=i(this.h[1],f),this.h[2]=i(this.h[2],g),this.h[3]=i(this.h[3],l),this.h[4]=i(this.h[4],n)},d.prototype._digest=function(a){return"hex"===a?e.toHex32(this.h,"big"):e.split32(this.h,"big")}},{"../common":20,"../utils":30,"./common":29}],25:[function(a,b,c){"use strict";function d(){return this instanceof d?(f.call(this),void(this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428])):new d}var e=a("../utils"),f=a("./256");e.inherits(d,f),b.exports=d,d.blockSize=512,d.outSize=224,d.hmacStrength=192,d.padLength=64,d.prototype._digest=function(a){return"hex"===a?e.toHex32(this.h.slice(0,7),"big"):e.split32(this.h.slice(0,7),"big")}},{"../utils":30,"./256":26}],26:[function(a,b,c){"use strict";function d(){return this instanceof d?(r.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=s,void(this.W=new Array(64))):new d}var e=a("../utils"),f=a("../common"),g=a("./common"),h=a("minimalistic-assert"),i=e.sum32,j=e.sum32_4,k=e.sum32_5,l=g.ch32,m=g.maj32,n=g.s0_256,o=g.s1_256,p=g.g0_256,q=g.g1_256,r=f.BlockHash,s=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];e.inherits(d,r),b.exports=d,d.blockSize=512,d.outSize=256,d.hmacStrength=192,d.padLength=64,d.prototype._update=function(a,b){for(var c=this.W,d=0;d<16;d++)c[d]=a[b+d];for(;d<c.length;d++)c[d]=j(q(c[d-2]),c[d-7],p(c[d-15]),c[d-16]);var e=this.h[0],f=this.h[1],g=this.h[2],r=this.h[3],s=this.h[4],t=this.h[5],u=this.h[6],v=this.h[7];for(h(this.k.length===c.length),d=0;d<c.length;d++){var w=k(v,o(s),l(s,t,u),this.k[d],c[d]),x=i(n(e),m(e,f,g));v=u,u=t,t=s,s=i(r,w),r=g,g=f,f=e,e=i(w,x)}this.h[0]=i(this.h[0],e),this.h[1]=i(this.h[1],f),this.h[2]=i(this.h[2],g),this.h[3]=i(this.h[3],r),this.h[4]=i(this.h[4],s),this.h[5]=i(this.h[5],t),this.h[6]=i(this.h[6],u),this.h[7]=i(this.h[7],v)},d.prototype._digest=function(a){return"hex"===a?e.toHex32(this.h,"big"):e.split32(this.h,"big")}},{"../common":20,"../utils":30,"./common":29,"minimalistic-assert":33}],27:[function(a,b,c){"use strict";function d(){return this instanceof d?(f.call(this),void(this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428])):new d}var e=a("../utils"),f=a("./512");e.inherits(d,f),b.exports=d,d.blockSize=1024,d.outSize=384,d.hmacStrength=192,d.padLength=128,d.prototype._digest=function(a){return"hex"===a?e.toHex32(this.h.slice(0,12),"big"):e.split32(this.h.slice(0,12),"big")}},{"../utils":30,"./512":28}],28:[function(a,b,c){"use strict";function d(){return this instanceof d?(E.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=F,void(this.W=new Array(160))):new d}function e(a,b,c,d,e){var f=a&c^~a&e;return f<0&&(f+=4294967296),f}function f(a,b,c,d,e,f){var g=b&d^~b&f;return g<0&&(g+=4294967296),g}function g(a,b,c,d,e){var f=a&c^a&e^c&e;return f<0&&(f+=4294967296),f}function h(a,b,c,d,e,f){var g=b&d^b&f^d&f;return g<0&&(g+=4294967296),g}function i(a,b){var c=t(a,b,28),d=t(b,a,2),e=t(b,a,7),f=c^d^e;return f<0&&(f+=4294967296),f}function j(a,b){var c=u(a,b,28),d=u(b,a,2),e=u(b,a,7),f=c^d^e;return f<0&&(f+=4294967296),f}function k(a,b){var c=t(a,b,14),d=t(a,b,18),e=t(b,a,9),f=c^d^e;return f<0&&(f+=4294967296),f}function l(a,b){var c=u(a,b,14),d=u(a,b,18),e=u(b,a,9),f=c^d^e;return f<0&&(f+=4294967296),f}function m(a,b){var c=t(a,b,1),d=t(a,b,8),e=v(a,b,7),f=c^d^e;return f<0&&(f+=4294967296),f}function n(a,b){var c=u(a,b,1),d=u(a,b,8),e=w(a,b,7),f=c^d^e;return f<0&&(f+=4294967296),f}function o(a,b){var c=t(a,b,19),d=t(b,a,29),e=v(a,b,6),f=c^d^e;return f<0&&(f+=4294967296),f}function p(a,b){var c=u(a,b,19),d=u(b,a,29),e=w(a,b,6),f=c^d^e;return f<0&&(f+=4294967296),f}var q=a("../utils"),r=a("../common"),s=a("minimalistic-assert"),t=q.rotr64_hi,u=q.rotr64_lo,v=q.shr64_hi,w=q.shr64_lo,x=q.sum64,y=q.sum64_hi,z=q.sum64_lo,A=q.sum64_4_hi,B=q.sum64_4_lo,C=q.sum64_5_hi,D=q.sum64_5_lo,E=r.BlockHash,F=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591];q.inherits(d,E),b.exports=d,d.blockSize=1024,d.outSize=512,d.hmacStrength=192,d.padLength=128,d.prototype._prepareBlock=function(a,b){for(var c=this.W,d=0;d<32;d++)c[d]=a[b+d];for(;d<c.length;d+=2){var e=o(c[d-4],c[d-3]),f=p(c[d-4],c[d-3]),g=c[d-14],h=c[d-13],i=m(c[d-30],c[d-29]),j=n(c[d-30],c[d-29]),k=c[d-32],l=c[d-31];c[d]=A(e,f,g,h,i,j,k,l),c[d+1]=B(e,f,g,h,i,j,k,l)}},d.prototype._update=function(a,b){this._prepareBlock(a,b);var c=this.W,d=this.h[0],m=this.h[1],n=this.h[2],o=this.h[3],p=this.h[4],q=this.h[5],r=this.h[6],t=this.h[7],u=this.h[8],v=this.h[9],w=this.h[10],A=this.h[11],B=this.h[12],E=this.h[13],F=this.h[14],G=this.h[15];s(this.k.length===c.length);for(var H=0;H<c.length;H+=2){var I=F,J=G,K=k(u,v),L=l(u,v),M=e(u,v,w,A,B,E),N=f(u,v,w,A,B,E),O=this.k[H],P=this.k[H+1],Q=c[H],R=c[H+1],S=C(I,J,K,L,M,N,O,P,Q,R),T=D(I,J,K,L,M,N,O,P,Q,R);I=i(d,m),J=j(d,m),K=g(d,m,n,o,p,q),L=h(d,m,n,o,p,q);var U=y(I,J,K,L),V=z(I,J,K,L);F=B,G=E,B=w,E=A,w=u,A=v,u=y(r,t,S,T),v=z(t,t,S,T),r=p,t=q,p=n,q=o,n=d,o=m,d=y(S,T,U,V),m=z(S,T,U,V)}x(this.h,0,d,m),x(this.h,2,n,o),x(this.h,4,p,q),x(this.h,6,r,t),x(this.h,8,u,v),x(this.h,10,w,A),x(this.h,12,B,E),x(this.h,14,F,G)},d.prototype._digest=function(a){return"hex"===a?q.toHex32(this.h,"big"):q.split32(this.h,"big")}},{"../common":20,"../utils":30,"minimalistic-assert":33}],29:[function(a,b,c){"use strict";function d(a,b,c,d){return 0===a?e(b,c,d):1===a||3===a?g(b,c,d):2===a?f(b,c,d):void 0}function e(a,b,c){return a&b^~a&c}function f(a,b,c){return a&b^a&c^b&c}function g(a,b,c){return a^b^c}function h(a){return m(a,2)^m(a,13)^m(a,22)}function i(a){return m(a,6)^m(a,11)^m(a,25)}function j(a){return m(a,7)^m(a,18)^a>>>3}function k(a){return m(a,17)^m(a,19)^a>>>10}var l=a("../utils"),m=l.rotr32;c.ft_1=d,c.ch32=e,c.maj32=f,c.p32=g,c.s0_256=h,c.s1_256=i,c.g0_256=j,c.g1_256=k},{"../utils":30}],30:[function(a,b,c){"use strict";function d(a,b){return 55296===(64512&a.charCodeAt(b))&&(!(b<0||b+1>=a.length)&&56320===(64512&a.charCodeAt(b+1)))}function e(a,b){if(Array.isArray(a))return a.slice();if(!a)return[];var c=[];if("string"==typeof a)if(b){if("hex"===b)for(a=a.replace(/[^a-z0-9]+/gi,""),a.length%2!==0&&(a="0"+a),f=0;f<a.length;f+=2)c.push(parseInt(a[f]+a[f+1],16))}else for(var e=0,f=0;f<a.length;f++){var g=a.charCodeAt(f);g<128?c[e++]=g:g<2048?(c[e++]=g>>6|192,c[e++]=63&g|128):d(a,f)?(g=65536+((1023&g)<<10)+(1023&a.charCodeAt(++f)),c[e++]=g>>18|240,c[e++]=g>>12&63|128,c[e++]=g>>6&63|128,c[e++]=63&g|128):(c[e++]=g>>12|224,c[e++]=g>>6&63|128,c[e++]=63&g|128)}else for(f=0;f<a.length;f++)c[f]=0|a[f];return c}function f(a){for(var b="",c=0;c<a.length;c++)b+=i(a[c].toString(16));return b}function g(a){var b=a>>>24|a>>>8&65280|a<<8&16711680|(255&a)<<24;return b>>>0}function h(a,b){for(var c="",d=0;d<a.length;d++){var e=a[d];"little"===b&&(e=g(e)),c+=j(e.toString(16))}return c}function i(a){return 1===a.length?"0"+a:a}function j(a){return 7===a.length?"0"+a:6===a.length?"00"+a:5===a.length?"000"+a:4===a.length?"0000"+a:3===a.length?"00000"+a:2===a.length?"000000"+a:1===a.length?"0000000"+a:a}function k(a,b,c,d){var e=c-b;D(e%4===0);for(var f=new Array(e/4),g=0,h=b;g<f.length;g++,h+=4){var i;i="big"===d?a[h]<<24|a[h+1]<<16|a[h+2]<<8|a[h+3]:a[h+3]<<24|a[h+2]<<16|a[h+1]<<8|a[h],f[g]=i>>>0}return f}function l(a,b){for(var c=new Array(4*a.length),d=0,e=0;d<a.length;d++,e+=4){var f=a[d];"big"===b?(c[e]=f>>>24,c[e+1]=f>>>16&255,c[e+2]=f>>>8&255,c[e+3]=255&f):(c[e+3]=f>>>24,c[e+2]=f>>>16&255,c[e+1]=f>>>8&255,c[e]=255&f)}return c}function m(a,b){return a>>>b|a<<32-b}function n(a,b){return a<<b|a>>>32-b}function o(a,b){return a+b>>>0}function p(a,b,c){return a+b+c>>>0}function q(a,b,c,d){return a+b+c+d>>>0}function r(a,b,c,d,e){return a+b+c+d+e>>>0}function s(a,b,c,d){var e=a[b],f=a[b+1],g=d+f>>>0,h=(g<d?1:0)+c+e;a[b]=h>>>0,a[b+1]=g}function t(a,b,c,d){var e=b+d>>>0,f=(e<b?1:0)+a+c;return f>>>0}function u(a,b,c,d){var e=b+d;return e>>>0}function v(a,b,c,d,e,f,g,h){var i=0,j=b;j=j+d>>>0,i+=j<b?1:0,j=j+f>>>0,i+=j<f?1:0,j=j+h>>>0,i+=j<h?1:0;var k=a+c+e+g+i;return k>>>0}function w(a,b,c,d,e,f,g,h){var i=b+d+f+h;return i>>>0}function x(a,b,c,d,e,f,g,h,i,j){var k=0,l=b;l=l+d>>>0,k+=l<b?1:0,l=l+f>>>0,k+=l<f?1:0,l=l+h>>>0,k+=l<h?1:0,l=l+j>>>0,k+=l<j?1:0;var m=a+c+e+g+i+k;return m>>>0}function y(a,b,c,d,e,f,g,h,i,j){var k=b+d+f+h+j;return k>>>0}function z(a,b,c){var d=b<<32-c|a>>>c;return d>>>0}function A(a,b,c){var d=a<<32-c|b>>>c;return d>>>0}function B(a,b,c){return a>>>c}function C(a,b,c){var d=a<<32-c|b>>>c;return d>>>0}var D=a("minimalistic-assert"),E=a("inherits");c.inherits=E,c.toArray=e,c.toHex=f,c.htonl=g,c.toHex32=h,c.zero2=i,c.zero8=j,c.join32=k,c.split32=l,c.rotr32=m,c.rotl32=n,c.sum32=o,c.sum32_3=p,c.sum32_4=q,c.sum32_5=r,c.sum64=s,c.sum64_hi=t,c.sum64_lo=u,c.sum64_4_hi=v,c.sum64_4_lo=w,c.sum64_5_hi=x,c.sum64_5_lo=y,c.rotr64_hi=z,c.rotr64_lo=A,c.shr64_hi=B,c.shr64_lo=C},{inherits:32,"minimalistic-assert":33}],31:[function(a,b,c){"use strict";function d(a){if(!(this instanceof d))return new d(a);this.hash=a.hash,this.predResist=!!a.predResist,this.outLen=this.hash.outSize,this.minEntropy=a.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var b=f.toArray(a.entropy,a.entropyEnc||"hex"),c=f.toArray(a.nonce,a.nonceEnc||"hex"),e=f.toArray(a.pers,a.persEnc||"hex");g(b.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(b,c,e)}var e=a("hash.js"),f=a("minimalistic-crypto-utils"),g=a("minimalistic-assert");b.exports=d,d.prototype._init=function(a,b,c){var d=a.concat(b).concat(c);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var e=0;e<this.V.length;e++)this.K[e]=0,this.V[e]=1;this._update(d),this._reseed=1,this.reseedInterval=281474976710656},d.prototype._hmac=function(){return new e.hmac(this.hash,this.K)},d.prototype._update=function(a){var b=this._hmac().update(this.V).update([0]);a&&(b=b.update(a)),this.K=b.digest(),this.V=this._hmac().update(this.V).digest(),a&&(this.K=this._hmac().update(this.V).update([1]).update(a).digest(),this.V=this._hmac().update(this.V).digest())},d.prototype.reseed=function(a,b,c,d){"string"!=typeof b&&(d=c,c=b,b=null),a=f.toArray(a,b),c=f.toArray(c,d),g(a.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(a.concat(c||[])),this._reseed=1},d.prototype.generate=function(a,b,c,d){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof b&&(d=c,c=b,b=null),c&&(c=f.toArray(c,d||"hex"),this._update(c));for(var e=[];e.length<a;)this.V=this._hmac().update(this.V).digest(), -e=e.concat(this.V);var g=e.slice(0,a);return this._update(c),this._reseed++,f.encode(g,b)}},{"hash.js":19,"minimalistic-assert":33,"minimalistic-crypto-utils":34}],32:[function(a,b,c){"function"==typeof Object.create?b.exports=function(a,b){b&&(a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}))}:b.exports=function(a,b){if(b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}}},{}],33:[function(a,b,c){function d(a,b){if(!a)throw new Error(b||"Assertion failed")}b.exports=d,d.equal=function(a,b,c){if(a!=b)throw new Error(c||"Assertion failed: "+a+" != "+b)}},{}],34:[function(a,b,c){"use strict";function d(a,b){if(Array.isArray(a))return a.slice();if(!a)return[];var c=[];if("string"!=typeof a){for(var d=0;d<a.length;d++)c[d]=0|a[d];return c}if("hex"===b){a=a.replace(/[^a-z0-9]+/gi,""),a.length%2!==0&&(a="0"+a);for(var d=0;d<a.length;d+=2)c.push(parseInt(a[d]+a[d+1],16))}else for(var d=0;d<a.length;d++){var e=a.charCodeAt(d),f=e>>8,g=255&e;f?c.push(f,g):c.push(g)}return c}function e(a){return 1===a.length?"0"+a:a}function f(a){for(var b="",c=0;c<a.length;c++)b+=e(a[c].toString(16));return b}var g=c;g.toArray=d,g.zero2=e,g.toHex=f,g.encode=function(a,b){return"hex"===b?f(a):a}},{}],35:[function(a,b,c){b.exports={name:"elliptic",version:"6.5.2",description:"EC cryptography",main:"lib/elliptic.js",files:["lib"],scripts:{jscs:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",jshint:"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",lint:"npm run jscs && npm run jshint",unit:"istanbul test _mocha --reporter=spec test/index.js",test:"npm run lint && npm run unit",version:"grunt dist && git add dist/"},repository:{type:"git",url:"git@github.com:indutny/elliptic"},keywords:["EC","Elliptic","curve","Cryptography"],author:"Fedor Indutny <fedor@indutny.com>",license:"MIT",bugs:{url:"https://github.com/indutny/elliptic/issues"},homepage:"https://github.com/indutny/elliptic",devDependencies:{brfs:"^1.4.3",coveralls:"^3.0.8",grunt:"^1.0.4","grunt-browserify":"^5.0.0","grunt-cli":"^1.2.0","grunt-contrib-connect":"^1.0.0","grunt-contrib-copy":"^1.0.0","grunt-contrib-uglify":"^1.0.1","grunt-mocha-istanbul":"^3.0.1","grunt-saucelabs":"^9.0.1",istanbul:"^0.4.2",jscs:"^3.0.7",jshint:"^2.10.3",mocha:"^6.2.2"},dependencies:{"bn.js":"^4.4.0",brorand:"^1.0.1","hash.js":"^1.0.0","hmac-drbg":"^1.0.0",inherits:"^2.0.1","minimalistic-assert":"^1.0.0","minimalistic-crypto-utils":"^1.0.0"}}},{}]},{},[1])(1)}); \ No newline at end of file diff --git a/javascript/src/lib/webcrypto-liner.shim.js b/javascript/src/lib/webcrypto-liner.shim.js deleted file mode 100644 index bf3b1ab5364ef5fc8e0cbd9ff8881335c5097762..0000000000000000000000000000000000000000 --- a/javascript/src/lib/webcrypto-liner.shim.js +++ /dev/null @@ -1,14828 +0,0 @@ -/** - * Copyright (c) 2020, Peculiar Ventures, All rights reserved. - */ - -var liner = (function (exports, asmcrypto_js, elliptic) { - 'use strict'; - - function _typeof(obj) { - if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { - _typeof = function (obj) { - return typeof obj; - }; - } else { - _typeof = function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }; - } - - return _typeof(obj); - } - - function _classCallCheck(instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - } - - function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - return Constructor; - } - - function _defineProperty(obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - } - - function ownKeys(object, enumerableOnly) { - var keys = Object.keys(object); - - if (Object.getOwnPropertySymbols) { - var symbols = Object.getOwnPropertySymbols(object); - if (enumerableOnly) symbols = symbols.filter(function (sym) { - return Object.getOwnPropertyDescriptor(object, sym).enumerable; - }); - keys.push.apply(keys, symbols); - } - - return keys; - } - - function _objectSpread2(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - - if (i % 2) { - ownKeys(Object(source), true).forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } else if (Object.getOwnPropertyDescriptors) { - Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); - } else { - ownKeys(Object(source)).forEach(function (key) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); - }); - } - } - - return target; - } - - function _inherits(subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function"); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - writable: true, - configurable: true - } - }); - if (superClass) _setPrototypeOf(subClass, superClass); - } - - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { - return o.__proto__ || Object.getPrototypeOf(o); - }; - return _getPrototypeOf(o); - } - - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - - return _setPrototypeOf(o, p); - } - - function isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) return false; - if (Reflect.construct.sham) return false; - if (typeof Proxy === "function") return true; - - try { - Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); - return true; - } catch (e) { - return false; - } - } - - function _construct(Parent, args, Class) { - if (isNativeReflectConstruct()) { - _construct = Reflect.construct; - } else { - _construct = function _construct(Parent, args, Class) { - var a = [null]; - a.push.apply(a, args); - var Constructor = Function.bind.apply(Parent, a); - var instance = new Constructor(); - if (Class) _setPrototypeOf(instance, Class.prototype); - return instance; - }; - } - - return _construct.apply(null, arguments); - } - - function _isNativeFunction(fn) { - return Function.toString.call(fn).indexOf("[native code]") !== -1; - } - - function _wrapNativeSuper(Class) { - var _cache = typeof Map === "function" ? new Map() : undefined; - - _wrapNativeSuper = function _wrapNativeSuper(Class) { - if (Class === null || !_isNativeFunction(Class)) return Class; - - if (typeof Class !== "function") { - throw new TypeError("Super expression must either be null or a function"); - } - - if (typeof _cache !== "undefined") { - if (_cache.has(Class)) return _cache.get(Class); - - _cache.set(Class, Wrapper); - } - - function Wrapper() { - return _construct(Class, arguments, _getPrototypeOf(this).constructor); - } - - Wrapper.prototype = Object.create(Class.prototype, { - constructor: { - value: Wrapper, - enumerable: false, - writable: true, - configurable: true - } - }); - return _setPrototypeOf(Wrapper, Class); - }; - - return _wrapNativeSuper(Class); - } - - function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return self; - } - - function _possibleConstructorReturn(self, call) { - if (call && (typeof call === "object" || typeof call === "function")) { - return call; - } - - return _assertThisInitialized(self); - } - - function _superPropBase(object, property) { - while (!Object.prototype.hasOwnProperty.call(object, property)) { - object = _getPrototypeOf(object); - if (object === null) break; - } - - return object; - } - - function _get(target, property, receiver) { - if (typeof Reflect !== "undefined" && Reflect.get) { - _get = Reflect.get; - } else { - _get = function _get(target, property, receiver) { - var base = _superPropBase(target, property); - - if (!base) return; - var desc = Object.getOwnPropertyDescriptor(base, property); - - if (desc.get) { - return desc.get.call(receiver); - } - - return desc.value; - }; - } - - return _get(target, property, receiver || target); - } - - function _toConsumableArray(arr) { - return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); - } - - function _arrayWithoutHoles(arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } - } - - function _iterableToArray(iter) { - if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); - } - - function _nonIterableSpread() { - throw new TypeError("Invalid attempt to spread non-iterable instance"); - } - - var _a, _b; - - var window = {}; - - if (typeof self !== "undefined") { - window = self; - } - - exports.nativeCrypto = window["msCrypto"] || window.crypto || {}; - exports.nativeSubtle = null; - - try { - exports.nativeSubtle = ((_a = exports.nativeCrypto) === null || _a === void 0 ? void 0 : _a.subtle) || ((_b = exports.nativeCrypto) === null || _b === void 0 ? void 0 : _b["webkitSubtle"]) || null; - } catch (err) { - console.warn("Cannot get subtle from crypto", err); - } - - function setCrypto(crypto) { - exports.nativeCrypto = crypto; - exports.nativeSubtle = crypto.subtle; - } - - function PrepareBuffer(buffer) { - if (typeof Buffer !== "undefined" && Buffer.isBuffer(buffer)) { - return new Uint8Array(buffer); - } else if (ArrayBuffer.isView(buffer)) { - return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength); - } else { - return new Uint8Array(buffer); - } - } - - var Convert = function () { - function Convert() { - _classCallCheck(this, Convert); - } - - _createClass(Convert, null, [{ - key: "ToString", - value: function ToString(buffer) { - var enc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "utf8"; - var buf = PrepareBuffer(buffer); - - switch (enc.toLowerCase()) { - case "utf8": - return this.ToUtf8String(buf); - - case "binary": - return this.ToBinary(buf); - - case "hex": - return this.ToHex(buf); - - case "base64": - return this.ToBase64(buf); - - case "base64url": - return this.ToBase64Url(buf); - - default: - throw new Error("Unknown type of encoding '".concat(enc, "'")); - } - } - }, { - key: "FromString", - value: function FromString(str) { - var enc = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "utf8"; - - switch (enc.toLowerCase()) { - case "utf8": - return this.FromUtf8String(str); - - case "binary": - return this.FromBinary(str); - - case "hex": - return this.FromHex(str); - - case "base64": - return this.FromBase64(str); - - case "base64url": - return this.FromBase64Url(str); - - default: - throw new Error("Unknown type of encoding '".concat(enc, "'")); - } - } - }, { - key: "ToBase64", - value: function ToBase64(buffer) { - var buf = PrepareBuffer(buffer); - - if (typeof btoa !== "undefined") { - var binary = this.ToString(buf, "binary"); - return btoa(binary); - } else { - return Buffer.from(buf).toString("base64"); - } - } - }, { - key: "FromBase64", - value: function FromBase64(base64Text) { - base64Text = base64Text.replace(/\n/g, "").replace(/\r/g, "").replace(/\t/g, "").replace(/\s/g, ""); - - if (typeof atob !== "undefined") { - return this.FromBinary(atob(base64Text)); - } else { - return new Uint8Array(Buffer.from(base64Text, "base64")).buffer; - } - } - }, { - key: "FromBase64Url", - value: function FromBase64Url(base64url) { - return this.FromBase64(this.Base64Padding(base64url.replace(/\-/g, "+").replace(/\_/g, "/"))); - } - }, { - key: "ToBase64Url", - value: function ToBase64Url(data) { - return this.ToBase64(data).replace(/\+/g, "-").replace(/\//g, "_").replace(/\=/g, ""); - } - }, { - key: "FromUtf8String", - value: function FromUtf8String(text) { - var s = unescape(encodeURIComponent(text)); - var uintArray = new Uint8Array(s.length); - - for (var i = 0; i < s.length; i++) { - uintArray[i] = s.charCodeAt(i); - } - - return uintArray.buffer; - } - }, { - key: "ToUtf8String", - value: function ToUtf8String(buffer) { - var buf = PrepareBuffer(buffer); - var encodedString = String.fromCharCode.apply(null, buf); - var decodedString = decodeURIComponent(escape(encodedString)); - return decodedString; - } - }, { - key: "FromBinary", - value: function FromBinary(text) { - var stringLength = text.length; - var resultView = new Uint8Array(stringLength); - - for (var i = 0; i < stringLength; i++) { - resultView[i] = text.charCodeAt(i); - } - - return resultView.buffer; - } - }, { - key: "ToBinary", - value: function ToBinary(buffer) { - var buf = PrepareBuffer(buffer); - var resultString = ""; - var len = buf.length; - - for (var i = 0; i < len; i++) { - resultString = resultString + String.fromCharCode(buf[i]); - } - - return resultString; - } - }, { - key: "ToHex", - value: function ToHex(buffer) { - var buf = PrepareBuffer(buffer); - var splitter = ""; - var res = []; - var len = buf.length; - - for (var i = 0; i < len; i++) { - var char = buf[i].toString(16); - res.push(char.length === 1 ? "0" + char : char); - } - - return res.join(splitter); - } - }, { - key: "FromHex", - value: function FromHex(hexString) { - var res = new Uint8Array(hexString.length / 2); - - for (var i = 0; i < hexString.length; i = i + 2) { - var c = hexString.slice(i, i + 2); - res[i / 2] = parseInt(c, 16); - } - - return res.buffer; - } - }, { - key: "Base64Padding", - value: function Base64Padding(base64) { - var padCount = 4 - base64.length % 4; - - if (padCount < 4) { - for (var i = 0; i < padCount; i++) { - base64 += "="; - } - } - - return base64; - } - }]); - - return Convert; - }(); - - var BufferSourceConverter = function () { - function BufferSourceConverter() { - _classCallCheck(this, BufferSourceConverter); - } - - _createClass(BufferSourceConverter, null, [{ - key: "toArrayBuffer", - value: function toArrayBuffer(data) { - var buf = this.toUint8Array(data); - - if (buf.byteOffset || buf.length) { - return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.length); - } - - return buf.buffer; - } - }, { - key: "toUint8Array", - value: function toUint8Array(data) { - if (typeof Buffer !== "undefined" && Buffer.isBuffer(data)) { - return new Uint8Array(data); - } - - if (ArrayBuffer.isView(data)) { - return new Uint8Array(data.buffer, data.byteOffset, data.byteLength); - } - - if (data instanceof ArrayBuffer) { - return new Uint8Array(data); - } - - throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'"); - } - }, { - key: "isBufferSource", - value: function isBufferSource(data) { - return ArrayBuffer.isView(data) || data instanceof ArrayBuffer; - } - }]); - - return BufferSourceConverter; - }(); - - var CryptoError = function (_Error) { - _inherits(CryptoError, _Error); - - function CryptoError() { - _classCallCheck(this, CryptoError); - - return _possibleConstructorReturn(this, _getPrototypeOf(CryptoError).apply(this, arguments)); - } - - return CryptoError; - }(_wrapNativeSuper(Error)); - - var AlgorithmError = function (_CryptoError) { - _inherits(AlgorithmError, _CryptoError); - - function AlgorithmError() { - _classCallCheck(this, AlgorithmError); - - return _possibleConstructorReturn(this, _getPrototypeOf(AlgorithmError).apply(this, arguments)); - } - - return AlgorithmError; - }(CryptoError); - - var UnsupportedOperationError = function (_CryptoError2) { - _inherits(UnsupportedOperationError, _CryptoError2); - - function UnsupportedOperationError(methodName) { - _classCallCheck(this, UnsupportedOperationError); - - return _possibleConstructorReturn(this, _getPrototypeOf(UnsupportedOperationError).call(this, "Unsupported operation: ".concat(methodName ? "".concat(methodName) : ""))); - } - - return UnsupportedOperationError; - }(CryptoError); - - var OperationError = function (_CryptoError3) { - _inherits(OperationError, _CryptoError3); - - function OperationError() { - _classCallCheck(this, OperationError); - - return _possibleConstructorReturn(this, _getPrototypeOf(OperationError).apply(this, arguments)); - } - - return OperationError; - }(CryptoError); - - var RequiredPropertyError = function (_CryptoError4) { - _inherits(RequiredPropertyError, _CryptoError4); - - function RequiredPropertyError(propName) { - _classCallCheck(this, RequiredPropertyError); - - return _possibleConstructorReturn(this, _getPrototypeOf(RequiredPropertyError).call(this, "".concat(propName, ": Missing required property"))); - } - - return RequiredPropertyError; - }(CryptoError); - - function isJWK(data) { - return _typeof(data) === "object" && "kty" in data; - } - - var ProviderCrypto = function () { - function ProviderCrypto() { - _classCallCheck(this, ProviderCrypto); - } - - _createClass(ProviderCrypto, [{ - key: "digest", - value: function digest(algorithm, data) { - var _args = arguments; - return regeneratorRuntime.async(function digest$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - this.checkDigest.apply(this, _args); - return _context.abrupt("return", this.onDigest.apply(this, _args)); - - case 2: - case "end": - return _context.stop(); - } - } - }, null, this); - } - }, { - key: "checkDigest", - value: function checkDigest(algorithm, data) { - this.checkAlgorithmName(algorithm); - } - }, { - key: "onDigest", - value: function onDigest(algorithm, data) { - return regeneratorRuntime.async(function onDigest$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - throw new UnsupportedOperationError("digest"); - - case 1: - case "end": - return _context2.stop(); - } - } - }); - } - }, { - key: "generateKey", - value: function generateKey(algorithm, extractable, keyUsages) { - var _args3 = arguments; - return regeneratorRuntime.async(function generateKey$(_context3) { - while (1) { - switch (_context3.prev = _context3.next) { - case 0: - this.checkGenerateKey.apply(this, _args3); - return _context3.abrupt("return", this.onGenerateKey.apply(this, _args3)); - - case 2: - case "end": - return _context3.stop(); - } - } - }, null, this); - } - }, { - key: "checkGenerateKey", - value: function checkGenerateKey(algorithm, extractable, keyUsages) { - this.checkAlgorithmName(algorithm); - this.checkGenerateKeyParams(algorithm); - - if (!(keyUsages && keyUsages.length)) { - throw new TypeError("Usages cannot be empty when creating a key."); - } - - var allowedUsages; - - if (Array.isArray(this.usages)) { - allowedUsages = this.usages; - } else { - allowedUsages = this.usages.privateKey.concat(this.usages.publicKey); - } - - this.checkKeyUsages(keyUsages, allowedUsages); - } - }, { - key: "checkGenerateKeyParams", - value: function checkGenerateKeyParams(algorithm) {} - }, { - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return regeneratorRuntime.async(function onGenerateKey$(_context4) { - while (1) { - switch (_context4.prev = _context4.next) { - case 0: - throw new UnsupportedOperationError("generateKey"); - - case 1: - case "end": - return _context4.stop(); - } - } - }); - } - }, { - key: "sign", - value: function sign(algorithm, key, data) { - var _args5 = arguments; - return regeneratorRuntime.async(function sign$(_context5) { - while (1) { - switch (_context5.prev = _context5.next) { - case 0: - this.checkSign.apply(this, _args5); - return _context5.abrupt("return", this.onSign.apply(this, _args5)); - - case 2: - case "end": - return _context5.stop(); - } - } - }, null, this); - } - }, { - key: "checkSign", - value: function checkSign(algorithm, key, data) { - this.checkAlgorithmName(algorithm); - this.checkAlgorithmParams(algorithm); - this.checkCryptoKey(key, "sign"); - } - }, { - key: "onSign", - value: function onSign(algorithm, key, data) { - return regeneratorRuntime.async(function onSign$(_context6) { - while (1) { - switch (_context6.prev = _context6.next) { - case 0: - throw new UnsupportedOperationError("sign"); - - case 1: - case "end": - return _context6.stop(); - } - } - }); - } - }, { - key: "verify", - value: function verify(algorithm, key, signature, data) { - var _args7 = arguments; - return regeneratorRuntime.async(function verify$(_context7) { - while (1) { - switch (_context7.prev = _context7.next) { - case 0: - this.checkVerify.apply(this, _args7); - return _context7.abrupt("return", this.onVerify.apply(this, _args7)); - - case 2: - case "end": - return _context7.stop(); - } - } - }, null, this); - } - }, { - key: "checkVerify", - value: function checkVerify(algorithm, key, signature, data) { - this.checkAlgorithmName(algorithm); - this.checkAlgorithmParams(algorithm); - this.checkCryptoKey(key, "verify"); - } - }, { - key: "onVerify", - value: function onVerify(algorithm, key, signature, data) { - return regeneratorRuntime.async(function onVerify$(_context8) { - while (1) { - switch (_context8.prev = _context8.next) { - case 0: - throw new UnsupportedOperationError("verify"); - - case 1: - case "end": - return _context8.stop(); - } - } - }); - } - }, { - key: "encrypt", - value: function encrypt(algorithm, key, data, options) { - var _args9 = arguments; - return regeneratorRuntime.async(function encrypt$(_context9) { - while (1) { - switch (_context9.prev = _context9.next) { - case 0: - this.checkEncrypt.apply(this, _args9); - return _context9.abrupt("return", this.onEncrypt.apply(this, _args9)); - - case 2: - case "end": - return _context9.stop(); - } - } - }, null, this); - } - }, { - key: "checkEncrypt", - value: function checkEncrypt(algorithm, key, data) { - var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - this.checkAlgorithmName(algorithm); - this.checkAlgorithmParams(algorithm); - this.checkCryptoKey(key, options.keyUsage ? "encrypt" : void 0); - } - }, { - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return regeneratorRuntime.async(function onEncrypt$(_context10) { - while (1) { - switch (_context10.prev = _context10.next) { - case 0: - throw new UnsupportedOperationError("encrypt"); - - case 1: - case "end": - return _context10.stop(); - } - } - }); - } - }, { - key: "decrypt", - value: function decrypt(algorithm, key, data, options) { - var _args11 = arguments; - return regeneratorRuntime.async(function decrypt$(_context11) { - while (1) { - switch (_context11.prev = _context11.next) { - case 0: - this.checkDecrypt.apply(this, _args11); - return _context11.abrupt("return", this.onDecrypt.apply(this, _args11)); - - case 2: - case "end": - return _context11.stop(); - } - } - }, null, this); - } - }, { - key: "checkDecrypt", - value: function checkDecrypt(algorithm, key, data) { - var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - this.checkAlgorithmName(algorithm); - this.checkAlgorithmParams(algorithm); - this.checkCryptoKey(key, options.keyUsage ? "decrypt" : void 0); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return regeneratorRuntime.async(function onDecrypt$(_context12) { - while (1) { - switch (_context12.prev = _context12.next) { - case 0: - throw new UnsupportedOperationError("decrypt"); - - case 1: - case "end": - return _context12.stop(); - } - } - }); - } - }, { - key: "deriveBits", - value: function deriveBits(algorithm, baseKey, length, options) { - var _args13 = arguments; - return regeneratorRuntime.async(function deriveBits$(_context13) { - while (1) { - switch (_context13.prev = _context13.next) { - case 0: - this.checkDeriveBits.apply(this, _args13); - return _context13.abrupt("return", this.onDeriveBits.apply(this, _args13)); - - case 2: - case "end": - return _context13.stop(); - } - } - }, null, this); - } - }, { - key: "checkDeriveBits", - value: function checkDeriveBits(algorithm, baseKey, length) { - var options = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}; - this.checkAlgorithmName(algorithm); - this.checkAlgorithmParams(algorithm); - this.checkCryptoKey(baseKey, options.keyUsage ? "deriveBits" : void 0); - - if (length % 8 !== 0) { - throw new OperationError("length: Is not multiple of 8"); - } - } - }, { - key: "onDeriveBits", - value: function onDeriveBits(algorithm, baseKey, length) { - return regeneratorRuntime.async(function onDeriveBits$(_context14) { - while (1) { - switch (_context14.prev = _context14.next) { - case 0: - throw new UnsupportedOperationError("deriveBits"); - - case 1: - case "end": - return _context14.stop(); - } - } - }); - } - }, { - key: "exportKey", - value: function exportKey(format, key) { - var _args15 = arguments; - return regeneratorRuntime.async(function exportKey$(_context15) { - while (1) { - switch (_context15.prev = _context15.next) { - case 0: - this.checkExportKey.apply(this, _args15); - return _context15.abrupt("return", this.onExportKey.apply(this, _args15)); - - case 2: - case "end": - return _context15.stop(); - } - } - }, null, this); - } - }, { - key: "checkExportKey", - value: function checkExportKey(format, key) { - this.checkKeyFormat(format); - this.checkCryptoKey(key); - - if (!key.extractable) { - throw new CryptoError("key: Is not extractable"); - } - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return regeneratorRuntime.async(function onExportKey$(_context16) { - while (1) { - switch (_context16.prev = _context16.next) { - case 0: - throw new UnsupportedOperationError("exportKey"); - - case 1: - case "end": - return _context16.stop(); - } - } - }); - } - }, { - key: "importKey", - value: function importKey(format, keyData, algorithm, extractable, keyUsages) { - var _args17 = arguments; - return regeneratorRuntime.async(function importKey$(_context17) { - while (1) { - switch (_context17.prev = _context17.next) { - case 0: - this.checkImportKey.apply(this, _args17); - return _context17.abrupt("return", this.onImportKey.apply(this, _args17)); - - case 2: - case "end": - return _context17.stop(); - } - } - }, null, this); - } - }, { - key: "checkImportKey", - value: function checkImportKey(format, keyData, algorithm, extractable, keyUsages) { - this.checkKeyFormat(format); - this.checkKeyData(format, keyData); - this.checkAlgorithmName(algorithm); - this.checkImportParams(algorithm); - - if (Array.isArray(this.usages)) { - this.checkKeyUsages(keyUsages, this.usages); - } - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return regeneratorRuntime.async(function onImportKey$(_context18) { - while (1) { - switch (_context18.prev = _context18.next) { - case 0: - throw new UnsupportedOperationError("importKey"); - - case 1: - case "end": - return _context18.stop(); - } - } - }); - } - }, { - key: "checkAlgorithmName", - value: function checkAlgorithmName(algorithm) { - if (algorithm.name.toLowerCase() !== this.name.toLowerCase()) { - throw new AlgorithmError("Unrecognized name"); - } - } - }, { - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) {} - }, { - key: "checkDerivedKeyParams", - value: function checkDerivedKeyParams(algorithm) {} - }, { - key: "checkKeyUsages", - value: function checkKeyUsages(usages, allowed) { - var _iteratorNormalCompletion = true; - var _didIteratorError = false; - var _iteratorError = undefined; - - try { - for (var _iterator = usages[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { - var usage = _step.value; - - if (allowed.indexOf(usage) === -1) { - throw new TypeError("Cannot create a key using the specified key usages"); - } - } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; - } finally { - try { - if (!_iteratorNormalCompletion && _iterator.return != null) { - _iterator.return(); - } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } - } - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - this.checkAlgorithmName(key.algorithm); - - if (keyUsage && key.usages.indexOf(keyUsage) === -1) { - throw new CryptoError("key does not match that of operation"); - } - } - }, { - key: "checkRequiredProperty", - value: function checkRequiredProperty(data, propName) { - if (!(propName in data)) { - throw new RequiredPropertyError(propName); - } - } - }, { - key: "checkHashAlgorithm", - value: function checkHashAlgorithm(algorithm, hashAlgorithms) { - var _iteratorNormalCompletion2 = true; - var _didIteratorError2 = false; - var _iteratorError2 = undefined; - - try { - for (var _iterator2 = hashAlgorithms[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) { - var item = _step2.value; - - if (item.toLowerCase() === algorithm.name.toLowerCase()) { - return; - } - } - } catch (err) { - _didIteratorError2 = true; - _iteratorError2 = err; - } finally { - try { - if (!_iteratorNormalCompletion2 && _iterator2.return != null) { - _iterator2.return(); - } - } finally { - if (_didIteratorError2) { - throw _iteratorError2; - } - } - } - - throw new OperationError("hash: Must be one of ".concat(hashAlgorithms.join(", "))); - } - }, { - key: "checkImportParams", - value: function checkImportParams(algorithm) {} - }, { - key: "checkKeyFormat", - value: function checkKeyFormat(format) { - switch (format) { - case "raw": - case "pkcs8": - case "spki": - case "jwk": - break; - - default: - throw new TypeError("format: Is invalid value. Must be 'jwk', 'raw', 'spki', or 'pkcs8'"); - } - } - }, { - key: "checkKeyData", - value: function checkKeyData(format, keyData) { - if (!keyData) { - throw new TypeError("keyData: Cannot be empty on empty on key importing"); - } - - if (format === "jwk") { - if (!isJWK(keyData)) { - throw new TypeError("keyData: Is not JsonWebToken"); - } - } else if (!BufferSourceConverter.isBufferSource(keyData)) { - throw new TypeError("keyData: Is not ArrayBufferView or ArrayBuffer"); - } - } - }, { - key: "prepareData", - value: function prepareData(data) { - return BufferSourceConverter.toArrayBuffer(data); - } - }]); - - return ProviderCrypto; - }(); - - var AesProvider = function (_ProviderCrypto) { - _inherits(AesProvider, _ProviderCrypto); - - function AesProvider() { - _classCallCheck(this, AesProvider); - - return _possibleConstructorReturn(this, _getPrototypeOf(AesProvider).apply(this, arguments)); - } - - _createClass(AesProvider, [{ - key: "checkGenerateKeyParams", - value: function checkGenerateKeyParams(algorithm) { - this.checkRequiredProperty(algorithm, "length"); - - if (typeof algorithm.length !== "number") { - throw new TypeError("length: Is not of type Number"); - } - - switch (algorithm.length) { - case 128: - case 192: - case 256: - break; - - default: - throw new TypeError("length: Must be 128, 192, or 256"); - } - } - }, { - key: "checkDerivedKeyParams", - value: function checkDerivedKeyParams(algorithm) { - this.checkGenerateKeyParams(algorithm); - } - }]); - - return AesProvider; - }(ProviderCrypto); - - var AesCbcProvider = function (_AesProvider) { - _inherits(AesCbcProvider, _AesProvider); - - function AesCbcProvider() { - var _this; - - _classCallCheck(this, AesCbcProvider); - - _this = _possibleConstructorReturn(this, _getPrototypeOf(AesCbcProvider).apply(this, arguments)); - _this.name = "AES-CBC"; - _this.usages = ["encrypt", "decrypt", "wrapKey", "unwrapKey"]; - return _this; - } - - _createClass(AesCbcProvider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - this.checkRequiredProperty(algorithm, "iv"); - - if (!(algorithm.iv instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.iv))) { - throw new TypeError("iv: Is not of type '(ArrayBuffer or ArrayBufferView)'"); - } - - if (algorithm.iv.byteLength !== 16) { - throw new TypeError("iv: Must have length 16 bytes"); - } - } - }]); - - return AesCbcProvider; - }(AesProvider); - - var AesCtrProvider = function (_AesProvider2) { - _inherits(AesCtrProvider, _AesProvider2); - - function AesCtrProvider() { - var _this2; - - _classCallCheck(this, AesCtrProvider); - - _this2 = _possibleConstructorReturn(this, _getPrototypeOf(AesCtrProvider).apply(this, arguments)); - _this2.name = "AES-CTR"; - _this2.usages = ["encrypt", "decrypt", "wrapKey", "unwrapKey"]; - return _this2; - } - - _createClass(AesCtrProvider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - this.checkRequiredProperty(algorithm, "counter"); - - if (!(algorithm.counter instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.counter))) { - throw new TypeError("counter: Is not of type '(ArrayBuffer or ArrayBufferView)'"); - } - - if (algorithm.counter.byteLength !== 16) { - throw new TypeError("iv: Must have length 16 bytes"); - } - - this.checkRequiredProperty(algorithm, "length"); - - if (typeof algorithm.length !== "number") { - throw new TypeError("length: Is not a Number"); - } - - if (algorithm.length < 1) { - throw new OperationError("length: Must be more than 0"); - } - } - }]); - - return AesCtrProvider; - }(AesProvider); - - var AesEcbProvider = function (_AesProvider3) { - _inherits(AesEcbProvider, _AesProvider3); - - function AesEcbProvider() { - var _this3; - - _classCallCheck(this, AesEcbProvider); - - _this3 = _possibleConstructorReturn(this, _getPrototypeOf(AesEcbProvider).apply(this, arguments)); - _this3.name = "AES-ECB"; - _this3.usages = ["encrypt", "decrypt", "wrapKey", "unwrapKey"]; - return _this3; - } - - return AesEcbProvider; - }(AesProvider); - - var AesGcmProvider = function (_AesProvider4) { - _inherits(AesGcmProvider, _AesProvider4); - - function AesGcmProvider() { - var _this4; - - _classCallCheck(this, AesGcmProvider); - - _this4 = _possibleConstructorReturn(this, _getPrototypeOf(AesGcmProvider).apply(this, arguments)); - _this4.name = "AES-GCM"; - _this4.usages = ["encrypt", "decrypt", "wrapKey", "unwrapKey"]; - return _this4; - } - - _createClass(AesGcmProvider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - this.checkRequiredProperty(algorithm, "iv"); - - if (!(algorithm.iv instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.iv))) { - throw new TypeError("iv: Is not of type '(ArrayBuffer or ArrayBufferView)'"); - } - - if (algorithm.iv.byteLength < 1) { - throw new OperationError("iv: Must have length more than 0 and less than 2^64 - 1"); - } - - if (!("tagLength" in algorithm)) { - algorithm.tagLength = 128; - } - - switch (algorithm.tagLength) { - case 32: - case 64: - case 96: - case 104: - case 112: - case 120: - case 128: - break; - - default: - throw new OperationError("tagLength: Must be one of 32, 64, 96, 104, 112, 120 or 128"); - } - } - }]); - - return AesGcmProvider; - }(AesProvider); - - var AesKwProvider = function (_AesProvider5) { - _inherits(AesKwProvider, _AesProvider5); - - function AesKwProvider() { - var _this5; - - _classCallCheck(this, AesKwProvider); - - _this5 = _possibleConstructorReturn(this, _getPrototypeOf(AesKwProvider).apply(this, arguments)); - _this5.name = "AES-KW"; - _this5.usages = ["wrapKey", "unwrapKey"]; - return _this5; - } - - return AesKwProvider; - }(AesProvider); - - var DesProvider = function (_ProviderCrypto2) { - _inherits(DesProvider, _ProviderCrypto2); - - function DesProvider() { - var _this6; - - _classCallCheck(this, DesProvider); - - _this6 = _possibleConstructorReturn(this, _getPrototypeOf(DesProvider).apply(this, arguments)); - _this6.usages = ["encrypt", "decrypt", "wrapKey", "unwrapKey"]; - return _this6; - } - - _createClass(DesProvider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - if (this.ivSize) { - this.checkRequiredProperty(algorithm, "iv"); - - if (!(algorithm.iv instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.iv))) { - throw new TypeError("iv: Is not of type '(ArrayBuffer or ArrayBufferView)'"); - } - - if (algorithm.iv.byteLength !== this.ivSize) { - throw new TypeError("iv: Must have length ".concat(this.ivSize, " bytes")); - } - } - } - }, { - key: "checkGenerateKeyParams", - value: function checkGenerateKeyParams(algorithm) { - this.checkRequiredProperty(algorithm, "length"); - - if (typeof algorithm.length !== "number") { - throw new TypeError("length: Is not of type Number"); - } - - if (algorithm.length !== this.keySizeBits) { - throw new OperationError("algorith.length: Must be ".concat(this.keySizeBits)); - } - } - }, { - key: "checkDerivedKeyParams", - value: function checkDerivedKeyParams(algorithm) { - this.checkGenerateKeyParams(algorithm); - } - }]); - - return DesProvider; - }(ProviderCrypto); - - var RsaProvider = function (_ProviderCrypto3) { - _inherits(RsaProvider, _ProviderCrypto3); - - function RsaProvider() { - var _this7; - - _classCallCheck(this, RsaProvider); - - _this7 = _possibleConstructorReturn(this, _getPrototypeOf(RsaProvider).apply(this, arguments)); - _this7.hashAlgorithms = ["SHA-1", "SHA-256", "SHA-384", "SHA-512"]; - return _this7; - } - - _createClass(RsaProvider, [{ - key: "checkGenerateKeyParams", - value: function checkGenerateKeyParams(algorithm) { - this.checkRequiredProperty(algorithm, "hash"); - this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms); - this.checkRequiredProperty(algorithm, "publicExponent"); - - if (!(algorithm.publicExponent && algorithm.publicExponent instanceof Uint8Array)) { - throw new TypeError("publicExponent: Missing or not a Uint8Array"); - } - - var publicExponent = Convert.ToBase64(algorithm.publicExponent); - - if (!(publicExponent === "Aw==" || publicExponent === "AQAB")) { - throw new TypeError("publicExponent: Must be [3] or [1,0,1]"); - } - - this.checkRequiredProperty(algorithm, "modulusLength"); - - switch (algorithm.modulusLength) { - case 1024: - case 2048: - case 4096: - break; - - default: - throw new TypeError("modulusLength: Must be 1024, 2048, or 4096"); - } - } - }, { - key: "checkImportParams", - value: function checkImportParams(algorithm) { - this.checkRequiredProperty(algorithm, "hash"); - this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms); - } - }]); - - return RsaProvider; - }(ProviderCrypto); - - var RsaSsaProvider = function (_RsaProvider) { - _inherits(RsaSsaProvider, _RsaProvider); - - function RsaSsaProvider() { - var _this8; - - _classCallCheck(this, RsaSsaProvider); - - _this8 = _possibleConstructorReturn(this, _getPrototypeOf(RsaSsaProvider).apply(this, arguments)); - _this8.name = "RSASSA-PKCS1-v1_5"; - _this8.usages = { - privateKey: ["sign"], - publicKey: ["verify"] - }; - return _this8; - } - - return RsaSsaProvider; - }(RsaProvider); - - var RsaPssProvider = function (_RsaProvider2) { - _inherits(RsaPssProvider, _RsaProvider2); - - function RsaPssProvider() { - var _this9; - - _classCallCheck(this, RsaPssProvider); - - _this9 = _possibleConstructorReturn(this, _getPrototypeOf(RsaPssProvider).apply(this, arguments)); - _this9.name = "RSA-PSS"; - _this9.usages = { - privateKey: ["sign"], - publicKey: ["verify"] - }; - return _this9; - } - - _createClass(RsaPssProvider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - this.checkRequiredProperty(algorithm, "saltLength"); - - if (typeof algorithm.saltLength !== "number") { - throw new TypeError("saltLength: Is not a Number"); - } - - if (algorithm.saltLength < 1) { - throw new RangeError("saltLength: Must be more than 0"); - } - } - }]); - - return RsaPssProvider; - }(RsaProvider); - - var RsaOaepProvider = function (_RsaProvider3) { - _inherits(RsaOaepProvider, _RsaProvider3); - - function RsaOaepProvider() { - var _this10; - - _classCallCheck(this, RsaOaepProvider); - - _this10 = _possibleConstructorReturn(this, _getPrototypeOf(RsaOaepProvider).apply(this, arguments)); - _this10.name = "RSA-OAEP"; - _this10.usages = { - privateKey: ["decrypt", "unwrapKey"], - publicKey: ["encrypt", "wrapKey"] - }; - return _this10; - } - - _createClass(RsaOaepProvider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - if (algorithm.label && !(algorithm.label instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.label))) { - throw new TypeError("label: Is not of type '(ArrayBuffer or ArrayBufferView)'"); - } - } - }]); - - return RsaOaepProvider; - }(RsaProvider); - - var EllipticProvider = function (_ProviderCrypto4) { - _inherits(EllipticProvider, _ProviderCrypto4); - - function EllipticProvider() { - _classCallCheck(this, EllipticProvider); - - return _possibleConstructorReturn(this, _getPrototypeOf(EllipticProvider).apply(this, arguments)); - } - - _createClass(EllipticProvider, [{ - key: "checkGenerateKeyParams", - value: function checkGenerateKeyParams(algorithm) { - this.checkRequiredProperty(algorithm, "namedCurve"); - this.checkNamedCurve(algorithm.namedCurve); - } - }, { - key: "checkNamedCurve", - value: function checkNamedCurve(namedCurve) { - var _iteratorNormalCompletion3 = true; - var _didIteratorError3 = false; - var _iteratorError3 = undefined; - - try { - for (var _iterator3 = this.namedCurves[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) { - var item = _step3.value; - - if (item.toLowerCase() === namedCurve.toLowerCase()) { - return; - } - } - } catch (err) { - _didIteratorError3 = true; - _iteratorError3 = err; - } finally { - try { - if (!_iteratorNormalCompletion3 && _iterator3.return != null) { - _iterator3.return(); - } - } finally { - if (_didIteratorError3) { - throw _iteratorError3; - } - } - } - - throw new OperationError("namedCurve: Must be one of ".concat(this.namedCurves.join(", "))); - } - }]); - - return EllipticProvider; - }(ProviderCrypto); - - var EcdsaProvider = function (_EllipticProvider) { - _inherits(EcdsaProvider, _EllipticProvider); - - function EcdsaProvider() { - var _this11; - - _classCallCheck(this, EcdsaProvider); - - _this11 = _possibleConstructorReturn(this, _getPrototypeOf(EcdsaProvider).apply(this, arguments)); - _this11.name = "ECDSA"; - _this11.hashAlgorithms = ["SHA-1", "SHA-256", "SHA-384", "SHA-512"]; - _this11.usages = { - privateKey: ["sign"], - publicKey: ["verify"] - }; - _this11.namedCurves = ["P-256", "P-384", "P-521", "K-256"]; - return _this11; - } - - _createClass(EcdsaProvider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - this.checkRequiredProperty(algorithm, "hash"); - this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms); - } - }]); - - return EcdsaProvider; - }(EllipticProvider); - - var KEY_TYPES = ["secret", "private", "public"]; - - var CryptoKey = function () { - function CryptoKey() { - _classCallCheck(this, CryptoKey); - } - - _createClass(CryptoKey, null, [{ - key: "create", - value: function create(algorithm, type, extractable, usages) { - var key = new this(); - key.algorithm = algorithm; - key.type = type; - key.extractable = extractable; - key.usages = usages; - return key; - } - }, { - key: "isKeyType", - value: function isKeyType(data) { - return KEY_TYPES.indexOf(data) !== -1; - } - }]); - - return CryptoKey; - }(); - - var EcdhProvider = function (_EllipticProvider2) { - _inherits(EcdhProvider, _EllipticProvider2); - - function EcdhProvider() { - var _this12; - - _classCallCheck(this, EcdhProvider); - - _this12 = _possibleConstructorReturn(this, _getPrototypeOf(EcdhProvider).apply(this, arguments)); - _this12.name = "ECDH"; - _this12.usages = { - privateKey: ["deriveBits", "deriveKey"], - publicKey: [] - }; - _this12.namedCurves = ["P-256", "P-384", "P-521", "K-256"]; - return _this12; - } - - _createClass(EcdhProvider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - this.checkRequiredProperty(algorithm, "public"); - - if (!(algorithm.public instanceof CryptoKey)) { - throw new TypeError("public: Is not a CryptoKey"); - } - - if (algorithm.public.type !== "public") { - throw new OperationError("public: Is not a public key"); - } - - if (algorithm.public.algorithm.name !== this.name) { - throw new OperationError("public: Is not ".concat(this.name, " key")); - } - } - }]); - - return EcdhProvider; - }(EllipticProvider); - - var HmacProvider = function (_ProviderCrypto5) { - _inherits(HmacProvider, _ProviderCrypto5); - - function HmacProvider() { - var _this13; - - _classCallCheck(this, HmacProvider); - - _this13 = _possibleConstructorReturn(this, _getPrototypeOf(HmacProvider).apply(this, arguments)); - _this13.name = "HMAC"; - _this13.hashAlgorithms = ["SHA-1", "SHA-256", "SHA-384", "SHA-512"]; - _this13.usages = ["sign", "verify"]; - return _this13; - } - - _createClass(HmacProvider, [{ - key: "getDefaultLength", - value: function getDefaultLength(algName) { - switch (algName.toUpperCase()) { - case "SHA-1": - return 160; - - case "SHA-256": - return 256; - - case "SHA-384": - return 384; - - case "SHA-512": - return 512; - - default: - throw new Error("Unknown algorithm name '".concat(algName, "'")); - } - } - }, { - key: "checkGenerateKeyParams", - value: function checkGenerateKeyParams(algorithm) { - this.checkRequiredProperty(algorithm, "hash"); - this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms); - - if ("length" in algorithm) { - if (typeof algorithm.length !== "number") { - throw new TypeError("length: Is not a Number"); - } - - if (algorithm.length < 1) { - throw new RangeError("length: Number is out of range"); - } - } - } - }, { - key: "checkImportParams", - value: function checkImportParams(algorithm) { - this.checkRequiredProperty(algorithm, "hash"); - this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms); - } - }]); - - return HmacProvider; - }(ProviderCrypto); - - var Pbkdf2Provider = function (_ProviderCrypto6) { - _inherits(Pbkdf2Provider, _ProviderCrypto6); - - function Pbkdf2Provider() { - var _this14; - - _classCallCheck(this, Pbkdf2Provider); - - _this14 = _possibleConstructorReturn(this, _getPrototypeOf(Pbkdf2Provider).apply(this, arguments)); - _this14.name = "PBKDF2"; - _this14.hashAlgorithms = ["SHA-1", "SHA-256", "SHA-384", "SHA-512"]; - _this14.usages = ["deriveBits", "deriveKey"]; - return _this14; - } - - _createClass(Pbkdf2Provider, [{ - key: "checkAlgorithmParams", - value: function checkAlgorithmParams(algorithm) { - this.checkRequiredProperty(algorithm, "hash"); - this.checkHashAlgorithm(algorithm.hash, this.hashAlgorithms); - this.checkRequiredProperty(algorithm, "salt"); - - if (!(algorithm.salt instanceof ArrayBuffer || ArrayBuffer.isView(algorithm.salt))) { - throw new TypeError("salt: Is not of type '(ArrayBuffer or ArrayBufferView)'"); - } - - this.checkRequiredProperty(algorithm, "iterations"); - - if (typeof algorithm.iterations !== "number") { - throw new TypeError("iterations: Is not a Number"); - } - - if (algorithm.iterations < 1) { - throw new TypeError("iterations: Is less than 1"); - } - } - }, { - key: "checkImportKey", - value: function checkImportKey(format, keyData, algorithm, extractable, keyUsages) { - _get(_getPrototypeOf(Pbkdf2Provider.prototype), "checkImportKey", this).call(this, format, keyData, algorithm, extractable, keyUsages); - - if (extractable) { - throw new SyntaxError("extractable: Must be False"); - } - } - }]); - - return Pbkdf2Provider; - }(ProviderCrypto); - - var Crypto = function Crypto() { - _classCallCheck(this, Crypto); - }; - - var ProviderStorage = function () { - function ProviderStorage() { - _classCallCheck(this, ProviderStorage); - - this.items = {}; - } - - _createClass(ProviderStorage, [{ - key: "get", - value: function get(algorithmName) { - return this.items[algorithmName.toLowerCase()] || null; - } - }, { - key: "set", - value: function set(provider) { - this.items[provider.name.toLowerCase()] = provider; - } - }, { - key: "removeAt", - value: function removeAt(algorithmName) { - var provider = this.get(algorithmName.toLowerCase()); - - if (provider) { - delete this.items[algorithmName]; - } - - return provider; - } - }, { - key: "has", - value: function has(name) { - return !!this.get(name); - } - }, { - key: "length", - get: function get() { - return Object.keys(this.items).length; - } - }, { - key: "algorithms", - get: function get() { - var algorithms = []; - - for (var key in this.items) { - var provider = this.items[key]; - algorithms.push(provider.name); - } - - return algorithms.sort(); - } - }]); - - return ProviderStorage; - }(); - - var SubtleCrypto = function () { - function SubtleCrypto() { - _classCallCheck(this, SubtleCrypto); - - this.providers = new ProviderStorage(); - } - - _createClass(SubtleCrypto, [{ - key: "digest", - value: function digest(algorithm, data) { - var preparedAlgorithm, - preparedData, - provider, - result, - _args19 = arguments; - return regeneratorRuntime.async(function digest$(_context19) { - while (1) { - switch (_context19.prev = _context19.next) { - case 0: - this.checkRequiredArguments(_args19, 2, "digest"); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - preparedData = BufferSourceConverter.toArrayBuffer(data); - provider = this.getProvider(preparedAlgorithm.name); - _context19.next = 6; - return regeneratorRuntime.awrap(provider.digest(preparedAlgorithm, preparedData)); - - case 6: - result = _context19.sent; - return _context19.abrupt("return", result); - - case 8: - case "end": - return _context19.stop(); - } - } - }, null, this); - } - }, { - key: "generateKey", - value: function generateKey(algorithm, extractable, keyUsages) { - var preparedAlgorithm, - provider, - result, - _args20 = arguments; - return regeneratorRuntime.async(function generateKey$(_context20) { - while (1) { - switch (_context20.prev = _context20.next) { - case 0: - this.checkRequiredArguments(_args20, 3, "generateKey"); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - provider = this.getProvider(preparedAlgorithm.name); - _context20.next = 5; - return regeneratorRuntime.awrap(provider.generateKey(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), extractable, keyUsages)); - - case 5: - result = _context20.sent; - return _context20.abrupt("return", result); - - case 7: - case "end": - return _context20.stop(); - } - } - }, null, this); - } - }, { - key: "sign", - value: function sign(algorithm, key, data) { - var preparedAlgorithm, - preparedData, - provider, - result, - _args21 = arguments; - return regeneratorRuntime.async(function sign$(_context21) { - while (1) { - switch (_context21.prev = _context21.next) { - case 0: - this.checkRequiredArguments(_args21, 3, "sign"); - this.checkCryptoKey(key); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - preparedData = BufferSourceConverter.toArrayBuffer(data); - provider = this.getProvider(preparedAlgorithm.name); - _context21.next = 7; - return regeneratorRuntime.awrap(provider.sign(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), key, preparedData)); - - case 7: - result = _context21.sent; - return _context21.abrupt("return", result); - - case 9: - case "end": - return _context21.stop(); - } - } - }, null, this); - } - }, { - key: "verify", - value: function verify(algorithm, key, signature, data) { - var preparedAlgorithm, - preparedData, - preparedSignature, - provider, - result, - _args22 = arguments; - return regeneratorRuntime.async(function verify$(_context22) { - while (1) { - switch (_context22.prev = _context22.next) { - case 0: - this.checkRequiredArguments(_args22, 4, "verify"); - this.checkCryptoKey(key); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - preparedData = BufferSourceConverter.toArrayBuffer(data); - preparedSignature = BufferSourceConverter.toArrayBuffer(signature); - provider = this.getProvider(preparedAlgorithm.name); - _context22.next = 8; - return regeneratorRuntime.awrap(provider.verify(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), key, preparedSignature, preparedData)); - - case 8: - result = _context22.sent; - return _context22.abrupt("return", result); - - case 10: - case "end": - return _context22.stop(); - } - } - }, null, this); - } - }, { - key: "encrypt", - value: function encrypt(algorithm, key, data) { - var preparedAlgorithm, - preparedData, - provider, - result, - _args23 = arguments; - return regeneratorRuntime.async(function encrypt$(_context23) { - while (1) { - switch (_context23.prev = _context23.next) { - case 0: - this.checkRequiredArguments(_args23, 3, "encrypt"); - this.checkCryptoKey(key); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - preparedData = BufferSourceConverter.toArrayBuffer(data); - provider = this.getProvider(preparedAlgorithm.name); - _context23.next = 7; - return regeneratorRuntime.awrap(provider.encrypt(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), key, preparedData, { - keyUsage: true - })); - - case 7: - result = _context23.sent; - return _context23.abrupt("return", result); - - case 9: - case "end": - return _context23.stop(); - } - } - }, null, this); - } - }, { - key: "decrypt", - value: function decrypt(algorithm, key, data) { - var preparedAlgorithm, - preparedData, - provider, - result, - _args24 = arguments; - return regeneratorRuntime.async(function decrypt$(_context24) { - while (1) { - switch (_context24.prev = _context24.next) { - case 0: - this.checkRequiredArguments(_args24, 3, "decrypt"); - this.checkCryptoKey(key); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - preparedData = BufferSourceConverter.toArrayBuffer(data); - provider = this.getProvider(preparedAlgorithm.name); - _context24.next = 7; - return regeneratorRuntime.awrap(provider.decrypt(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), key, preparedData, { - keyUsage: true - })); - - case 7: - result = _context24.sent; - return _context24.abrupt("return", result); - - case 9: - case "end": - return _context24.stop(); - } - } - }, null, this); - } - }, { - key: "deriveBits", - value: function deriveBits(algorithm, baseKey, length) { - var preparedAlgorithm, - provider, - result, - _args25 = arguments; - return regeneratorRuntime.async(function deriveBits$(_context25) { - while (1) { - switch (_context25.prev = _context25.next) { - case 0: - this.checkRequiredArguments(_args25, 3, "deriveBits"); - this.checkCryptoKey(baseKey); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - provider = this.getProvider(preparedAlgorithm.name); - _context25.next = 6; - return regeneratorRuntime.awrap(provider.deriveBits(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), baseKey, length, { - keyUsage: true - })); - - case 6: - result = _context25.sent; - return _context25.abrupt("return", result); - - case 8: - case "end": - return _context25.stop(); - } - } - }, null, this); - } - }, { - key: "deriveKey", - value: function deriveKey(algorithm, baseKey, derivedKeyType, extractable, keyUsages) { - var preparedDerivedKeyType, - importProvider, - preparedAlgorithm, - provider, - derivedBits, - _args26 = arguments; - return regeneratorRuntime.async(function deriveKey$(_context26) { - while (1) { - switch (_context26.prev = _context26.next) { - case 0: - this.checkRequiredArguments(_args26, 5, "deriveKey"); - preparedDerivedKeyType = this.prepareAlgorithm(derivedKeyType); - importProvider = this.getProvider(preparedDerivedKeyType.name); - importProvider.checkDerivedKeyParams(preparedDerivedKeyType); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - provider = this.getProvider(preparedAlgorithm.name); - provider.checkCryptoKey(baseKey, "deriveKey"); - _context26.next = 9; - return regeneratorRuntime.awrap(provider.deriveBits(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), baseKey, derivedKeyType.length, { - keyUsage: false - })); - - case 9: - derivedBits = _context26.sent; - return _context26.abrupt("return", this.importKey("raw", derivedBits, derivedKeyType, extractable, keyUsages)); - - case 11: - case "end": - return _context26.stop(); - } - } - }, null, this); - } - }, { - key: "exportKey", - value: function exportKey(format, key) { - var provider, - result, - _args27 = arguments; - return regeneratorRuntime.async(function exportKey$(_context27) { - while (1) { - switch (_context27.prev = _context27.next) { - case 0: - this.checkRequiredArguments(_args27, 2, "exportKey"); - this.checkCryptoKey(key); - provider = this.getProvider(key.algorithm.name); - _context27.next = 5; - return regeneratorRuntime.awrap(provider.exportKey(format, key)); - - case 5: - result = _context27.sent; - return _context27.abrupt("return", result); - - case 7: - case "end": - return _context27.stop(); - } - } - }, null, this); - } - }, { - key: "importKey", - value: function importKey(format, keyData, algorithm, extractable, keyUsages) { - var preparedAlgorithm, - provider, - preparedData, - _args28 = arguments; - return regeneratorRuntime.async(function importKey$(_context28) { - while (1) { - switch (_context28.prev = _context28.next) { - case 0: - this.checkRequiredArguments(_args28, 5, "importKey"); - preparedAlgorithm = this.prepareAlgorithm(algorithm); - provider = this.getProvider(preparedAlgorithm.name); - - if (!(["pkcs8", "spki", "raw"].indexOf(format) !== -1)) { - _context28.next = 8; - break; - } - - preparedData = BufferSourceConverter.toArrayBuffer(keyData); - return _context28.abrupt("return", provider.importKey(format, preparedData, _objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), extractable, keyUsages)); - - case 8: - if (keyData.kty) { - _context28.next = 10; - break; - } - - throw new TypeError("keyData: Is not JSON"); - - case 10: - return _context28.abrupt("return", provider.importKey(format, keyData, _objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), extractable, keyUsages)); - - case 11: - case "end": - return _context28.stop(); - } - } - }, null, this); - } - }, { - key: "wrapKey", - value: function wrapKey(format, key, wrappingKey, wrapAlgorithm) { - var keyData, json, preparedAlgorithm, preparedData, provider; - return regeneratorRuntime.async(function wrapKey$(_context29) { - while (1) { - switch (_context29.prev = _context29.next) { - case 0: - _context29.next = 2; - return regeneratorRuntime.awrap(this.exportKey(format, key)); - - case 2: - keyData = _context29.sent; - - if (format === "jwk") { - json = JSON.stringify(keyData); - keyData = Convert.FromUtf8String(json); - } - - preparedAlgorithm = this.prepareAlgorithm(wrapAlgorithm); - preparedData = BufferSourceConverter.toArrayBuffer(keyData); - provider = this.getProvider(preparedAlgorithm.name); - return _context29.abrupt("return", provider.encrypt(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), wrappingKey, preparedData, { - keyUsage: false - })); - - case 8: - case "end": - return _context29.stop(); - } - } - }, null, this); - } - }, { - key: "unwrapKey", - value: function unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgorithm, unwrappedKeyAlgorithm, extractable, keyUsages) { - var preparedAlgorithm, preparedData, provider, keyData, error; - return regeneratorRuntime.async(function unwrapKey$(_context30) { - while (1) { - switch (_context30.prev = _context30.next) { - case 0: - preparedAlgorithm = this.prepareAlgorithm(unwrapAlgorithm); - preparedData = BufferSourceConverter.toArrayBuffer(wrappedKey); - provider = this.getProvider(preparedAlgorithm.name); - _context30.next = 5; - return regeneratorRuntime.awrap(provider.decrypt(_objectSpread2({}, preparedAlgorithm, { - name: provider.name - }), unwrappingKey, preparedData, { - keyUsage: false - })); - - case 5: - keyData = _context30.sent; - - if (!(format === "jwk")) { - _context30.next = 16; - break; - } - - _context30.prev = 7; - keyData = JSON.parse(Convert.ToUtf8String(keyData)); - _context30.next = 16; - break; - - case 11: - _context30.prev = 11; - _context30.t0 = _context30["catch"](7); - error = new TypeError("wrappedKey: Is not a JSON"); - error.internal = _context30.t0; - throw error; - - case 16: - return _context30.abrupt("return", this.importKey(format, keyData, unwrappedKeyAlgorithm, extractable, keyUsages)); - - case 17: - case "end": - return _context30.stop(); - } - } - }, null, this, [[7, 11]]); - } - }, { - key: "checkRequiredArguments", - value: function checkRequiredArguments(args, size, methodName) { - if (args.length !== size) { - throw new TypeError("Failed to execute '".concat(methodName, "' on 'SubtleCrypto': ").concat(size, " arguments required, but only ").concat(args.length, " present")); - } - } - }, { - key: "prepareAlgorithm", - value: function prepareAlgorithm(algorithm) { - if (typeof algorithm === "string") { - return { - name: algorithm - }; - } - - if (SubtleCrypto.isHashedAlgorithm(algorithm)) { - var preparedAlgorithm = _objectSpread2({}, algorithm); - - preparedAlgorithm.hash = this.prepareAlgorithm(algorithm.hash); - return preparedAlgorithm; - } - - return _objectSpread2({}, algorithm); - } - }, { - key: "getProvider", - value: function getProvider(name) { - var provider = this.providers.get(name); - - if (!provider) { - throw new AlgorithmError("Unrecognized name"); - } - - return provider; - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key) { - if (!(key instanceof CryptoKey)) { - throw new TypeError("Key is not of type 'CryptoKey'"); - } - } - }], [{ - key: "isHashedAlgorithm", - value: function isHashedAlgorithm(data) { - return data instanceof Object && "name" in data && "hash" in data; - } - }]); - - return SubtleCrypto; - }(); - - function __decorate(decorators, target, key, desc) { - var c = arguments.length, - r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, - d; - if ((typeof Reflect === "undefined" ? "undefined" : _typeof(Reflect)) === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);else for (var i = decorators.length - 1; i >= 0; i--) { - if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - } - return c > 3 && r && Object.defineProperty(target, key, r), r; - } - - function __awaiter(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - - function step(result) { - result.done ? resolve(result.value) : new P(function (resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); - } - - function unwrapExports(x) { - return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; - } - - function createCommonjsModule(fn, module) { - return module = { - exports: {} - }, fn(module, module.exports), module.exports; - } - - function getUTCDate(date) { - return new Date(date.getTime() + date.getTimezoneOffset() * 60000); - } - - function getParametersValue(parameters, name, defaultValue) { - if (parameters instanceof Object === false) return defaultValue; - if (name in parameters) return parameters[name]; - return defaultValue; - } - - function bufferToHexCodes(inputBuffer) { - var inputOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - var inputLength = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : inputBuffer.byteLength - inputOffset; - var insertSpace = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var result = ""; - var _iteratorNormalCompletion4 = true; - var _didIteratorError4 = false; - var _iteratorError4 = undefined; - - try { - for (var _iterator4 = new Uint8Array(inputBuffer, inputOffset, inputLength)[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) { - var item = _step4.value; - var str = item.toString(16).toUpperCase(); - if (str.length === 1) result += "0"; - result += str; - if (insertSpace) result += " "; - } - } catch (err) { - _didIteratorError4 = true; - _iteratorError4 = err; - } finally { - try { - if (!_iteratorNormalCompletion4 && _iterator4.return != null) { - _iterator4.return(); - } - } finally { - if (_didIteratorError4) { - throw _iteratorError4; - } - } - } - - return result.trim(); - } - - function checkBufferParams(baseBlock, inputBuffer, inputOffset, inputLength) { - if (inputBuffer instanceof ArrayBuffer === false) { - baseBlock.error = "Wrong parameter: inputBuffer must be \"ArrayBuffer\""; - return false; - } - - if (inputBuffer.byteLength === 0) { - baseBlock.error = "Wrong parameter: inputBuffer has zero length"; - return false; - } - - if (inputOffset < 0) { - baseBlock.error = "Wrong parameter: inputOffset less than zero"; - return false; - } - - if (inputLength < 0) { - baseBlock.error = "Wrong parameter: inputLength less than zero"; - return false; - } - - if (inputBuffer.byteLength - inputOffset - inputLength < 0) { - baseBlock.error = "End of input reached before message was fully decoded (inconsistent offset and length values)"; - return false; - } - - return true; - } - - function utilFromBase(inputBuffer, inputBase) { - var result = 0; - if (inputBuffer.length === 1) return inputBuffer[0]; - - for (var i = inputBuffer.length - 1; i >= 0; i--) { - result += inputBuffer[inputBuffer.length - 1 - i] * Math.pow(2, inputBase * i); - } - - return result; - } - - function utilToBase(value, base) { - var reserved = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : -1; - var internalReserved = reserved; - var internalValue = value; - var result = 0; - var biggest = Math.pow(2, base); - - for (var i = 1; i < 8; i++) { - if (value < biggest) { - var retBuf = void 0; - - if (internalReserved < 0) { - retBuf = new ArrayBuffer(i); - result = i; - } else { - if (internalReserved < i) return new ArrayBuffer(0); - retBuf = new ArrayBuffer(internalReserved); - result = internalReserved; - } - - var retView = new Uint8Array(retBuf); - - for (var j = i - 1; j >= 0; j--) { - var basis = Math.pow(2, j * base); - retView[result - j - 1] = Math.floor(internalValue / basis); - internalValue -= retView[result - j - 1] * basis; - } - - return retBuf; - } - - biggest *= Math.pow(2, base); - } - - return new ArrayBuffer(0); - } - - function utilConcatBuf() { - var outputLength = 0; - var prevLength = 0; - - for (var _len = arguments.length, buffers = new Array(_len), _key = 0; _key < _len; _key++) { - buffers[_key] = arguments[_key]; - } - - for (var _i = 0, _buffers = buffers; _i < _buffers.length; _i++) { - var buffer = _buffers[_i]; - outputLength += buffer.byteLength; - } - - var retBuf = new ArrayBuffer(outputLength); - var retView = new Uint8Array(retBuf); - - for (var _i2 = 0, _buffers2 = buffers; _i2 < _buffers2.length; _i2++) { - var _buffer2 = _buffers2[_i2]; - retView.set(new Uint8Array(_buffer2), prevLength); - prevLength += _buffer2.byteLength; - } - - return retBuf; - } - - function utilConcatView() { - var outputLength = 0; - var prevLength = 0; - - for (var _len2 = arguments.length, views = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - views[_key2] = arguments[_key2]; - } - - for (var _i3 = 0, _views = views; _i3 < _views.length; _i3++) { - var view = _views[_i3]; - outputLength += view.length; - } - - var retBuf = new ArrayBuffer(outputLength); - var retView = new Uint8Array(retBuf); - - for (var _i4 = 0, _views2 = views; _i4 < _views2.length; _i4++) { - var _view = _views2[_i4]; - retView.set(_view, prevLength); - prevLength += _view.length; - } - - return retView; - } - - function utilDecodeTC() { - var buf = new Uint8Array(this.valueHex); - - if (this.valueHex.byteLength >= 2) { - var condition1 = buf[0] === 0xFF && buf[1] & 0x80; - var condition2 = buf[0] === 0x00 && (buf[1] & 0x80) === 0x00; - if (condition1 || condition2) this.warnings.push("Needlessly long format"); - } - - var bigIntBuffer = new ArrayBuffer(this.valueHex.byteLength); - var bigIntView = new Uint8Array(bigIntBuffer); - - for (var i = 0; i < this.valueHex.byteLength; i++) { - bigIntView[i] = 0; - } - - bigIntView[0] = buf[0] & 0x80; - var bigInt = utilFromBase(bigIntView, 8); - var smallIntBuffer = new ArrayBuffer(this.valueHex.byteLength); - var smallIntView = new Uint8Array(smallIntBuffer); - - for (var j = 0; j < this.valueHex.byteLength; j++) { - smallIntView[j] = buf[j]; - } - - smallIntView[0] &= 0x7F; - var smallInt = utilFromBase(smallIntView, 8); - return smallInt - bigInt; - } - - function utilEncodeTC(value) { - var modValue = value < 0 ? value * -1 : value; - var bigInt = 128; - - for (var i = 1; i < 8; i++) { - if (modValue <= bigInt) { - if (value < 0) { - var smallInt = bigInt - modValue; - - var _retBuf = utilToBase(smallInt, 8, i); - - var _retView = new Uint8Array(_retBuf); - - _retView[0] |= 0x80; - return _retBuf; - } - - var retBuf = utilToBase(modValue, 8, i); - var retView = new Uint8Array(retBuf); - - if (retView[0] & 0x80) { - var tempBuf = retBuf.slice(0); - var tempView = new Uint8Array(tempBuf); - retBuf = new ArrayBuffer(retBuf.byteLength + 1); - retView = new Uint8Array(retBuf); - - for (var k = 0; k < tempBuf.byteLength; k++) { - retView[k + 1] = tempView[k]; - } - - retView[0] = 0x00; - } - - return retBuf; - } - - bigInt *= Math.pow(2, 8); - } - - return new ArrayBuffer(0); - } - - function isEqualBuffer(inputBuffer1, inputBuffer2) { - if (inputBuffer1.byteLength !== inputBuffer2.byteLength) return false; - var view1 = new Uint8Array(inputBuffer1); - var view2 = new Uint8Array(inputBuffer2); - - for (var i = 0; i < view1.length; i++) { - if (view1[i] !== view2[i]) return false; - } - - return true; - } - - function padNumber(inputNumber, fullLength) { - var str = inputNumber.toString(10); - if (fullLength < str.length) return ""; - var dif = fullLength - str.length; - var padding = new Array(dif); - - for (var i = 0; i < dif; i++) { - padding[i] = "0"; - } - - var paddingString = padding.join(""); - return paddingString.concat(str); - } - - var base64Template = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; - var base64UrlTemplate = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_="; - - function toBase64(input) { - var useUrlTemplate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var skipPadding = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var skipLeadingZeros = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - var i = 0; - var flag1 = 0; - var flag2 = 0; - var output = ""; - var template = useUrlTemplate ? base64UrlTemplate : base64Template; - - if (skipLeadingZeros) { - var nonZeroPosition = 0; - - for (var _i5 = 0; _i5 < input.length; _i5++) { - if (input.charCodeAt(_i5) !== 0) { - nonZeroPosition = _i5; - break; - } - } - - input = input.slice(nonZeroPosition); - } - - while (i < input.length) { - var chr1 = input.charCodeAt(i++); - if (i >= input.length) flag1 = 1; - var chr2 = input.charCodeAt(i++); - if (i >= input.length) flag2 = 1; - var chr3 = input.charCodeAt(i++); - var enc1 = chr1 >> 2; - var enc2 = (chr1 & 0x03) << 4 | chr2 >> 4; - var enc3 = (chr2 & 0x0F) << 2 | chr3 >> 6; - var enc4 = chr3 & 0x3F; - - if (flag1 === 1) { - enc3 = enc4 = 64; - } else { - if (flag2 === 1) { - enc4 = 64; - } - } - - if (skipPadding) { - if (enc3 === 64) output += "".concat(template.charAt(enc1)).concat(template.charAt(enc2));else { - if (enc4 === 64) output += "".concat(template.charAt(enc1)).concat(template.charAt(enc2)).concat(template.charAt(enc3));else output += "".concat(template.charAt(enc1)).concat(template.charAt(enc2)).concat(template.charAt(enc3)).concat(template.charAt(enc4)); - } - } else output += "".concat(template.charAt(enc1)).concat(template.charAt(enc2)).concat(template.charAt(enc3)).concat(template.charAt(enc4)); - } - - return output; - } - - function fromBase64(input) { - var useUrlTemplate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var cutTailZeros = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var template = useUrlTemplate ? base64UrlTemplate : base64Template; - - function indexof(toSearch) { - for (var _i6 = 0; _i6 < 64; _i6++) { - if (template.charAt(_i6) === toSearch) return _i6; - } - - return 64; - } - - function test(incoming) { - return incoming === 64 ? 0x00 : incoming; - } - - var i = 0; - var output = ""; - - while (i < input.length) { - var enc1 = indexof(input.charAt(i++)); - var enc2 = i >= input.length ? 0x00 : indexof(input.charAt(i++)); - var enc3 = i >= input.length ? 0x00 : indexof(input.charAt(i++)); - var enc4 = i >= input.length ? 0x00 : indexof(input.charAt(i++)); - var chr1 = test(enc1) << 2 | test(enc2) >> 4; - var chr2 = (test(enc2) & 0x0F) << 4 | test(enc3) >> 2; - var chr3 = (test(enc3) & 0x03) << 6 | test(enc4); - output += String.fromCharCode(chr1); - if (enc3 !== 64) output += String.fromCharCode(chr2); - if (enc4 !== 64) output += String.fromCharCode(chr3); - } - - if (cutTailZeros) { - var outputLength = output.length; - var nonZeroStart = -1; - - for (var _i7 = outputLength - 1; _i7 >= 0; _i7--) { - if (output.charCodeAt(_i7) !== 0) { - nonZeroStart = _i7; - break; - } - } - - if (nonZeroStart !== -1) output = output.slice(0, nonZeroStart + 1);else output = ""; - } - - return output; - } - - function arrayBufferToString(buffer) { - var resultString = ""; - var view = new Uint8Array(buffer); - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; - - try { - for (var _iterator5 = view[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var element = _step5.value; - resultString += String.fromCharCode(element); - } - } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; - } finally { - try { - if (!_iteratorNormalCompletion5 && _iterator5.return != null) { - _iterator5.return(); - } - } finally { - if (_didIteratorError5) { - throw _iteratorError5; - } - } - } - - return resultString; - } - - function stringToArrayBuffer(str) { - var stringLength = str.length; - var resultBuffer = new ArrayBuffer(stringLength); - var resultView = new Uint8Array(resultBuffer); - - for (var i = 0; i < stringLength; i++) { - resultView[i] = str.charCodeAt(i); - } - - return resultBuffer; - } - - var log2 = Math.log(2); - - function nearestPowerOf2(length) { - var base = Math.log(length) / log2; - var floor = Math.floor(base); - var round = Math.round(base); - return floor === round ? floor : round; - } - - function clearProps(object, propsArray) { - var _iteratorNormalCompletion6 = true; - var _didIteratorError6 = false; - var _iteratorError6 = undefined; - - try { - for (var _iterator6 = propsArray[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var prop = _step6.value; - delete object[prop]; - } - } catch (err) { - _didIteratorError6 = true; - _iteratorError6 = err; - } finally { - try { - if (!_iteratorNormalCompletion6 && _iterator6.return != null) { - _iterator6.return(); - } - } finally { - if (_didIteratorError6) { - throw _iteratorError6; - } - } - } - } - - var utils = Object.freeze({ - __proto__: null, - getUTCDate: getUTCDate, - getParametersValue: getParametersValue, - bufferToHexCodes: bufferToHexCodes, - checkBufferParams: checkBufferParams, - utilFromBase: utilFromBase, - utilToBase: utilToBase, - utilConcatBuf: utilConcatBuf, - utilConcatView: utilConcatView, - utilDecodeTC: utilDecodeTC, - utilEncodeTC: utilEncodeTC, - isEqualBuffer: isEqualBuffer, - padNumber: padNumber, - toBase64: toBase64, - fromBase64: fromBase64, - arrayBufferToString: arrayBufferToString, - stringToArrayBuffer: stringToArrayBuffer, - nearestPowerOf2: nearestPowerOf2, - clearProps: clearProps - }); - var asn1 = createCommonjsModule(function (module, exports) { - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.fromBER = fromBER; - exports.compareSchema = compareSchema; - exports.verifySchema = verifySchema; - exports.fromJSON = fromJSON; - exports.RawData = exports.Repeated = exports.Any = exports.Choice = exports.TIME = exports.Duration = exports.DateTime = exports.TimeOfDay = exports.DATE = exports.GeneralizedTime = exports.UTCTime = exports.CharacterString = exports.GeneralString = exports.VisibleString = exports.GraphicString = exports.IA5String = exports.VideotexString = exports.TeletexString = exports.PrintableString = exports.NumericString = exports.UniversalString = exports.BmpString = exports.RelativeObjectIdentifier = exports.Utf8String = exports.ObjectIdentifier = exports.Enumerated = exports.Integer = exports.BitString = exports.OctetString = exports.Null = exports.Set = exports.Sequence = exports.Boolean = exports.EndOfContent = exports.Constructed = exports.Primitive = exports.BaseBlock = exports.ValueBlock = exports.HexBlock = void 0; - var powers2 = [new Uint8Array([1])]; - var digitsString = "0123456789"; - - var LocalBaseBlock = function () { - function LocalBaseBlock() { - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalBaseBlock); - - this.blockLength = (0, utils.getParametersValue)(parameters, "blockLength", 0); - this.error = (0, utils.getParametersValue)(parameters, "error", ""); - this.warnings = (0, utils.getParametersValue)(parameters, "warnings", []); - if ("valueBeforeDecode" in parameters) this.valueBeforeDecode = parameters.valueBeforeDecode.slice(0);else this.valueBeforeDecode = new ArrayBuffer(0); - } - - _createClass(LocalBaseBlock, [{ - key: "toJSON", - value: function toJSON() { - return { - blockName: this.constructor.blockName(), - blockLength: this.blockLength, - error: this.error, - warnings: this.warnings, - valueBeforeDecode: (0, utils.bufferToHexCodes)(this.valueBeforeDecode, 0, this.valueBeforeDecode.byteLength) - }; - } - }], [{ - key: "blockName", - value: function blockName() { - return "baseBlock"; - } - }]); - - return LocalBaseBlock; - }(); - - var HexBlock = function HexBlock(BaseClass) { - return function (_BaseClass) { - _inherits(LocalHexBlockMixin, _BaseClass); - - function LocalHexBlockMixin() { - var _this15; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalHexBlockMixin); - - _this15 = _possibleConstructorReturn(this, _getPrototypeOf(LocalHexBlockMixin).call(this, parameters)); - _this15.isHexOnly = (0, utils.getParametersValue)(parameters, "isHexOnly", false); - if ("valueHex" in parameters) _this15.valueHex = parameters.valueHex.slice(0);else _this15.valueHex = new ArrayBuffer(0); - return _this15; - } - - _createClass(LocalHexBlockMixin, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - - if (intBuffer.length === 0) { - this.warnings.push("Zero buffer length"); - return inputOffset; - } - - this.valueHex = inputBuffer.slice(inputOffset, inputOffset + inputLength); - this.blockLength = inputLength; - return inputOffset + inputLength; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (this.isHexOnly !== true) { - this.error = "Flag \"isHexOnly\" is not set, abort"; - return new ArrayBuffer(0); - } - - if (sizeOnly === true) return new ArrayBuffer(this.valueHex.byteLength); - return this.valueHex.slice(0); - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalHexBlockMixin.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.blockName = this.constructor.blockName(); - object.isHexOnly = this.isHexOnly; - object.valueHex = (0, utils.bufferToHexCodes)(this.valueHex, 0, this.valueHex.byteLength); - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "hexBlock"; - } - }]); - - return LocalHexBlockMixin; - }(BaseClass); - }; - - exports.HexBlock = HexBlock; - - var LocalIdentificationBlock = function (_HexBlock) { - _inherits(LocalIdentificationBlock, _HexBlock); - - function LocalIdentificationBlock() { - var _this16; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalIdentificationBlock); - - _this16 = _possibleConstructorReturn(this, _getPrototypeOf(LocalIdentificationBlock).call(this)); - - if ("idBlock" in parameters) { - _this16.isHexOnly = (0, utils.getParametersValue)(parameters.idBlock, "isHexOnly", false); - _this16.valueHex = (0, utils.getParametersValue)(parameters.idBlock, "valueHex", new ArrayBuffer(0)); - _this16.tagClass = (0, utils.getParametersValue)(parameters.idBlock, "tagClass", -1); - _this16.tagNumber = (0, utils.getParametersValue)(parameters.idBlock, "tagNumber", -1); - _this16.isConstructed = (0, utils.getParametersValue)(parameters.idBlock, "isConstructed", false); - } else { - _this16.tagClass = -1; - _this16.tagNumber = -1; - _this16.isConstructed = false; - } - - return _this16; - } - - _createClass(LocalIdentificationBlock, [{ - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var firstOctet = 0; - var retBuf; - var retView; - - switch (this.tagClass) { - case 1: - firstOctet |= 0x00; - break; - - case 2: - firstOctet |= 0x40; - break; - - case 3: - firstOctet |= 0x80; - break; - - case 4: - firstOctet |= 0xC0; - break; - - default: - this.error = "Unknown tag class"; - return new ArrayBuffer(0); - } - - if (this.isConstructed) firstOctet |= 0x20; - - if (this.tagNumber < 31 && !this.isHexOnly) { - retBuf = new ArrayBuffer(1); - retView = new Uint8Array(retBuf); - - if (!sizeOnly) { - var number = this.tagNumber; - number &= 0x1F; - firstOctet |= number; - retView[0] = firstOctet; - } - - return retBuf; - } - - if (this.isHexOnly === false) { - var encodedBuf = (0, utils.utilToBase)(this.tagNumber, 7); - var encodedView = new Uint8Array(encodedBuf); - var size = encodedBuf.byteLength; - retBuf = new ArrayBuffer(size + 1); - retView = new Uint8Array(retBuf); - retView[0] = firstOctet | 0x1F; - - if (!sizeOnly) { - for (var i = 0; i < size - 1; i++) { - retView[i + 1] = encodedView[i] | 0x80; - } - - retView[size] = encodedView[size - 1]; - } - - return retBuf; - } - - retBuf = new ArrayBuffer(this.valueHex.byteLength + 1); - retView = new Uint8Array(retBuf); - retView[0] = firstOctet | 0x1F; - - if (sizeOnly === false) { - var curView = new Uint8Array(this.valueHex); - - for (var _i8 = 0; _i8 < curView.length - 1; _i8++) { - retView[_i8 + 1] = curView[_i8] | 0x80; - } - - retView[this.valueHex.byteLength] = curView[curView.length - 1]; - } - - return retBuf; - } - }, { - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - - if (intBuffer.length === 0) { - this.error = "Zero buffer length"; - return -1; - } - - var tagClassMask = intBuffer[0] & 0xC0; - - switch (tagClassMask) { - case 0x00: - this.tagClass = 1; - break; - - case 0x40: - this.tagClass = 2; - break; - - case 0x80: - this.tagClass = 3; - break; - - case 0xC0: - this.tagClass = 4; - break; - - default: - this.error = "Unknown tag class"; - return -1; - } - - this.isConstructed = (intBuffer[0] & 0x20) === 0x20; - this.isHexOnly = false; - var tagNumberMask = intBuffer[0] & 0x1F; - - if (tagNumberMask !== 0x1F) { - this.tagNumber = tagNumberMask; - this.blockLength = 1; - } else { - var count = 1; - this.valueHex = new ArrayBuffer(255); - var tagNumberBufferMaxLength = 255; - var intTagNumberBuffer = new Uint8Array(this.valueHex); - - while (intBuffer[count] & 0x80) { - intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F; - count++; - - if (count >= intBuffer.length) { - this.error = "End of input reached before message was fully decoded"; - return -1; - } - - if (count === tagNumberBufferMaxLength) { - tagNumberBufferMaxLength += 255; - - var _tempBuffer = new ArrayBuffer(tagNumberBufferMaxLength); - - var _tempBufferView = new Uint8Array(_tempBuffer); - - for (var i = 0; i < intTagNumberBuffer.length; i++) { - _tempBufferView[i] = intTagNumberBuffer[i]; - } - - this.valueHex = new ArrayBuffer(tagNumberBufferMaxLength); - intTagNumberBuffer = new Uint8Array(this.valueHex); - } - } - - this.blockLength = count + 1; - intTagNumberBuffer[count - 1] = intBuffer[count] & 0x7F; - var tempBuffer = new ArrayBuffer(count); - var tempBufferView = new Uint8Array(tempBuffer); - - for (var _i9 = 0; _i9 < count; _i9++) { - tempBufferView[_i9] = intTagNumberBuffer[_i9]; - } - - this.valueHex = new ArrayBuffer(count); - intTagNumberBuffer = new Uint8Array(this.valueHex); - intTagNumberBuffer.set(tempBufferView); - if (this.blockLength <= 9) this.tagNumber = (0, utils.utilFromBase)(intTagNumberBuffer, 7);else { - this.isHexOnly = true; - this.warnings.push("Tag too long, represented as hex-coded"); - } - } - - if (this.tagClass === 1 && this.isConstructed) { - switch (this.tagNumber) { - case 1: - case 2: - case 5: - case 6: - case 9: - case 13: - case 14: - case 23: - case 24: - case 31: - case 32: - case 33: - case 34: - this.error = "Constructed encoding used for primitive type"; - return -1; - } - } - - return inputOffset + this.blockLength; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalIdentificationBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.blockName = this.constructor.blockName(); - object.tagClass = this.tagClass; - object.tagNumber = this.tagNumber; - object.isConstructed = this.isConstructed; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "identificationBlock"; - } - }]); - - return LocalIdentificationBlock; - }(HexBlock(LocalBaseBlock)); - - var LocalLengthBlock = function (_LocalBaseBlock) { - _inherits(LocalLengthBlock, _LocalBaseBlock); - - function LocalLengthBlock() { - var _this17; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalLengthBlock); - - _this17 = _possibleConstructorReturn(this, _getPrototypeOf(LocalLengthBlock).call(this)); - - if ("lenBlock" in parameters) { - _this17.isIndefiniteForm = (0, utils.getParametersValue)(parameters.lenBlock, "isIndefiniteForm", false); - _this17.longFormUsed = (0, utils.getParametersValue)(parameters.lenBlock, "longFormUsed", false); - _this17.length = (0, utils.getParametersValue)(parameters.lenBlock, "length", 0); - } else { - _this17.isIndefiniteForm = false; - _this17.longFormUsed = false; - _this17.length = 0; - } - - return _this17; - } - - _createClass(LocalLengthBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - - if (intBuffer.length === 0) { - this.error = "Zero buffer length"; - return -1; - } - - if (intBuffer[0] === 0xFF) { - this.error = "Length block 0xFF is reserved by standard"; - return -1; - } - - this.isIndefiniteForm = intBuffer[0] === 0x80; - - if (this.isIndefiniteForm === true) { - this.blockLength = 1; - return inputOffset + this.blockLength; - } - - this.longFormUsed = !!(intBuffer[0] & 0x80); - - if (this.longFormUsed === false) { - this.length = intBuffer[0]; - this.blockLength = 1; - return inputOffset + this.blockLength; - } - - var count = intBuffer[0] & 0x7F; - - if (count > 8) { - this.error = "Too big integer"; - return -1; - } - - if (count + 1 > intBuffer.length) { - this.error = "End of input reached before message was fully decoded"; - return -1; - } - - var lengthBufferView = new Uint8Array(count); - - for (var i = 0; i < count; i++) { - lengthBufferView[i] = intBuffer[i + 1]; - } - - if (lengthBufferView[count - 1] === 0x00) this.warnings.push("Needlessly long encoded length"); - this.length = (0, utils.utilFromBase)(lengthBufferView, 8); - if (this.longFormUsed && this.length <= 127) this.warnings.push("Unneccesary usage of long length form"); - this.blockLength = count + 1; - return inputOffset + this.blockLength; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var retBuf; - var retView; - if (this.length > 127) this.longFormUsed = true; - - if (this.isIndefiniteForm) { - retBuf = new ArrayBuffer(1); - - if (sizeOnly === false) { - retView = new Uint8Array(retBuf); - retView[0] = 0x80; - } - - return retBuf; - } - - if (this.longFormUsed === true) { - var encodedBuf = (0, utils.utilToBase)(this.length, 8); - - if (encodedBuf.byteLength > 127) { - this.error = "Too big length"; - return new ArrayBuffer(0); - } - - retBuf = new ArrayBuffer(encodedBuf.byteLength + 1); - if (sizeOnly === true) return retBuf; - var encodedView = new Uint8Array(encodedBuf); - retView = new Uint8Array(retBuf); - retView[0] = encodedBuf.byteLength | 0x80; - - for (var i = 0; i < encodedBuf.byteLength; i++) { - retView[i + 1] = encodedView[i]; - } - - return retBuf; - } - - retBuf = new ArrayBuffer(1); - - if (sizeOnly === false) { - retView = new Uint8Array(retBuf); - retView[0] = this.length; - } - - return retBuf; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalLengthBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.blockName = this.constructor.blockName(); - object.isIndefiniteForm = this.isIndefiniteForm; - object.longFormUsed = this.longFormUsed; - object.length = this.length; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "lengthBlock"; - } - }]); - - return LocalLengthBlock; - }(LocalBaseBlock); - - var ValueBlock = function (_LocalBaseBlock2) { - _inherits(ValueBlock, _LocalBaseBlock2); - - function ValueBlock() { - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, ValueBlock); - - return _possibleConstructorReturn(this, _getPrototypeOf(ValueBlock).call(this, parameters)); - } - - _createClass(ValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - throw TypeError("User need to make a specific function in a class which extends \"ValueBlock\""); - } - }, { - key: "toBER", - value: function toBER() { - throw TypeError("User need to make a specific function in a class which extends \"ValueBlock\""); - } - }], [{ - key: "blockName", - value: function blockName() { - return "valueBlock"; - } - }]); - - return ValueBlock; - }(LocalBaseBlock); - - exports.ValueBlock = ValueBlock; - - var BaseBlock = function (_LocalBaseBlock3) { - _inherits(BaseBlock, _LocalBaseBlock3); - - function BaseBlock() { - var _this18; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - var valueBlockType = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ValueBlock; - - _classCallCheck(this, BaseBlock); - - _this18 = _possibleConstructorReturn(this, _getPrototypeOf(BaseBlock).call(this, parameters)); - if ("name" in parameters) _this18.name = parameters.name; - if ("optional" in parameters) _this18.optional = parameters.optional; - if ("primitiveSchema" in parameters) _this18.primitiveSchema = parameters.primitiveSchema; - _this18.idBlock = new LocalIdentificationBlock(parameters); - _this18.lenBlock = new LocalLengthBlock(parameters); - _this18.valueBlock = new valueBlockType(parameters); - return _this18; - } - - _createClass(BaseBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, this.lenBlock.isIndefiniteForm === true ? inputLength : this.lenBlock.length); - - if (resultOffset === -1) { - this.error = this.valueBlock.error; - return resultOffset; - } - - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - if (this.valueBlock.error.length === 0) this.blockLength += this.valueBlock.blockLength; - return resultOffset; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var retBuf; - var idBlockBuf = this.idBlock.toBER(sizeOnly); - var valueBlockSizeBuf = this.valueBlock.toBER(true); - this.lenBlock.length = valueBlockSizeBuf.byteLength; - var lenBlockBuf = this.lenBlock.toBER(sizeOnly); - retBuf = (0, utils.utilConcatBuf)(idBlockBuf, lenBlockBuf); - var valueBlockBuf; - if (sizeOnly === false) valueBlockBuf = this.valueBlock.toBER(sizeOnly);else valueBlockBuf = new ArrayBuffer(this.lenBlock.length); - retBuf = (0, utils.utilConcatBuf)(retBuf, valueBlockBuf); - - if (this.lenBlock.isIndefiniteForm === true) { - var indefBuf = new ArrayBuffer(2); - - if (sizeOnly === false) { - var indefView = new Uint8Array(indefBuf); - indefView[0] = 0x00; - indefView[1] = 0x00; - } - - retBuf = (0, utils.utilConcatBuf)(retBuf, indefBuf); - } - - return retBuf; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(BaseBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.idBlock = this.idBlock.toJSON(); - object.lenBlock = this.lenBlock.toJSON(); - object.valueBlock = this.valueBlock.toJSON(); - if ("name" in this) object.name = this.name; - if ("optional" in this) object.optional = this.optional; - if ("primitiveSchema" in this) object.primitiveSchema = this.primitiveSchema.toJSON(); - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "BaseBlock"; - } - }]); - - return BaseBlock; - }(LocalBaseBlock); - - exports.BaseBlock = BaseBlock; - - var LocalPrimitiveValueBlock = function (_ValueBlock) { - _inherits(LocalPrimitiveValueBlock, _ValueBlock); - - function LocalPrimitiveValueBlock() { - var _this19; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalPrimitiveValueBlock); - - _this19 = _possibleConstructorReturn(this, _getPrototypeOf(LocalPrimitiveValueBlock).call(this, parameters)); - if ("valueHex" in parameters) _this19.valueHex = parameters.valueHex.slice(0);else _this19.valueHex = new ArrayBuffer(0); - _this19.isHexOnly = (0, utils.getParametersValue)(parameters, "isHexOnly", true); - return _this19; - } - - _createClass(LocalPrimitiveValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - - if (intBuffer.length === 0) { - this.warnings.push("Zero buffer length"); - return inputOffset; - } - - this.valueHex = new ArrayBuffer(intBuffer.length); - var valueHexView = new Uint8Array(this.valueHex); - - for (var i = 0; i < intBuffer.length; i++) { - valueHexView[i] = intBuffer[i]; - } - - this.blockLength = inputLength; - return inputOffset + inputLength; - } - }, { - key: "toBER", - value: function toBER() { - return this.valueHex.slice(0); - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalPrimitiveValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.valueHex = (0, utils.bufferToHexCodes)(this.valueHex, 0, this.valueHex.byteLength); - object.isHexOnly = this.isHexOnly; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "PrimitiveValueBlock"; - } - }]); - - return LocalPrimitiveValueBlock; - }(ValueBlock); - - var Primitive = function (_BaseBlock) { - _inherits(Primitive, _BaseBlock); - - function Primitive() { - var _this20; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Primitive); - - _this20 = _possibleConstructorReturn(this, _getPrototypeOf(Primitive).call(this, parameters, LocalPrimitiveValueBlock)); - _this20.idBlock.isConstructed = false; - return _this20; - } - - _createClass(Primitive, null, [{ - key: "blockName", - value: function blockName() { - return "PRIMITIVE"; - } - }]); - - return Primitive; - }(BaseBlock); - - exports.Primitive = Primitive; - - var LocalConstructedValueBlock = function (_ValueBlock2) { - _inherits(LocalConstructedValueBlock, _ValueBlock2); - - function LocalConstructedValueBlock() { - var _this21; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalConstructedValueBlock); - - _this21 = _possibleConstructorReturn(this, _getPrototypeOf(LocalConstructedValueBlock).call(this, parameters)); - _this21.value = (0, utils.getParametersValue)(parameters, "value", []); - _this21.isIndefiniteForm = (0, utils.getParametersValue)(parameters, "isIndefiniteForm", false); - return _this21; - } - - _createClass(LocalConstructedValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var initialOffset = inputOffset; - var initialLength = inputLength; - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - - if (intBuffer.length === 0) { - this.warnings.push("Zero buffer length"); - return inputOffset; - } - - function checkLen(indefiniteLength, length) { - if (indefiniteLength === true) return 1; - return length; - } - - var currentOffset = inputOffset; - - while (checkLen(this.isIndefiniteForm, inputLength) > 0) { - var returnObject = LocalFromBER(inputBuffer, currentOffset, inputLength); - - if (returnObject.offset === -1) { - this.error = returnObject.result.error; - this.warnings.concat(returnObject.result.warnings); - return -1; - } - - currentOffset = returnObject.offset; - this.blockLength += returnObject.result.blockLength; - inputLength -= returnObject.result.blockLength; - this.value.push(returnObject.result); - if (this.isIndefiniteForm === true && returnObject.result.constructor.blockName() === EndOfContent.blockName()) break; - } - - if (this.isIndefiniteForm === true) { - if (this.value[this.value.length - 1].constructor.blockName() === EndOfContent.blockName()) this.value.pop();else this.warnings.push("No EndOfContent block encoded"); - } - - this.valueBeforeDecode = inputBuffer.slice(initialOffset, initialOffset + initialLength); - return currentOffset; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var retBuf = new ArrayBuffer(0); - - for (var i = 0; i < this.value.length; i++) { - var valueBuf = this.value[i].toBER(sizeOnly); - retBuf = (0, utils.utilConcatBuf)(retBuf, valueBuf); - } - - return retBuf; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalConstructedValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.isIndefiniteForm = this.isIndefiniteForm; - object.value = []; - - for (var i = 0; i < this.value.length; i++) { - object.value.push(this.value[i].toJSON()); - } - - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "ConstructedValueBlock"; - } - }]); - - return LocalConstructedValueBlock; - }(ValueBlock); - - var Constructed = function (_BaseBlock2) { - _inherits(Constructed, _BaseBlock2); - - function Constructed() { - var _this22; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Constructed); - - _this22 = _possibleConstructorReturn(this, _getPrototypeOf(Constructed).call(this, parameters, LocalConstructedValueBlock)); - _this22.idBlock.isConstructed = true; - return _this22; - } - - _createClass(Constructed, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm; - var resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, this.lenBlock.isIndefiniteForm === true ? inputLength : this.lenBlock.length); - - if (resultOffset === -1) { - this.error = this.valueBlock.error; - return resultOffset; - } - - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - if (this.valueBlock.error.length === 0) this.blockLength += this.valueBlock.blockLength; - return resultOffset; - } - }], [{ - key: "blockName", - value: function blockName() { - return "CONSTRUCTED"; - } - }]); - - return Constructed; - }(BaseBlock); - - exports.Constructed = Constructed; - - var LocalEndOfContentValueBlock = function (_ValueBlock3) { - _inherits(LocalEndOfContentValueBlock, _ValueBlock3); - - function LocalEndOfContentValueBlock() { - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalEndOfContentValueBlock); - - return _possibleConstructorReturn(this, _getPrototypeOf(LocalEndOfContentValueBlock).call(this, parameters)); - } - - _createClass(LocalEndOfContentValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - return inputOffset; - } - }, { - key: "toBER", - value: function toBER() { - return new ArrayBuffer(0); - } - }], [{ - key: "blockName", - value: function blockName() { - return "EndOfContentValueBlock"; - } - }]); - - return LocalEndOfContentValueBlock; - }(ValueBlock); - - var EndOfContent = function (_BaseBlock3) { - _inherits(EndOfContent, _BaseBlock3); - - function EndOfContent() { - var _this23; - - var paramaters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, EndOfContent); - - _this23 = _possibleConstructorReturn(this, _getPrototypeOf(EndOfContent).call(this, paramaters, LocalEndOfContentValueBlock)); - _this23.idBlock.tagClass = 1; - _this23.idBlock.tagNumber = 0; - return _this23; - } - - _createClass(EndOfContent, null, [{ - key: "blockName", - value: function blockName() { - return "EndOfContent"; - } - }]); - - return EndOfContent; - }(BaseBlock); - - exports.EndOfContent = EndOfContent; - - var LocalBooleanValueBlock = function (_ValueBlock4) { - _inherits(LocalBooleanValueBlock, _ValueBlock4); - - function LocalBooleanValueBlock() { - var _this24; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalBooleanValueBlock); - - _this24 = _possibleConstructorReturn(this, _getPrototypeOf(LocalBooleanValueBlock).call(this, parameters)); - _this24.value = (0, utils.getParametersValue)(parameters, "value", false); - _this24.isHexOnly = (0, utils.getParametersValue)(parameters, "isHexOnly", false); - if ("valueHex" in parameters) _this24.valueHex = parameters.valueHex.slice(0);else { - _this24.valueHex = new ArrayBuffer(1); - - if (_this24.value === true) { - var view = new Uint8Array(_this24.valueHex); - view[0] = 0xFF; - } - } - return _this24; - } - - _createClass(LocalBooleanValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - if (inputLength > 1) this.warnings.push("Boolean value encoded in more then 1 octet"); - this.isHexOnly = true; - this.valueHex = new ArrayBuffer(intBuffer.length); - var view = new Uint8Array(this.valueHex); - - for (var i = 0; i < intBuffer.length; i++) { - view[i] = intBuffer[i]; - } - - if (utils.utilDecodeTC.call(this) !== 0) this.value = true;else this.value = false; - this.blockLength = inputLength; - return inputOffset + inputLength; - } - }, { - key: "toBER", - value: function toBER() { - return this.valueHex; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalBooleanValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.value = this.value; - object.isHexOnly = this.isHexOnly; - object.valueHex = (0, utils.bufferToHexCodes)(this.valueHex, 0, this.valueHex.byteLength); - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "BooleanValueBlock"; - } - }]); - - return LocalBooleanValueBlock; - }(ValueBlock); - - var Boolean = function (_BaseBlock4) { - _inherits(Boolean, _BaseBlock4); - - function Boolean() { - var _this25; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Boolean); - - _this25 = _possibleConstructorReturn(this, _getPrototypeOf(Boolean).call(this, parameters, LocalBooleanValueBlock)); - _this25.idBlock.tagClass = 1; - _this25.idBlock.tagNumber = 1; - return _this25; - } - - _createClass(Boolean, null, [{ - key: "blockName", - value: function blockName() { - return "Boolean"; - } - }]); - - return Boolean; - }(BaseBlock); - - exports.Boolean = Boolean; - - var Sequence = function (_Constructed) { - _inherits(Sequence, _Constructed); - - function Sequence() { - var _this26; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Sequence); - - _this26 = _possibleConstructorReturn(this, _getPrototypeOf(Sequence).call(this, parameters)); - _this26.idBlock.tagClass = 1; - _this26.idBlock.tagNumber = 16; - return _this26; - } - - _createClass(Sequence, null, [{ - key: "blockName", - value: function blockName() { - return "Sequence"; - } - }]); - - return Sequence; - }(Constructed); - - exports.Sequence = Sequence; - - var Set = function (_Constructed2) { - _inherits(Set, _Constructed2); - - function Set() { - var _this27; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Set); - - _this27 = _possibleConstructorReturn(this, _getPrototypeOf(Set).call(this, parameters)); - _this27.idBlock.tagClass = 1; - _this27.idBlock.tagNumber = 17; - return _this27; - } - - _createClass(Set, null, [{ - key: "blockName", - value: function blockName() { - return "Set"; - } - }]); - - return Set; - }(Constructed); - - exports.Set = Set; - - var Null = function (_BaseBlock5) { - _inherits(Null, _BaseBlock5); - - function Null() { - var _this28; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Null); - - _this28 = _possibleConstructorReturn(this, _getPrototypeOf(Null).call(this, parameters, LocalBaseBlock)); - _this28.idBlock.tagClass = 1; - _this28.idBlock.tagNumber = 5; - return _this28; - } - - _createClass(Null, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if (this.lenBlock.length > 0) this.warnings.push("Non-zero length of value block for Null type"); - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - this.blockLength += inputLength; - - if (inputOffset + inputLength > inputBuffer.byteLength) { - this.error = "End of input reached before message was fully decoded (inconsistent offset and length values)"; - return -1; - } - - return inputOffset + inputLength; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var retBuf = new ArrayBuffer(2); - if (sizeOnly === true) return retBuf; - var retView = new Uint8Array(retBuf); - retView[0] = 0x05; - retView[1] = 0x00; - return retBuf; - } - }], [{ - key: "blockName", - value: function blockName() { - return "Null"; - } - }]); - - return Null; - }(BaseBlock); - - exports.Null = Null; - - var LocalOctetStringValueBlock = function (_HexBlock2) { - _inherits(LocalOctetStringValueBlock, _HexBlock2); - - function LocalOctetStringValueBlock() { - var _this29; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalOctetStringValueBlock); - - _this29 = _possibleConstructorReturn(this, _getPrototypeOf(LocalOctetStringValueBlock).call(this, parameters)); - _this29.isConstructed = (0, utils.getParametersValue)(parameters, "isConstructed", false); - return _this29; - } - - _createClass(LocalOctetStringValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = 0; - - if (this.isConstructed === true) { - this.isHexOnly = false; - resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength); - if (resultOffset === -1) return resultOffset; - - for (var i = 0; i < this.value.length; i++) { - var currentBlockName = this.value[i].constructor.blockName(); - - if (currentBlockName === EndOfContent.blockName()) { - if (this.isIndefiniteForm === true) break;else { - this.error = "EndOfContent is unexpected, OCTET STRING may consists of OCTET STRINGs only"; - return -1; - } - } - - if (currentBlockName !== OctetString.blockName()) { - this.error = "OCTET STRING may consists of OCTET STRINGs only"; - return -1; - } - } - } else { - this.isHexOnly = true; - resultOffset = _get(_getPrototypeOf(LocalOctetStringValueBlock.prototype), "fromBER", this).call(this, inputBuffer, inputOffset, inputLength); - this.blockLength = inputLength; - } - - return resultOffset; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - if (this.isConstructed === true) return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly); - var retBuf = new ArrayBuffer(this.valueHex.byteLength); - if (sizeOnly === true) return retBuf; - if (this.valueHex.byteLength === 0) return retBuf; - retBuf = this.valueHex.slice(0); - return retBuf; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalOctetStringValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.isConstructed = this.isConstructed; - object.isHexOnly = this.isHexOnly; - object.valueHex = (0, utils.bufferToHexCodes)(this.valueHex, 0, this.valueHex.byteLength); - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "OctetStringValueBlock"; - } - }]); - - return LocalOctetStringValueBlock; - }(HexBlock(LocalConstructedValueBlock)); - - var OctetString = function (_BaseBlock6) { - _inherits(OctetString, _BaseBlock6); - - function OctetString() { - var _this30; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, OctetString); - - _this30 = _possibleConstructorReturn(this, _getPrototypeOf(OctetString).call(this, parameters, LocalOctetStringValueBlock)); - _this30.idBlock.tagClass = 1; - _this30.idBlock.tagNumber = 4; - return _this30; - } - - _createClass(OctetString, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - this.valueBlock.isConstructed = this.idBlock.isConstructed; - this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm; - - if (inputLength === 0) { - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - return inputOffset; - } - - return _get(_getPrototypeOf(OctetString.prototype), "fromBER", this).call(this, inputBuffer, inputOffset, inputLength); - } - }, { - key: "isEqual", - value: function isEqual(octetString) { - if (octetString instanceof OctetString === false) return false; - if (JSON.stringify(this) !== JSON.stringify(octetString)) return false; - return true; - } - }], [{ - key: "blockName", - value: function blockName() { - return "OctetString"; - } - }]); - - return OctetString; - }(BaseBlock); - - exports.OctetString = OctetString; - - var LocalBitStringValueBlock = function (_HexBlock3) { - _inherits(LocalBitStringValueBlock, _HexBlock3); - - function LocalBitStringValueBlock() { - var _this31; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalBitStringValueBlock); - - _this31 = _possibleConstructorReturn(this, _getPrototypeOf(LocalBitStringValueBlock).call(this, parameters)); - _this31.unusedBits = (0, utils.getParametersValue)(parameters, "unusedBits", 0); - _this31.isConstructed = (0, utils.getParametersValue)(parameters, "isConstructed", false); - _this31.blockLength = _this31.valueHex.byteLength; - return _this31; - } - - _createClass(LocalBitStringValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if (inputLength === 0) return inputOffset; - var resultOffset = -1; - - if (this.isConstructed === true) { - resultOffset = LocalConstructedValueBlock.prototype.fromBER.call(this, inputBuffer, inputOffset, inputLength); - if (resultOffset === -1) return resultOffset; - - for (var i = 0; i < this.value.length; i++) { - var currentBlockName = this.value[i].constructor.blockName(); - - if (currentBlockName === EndOfContent.blockName()) { - if (this.isIndefiniteForm === true) break;else { - this.error = "EndOfContent is unexpected, BIT STRING may consists of BIT STRINGs only"; - return -1; - } - } - - if (currentBlockName !== BitString.blockName()) { - this.error = "BIT STRING may consists of BIT STRINGs only"; - return -1; - } - - if (this.unusedBits > 0 && this.value[i].valueBlock.unusedBits > 0) { - this.error = "Usign of \"unused bits\" inside constructive BIT STRING allowed for least one only"; - return -1; - } - - this.unusedBits = this.value[i].valueBlock.unusedBits; - - if (this.unusedBits > 7) { - this.error = "Unused bits for BitString must be in range 0-7"; - return -1; - } - } - - return resultOffset; - } - - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - this.unusedBits = intBuffer[0]; - - if (this.unusedBits > 7) { - this.error = "Unused bits for BitString must be in range 0-7"; - return -1; - } - - this.valueHex = new ArrayBuffer(intBuffer.length - 1); - var view = new Uint8Array(this.valueHex); - - for (var _i10 = 0; _i10 < inputLength - 1; _i10++) { - view[_i10] = intBuffer[_i10 + 1]; - } - - this.blockLength = intBuffer.length; - return inputOffset + inputLength; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - if (this.isConstructed === true) return LocalConstructedValueBlock.prototype.toBER.call(this, sizeOnly); - if (sizeOnly === true) return new ArrayBuffer(this.valueHex.byteLength + 1); - if (this.valueHex.byteLength === 0) return new ArrayBuffer(0); - var curView = new Uint8Array(this.valueHex); - var retBuf = new ArrayBuffer(this.valueHex.byteLength + 1); - var retView = new Uint8Array(retBuf); - retView[0] = this.unusedBits; - - for (var i = 0; i < this.valueHex.byteLength; i++) { - retView[i + 1] = curView[i]; - } - - return retBuf; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalBitStringValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.unusedBits = this.unusedBits; - object.isConstructed = this.isConstructed; - object.isHexOnly = this.isHexOnly; - object.valueHex = (0, utils.bufferToHexCodes)(this.valueHex, 0, this.valueHex.byteLength); - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "BitStringValueBlock"; - } - }]); - - return LocalBitStringValueBlock; - }(HexBlock(LocalConstructedValueBlock)); - - var BitString = function (_BaseBlock7) { - _inherits(BitString, _BaseBlock7); - - function BitString() { - var _this32; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, BitString); - - _this32 = _possibleConstructorReturn(this, _getPrototypeOf(BitString).call(this, parameters, LocalBitStringValueBlock)); - _this32.idBlock.tagClass = 1; - _this32.idBlock.tagNumber = 3; - return _this32; - } - - _createClass(BitString, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if (inputLength === 0) return inputOffset; - this.valueBlock.isConstructed = this.idBlock.isConstructed; - this.valueBlock.isIndefiniteForm = this.lenBlock.isIndefiniteForm; - return _get(_getPrototypeOf(BitString.prototype), "fromBER", this).call(this, inputBuffer, inputOffset, inputLength); - } - }, { - key: "isEqual", - value: function isEqual(bitString) { - if (bitString instanceof BitString === false) return false; - if (JSON.stringify(this) !== JSON.stringify(bitString)) return false; - return true; - } - }], [{ - key: "blockName", - value: function blockName() { - return "BitString"; - } - }]); - - return BitString; - }(BaseBlock); - - exports.BitString = BitString; - - var LocalIntegerValueBlock = function (_HexBlock4) { - _inherits(LocalIntegerValueBlock, _HexBlock4); - - function LocalIntegerValueBlock() { - var _this33; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalIntegerValueBlock); - - _this33 = _possibleConstructorReturn(this, _getPrototypeOf(LocalIntegerValueBlock).call(this, parameters)); - if ("value" in parameters) _this33.valueDec = parameters.value; - return _this33; - } - - _createClass(LocalIntegerValueBlock, [{ - key: "fromDER", - value: function fromDER(inputBuffer, inputOffset, inputLength) { - var expectedLength = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0; - var offset = this.fromBER(inputBuffer, inputOffset, inputLength); - if (offset === -1) return offset; - var view = new Uint8Array(this._valueHex); - - if (view[0] === 0x00 && (view[1] & 0x80) !== 0) { - var updatedValueHex = new ArrayBuffer(this._valueHex.byteLength - 1); - var updatedView = new Uint8Array(updatedValueHex); - updatedView.set(new Uint8Array(this._valueHex, 1, this._valueHex.byteLength - 1)); - this._valueHex = updatedValueHex.slice(0); - } else { - if (expectedLength !== 0) { - if (this._valueHex.byteLength < expectedLength) { - if (expectedLength - this._valueHex.byteLength > 1) expectedLength = this._valueHex.byteLength + 1; - - var _updatedValueHex = new ArrayBuffer(expectedLength); - - var _updatedView = new Uint8Array(_updatedValueHex); - - _updatedView.set(view, expectedLength - this._valueHex.byteLength); - - this._valueHex = _updatedValueHex.slice(0); - } - } - } - - return offset; - } - }, { - key: "toDER", - value: function toDER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var view = new Uint8Array(this._valueHex); - - switch (true) { - case (view[0] & 0x80) !== 0: - { - var updatedValueHex = new ArrayBuffer(this._valueHex.byteLength + 1); - var updatedView = new Uint8Array(updatedValueHex); - updatedView[0] = 0x00; - updatedView.set(view, 1); - this._valueHex = updatedValueHex.slice(0); - } - break; - - case view[0] === 0x00 && (view[1] & 0x80) === 0: - { - var _updatedValueHex2 = new ArrayBuffer(this._valueHex.byteLength - 1); - - var _updatedView2 = new Uint8Array(_updatedValueHex2); - - _updatedView2.set(new Uint8Array(this._valueHex, 1, this._valueHex.byteLength - 1)); - - this._valueHex = _updatedValueHex2.slice(0); - } - break; - } - - return this.toBER(sizeOnly); - } - }, { - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = _get(_getPrototypeOf(LocalIntegerValueBlock.prototype), "fromBER", this).call(this, inputBuffer, inputOffset, inputLength); - - if (resultOffset === -1) return resultOffset; - this.blockLength = inputLength; - return inputOffset + inputLength; - } - }, { - key: "toBER", - value: function toBER() { - return this.valueHex.slice(0); - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalIntegerValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.valueDec = this.valueDec; - return object; - } - }, { - key: "toString", - value: function toString() { - function viewAdd(first, second) { - var c = new Uint8Array([0]); - var firstView = new Uint8Array(first); - var secondView = new Uint8Array(second); - var firstViewCopy = firstView.slice(0); - var firstViewCopyLength = firstViewCopy.length - 1; - var secondViewCopy = secondView.slice(0); - var secondViewCopyLength = secondViewCopy.length - 1; - var value = 0; - var max = secondViewCopyLength < firstViewCopyLength ? firstViewCopyLength : secondViewCopyLength; - var counter = 0; - - for (var i = max; i >= 0; i--, counter++) { - switch (true) { - case counter < secondViewCopy.length: - value = firstViewCopy[firstViewCopyLength - counter] + secondViewCopy[secondViewCopyLength - counter] + c[0]; - break; - - default: - value = firstViewCopy[firstViewCopyLength - counter] + c[0]; - } - - c[0] = value / 10; - - switch (true) { - case counter >= firstViewCopy.length: - firstViewCopy = (0, utils.utilConcatView)(new Uint8Array([value % 10]), firstViewCopy); - break; - - default: - firstViewCopy[firstViewCopyLength - counter] = value % 10; - } - } - - if (c[0] > 0) firstViewCopy = (0, utils.utilConcatView)(c, firstViewCopy); - return firstViewCopy.slice(0); - } - - function power2(n) { - if (n >= powers2.length) { - for (var p = powers2.length; p <= n; p++) { - var c = new Uint8Array([0]); - - var _digits = powers2[p - 1].slice(0); - - for (var i = _digits.length - 1; i >= 0; i--) { - var newValue = new Uint8Array([(_digits[i] << 1) + c[0]]); - c[0] = newValue[0] / 10; - _digits[i] = newValue[0] % 10; - } - - if (c[0] > 0) _digits = (0, utils.utilConcatView)(c, _digits); - powers2.push(_digits); - } - } - - return powers2[n]; - } - - function viewSub(first, second) { - var b = 0; - var firstView = new Uint8Array(first); - var secondView = new Uint8Array(second); - var firstViewCopy = firstView.slice(0); - var firstViewCopyLength = firstViewCopy.length - 1; - var secondViewCopy = secondView.slice(0); - var secondViewCopyLength = secondViewCopy.length - 1; - var value; - var counter = 0; - - for (var i = secondViewCopyLength; i >= 0; i--, counter++) { - value = firstViewCopy[firstViewCopyLength - counter] - secondViewCopy[secondViewCopyLength - counter] - b; - - switch (true) { - case value < 0: - b = 1; - firstViewCopy[firstViewCopyLength - counter] = value + 10; - break; - - default: - b = 0; - firstViewCopy[firstViewCopyLength - counter] = value; - } - } - - if (b > 0) { - for (var _i11 = firstViewCopyLength - secondViewCopyLength + 1; _i11 >= 0; _i11--, counter++) { - value = firstViewCopy[firstViewCopyLength - counter] - b; - - if (value < 0) { - b = 1; - firstViewCopy[firstViewCopyLength - counter] = value + 10; - } else { - b = 0; - firstViewCopy[firstViewCopyLength - counter] = value; - break; - } - } - } - - return firstViewCopy.slice(); - } - - var firstBit = this._valueHex.byteLength * 8 - 1; - var digits = new Uint8Array(this._valueHex.byteLength * 8 / 3); - var bitNumber = 0; - var currentByte; - var asn1View = new Uint8Array(this._valueHex); - var result = ""; - var flag = false; - - for (var byteNumber = this._valueHex.byteLength - 1; byteNumber >= 0; byteNumber--) { - currentByte = asn1View[byteNumber]; - - for (var i = 0; i < 8; i++) { - if ((currentByte & 1) === 1) { - switch (bitNumber) { - case firstBit: - digits = viewSub(power2(bitNumber), digits); - result = "-"; - break; - - default: - digits = viewAdd(digits, power2(bitNumber)); - } - } - - bitNumber++; - currentByte >>= 1; - } - } - - for (var _i12 = 0; _i12 < digits.length; _i12++) { - if (digits[_i12]) flag = true; - if (flag) result += digitsString.charAt(digits[_i12]); - } - - if (flag === false) result += digitsString.charAt(0); - return result; - } - }, { - key: "valueHex", - set: function set(_value) { - this._valueHex = _value.slice(0); - - if (_value.byteLength >= 4) { - this.warnings.push("Too big Integer for decoding, hex only"); - this.isHexOnly = true; - this._valueDec = 0; - } else { - this.isHexOnly = false; - if (_value.byteLength > 0) this._valueDec = utils.utilDecodeTC.call(this); - } - }, - get: function get() { - return this._valueHex; - } - }, { - key: "valueDec", - set: function set(_value) { - this._valueDec = _value; - this.isHexOnly = false; - this._valueHex = (0, utils.utilEncodeTC)(_value); - }, - get: function get() { - return this._valueDec; - } - }], [{ - key: "blockName", - value: function blockName() { - return "IntegerValueBlock"; - } - }]); - - return LocalIntegerValueBlock; - }(HexBlock(ValueBlock)); - - var Integer = function (_BaseBlock8) { - _inherits(Integer, _BaseBlock8); - - function Integer() { - var _this34; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Integer); - - _this34 = _possibleConstructorReturn(this, _getPrototypeOf(Integer).call(this, parameters, LocalIntegerValueBlock)); - _this34.idBlock.tagClass = 1; - _this34.idBlock.tagNumber = 2; - return _this34; - } - - _createClass(Integer, [{ - key: "isEqual", - value: function isEqual(otherValue) { - if (otherValue instanceof Integer) { - if (this.valueBlock.isHexOnly && otherValue.valueBlock.isHexOnly) return (0, utils.isEqualBuffer)(this.valueBlock.valueHex, otherValue.valueBlock.valueHex); - if (this.valueBlock.isHexOnly === otherValue.valueBlock.isHexOnly) return this.valueBlock.valueDec === otherValue.valueBlock.valueDec; - return false; - } - - if (otherValue instanceof ArrayBuffer) return (0, utils.isEqualBuffer)(this.valueBlock.valueHex, otherValue); - return false; - } - }, { - key: "convertToDER", - value: function convertToDER() { - var integer = new Integer({ - valueHex: this.valueBlock.valueHex - }); - integer.valueBlock.toDER(); - return integer; - } - }, { - key: "convertFromDER", - value: function convertFromDER() { - var expectedLength = this.valueBlock.valueHex.byteLength % 2 ? this.valueBlock.valueHex.byteLength + 1 : this.valueBlock.valueHex.byteLength; - var integer = new Integer({ - valueHex: this.valueBlock.valueHex - }); - integer.valueBlock.fromDER(integer.valueBlock.valueHex, 0, integer.valueBlock.valueHex.byteLength, expectedLength); - return integer; - } - }], [{ - key: "blockName", - value: function blockName() { - return "Integer"; - } - }]); - - return Integer; - }(BaseBlock); - - exports.Integer = Integer; - - var Enumerated = function (_Integer) { - _inherits(Enumerated, _Integer); - - function Enumerated() { - var _this35; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Enumerated); - - _this35 = _possibleConstructorReturn(this, _getPrototypeOf(Enumerated).call(this, parameters)); - _this35.idBlock.tagClass = 1; - _this35.idBlock.tagNumber = 10; - return _this35; - } - - _createClass(Enumerated, null, [{ - key: "blockName", - value: function blockName() { - return "Enumerated"; - } - }]); - - return Enumerated; - }(Integer); - - exports.Enumerated = Enumerated; - - var LocalSidValueBlock = function (_HexBlock5) { - _inherits(LocalSidValueBlock, _HexBlock5); - - function LocalSidValueBlock() { - var _this36; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalSidValueBlock); - - _this36 = _possibleConstructorReturn(this, _getPrototypeOf(LocalSidValueBlock).call(this, parameters)); - _this36.valueDec = (0, utils.getParametersValue)(parameters, "valueDec", -1); - _this36.isFirstSid = (0, utils.getParametersValue)(parameters, "isFirstSid", false); - return _this36; - } - - _createClass(LocalSidValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if (inputLength === 0) return inputOffset; - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - this.valueHex = new ArrayBuffer(inputLength); - var view = new Uint8Array(this.valueHex); - - for (var i = 0; i < inputLength; i++) { - view[i] = intBuffer[i] & 0x7F; - this.blockLength++; - if ((intBuffer[i] & 0x80) === 0x00) break; - } - - var tempValueHex = new ArrayBuffer(this.blockLength); - var tempView = new Uint8Array(tempValueHex); - - for (var _i13 = 0; _i13 < this.blockLength; _i13++) { - tempView[_i13] = view[_i13]; - } - - this.valueHex = tempValueHex.slice(0); - view = new Uint8Array(this.valueHex); - - if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) { - this.error = "End of input reached before message was fully decoded"; - return -1; - } - - if (view[0] === 0x00) this.warnings.push("Needlessly long format of SID encoding"); - if (this.blockLength <= 8) this.valueDec = (0, utils.utilFromBase)(view, 7);else { - this.isHexOnly = true; - this.warnings.push("Too big SID for decoding, hex only"); - } - return inputOffset + this.blockLength; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var retBuf; - var retView; - - if (this.isHexOnly) { - if (sizeOnly === true) return new ArrayBuffer(this.valueHex.byteLength); - var curView = new Uint8Array(this.valueHex); - retBuf = new ArrayBuffer(this.blockLength); - retView = new Uint8Array(retBuf); - - for (var i = 0; i < this.blockLength - 1; i++) { - retView[i] = curView[i] | 0x80; - } - - retView[this.blockLength - 1] = curView[this.blockLength - 1]; - return retBuf; - } - - var encodedBuf = (0, utils.utilToBase)(this.valueDec, 7); - - if (encodedBuf.byteLength === 0) { - this.error = "Error during encoding SID value"; - return new ArrayBuffer(0); - } - - retBuf = new ArrayBuffer(encodedBuf.byteLength); - - if (sizeOnly === false) { - var encodedView = new Uint8Array(encodedBuf); - retView = new Uint8Array(retBuf); - - for (var _i14 = 0; _i14 < encodedBuf.byteLength - 1; _i14++) { - retView[_i14] = encodedView[_i14] | 0x80; - } - - retView[encodedBuf.byteLength - 1] = encodedView[encodedBuf.byteLength - 1]; - } - - return retBuf; - } - }, { - key: "toString", - value: function toString() { - var result = ""; - if (this.isHexOnly === true) result = (0, utils.bufferToHexCodes)(this.valueHex, 0, this.valueHex.byteLength);else { - if (this.isFirstSid) { - var sidValue = this.valueDec; - if (this.valueDec <= 39) result = "0.";else { - if (this.valueDec <= 79) { - result = "1."; - sidValue -= 40; - } else { - result = "2."; - sidValue -= 80; - } - } - result += sidValue.toString(); - } else result = this.valueDec.toString(); - } - return result; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalSidValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.valueDec = this.valueDec; - object.isFirstSid = this.isFirstSid; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "sidBlock"; - } - }]); - - return LocalSidValueBlock; - }(HexBlock(LocalBaseBlock)); - - var LocalObjectIdentifierValueBlock = function (_ValueBlock5) { - _inherits(LocalObjectIdentifierValueBlock, _ValueBlock5); - - function LocalObjectIdentifierValueBlock() { - var _this37; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalObjectIdentifierValueBlock); - - _this37 = _possibleConstructorReturn(this, _getPrototypeOf(LocalObjectIdentifierValueBlock).call(this, parameters)); - - _this37.fromString((0, utils.getParametersValue)(parameters, "value", "")); - - return _this37; - } - - _createClass(LocalObjectIdentifierValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = inputOffset; - - while (inputLength > 0) { - var sidBlock = new LocalSidValueBlock(); - resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength); - - if (resultOffset === -1) { - this.blockLength = 0; - this.error = sidBlock.error; - return resultOffset; - } - - if (this.value.length === 0) sidBlock.isFirstSid = true; - this.blockLength += sidBlock.blockLength; - inputLength -= sidBlock.blockLength; - this.value.push(sidBlock); - } - - return resultOffset; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var retBuf = new ArrayBuffer(0); - - for (var i = 0; i < this.value.length; i++) { - var valueBuf = this.value[i].toBER(sizeOnly); - - if (valueBuf.byteLength === 0) { - this.error = this.value[i].error; - return new ArrayBuffer(0); - } - - retBuf = (0, utils.utilConcatBuf)(retBuf, valueBuf); - } - - return retBuf; - } - }, { - key: "fromString", - value: function fromString(string) { - this.value = []; - var pos1 = 0; - var pos2 = 0; - var sid = ""; - var flag = false; - - do { - pos2 = string.indexOf(".", pos1); - if (pos2 === -1) sid = string.substr(pos1);else sid = string.substr(pos1, pos2 - pos1); - pos1 = pos2 + 1; - - if (flag) { - var sidBlock = this.value[0]; - var plus = 0; - - switch (sidBlock.valueDec) { - case 0: - break; - - case 1: - plus = 40; - break; - - case 2: - plus = 80; - break; - - default: - this.value = []; - return false; - } - - var parsedSID = parseInt(sid, 10); - if (isNaN(parsedSID)) return true; - sidBlock.valueDec = parsedSID + plus; - flag = false; - } else { - var _sidBlock = new LocalSidValueBlock(); - - _sidBlock.valueDec = parseInt(sid, 10); - if (isNaN(_sidBlock.valueDec)) return true; - - if (this.value.length === 0) { - _sidBlock.isFirstSid = true; - flag = true; - } - - this.value.push(_sidBlock); - } - } while (pos2 !== -1); - - return true; - } - }, { - key: "toString", - value: function toString() { - var result = ""; - var isHexOnly = false; - - for (var i = 0; i < this.value.length; i++) { - isHexOnly = this.value[i].isHexOnly; - var sidStr = this.value[i].toString(); - if (i !== 0) result = "".concat(result, "."); - - if (isHexOnly) { - sidStr = "{".concat(sidStr, "}"); - if (this.value[i].isFirstSid) result = "2.{".concat(sidStr, " - 80}");else result += sidStr; - } else result += sidStr; - } - - return result; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalObjectIdentifierValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.value = this.toString(); - object.sidArray = []; - - for (var i = 0; i < this.value.length; i++) { - object.sidArray.push(this.value[i].toJSON()); - } - - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "ObjectIdentifierValueBlock"; - } - }]); - - return LocalObjectIdentifierValueBlock; - }(ValueBlock); - - var ObjectIdentifier = function (_BaseBlock9) { - _inherits(ObjectIdentifier, _BaseBlock9); - - function ObjectIdentifier() { - var _this38; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, ObjectIdentifier); - - _this38 = _possibleConstructorReturn(this, _getPrototypeOf(ObjectIdentifier).call(this, parameters, LocalObjectIdentifierValueBlock)); - _this38.idBlock.tagClass = 1; - _this38.idBlock.tagNumber = 6; - return _this38; - } - - _createClass(ObjectIdentifier, null, [{ - key: "blockName", - value: function blockName() { - return "ObjectIdentifier"; - } - }]); - - return ObjectIdentifier; - }(BaseBlock); - - exports.ObjectIdentifier = ObjectIdentifier; - - var LocalUtf8StringValueBlock = function (_HexBlock6) { - _inherits(LocalUtf8StringValueBlock, _HexBlock6); - - function LocalUtf8StringValueBlock() { - var _this39; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalUtf8StringValueBlock); - - _this39 = _possibleConstructorReturn(this, _getPrototypeOf(LocalUtf8StringValueBlock).call(this, parameters)); - _this39.isHexOnly = true; - _this39.value = ""; - return _this39; - } - - _createClass(LocalUtf8StringValueBlock, [{ - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalUtf8StringValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.value = this.value; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "Utf8StringValueBlock"; - } - }]); - - return LocalUtf8StringValueBlock; - }(HexBlock(LocalBaseBlock)); - - var Utf8String = function (_BaseBlock10) { - _inherits(Utf8String, _BaseBlock10); - - function Utf8String() { - var _this40; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Utf8String); - - _this40 = _possibleConstructorReturn(this, _getPrototypeOf(Utf8String).call(this, parameters, LocalUtf8StringValueBlock)); - if ("value" in parameters) _this40.fromString(parameters.value); - _this40.idBlock.tagClass = 1; - _this40.idBlock.tagNumber = 12; - return _this40; - } - - _createClass(Utf8String, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, this.lenBlock.isIndefiniteForm === true ? inputLength : this.lenBlock.length); - - if (resultOffset === -1) { - this.error = this.valueBlock.error; - return resultOffset; - } - - this.fromBuffer(this.valueBlock.valueHex); - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - if (this.valueBlock.error.length === 0) this.blockLength += this.valueBlock.blockLength; - return resultOffset; - } - }, { - key: "fromBuffer", - value: function fromBuffer(inputBuffer) { - this.valueBlock.value = String.fromCharCode.apply(null, new Uint8Array(inputBuffer)); - - try { - this.valueBlock.value = decodeURIComponent(escape(this.valueBlock.value)); - } catch (ex) { - this.warnings.push("Error during \"decodeURIComponent\": ".concat(ex, ", using raw string")); - } - } - }, { - key: "fromString", - value: function fromString(inputString) { - var str = unescape(encodeURIComponent(inputString)); - var strLen = str.length; - this.valueBlock.valueHex = new ArrayBuffer(strLen); - var view = new Uint8Array(this.valueBlock.valueHex); - - for (var i = 0; i < strLen; i++) { - view[i] = str.charCodeAt(i); - } - - this.valueBlock.value = inputString; - } - }], [{ - key: "blockName", - value: function blockName() { - return "Utf8String"; - } - }]); - - return Utf8String; - }(BaseBlock); - - exports.Utf8String = Utf8String; - - var LocalRelativeSidValueBlock = function (_HexBlock7) { - _inherits(LocalRelativeSidValueBlock, _HexBlock7); - - function LocalRelativeSidValueBlock() { - var _this41; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalRelativeSidValueBlock); - - _this41 = _possibleConstructorReturn(this, _getPrototypeOf(LocalRelativeSidValueBlock).call(this, parameters)); - _this41.valueDec = (0, utils.getParametersValue)(parameters, "valueDec", -1); - return _this41; - } - - _createClass(LocalRelativeSidValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - if (inputLength === 0) return inputOffset; - if ((0, utils.checkBufferParams)(this, inputBuffer, inputOffset, inputLength) === false) return -1; - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - this.valueHex = new ArrayBuffer(inputLength); - var view = new Uint8Array(this.valueHex); - - for (var i = 0; i < inputLength; i++) { - view[i] = intBuffer[i] & 0x7F; - this.blockLength++; - if ((intBuffer[i] & 0x80) === 0x00) break; - } - - var tempValueHex = new ArrayBuffer(this.blockLength); - var tempView = new Uint8Array(tempValueHex); - - for (var _i15 = 0; _i15 < this.blockLength; _i15++) { - tempView[_i15] = view[_i15]; - } - - this.valueHex = tempValueHex.slice(0); - view = new Uint8Array(this.valueHex); - - if ((intBuffer[this.blockLength - 1] & 0x80) !== 0x00) { - this.error = "End of input reached before message was fully decoded"; - return -1; - } - - if (view[0] === 0x00) this.warnings.push("Needlessly long format of SID encoding"); - if (this.blockLength <= 8) this.valueDec = (0, utils.utilFromBase)(view, 7);else { - this.isHexOnly = true; - this.warnings.push("Too big SID for decoding, hex only"); - } - return inputOffset + this.blockLength; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var retBuf; - var retView; - - if (this.isHexOnly) { - if (sizeOnly === true) return new ArrayBuffer(this.valueHex.byteLength); - var curView = new Uint8Array(this.valueHex); - retBuf = new ArrayBuffer(this.blockLength); - retView = new Uint8Array(retBuf); - - for (var i = 0; i < this.blockLength - 1; i++) { - retView[i] = curView[i] | 0x80; - } - - retView[this.blockLength - 1] = curView[this.blockLength - 1]; - return retBuf; - } - - var encodedBuf = (0, utils.utilToBase)(this.valueDec, 7); - - if (encodedBuf.byteLength === 0) { - this.error = "Error during encoding SID value"; - return new ArrayBuffer(0); - } - - retBuf = new ArrayBuffer(encodedBuf.byteLength); - - if (sizeOnly === false) { - var encodedView = new Uint8Array(encodedBuf); - retView = new Uint8Array(retBuf); - - for (var _i16 = 0; _i16 < encodedBuf.byteLength - 1; _i16++) { - retView[_i16] = encodedView[_i16] | 0x80; - } - - retView[encodedBuf.byteLength - 1] = encodedView[encodedBuf.byteLength - 1]; - } - - return retBuf; - } - }, { - key: "toString", - value: function toString() { - var result = ""; - if (this.isHexOnly === true) result = (0, utils.bufferToHexCodes)(this.valueHex, 0, this.valueHex.byteLength);else { - result = this.valueDec.toString(); - } - return result; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalRelativeSidValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.valueDec = this.valueDec; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "relativeSidBlock"; - } - }]); - - return LocalRelativeSidValueBlock; - }(HexBlock(LocalBaseBlock)); - - var LocalRelativeObjectIdentifierValueBlock = function (_ValueBlock6) { - _inherits(LocalRelativeObjectIdentifierValueBlock, _ValueBlock6); - - function LocalRelativeObjectIdentifierValueBlock() { - var _this42; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalRelativeObjectIdentifierValueBlock); - - _this42 = _possibleConstructorReturn(this, _getPrototypeOf(LocalRelativeObjectIdentifierValueBlock).call(this, parameters)); - - _this42.fromString((0, utils.getParametersValue)(parameters, "value", "")); - - return _this42; - } - - _createClass(LocalRelativeObjectIdentifierValueBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = inputOffset; - - while (inputLength > 0) { - var sidBlock = new LocalRelativeSidValueBlock(); - resultOffset = sidBlock.fromBER(inputBuffer, resultOffset, inputLength); - - if (resultOffset === -1) { - this.blockLength = 0; - this.error = sidBlock.error; - return resultOffset; - } - - this.blockLength += sidBlock.blockLength; - inputLength -= sidBlock.blockLength; - this.value.push(sidBlock); - } - - return resultOffset; - } - }, { - key: "toBER", - value: function toBER() { - var sizeOnly = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var retBuf = new ArrayBuffer(0); - - for (var i = 0; i < this.value.length; i++) { - var valueBuf = this.value[i].toBER(sizeOnly); - - if (valueBuf.byteLength === 0) { - this.error = this.value[i].error; - return new ArrayBuffer(0); - } - - retBuf = (0, utils.utilConcatBuf)(retBuf, valueBuf); - } - - return retBuf; - } - }, { - key: "fromString", - value: function fromString(string) { - this.value = []; - var pos1 = 0; - var pos2 = 0; - var sid = ""; - - do { - pos2 = string.indexOf(".", pos1); - if (pos2 === -1) sid = string.substr(pos1);else sid = string.substr(pos1, pos2 - pos1); - pos1 = pos2 + 1; - var sidBlock = new LocalRelativeSidValueBlock(); - sidBlock.valueDec = parseInt(sid, 10); - if (isNaN(sidBlock.valueDec)) return true; - this.value.push(sidBlock); - } while (pos2 !== -1); - - return true; - } - }, { - key: "toString", - value: function toString() { - var result = ""; - var isHexOnly = false; - - for (var i = 0; i < this.value.length; i++) { - isHexOnly = this.value[i].isHexOnly; - var sidStr = this.value[i].toString(); - if (i !== 0) result = "".concat(result, "."); - - if (isHexOnly) { - sidStr = "{".concat(sidStr, "}"); - result += sidStr; - } else result += sidStr; - } - - return result; - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalRelativeObjectIdentifierValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.value = this.toString(); - object.sidArray = []; - - for (var i = 0; i < this.value.length; i++) { - object.sidArray.push(this.value[i].toJSON()); - } - - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "RelativeObjectIdentifierValueBlock"; - } - }]); - - return LocalRelativeObjectIdentifierValueBlock; - }(ValueBlock); - - var RelativeObjectIdentifier = function (_BaseBlock11) { - _inherits(RelativeObjectIdentifier, _BaseBlock11); - - function RelativeObjectIdentifier() { - var _this43; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, RelativeObjectIdentifier); - - _this43 = _possibleConstructorReturn(this, _getPrototypeOf(RelativeObjectIdentifier).call(this, parameters, LocalRelativeObjectIdentifierValueBlock)); - _this43.idBlock.tagClass = 1; - _this43.idBlock.tagNumber = 13; - return _this43; - } - - _createClass(RelativeObjectIdentifier, null, [{ - key: "blockName", - value: function blockName() { - return "RelativeObjectIdentifier"; - } - }]); - - return RelativeObjectIdentifier; - }(BaseBlock); - - exports.RelativeObjectIdentifier = RelativeObjectIdentifier; - - var LocalBmpStringValueBlock = function (_HexBlock8) { - _inherits(LocalBmpStringValueBlock, _HexBlock8); - - function LocalBmpStringValueBlock() { - var _this44; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalBmpStringValueBlock); - - _this44 = _possibleConstructorReturn(this, _getPrototypeOf(LocalBmpStringValueBlock).call(this, parameters)); - _this44.isHexOnly = true; - _this44.value = ""; - return _this44; - } - - _createClass(LocalBmpStringValueBlock, [{ - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalBmpStringValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.value = this.value; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "BmpStringValueBlock"; - } - }]); - - return LocalBmpStringValueBlock; - }(HexBlock(LocalBaseBlock)); - - var BmpString = function (_BaseBlock12) { - _inherits(BmpString, _BaseBlock12); - - function BmpString() { - var _this45; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, BmpString); - - _this45 = _possibleConstructorReturn(this, _getPrototypeOf(BmpString).call(this, parameters, LocalBmpStringValueBlock)); - if ("value" in parameters) _this45.fromString(parameters.value); - _this45.idBlock.tagClass = 1; - _this45.idBlock.tagNumber = 30; - return _this45; - } - - _createClass(BmpString, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, this.lenBlock.isIndefiniteForm === true ? inputLength : this.lenBlock.length); - - if (resultOffset === -1) { - this.error = this.valueBlock.error; - return resultOffset; - } - - this.fromBuffer(this.valueBlock.valueHex); - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - if (this.valueBlock.error.length === 0) this.blockLength += this.valueBlock.blockLength; - return resultOffset; - } - }, { - key: "fromBuffer", - value: function fromBuffer(inputBuffer) { - var copyBuffer = inputBuffer.slice(0); - var valueView = new Uint8Array(copyBuffer); - - for (var i = 0; i < valueView.length; i += 2) { - var temp = valueView[i]; - valueView[i] = valueView[i + 1]; - valueView[i + 1] = temp; - } - - this.valueBlock.value = String.fromCharCode.apply(null, new Uint16Array(copyBuffer)); - } - }, { - key: "fromString", - value: function fromString(inputString) { - var strLength = inputString.length; - this.valueBlock.valueHex = new ArrayBuffer(strLength * 2); - var valueHexView = new Uint8Array(this.valueBlock.valueHex); - - for (var i = 0; i < strLength; i++) { - var codeBuf = (0, utils.utilToBase)(inputString.charCodeAt(i), 8); - var codeView = new Uint8Array(codeBuf); - if (codeView.length > 2) continue; - var dif = 2 - codeView.length; - - for (var j = codeView.length - 1; j >= 0; j--) { - valueHexView[i * 2 + j + dif] = codeView[j]; - } - } - - this.valueBlock.value = inputString; - } - }], [{ - key: "blockName", - value: function blockName() { - return "BmpString"; - } - }]); - - return BmpString; - }(BaseBlock); - - exports.BmpString = BmpString; - - var LocalUniversalStringValueBlock = function (_HexBlock9) { - _inherits(LocalUniversalStringValueBlock, _HexBlock9); - - function LocalUniversalStringValueBlock() { - var _this46; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalUniversalStringValueBlock); - - _this46 = _possibleConstructorReturn(this, _getPrototypeOf(LocalUniversalStringValueBlock).call(this, parameters)); - _this46.isHexOnly = true; - _this46.value = ""; - return _this46; - } - - _createClass(LocalUniversalStringValueBlock, [{ - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalUniversalStringValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.value = this.value; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "UniversalStringValueBlock"; - } - }]); - - return LocalUniversalStringValueBlock; - }(HexBlock(LocalBaseBlock)); - - var UniversalString = function (_BaseBlock13) { - _inherits(UniversalString, _BaseBlock13); - - function UniversalString() { - var _this47; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, UniversalString); - - _this47 = _possibleConstructorReturn(this, _getPrototypeOf(UniversalString).call(this, parameters, LocalUniversalStringValueBlock)); - if ("value" in parameters) _this47.fromString(parameters.value); - _this47.idBlock.tagClass = 1; - _this47.idBlock.tagNumber = 28; - return _this47; - } - - _createClass(UniversalString, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, this.lenBlock.isIndefiniteForm === true ? inputLength : this.lenBlock.length); - - if (resultOffset === -1) { - this.error = this.valueBlock.error; - return resultOffset; - } - - this.fromBuffer(this.valueBlock.valueHex); - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - if (this.valueBlock.error.length === 0) this.blockLength += this.valueBlock.blockLength; - return resultOffset; - } - }, { - key: "fromBuffer", - value: function fromBuffer(inputBuffer) { - var copyBuffer = inputBuffer.slice(0); - var valueView = new Uint8Array(copyBuffer); - - for (var i = 0; i < valueView.length; i += 4) { - valueView[i] = valueView[i + 3]; - valueView[i + 1] = valueView[i + 2]; - valueView[i + 2] = 0x00; - valueView[i + 3] = 0x00; - } - - this.valueBlock.value = String.fromCharCode.apply(null, new Uint32Array(copyBuffer)); - } - }, { - key: "fromString", - value: function fromString(inputString) { - var strLength = inputString.length; - this.valueBlock.valueHex = new ArrayBuffer(strLength * 4); - var valueHexView = new Uint8Array(this.valueBlock.valueHex); - - for (var i = 0; i < strLength; i++) { - var codeBuf = (0, utils.utilToBase)(inputString.charCodeAt(i), 8); - var codeView = new Uint8Array(codeBuf); - if (codeView.length > 4) continue; - var dif = 4 - codeView.length; - - for (var j = codeView.length - 1; j >= 0; j--) { - valueHexView[i * 4 + j + dif] = codeView[j]; - } - } - - this.valueBlock.value = inputString; - } - }], [{ - key: "blockName", - value: function blockName() { - return "UniversalString"; - } - }]); - - return UniversalString; - }(BaseBlock); - - exports.UniversalString = UniversalString; - - var LocalSimpleStringValueBlock = function (_HexBlock10) { - _inherits(LocalSimpleStringValueBlock, _HexBlock10); - - function LocalSimpleStringValueBlock() { - var _this48; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalSimpleStringValueBlock); - - _this48 = _possibleConstructorReturn(this, _getPrototypeOf(LocalSimpleStringValueBlock).call(this, parameters)); - _this48.value = ""; - _this48.isHexOnly = true; - return _this48; - } - - _createClass(LocalSimpleStringValueBlock, [{ - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(LocalSimpleStringValueBlock.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.value = this.value; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "SimpleStringValueBlock"; - } - }]); - - return LocalSimpleStringValueBlock; - }(HexBlock(LocalBaseBlock)); - - var LocalSimpleStringBlock = function (_BaseBlock14) { - _inherits(LocalSimpleStringBlock, _BaseBlock14); - - function LocalSimpleStringBlock() { - var _this49; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, LocalSimpleStringBlock); - - _this49 = _possibleConstructorReturn(this, _getPrototypeOf(LocalSimpleStringBlock).call(this, parameters, LocalSimpleStringValueBlock)); - if ("value" in parameters) _this49.fromString(parameters.value); - return _this49; - } - - _createClass(LocalSimpleStringBlock, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, this.lenBlock.isIndefiniteForm === true ? inputLength : this.lenBlock.length); - - if (resultOffset === -1) { - this.error = this.valueBlock.error; - return resultOffset; - } - - this.fromBuffer(this.valueBlock.valueHex); - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - if (this.valueBlock.error.length === 0) this.blockLength += this.valueBlock.blockLength; - return resultOffset; - } - }, { - key: "fromBuffer", - value: function fromBuffer(inputBuffer) { - this.valueBlock.value = String.fromCharCode.apply(null, new Uint8Array(inputBuffer)); - } - }, { - key: "fromString", - value: function fromString(inputString) { - var strLen = inputString.length; - this.valueBlock.valueHex = new ArrayBuffer(strLen); - var view = new Uint8Array(this.valueBlock.valueHex); - - for (var i = 0; i < strLen; i++) { - view[i] = inputString.charCodeAt(i); - } - - this.valueBlock.value = inputString; - } - }], [{ - key: "blockName", - value: function blockName() { - return "SIMPLESTRING"; - } - }]); - - return LocalSimpleStringBlock; - }(BaseBlock); - - var NumericString = function (_LocalSimpleStringBlo) { - _inherits(NumericString, _LocalSimpleStringBlo); - - function NumericString() { - var _this50; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, NumericString); - - _this50 = _possibleConstructorReturn(this, _getPrototypeOf(NumericString).call(this, parameters)); - _this50.idBlock.tagClass = 1; - _this50.idBlock.tagNumber = 18; - return _this50; - } - - _createClass(NumericString, null, [{ - key: "blockName", - value: function blockName() { - return "NumericString"; - } - }]); - - return NumericString; - }(LocalSimpleStringBlock); - - exports.NumericString = NumericString; - - var PrintableString = function (_LocalSimpleStringBlo2) { - _inherits(PrintableString, _LocalSimpleStringBlo2); - - function PrintableString() { - var _this51; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, PrintableString); - - _this51 = _possibleConstructorReturn(this, _getPrototypeOf(PrintableString).call(this, parameters)); - _this51.idBlock.tagClass = 1; - _this51.idBlock.tagNumber = 19; - return _this51; - } - - _createClass(PrintableString, null, [{ - key: "blockName", - value: function blockName() { - return "PrintableString"; - } - }]); - - return PrintableString; - }(LocalSimpleStringBlock); - - exports.PrintableString = PrintableString; - - var TeletexString = function (_LocalSimpleStringBlo3) { - _inherits(TeletexString, _LocalSimpleStringBlo3); - - function TeletexString() { - var _this52; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, TeletexString); - - _this52 = _possibleConstructorReturn(this, _getPrototypeOf(TeletexString).call(this, parameters)); - _this52.idBlock.tagClass = 1; - _this52.idBlock.tagNumber = 20; - return _this52; - } - - _createClass(TeletexString, null, [{ - key: "blockName", - value: function blockName() { - return "TeletexString"; - } - }]); - - return TeletexString; - }(LocalSimpleStringBlock); - - exports.TeletexString = TeletexString; - - var VideotexString = function (_LocalSimpleStringBlo4) { - _inherits(VideotexString, _LocalSimpleStringBlo4); - - function VideotexString() { - var _this53; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, VideotexString); - - _this53 = _possibleConstructorReturn(this, _getPrototypeOf(VideotexString).call(this, parameters)); - _this53.idBlock.tagClass = 1; - _this53.idBlock.tagNumber = 21; - return _this53; - } - - _createClass(VideotexString, null, [{ - key: "blockName", - value: function blockName() { - return "VideotexString"; - } - }]); - - return VideotexString; - }(LocalSimpleStringBlock); - - exports.VideotexString = VideotexString; - - var IA5String = function (_LocalSimpleStringBlo5) { - _inherits(IA5String, _LocalSimpleStringBlo5); - - function IA5String() { - var _this54; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, IA5String); - - _this54 = _possibleConstructorReturn(this, _getPrototypeOf(IA5String).call(this, parameters)); - _this54.idBlock.tagClass = 1; - _this54.idBlock.tagNumber = 22; - return _this54; - } - - _createClass(IA5String, null, [{ - key: "blockName", - value: function blockName() { - return "IA5String"; - } - }]); - - return IA5String; - }(LocalSimpleStringBlock); - - exports.IA5String = IA5String; - - var GraphicString = function (_LocalSimpleStringBlo6) { - _inherits(GraphicString, _LocalSimpleStringBlo6); - - function GraphicString() { - var _this55; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, GraphicString); - - _this55 = _possibleConstructorReturn(this, _getPrototypeOf(GraphicString).call(this, parameters)); - _this55.idBlock.tagClass = 1; - _this55.idBlock.tagNumber = 25; - return _this55; - } - - _createClass(GraphicString, null, [{ - key: "blockName", - value: function blockName() { - return "GraphicString"; - } - }]); - - return GraphicString; - }(LocalSimpleStringBlock); - - exports.GraphicString = GraphicString; - - var VisibleString = function (_LocalSimpleStringBlo7) { - _inherits(VisibleString, _LocalSimpleStringBlo7); - - function VisibleString() { - var _this56; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, VisibleString); - - _this56 = _possibleConstructorReturn(this, _getPrototypeOf(VisibleString).call(this, parameters)); - _this56.idBlock.tagClass = 1; - _this56.idBlock.tagNumber = 26; - return _this56; - } - - _createClass(VisibleString, null, [{ - key: "blockName", - value: function blockName() { - return "VisibleString"; - } - }]); - - return VisibleString; - }(LocalSimpleStringBlock); - - exports.VisibleString = VisibleString; - - var GeneralString = function (_LocalSimpleStringBlo8) { - _inherits(GeneralString, _LocalSimpleStringBlo8); - - function GeneralString() { - var _this57; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, GeneralString); - - _this57 = _possibleConstructorReturn(this, _getPrototypeOf(GeneralString).call(this, parameters)); - _this57.idBlock.tagClass = 1; - _this57.idBlock.tagNumber = 27; - return _this57; - } - - _createClass(GeneralString, null, [{ - key: "blockName", - value: function blockName() { - return "GeneralString"; - } - }]); - - return GeneralString; - }(LocalSimpleStringBlock); - - exports.GeneralString = GeneralString; - - var CharacterString = function (_LocalSimpleStringBlo9) { - _inherits(CharacterString, _LocalSimpleStringBlo9); - - function CharacterString() { - var _this58; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, CharacterString); - - _this58 = _possibleConstructorReturn(this, _getPrototypeOf(CharacterString).call(this, parameters)); - _this58.idBlock.tagClass = 1; - _this58.idBlock.tagNumber = 29; - return _this58; - } - - _createClass(CharacterString, null, [{ - key: "blockName", - value: function blockName() { - return "CharacterString"; - } - }]); - - return CharacterString; - }(LocalSimpleStringBlock); - - exports.CharacterString = CharacterString; - - var UTCTime = function (_VisibleString) { - _inherits(UTCTime, _VisibleString); - - function UTCTime() { - var _this59; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, UTCTime); - - _this59 = _possibleConstructorReturn(this, _getPrototypeOf(UTCTime).call(this, parameters)); - _this59.year = 0; - _this59.month = 0; - _this59.day = 0; - _this59.hour = 0; - _this59.minute = 0; - _this59.second = 0; - - if ("value" in parameters) { - _this59.fromString(parameters.value); - - _this59.valueBlock.valueHex = new ArrayBuffer(parameters.value.length); - var view = new Uint8Array(_this59.valueBlock.valueHex); - - for (var i = 0; i < parameters.value.length; i++) { - view[i] = parameters.value.charCodeAt(i); - } - } - - if ("valueDate" in parameters) { - _this59.fromDate(parameters.valueDate); - - _this59.valueBlock.valueHex = _this59.toBuffer(); - } - - _this59.idBlock.tagClass = 1; - _this59.idBlock.tagNumber = 23; - return _this59; - } - - _createClass(UTCTime, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, this.lenBlock.isIndefiniteForm === true ? inputLength : this.lenBlock.length); - - if (resultOffset === -1) { - this.error = this.valueBlock.error; - return resultOffset; - } - - this.fromBuffer(this.valueBlock.valueHex); - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - if (this.valueBlock.error.length === 0) this.blockLength += this.valueBlock.blockLength; - return resultOffset; - } - }, { - key: "fromBuffer", - value: function fromBuffer(inputBuffer) { - this.fromString(String.fromCharCode.apply(null, new Uint8Array(inputBuffer))); - } - }, { - key: "toBuffer", - value: function toBuffer() { - var str = this.toString(); - var buffer = new ArrayBuffer(str.length); - var view = new Uint8Array(buffer); - - for (var i = 0; i < str.length; i++) { - view[i] = str.charCodeAt(i); - } - - return buffer; - } - }, { - key: "fromDate", - value: function fromDate(inputDate) { - this.year = inputDate.getUTCFullYear(); - this.month = inputDate.getUTCMonth() + 1; - this.day = inputDate.getUTCDate(); - this.hour = inputDate.getUTCHours(); - this.minute = inputDate.getUTCMinutes(); - this.second = inputDate.getUTCSeconds(); - } - }, { - key: "toDate", - value: function toDate() { - return new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second)); - } - }, { - key: "fromString", - value: function fromString(inputString) { - var parser = /(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})Z/ig; - var parserArray = parser.exec(inputString); - - if (parserArray === null) { - this.error = "Wrong input string for convertion"; - return; - } - - var year = parseInt(parserArray[1], 10); - if (year >= 50) this.year = 1900 + year;else this.year = 2000 + year; - this.month = parseInt(parserArray[2], 10); - this.day = parseInt(parserArray[3], 10); - this.hour = parseInt(parserArray[4], 10); - this.minute = parseInt(parserArray[5], 10); - this.second = parseInt(parserArray[6], 10); - } - }, { - key: "toString", - value: function toString() { - var outputArray = new Array(7); - outputArray[0] = (0, utils.padNumber)(this.year < 2000 ? this.year - 1900 : this.year - 2000, 2); - outputArray[1] = (0, utils.padNumber)(this.month, 2); - outputArray[2] = (0, utils.padNumber)(this.day, 2); - outputArray[3] = (0, utils.padNumber)(this.hour, 2); - outputArray[4] = (0, utils.padNumber)(this.minute, 2); - outputArray[5] = (0, utils.padNumber)(this.second, 2); - outputArray[6] = "Z"; - return outputArray.join(""); - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(UTCTime.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.year = this.year; - object.month = this.month; - object.day = this.day; - object.hour = this.hour; - object.minute = this.minute; - object.second = this.second; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "UTCTime"; - } - }]); - - return UTCTime; - }(VisibleString); - - exports.UTCTime = UTCTime; - - var GeneralizedTime = function (_VisibleString2) { - _inherits(GeneralizedTime, _VisibleString2); - - function GeneralizedTime() { - var _this60; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, GeneralizedTime); - - _this60 = _possibleConstructorReturn(this, _getPrototypeOf(GeneralizedTime).call(this, parameters)); - _this60.year = 0; - _this60.month = 0; - _this60.day = 0; - _this60.hour = 0; - _this60.minute = 0; - _this60.second = 0; - _this60.millisecond = 0; - - if ("value" in parameters) { - _this60.fromString(parameters.value); - - _this60.valueBlock.valueHex = new ArrayBuffer(parameters.value.length); - var view = new Uint8Array(_this60.valueBlock.valueHex); - - for (var i = 0; i < parameters.value.length; i++) { - view[i] = parameters.value.charCodeAt(i); - } - } - - if ("valueDate" in parameters) { - _this60.fromDate(parameters.valueDate); - - _this60.valueBlock.valueHex = _this60.toBuffer(); - } - - _this60.idBlock.tagClass = 1; - _this60.idBlock.tagNumber = 24; - return _this60; - } - - _createClass(GeneralizedTime, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - var resultOffset = this.valueBlock.fromBER(inputBuffer, inputOffset, this.lenBlock.isIndefiniteForm === true ? inputLength : this.lenBlock.length); - - if (resultOffset === -1) { - this.error = this.valueBlock.error; - return resultOffset; - } - - this.fromBuffer(this.valueBlock.valueHex); - if (this.idBlock.error.length === 0) this.blockLength += this.idBlock.blockLength; - if (this.lenBlock.error.length === 0) this.blockLength += this.lenBlock.blockLength; - if (this.valueBlock.error.length === 0) this.blockLength += this.valueBlock.blockLength; - return resultOffset; - } - }, { - key: "fromBuffer", - value: function fromBuffer(inputBuffer) { - this.fromString(String.fromCharCode.apply(null, new Uint8Array(inputBuffer))); - } - }, { - key: "toBuffer", - value: function toBuffer() { - var str = this.toString(); - var buffer = new ArrayBuffer(str.length); - var view = new Uint8Array(buffer); - - for (var i = 0; i < str.length; i++) { - view[i] = str.charCodeAt(i); - } - - return buffer; - } - }, { - key: "fromDate", - value: function fromDate(inputDate) { - this.year = inputDate.getUTCFullYear(); - this.month = inputDate.getUTCMonth() + 1; - this.day = inputDate.getUTCDate(); - this.hour = inputDate.getUTCHours(); - this.minute = inputDate.getUTCMinutes(); - this.second = inputDate.getUTCSeconds(); - this.millisecond = inputDate.getUTCMilliseconds(); - } - }, { - key: "toDate", - value: function toDate() { - return new Date(Date.UTC(this.year, this.month - 1, this.day, this.hour, this.minute, this.second, this.millisecond)); - } - }, { - key: "fromString", - value: function fromString(inputString) { - var isUTC = false; - var timeString = ""; - var dateTimeString = ""; - var fractionPart = 0; - var parser; - var hourDifference = 0; - var minuteDifference = 0; - - if (inputString[inputString.length - 1] === "Z") { - timeString = inputString.substr(0, inputString.length - 1); - isUTC = true; - } else { - var number = new Number(inputString[inputString.length - 1]); - if (isNaN(number.valueOf())) throw new Error("Wrong input string for convertion"); - timeString = inputString; - } - - if (isUTC) { - if (timeString.indexOf("+") !== -1) throw new Error("Wrong input string for convertion"); - if (timeString.indexOf("-") !== -1) throw new Error("Wrong input string for convertion"); - } else { - var multiplier = 1; - var differencePosition = timeString.indexOf("+"); - var differenceString = ""; - - if (differencePosition === -1) { - differencePosition = timeString.indexOf("-"); - multiplier = -1; - } - - if (differencePosition !== -1) { - differenceString = timeString.substr(differencePosition + 1); - timeString = timeString.substr(0, differencePosition); - if (differenceString.length !== 2 && differenceString.length !== 4) throw new Error("Wrong input string for convertion"); - - var _number = new Number(differenceString.substr(0, 2)); - - if (isNaN(_number.valueOf())) throw new Error("Wrong input string for convertion"); - hourDifference = multiplier * _number; - - if (differenceString.length === 4) { - _number = new Number(differenceString.substr(2, 2)); - if (isNaN(_number.valueOf())) throw new Error("Wrong input string for convertion"); - minuteDifference = multiplier * _number; - } - } - } - - var fractionPointPosition = timeString.indexOf("."); - if (fractionPointPosition === -1) fractionPointPosition = timeString.indexOf(","); - - if (fractionPointPosition !== -1) { - var fractionPartCheck = new Number("0".concat(timeString.substr(fractionPointPosition))); - if (isNaN(fractionPartCheck.valueOf())) throw new Error("Wrong input string for convertion"); - fractionPart = fractionPartCheck.valueOf(); - dateTimeString = timeString.substr(0, fractionPointPosition); - } else dateTimeString = timeString; - - switch (true) { - case dateTimeString.length === 8: - parser = /(\d{4})(\d{2})(\d{2})/ig; - if (fractionPointPosition !== -1) throw new Error("Wrong input string for convertion"); - break; - - case dateTimeString.length === 10: - parser = /(\d{4})(\d{2})(\d{2})(\d{2})/ig; - - if (fractionPointPosition !== -1) { - var fractionResult = 60 * fractionPart; - this.minute = Math.floor(fractionResult); - fractionResult = 60 * (fractionResult - this.minute); - this.second = Math.floor(fractionResult); - fractionResult = 1000 * (fractionResult - this.second); - this.millisecond = Math.floor(fractionResult); - } - - break; - - case dateTimeString.length === 12: - parser = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})/ig; - - if (fractionPointPosition !== -1) { - var _fractionResult = 60 * fractionPart; - - this.second = Math.floor(_fractionResult); - _fractionResult = 1000 * (_fractionResult - this.second); - this.millisecond = Math.floor(_fractionResult); - } - - break; - - case dateTimeString.length === 14: - parser = /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})/ig; - - if (fractionPointPosition !== -1) { - var _fractionResult2 = 1000 * fractionPart; - - this.millisecond = Math.floor(_fractionResult2); - } - - break; - - default: - throw new Error("Wrong input string for convertion"); - } - - var parserArray = parser.exec(dateTimeString); - if (parserArray === null) throw new Error("Wrong input string for convertion"); - - for (var j = 1; j < parserArray.length; j++) { - switch (j) { - case 1: - this.year = parseInt(parserArray[j], 10); - break; - - case 2: - this.month = parseInt(parserArray[j], 10); - break; - - case 3: - this.day = parseInt(parserArray[j], 10); - break; - - case 4: - this.hour = parseInt(parserArray[j], 10) + hourDifference; - break; - - case 5: - this.minute = parseInt(parserArray[j], 10) + minuteDifference; - break; - - case 6: - this.second = parseInt(parserArray[j], 10); - break; - - default: - throw new Error("Wrong input string for convertion"); - } - } - - if (isUTC === false) { - var tempDate = new Date(this.year, this.month, this.day, this.hour, this.minute, this.second, this.millisecond); - this.year = tempDate.getUTCFullYear(); - this.month = tempDate.getUTCMonth(); - this.day = tempDate.getUTCDay(); - this.hour = tempDate.getUTCHours(); - this.minute = tempDate.getUTCMinutes(); - this.second = tempDate.getUTCSeconds(); - this.millisecond = tempDate.getUTCMilliseconds(); - } - } - }, { - key: "toString", - value: function toString() { - var outputArray = []; - outputArray.push((0, utils.padNumber)(this.year, 4)); - outputArray.push((0, utils.padNumber)(this.month, 2)); - outputArray.push((0, utils.padNumber)(this.day, 2)); - outputArray.push((0, utils.padNumber)(this.hour, 2)); - outputArray.push((0, utils.padNumber)(this.minute, 2)); - outputArray.push((0, utils.padNumber)(this.second, 2)); - - if (this.millisecond !== 0) { - outputArray.push("."); - outputArray.push((0, utils.padNumber)(this.millisecond, 3)); - } - - outputArray.push("Z"); - return outputArray.join(""); - } - }, { - key: "toJSON", - value: function toJSON() { - var object = {}; - - try { - object = _get(_getPrototypeOf(GeneralizedTime.prototype), "toJSON", this).call(this); - } catch (ex) {} - - object.year = this.year; - object.month = this.month; - object.day = this.day; - object.hour = this.hour; - object.minute = this.minute; - object.second = this.second; - object.millisecond = this.millisecond; - return object; - } - }], [{ - key: "blockName", - value: function blockName() { - return "GeneralizedTime"; - } - }]); - - return GeneralizedTime; - }(VisibleString); - - exports.GeneralizedTime = GeneralizedTime; - - var DATE = function (_Utf8String) { - _inherits(DATE, _Utf8String); - - function DATE() { - var _this61; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, DATE); - - _this61 = _possibleConstructorReturn(this, _getPrototypeOf(DATE).call(this, parameters)); - _this61.idBlock.tagClass = 1; - _this61.idBlock.tagNumber = 31; - return _this61; - } - - _createClass(DATE, null, [{ - key: "blockName", - value: function blockName() { - return "DATE"; - } - }]); - - return DATE; - }(Utf8String); - - exports.DATE = DATE; - - var TimeOfDay = function (_Utf8String2) { - _inherits(TimeOfDay, _Utf8String2); - - function TimeOfDay() { - var _this62; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, TimeOfDay); - - _this62 = _possibleConstructorReturn(this, _getPrototypeOf(TimeOfDay).call(this, parameters)); - _this62.idBlock.tagClass = 1; - _this62.idBlock.tagNumber = 32; - return _this62; - } - - _createClass(TimeOfDay, null, [{ - key: "blockName", - value: function blockName() { - return "TimeOfDay"; - } - }]); - - return TimeOfDay; - }(Utf8String); - - exports.TimeOfDay = TimeOfDay; - - var DateTime = function (_Utf8String3) { - _inherits(DateTime, _Utf8String3); - - function DateTime() { - var _this63; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, DateTime); - - _this63 = _possibleConstructorReturn(this, _getPrototypeOf(DateTime).call(this, parameters)); - _this63.idBlock.tagClass = 1; - _this63.idBlock.tagNumber = 33; - return _this63; - } - - _createClass(DateTime, null, [{ - key: "blockName", - value: function blockName() { - return "DateTime"; - } - }]); - - return DateTime; - }(Utf8String); - - exports.DateTime = DateTime; - - var Duration = function (_Utf8String4) { - _inherits(Duration, _Utf8String4); - - function Duration() { - var _this64; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Duration); - - _this64 = _possibleConstructorReturn(this, _getPrototypeOf(Duration).call(this, parameters)); - _this64.idBlock.tagClass = 1; - _this64.idBlock.tagNumber = 34; - return _this64; - } - - _createClass(Duration, null, [{ - key: "blockName", - value: function blockName() { - return "Duration"; - } - }]); - - return Duration; - }(Utf8String); - - exports.Duration = Duration; - - var TIME = function (_Utf8String5) { - _inherits(TIME, _Utf8String5); - - function TIME() { - var _this65; - - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, TIME); - - _this65 = _possibleConstructorReturn(this, _getPrototypeOf(TIME).call(this, parameters)); - _this65.idBlock.tagClass = 1; - _this65.idBlock.tagNumber = 14; - return _this65; - } - - _createClass(TIME, null, [{ - key: "blockName", - value: function blockName() { - return "TIME"; - } - }]); - - return TIME; - }(Utf8String); - - exports.TIME = TIME; - - var Choice = function Choice() { - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Choice); - - this.value = (0, utils.getParametersValue)(parameters, "value", []); - this.optional = (0, utils.getParametersValue)(parameters, "optional", false); - }; - - exports.Choice = Choice; - - var Any = function Any() { - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Any); - - this.name = (0, utils.getParametersValue)(parameters, "name", ""); - this.optional = (0, utils.getParametersValue)(parameters, "optional", false); - }; - - exports.Any = Any; - - var Repeated = function Repeated() { - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, Repeated); - - this.name = (0, utils.getParametersValue)(parameters, "name", ""); - this.optional = (0, utils.getParametersValue)(parameters, "optional", false); - this.value = (0, utils.getParametersValue)(parameters, "value", new Any()); - this.local = (0, utils.getParametersValue)(parameters, "local", false); - }; - - exports.Repeated = Repeated; - - var RawData = function () { - function RawData() { - var parameters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - - _classCallCheck(this, RawData); - - this.data = (0, utils.getParametersValue)(parameters, "data", new ArrayBuffer(0)); - } - - _createClass(RawData, [{ - key: "fromBER", - value: function fromBER(inputBuffer, inputOffset, inputLength) { - this.data = inputBuffer.slice(inputOffset, inputLength); - return inputOffset + inputLength; - } - }, { - key: "toBER", - value: function toBER() { - return this.data; - } - }]); - - return RawData; - }(); - - exports.RawData = RawData; - - function LocalFromBER(inputBuffer, inputOffset, inputLength) { - var incomingOffset = inputOffset; - - function localChangeType(inputObject, newType) { - if (inputObject instanceof newType) return inputObject; - var newObject = new newType(); - newObject.idBlock = inputObject.idBlock; - newObject.lenBlock = inputObject.lenBlock; - newObject.warnings = inputObject.warnings; - newObject.valueBeforeDecode = inputObject.valueBeforeDecode.slice(0); - return newObject; - } - - var returnObject = new BaseBlock({}, Object); - var baseBlock = new LocalBaseBlock(); - - if ((0, utils.checkBufferParams)(baseBlock, inputBuffer, inputOffset, inputLength) === false) { - returnObject.error = baseBlock.error; - return { - offset: -1, - result: returnObject - }; - } - - var intBuffer = new Uint8Array(inputBuffer, inputOffset, inputLength); - - if (intBuffer.length === 0) { - this.error = "Zero buffer length"; - return { - offset: -1, - result: returnObject - }; - } - - var resultOffset = returnObject.idBlock.fromBER(inputBuffer, inputOffset, inputLength); - returnObject.warnings.concat(returnObject.idBlock.warnings); - - if (resultOffset === -1) { - returnObject.error = returnObject.idBlock.error; - return { - offset: -1, - result: returnObject - }; - } - - inputOffset = resultOffset; - inputLength -= returnObject.idBlock.blockLength; - resultOffset = returnObject.lenBlock.fromBER(inputBuffer, inputOffset, inputLength); - returnObject.warnings.concat(returnObject.lenBlock.warnings); - - if (resultOffset === -1) { - returnObject.error = returnObject.lenBlock.error; - return { - offset: -1, - result: returnObject - }; - } - - inputOffset = resultOffset; - inputLength -= returnObject.lenBlock.blockLength; - - if (returnObject.idBlock.isConstructed === false && returnObject.lenBlock.isIndefiniteForm === true) { - returnObject.error = "Indefinite length form used for primitive encoding form"; - return { - offset: -1, - result: returnObject - }; - } - - var newASN1Type = BaseBlock; - - switch (returnObject.idBlock.tagClass) { - case 1: - if (returnObject.idBlock.tagNumber >= 37 && returnObject.idBlock.isHexOnly === false) { - returnObject.error = "UNIVERSAL 37 and upper tags are reserved by ASN.1 standard"; - return { - offset: -1, - result: returnObject - }; - } - - switch (returnObject.idBlock.tagNumber) { - case 0: - if (returnObject.idBlock.isConstructed === true && returnObject.lenBlock.length > 0) { - returnObject.error = "Type [UNIVERSAL 0] is reserved"; - return { - offset: -1, - result: returnObject - }; - } - - newASN1Type = EndOfContent; - break; - - case 1: - newASN1Type = Boolean; - break; - - case 2: - newASN1Type = Integer; - break; - - case 3: - newASN1Type = BitString; - break; - - case 4: - newASN1Type = OctetString; - break; - - case 5: - newASN1Type = Null; - break; - - case 6: - newASN1Type = ObjectIdentifier; - break; - - case 10: - newASN1Type = Enumerated; - break; - - case 12: - newASN1Type = Utf8String; - break; - - case 13: - newASN1Type = RelativeObjectIdentifier; - break; - - case 14: - newASN1Type = TIME; - break; - - case 15: - returnObject.error = "[UNIVERSAL 15] is reserved by ASN.1 standard"; - return { - offset: -1, - result: returnObject - }; - - case 16: - newASN1Type = Sequence; - break; - - case 17: - newASN1Type = Set; - break; - - case 18: - newASN1Type = NumericString; - break; - - case 19: - newASN1Type = PrintableString; - break; - - case 20: - newASN1Type = TeletexString; - break; - - case 21: - newASN1Type = VideotexString; - break; - - case 22: - newASN1Type = IA5String; - break; - - case 23: - newASN1Type = UTCTime; - break; - - case 24: - newASN1Type = GeneralizedTime; - break; - - case 25: - newASN1Type = GraphicString; - break; - - case 26: - newASN1Type = VisibleString; - break; - - case 27: - newASN1Type = GeneralString; - break; - - case 28: - newASN1Type = UniversalString; - break; - - case 29: - newASN1Type = CharacterString; - break; - - case 30: - newASN1Type = BmpString; - break; - - case 31: - newASN1Type = DATE; - break; - - case 32: - newASN1Type = TimeOfDay; - break; - - case 33: - newASN1Type = DateTime; - break; - - case 34: - newASN1Type = Duration; - break; - - default: - { - var newObject; - if (returnObject.idBlock.isConstructed === true) newObject = new Constructed();else newObject = new Primitive(); - newObject.idBlock = returnObject.idBlock; - newObject.lenBlock = returnObject.lenBlock; - newObject.warnings = returnObject.warnings; - returnObject = newObject; - resultOffset = returnObject.fromBER(inputBuffer, inputOffset, inputLength); - } - } - - break; - - case 2: - case 3: - case 4: - default: - { - if (returnObject.idBlock.isConstructed === true) newASN1Type = Constructed;else newASN1Type = Primitive; - } - } - - returnObject = localChangeType(returnObject, newASN1Type); - resultOffset = returnObject.fromBER(inputBuffer, inputOffset, returnObject.lenBlock.isIndefiniteForm === true ? inputLength : returnObject.lenBlock.length); - returnObject.valueBeforeDecode = inputBuffer.slice(incomingOffset, incomingOffset + returnObject.blockLength); - return { - offset: resultOffset, - result: returnObject - }; - } - - function fromBER(inputBuffer) { - if (inputBuffer.byteLength === 0) { - var result = new BaseBlock({}, Object); - result.error = "Input buffer has zero length"; - return { - offset: -1, - result: result - }; - } - - return LocalFromBER(inputBuffer, 0, inputBuffer.byteLength); - } - - function compareSchema(root, inputData, inputSchema) { - if (inputSchema instanceof Choice) { - for (var j = 0; j < inputSchema.value.length; j++) { - var result = compareSchema(root, inputData, inputSchema.value[j]); - - if (result.verified === true) { - return { - verified: true, - result: root - }; - } - } - - { - var _result = { - verified: false, - result: { - error: "Wrong values for Choice type" - } - }; - if (inputSchema.hasOwnProperty("name")) _result.name = inputSchema.name; - return _result; - } - } - - if (inputSchema instanceof Any) { - if (inputSchema.hasOwnProperty("name")) root[inputSchema.name] = inputData; - return { - verified: true, - result: root - }; - } - - if (root instanceof Object === false) { - return { - verified: false, - result: { - error: "Wrong root object" - } - }; - } - - if (inputData instanceof Object === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 data" - } - }; - } - - if (inputSchema instanceof Object === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - if ("idBlock" in inputSchema === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - if ("fromBER" in inputSchema.idBlock === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - if ("toBER" in inputSchema.idBlock === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - var encodedId = inputSchema.idBlock.toBER(false); - - if (encodedId.byteLength === 0) { - return { - verified: false, - result: { - error: "Error encoding idBlock for ASN.1 schema" - } - }; - } - - var decodedOffset = inputSchema.idBlock.fromBER(encodedId, 0, encodedId.byteLength); - - if (decodedOffset === -1) { - return { - verified: false, - result: { - error: "Error decoding idBlock for ASN.1 schema" - } - }; - } - - if (inputSchema.idBlock.hasOwnProperty("tagClass") === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - if (inputSchema.idBlock.tagClass !== inputData.idBlock.tagClass) { - return { - verified: false, - result: root - }; - } - - if (inputSchema.idBlock.hasOwnProperty("tagNumber") === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - if (inputSchema.idBlock.tagNumber !== inputData.idBlock.tagNumber) { - return { - verified: false, - result: root - }; - } - - if (inputSchema.idBlock.hasOwnProperty("isConstructed") === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - if (inputSchema.idBlock.isConstructed !== inputData.idBlock.isConstructed) { - return { - verified: false, - result: root - }; - } - - if ("isHexOnly" in inputSchema.idBlock === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - if (inputSchema.idBlock.isHexOnly !== inputData.idBlock.isHexOnly) { - return { - verified: false, - result: root - }; - } - - if (inputSchema.idBlock.isHexOnly === true) { - if ("valueHex" in inputSchema.idBlock === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema" - } - }; - } - - var schemaView = new Uint8Array(inputSchema.idBlock.valueHex); - var asn1View = new Uint8Array(inputData.idBlock.valueHex); - - if (schemaView.length !== asn1View.length) { - return { - verified: false, - result: root - }; - } - - for (var i = 0; i < schemaView.length; i++) { - if (schemaView[i] !== asn1View[1]) { - return { - verified: false, - result: root - }; - } - } - } - - if (inputSchema.hasOwnProperty("name")) { - inputSchema.name = inputSchema.name.replace(/^\s+|\s+$/g, ""); - if (inputSchema.name !== "") root[inputSchema.name] = inputData; - } - - if (inputSchema.idBlock.isConstructed === true) { - var admission = 0; - var _result2 = { - verified: false - }; - var maxLength = inputSchema.valueBlock.value.length; - - if (maxLength > 0) { - if (inputSchema.valueBlock.value[0] instanceof Repeated) maxLength = inputData.valueBlock.value.length; - } - - if (maxLength === 0) { - return { - verified: true, - result: root - }; - } - - if (inputData.valueBlock.value.length === 0 && inputSchema.valueBlock.value.length !== 0) { - var _optional = true; - - for (var _i17 = 0; _i17 < inputSchema.valueBlock.value.length; _i17++) { - _optional = _optional && (inputSchema.valueBlock.value[_i17].optional || false); - } - - if (_optional === true) { - return { - verified: true, - result: root - }; - } - - if (inputSchema.hasOwnProperty("name")) { - inputSchema.name = inputSchema.name.replace(/^\s+|\s+$/g, ""); - if (inputSchema.name !== "") delete root[inputSchema.name]; - } - - root.error = "Inconsistent object length"; - return { - verified: false, - result: root - }; - } - - for (var _i18 = 0; _i18 < maxLength; _i18++) { - if (_i18 - admission >= inputData.valueBlock.value.length) { - if (inputSchema.valueBlock.value[_i18].optional === false) { - var _result3 = { - verified: false, - result: root - }; - root.error = "Inconsistent length between ASN.1 data and schema"; - - if (inputSchema.hasOwnProperty("name")) { - inputSchema.name = inputSchema.name.replace(/^\s+|\s+$/g, ""); - - if (inputSchema.name !== "") { - delete root[inputSchema.name]; - _result3.name = inputSchema.name; - } - } - - return _result3; - } - } else { - if (inputSchema.valueBlock.value[0] instanceof Repeated) { - _result2 = compareSchema(root, inputData.valueBlock.value[_i18], inputSchema.valueBlock.value[0].value); - - if (_result2.verified === false) { - if (inputSchema.valueBlock.value[0].optional === true) admission++;else { - if (inputSchema.hasOwnProperty("name")) { - inputSchema.name = inputSchema.name.replace(/^\s+|\s+$/g, ""); - if (inputSchema.name !== "") delete root[inputSchema.name]; - } - - return _result2; - } - } - - if ("name" in inputSchema.valueBlock.value[0] && inputSchema.valueBlock.value[0].name.length > 0) { - var arrayRoot = {}; - if ("local" in inputSchema.valueBlock.value[0] && inputSchema.valueBlock.value[0].local === true) arrayRoot = inputData;else arrayRoot = root; - if (typeof arrayRoot[inputSchema.valueBlock.value[0].name] === "undefined") arrayRoot[inputSchema.valueBlock.value[0].name] = []; - arrayRoot[inputSchema.valueBlock.value[0].name].push(inputData.valueBlock.value[_i18]); - } - } else { - _result2 = compareSchema(root, inputData.valueBlock.value[_i18 - admission], inputSchema.valueBlock.value[_i18]); - - if (_result2.verified === false) { - if (inputSchema.valueBlock.value[_i18].optional === true) admission++;else { - if (inputSchema.hasOwnProperty("name")) { - inputSchema.name = inputSchema.name.replace(/^\s+|\s+$/g, ""); - if (inputSchema.name !== "") delete root[inputSchema.name]; - } - - return _result2; - } - } - } - } - } - - if (_result2.verified === false) { - var _result4 = { - verified: false, - result: root - }; - - if (inputSchema.hasOwnProperty("name")) { - inputSchema.name = inputSchema.name.replace(/^\s+|\s+$/g, ""); - - if (inputSchema.name !== "") { - delete root[inputSchema.name]; - _result4.name = inputSchema.name; - } - } - - return _result4; - } - - return { - verified: true, - result: root - }; - } - - if ("primitiveSchema" in inputSchema && "valueHex" in inputData.valueBlock) { - var _asn = fromBER(inputData.valueBlock.valueHex); - - if (_asn.offset === -1) { - var _result5 = { - verified: false, - result: _asn.result - }; - - if (inputSchema.hasOwnProperty("name")) { - inputSchema.name = inputSchema.name.replace(/^\s+|\s+$/g, ""); - - if (inputSchema.name !== "") { - delete root[inputSchema.name]; - _result5.name = inputSchema.name; - } - } - - return _result5; - } - - return compareSchema(root, _asn.result, inputSchema.primitiveSchema); - } - - return { - verified: true, - result: root - }; - } - - function verifySchema(inputBuffer, inputSchema) { - if (inputSchema instanceof Object === false) { - return { - verified: false, - result: { - error: "Wrong ASN.1 schema type" - } - }; - } - - var asn1 = fromBER(inputBuffer); - - if (asn1.offset === -1) { - return { - verified: false, - result: asn1.result - }; - } - - return compareSchema(asn1.result, asn1.result, inputSchema); - } - - function fromJSON(json) {} - }); - var asn1$1 = unwrapExports(asn1); - var asn1_1 = asn1.fromBER; - var asn1_2 = asn1.compareSchema; - var asn1_3 = asn1.verifySchema; - var asn1_4 = asn1.fromJSON; - var asn1_5 = asn1.RawData; - var asn1_6 = asn1.Repeated; - var asn1_7 = asn1.Any; - var asn1_8 = asn1.Choice; - var asn1_9 = asn1.TIME; - var asn1_10 = asn1.Duration; - var asn1_11 = asn1.DateTime; - var asn1_12 = asn1.TimeOfDay; - var asn1_13 = asn1.DATE; - var asn1_14 = asn1.GeneralizedTime; - var asn1_15 = asn1.UTCTime; - var asn1_16 = asn1.CharacterString; - var asn1_17 = asn1.GeneralString; - var asn1_18 = asn1.VisibleString; - var asn1_19 = asn1.GraphicString; - var asn1_20 = asn1.IA5String; - var asn1_21 = asn1.VideotexString; - var asn1_22 = asn1.TeletexString; - var asn1_23 = asn1.PrintableString; - var asn1_24 = asn1.NumericString; - var asn1_25 = asn1.UniversalString; - var asn1_26 = asn1.BmpString; - var asn1_27 = asn1.RelativeObjectIdentifier; - var asn1_28 = asn1.Utf8String; - var asn1_29 = asn1.ObjectIdentifier; - var asn1_30 = asn1.Enumerated; - var asn1_31 = asn1.Integer; - var asn1_32 = asn1.BitString; - var asn1_33 = asn1.OctetString; - var asn1_34 = asn1.Null; - var asn1_35 = asn1.Set; - var asn1_36 = asn1.Sequence; - var asn1_37 = asn1.Boolean; - var asn1_38 = asn1.EndOfContent; - var asn1_39 = asn1.Constructed; - var asn1_40 = asn1.Primitive; - var asn1_41 = asn1.BaseBlock; - var asn1_42 = asn1.ValueBlock; - var asn1_43 = asn1.HexBlock; - var asn1$2 = Object.freeze({ - __proto__: null, - 'default': asn1$1, - __moduleExports: asn1, - fromBER: asn1_1, - compareSchema: asn1_2, - verifySchema: asn1_3, - fromJSON: asn1_4, - RawData: asn1_5, - Repeated: asn1_6, - Any: asn1_7, - Choice: asn1_8, - TIME: asn1_9, - Duration: asn1_10, - DateTime: asn1_11, - TimeOfDay: asn1_12, - DATE: asn1_13, - GeneralizedTime: asn1_14, - UTCTime: asn1_15, - CharacterString: asn1_16, - GeneralString: asn1_17, - VisibleString: asn1_18, - GraphicString: asn1_19, - IA5String: asn1_20, - VideotexString: asn1_21, - TeletexString: asn1_22, - PrintableString: asn1_23, - NumericString: asn1_24, - UniversalString: asn1_25, - BmpString: asn1_26, - RelativeObjectIdentifier: asn1_27, - Utf8String: asn1_28, - ObjectIdentifier: asn1_29, - Enumerated: asn1_30, - Integer: asn1_31, - BitString: asn1_32, - OctetString: asn1_33, - Null: asn1_34, - Set: asn1_35, - Sequence: asn1_36, - Boolean: asn1_37, - EndOfContent: asn1_38, - Constructed: asn1_39, - Primitive: asn1_40, - BaseBlock: asn1_41, - ValueBlock: asn1_42, - HexBlock: asn1_43 - }); - var AsnAnyConverter = { - fromASN: function fromASN(value) { - return value instanceof asn1_34 ? null : value.valueBeforeDecode; - }, - toASN: function toASN(value) { - if (value === null) { - return new asn1_34(); - } - - var schema = asn1_1(value); - - if (schema.result.error) { - throw new Error(schema.result.error); - } - - return schema.result; - } - }; - var AsnIntegerConverter = { - fromASN: function fromASN(value) { - return !value.valueBlock.valueDec && value.valueBlock.valueHex.byteLength > 0 ? value.valueBlock.toString() : value.valueBlock.valueDec; - }, - toASN: function toASN(value) { - return new asn1_31({ - value: value - }); - } - }; - var AsnEnumeratedConverter = { - fromASN: function fromASN(value) { - return value.valueBlock.valueDec; - }, - toASN: function toASN(value) { - return new asn1_30({ - value: value - }); - } - }; - var AsnIntegerArrayBufferConverter = { - fromASN: function fromASN(value) { - return value.valueBlock.valueHex; - }, - toASN: function toASN(value) { - return new asn1_31({ - valueHex: value - }); - } - }; - var AsnBitStringConverter = { - fromASN: function fromASN(value) { - return value.valueBlock.valueHex; - }, - toASN: function toASN(value) { - return new asn1_32({ - valueHex: value - }); - } - }; - var AsnObjectIdentifierConverter = { - fromASN: function fromASN(value) { - return value.valueBlock.toString(); - }, - toASN: function toASN(value) { - return new asn1_29({ - value: value - }); - } - }; - var AsnBooleanConverter = { - fromASN: function fromASN(value) { - return value.valueBlock.value; - }, - toASN: function toASN(value) { - return new asn1_37({ - value: value - }); - } - }; - var AsnOctetStringConverter = { - fromASN: function fromASN(value) { - return value.valueBlock.valueHex; - }, - toASN: function toASN(value) { - return new asn1_33({ - valueHex: value - }); - } - }; - - function createStringConverter(Asn1Type) { - return { - fromASN: function fromASN(value) { - return value.valueBlock.value; - }, - toASN: function toASN(value) { - return new Asn1Type({ - value: value - }); - } - }; - } - - var AsnUtf8StringConverter = createStringConverter(asn1_28); - var AsnBmpStringConverter = createStringConverter(asn1_26); - var AsnUniversalStringConverter = createStringConverter(asn1_25); - var AsnNumericStringConverter = createStringConverter(asn1_24); - var AsnPrintableStringConverter = createStringConverter(asn1_23); - var AsnTeletexStringConverter = createStringConverter(asn1_22); - var AsnVideotexStringConverter = createStringConverter(asn1_21); - var AsnIA5StringConverter = createStringConverter(asn1_20); - var AsnGraphicStringConverter = createStringConverter(asn1_19); - var AsnVisibleStringConverter = createStringConverter(asn1_18); - var AsnGeneralStringConverter = createStringConverter(asn1_17); - var AsnCharacterStringConverter = createStringConverter(asn1_16); - var AsnUTCTimeConverter = { - fromASN: function fromASN(value) { - return value.toDate(); - }, - toASN: function toASN(value) { - return new asn1_15({ - valueDate: value - }); - } - }; - var AsnGeneralizedTimeConverter = { - fromASN: function fromASN(value) { - return value.toDate(); - }, - toASN: function toASN(value) { - return new asn1_14({ - valueDate: value - }); - } - }; - var defaultConverters = Object.freeze({ - AsnAnyConverter: AsnAnyConverter, - AsnIntegerConverter: AsnIntegerConverter, - AsnEnumeratedConverter: AsnEnumeratedConverter, - AsnIntegerArrayBufferConverter: AsnIntegerArrayBufferConverter, - AsnBitStringConverter: AsnBitStringConverter, - AsnObjectIdentifierConverter: AsnObjectIdentifierConverter, - AsnBooleanConverter: AsnBooleanConverter, - AsnOctetStringConverter: AsnOctetStringConverter, - AsnUtf8StringConverter: AsnUtf8StringConverter, - AsnBmpStringConverter: AsnBmpStringConverter, - AsnUniversalStringConverter: AsnUniversalStringConverter, - AsnNumericStringConverter: AsnNumericStringConverter, - AsnPrintableStringConverter: AsnPrintableStringConverter, - AsnTeletexStringConverter: AsnTeletexStringConverter, - AsnVideotexStringConverter: AsnVideotexStringConverter, - AsnIA5StringConverter: AsnIA5StringConverter, - AsnGraphicStringConverter: AsnGraphicStringConverter, - AsnVisibleStringConverter: AsnVisibleStringConverter, - AsnGeneralStringConverter: AsnGeneralStringConverter, - AsnCharacterStringConverter: AsnCharacterStringConverter, - AsnUTCTimeConverter: AsnUTCTimeConverter, - AsnGeneralizedTimeConverter: AsnGeneralizedTimeConverter - }); - var AsnTypeTypes; - - (function (AsnTypeTypes) { - AsnTypeTypes[AsnTypeTypes["Sequence"] = 0] = "Sequence"; - AsnTypeTypes[AsnTypeTypes["Set"] = 1] = "Set"; - AsnTypeTypes[AsnTypeTypes["Choice"] = 2] = "Choice"; - })(AsnTypeTypes || (AsnTypeTypes = {})); - - var AsnPropTypes; - - (function (AsnPropTypes) { - AsnPropTypes[AsnPropTypes["Any"] = 0] = "Any"; - AsnPropTypes[AsnPropTypes["Boolean"] = 1] = "Boolean"; - AsnPropTypes[AsnPropTypes["OctetString"] = 2] = "OctetString"; - AsnPropTypes[AsnPropTypes["BitString"] = 3] = "BitString"; - AsnPropTypes[AsnPropTypes["Integer"] = 4] = "Integer"; - AsnPropTypes[AsnPropTypes["Enumerated"] = 5] = "Enumerated"; - AsnPropTypes[AsnPropTypes["ObjectIdentifier"] = 6] = "ObjectIdentifier"; - AsnPropTypes[AsnPropTypes["Utf8String"] = 7] = "Utf8String"; - AsnPropTypes[AsnPropTypes["BmpString"] = 8] = "BmpString"; - AsnPropTypes[AsnPropTypes["UniversalString"] = 9] = "UniversalString"; - AsnPropTypes[AsnPropTypes["NumericString"] = 10] = "NumericString"; - AsnPropTypes[AsnPropTypes["PrintableString"] = 11] = "PrintableString"; - AsnPropTypes[AsnPropTypes["TeletexString"] = 12] = "TeletexString"; - AsnPropTypes[AsnPropTypes["VideotexString"] = 13] = "VideotexString"; - AsnPropTypes[AsnPropTypes["IA5String"] = 14] = "IA5String"; - AsnPropTypes[AsnPropTypes["GraphicString"] = 15] = "GraphicString"; - AsnPropTypes[AsnPropTypes["VisibleString"] = 16] = "VisibleString"; - AsnPropTypes[AsnPropTypes["GeneralString"] = 17] = "GeneralString"; - AsnPropTypes[AsnPropTypes["CharacterString"] = 18] = "CharacterString"; - AsnPropTypes[AsnPropTypes["UTCTime"] = 19] = "UTCTime"; - AsnPropTypes[AsnPropTypes["GeneralizedTime"] = 20] = "GeneralizedTime"; - AsnPropTypes[AsnPropTypes["DATE"] = 21] = "DATE"; - AsnPropTypes[AsnPropTypes["TimeOfDay"] = 22] = "TimeOfDay"; - AsnPropTypes[AsnPropTypes["DateTime"] = 23] = "DateTime"; - AsnPropTypes[AsnPropTypes["Duration"] = 24] = "Duration"; - AsnPropTypes[AsnPropTypes["TIME"] = 25] = "TIME"; - AsnPropTypes[AsnPropTypes["Null"] = 26] = "Null"; - })(AsnPropTypes || (AsnPropTypes = {})); - - var AsnSchemaStorage = function () { - function AsnSchemaStorage() { - _classCallCheck(this, AsnSchemaStorage); - - this.items = new Map(); - } - - _createClass(AsnSchemaStorage, [{ - key: "has", - value: function has(target) { - return this.items.has(target); - } - }, { - key: "get", - value: function get(target) { - var schema = this.items.get(target); - - if (!schema) { - throw new Error("Cannot get schema for current target"); - } - - return schema; - } - }, { - key: "cache", - value: function cache(target) { - var schema = this.get(target); - - if (!schema.schema) { - schema.schema = this.create(target, true); - } - } - }, { - key: "createDefault", - value: function createDefault(target) { - var schema = { - type: AsnTypeTypes.Sequence, - items: {} - }; - var parentSchema = this.findParentSchema(target); - - if (parentSchema) { - Object.assign(schema, parentSchema); - schema.items = Object.assign({}, schema.items, parentSchema.items); - } - - return schema; - } - }, { - key: "create", - value: function create(target, useNames) { - var schema = this.items.get(target) || this.createDefault(target); - var asn1Value = []; - - for (var key in schema.items) { - var item = schema.items[key]; - var name = useNames ? key : ""; - var asn1Item = void 0; - - if (typeof item.type === "number") { - var Asn1TypeName = AsnPropTypes[item.type]; - var Asn1Type = asn1$2[Asn1TypeName]; - - if (!Asn1Type) { - throw new Error("Cannot get ASN1 class by name '".concat(Asn1TypeName, "'")); - } - - asn1Item = new Asn1Type({ - name: name - }); - } else { - asn1Item = new asn1_7({ - name: name - }); - } - - var optional = !!item.optional || item.defaultValue !== undefined; - - if (item.repeated) { - asn1Item.name = ""; - asn1Item = new asn1_6({ - name: name, - value: asn1Item - }); - } - - if (item.context !== null && item.context !== undefined) { - if (item.implicit) { - if (typeof item.type === "number") { - asn1Value.push(new asn1_40({ - name: name, - optional: optional, - idBlock: { - tagClass: 3, - tagNumber: item.context - } - })); - } else { - this.cache(item.type); - var value = this.get(item.type).schema.valueBlock.value; - asn1Value.push(new asn1_39({ - name: name, - optional: optional, - idBlock: { - tagClass: 3, - tagNumber: item.context - }, - value: value - })); - } - } else { - asn1Value.push(new asn1_39({ - optional: optional, - idBlock: { - tagClass: 3, - tagNumber: item.context - }, - value: [asn1Item] - })); - } - } else { - asn1Item.optional = optional; - asn1Value.push(asn1Item); - } - } - - switch (schema.type) { - case AsnTypeTypes.Sequence: - return new asn1_36({ - value: asn1Value, - name: "" - }); - - case AsnTypeTypes.Set: - return new asn1_35({ - value: asn1Value, - name: "" - }); - - case AsnTypeTypes.Choice: - return new asn1_8({ - value: asn1Value, - name: "" - }); - - default: - throw new Error("Unsupported ASN1 type in use"); - } - } - }, { - key: "set", - value: function set(target, schema) { - this.items.set(target, schema); - return this; - } - }, { - key: "findParentSchema", - value: function findParentSchema(target) { - var parent = target.__proto__; - - if (parent) { - var schema = this.items.get(parent); - return schema || this.findParentSchema(parent); - } - - return null; - } - }]); - - return AsnSchemaStorage; - }(); - - var schemaStorage = new AsnSchemaStorage(); - - var AsnType = function AsnType(options) { - return function (target) { - var schema = schemaStorage.get(target); - Object.assign(schema, options); - }; - }; - - var AsnProp = function AsnProp(options) { - return function (target, propertyKey) { - var schema; - - if (!schemaStorage.has(target.constructor)) { - schema = schemaStorage.createDefault(target.constructor); - schemaStorage.set(target.constructor, schema); - } else { - schema = schemaStorage.get(target.constructor); - } - - var copyOptions = Object.assign({}, options); - - if (typeof copyOptions.type === "number" && !copyOptions.converter) { - var converterName = "Asn".concat(AsnPropTypes[options.type], "Converter"); - var defaultConverter = defaultConverters[converterName]; - - if (!defaultConverter) { - throw new Error("Cannot get '".concat(converterName, "' for property '").concat(propertyKey, "' of ").concat(target.constructor.name)); - } - - copyOptions.converter = defaultConverter; - } - - schema.items[propertyKey] = copyOptions; - }; - }; - - function isConvertible(target) { - if (target && target.prototype) { - if (target.prototype.toASN && target.prototype.fromASN) { - return true; - } else { - return isConvertible(target.prototype); - } - } else { - return !!(target && target.toASN && target.fromASN); - } - } - - var AsnParser = function () { - function AsnParser() { - _classCallCheck(this, AsnParser); - } - - _createClass(AsnParser, null, [{ - key: "parse", - value: function parse(data, target) { - var buf; - - if (data instanceof ArrayBuffer) { - buf = data; - } else if ((typeof Buffer === "undefined" ? "undefined" : _typeof(Buffer)) !== undefined && Buffer.isBuffer(data)) { - buf = new Uint8Array(data).buffer; - } else if (ArrayBuffer.isView(data)) { - buf = data.buffer; - } else { - throw new TypeError("Wrong type of 'data' argument"); - } - - var asn1Parsed = asn1_1(buf); - - if (asn1Parsed.result.error) { - throw new Error(asn1Parsed.result.error); - } - - var res = this.fromASN(asn1Parsed.result, target); - return res; - } - }, { - key: "fromASN", - value: function fromASN(asn1Schema, target) { - var _this66 = this; - - if (isConvertible(target)) { - var value = new target(); - return value.fromASN(asn1Schema); - } - - var schema = schemaStorage.get(target); - schemaStorage.cache(target); - var targetSchema = schema.schema; - - if (asn1Schema.constructor === asn1_39 && schema.type !== AsnTypeTypes.Choice) { - targetSchema = new asn1_39({ - idBlock: { - tagClass: 3, - tagNumber: asn1Schema.idBlock.tagNumber - }, - value: schema.schema.valueBlock.value - }); - - for (var key in schema.items) { - delete asn1Schema[key]; - } - } - - var asn1ComparedSchema = asn1_2(asn1Schema, asn1Schema, targetSchema); - - if (!asn1ComparedSchema.verified) { - throw new Error("Data does not match to ".concat(target.name, " ASN1 schema. ").concat(asn1ComparedSchema.result.error)); - } - - var res = new target(); - - var _loop = function _loop(_key3) { - if (!asn1Schema[_key3]) { - return "continue"; - } - - var schemaItem = schema.items[_key3]; - - if (typeof schemaItem.type === "number") { - var converter = schemaItem.converter; - - if (!converter) { - throw new Error("Converter is empty"); - } - - if (schemaItem.repeated) { - res[_key3] = Array.from(asn1Schema[_key3], function (element) { - return converter.fromASN(element); - }); - } else { - var _value2 = asn1Schema[_key3]; - - if (schemaItem.implicit) { - var Asn1TypeName = AsnPropTypes[schemaItem.type]; - var Asn1Type = asn1$2[Asn1TypeName]; - - if (!Asn1Type) { - throw new Error("Cannot get '".concat(Asn1TypeName, "' class from asn1js module")); - } - - var newItem = new Asn1Type(); - newItem.valueBlock = _value2.valueBlock; - _value2 = asn1_1(newItem.toBER(false)).result; - } - - res[_key3] = converter.fromASN(_value2); - } - } else { - if (schemaItem.repeated) { - res[_key3] = Array.from(asn1Schema[_key3], function (element) { - return _this66.fromASN(element, schemaItem.type); - }); - } else { - res[_key3] = _this66.fromASN(asn1Schema[_key3], schemaItem.type); - } - } - }; - - for (var _key3 in schema.items) { - var _ret = _loop(_key3); - - if (_ret === "continue") continue; - } - - res._cache = { - asn1: asn1Schema - }; - return res; - } - }]); - - return AsnParser; - }(); - - var AsnSerializer = function () { - function AsnSerializer() { - _classCallCheck(this, AsnSerializer); - } - - _createClass(AsnSerializer, null, [{ - key: "serialize", - value: function serialize(obj) { - return this.toASN(obj).toBER(false); - } - }, { - key: "toASN", - value: function toASN(obj) { - var _this67 = this; - - if (obj && isConvertible(obj.constructor)) { - return obj.toASN(); - } - - var target = obj.constructor; - var schema = schemaStorage.get(target); - schemaStorage.cache(target); - var asn1Value = []; - - for (var key in schema.items) { - var item = schema.items[key]; - var objProp = obj[key]; - - if (objProp === undefined || item.defaultValue === objProp) { - continue; - } - - var asn1Item = void 0; - - if (typeof item.type === "number") { - (function () { - var converter = item.converter; - - if (!converter) { - throw new Error("Property '".concat(key, "' doesn't have converter for type ").concat(AsnPropTypes[item.type], " in schema '").concat(target.name, "'")); - } - - if (item.repeated) { - asn1Item = Array.from(objProp, function (element) { - return converter.toASN(element); - }); - } else { - asn1Item = converter.toASN(objProp); - } - })(); - } else { - if (item.repeated) { - asn1Item = Array.from(objProp, function (element) { - return _this67.toASN(element); - }); - } else { - asn1Item = this.toASN(objProp); - } - } - - if (item.context !== null && item.context !== undefined) { - if (item.implicit) { - if (typeof item.type === "number") { - var value = {}; - value.valueHex = asn1Item.valueBlock.toBER(); - asn1Value.push(new asn1_40(Object.assign({ - optional: item.optional, - idBlock: { - tagClass: 3, - tagNumber: item.context - } - }, value))); - } else { - asn1Value.push(new asn1_39({ - optional: item.optional, - idBlock: { - tagClass: 3, - tagNumber: item.context - }, - value: asn1Item.valueBlock.value - })); - } - } else { - asn1Value.push(new asn1_39({ - optional: item.optional, - idBlock: { - tagClass: 3, - tagNumber: item.context - }, - value: [asn1Item] - })); - } - } else if (item.repeated) { - asn1Value = asn1Value.concat(asn1Item); - } else { - asn1Value.push(asn1Item); - } - } - - var asnSchema; - - switch (schema.type) { - case AsnTypeTypes.Sequence: - asnSchema = new asn1_36({ - value: asn1Value - }); - break; - - case AsnTypeTypes.Set: - asnSchema = new asn1_35({ - value: asn1Value - }); - break; - - case AsnTypeTypes.Choice: - if (!asn1Value[0]) { - throw new Error("Schema '".concat(target.name, "' has wrong data. Choice cannot be empty.")); - } - - asnSchema = asn1Value[0]; - break; - } - - return asnSchema; - } - }]); - - return AsnSerializer; - }(); - - var JsonError = function (_Error2) { - _inherits(JsonError, _Error2); - - function JsonError(message, innerError) { - var _this68; - - _classCallCheck(this, JsonError); - - _this68 = _possibleConstructorReturn(this, _getPrototypeOf(JsonError).call(this, innerError ? "".concat(message, ". See the inner exception for more details.") : message)); - _this68.message = message; - _this68.innerError = innerError; - return _this68; - } - - return JsonError; - }(_wrapNativeSuper(Error)); - - var TransformError = function (_JsonError) { - _inherits(TransformError, _JsonError); - - function TransformError(schema, message, innerError) { - var _this69; - - _classCallCheck(this, TransformError); - - _this69 = _possibleConstructorReturn(this, _getPrototypeOf(TransformError).call(this, message, innerError)); - _this69.schema = schema; - return _this69; - } - - return TransformError; - }(JsonError); - - var ParserError = function (_TransformError) { - _inherits(ParserError, _TransformError); - - function ParserError(schema, message, innerError) { - _classCallCheck(this, ParserError); - - return _possibleConstructorReturn(this, _getPrototypeOf(ParserError).call(this, schema, "JSON doesn't match to '".concat(schema.target.name, "' schema. ").concat(message), innerError)); - } - - return ParserError; - }(TransformError); - - var ValidationError = function (_JsonError2) { - _inherits(ValidationError, _JsonError2); - - function ValidationError() { - _classCallCheck(this, ValidationError); - - return _possibleConstructorReturn(this, _getPrototypeOf(ValidationError).apply(this, arguments)); - } - - return ValidationError; - }(JsonError); - - var SerializerError = function (_JsonError3) { - _inherits(SerializerError, _JsonError3); - - function SerializerError(schemaName, message, innerError) { - var _this70; - - _classCallCheck(this, SerializerError); - - _this70 = _possibleConstructorReturn(this, _getPrototypeOf(SerializerError).call(this, "Cannot serialize by '".concat(schemaName, "' schema. ").concat(message), innerError)); - _this70.schemaName = schemaName; - return _this70; - } - - return SerializerError; - }(JsonError); - - var KeyError = function (_ParserError) { - _inherits(KeyError, _ParserError); - - function KeyError(schema, keys) { - var _this71; - - var errors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; - - _classCallCheck(this, KeyError); - - _this71 = _possibleConstructorReturn(this, _getPrototypeOf(KeyError).call(this, schema, "Some keys doesn't match to schema")); - _this71.keys = keys; - _this71.errors = errors; - return _this71; - } - - return KeyError; - }(ParserError); - - var JsonPropTypes; - - (function (JsonPropTypes) { - JsonPropTypes[JsonPropTypes["Any"] = 0] = "Any"; - JsonPropTypes[JsonPropTypes["Boolean"] = 1] = "Boolean"; - JsonPropTypes[JsonPropTypes["Number"] = 2] = "Number"; - JsonPropTypes[JsonPropTypes["String"] = 3] = "String"; - })(JsonPropTypes || (JsonPropTypes = {})); - - function checkType(value, type) { - switch (type) { - case JsonPropTypes.Boolean: - return typeof value === "boolean"; - - case JsonPropTypes.Number: - return typeof value === "number"; - - case JsonPropTypes.String: - return typeof value === "string"; - } - - return true; - } - - function throwIfTypeIsWrong(value, type) { - if (!checkType(value, type)) { - throw new TypeError("Value must be ".concat(JsonPropTypes[type])); - } - } - - function isConvertible$1(target) { - if (target && target.prototype) { - if (target.prototype.toJSON && target.prototype.fromJSON) { - return true; - } else { - return isConvertible$1(target.prototype); - } - } else { - return !!(target && target.toJSON && target.fromJSON); - } - } - - var JsonSchemaStorage = function () { - function JsonSchemaStorage() { - _classCallCheck(this, JsonSchemaStorage); - - this.items = new Map(); - } - - _createClass(JsonSchemaStorage, [{ - key: "has", - value: function has(target) { - return this.items.has(target) || !!this.findParentSchema(target); - } - }, { - key: "get", - value: function get(target) { - var schema = this.items.get(target) || this.findParentSchema(target); - - if (!schema) { - throw new Error("Cannot get schema for current target"); - } - - return schema; - } - }, { - key: "create", - value: function create(target) { - var schema = { - names: {} - }; - var parentSchema = this.findParentSchema(target); - - if (parentSchema) { - Object.assign(schema, parentSchema); - schema.names = {}; - - for (var name in parentSchema.names) { - schema.names[name] = Object.assign({}, parentSchema.names[name]); - } - } - - schema.target = target; - return schema; - } - }, { - key: "set", - value: function set(target, schema) { - this.items.set(target, schema); - return this; - } - }, { - key: "findParentSchema", - value: function findParentSchema(target) { - var parent = target.__proto__; - - if (parent) { - var schema = this.items.get(parent); - return schema || this.findParentSchema(parent); - } - - return null; - } - }]); - - return JsonSchemaStorage; - }(); - - var DEFAULT_SCHEMA = "default"; - var schemaStorage$1 = new JsonSchemaStorage(); - - var PatternValidation = function () { - function PatternValidation(pattern) { - _classCallCheck(this, PatternValidation); - - this.pattern = new RegExp(pattern); - } - - _createClass(PatternValidation, [{ - key: "validate", - value: function validate(value) { - var pattern = new RegExp(this.pattern.source, this.pattern.flags); - - if (typeof value !== "string") { - throw new ValidationError("Incoming value must be string"); - } - - if (!pattern.exec(value)) { - throw new ValidationError("Value doesn't match to pattern '".concat(pattern.toString(), "'")); - } - } - }]); - - return PatternValidation; - }(); - - var InclusiveValidation = function () { - function InclusiveValidation() { - var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.MIN_VALUE; - var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE; - - _classCallCheck(this, InclusiveValidation); - - this.min = min; - this.max = max; - } - - _createClass(InclusiveValidation, [{ - key: "validate", - value: function validate(value) { - throwIfTypeIsWrong(value, JsonPropTypes.Number); - - if (!(this.min <= value && value <= this.max)) { - var min = this.min === Number.MIN_VALUE ? "MIN" : this.min; - var max = this.max === Number.MAX_VALUE ? "MAX" : this.max; - throw new ValidationError("Value doesn't match to diapason [".concat(min, ",").concat(max, "]")); - } - } - }]); - - return InclusiveValidation; - }(); - - var ExclusiveValidation = function () { - function ExclusiveValidation() { - var min = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Number.MIN_VALUE; - var max = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Number.MAX_VALUE; - - _classCallCheck(this, ExclusiveValidation); - - this.min = min; - this.max = max; - } - - _createClass(ExclusiveValidation, [{ - key: "validate", - value: function validate(value) { - throwIfTypeIsWrong(value, JsonPropTypes.Number); - - if (!(this.min < value && value < this.max)) { - var min = this.min === Number.MIN_VALUE ? "MIN" : this.min; - var max = this.max === Number.MAX_VALUE ? "MAX" : this.max; - throw new ValidationError("Value doesn't match to diapason (".concat(min, ",").concat(max, ")")); - } - } - }]); - - return ExclusiveValidation; - }(); - - var LengthValidation = function () { - function LengthValidation(length, minLength, maxLength) { - _classCallCheck(this, LengthValidation); - - this.length = length; - this.minLength = minLength; - this.maxLength = maxLength; - } - - _createClass(LengthValidation, [{ - key: "validate", - value: function validate(value) { - if (this.length !== undefined) { - if (value.length !== this.length) { - throw new ValidationError("Value length must be exactly ".concat(this.length, ".")); - } - - return; - } - - if (this.minLength !== undefined) { - if (value.length < this.minLength) { - throw new ValidationError("Value length must be more than ".concat(this.minLength, ".")); - } - } - - if (this.maxLength !== undefined) { - if (value.length > this.maxLength) { - throw new ValidationError("Value length must be less than ".concat(this.maxLength, ".")); - } - } - } - }]); - - return LengthValidation; - }(); - - var EnumerationValidation = function () { - function EnumerationValidation(enumeration) { - _classCallCheck(this, EnumerationValidation); - - this.enumeration = enumeration; - } - - _createClass(EnumerationValidation, [{ - key: "validate", - value: function validate(value) { - throwIfTypeIsWrong(value, JsonPropTypes.String); - - if (!this.enumeration.includes(value)) { - throw new ValidationError("Value must be one of ".concat(this.enumeration.map(function (v) { - return "'".concat(v, "'"); - }).join(", "))); - } - } - }]); - - return EnumerationValidation; - }(); - - var JsonTransform = function () { - function JsonTransform() { - _classCallCheck(this, JsonTransform); - } - - _createClass(JsonTransform, null, [{ - key: "checkValues", - value: function checkValues(data, schemaItem) { - var values = Array.isArray(data) ? data : [data]; - var _iteratorNormalCompletion7 = true; - var _didIteratorError7 = false; - var _iteratorError7 = undefined; - - try { - for (var _iterator7 = values[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { - var value = _step7.value; - var _iteratorNormalCompletion8 = true; - var _didIteratorError8 = false; - var _iteratorError8 = undefined; - - try { - for (var _iterator8 = schemaItem.validations[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { - var validation = _step8.value; - - if (validation instanceof LengthValidation && schemaItem.repeated) { - validation.validate(data); - } else { - validation.validate(value); - } - } - } catch (err) { - _didIteratorError8 = true; - _iteratorError8 = err; - } finally { - try { - if (!_iteratorNormalCompletion8 && _iterator8.return != null) { - _iterator8.return(); - } - } finally { - if (_didIteratorError8) { - throw _iteratorError8; - } - } - } - } - } catch (err) { - _didIteratorError7 = true; - _iteratorError7 = err; - } finally { - try { - if (!_iteratorNormalCompletion7 && _iterator7.return != null) { - _iterator7.return(); - } - } finally { - if (_didIteratorError7) { - throw _iteratorError7; - } - } - } - } - }, { - key: "checkTypes", - value: function checkTypes(value, schemaItem) { - if (schemaItem.repeated && !Array.isArray(value)) { - throw new TypeError("Value must be Array"); - } - - if (typeof schemaItem.type === "number") { - var values = Array.isArray(value) ? value : [value]; - var _iteratorNormalCompletion9 = true; - var _didIteratorError9 = false; - var _iteratorError9 = undefined; - - try { - for (var _iterator9 = values[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { - var v = _step9.value; - throwIfTypeIsWrong(v, schemaItem.type); - } - } catch (err) { - _didIteratorError9 = true; - _iteratorError9 = err; - } finally { - try { - if (!_iteratorNormalCompletion9 && _iterator9.return != null) { - _iterator9.return(); - } - } finally { - if (_didIteratorError9) { - throw _iteratorError9; - } - } - } - } - } - }, { - key: "getSchemaByName", - value: function getSchemaByName(schema) { - var name = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_SCHEMA; - return _objectSpread2({}, schema.names[DEFAULT_SCHEMA], {}, schema.names[name]); - } - }]); - - return JsonTransform; - }(); - - var JsonSerializer = function (_JsonTransform) { - _inherits(JsonSerializer, _JsonTransform); - - function JsonSerializer() { - _classCallCheck(this, JsonSerializer); - - return _possibleConstructorReturn(this, _getPrototypeOf(JsonSerializer).apply(this, arguments)); - } - - _createClass(JsonSerializer, null, [{ - key: "serialize", - value: function serialize(obj, options, replacer, space) { - var json = this.toJSON(obj, options); - return JSON.stringify(json, replacer, space); - } - }, { - key: "toJSON", - value: function toJSON(obj) { - var _this72 = this; - - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var res; - var targetSchema = options.targetSchema; - var schemaName = options.schemaName || DEFAULT_SCHEMA; - - if (isConvertible$1(obj)) { - return obj.toJSON(); - } - - if (Array.isArray(obj)) { - res = []; - var _iteratorNormalCompletion10 = true; - var _didIteratorError10 = false; - var _iteratorError10 = undefined; - - try { - for (var _iterator10 = obj[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { - var item = _step10.value; - res.push(this.toJSON(item, options)); - } - } catch (err) { - _didIteratorError10 = true; - _iteratorError10 = err; - } finally { - try { - if (!_iteratorNormalCompletion10 && _iterator10.return != null) { - _iterator10.return(); - } - } finally { - if (_didIteratorError10) { - throw _iteratorError10; - } - } - } - } else if (_typeof(obj) === "object") { - if (targetSchema && !schemaStorage$1.has(targetSchema)) { - throw new JsonError("Cannot get schema for `targetSchema` param"); - } - - targetSchema = targetSchema || obj.constructor; - - if (schemaStorage$1.has(targetSchema)) { - var schema = schemaStorage$1.get(targetSchema); - res = {}; - var namedSchema = this.getSchemaByName(schema, schemaName); - - for (var key in namedSchema) { - try { - var _ret2 = function () { - var item = namedSchema[key]; - var objItem = obj[key]; - var value = void 0; - - if (item.optional && objItem === undefined || item.defaultValue !== undefined && objItem === item.defaultValue) { - return "continue"; - } - - if (!item.optional && objItem === undefined) { - throw new SerializerError(targetSchema.name, "Property '".concat(key, "' is required.")); - } - - if (typeof item.type === "number") { - if (item.converter) { - if (item.repeated) { - value = objItem.map(function (el) { - return item.converter.toJSON(el, obj); - }); - } else { - value = item.converter.toJSON(objItem, obj); - } - } else { - value = objItem; - } - } else { - if (item.repeated) { - value = objItem.map(function (el) { - return _this72.toJSON(el, { - schemaName: schemaName - }); - }); - } else { - value = _this72.toJSON(objItem, { - schemaName: schemaName - }); - } - } - - _this72.checkTypes(value, item); - - _this72.checkValues(value, item); - - res[item.name || key] = value; - }(); - - if (_ret2 === "continue") continue; - } catch (e) { - if (e instanceof SerializerError) { - throw e; - } else { - throw new SerializerError(schema.target.name, "Property '".concat(key, "' is wrong. ").concat(e.message), e); - } - } - } - } else { - res = {}; - - for (var _key4 in obj) { - res[_key4] = this.toJSON(obj[_key4], { - schemaName: schemaName - }); - } - } - } else { - res = obj; - } - - return res; - } - }]); - - return JsonSerializer; - }(JsonTransform); - - var JsonParser = function (_JsonTransform2) { - _inherits(JsonParser, _JsonTransform2); - - function JsonParser() { - _classCallCheck(this, JsonParser); - - return _possibleConstructorReturn(this, _getPrototypeOf(JsonParser).apply(this, arguments)); - } - - _createClass(JsonParser, null, [{ - key: "parse", - value: function parse(data, options) { - var obj = JSON.parse(data); - return this.fromJSON(obj, options); - } - }, { - key: "fromJSON", - value: function fromJSON(target, options) { - var _this73 = this; - - var targetSchema = options.targetSchema; - var schemaName = options.schemaName || DEFAULT_SCHEMA; - var obj = new targetSchema(); - - if (isConvertible$1(obj)) { - return obj.fromJSON(target); - } - - var schema = schemaStorage$1.get(targetSchema); - var namedSchema = this.getSchemaByName(schema, schemaName); - var keyErrors = {}; - - if (options.strictProperty && !Array.isArray(target)) { - JsonParser.checkStrictProperty(target, namedSchema, schema); - } - - for (var key in namedSchema) { - try { - var _ret3 = function () { - var item = namedSchema[key]; - var name = item.name || key; - var value = target[name]; - - if (value === undefined && (item.optional || item.defaultValue !== undefined)) { - return "continue"; - } - - if (!item.optional && value === undefined) { - throw new ParserError(schema, "Property '".concat(name, "' is required.")); - } - - _this73.checkTypes(value, item); - - _this73.checkValues(value, item); - - if (typeof item.type === "number") { - if (item.converter) { - if (item.repeated) { - obj[key] = value.map(function (el) { - return item.converter.fromJSON(el, obj); - }); - } else { - obj[key] = item.converter.fromJSON(value, obj); - } - } else { - obj[key] = value; - } - } else { - var newOptions = _objectSpread2({}, options, { - targetSchema: item.type, - schemaName: schemaName - }); - - if (item.repeated) { - obj[key] = value.map(function (el) { - return _this73.fromJSON(el, newOptions); - }); - } else { - obj[key] = _this73.fromJSON(value, newOptions); - } - } - }(); - - if (_ret3 === "continue") continue; - } catch (e) { - if (!(e instanceof ParserError)) { - e = new ParserError(schema, "Property '".concat(key, "' is wrong. ").concat(e.message), e); - } - - if (options.strictAllKeys) { - keyErrors[key] = e; - } else { - throw e; - } - } - } - - var keys = Object.keys(keyErrors); - - if (keys.length) { - throw new KeyError(schema, keys, keyErrors); - } - - return obj; - } - }, { - key: "checkStrictProperty", - value: function checkStrictProperty(target, namedSchema, schema) { - var jsonProps = Object.keys(target); - var schemaProps = Object.keys(namedSchema); - var keys = []; - - for (var _i19 = 0, _jsonProps = jsonProps; _i19 < _jsonProps.length; _i19++) { - var key = _jsonProps[_i19]; - - if (schemaProps.indexOf(key) === -1) { - keys.push(key); - } - } - - if (keys.length) { - throw new KeyError(schema, keys); - } - } - }]); - - return JsonParser; - }(JsonTransform); - - function getValidations(item) { - var validations = []; - - if (item.pattern) { - validations.push(new PatternValidation(item.pattern)); - } - - if (item.type === JsonPropTypes.Number || item.type === JsonPropTypes.Any) { - if (item.minInclusive !== undefined || item.maxInclusive !== undefined) { - validations.push(new InclusiveValidation(item.minInclusive, item.maxInclusive)); - } - - if (item.minExclusive !== undefined || item.maxExclusive !== undefined) { - validations.push(new ExclusiveValidation(item.minExclusive, item.maxExclusive)); - } - - if (item.enumeration !== undefined) { - validations.push(new EnumerationValidation(item.enumeration)); - } - } - - if (item.type === JsonPropTypes.String || item.repeated || item.type === JsonPropTypes.Any) { - if (item.length !== undefined || item.minLength !== undefined || item.maxLength !== undefined) { - validations.push(new LengthValidation(item.length, item.minLength, item.maxLength)); - } - } - - return validations; - } - - var JsonProp = function JsonProp() { - var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - return function (target, propertyKey) { - var errorMessage = "Cannot set type for ".concat(propertyKey, " property of ").concat(target.constructor.name, " schema"); - var schema; - - if (!schemaStorage$1.has(target.constructor)) { - schema = schemaStorage$1.create(target.constructor); - schemaStorage$1.set(target.constructor, schema); - } else { - schema = schemaStorage$1.get(target.constructor); - - if (schema.target !== target.constructor) { - schema = schemaStorage$1.create(target.constructor); - schemaStorage$1.set(target.constructor, schema); - } - } - - var defaultSchema = { - type: JsonPropTypes.Any, - validations: [] - }; - var copyOptions = Object.assign(defaultSchema, options); - copyOptions.validations = getValidations(copyOptions); - - if (typeof copyOptions.type !== "number") { - if (!schemaStorage$1.has(copyOptions.type) && !isConvertible$1(copyOptions.type)) { - throw new Error("".concat(errorMessage, ". Assigning type doesn't have schema.")); - } - } - - var schemaNames; - - if (Array.isArray(options.schema)) { - schemaNames = options.schema; - } else { - schemaNames = [options.schema || DEFAULT_SCHEMA]; - } - - var _iteratorNormalCompletion11 = true; - var _didIteratorError11 = false; - var _iteratorError11 = undefined; - - try { - for (var _iterator11 = schemaNames[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { - var schemaName = _step11.value; - - if (!schema.names[schemaName]) { - schema.names[schemaName] = {}; - } - - var namedSchema = schema.names[schemaName]; - namedSchema[propertyKey] = copyOptions; - } - } catch (err) { - _didIteratorError11 = true; - _iteratorError11 = err; - } finally { - try { - if (!_iteratorNormalCompletion11 && _iterator11.return != null) { - _iterator11.return(); - } - } finally { - if (_didIteratorError11) { - throw _iteratorError11; - } - } - } - }; - }; - - var ObjectIdentifier = function ObjectIdentifier(value) { - _classCallCheck(this, ObjectIdentifier); - - if (value) { - this.value = value; - } - }; - - __decorate([AsnProp({ - type: AsnPropTypes.ObjectIdentifier - })], ObjectIdentifier.prototype, "value", void 0); - - ObjectIdentifier = __decorate([AsnType({ - type: AsnTypeTypes.Choice - })], ObjectIdentifier); - - var AlgorithmIdentifier = function AlgorithmIdentifier(params) { - _classCallCheck(this, AlgorithmIdentifier); - - Object.assign(this, params); - }; - - __decorate([AsnProp({ - type: AsnPropTypes.ObjectIdentifier - })], AlgorithmIdentifier.prototype, "algorithm", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Any, - optional: true - })], AlgorithmIdentifier.prototype, "parameters", void 0); - - var PrivateKeyInfo = function PrivateKeyInfo() { - _classCallCheck(this, PrivateKeyInfo); - - this.version = 0; - this.privateKeyAlgorithm = new AlgorithmIdentifier(); - this.privateKey = new ArrayBuffer(0); - }; - - __decorate([AsnProp({ - type: AsnPropTypes.Integer - })], PrivateKeyInfo.prototype, "version", void 0); - - __decorate([AsnProp({ - type: AlgorithmIdentifier - })], PrivateKeyInfo.prototype, "privateKeyAlgorithm", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.OctetString - })], PrivateKeyInfo.prototype, "privateKey", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Any, - optional: true - })], PrivateKeyInfo.prototype, "attributes", void 0); - - var PublicKeyInfo = function PublicKeyInfo() { - _classCallCheck(this, PublicKeyInfo); - - this.publicKeyAlgorithm = new AlgorithmIdentifier(); - this.publicKey = new ArrayBuffer(0); - }; - - __decorate([AsnProp({ - type: AlgorithmIdentifier - })], PublicKeyInfo.prototype, "publicKeyAlgorithm", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.BitString - })], PublicKeyInfo.prototype, "publicKey", void 0); - - var JsonBase64UrlArrayBufferConverter = { - fromJSON: function fromJSON(value) { - return Convert.FromBase64Url(value); - }, - toJSON: function toJSON(value) { - return Convert.ToBase64Url(new Uint8Array(value)); - } - }; - var Browser; - - (function (Browser) { - Browser["Unknown"] = "Unknown"; - Browser["IE"] = "Internet Explorer"; - Browser["Safari"] = "Safari"; - Browser["Edge"] = "Edge"; - Browser["Chrome"] = "Chrome"; - Browser["Firefox"] = "Firefox Mozilla"; - Browser["Mobile"] = "Mobile"; - })(Browser || (Browser = {})); - - function BrowserInfo() { - var res = { - name: Browser.Unknown, - version: "0" - }; - - if (typeof self === "undefined") { - return res; - } - - var userAgent = self.navigator.userAgent; - var reg; - - if (reg = /edge\/([\d\.]+)/i.exec(userAgent)) { - res.name = Browser.Edge; - res.version = reg[1]; - } else if (/msie/i.test(userAgent)) { - res.name = Browser.IE; - res.version = /msie ([\d\.]+)/i.exec(userAgent)[1]; - } else if (/Trident/i.test(userAgent)) { - res.name = Browser.IE; - res.version = /rv:([\d\.]+)/i.exec(userAgent)[1]; - } else if (/chrome/i.test(userAgent)) { - res.name = Browser.Chrome; - res.version = /chrome\/([\d\.]+)/i.exec(userAgent)[1]; - } else if (/firefox/i.test(userAgent)) { - res.name = Browser.Firefox; - res.version = /firefox\/([\d\.]+)/i.exec(userAgent)[1]; - } else if (/mobile/i.test(userAgent)) { - res.name = Browser.Mobile; - res.version = /mobile\/([\w]+)/i.exec(userAgent)[1]; - } else if (/safari/i.test(userAgent)) { - res.name = Browser.Safari; - res.version = /version\/([\d\.]+)/i.exec(userAgent)[1]; - } - - return res; - } - - function concat() { - for (var _len3 = arguments.length, buf = new Array(_len3), _key5 = 0; _key5 < _len3; _key5++) { - buf[_key5] = arguments[_key5]; - } - - var res = new Uint8Array(buf.map(function (item) { - return item.length; - }).reduce(function (prev, cur) { - return prev + cur; - })); - var offset = 0; - buf.forEach(function (item, index) { - for (var i = 0; i < item.length; i++) { - res[offset + i] = item[i]; - } - - offset += item.length; - }); - return res; - } - - var AsnIntegerArrayBufferConverter$1 = { - fromASN: function fromASN(value) { - var valueHex = value.valueBlock.valueHex; - return !new Uint8Array(valueHex)[0] ? value.valueBlock.valueHex.slice(1) : value.valueBlock.valueHex; - }, - toASN: function toASN(value) { - var valueHex = new Uint8Array(value)[0] > 127 ? concat(new Uint8Array([0]), new Uint8Array(value)) : new Uint8Array(value); - return new asn1_31({ - valueHex: new Uint8Array(valueHex).buffer - }); - } - }; - - var RsaPrivateKey = function RsaPrivateKey() { - _classCallCheck(this, RsaPrivateKey); - - this.version = 0; - this.modulus = new ArrayBuffer(0); - this.publicExponent = new ArrayBuffer(0); - this.privateExponent = new ArrayBuffer(0); - this.prime1 = new ArrayBuffer(0); - this.prime2 = new ArrayBuffer(0); - this.exponent1 = new ArrayBuffer(0); - this.exponent2 = new ArrayBuffer(0); - this.coefficient = new ArrayBuffer(0); - }; - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerConverter - })], RsaPrivateKey.prototype, "version", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "n", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPrivateKey.prototype, "modulus", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "e", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPrivateKey.prototype, "publicExponent", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "d", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPrivateKey.prototype, "privateExponent", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "p", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPrivateKey.prototype, "prime1", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "q", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPrivateKey.prototype, "prime2", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "dp", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPrivateKey.prototype, "exponent1", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "dq", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPrivateKey.prototype, "exponent2", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "qi", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPrivateKey.prototype, "coefficient", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Any, - optional: true - })], RsaPrivateKey.prototype, "otherPrimeInfos", void 0); - - var RsaPublicKey = function RsaPublicKey() { - _classCallCheck(this, RsaPublicKey); - - this.modulus = new ArrayBuffer(0); - this.publicExponent = new ArrayBuffer(0); - }; - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "n", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPublicKey.prototype, "modulus", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerArrayBufferConverter$1 - }), JsonProp({ - name: "e", - converter: JsonBase64UrlArrayBufferConverter - })], RsaPublicKey.prototype, "publicExponent", void 0); - - var EcPublicKey = function () { - function EcPublicKey(value) { - _classCallCheck(this, EcPublicKey); - - this.value = new ArrayBuffer(0); - - if (value) { - this.value = value; - } - } - - _createClass(EcPublicKey, [{ - key: "toJSON", - value: function toJSON() { - var bytes = new Uint8Array(this.value); - - if (bytes[0] !== 0x04) { - throw new CryptoError("Wrong ECPoint. Current version supports only Uncompressed (0x04) point"); - } - - bytes = new Uint8Array(this.value.slice(1)); - var size = bytes.length / 2; - var offset = 0; - var json = { - x: Convert.ToBase64Url(bytes.buffer.slice(offset, offset + size)), - y: Convert.ToBase64Url(bytes.buffer.slice(offset + size, offset + size + size)) - }; - return json; - } - }, { - key: "fromJSON", - value: function fromJSON(json) { - if (!("x" in json)) { - throw new Error("x: Missing required property"); - } - - if (!("y" in json)) { - throw new Error("y: Missing required property"); - } - - var x = Convert.FromBase64Url(json.x); - var y = Convert.FromBase64Url(json.y); - var value = concat(new Uint8Array([0x04]), new Uint8Array(x), new Uint8Array(y)); - this.value = new Uint8Array(value).buffer; - return this; - } - }]); - - return EcPublicKey; - }(); - - __decorate([AsnProp({ - type: AsnPropTypes.OctetString - })], EcPublicKey.prototype, "value", void 0); - - EcPublicKey = __decorate([AsnType({ - type: AsnTypeTypes.Choice - })], EcPublicKey); - - var EcPrivateKey = function () { - function EcPrivateKey() { - _classCallCheck(this, EcPrivateKey); - - this.version = 1; - this.privateKey = new ArrayBuffer(0); - } - - _createClass(EcPrivateKey, [{ - key: "fromJSON", - value: function fromJSON(json) { - if (!("d" in json)) { - throw new Error("d: Missing required property"); - } - - this.privateKey = Convert.FromBase64Url(json.d); - - if ("x" in json) { - var publicKey = new EcPublicKey(); - publicKey.fromJSON(json); - this.publicKey = AsnSerializer.toASN(publicKey).valueBlock.valueHex; - } - - return this; - } - }, { - key: "toJSON", - value: function toJSON() { - var jwk = {}; - jwk.d = Convert.ToBase64Url(this.privateKey); - - if (this.publicKey) { - Object.assign(jwk, new EcPublicKey(this.publicKey).toJSON()); - } - - return jwk; - } - }]); - - return EcPrivateKey; - }(); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerConverter - })], EcPrivateKey.prototype, "version", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.OctetString - })], EcPrivateKey.prototype, "privateKey", void 0); - - __decorate([AsnProp({ - context: 0, - type: AsnPropTypes.Any, - optional: true - })], EcPrivateKey.prototype, "parameters", void 0); - - __decorate([AsnProp({ - context: 1, - type: AsnPropTypes.BitString, - optional: true - })], EcPrivateKey.prototype, "publicKey", void 0); - - var AsnIntegerWithoutPaddingConverter = { - fromASN: function fromASN(value) { - var bytes = new Uint8Array(value.valueBlock.valueHex); - return bytes[0] === 0 ? bytes.buffer.slice(1) : bytes.buffer; - }, - toASN: function toASN(value) { - var bytes = new Uint8Array(value); - - if (bytes[0] > 127) { - var newValue = new Uint8Array(bytes.length + 1); - newValue.set(bytes, 1); - return new asn1_31({ - valueHex: newValue - }); - } - - return new asn1_31({ - valueHex: value - }); - } - }; - - var EcDsaSignature = function EcDsaSignature() { - _classCallCheck(this, EcDsaSignature); - - this.r = new ArrayBuffer(0); - this.s = new ArrayBuffer(0); - }; - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerWithoutPaddingConverter - })], EcDsaSignature.prototype, "r", void 0); - - __decorate([AsnProp({ - type: AsnPropTypes.Integer, - converter: AsnIntegerWithoutPaddingConverter - })], EcDsaSignature.prototype, "s", void 0); - - var Debug = function () { - function Debug() { - _classCallCheck(this, Debug); - } - - _createClass(Debug, null, [{ - key: "log", - value: function log(message) { - for (var _len4 = arguments.length, optionalParams = new Array(_len4 > 1 ? _len4 - 1 : 0), _key6 = 1; _key6 < _len4; _key6++) { - optionalParams[_key6 - 1] = arguments[_key6]; - } - - if (this.enabled) { - console.log.apply(console, arguments); - } - } - }, { - key: "error", - value: function error(message) { - for (var _len5 = arguments.length, optionalParams = new Array(_len5 > 1 ? _len5 - 1 : 0), _key7 = 1; _key7 < _len5; _key7++) { - optionalParams[_key7 - 1] = arguments[_key7]; - } - - if (this.enabled) { - console.error.apply(console, arguments); - } - } - }, { - key: "info", - value: function info(message) { - for (var _len6 = arguments.length, optionalParams = new Array(_len6 > 1 ? _len6 - 1 : 0), _key8 = 1; _key8 < _len6; _key8++) { - optionalParams[_key8 - 1] = arguments[_key8]; - } - - if (this.enabled) { - console.info.apply(console, arguments); - } - } - }, { - key: "warn", - value: function warn(message) { - for (var _len7 = arguments.length, optionalParams = new Array(_len7 > 1 ? _len7 - 1 : 0), _key9 = 1; _key9 < _len7; _key9++) { - optionalParams[_key9 - 1] = arguments[_key9]; - } - - if (this.enabled) { - console.warn.apply(console, arguments); - } - } - }, { - key: "trace", - value: function trace(message) { - for (var _len8 = arguments.length, optionalParams = new Array(_len8 > 1 ? _len8 - 1 : 0), _key10 = 1; _key10 < _len8; _key10++) { - optionalParams[_key10 - 1] = arguments[_key10]; - } - - if (this.enabled) { - console.trace.apply(console, arguments); - } - } - }, { - key: "enabled", - get: function get() { - return typeof self !== "undefined" && self.PV_WEBCRYPTO_LINER_LOG; - } - }]); - - return Debug; - }(); - - var CryptoKey$1 = function (_CryptoKey) { - _inherits(CryptoKey$1, _CryptoKey); - - function CryptoKey$1(algorithm, extractable, type, usages) { - var _this74; - - _classCallCheck(this, CryptoKey$1); - - _this74 = _possibleConstructorReturn(this, _getPrototypeOf(CryptoKey$1).call(this)); - _this74.extractable = extractable; - _this74.type = type; - _this74.usages = usages; - _this74.algorithm = Object.assign({}, algorithm); - return _this74; - } - - return CryptoKey$1; - }(CryptoKey); - - function isAlgorithm(algorithm, name) { - return algorithm.name.toUpperCase() === name.toUpperCase(); - } - - var AesCryptoKey = function (_CryptoKey$) { - _inherits(AesCryptoKey, _CryptoKey$); - - function AesCryptoKey(algorithm, extractable, usages, raw) { - var _this75; - - _classCallCheck(this, AesCryptoKey); - - _this75 = _possibleConstructorReturn(this, _getPrototypeOf(AesCryptoKey).call(this, algorithm, extractable, "secret", usages)); - _this75.raw = raw; - return _this75; - } - - _createClass(AesCryptoKey, [{ - key: "toJSON", - value: function toJSON() { - var jwk = { - kty: "oct", - alg: this.getJwkAlgorithm(), - k: Convert.ToBase64Url(this.raw), - ext: this.extractable, - key_ops: this.usages - }; - return jwk; - } - }, { - key: "getJwkAlgorithm", - value: function getJwkAlgorithm() { - switch (this.algorithm.name.toUpperCase()) { - case "AES-CBC": - return "A".concat(this.algorithm.length, "CBC"); - - case "AES-CTR": - return "A".concat(this.algorithm.length, "CTR"); - - case "AES-GCM": - return "A".concat(this.algorithm.length, "GCM"); - - case "AES-ECB": - return "A".concat(this.algorithm.length, "ECB"); - - default: - throw new AlgorithmError("Unsupported algorithm name"); - } - } - }]); - - return AesCryptoKey; - }(CryptoKey$1); - - var AesCrypto = function () { - function AesCrypto() { - _classCallCheck(this, AesCrypto); - } - - _createClass(AesCrypto, null, [{ - key: "checkCryptoKey", - value: function checkCryptoKey(key) { - if (!(key instanceof AesCryptoKey)) { - throw new TypeError("key: Is not AesCryptoKey"); - } - } - }, { - key: "generateKey", - value: function generateKey(algorithm, extractable, usages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee() { - var raw; - return regeneratorRuntime.wrap(function _callee$(_context31) { - while (1) { - switch (_context31.prev = _context31.next) { - case 0: - raw = exports.nativeCrypto.getRandomValues(new Uint8Array(algorithm.length / 8)); - return _context31.abrupt("return", new AesCryptoKey(algorithm, extractable, usages, raw)); - - case 2: - case "end": - return _context31.stop(); - } - } - }, _callee); - })); - } - }, { - key: "encrypt", - value: function encrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee2() { - return regeneratorRuntime.wrap(function _callee2$(_context32) { - while (1) { - switch (_context32.prev = _context32.next) { - case 0: - return _context32.abrupt("return", this.cipher(algorithm, key, BufferSourceConverter.toUint8Array(data), true)); - - case 1: - case "end": - return _context32.stop(); - } - } - }, _callee2, this); - })); - } - }, { - key: "decrypt", - value: function decrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee3() { - return regeneratorRuntime.wrap(function _callee3$(_context33) { - while (1) { - switch (_context33.prev = _context33.next) { - case 0: - return _context33.abrupt("return", this.cipher(algorithm, key, BufferSourceConverter.toUint8Array(data), false)); - - case 1: - case "end": - return _context33.stop(); - } - } - }, _callee3, this); - })); - } - }, { - key: "exportKey", - value: function exportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee4() { - return regeneratorRuntime.wrap(function _callee4$(_context34) { - while (1) { - switch (_context34.prev = _context34.next) { - case 0: - _context34.t0 = format; - _context34.next = _context34.t0 === "jwk" ? 3 : _context34.t0 === "raw" ? 4 : 5; - break; - - case 3: - return _context34.abrupt("return", key.toJSON()); - - case 4: - return _context34.abrupt("return", key.raw.buffer); - - case 5: - throw new OperationError("format: Must be 'jwk' or 'raw'"); - - case 6: - case "end": - return _context34.stop(); - } - } - }, _callee4); - })); - } - }, { - key: "importKey", - value: function importKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee5() { - var raw, key; - return regeneratorRuntime.wrap(function _callee5$(_context35) { - while (1) { - switch (_context35.prev = _context35.next) { - case 0: - if (isJWK(keyData)) { - raw = Convert.FromBase64Url(keyData.k); - } else { - raw = BufferSourceConverter.toArrayBuffer(keyData); - } - - _context35.t0 = raw.byteLength << 3; - _context35.next = _context35.t0 === 128 ? 4 : _context35.t0 === 192 ? 4 : _context35.t0 === 256 ? 4 : 5; - break; - - case 4: - return _context35.abrupt("break", 6); - - case 5: - throw new OperationError("keyData: Is wrong key length"); - - case 6: - key = new AesCryptoKey({ - name: algorithm.name, - length: raw.byteLength << 3 - }, extractable, keyUsages, new Uint8Array(raw)); - return _context35.abrupt("return", key); - - case 8: - case "end": - return _context35.stop(); - } - } - }, _callee5); - })); - } - }, { - key: "cipher", - value: function cipher(algorithm, key, data, encrypt) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee6() { - var action, result, iv, _iv, additionalData, tagLength; - - return regeneratorRuntime.wrap(function _callee6$(_context36) { - while (1) { - switch (_context36.prev = _context36.next) { - case 0: - action = encrypt ? "encrypt" : "decrypt"; - - if (!isAlgorithm(algorithm, AesCrypto.AesCBC)) { - _context36.next = 6; - break; - } - - iv = BufferSourceConverter.toUint8Array(algorithm.iv); - result = asmcrypto_js.AES_CBC[action](data, key.raw, undefined, iv); - _context36.next = 18; - break; - - case 6: - if (!isAlgorithm(algorithm, AesCrypto.AesGCM)) { - _context36.next = 13; - break; - } - - _iv = BufferSourceConverter.toUint8Array(algorithm.iv); - - if (algorithm.additionalData) { - additionalData = BufferSourceConverter.toArrayBuffer(algorithm.additionalData); - } - - tagLength = (algorithm.tagLength || 128) / 8; - result = asmcrypto_js.AES_GCM[action](data, key.raw, _iv, additionalData, tagLength); - _context36.next = 18; - break; - - case 13: - if (!isAlgorithm(algorithm, AesCrypto.AesECB)) { - _context36.next = 17; - break; - } - - result = asmcrypto_js.AES_ECB[action](data, key.raw, true); - _context36.next = 18; - break; - - case 17: - throw new OperationError("algorithm: Is not recognized"); - - case 18: - return _context36.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 19: - case "end": - return _context36.stop(); - } - } - }, _callee6); - })); - } - }]); - - return AesCrypto; - }(); - - AesCrypto.AesCBC = "AES-CBC"; - AesCrypto.AesECB = "AES-ECB"; - AesCrypto.AesGCM = "AES-GCM"; - - var AesCbcProvider$1 = function (_AesCbcProvider) { - _inherits(AesCbcProvider$1, _AesCbcProvider); - - function AesCbcProvider$1() { - _classCallCheck(this, AesCbcProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(AesCbcProvider$1).apply(this, arguments)); - } - - _createClass(AesCbcProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee7() { - return regeneratorRuntime.wrap(function _callee7$(_context37) { - while (1) { - switch (_context37.prev = _context37.next) { - case 0: - return _context37.abrupt("return", AesCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context37.stop(); - } - } - }, _callee7); - })); - } - }, { - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee8() { - return regeneratorRuntime.wrap(function _callee8$(_context38) { - while (1) { - switch (_context38.prev = _context38.next) { - case 0: - return _context38.abrupt("return", AesCrypto.encrypt(algorithm, key, data)); - - case 1: - case "end": - return _context38.stop(); - } - } - }, _callee8); - })); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee9() { - return regeneratorRuntime.wrap(function _callee9$(_context39) { - while (1) { - switch (_context39.prev = _context39.next) { - case 0: - return _context39.abrupt("return", AesCrypto.decrypt(algorithm, key, data)); - - case 1: - case "end": - return _context39.stop(); - } - } - }, _callee9); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee10() { - return regeneratorRuntime.wrap(function _callee10$(_context40) { - while (1) { - switch (_context40.prev = _context40.next) { - case 0: - return _context40.abrupt("return", AesCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context40.stop(); - } - } - }, _callee10); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee11() { - return regeneratorRuntime.wrap(function _callee11$(_context41) { - while (1) { - switch (_context41.prev = _context41.next) { - case 0: - return _context41.abrupt("return", AesCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context41.stop(); - } - } - }, _callee11); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(AesCbcProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - AesCrypto.checkCryptoKey(key); - } - }]); - - return AesCbcProvider$1; - }(AesCbcProvider); - - var AesEcbProvider$1 = function (_AesEcbProvider) { - _inherits(AesEcbProvider$1, _AesEcbProvider); - - function AesEcbProvider$1() { - _classCallCheck(this, AesEcbProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(AesEcbProvider$1).apply(this, arguments)); - } - - _createClass(AesEcbProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee12() { - return regeneratorRuntime.wrap(function _callee12$(_context42) { - while (1) { - switch (_context42.prev = _context42.next) { - case 0: - return _context42.abrupt("return", AesCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context42.stop(); - } - } - }, _callee12); - })); - } - }, { - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee13() { - return regeneratorRuntime.wrap(function _callee13$(_context43) { - while (1) { - switch (_context43.prev = _context43.next) { - case 0: - return _context43.abrupt("return", AesCrypto.encrypt(algorithm, key, data)); - - case 1: - case "end": - return _context43.stop(); - } - } - }, _callee13); - })); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee14() { - return regeneratorRuntime.wrap(function _callee14$(_context44) { - while (1) { - switch (_context44.prev = _context44.next) { - case 0: - return _context44.abrupt("return", AesCrypto.decrypt(algorithm, key, data)); - - case 1: - case "end": - return _context44.stop(); - } - } - }, _callee14); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee15() { - return regeneratorRuntime.wrap(function _callee15$(_context45) { - while (1) { - switch (_context45.prev = _context45.next) { - case 0: - return _context45.abrupt("return", AesCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context45.stop(); - } - } - }, _callee15); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee16() { - return regeneratorRuntime.wrap(function _callee16$(_context46) { - while (1) { - switch (_context46.prev = _context46.next) { - case 0: - return _context46.abrupt("return", AesCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context46.stop(); - } - } - }, _callee16); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(AesEcbProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - AesCrypto.checkCryptoKey(key); - } - }]); - - return AesEcbProvider$1; - }(AesEcbProvider); - - var AesGcmProvider$1 = function (_AesGcmProvider) { - _inherits(AesGcmProvider$1, _AesGcmProvider); - - function AesGcmProvider$1() { - _classCallCheck(this, AesGcmProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(AesGcmProvider$1).apply(this, arguments)); - } - - _createClass(AesGcmProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee17() { - return regeneratorRuntime.wrap(function _callee17$(_context47) { - while (1) { - switch (_context47.prev = _context47.next) { - case 0: - return _context47.abrupt("return", AesCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context47.stop(); - } - } - }, _callee17); - })); - } - }, { - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee18() { - return regeneratorRuntime.wrap(function _callee18$(_context48) { - while (1) { - switch (_context48.prev = _context48.next) { - case 0: - return _context48.abrupt("return", AesCrypto.encrypt(algorithm, key, data)); - - case 1: - case "end": - return _context48.stop(); - } - } - }, _callee18); - })); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee19() { - return regeneratorRuntime.wrap(function _callee19$(_context49) { - while (1) { - switch (_context49.prev = _context49.next) { - case 0: - return _context49.abrupt("return", AesCrypto.decrypt(algorithm, key, data)); - - case 1: - case "end": - return _context49.stop(); - } - } - }, _callee19); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee20() { - return regeneratorRuntime.wrap(function _callee20$(_context50) { - while (1) { - switch (_context50.prev = _context50.next) { - case 0: - return _context50.abrupt("return", AesCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context50.stop(); - } - } - }, _callee20); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee21() { - return regeneratorRuntime.wrap(function _callee21$(_context51) { - while (1) { - switch (_context51.prev = _context51.next) { - case 0: - return _context51.abrupt("return", AesCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context51.stop(); - } - } - }, _callee21); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(AesGcmProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - AesCrypto.checkCryptoKey(key); - } - }]); - - return AesGcmProvider$1; - }(AesGcmProvider); - - var AesCtrProvider$1 = function (_AesCtrProvider) { - _inherits(AesCtrProvider$1, _AesCtrProvider); - - function AesCtrProvider$1() { - _classCallCheck(this, AesCtrProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(AesCtrProvider$1).apply(this, arguments)); - } - - _createClass(AesCtrProvider$1, [{ - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee22() { - var result; - return regeneratorRuntime.wrap(function _callee22$(_context52) { - while (1) { - switch (_context52.prev = _context52.next) { - case 0: - result = new asmcrypto_js.AES_CTR(key.raw, BufferSourceConverter.toUint8Array(algorithm.counter)).encrypt(BufferSourceConverter.toUint8Array(data)); - return _context52.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 2: - case "end": - return _context52.stop(); - } - } - }, _callee22); - })); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee23() { - var result; - return regeneratorRuntime.wrap(function _callee23$(_context53) { - while (1) { - switch (_context53.prev = _context53.next) { - case 0: - result = new asmcrypto_js.AES_CTR(key.raw, BufferSourceConverter.toUint8Array(algorithm.counter)).decrypt(BufferSourceConverter.toUint8Array(data)); - return _context53.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 2: - case "end": - return _context53.stop(); - } - } - }, _callee23); - })); - } - }, { - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee24() { - return regeneratorRuntime.wrap(function _callee24$(_context54) { - while (1) { - switch (_context54.prev = _context54.next) { - case 0: - return _context54.abrupt("return", AesCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context54.stop(); - } - } - }, _callee24); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee25() { - return regeneratorRuntime.wrap(function _callee25$(_context55) { - while (1) { - switch (_context55.prev = _context55.next) { - case 0: - return _context55.abrupt("return", AesCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context55.stop(); - } - } - }, _callee25); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee26() { - return regeneratorRuntime.wrap(function _callee26$(_context56) { - while (1) { - switch (_context56.prev = _context56.next) { - case 0: - return _context56.abrupt("return", AesCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context56.stop(); - } - } - }, _callee26); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(AesCtrProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - AesCrypto.checkCryptoKey(key); - } - }]); - - return AesCtrProvider$1; - }(AesCtrProvider); - - var AesKwProvider$1 = function (_AesKwProvider) { - _inherits(AesKwProvider$1, _AesKwProvider); - - function AesKwProvider$1() { - _classCallCheck(this, AesKwProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(AesKwProvider$1).apply(this, arguments)); - } - - _createClass(AesKwProvider$1, [{ - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee27() { - return regeneratorRuntime.wrap(function _callee27$(_context57) { - while (1) { - switch (_context57.prev = _context57.next) { - case 0: - throw new Error("Method not implemented."); - - case 1: - case "end": - return _context57.stop(); - } - } - }, _callee27); - })); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee28() { - return regeneratorRuntime.wrap(function _callee28$(_context58) { - while (1) { - switch (_context58.prev = _context58.next) { - case 0: - throw new Error("Method not implemented."); - - case 1: - case "end": - return _context58.stop(); - } - } - }, _callee28); - })); - } - }, { - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee29() { - return regeneratorRuntime.wrap(function _callee29$(_context59) { - while (1) { - switch (_context59.prev = _context59.next) { - case 0: - throw new Error("Method not implemented."); - - case 1: - case "end": - return _context59.stop(); - } - } - }, _callee29); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee30() { - return regeneratorRuntime.wrap(function _callee30$(_context60) { - while (1) { - switch (_context60.prev = _context60.next) { - case 0: - throw new Error("Method not implemented."); - - case 1: - case "end": - return _context60.stop(); - } - } - }, _callee30); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee31() { - return regeneratorRuntime.wrap(function _callee31$(_context61) { - while (1) { - switch (_context61.prev = _context61.next) { - case 0: - throw new Error("Method not implemented."); - - case 1: - case "end": - return _context61.stop(); - } - } - }, _callee31); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(AesKwProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - AesCrypto.checkCryptoKey(key); - } - }]); - - return AesKwProvider$1; - }(AesKwProvider); - - var RsaCryptoKey = function (_CryptoKey$2) { - _inherits(RsaCryptoKey, _CryptoKey$2); - - function RsaCryptoKey(algorithm, extractable, type, usages, data) { - var _this76; - - _classCallCheck(this, RsaCryptoKey); - - _this76 = _possibleConstructorReturn(this, _getPrototypeOf(RsaCryptoKey).call(this, algorithm, extractable, type, usages)); - _this76.data = data; - return _this76; - } - - return RsaCryptoKey; - }(CryptoKey$1); - - var RsaCrypto = function () { - function RsaCrypto() { - _classCallCheck(this, RsaCrypto); - } - - _createClass(RsaCrypto, null, [{ - key: "checkCryptoKey", - value: function checkCryptoKey(key) { - if (!(key instanceof RsaCryptoKey)) { - throw new TypeError("key: Is not RsaCryptoKey"); - } - } - }, { - key: "generateKey", - value: function generateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee32() { - var _this77 = this; - - var alg, keys, crypto, pkcs8, privateKey, spki, publicKey; - return regeneratorRuntime.wrap(function _callee32$(_context62) { - while (1) { - switch (_context62.prev = _context62.next) { - case 0: - alg = { - name: "RSA-PSS", - hash: "SHA-256", - publicExponent: algorithm.publicExponent, - modulusLength: algorithm.modulusLength - }; - _context62.next = 3; - return exports.nativeSubtle.generateKey(alg, true, ["sign", "verify"]); - - case 3: - keys = _context62.sent; - crypto = new Crypto$1(); - _context62.next = 7; - return crypto.subtle.exportKey("pkcs8", keys.privateKey); - - case 7: - pkcs8 = _context62.sent; - _context62.next = 10; - return crypto.subtle.importKey("pkcs8", pkcs8, algorithm, extractable, keyUsages.filter(function (o) { - return _this77.privateUsages.includes(o); - })); - - case 10: - privateKey = _context62.sent; - _context62.next = 13; - return crypto.subtle.exportKey("spki", keys.publicKey); - - case 13: - spki = _context62.sent; - _context62.next = 16; - return crypto.subtle.importKey("spki", spki, algorithm, true, keyUsages.filter(function (o) { - return _this77.publicUsages.includes(o); - })); - - case 16: - publicKey = _context62.sent; - return _context62.abrupt("return", { - privateKey: privateKey, - publicKey: publicKey - }); - - case 18: - case "end": - return _context62.stop(); - } - } - }, _callee32); - })); - } - }, { - key: "exportKey", - value: function exportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee33() { - return regeneratorRuntime.wrap(function _callee33$(_context63) { - while (1) { - switch (_context63.prev = _context63.next) { - case 0: - _context63.t0 = format; - _context63.next = _context63.t0 === "pkcs8" ? 3 : _context63.t0 === "spki" ? 4 : _context63.t0 === "jwk" ? 5 : 6; - break; - - case 3: - return _context63.abrupt("return", this.exportPkcs8Key(key)); - - case 4: - return _context63.abrupt("return", this.exportSpkiKey(key)); - - case 5: - return _context63.abrupt("return", this.exportJwkKey(key)); - - case 6: - throw new OperationError("format: Must be 'jwk', 'pkcs8' or 'spki'"); - - case 7: - case "end": - return _context63.stop(); - } - } - }, _callee33, this); - })); - } - }, { - key: "importKey", - value: function importKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee34() { - var asmKey, key; - return regeneratorRuntime.wrap(function _callee34$(_context64) { - while (1) { - switch (_context64.prev = _context64.next) { - case 0: - _context64.t0 = format; - _context64.next = _context64.t0 === "pkcs8" ? 3 : _context64.t0 === "spki" ? 5 : _context64.t0 === "jwk" ? 7 : 9; - break; - - case 3: - asmKey = this.importPkcs8Key(keyData); - return _context64.abrupt("break", 10); - - case 5: - asmKey = this.importSpkiKey(keyData); - return _context64.abrupt("break", 10); - - case 7: - asmKey = this.importJwkKey(keyData); - return _context64.abrupt("break", 10); - - case 9: - throw new OperationError("format: Must be 'jwk', 'pkcs8' or 'spki'"); - - case 10: - key = new RsaCryptoKey(Object.assign({ - publicExponent: asmKey[1][1] === 1 ? asmKey[1].slice(1) : asmKey[1].slice(3), - modulusLength: asmKey[0].byteLength << 3 - }, algorithm), extractable, asmKey.length === 2 ? "public" : "private", keyUsages, asmKey); - return _context64.abrupt("return", key); - - case 12: - case "end": - return _context64.stop(); - } - } - }, _callee34, this); - })); - } - }, { - key: "randomNonZeroValues", - value: function randomNonZeroValues(data) { - data = exports.nativeCrypto.getRandomValues(data); - return data.map(function (n) { - while (!n) { - n = exports.nativeCrypto.getRandomValues(new Uint8Array(1))[0]; - } - - return n; - }); - } - }, { - key: "exportPkcs8Key", - value: function exportPkcs8Key(key) { - var keyInfo = new PrivateKeyInfo(); - keyInfo.privateKeyAlgorithm.algorithm = "1.2.840.113549.1.1.1"; - keyInfo.privateKeyAlgorithm.parameters = null; - keyInfo.privateKey = AsnSerializer.serialize(this.exportAsmKey(key.data)); - return AsnSerializer.serialize(keyInfo); - } - }, { - key: "importPkcs8Key", - value: function importPkcs8Key(data) { - var keyInfo = AsnParser.parse(data, PrivateKeyInfo); - var privateKey = AsnParser.parse(keyInfo.privateKey, RsaPrivateKey); - return this.importAsmKey(privateKey); - } - }, { - key: "importSpkiKey", - value: function importSpkiKey(data) { - var keyInfo = AsnParser.parse(data, PublicKeyInfo); - var publicKey = AsnParser.parse(keyInfo.publicKey, RsaPublicKey); - return this.importAsmKey(publicKey); - } - }, { - key: "exportSpkiKey", - value: function exportSpkiKey(key) { - var publicKey = new RsaPublicKey(); - publicKey.modulus = key.data[0].buffer; - publicKey.publicExponent = key.data[1][1] === 1 ? key.data[1].buffer.slice(1) : key.data[1].buffer.slice(3); - var keyInfo = new PublicKeyInfo(); - keyInfo.publicKeyAlgorithm.algorithm = "1.2.840.113549.1.1.1"; - keyInfo.publicKeyAlgorithm.parameters = null; - keyInfo.publicKey = AsnSerializer.serialize(publicKey); - return AsnSerializer.serialize(keyInfo); - } - }, { - key: "importJwkKey", - value: function importJwkKey(data) { - var key; - - if (data.d) { - key = JsonParser.fromJSON(data, { - targetSchema: RsaPrivateKey - }); - } else { - key = JsonParser.fromJSON(data, { - targetSchema: RsaPublicKey - }); - } - - return this.importAsmKey(key); - } - }, { - key: "exportJwkKey", - value: function exportJwkKey(key) { - var asnKey = this.exportAsmKey(key.data); - var jwk = JsonSerializer.toJSON(asnKey); - jwk.ext = true; - jwk.key_ops = key.usages; - jwk.kty = "RSA"; - jwk.alg = this.getJwkAlgorithm(key.algorithm); - return jwk; - } - }, { - key: "getJwkAlgorithm", - value: function getJwkAlgorithm(algorithm) { - switch (algorithm.name.toUpperCase()) { - case "RSA-OAEP": - var mdSize = /(\d+)$/.exec(algorithm.hash.name)[1]; - return "RSA-OAEP".concat(mdSize !== "1" ? "-".concat(mdSize) : ""); - - case "RSASSA-PKCS1-V1_5": - return "RS".concat(/(\d+)$/.exec(algorithm.hash.name)[1]); - - case "RSA-PSS": - return "PS".concat(/(\d+)$/.exec(algorithm.hash.name)[1]); - - case "RSAES-PKCS1-V1_5": - return "PS1"; - - default: - throw new OperationError("algorithm: Is not recognized"); - } - } - }, { - key: "exportAsmKey", - value: function exportAsmKey(asmKey) { - var key; - - if (asmKey.length > 2) { - var privateKey = new RsaPrivateKey(); - privateKey.privateExponent = asmKey[2].buffer; - privateKey.prime1 = asmKey[3].buffer; - privateKey.prime2 = asmKey[4].buffer; - privateKey.exponent1 = asmKey[5].buffer; - privateKey.exponent2 = asmKey[6].buffer; - privateKey.coefficient = asmKey[7].buffer; - key = privateKey; - } else { - key = new RsaPublicKey(); - } - - key.modulus = asmKey[0].buffer; - key.publicExponent = asmKey[1][1] === 1 ? asmKey[1].buffer.slice(1) : asmKey[1].buffer.slice(3); - return key; - } - }, { - key: "importAsmKey", - value: function importAsmKey(key) { - var expPadding = new Uint8Array(4 - key.publicExponent.byteLength); - var asmKey = [new Uint8Array(key.modulus), concat(expPadding, new Uint8Array(key.publicExponent))]; - - if (key instanceof RsaPrivateKey) { - asmKey.push(new Uint8Array(key.privateExponent)); - asmKey.push(new Uint8Array(key.prime1)); - asmKey.push(new Uint8Array(key.prime2)); - asmKey.push(new Uint8Array(key.exponent1)); - asmKey.push(new Uint8Array(key.exponent2)); - asmKey.push(new Uint8Array(key.coefficient)); - } - - return asmKey; - } - }]); - - return RsaCrypto; - }(); - - RsaCrypto.RsaSsa = "RSASSA-PKCS1-v1_5"; - RsaCrypto.RsaPss = "RSA-PSS"; - RsaCrypto.RsaOaep = "RSA-OAEP"; - RsaCrypto.privateUsages = ["sign", "decrypt", "unwrapKey"]; - RsaCrypto.publicUsages = ["verify", "encrypt", "wrapKey"]; - - var ShaCrypto = function () { - function ShaCrypto() { - _classCallCheck(this, ShaCrypto); - } - - _createClass(ShaCrypto, null, [{ - key: "getDigest", - value: function getDigest(name) { - switch (name) { - case "SHA-1": - return new asmcrypto_js.Sha1(); - - case "SHA-256": - return new asmcrypto_js.Sha256(); - - case "SHA-512": - return new asmcrypto_js.Sha512(); - - default: - throw new AlgorithmError("keyAlgorithm.hash: Is not recognized"); - } - } - }, { - key: "digest", - value: function digest(algorithm, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee35() { - var mech, result; - return regeneratorRuntime.wrap(function _callee35$(_context65) { - while (1) { - switch (_context65.prev = _context65.next) { - case 0: - mech = this.getDigest(algorithm.name); - result = mech.process(BufferSourceConverter.toUint8Array(data)).finish().result; - return _context65.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 3: - case "end": - return _context65.stop(); - } - } - }, _callee35, this); - })); - } - }]); - - return ShaCrypto; - }(); - - var RsaOaepProvider$1 = function (_RsaOaepProvider) { - _inherits(RsaOaepProvider$1, _RsaOaepProvider); - - function RsaOaepProvider$1() { - _classCallCheck(this, RsaOaepProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(RsaOaepProvider$1).apply(this, arguments)); - } - - _createClass(RsaOaepProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee36() { - return regeneratorRuntime.wrap(function _callee36$(_context66) { - while (1) { - switch (_context66.prev = _context66.next) { - case 0: - return _context66.abrupt("return", RsaCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context66.stop(); - } - } - }, _callee36); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee37() { - return regeneratorRuntime.wrap(function _callee37$(_context67) { - while (1) { - switch (_context67.prev = _context67.next) { - case 0: - return _context67.abrupt("return", RsaCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context67.stop(); - } - } - }, _callee37); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee38() { - return regeneratorRuntime.wrap(function _callee38$(_context68) { - while (1) { - switch (_context68.prev = _context68.next) { - case 0: - return _context68.abrupt("return", RsaCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context68.stop(); - } - } - }, _callee38); - })); - } - }, { - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee39() { - return regeneratorRuntime.wrap(function _callee39$(_context69) { - while (1) { - switch (_context69.prev = _context69.next) { - case 0: - return _context69.abrupt("return", this.cipher(algorithm, key, data)); - - case 1: - case "end": - return _context69.stop(); - } - } - }, _callee39, this); - })); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee40() { - return regeneratorRuntime.wrap(function _callee40$(_context70) { - while (1) { - switch (_context70.prev = _context70.next) { - case 0: - return _context70.abrupt("return", this.cipher(algorithm, key, data)); - - case 1: - case "end": - return _context70.stop(); - } - } - }, _callee40, this); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(RsaOaepProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - RsaCrypto.checkCryptoKey(key); - } - }, { - key: "cipher", - value: function cipher(algorithm, key, data) { - var digest = ShaCrypto.getDigest(key.algorithm.hash.name); - var label; - - if (algorithm.label) { - label = BufferSourceConverter.toUint8Array(algorithm.label); - } - - var cipher = new asmcrypto_js.RSA_OAEP(key.data, digest, label); - var res; - var u8Data = BufferSourceConverter.toUint8Array(data); - - if (key.type === "public") { - res = cipher.encrypt(u8Data); - } else { - res = cipher.decrypt(u8Data); - } - - return BufferSourceConverter.toArrayBuffer(res); - } - }]); - - return RsaOaepProvider$1; - }(RsaOaepProvider); - - var RsaPssProvider$1 = function (_RsaPssProvider) { - _inherits(RsaPssProvider$1, _RsaPssProvider); - - function RsaPssProvider$1() { - _classCallCheck(this, RsaPssProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(RsaPssProvider$1).apply(this, arguments)); - } - - _createClass(RsaPssProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee41() { - return regeneratorRuntime.wrap(function _callee41$(_context71) { - while (1) { - switch (_context71.prev = _context71.next) { - case 0: - return _context71.abrupt("return", RsaCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context71.stop(); - } - } - }, _callee41); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee42() { - return regeneratorRuntime.wrap(function _callee42$(_context72) { - while (1) { - switch (_context72.prev = _context72.next) { - case 0: - return _context72.abrupt("return", RsaCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context72.stop(); - } - } - }, _callee42); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee43() { - return regeneratorRuntime.wrap(function _callee43$(_context73) { - while (1) { - switch (_context73.prev = _context73.next) { - case 0: - return _context73.abrupt("return", RsaCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context73.stop(); - } - } - }, _callee43); - })); - } - }, { - key: "onSign", - value: function onSign(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee44() { - var rsa, result; - return regeneratorRuntime.wrap(function _callee44$(_context74) { - while (1) { - switch (_context74.prev = _context74.next) { - case 0: - rsa = new asmcrypto_js.RSA_PSS(key.data, ShaCrypto.getDigest(key.algorithm.hash.name), algorithm.saltLength); - result = rsa.sign(BufferSourceConverter.toUint8Array(data)); - return _context74.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 3: - case "end": - return _context74.stop(); - } - } - }, _callee44); - })); - } - }, { - key: "onVerify", - value: function onVerify(algorithm, key, signature, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee45() { - var rsa; - return regeneratorRuntime.wrap(function _callee45$(_context75) { - while (1) { - switch (_context75.prev = _context75.next) { - case 0: - rsa = new asmcrypto_js.RSA_PSS(key.data, ShaCrypto.getDigest(key.algorithm.hash.name), algorithm.saltLength); - _context75.prev = 1; - rsa.verify(BufferSourceConverter.toUint8Array(signature), BufferSourceConverter.toUint8Array(data)); - _context75.next = 8; - break; - - case 5: - _context75.prev = 5; - _context75.t0 = _context75["catch"](1); - return _context75.abrupt("return", false); - - case 8: - return _context75.abrupt("return", true); - - case 9: - case "end": - return _context75.stop(); - } - } - }, _callee45, null, [[1, 5]]); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(RsaPssProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - RsaCrypto.checkCryptoKey(key); - } - }]); - - return RsaPssProvider$1; - }(RsaPssProvider); - - var RsaSsaProvider$1 = function (_RsaSsaProvider) { - _inherits(RsaSsaProvider$1, _RsaSsaProvider); - - function RsaSsaProvider$1() { - _classCallCheck(this, RsaSsaProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(RsaSsaProvider$1).apply(this, arguments)); - } - - _createClass(RsaSsaProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee46() { - return regeneratorRuntime.wrap(function _callee46$(_context76) { - while (1) { - switch (_context76.prev = _context76.next) { - case 0: - return _context76.abrupt("return", RsaCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context76.stop(); - } - } - }, _callee46); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee47() { - return regeneratorRuntime.wrap(function _callee47$(_context77) { - while (1) { - switch (_context77.prev = _context77.next) { - case 0: - return _context77.abrupt("return", RsaCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context77.stop(); - } - } - }, _callee47); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee48() { - return regeneratorRuntime.wrap(function _callee48$(_context78) { - while (1) { - switch (_context78.prev = _context78.next) { - case 0: - return _context78.abrupt("return", RsaCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context78.stop(); - } - } - }, _callee48); - })); - } - }, { - key: "onSign", - value: function onSign(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee49() { - var rsa, result; - return regeneratorRuntime.wrap(function _callee49$(_context79) { - while (1) { - switch (_context79.prev = _context79.next) { - case 0: - rsa = new asmcrypto_js.RSA_PKCS1_v1_5(key.data, ShaCrypto.getDigest(key.algorithm.hash.name)); - result = rsa.sign(BufferSourceConverter.toUint8Array(data)); - return _context79.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 3: - case "end": - return _context79.stop(); - } - } - }, _callee49); - })); - } - }, { - key: "onVerify", - value: function onVerify(algorithm, key, signature, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee50() { - var rsa; - return regeneratorRuntime.wrap(function _callee50$(_context80) { - while (1) { - switch (_context80.prev = _context80.next) { - case 0: - rsa = new asmcrypto_js.RSA_PKCS1_v1_5(key.data, ShaCrypto.getDigest(key.algorithm.hash.name)); - _context80.prev = 1; - rsa.verify(BufferSourceConverter.toUint8Array(signature), BufferSourceConverter.toUint8Array(data)); - _context80.next = 8; - break; - - case 5: - _context80.prev = 5; - _context80.t0 = _context80["catch"](1); - return _context80.abrupt("return", false); - - case 8: - return _context80.abrupt("return", true); - - case 9: - case "end": - return _context80.stop(); - } - } - }, _callee50, null, [[1, 5]]); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(RsaSsaProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - RsaCrypto.checkCryptoKey(key); - } - }]); - - return RsaSsaProvider$1; - }(RsaSsaProvider); - - var RsaEsProvider = function (_ProviderCrypto7) { - _inherits(RsaEsProvider, _ProviderCrypto7); - - function RsaEsProvider() { - var _this78; - - _classCallCheck(this, RsaEsProvider); - - _this78 = _possibleConstructorReturn(this, _getPrototypeOf(RsaEsProvider).apply(this, arguments)); - _this78.name = "RSAES-PKCS1-v1_5"; - _this78.usages = { - publicKey: ["encrypt", "wrapKey"], - privateKey: ["decrypt", "unwrapKey"] - }; - _this78.hashAlgorithms = ["SHA-1", "SHA-256", "SHA-384", "SHA-512"]; - return _this78; - } - - _createClass(RsaEsProvider, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee51() { - return regeneratorRuntime.wrap(function _callee51$(_context81) { - while (1) { - switch (_context81.prev = _context81.next) { - case 0: - return _context81.abrupt("return", RsaCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context81.stop(); - } - } - }, _callee51); - })); - } - }, { - key: "checkGenerateKeyParams", - value: function checkGenerateKeyParams(algorithm) { - this.checkRequiredProperty(algorithm, "publicExponent"); - - if (!(algorithm.publicExponent && algorithm.publicExponent instanceof Uint8Array)) { - throw new TypeError("publicExponent: Missing or not a Uint8Array"); - } - - var publicExponent = Convert.ToBase64(algorithm.publicExponent); - - if (!(publicExponent === "Aw==" || publicExponent === "AQAB")) { - throw new TypeError("publicExponent: Must be [3] or [1,0,1]"); - } - - this.checkRequiredProperty(algorithm, "modulusLength"); - - switch (algorithm.modulusLength) { - case 1024: - case 2048: - case 4096: - break; - - default: - throw new TypeError("modulusLength: Must be 1024, 2048, or 4096"); - } - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee52() { - var EM, k, offset; - return regeneratorRuntime.wrap(function _callee52$(_context82) { - while (1) { - switch (_context82.prev = _context82.next) { - case 0: - EM = new asmcrypto_js.RSA(key.data).decrypt(new asmcrypto_js.BigNumber(BufferSourceConverter.toUint8Array(data))).result; - k = key.algorithm.modulusLength >> 3; - - if (!(data.byteLength !== k)) { - _context82.next = 4; - break; - } - - throw new CryptoError("Decryption error. Encrypted message size doesn't match to key length"); - - case 4: - offset = 0; - - if (!(EM[offset++] || EM[offset++] !== 2)) { - _context82.next = 7; - break; - } - - throw new CryptoError("Decryption error"); - - case 7: - if (!(EM[offset++] === 0)) { - _context82.next = 9; - break; - } - - return _context82.abrupt("break", 10); - - case 9: - if (offset < EM.length) { - _context82.next = 7; - break; - } - - case 10: - if (!(offset < 11)) { - _context82.next = 12; - break; - } - - throw new CryptoError("Decryption error. PS is less than 8 octets."); - - case 12: - if (!(offset === EM.length)) { - _context82.next = 14; - break; - } - - throw new CryptoError("Decryption error. There is no octet with hexadecimal value 0x00 to separate PS from M"); - - case 14: - return _context82.abrupt("return", EM.buffer.slice(offset)); - - case 15: - case "end": - return _context82.stop(); - } - } - }, _callee52); - })); - } - }, { - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee53() { - var k, psLen, PS, EM, result; - return regeneratorRuntime.wrap(function _callee53$(_context83) { - while (1) { - switch (_context83.prev = _context83.next) { - case 0: - k = key.algorithm.modulusLength >> 3; - - if (!(data.byteLength > k - 11)) { - _context83.next = 3; - break; - } - - throw new CryptoError("Message too long"); - - case 3: - psLen = k - data.byteLength - 3; - PS = RsaCrypto.randomNonZeroValues(new Uint8Array(psLen)); - EM = new Uint8Array(k); - EM[0] = 0; - EM[1] = 2; - EM.set(PS, 2); - EM[2 + psLen] = 0; - EM.set(new Uint8Array(data), 3 + psLen); - result = new asmcrypto_js.RSA(key.data).encrypt(new asmcrypto_js.BigNumber(EM)).result; - return _context83.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 13: - case "end": - return _context83.stop(); - } - } - }, _callee53); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee54() { - return regeneratorRuntime.wrap(function _callee54$(_context84) { - while (1) { - switch (_context84.prev = _context84.next) { - case 0: - return _context84.abrupt("return", RsaCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context84.stop(); - } - } - }, _callee54); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee55() { - var key; - return regeneratorRuntime.wrap(function _callee55$(_context85) { - while (1) { - switch (_context85.prev = _context85.next) { - case 0: - _context85.next = 2; - return RsaCrypto.importKey(format, keyData, Object.assign(Object.assign({}, algorithm), { - name: this.name - }), extractable, keyUsages); - - case 2: - key = _context85.sent; - return _context85.abrupt("return", key); - - case 4: - case "end": - return _context85.stop(); - } - } - }, _callee55, this); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(RsaEsProvider.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - RsaCrypto.checkCryptoKey(key); - } - }, { - key: "prepareSignData", - value: function prepareSignData(algorithm, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee56() { - var crypto; - return regeneratorRuntime.wrap(function _callee56$(_context86) { - while (1) { - switch (_context86.prev = _context86.next) { - case 0: - crypto = new Crypto$1(); - return _context86.abrupt("return", crypto.subtle.digest(algorithm.hash, data)); - - case 2: - case "end": - return _context86.stop(); - } - } - }, _callee56); - })); - } - }]); - - return RsaEsProvider; - }(ProviderCrypto); - - var namedOIDs = { - "1.2.840.10045.3.1.7": "P-256", - "P-256": "1.2.840.10045.3.1.7", - "1.3.132.0.34": "P-384", - "P-384": "1.3.132.0.34", - "1.3.132.0.35": "P-521", - "P-521": "1.3.132.0.35", - "1.3.132.0.10": "K-256", - "K-256": "1.3.132.0.10" - }; - - function getOidByNamedCurve(namedCurve) { - var oid = namedOIDs[namedCurve]; - - if (!oid) { - throw new OperationError("Cannot convert WebCrypto named curve '".concat(namedCurve, "' to OID")); - } - - return oid; - } - - var EcCryptoKey = function (_CryptoKey$3) { - _inherits(EcCryptoKey, _CryptoKey$3); - - function EcCryptoKey(algorithm, extractable, type, usages, data) { - var _this79; - - _classCallCheck(this, EcCryptoKey); - - _this79 = _possibleConstructorReturn(this, _getPrototypeOf(EcCryptoKey).call(this, algorithm, extractable, type, usages)); - _this79.data = data; - return _this79; - } - - return EcCryptoKey; - }(CryptoKey$1); - - var EcCrypto = function () { - function EcCrypto() { - _classCallCheck(this, EcCrypto); - } - - _createClass(EcCrypto, null, [{ - key: "checkLib", - value: function checkLib() { - if (typeof elliptic === "undefined") { - throw new OperationError("Cannot implement EC mechanism. Add 'https://peculiarventures.github.io/pv-webcrypto-tests/src/elliptic.js' script to your project"); - } - } - }, { - key: "generateKey", - value: function generateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee57() { - var _this80 = this; - - var key, ecKey, prvKey, pubKey; - return regeneratorRuntime.wrap(function _callee57$(_context87) { - while (1) { - switch (_context87.prev = _context87.next) { - case 0: - this.checkLib(); - key = this.initEcKey(algorithm.namedCurve); - ecKey = key.genKeyPair(); - ecKey.getPublic(); - prvKey = new EcCryptoKey(Object.assign({}, algorithm), extractable, "private", keyUsages.filter(function (usage) { - return ~_this80.privateUsages.indexOf(usage); - }), ecKey); - pubKey = new EcCryptoKey(Object.assign({}, algorithm), true, "public", keyUsages.filter(function (usage) { - return ~_this80.publicUsages.indexOf(usage); - }), ecKey); - return _context87.abrupt("return", { - privateKey: prvKey, - publicKey: pubKey - }); - - case 7: - case "end": - return _context87.stop(); - } - } - }, _callee57, this); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key) { - if (!(key instanceof EcCryptoKey)) { - throw new TypeError("key: Is not EcCryptoKey"); - } - } - }, { - key: "concat", - value: function concat() { - for (var _len9 = arguments.length, buf = new Array(_len9), _key11 = 0; _key11 < _len9; _key11++) { - buf[_key11] = arguments[_key11]; - } - - var res = new Uint8Array(buf.map(function (item) { - return item.length; - }).reduce(function (prev, cur) { - return prev + cur; - })); - var offset = 0; - buf.forEach(function (item, index) { - for (var i = 0; i < item.length; i++) { - res[offset + i] = item[i]; - } - - offset += item.length; - }); - return res; - } - }, { - key: "exportKey", - value: function exportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee58() { - return regeneratorRuntime.wrap(function _callee58$(_context88) { - while (1) { - switch (_context88.prev = _context88.next) { - case 0: - this.checkLib(); - _context88.t0 = format; - _context88.next = _context88.t0 === "pkcs8" ? 4 : _context88.t0 === "spki" ? 5 : _context88.t0 === "jwk" ? 6 : _context88.t0 === "raw" ? 7 : 8; - break; - - case 4: - return _context88.abrupt("return", this.exportPkcs8Key(key)); - - case 5: - return _context88.abrupt("return", this.exportSpkiKey(key)); - - case 6: - return _context88.abrupt("return", this.exportJwkKey(key)); - - case 7: - return _context88.abrupt("return", new Uint8Array(key.data.getPublic("der")).buffer); - - case 8: - throw new OperationError("format: Must be 'jwk', 'raw, 'pkcs8' or 'spki'"); - - case 9: - case "end": - return _context88.stop(); - } - } - }, _callee58, this); - })); - } - }, { - key: "importKey", - value: function importKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee59() { - var ecKey, key; - return regeneratorRuntime.wrap(function _callee59$(_context89) { - while (1) { - switch (_context89.prev = _context89.next) { - case 0: - this.checkLib(); - _context89.t0 = format; - _context89.next = _context89.t0 === "pkcs8" ? 4 : _context89.t0 === "spki" ? 6 : _context89.t0 === "raw" ? 8 : _context89.t0 === "jwk" ? 10 : 12; - break; - - case 4: - ecKey = this.importPkcs8Key(keyData, algorithm.namedCurve); - return _context89.abrupt("break", 13); - - case 6: - ecKey = this.importSpkiKey(keyData, algorithm.namedCurve); - return _context89.abrupt("break", 13); - - case 8: - ecKey = this.importEcKey(new EcPublicKey(keyData), algorithm.namedCurve); - return _context89.abrupt("break", 13); - - case 10: - ecKey = this.importJwkKey(keyData); - return _context89.abrupt("break", 13); - - case 12: - throw new OperationError("format: Must be 'jwk', 'raw', 'pkcs8' or 'spki'"); - - case 13: - key = new EcCryptoKey(Object.assign({}, algorithm), extractable, ecKey.priv ? "private" : "public", keyUsages, ecKey); - return _context89.abrupt("return", key); - - case 15: - case "end": - return _context89.stop(); - } - } - }, _callee59, this); - })); - } - }, { - key: "getNamedCurve", - value: function getNamedCurve(wcNamedCurve) { - var crv = wcNamedCurve.toUpperCase(); - var res = ""; - - if (["P-256", "P-384", "P-521"].indexOf(crv) > -1) { - res = crv.replace("-", "").toLowerCase(); - } else if (crv === "K-256") { - res = "secp256k1"; - } else { - throw new OperationError("Unsupported named curve '".concat(wcNamedCurve, "'")); - } - - return res; - } - }, { - key: "initEcKey", - value: function initEcKey(namedCurve) { - return elliptic.ec(this.getNamedCurve(namedCurve)); - } - }, { - key: "exportPkcs8Key", - value: function exportPkcs8Key(key) { - var keyInfo = new PrivateKeyInfo(); - keyInfo.privateKeyAlgorithm.algorithm = this.ASN_ALGORITHM; - keyInfo.privateKeyAlgorithm.parameters = AsnSerializer.serialize(new ObjectIdentifier(getOidByNamedCurve(key.algorithm.namedCurve))); - keyInfo.privateKey = AsnSerializer.serialize(this.exportEcKey(key)); - return AsnSerializer.serialize(keyInfo); - } - }, { - key: "importPkcs8Key", - value: function importPkcs8Key(data, namedCurve) { - var keyInfo = AsnParser.parse(data, PrivateKeyInfo); - var privateKey = AsnParser.parse(keyInfo.privateKey, EcPrivateKey); - return this.importEcKey(privateKey, namedCurve); - } - }, { - key: "importSpkiKey", - value: function importSpkiKey(data, namedCurve) { - var keyInfo = AsnParser.parse(data, PublicKeyInfo); - var publicKey = new EcPublicKey(keyInfo.publicKey); - return this.importEcKey(publicKey, namedCurve); - } - }, { - key: "exportSpkiKey", - value: function exportSpkiKey(key) { - var publicKey = new EcPublicKey(new Uint8Array(key.data.getPublic("der")).buffer); - var keyInfo = new PublicKeyInfo(); - keyInfo.publicKeyAlgorithm.algorithm = this.ASN_ALGORITHM; - keyInfo.publicKeyAlgorithm.parameters = AsnSerializer.serialize(new ObjectIdentifier(getOidByNamedCurve(key.algorithm.namedCurve))); - keyInfo.publicKey = publicKey.value; - return AsnSerializer.serialize(keyInfo); - } - }, { - key: "importJwkKey", - value: function importJwkKey(data) { - var key; - - if (data.d) { - key = JsonParser.fromJSON(data, { - targetSchema: EcPrivateKey - }); - } else { - key = JsonParser.fromJSON(data, { - targetSchema: EcPublicKey - }); - } - - return this.importEcKey(key, data.crv); - } - }, { - key: "exportJwkKey", - value: function exportJwkKey(key) { - var asnKey = this.exportEcKey(key); - var jwk = JsonSerializer.toJSON(asnKey); - jwk.ext = true; - jwk.key_ops = key.usages; - jwk.crv = key.algorithm.namedCurve; - jwk.kty = "EC"; - return jwk; - } - }, { - key: "exportEcKey", - value: function exportEcKey(ecKey) { - if (ecKey.type === "private") { - var privateKey = new EcPrivateKey(); - var point = new Uint8Array(ecKey.data.getPrivate("der").toArray()); - var pointPad = new Uint8Array(this.getPointSize(ecKey.algorithm.namedCurve) - point.length); - privateKey.privateKey = concat(pointPad, point); - privateKey.publicKey = new Uint8Array(ecKey.data.getPublic("der")); - return privateKey; - } else if (ecKey.data.pub) { - return new EcPublicKey(new Uint8Array(ecKey.data.getPublic("der")).buffer); - } else { - throw new Error("Cannot get private or public key"); - } - } - }, { - key: "importEcKey", - value: function importEcKey(key, namedCurve) { - var ecKey = this.initEcKey(namedCurve); - - if (key instanceof EcPublicKey) { - return ecKey.keyFromPublic(new Uint8Array(key.value)); - } - - return ecKey.keyFromPrivate(new Uint8Array(key.privateKey)); - } - }, { - key: "getPointSize", - value: function getPointSize(namedCurve) { - switch (namedCurve) { - case "P-256": - case "K-256": - return 32; - - case "P-384": - return 48; - - case "P-521": - return 66; - } - - throw new Error("namedCurve: Is not recognized"); - } - }]); - - return EcCrypto; - }(); - - EcCrypto.privateUsages = ["sign", "deriveKey", "deriveBits"]; - EcCrypto.publicUsages = ["verify"]; - EcCrypto.ASN_ALGORITHM = "1.2.840.10045.2.1"; - - var EcdhProvider$1 = function (_EcdhProvider) { - _inherits(EcdhProvider$1, _EcdhProvider); - - function EcdhProvider$1() { - _classCallCheck(this, EcdhProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(EcdhProvider$1).apply(this, arguments)); - } - - _createClass(EcdhProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee60() { - return regeneratorRuntime.wrap(function _callee60$(_context90) { - while (1) { - switch (_context90.prev = _context90.next) { - case 0: - return _context90.abrupt("return", EcCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context90.stop(); - } - } - }, _callee60); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee61() { - return regeneratorRuntime.wrap(function _callee61$(_context91) { - while (1) { - switch (_context91.prev = _context91.next) { - case 0: - return _context91.abrupt("return", EcCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context91.stop(); - } - } - }, _callee61); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee62() { - return regeneratorRuntime.wrap(function _callee62$(_context92) { - while (1) { - switch (_context92.prev = _context92.next) { - case 0: - return _context92.abrupt("return", EcCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context92.stop(); - } - } - }, _callee62); - })); - } - }, { - key: "onDeriveBits", - value: function onDeriveBits(algorithm, baseKey, length) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee63() { - var shared, array, len, buf; - return regeneratorRuntime.wrap(function _callee63$(_context93) { - while (1) { - switch (_context93.prev = _context93.next) { - case 0: - EcCrypto.checkLib(); - shared = baseKey.data.derive(algorithm.public.data.getPublic()); - array = new Uint8Array(shared.toArray()); - len = array.length; - len = len > 32 ? len > 48 ? 66 : 48 : 32; - - if (array.length < len) { - array = EcCrypto.concat(new Uint8Array(len - array.length), array); - } - - buf = array.slice(0, length / 8).buffer; - return _context93.abrupt("return", buf); - - case 8: - case "end": - return _context93.stop(); - } - } - }, _callee63); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(EcdhProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - EcCrypto.checkCryptoKey(key); - } - }]); - - return EcdhProvider$1; - }(EcdhProvider); - - function b2a(buffer) { - var buf = new Uint8Array(buffer); - var res = []; - - for (var i = 0; i < buf.length; i++) { - res.push(buf[i]); - } - - return res; - } - - function hex2buffer(hexString, padded) { - if (hexString.length % 2) { - hexString = "0" + hexString; - } - - var res = new Uint8Array(hexString.length / 2); - - for (var i = 0; i < hexString.length; i++) { - var c = hexString.slice(i, ++i + 1); - res[(i - 1) / 2] = parseInt(c, 16); - } - - if (padded) { - var len = res.length; - len = len > 32 ? len > 48 ? 66 : 48 : 32; - - if (res.length < len) { - res = EcCrypto.concat(new Uint8Array(len - res.length), res); - } - } - - return res; - } - - function buffer2hex(buffer, padded) { - var res = ""; - - for (var i = 0; i < buffer.length; i++) { - var char = buffer[i].toString(16); - res += char.length % 2 ? "0" + char : char; - } - - if (padded) { - var len = buffer.length; - len = len > 32 ? len > 48 ? 66 : 48 : 32; - - if (res.length / 2 < len) { - res = new Array(len * 2 - res.length + 1).join("0") + res; - } - } - - return res; - } - - var EcdsaProvider$1 = function (_EcdsaProvider) { - _inherits(EcdsaProvider$1, _EcdsaProvider); - - function EcdsaProvider$1() { - _classCallCheck(this, EcdsaProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(EcdsaProvider$1).apply(this, arguments)); - } - - _createClass(EcdsaProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee64() { - return regeneratorRuntime.wrap(function _callee64$(_context94) { - while (1) { - switch (_context94.prev = _context94.next) { - case 0: - return _context94.abrupt("return", EcCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context94.stop(); - } - } - }, _callee64); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee65() { - return regeneratorRuntime.wrap(function _callee65$(_context95) { - while (1) { - switch (_context95.prev = _context95.next) { - case 0: - return _context95.abrupt("return", EcCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context95.stop(); - } - } - }, _callee65); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee66() { - return regeneratorRuntime.wrap(function _callee66$(_context96) { - while (1) { - switch (_context96.prev = _context96.next) { - case 0: - return _context96.abrupt("return", EcCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context96.stop(); - } - } - }, _callee66); - })); - } - }, { - key: "onSign", - value: function onSign(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee67() { - var crypto, array, hash, signature, hexSignature; - return regeneratorRuntime.wrap(function _callee67$(_context97) { - while (1) { - switch (_context97.prev = _context97.next) { - case 0: - EcCrypto.checkLib(); - crypto = new Crypto$1(); - _context97.next = 4; - return crypto.subtle.digest(algorithm.hash, data); - - case 4: - hash = _context97.sent; - array = b2a(hash); - _context97.next = 8; - return key.data.sign(array); - - case 8: - signature = _context97.sent; - hexSignature = buffer2hex(signature.r.toArray(), true) + buffer2hex(signature.s.toArray(), true); - return _context97.abrupt("return", hex2buffer(hexSignature).buffer); - - case 11: - case "end": - return _context97.stop(); - } - } - }, _callee67); - })); - } - }, { - key: "onVerify", - value: function onVerify(algorithm, key, signature, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee68() { - var crypto, sig, hashedData, array; - return regeneratorRuntime.wrap(function _callee68$(_context98) { - while (1) { - switch (_context98.prev = _context98.next) { - case 0: - EcCrypto.checkLib(); - crypto = new Crypto$1(); - sig = { - r: new Uint8Array(signature.slice(0, signature.byteLength / 2)), - s: new Uint8Array(signature.slice(signature.byteLength / 2)) - }; - _context98.next = 5; - return crypto.subtle.digest(algorithm.hash, data); - - case 5: - hashedData = _context98.sent; - array = b2a(hashedData); - return _context98.abrupt("return", key.data.verify(array, sig)); - - case 8: - case "end": - return _context98.stop(); - } - } - }, _callee68); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(EcdsaProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - EcCrypto.checkCryptoKey(key); - } - }]); - - return EcdsaProvider$1; - }(EcdsaProvider); - - var Sha1Provider = function (_ProviderCrypto8) { - _inherits(Sha1Provider, _ProviderCrypto8); - - function Sha1Provider() { - var _this81; - - _classCallCheck(this, Sha1Provider); - - _this81 = _possibleConstructorReturn(this, _getPrototypeOf(Sha1Provider).apply(this, arguments)); - _this81.name = "SHA-1"; - _this81.usages = []; - return _this81; - } - - _createClass(Sha1Provider, [{ - key: "onDigest", - value: function onDigest(algorithm, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee69() { - return regeneratorRuntime.wrap(function _callee69$(_context99) { - while (1) { - switch (_context99.prev = _context99.next) { - case 0: - return _context99.abrupt("return", ShaCrypto.digest(algorithm, data)); - - case 1: - case "end": - return _context99.stop(); - } - } - }, _callee69); - })); - } - }]); - - return Sha1Provider; - }(ProviderCrypto); - - var Sha256Provider = function (_Sha1Provider) { - _inherits(Sha256Provider, _Sha1Provider); - - function Sha256Provider() { - var _this82; - - _classCallCheck(this, Sha256Provider); - - _this82 = _possibleConstructorReturn(this, _getPrototypeOf(Sha256Provider).apply(this, arguments)); - _this82.name = "SHA-256"; - return _this82; - } - - return Sha256Provider; - }(Sha1Provider); - - var Sha512Provider = function (_Sha1Provider2) { - _inherits(Sha512Provider, _Sha1Provider2); - - function Sha512Provider() { - var _this83; - - _classCallCheck(this, Sha512Provider); - - _this83 = _possibleConstructorReturn(this, _getPrototypeOf(Sha512Provider).apply(this, arguments)); - _this83.name = "SHA-512"; - return _this83; - } - - return Sha512Provider; - }(Sha1Provider); - - var PbkdfCryptoKey = function (_CryptoKey$4) { - _inherits(PbkdfCryptoKey, _CryptoKey$4); - - function PbkdfCryptoKey(algorithm, extractable, usages, raw) { - var _this84; - - _classCallCheck(this, PbkdfCryptoKey); - - _this84 = _possibleConstructorReturn(this, _getPrototypeOf(PbkdfCryptoKey).call(this, algorithm, extractable, "secret", usages)); - _this84.raw = raw; - return _this84; - } - - return PbkdfCryptoKey; - }(CryptoKey$1); - - var Pbkdf2Provider$1 = function (_Pbkdf2Provider) { - _inherits(Pbkdf2Provider$1, _Pbkdf2Provider); - - function Pbkdf2Provider$1() { - _classCallCheck(this, Pbkdf2Provider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(Pbkdf2Provider$1).apply(this, arguments)); - } - - _createClass(Pbkdf2Provider$1, [{ - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee70() { - return regeneratorRuntime.wrap(function _callee70$(_context100) { - while (1) { - switch (_context100.prev = _context100.next) { - case 0: - return _context100.abrupt("return", new PbkdfCryptoKey(algorithm, extractable, keyUsages, BufferSourceConverter.toUint8Array(keyData))); - - case 1: - case "end": - return _context100.stop(); - } - } - }, _callee70); - })); - } - }, { - key: "onDeriveBits", - value: function onDeriveBits(algorithm, baseKey, length) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee71() { - var result, salt, password; - return regeneratorRuntime.wrap(function _callee71$(_context101) { - while (1) { - switch (_context101.prev = _context101.next) { - case 0: - salt = BufferSourceConverter.toUint8Array(algorithm.salt); - password = baseKey.raw; - _context101.t0 = algorithm.hash.name.toUpperCase(); - _context101.next = _context101.t0 === "SHA-1" ? 5 : _context101.t0 === "SHA-256" ? 7 : _context101.t0 === "SHA-512" ? 9 : 11; - break; - - case 5: - result = asmcrypto_js.Pbkdf2HmacSha1(password, salt, algorithm.iterations, length >> 3); - return _context101.abrupt("break", 12); - - case 7: - result = asmcrypto_js.Pbkdf2HmacSha256(password, salt, algorithm.iterations, length >> 3); - return _context101.abrupt("break", 12); - - case 9: - result = asmcrypto_js.Pbkdf2HmacSha512(password, salt, algorithm.iterations, length >> 3); - return _context101.abrupt("break", 12); - - case 11: - throw new OperationError("algorithm.hash: '".concat(algorithm.hash.name, "' hash algorithm is not supported")); - - case 12: - return _context101.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 13: - case "end": - return _context101.stop(); - } - } - }, _callee71); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(Pbkdf2Provider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - if (!(key instanceof PbkdfCryptoKey)) { - throw new TypeError("key: Is not PbkdfCryptoKey"); - } - } - }]); - - return Pbkdf2Provider$1; - }(Pbkdf2Provider); - - var readUInt32BE = function readUInt32BE(bytes, off) { - var res = bytes[0 + off] << 24 | bytes[1 + off] << 16 | bytes[2 + off] << 8 | bytes[3 + off]; - return res >>> 0; - }; - - var writeUInt32BE = function writeUInt32BE(bytes, value, off) { - bytes[0 + off] = value >>> 24; - bytes[1 + off] = value >>> 16 & 0xff; - bytes[2 + off] = value >>> 8 & 0xff; - bytes[3 + off] = value & 0xff; - }; - - var ip = function ip(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 6; i >= 0; i -= 2) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= inR >>> j + i & 1; - } - - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= inL >>> j + i & 1; - } - } - - for (var i = 6; i >= 0; i -= 2) { - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= inR >>> j + i & 1; - } - - for (var j = 1; j <= 25; j += 8) { - outR <<= 1; - outR |= inL >>> j + i & 1; - } - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; - }; - - var rip = function rip(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 0; i < 4; i++) { - for (var j = 24; j >= 0; j -= 8) { - outL <<= 1; - outL |= inR >>> j + i & 1; - outL <<= 1; - outL |= inL >>> j + i & 1; - } - } - - for (var i = 4; i < 8; i++) { - for (var j = 24; j >= 0; j -= 8) { - outR <<= 1; - outR |= inR >>> j + i & 1; - outR <<= 1; - outR |= inL >>> j + i & 1; - } - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; - }; - - var pc1 = function pc1(inL, inR, out, off) { - var outL = 0; - var outR = 0; - - for (var i = 7; i >= 5; i--) { - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= inR >> j + i & 1; - } - - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= inL >> j + i & 1; - } - } - - for (var j = 0; j <= 24; j += 8) { - outL <<= 1; - outL |= inR >> j + i & 1; - } - - for (var i = 1; i <= 3; i++) { - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= inR >> j + i & 1; - } - - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= inL >> j + i & 1; - } - } - - for (var j = 0; j <= 24; j += 8) { - outR <<= 1; - outR |= inL >> j + i & 1; - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; - }; - - var r28shl = function r28shl(num, shift) { - return num << shift & 0xfffffff | num >>> 28 - shift; - }; - - var pc2table = [14, 11, 17, 4, 27, 23, 25, 0, 13, 22, 7, 18, 5, 9, 16, 24, 2, 20, 12, 21, 1, 8, 15, 26, 15, 4, 25, 19, 9, 1, 26, 16, 5, 11, 23, 8, 12, 7, 17, 0, 22, 3, 10, 14, 6, 20, 27, 24]; - - var pc2 = function pc2(inL, inR, out, off) { - var outL = 0; - var outR = 0; - var len = pc2table.length >>> 1; - - for (var i = 0; i < len; i++) { - outL <<= 1; - outL |= inL >>> pc2table[i] & 0x1; - } - - for (var i = len; i < pc2table.length; i++) { - outR <<= 1; - outR |= inR >>> pc2table[i] & 0x1; - } - - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; - }; - - var expand = function expand(r, out, off) { - var outL = 0; - var outR = 0; - outL = (r & 1) << 5 | r >>> 27; - - for (var i = 23; i >= 15; i -= 4) { - outL <<= 6; - outL |= r >>> i & 0x3f; - } - - for (var i = 11; i >= 3; i -= 4) { - outR |= r >>> i & 0x3f; - outR <<= 6; - } - - outR |= (r & 0x1f) << 1 | r >>> 31; - out[off + 0] = outL >>> 0; - out[off + 1] = outR >>> 0; - }; - - var sTable = [14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11]; - - var substitute = function substitute(inL, inR) { - var out = 0; - - for (var i = 0; i < 4; i++) { - var b = inL >>> 18 - i * 6 & 0x3f; - var sb = sTable[i * 0x40 + b]; - out <<= 4; - out |= sb; - } - - for (var i = 0; i < 4; i++) { - var b = inR >>> 18 - i * 6 & 0x3f; - var sb = sTable[4 * 0x40 + i * 0x40 + b]; - out <<= 4; - out |= sb; - } - - return out >>> 0; - }; - - var permuteTable = [16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7]; - - var permute = function permute(num) { - var out = 0; - - for (var i = 0; i < permuteTable.length; i++) { - out <<= 1; - out |= num >>> permuteTable[i] & 0x1; - } - - return out >>> 0; - }; - - var padSplit = function padSplit(num, size, group) { - var str = num.toString(2); - - while (str.length < size) { - str = '0' + str; - } - - var out = []; - - for (var i = 0; i < size; i += group) { - out.push(str.slice(i, i + group)); - } - - return out.join(' '); - }; - - var utils$1 = { - readUInt32BE: readUInt32BE, - writeUInt32BE: writeUInt32BE, - ip: ip, - rip: rip, - pc1: pc1, - r28shl: r28shl, - pc2: pc2, - expand: expand, - substitute: substitute, - permute: permute, - padSplit: padSplit - }; - var minimalisticAssert = assert; - - function assert(val, msg) { - if (!val) throw new Error(msg || 'Assertion failed'); - } - - assert.equal = function assertEqual(l, r, msg) { - if (l != r) throw new Error(msg || 'Assertion failed: ' + l + ' != ' + r); - }; - - function Cipher(options) { - this.options = options; - this.type = this.options.type; - this.blockSize = 8; - - this._init(); - - this.buffer = new Array(this.blockSize); - this.bufferOff = 0; - } - - var cipher = Cipher; - - Cipher.prototype._init = function _init() {}; - - Cipher.prototype.update = function update(data) { - if (data.length === 0) return []; - if (this.type === 'decrypt') return this._updateDecrypt(data);else return this._updateEncrypt(data); - }; - - Cipher.prototype._buffer = function _buffer(data, off) { - var min = Math.min(this.buffer.length - this.bufferOff, data.length - off); - - for (var i = 0; i < min; i++) { - this.buffer[this.bufferOff + i] = data[off + i]; - } - - this.bufferOff += min; - return min; - }; - - Cipher.prototype._flushBuffer = function _flushBuffer(out, off) { - this._update(this.buffer, 0, out, off); - - this.bufferOff = 0; - return this.blockSize; - }; - - Cipher.prototype._updateEncrypt = function _updateEncrypt(data) { - var inputOff = 0; - var outputOff = 0; - var count = (this.bufferOff + data.length) / this.blockSize | 0; - var out = new Array(count * this.blockSize); - - if (this.bufferOff !== 0) { - inputOff += this._buffer(data, inputOff); - if (this.bufferOff === this.buffer.length) outputOff += this._flushBuffer(out, outputOff); - } - - var max = data.length - (data.length - inputOff) % this.blockSize; - - for (; inputOff < max; inputOff += this.blockSize) { - this._update(data, inputOff, out, outputOff); - - outputOff += this.blockSize; - } - - for (; inputOff < data.length; inputOff++, this.bufferOff++) { - this.buffer[this.bufferOff] = data[inputOff]; - } - - return out; - }; - - Cipher.prototype._updateDecrypt = function _updateDecrypt(data) { - var inputOff = 0; - var outputOff = 0; - var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1; - var out = new Array(count * this.blockSize); - - for (; count > 0; count--) { - inputOff += this._buffer(data, inputOff); - outputOff += this._flushBuffer(out, outputOff); - } - - inputOff += this._buffer(data, inputOff); - return out; - }; - - Cipher.prototype.final = function final(buffer) { - var first; - if (buffer) first = this.update(buffer); - var last; - if (this.type === 'encrypt') last = this._finalEncrypt();else last = this._finalDecrypt(); - if (first) return first.concat(last);else return last; - }; - - Cipher.prototype._pad = function _pad(buffer, off) { - if (off === 0) return false; - - while (off < buffer.length) { - buffer[off++] = 0; - } - - return true; - }; - - Cipher.prototype._finalEncrypt = function _finalEncrypt() { - if (!this._pad(this.buffer, this.bufferOff)) return []; - var out = new Array(this.blockSize); - - this._update(this.buffer, 0, out, 0); - - return out; - }; - - Cipher.prototype._unpad = function _unpad(buffer) { - return buffer; - }; - - Cipher.prototype._finalDecrypt = function _finalDecrypt() { - minimalisticAssert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt'); - var out = new Array(this.blockSize); - - this._flushBuffer(out, 0); - - return this._unpad(out); - }; - - var inherits; - - if (typeof Object.create === 'function') { - inherits = function inherits(ctor, superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - }; - } else { - inherits = function inherits(ctor, superCtor) { - ctor.super_ = superCtor; - - var TempCtor = function TempCtor() {}; - - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - }; - } - - var inherits$1 = inherits; - var formatRegExp = /%[sdj%]/g; - - function format(f) { - if (!isString(f)) { - var objects = []; - - for (var i = 0; i < arguments.length; i++) { - objects.push(inspect(arguments[i])); - } - - return objects.join(' '); - } - - var i = 1; - var args = arguments; - var len = args.length; - var str = String(f).replace(formatRegExp, function (x) { - if (x === '%%') return '%'; - if (i >= len) return x; - - switch (x) { - case '%s': - return String(args[i++]); - - case '%d': - return Number(args[i++]); - - case '%j': - try { - return JSON.stringify(args[i++]); - } catch (_) { - return '[Circular]'; - } - - default: - return x; - } - }); - - for (var x = args[i]; i < len; x = args[++i]) { - if (isNull(x) || !isObject(x)) { - str += ' ' + x; - } else { - str += ' ' + inspect(x); - } - } - - return str; - } - - function deprecate(fn, msg) { - if (isUndefined(global.process)) { - return function () { - return deprecate(fn, msg).apply(this, arguments); - }; - } - - var warned = false; - - function deprecated() { - if (!warned) { - { - console.error(msg); - } - warned = true; - } - - return fn.apply(this, arguments); - } - - return deprecated; - } - - var debugs = {}; - var debugEnviron; - - function debuglog(set) { - if (isUndefined(debugEnviron)) debugEnviron = ''; - set = set.toUpperCase(); - - if (!debugs[set]) { - if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) { - var pid = 0; - - debugs[set] = function () { - var msg = format.apply(null, arguments); - console.error('%s %d: %s', set, pid, msg); - }; - } else { - debugs[set] = function () {}; - } - } - - return debugs[set]; - } - - function inspect(obj, opts) { - var ctx = { - seen: [], - stylize: stylizeNoColor - }; - if (arguments.length >= 3) ctx.depth = arguments[2]; - if (arguments.length >= 4) ctx.colors = arguments[3]; - - if (isBoolean(opts)) { - ctx.showHidden = opts; - } else if (opts) { - _extend(ctx, opts); - } - - if (isUndefined(ctx.showHidden)) ctx.showHidden = false; - if (isUndefined(ctx.depth)) ctx.depth = 2; - if (isUndefined(ctx.colors)) ctx.colors = false; - if (isUndefined(ctx.customInspect)) ctx.customInspect = true; - if (ctx.colors) ctx.stylize = stylizeWithColor; - return formatValue(ctx, obj, ctx.depth); - } - - inspect.colors = { - 'bold': [1, 22], - 'italic': [3, 23], - 'underline': [4, 24], - 'inverse': [7, 27], - 'white': [37, 39], - 'grey': [90, 39], - 'black': [30, 39], - 'blue': [34, 39], - 'cyan': [36, 39], - 'green': [32, 39], - 'magenta': [35, 39], - 'red': [31, 39], - 'yellow': [33, 39] - }; - inspect.styles = { - 'special': 'cyan', - 'number': 'yellow', - 'boolean': 'yellow', - 'undefined': 'grey', - 'null': 'bold', - 'string': 'green', - 'date': 'magenta', - 'regexp': 'red' - }; - - function stylizeWithColor(str, styleType) { - var style = inspect.styles[styleType]; - - if (style) { - return "\x1B[" + inspect.colors[style][0] + 'm' + str + "\x1B[" + inspect.colors[style][1] + 'm'; - } else { - return str; - } - } - - function stylizeNoColor(str, styleType) { - return str; - } - - function arrayToHash(array) { - var hash = {}; - array.forEach(function (val, idx) { - hash[val] = true; - }); - return hash; - } - - function formatValue(ctx, value, recurseTimes) { - if (ctx.customInspect && value && isFunction(value.inspect) && value.inspect !== inspect && !(value.constructor && value.constructor.prototype === value)) { - var ret = value.inspect(recurseTimes, ctx); - - if (!isString(ret)) { - ret = formatValue(ctx, ret, recurseTimes); - } - - return ret; - } - - var primitive = formatPrimitive(ctx, value); - - if (primitive) { - return primitive; - } - - var keys = Object.keys(value); - var visibleKeys = arrayToHash(keys); - - if (ctx.showHidden) { - keys = Object.getOwnPropertyNames(value); - } - - if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) { - return formatError(value); - } - - if (keys.length === 0) { - if (isFunction(value)) { - var name = value.name ? ': ' + value.name : ''; - return ctx.stylize('[Function' + name + ']', 'special'); - } - - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } - - if (isDate(value)) { - return ctx.stylize(Date.prototype.toString.call(value), 'date'); - } - - if (isError(value)) { - return formatError(value); - } - } - - var base = '', - array = false, - braces = ['{', '}']; - - if (isArray(value)) { - array = true; - braces = ['[', ']']; - } - - if (isFunction(value)) { - var n = value.name ? ': ' + value.name : ''; - base = ' [Function' + n + ']'; - } - - if (isRegExp(value)) { - base = ' ' + RegExp.prototype.toString.call(value); - } - - if (isDate(value)) { - base = ' ' + Date.prototype.toUTCString.call(value); - } - - if (isError(value)) { - base = ' ' + formatError(value); - } - - if (keys.length === 0 && (!array || value.length == 0)) { - return braces[0] + base + braces[1]; - } - - if (recurseTimes < 0) { - if (isRegExp(value)) { - return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); - } else { - return ctx.stylize('[Object]', 'special'); - } - } - - ctx.seen.push(value); - var output; - - if (array) { - output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); - } else { - output = keys.map(function (key) { - return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); - }); - } - - ctx.seen.pop(); - return reduceToSingleString(output, base, braces); - } - - function formatPrimitive(ctx, value) { - if (isUndefined(value)) return ctx.stylize('undefined', 'undefined'); - - if (isString(value)) { - var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\''; - return ctx.stylize(simple, 'string'); - } - - if (isNumber(value)) return ctx.stylize('' + value, 'number'); - if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); - if (isNull(value)) return ctx.stylize('null', 'null'); - } - - function formatError(value) { - return '[' + Error.prototype.toString.call(value) + ']'; - } - - function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { - var output = []; - - for (var i = 0, l = value.length; i < l; ++i) { - if (hasOwnProperty(value, String(i))) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); - } else { - output.push(''); - } - } - - keys.forEach(function (key) { - if (!key.match(/^\d+$/)) { - output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); - } - }); - return output; - } - - function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { - var name, str, desc; - desc = Object.getOwnPropertyDescriptor(value, key) || { - value: value[key] - }; - - if (desc.get) { - if (desc.set) { - str = ctx.stylize('[Getter/Setter]', 'special'); - } else { - str = ctx.stylize('[Getter]', 'special'); - } - } else { - if (desc.set) { - str = ctx.stylize('[Setter]', 'special'); - } - } - - if (!hasOwnProperty(visibleKeys, key)) { - name = '[' + key + ']'; - } - - if (!str) { - if (ctx.seen.indexOf(desc.value) < 0) { - if (isNull(recurseTimes)) { - str = formatValue(ctx, desc.value, null); - } else { - str = formatValue(ctx, desc.value, recurseTimes - 1); - } - - if (str.indexOf('\n') > -1) { - if (array) { - str = str.split('\n').map(function (line) { - return ' ' + line; - }).join('\n').substr(2); - } else { - str = '\n' + str.split('\n').map(function (line) { - return ' ' + line; - }).join('\n'); - } - } - } else { - str = ctx.stylize('[Circular]', 'special'); - } - } - - if (isUndefined(name)) { - if (array && key.match(/^\d+$/)) { - return str; - } - - name = JSON.stringify('' + key); - - if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { - name = name.substr(1, name.length - 2); - name = ctx.stylize(name, 'name'); - } else { - name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); - name = ctx.stylize(name, 'string'); - } - } - - return name + ': ' + str; - } - - function reduceToSingleString(output, base, braces) { - var length = output.reduce(function (prev, cur) { - if (cur.indexOf('\n') >= 0) ; - return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1; - }, 0); - - if (length > 60) { - return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; - } - - return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; - } - - function isArray(ar) { - return Array.isArray(ar); - } - - function isBoolean(arg) { - return typeof arg === 'boolean'; - } - - function isNull(arg) { - return arg === null; - } - - function isNullOrUndefined(arg) { - return arg == null; - } - - function isNumber(arg) { - return typeof arg === 'number'; - } - - function isString(arg) { - return typeof arg === 'string'; - } - - function isSymbol(arg) { - return _typeof(arg) === 'symbol'; - } - - function isUndefined(arg) { - return arg === void 0; - } - - function isRegExp(re) { - return isObject(re) && objectToString(re) === '[object RegExp]'; - } - - function isObject(arg) { - return _typeof(arg) === 'object' && arg !== null; - } - - function isDate(d) { - return isObject(d) && objectToString(d) === '[object Date]'; - } - - function isError(e) { - return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error); - } - - function isFunction(arg) { - return typeof arg === 'function'; - } - - function isPrimitive(arg) { - return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || typeof arg === 'undefined'; - } - - function isBuffer(maybeBuf) { - return Buffer.isBuffer(maybeBuf); - } - - function objectToString(o) { - return Object.prototype.toString.call(o); - } - - function pad(n) { - return n < 10 ? '0' + n.toString(10) : n.toString(10); - } - - var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; - - function timestamp() { - var d = new Date(); - var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':'); - return [d.getDate(), months[d.getMonth()], time].join(' '); - } - - function log() { - console.log('%s - %s', timestamp(), format.apply(null, arguments)); - } - - function _extend(origin, add) { - if (!add || !isObject(add)) return origin; - var keys = Object.keys(add); - var i = keys.length; - - while (i--) { - origin[keys[i]] = add[keys[i]]; - } - - return origin; - } - - function hasOwnProperty(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); - } - - var require$$0 = { - inherits: inherits$1, - _extend: _extend, - log: log, - isBuffer: isBuffer, - isPrimitive: isPrimitive, - isFunction: isFunction, - isError: isError, - isDate: isDate, - isObject: isObject, - isRegExp: isRegExp, - isUndefined: isUndefined, - isSymbol: isSymbol, - isString: isString, - isNumber: isNumber, - isNullOrUndefined: isNullOrUndefined, - isNull: isNull, - isBoolean: isBoolean, - isArray: isArray, - inspect: inspect, - deprecate: deprecate, - format: format, - debuglog: debuglog - }; - var inherits_browser = createCommonjsModule(function (module) { - if (typeof Object.create === 'function') { - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); - } - }; - } else { - module.exports = function inherits(ctor, superCtor) { - if (superCtor) { - ctor.super_ = superCtor; - - var TempCtor = function TempCtor() {}; - - TempCtor.prototype = superCtor.prototype; - ctor.prototype = new TempCtor(); - ctor.prototype.constructor = ctor; - } - }; - } - }); - var inherits$2 = createCommonjsModule(function (module) { - try { - var util = require$$0; - if (typeof util.inherits !== 'function') throw ''; - module.exports = util.inherits; - } catch (e) { - module.exports = inherits_browser; - } - }); - - function DESState() { - this.tmp = new Array(2); - this.keys = null; - } - - function DES(options) { - cipher.call(this, options); - var state = new DESState(); - this._desState = state; - this.deriveKeys(state, options.key); - } - - inherits$2(DES, cipher); - var des = DES; - - DES.create = function create(options) { - return new DES(options); - }; - - var shiftTable = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1]; - - DES.prototype.deriveKeys = function deriveKeys(state, key) { - state.keys = new Array(16 * 2); - minimalisticAssert.equal(key.length, this.blockSize, 'Invalid key length'); - var kL = utils$1.readUInt32BE(key, 0); - var kR = utils$1.readUInt32BE(key, 4); - utils$1.pc1(kL, kR, state.tmp, 0); - kL = state.tmp[0]; - kR = state.tmp[1]; - - for (var i = 0; i < state.keys.length; i += 2) { - var shift = shiftTable[i >>> 1]; - kL = utils$1.r28shl(kL, shift); - kR = utils$1.r28shl(kR, shift); - utils$1.pc2(kL, kR, state.keys, i); - } - }; - - DES.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._desState; - var l = utils$1.readUInt32BE(inp, inOff); - var r = utils$1.readUInt32BE(inp, inOff + 4); - utils$1.ip(l, r, state.tmp, 0); - l = state.tmp[0]; - r = state.tmp[1]; - if (this.type === 'encrypt') this._encrypt(state, l, r, state.tmp, 0);else this._decrypt(state, l, r, state.tmp, 0); - l = state.tmp[0]; - r = state.tmp[1]; - utils$1.writeUInt32BE(out, l, outOff); - utils$1.writeUInt32BE(out, r, outOff + 4); - }; - - DES.prototype._pad = function _pad(buffer, off) { - var value = buffer.length - off; - - for (var i = off; i < buffer.length; i++) { - buffer[i] = value; - } - - return true; - }; - - DES.prototype._unpad = function _unpad(buffer) { - var pad = buffer[buffer.length - 1]; - - for (var i = buffer.length - pad; i < buffer.length; i++) { - minimalisticAssert.equal(buffer[i], pad); - } - - return buffer.slice(0, buffer.length - pad); - }; - - DES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) { - var l = lStart; - var r = rStart; - - for (var i = 0; i < state.keys.length; i += 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; - utils$1.expand(r, state.tmp, 0); - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils$1.substitute(keyL, keyR); - var f = utils$1.permute(s); - var t = r; - r = (l ^ f) >>> 0; - l = t; - } - - utils$1.rip(r, l, out, off); - }; - - DES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) { - var l = rStart; - var r = lStart; - - for (var i = state.keys.length - 2; i >= 0; i -= 2) { - var keyL = state.keys[i]; - var keyR = state.keys[i + 1]; - utils$1.expand(l, state.tmp, 0); - keyL ^= state.tmp[0]; - keyR ^= state.tmp[1]; - var s = utils$1.substitute(keyL, keyR); - var f = utils$1.permute(s); - var t = l; - l = (r ^ f) >>> 0; - r = t; - } - - utils$1.rip(l, r, out, off); - }; - - var proto = {}; - - function CBCState(iv) { - minimalisticAssert.equal(iv.length, 8, 'Invalid IV length'); - this.iv = new Array(8); - - for (var i = 0; i < this.iv.length; i++) { - this.iv[i] = iv[i]; - } - } - - function instantiate(Base) { - function CBC(options) { - Base.call(this, options); - - this._cbcInit(); - } - - inherits$2(CBC, Base); - var keys = Object.keys(proto); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - CBC.prototype[key] = proto[key]; - } - - CBC.create = function create(options) { - return new CBC(options); - }; - - return CBC; - } - - var instantiate_1 = instantiate; - - proto._cbcInit = function _cbcInit() { - var state = new CBCState(this.options.iv); - this._cbcState = state; - }; - - proto._update = function _update(inp, inOff, out, outOff) { - var state = this._cbcState; - var superProto = this.constructor.super_.prototype; - var iv = state.iv; - - if (this.type === 'encrypt') { - for (var i = 0; i < this.blockSize; i++) { - iv[i] ^= inp[inOff + i]; - } - - superProto._update.call(this, iv, 0, out, outOff); - - for (var i = 0; i < this.blockSize; i++) { - iv[i] = out[outOff + i]; - } - } else { - superProto._update.call(this, inp, inOff, out, outOff); - - for (var i = 0; i < this.blockSize; i++) { - out[outOff + i] ^= iv[i]; - } - - for (var i = 0; i < this.blockSize; i++) { - iv[i] = inp[inOff + i]; - } - } - }; - - var cbc = { - instantiate: instantiate_1 - }; - - function EDEState(type, key) { - minimalisticAssert.equal(key.length, 24, 'Invalid key length'); - var k1 = key.slice(0, 8); - var k2 = key.slice(8, 16); - var k3 = key.slice(16, 24); - - if (type === 'encrypt') { - this.ciphers = [des.create({ - type: 'encrypt', - key: k1 - }), des.create({ - type: 'decrypt', - key: k2 - }), des.create({ - type: 'encrypt', - key: k3 - })]; - } else { - this.ciphers = [des.create({ - type: 'decrypt', - key: k3 - }), des.create({ - type: 'encrypt', - key: k2 - }), des.create({ - type: 'decrypt', - key: k1 - })]; - } - } - - function EDE(options) { - cipher.call(this, options); - var state = new EDEState(this.type, this.options.key); - this._edeState = state; - } - - inherits$2(EDE, cipher); - var ede = EDE; - - EDE.create = function create(options) { - return new EDE(options); - }; - - EDE.prototype._update = function _update(inp, inOff, out, outOff) { - var state = this._edeState; - - state.ciphers[0]._update(inp, inOff, out, outOff); - - state.ciphers[1]._update(out, outOff, out, outOff); - - state.ciphers[2]._update(out, outOff, out, outOff); - }; - - EDE.prototype._pad = des.prototype._pad; - EDE.prototype._unpad = des.prototype._unpad; - var utils$2 = utils$1; - var Cipher$1 = cipher; - var DES$1 = des; - var CBC = cbc; - var EDE$1 = ede; - var des$1 = { - utils: utils$2, - Cipher: Cipher$1, - DES: DES$1, - CBC: CBC, - EDE: EDE$1 - }; - var des$2 = Object.freeze({ - __proto__: null, - 'default': des$1, - __moduleExports: des$1, - utils: utils$2, - Cipher: Cipher$1, - DES: DES$1, - CBC: CBC, - EDE: EDE$1 - }); - - var DesCryptoKey = function (_CryptoKey$5) { - _inherits(DesCryptoKey, _CryptoKey$5); - - function DesCryptoKey(algorithm, extractable, usages, raw) { - var _this85; - - _classCallCheck(this, DesCryptoKey); - - _this85 = _possibleConstructorReturn(this, _getPrototypeOf(DesCryptoKey).call(this, algorithm, extractable, "secret", usages)); - _this85.raw = raw; - return _this85; - } - - _createClass(DesCryptoKey, [{ - key: "toJSON", - value: function toJSON() { - var jwk = { - kty: "oct", - alg: this.getJwkAlgorithm(), - k: Convert.ToBase64Url(this.raw), - ext: this.extractable, - key_ops: this.usages - }; - return jwk; - } - }, { - key: "getJwkAlgorithm", - value: function getJwkAlgorithm() { - switch (this.algorithm.name.toUpperCase()) { - case "DES-CBC": - return "DES-CBC"; - - case "DES-EDE3-CBC": - return "3DES-CBC"; - - default: - throw new AlgorithmError("Unsupported algorithm name"); - } - } - }]); - - return DesCryptoKey; - }(CryptoKey$1); - - var DesCrypto = function () { - function DesCrypto() { - _classCallCheck(this, DesCrypto); - } - - _createClass(DesCrypto, null, [{ - key: "checkLib", - value: function checkLib() { - if (typeof des$2 === "undefined") { - throw new OperationError("Cannot implement DES mechanism. Add 'https://peculiarventures.github.io/pv-webcrypto-tests/src/des.js' script to your project"); - } - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key) { - if (!(key instanceof DesCryptoKey)) { - throw new TypeError("key: Is not DesCryptoKey"); - } - } - }, { - key: "generateKey", - value: function generateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee72() { - var raw; - return regeneratorRuntime.wrap(function _callee72$(_context102) { - while (1) { - switch (_context102.prev = _context102.next) { - case 0: - this.checkLib(); - raw = exports.nativeCrypto.getRandomValues(new Uint8Array(algorithm.length / 8)); - return _context102.abrupt("return", new DesCryptoKey(algorithm, extractable, keyUsages, raw)); - - case 3: - case "end": - return _context102.stop(); - } - } - }, _callee72, this); - })); - } - }, { - key: "exportKey", - value: function exportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee73() { - return regeneratorRuntime.wrap(function _callee73$(_context103) { - while (1) { - switch (_context103.prev = _context103.next) { - case 0: - this.checkLib(); - _context103.t0 = format; - _context103.next = _context103.t0 === "jwk" ? 4 : _context103.t0 === "raw" ? 5 : 6; - break; - - case 4: - return _context103.abrupt("return", key.toJSON()); - - case 5: - return _context103.abrupt("return", key.raw.buffer); - - case 6: - throw new OperationError("format: Must be 'jwk' or 'raw'"); - - case 7: - case "end": - return _context103.stop(); - } - } - }, _callee73, this); - })); - } - }, { - key: "importKey", - value: function importKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee74() { - var raw, key; - return regeneratorRuntime.wrap(function _callee74$(_context104) { - while (1) { - switch (_context104.prev = _context104.next) { - case 0: - this.checkLib(); - - if (isJWK(keyData)) { - raw = Convert.FromBase64Url(keyData.k); - } else { - raw = BufferSourceConverter.toArrayBuffer(keyData); - } - - if (!(algorithm.name === "DES-CBC" && raw.byteLength !== 8 || algorithm.name === "DES-EDE3-CBC" && raw.byteLength !== 24)) { - _context104.next = 4; - break; - } - - throw new OperationError("keyData: Is wrong key length"); - - case 4: - key = new DesCryptoKey({ - name: algorithm.name, - length: raw.byteLength << 3 - }, extractable, keyUsages, new Uint8Array(raw)); - return _context104.abrupt("return", key); - - case 6: - case "end": - return _context104.stop(); - } - } - }, _callee74, this); - })); - } - }, { - key: "encrypt", - value: function encrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee75() { - return regeneratorRuntime.wrap(function _callee75$(_context105) { - while (1) { - switch (_context105.prev = _context105.next) { - case 0: - return _context105.abrupt("return", this.cipher(algorithm, key, data, true)); - - case 1: - case "end": - return _context105.stop(); - } - } - }, _callee75, this); - })); - } - }, { - key: "decrypt", - value: function decrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee76() { - return regeneratorRuntime.wrap(function _callee76$(_context106) { - while (1) { - switch (_context106.prev = _context106.next) { - case 0: - return _context106.abrupt("return", this.cipher(algorithm, key, data, false)); - - case 1: - case "end": - return _context106.stop(); - } - } - }, _callee76, this); - })); - } - }, { - key: "cipher", - value: function cipher(algorithm, key, data, encrypt) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee77() { - var type, DesCipher, iv, enc; - return regeneratorRuntime.wrap(function _callee77$(_context107) { - while (1) { - switch (_context107.prev = _context107.next) { - case 0: - this.checkLib(); - type = encrypt ? "encrypt" : "decrypt"; - iv = BufferSourceConverter.toUint8Array(algorithm.iv); - _context107.t0 = algorithm.name.toUpperCase(); - _context107.next = _context107.t0 === "DES-CBC" ? 6 : _context107.t0 === "DES-EDE3-CBC" ? 8 : 10; - break; - - case 6: - DesCipher = CBC.instantiate(DES$1).create({ - key: key.raw, - type: type, - iv: iv - }); - return _context107.abrupt("break", 11); - - case 8: - DesCipher = CBC.instantiate(EDE$1).create({ - key: key.raw, - type: type, - iv: iv - }); - return _context107.abrupt("break", 11); - - case 10: - throw new OperationError("algorithm: Is not recognized"); - - case 11: - enc = DesCipher.update(new Uint8Array(data)).concat(DesCipher.final()); - return _context107.abrupt("return", new Uint8Array(enc).buffer); - - case 13: - case "end": - return _context107.stop(); - } - } - }, _callee77, this); - })); - } - }]); - - return DesCrypto; - }(); - - var DesCbcProvider = function (_DesProvider) { - _inherits(DesCbcProvider, _DesProvider); - - function DesCbcProvider() { - var _this86; - - _classCallCheck(this, DesCbcProvider); - - _this86 = _possibleConstructorReturn(this, _getPrototypeOf(DesCbcProvider).apply(this, arguments)); - _this86.keySizeBits = 64; - _this86.ivSize = 8; - _this86.name = "DES-CBC"; - return _this86; - } - - _createClass(DesCbcProvider, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee78() { - return regeneratorRuntime.wrap(function _callee78$(_context108) { - while (1) { - switch (_context108.prev = _context108.next) { - case 0: - return _context108.abrupt("return", DesCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context108.stop(); - } - } - }, _callee78); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee79() { - return regeneratorRuntime.wrap(function _callee79$(_context109) { - while (1) { - switch (_context109.prev = _context109.next) { - case 0: - return _context109.abrupt("return", DesCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context109.stop(); - } - } - }, _callee79); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee80() { - return regeneratorRuntime.wrap(function _callee80$(_context110) { - while (1) { - switch (_context110.prev = _context110.next) { - case 0: - return _context110.abrupt("return", DesCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context110.stop(); - } - } - }, _callee80); - })); - } - }, { - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee81() { - return regeneratorRuntime.wrap(function _callee81$(_context111) { - while (1) { - switch (_context111.prev = _context111.next) { - case 0: - return _context111.abrupt("return", DesCrypto.encrypt(algorithm, key, data)); - - case 1: - case "end": - return _context111.stop(); - } - } - }, _callee81); - })); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee82() { - return regeneratorRuntime.wrap(function _callee82$(_context112) { - while (1) { - switch (_context112.prev = _context112.next) { - case 0: - return _context112.abrupt("return", DesCrypto.decrypt(algorithm, key, data)); - - case 1: - case "end": - return _context112.stop(); - } - } - }, _callee82); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(DesCbcProvider.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - DesCrypto.checkCryptoKey(key); - } - }]); - - return DesCbcProvider; - }(DesProvider); - - var DesEde3CbcProvider = function (_DesProvider2) { - _inherits(DesEde3CbcProvider, _DesProvider2); - - function DesEde3CbcProvider() { - var _this87; - - _classCallCheck(this, DesEde3CbcProvider); - - _this87 = _possibleConstructorReturn(this, _getPrototypeOf(DesEde3CbcProvider).apply(this, arguments)); - _this87.keySizeBits = 192; - _this87.ivSize = 8; - _this87.name = "DES-EDE3-CBC"; - return _this87; - } - - _createClass(DesEde3CbcProvider, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee83() { - return regeneratorRuntime.wrap(function _callee83$(_context113) { - while (1) { - switch (_context113.prev = _context113.next) { - case 0: - return _context113.abrupt("return", DesCrypto.generateKey(algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context113.stop(); - } - } - }, _callee83); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee84() { - return regeneratorRuntime.wrap(function _callee84$(_context114) { - while (1) { - switch (_context114.prev = _context114.next) { - case 0: - return _context114.abrupt("return", DesCrypto.exportKey(format, key)); - - case 1: - case "end": - return _context114.stop(); - } - } - }, _callee84); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee85() { - return regeneratorRuntime.wrap(function _callee85$(_context115) { - while (1) { - switch (_context115.prev = _context115.next) { - case 0: - return _context115.abrupt("return", DesCrypto.importKey(format, keyData, algorithm, extractable, keyUsages)); - - case 1: - case "end": - return _context115.stop(); - } - } - }, _callee85); - })); - } - }, { - key: "onEncrypt", - value: function onEncrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee86() { - return regeneratorRuntime.wrap(function _callee86$(_context116) { - while (1) { - switch (_context116.prev = _context116.next) { - case 0: - return _context116.abrupt("return", DesCrypto.encrypt(algorithm, key, data)); - - case 1: - case "end": - return _context116.stop(); - } - } - }, _callee86); - })); - } - }, { - key: "onDecrypt", - value: function onDecrypt(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee87() { - return regeneratorRuntime.wrap(function _callee87$(_context117) { - while (1) { - switch (_context117.prev = _context117.next) { - case 0: - return _context117.abrupt("return", DesCrypto.decrypt(algorithm, key, data)); - - case 1: - case "end": - return _context117.stop(); - } - } - }, _callee87); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(DesEde3CbcProvider.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - DesCrypto.checkCryptoKey(key); - } - }]); - - return DesEde3CbcProvider; - }(DesProvider); - - var HmacCryptoKey = function (_CryptoKey$6) { - _inherits(HmacCryptoKey, _CryptoKey$6); - - function HmacCryptoKey() { - var _this88; - - var algorithm = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : { - name: "HMAC" - }; - var extractable = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - var usages = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : []; - var data = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : new Uint8Array(0); - - _classCallCheck(this, HmacCryptoKey); - - _this88 = _possibleConstructorReturn(this, _getPrototypeOf(HmacCryptoKey).call(this, algorithm, extractable, "secret", usages)); - _this88.kty = "oct"; - _this88.data = data; - return _this88; - } - - _createClass(HmacCryptoKey, [{ - key: "alg", - get: function get() { - var hash = this.algorithm.hash.name.toUpperCase(); - return "HS".concat(hash.replace("SHA-", "")); - }, - set: function set(value) {} - }]); - - return HmacCryptoKey; - }(CryptoKey$1); - - __decorate([JsonProp({ - name: "ext", - type: JsonPropTypes.Boolean, - optional: true - })], HmacCryptoKey.prototype, "extractable", void 0); - - __decorate([JsonProp({ - name: "key_ops", - type: JsonPropTypes.String, - repeated: true, - optional: true - })], HmacCryptoKey.prototype, "usages", void 0); - - __decorate([JsonProp({ - name: "k", - converter: JsonBase64UrlArrayBufferConverter - })], HmacCryptoKey.prototype, "data", void 0); - - __decorate([JsonProp({ - type: JsonPropTypes.String - })], HmacCryptoKey.prototype, "kty", void 0); - - __decorate([JsonProp({ - type: JsonPropTypes.String - })], HmacCryptoKey.prototype, "alg", null); - - var HmacProvider$1 = function (_HmacProvider) { - _inherits(HmacProvider$1, _HmacProvider); - - function HmacProvider$1() { - _classCallCheck(this, HmacProvider$1); - - return _possibleConstructorReturn(this, _getPrototypeOf(HmacProvider$1).apply(this, arguments)); - } - - _createClass(HmacProvider$1, [{ - key: "onGenerateKey", - value: function onGenerateKey(algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee88() { - var length, raw, key; - return regeneratorRuntime.wrap(function _callee88$(_context118) { - while (1) { - switch (_context118.prev = _context118.next) { - case 0: - length = algorithm.length || this.getDefaultLength(algorithm.hash.name); - raw = exports.nativeCrypto.getRandomValues(new Uint8Array(length >> 3)); - key = new HmacCryptoKey(algorithm, extractable, keyUsages, raw); - return _context118.abrupt("return", key); - - case 4: - case "end": - return _context118.stop(); - } - } - }, _callee88, this); - })); - } - }, { - key: "onSign", - value: function onSign(algorithm, key, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee89() { - var fn, result; - return regeneratorRuntime.wrap(function _callee89$(_context119) { - while (1) { - switch (_context119.prev = _context119.next) { - case 0: - _context119.t0 = key.algorithm.hash.name.toUpperCase(); - _context119.next = _context119.t0 === "SHA-1" ? 3 : _context119.t0 === "SHA-256" ? 5 : _context119.t0 === "SHA-512" ? 7 : 9; - break; - - case 3: - fn = asmcrypto_js.HmacSha1; - return _context119.abrupt("break", 10); - - case 5: - fn = asmcrypto_js.HmacSha256; - return _context119.abrupt("break", 10); - - case 7: - fn = asmcrypto_js.HmacSha512; - return _context119.abrupt("break", 10); - - case 9: - throw new OperationError("key.algorithm.hash: Is not recognized"); - - case 10: - result = new fn(key.data).process(BufferSourceConverter.toUint8Array(data)).finish().result; - return _context119.abrupt("return", BufferSourceConverter.toArrayBuffer(result)); - - case 12: - case "end": - return _context119.stop(); - } - } - }, _callee89); - })); - } - }, { - key: "onVerify", - value: function onVerify(algorithm, key, signature, data) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee90() { - var signature2; - return regeneratorRuntime.wrap(function _callee90$(_context120) { - while (1) { - switch (_context120.prev = _context120.next) { - case 0: - _context120.next = 2; - return this.onSign(algorithm, key, data); - - case 2: - signature2 = _context120.sent; - return _context120.abrupt("return", Convert.ToHex(signature2) === Convert.ToHex(signature)); - - case 4: - case "end": - return _context120.stop(); - } - } - }, _callee90, this); - })); - } - }, { - key: "onImportKey", - value: function onImportKey(format, keyData, algorithm, extractable, keyUsages) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee91() { - var key; - return regeneratorRuntime.wrap(function _callee91$(_context121) { - while (1) { - switch (_context121.prev = _context121.next) { - case 0: - _context121.t0 = format.toLowerCase(); - _context121.next = _context121.t0 === "jwk" ? 3 : _context121.t0 === "raw" ? 5 : 9; - break; - - case 3: - key = JsonParser.fromJSON(keyData, { - targetSchema: HmacCryptoKey - }); - return _context121.abrupt("break", 10); - - case 5: - if (BufferSourceConverter.isBufferSource(keyData)) { - _context121.next = 7; - break; - } - - throw new TypeError("keyData: Is not ArrayBuffer or ArrayBufferView"); - - case 7: - key = new HmacCryptoKey(algorithm, extractable, keyUsages, BufferSourceConverter.toUint8Array(keyData)); - return _context121.abrupt("break", 10); - - case 9: - throw new OperationError("format: Must be 'jwk' or 'raw'"); - - case 10: - key.algorithm = { - hash: { - name: algorithm.hash.name - }, - name: this.name, - length: key.data.length << 3 - }; - key.extractable = extractable; - key.usages = keyUsages; - return _context121.abrupt("return", key); - - case 14: - case "end": - return _context121.stop(); - } - } - }, _callee91, this); - })); - } - }, { - key: "onExportKey", - value: function onExportKey(format, key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee92() { - var jwk; - return regeneratorRuntime.wrap(function _callee92$(_context122) { - while (1) { - switch (_context122.prev = _context122.next) { - case 0: - _context122.t0 = format.toLowerCase(); - _context122.next = _context122.t0 === "jwk" ? 3 : _context122.t0 === "raw" ? 5 : 6; - break; - - case 3: - jwk = JsonSerializer.toJSON(key); - return _context122.abrupt("return", jwk); - - case 5: - return _context122.abrupt("return", new Uint8Array(key.data).buffer); - - case 6: - throw new OperationError("format: Must be 'jwk' or 'raw'"); - - case 7: - case "end": - return _context122.stop(); - } - } - }, _callee92); - })); - } - }, { - key: "checkCryptoKey", - value: function checkCryptoKey(key, keyUsage) { - _get(_getPrototypeOf(HmacProvider$1.prototype), "checkCryptoKey", this).call(this, key, keyUsage); - - if (!(key instanceof HmacCryptoKey)) { - throw new TypeError("key: Is not HMAC CryptoKey"); - } - } - }]); - - return HmacProvider$1; - }(HmacProvider); - - var WrappedNativeCryptoKey = function (_CryptoKey$7) { - _inherits(WrappedNativeCryptoKey, _CryptoKey$7); - - function WrappedNativeCryptoKey(algorithm, extractable, type, usages, nativeKey) { - var _this89; - - _classCallCheck(this, WrappedNativeCryptoKey); - - _this89 = _possibleConstructorReturn(this, _getPrototypeOf(WrappedNativeCryptoKey).call(this, algorithm, extractable, type, usages)); - _this89.nativeKey = nativeKey; - return _this89; - } - - return WrappedNativeCryptoKey; - }(CryptoKey$1); - - var SubtleCrypto$1 = function (_SubtleCrypto) { - _inherits(SubtleCrypto$1, _SubtleCrypto); - - function SubtleCrypto$1() { - var _this90; - - _classCallCheck(this, SubtleCrypto$1); - - _this90 = _possibleConstructorReturn(this, _getPrototypeOf(SubtleCrypto$1).call(this)); - _this90.browserInfo = BrowserInfo(); - - _this90.providers.set(new AesCbcProvider$1()); - - _this90.providers.set(new AesCtrProvider$1()); - - _this90.providers.set(new AesEcbProvider$1()); - - _this90.providers.set(new AesGcmProvider$1()); - - _this90.providers.set(new AesKwProvider$1()); - - _this90.providers.set(new DesCbcProvider()); - - _this90.providers.set(new DesEde3CbcProvider()); - - _this90.providers.set(new RsaSsaProvider$1()); - - _this90.providers.set(new RsaPssProvider$1()); - - _this90.providers.set(new RsaOaepProvider$1()); - - _this90.providers.set(new RsaEsProvider()); - - _this90.providers.set(new EcdsaProvider$1()); - - _this90.providers.set(new EcdhProvider$1()); - - _this90.providers.set(new Sha1Provider()); - - _this90.providers.set(new Sha256Provider()); - - _this90.providers.set(new Sha512Provider()); - - _this90.providers.set(new Pbkdf2Provider$1()); - - _this90.providers.set(new HmacProvider$1()); - - return _this90; - } - - _createClass(SubtleCrypto$1, [{ - key: "digest", - value: function digest() { - for (var _len10 = arguments.length, args = new Array(_len10), _key12 = 0; _key12 < _len10; _key12++) { - args[_key12] = arguments[_key12]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee93() { - return regeneratorRuntime.wrap(function _callee93$(_context123) { - while (1) { - switch (_context123.prev = _context123.next) { - case 0: - return _context123.abrupt("return", this.wrapNative.apply(this, ["digest"].concat(args))); - - case 1: - case "end": - return _context123.stop(); - } - } - }, _callee93, this); - })); - } - }, { - key: "importKey", - value: function importKey() { - for (var _len11 = arguments.length, args = new Array(_len11), _key13 = 0; _key13 < _len11; _key13++) { - args[_key13] = arguments[_key13]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee94() { - return regeneratorRuntime.wrap(function _callee94$(_context124) { - while (1) { - switch (_context124.prev = _context124.next) { - case 0: - this.fixFirefoxEcImportPkcs8(args); - return _context124.abrupt("return", this.wrapNative.apply(this, ["importKey"].concat(args))); - - case 2: - case "end": - return _context124.stop(); - } - } - }, _callee94, this); - })); - } - }, { - key: "exportKey", - value: function exportKey() { - for (var _len12 = arguments.length, args = new Array(_len12), _key14 = 0; _key14 < _len12; _key14++) { - args[_key14] = arguments[_key14]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee95() { - return regeneratorRuntime.wrap(function _callee95$(_context125) { - while (1) { - switch (_context125.prev = _context125.next) { - case 0: - _context125.next = 2; - return this.fixFirefoxEcExportPkcs8(args); - - case 2: - _context125.t0 = _context125.sent; - - if (_context125.t0) { - _context125.next = 7; - break; - } - - _context125.next = 6; - return this.wrapNative.apply(this, ["exportKey"].concat(args)); - - case 6: - _context125.t0 = _context125.sent; - - case 7: - return _context125.abrupt("return", _context125.t0); - - case 8: - case "end": - return _context125.stop(); - } - } - }, _callee95, this); - })); - } - }, { - key: "generateKey", - value: function generateKey() { - for (var _len13 = arguments.length, args = new Array(_len13), _key15 = 0; _key15 < _len13; _key15++) { - args[_key15] = arguments[_key15]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee96() { - return regeneratorRuntime.wrap(function _callee96$(_context126) { - while (1) { - switch (_context126.prev = _context126.next) { - case 0: - return _context126.abrupt("return", this.wrapNative.apply(this, ["generateKey"].concat(args))); - - case 1: - case "end": - return _context126.stop(); - } - } - }, _callee96, this); - })); - } - }, { - key: "sign", - value: function sign() { - for (var _len14 = arguments.length, args = new Array(_len14), _key16 = 0; _key16 < _len14; _key16++) { - args[_key16] = arguments[_key16]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee97() { - return regeneratorRuntime.wrap(function _callee97$(_context127) { - while (1) { - switch (_context127.prev = _context127.next) { - case 0: - return _context127.abrupt("return", this.wrapNative.apply(this, ["sign"].concat(args))); - - case 1: - case "end": - return _context127.stop(); - } - } - }, _callee97, this); - })); - } - }, { - key: "verify", - value: function verify() { - for (var _len15 = arguments.length, args = new Array(_len15), _key17 = 0; _key17 < _len15; _key17++) { - args[_key17] = arguments[_key17]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee98() { - return regeneratorRuntime.wrap(function _callee98$(_context128) { - while (1) { - switch (_context128.prev = _context128.next) { - case 0: - return _context128.abrupt("return", this.wrapNative.apply(this, ["verify"].concat(args))); - - case 1: - case "end": - return _context128.stop(); - } - } - }, _callee98, this); - })); - } - }, { - key: "encrypt", - value: function encrypt() { - for (var _len16 = arguments.length, args = new Array(_len16), _key18 = 0; _key18 < _len16; _key18++) { - args[_key18] = arguments[_key18]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee99() { - return regeneratorRuntime.wrap(function _callee99$(_context129) { - while (1) { - switch (_context129.prev = _context129.next) { - case 0: - return _context129.abrupt("return", this.wrapNative.apply(this, ["encrypt"].concat(args))); - - case 1: - case "end": - return _context129.stop(); - } - } - }, _callee99, this); - })); - } - }, { - key: "decrypt", - value: function decrypt() { - for (var _len17 = arguments.length, args = new Array(_len17), _key19 = 0; _key19 < _len17; _key19++) { - args[_key19] = arguments[_key19]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee100() { - return regeneratorRuntime.wrap(function _callee100$(_context130) { - while (1) { - switch (_context130.prev = _context130.next) { - case 0: - return _context130.abrupt("return", this.wrapNative.apply(this, ["decrypt"].concat(args))); - - case 1: - case "end": - return _context130.stop(); - } - } - }, _callee100, this); - })); - } - }, { - key: "wrapKey", - value: function wrapKey() { - for (var _len18 = arguments.length, args = new Array(_len18), _key20 = 0; _key20 < _len18; _key20++) { - args[_key20] = arguments[_key20]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee101() { - return regeneratorRuntime.wrap(function _callee101$(_context131) { - while (1) { - switch (_context131.prev = _context131.next) { - case 0: - return _context131.abrupt("return", this.wrapNative.apply(this, ["wrapKey"].concat(args))); - - case 1: - case "end": - return _context131.stop(); - } - } - }, _callee101, this); - })); - } - }, { - key: "unwrapKey", - value: function unwrapKey() { - for (var _len19 = arguments.length, args = new Array(_len19), _key21 = 0; _key21 < _len19; _key21++) { - args[_key21] = arguments[_key21]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee102() { - return regeneratorRuntime.wrap(function _callee102$(_context132) { - while (1) { - switch (_context132.prev = _context132.next) { - case 0: - return _context132.abrupt("return", this.wrapNative.apply(this, ["unwrapKey"].concat(args))); - - case 1: - case "end": - return _context132.stop(); - } - } - }, _callee102, this); - })); - } - }, { - key: "deriveBits", - value: function deriveBits() { - for (var _len20 = arguments.length, args = new Array(_len20), _key22 = 0; _key22 < _len20; _key22++) { - args[_key22] = arguments[_key22]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee103() { - return regeneratorRuntime.wrap(function _callee103$(_context133) { - while (1) { - switch (_context133.prev = _context133.next) { - case 0: - return _context133.abrupt("return", this.wrapNative.apply(this, ["deriveBits"].concat(args))); - - case 1: - case "end": - return _context133.stop(); - } - } - }, _callee103, this); - })); - } - }, { - key: "deriveKey", - value: function deriveKey() { - for (var _len21 = arguments.length, args = new Array(_len21), _key23 = 0; _key23 < _len21; _key23++) { - args[_key23] = arguments[_key23]; - } - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee104() { - return regeneratorRuntime.wrap(function _callee104$(_context134) { - while (1) { - switch (_context134.prev = _context134.next) { - case 0: - return _context134.abrupt("return", this.wrapNative.apply(this, ["deriveKey"].concat(args))); - - case 1: - case "end": - return _context134.stop(); - } - } - }, _callee104, this); - })); - } - }, { - key: "wrapNative", - value: function wrapNative(method) { - var _this91 = this; - - for (var _len22 = arguments.length, args = new Array(_len22 > 1 ? _len22 - 1 : 0), _key24 = 1; _key24 < _len22; _key24++) { - args[_key24 - 1] = arguments[_key24]; - } - - var _superIndex = function _superIndex(name) { - return _get(_getPrototypeOf(SubtleCrypto$1.prototype), name, _this91); - }; - - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee105() { - var nativeArgs, res, data, keyData, _res, _data, _keyData, _res2, _data2, _res3, _iteratorNormalCompletion12, _didIteratorError12, _iteratorError12, _iterator12, _step12, arg, i, _arg; - - return regeneratorRuntime.wrap(function _callee105$(_context135) { - while (1) { - switch (_context135.prev = _context135.next) { - case 0: - if (~["generateKey", "unwrapKey", "deriveKey", "importKey"].indexOf(method)) { - this.fixAlgorithmName(args); - } - - _context135.prev = 1; - - if (!(method !== "digest" || !args.some(function (a) { - return a instanceof CryptoKey$1; - }))) { - _context135.next = 9; - break; - } - - nativeArgs = this.fixNativeArguments(method, args); - Debug.info("Call native '".concat(method, "' method"), nativeArgs); - _context135.next = 7; - return exports.nativeSubtle[method].apply(exports.nativeSubtle, nativeArgs); - - case 7: - res = _context135.sent; - return _context135.abrupt("return", this.fixNativeResult(method, args, res)); - - case 9: - _context135.next = 14; - break; - - case 11: - _context135.prev = 11; - _context135.t0 = _context135["catch"](1); - Debug.warn("Error on native '".concat(method, "' calling. ").concat(_context135.t0.message), _context135.t0); - - case 14: - if (!(method === "wrapKey")) { - _context135.next = 30; - break; - } - - _context135.prev = 15; - Debug.info("Trying to wrap key by using native functions", args); - _context135.next = 19; - return this.exportKey(args[0], args[1]); - - case 19: - data = _context135.sent; - keyData = args[0] === "jwk" ? Convert.FromUtf8String(JSON.stringify(data)) : data; - _context135.next = 23; - return this.encrypt(args[3], args[2], keyData); - - case 23: - _res = _context135.sent; - return _context135.abrupt("return", _res); - - case 27: - _context135.prev = 27; - _context135.t1 = _context135["catch"](15); - Debug.warn("Cannot wrap key by native functions. ".concat(_context135.t1.message), _context135.t1); - - case 30: - if (!(method === "unwrapKey")) { - _context135.next = 46; - break; - } - - _context135.prev = 31; - Debug.info("Trying to unwrap key by using native functions", args); - _context135.next = 35; - return this.decrypt(args[3], args[2], args[1]); - - case 35: - _data = _context135.sent; - _keyData = args[0] === "jwk" ? JSON.parse(Convert.ToUtf8String(_data)) : _data; - _context135.next = 39; - return this.importKey(args[0], _keyData, args[4], args[5], args[6]); - - case 39: - _res2 = _context135.sent; - return _context135.abrupt("return", _res2); - - case 43: - _context135.prev = 43; - _context135.t2 = _context135["catch"](31); - Debug.warn("Cannot unwrap key by native functions. ".concat(_context135.t2.message), _context135.t2); - - case 46: - if (!(method === "deriveKey")) { - _context135.next = 61; - break; - } - - _context135.prev = 47; - Debug.info("Trying to derive key by using native functions", args); - _context135.next = 51; - return this.deriveBits(args[0], args[1], args[2].length); - - case 51: - _data2 = _context135.sent; - _context135.next = 54; - return this.importKey("raw", _data2, args[2], args[3], args[4]); - - case 54: - _res3 = _context135.sent; - return _context135.abrupt("return", _res3); - - case 58: - _context135.prev = 58; - _context135.t3 = _context135["catch"](47); - Debug.warn("Cannot derive key by native functions. ".concat(_context135.t3.message), _context135.t3); - - case 61: - if (!(method === "deriveBits" || method === "deriveKey")) { - _context135.next = 90; - break; - } - - _iteratorNormalCompletion12 = true; - _didIteratorError12 = false; - _iteratorError12 = undefined; - _context135.prev = 65; - _iterator12 = args[Symbol.iterator](); - - case 67: - if (_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done) { - _context135.next = 76; - break; - } - - arg = _step12.value; - - if (!(_typeof(arg) === "object" && arg.public && SubtleCrypto$1.isAnotherKey(arg.public))) { - _context135.next = 73; - break; - } - - _context135.next = 72; - return this.castKey(arg.public); - - case 72: - arg.public = _context135.sent; - - case 73: - _iteratorNormalCompletion12 = true; - _context135.next = 67; - break; - - case 76: - _context135.next = 82; - break; - - case 78: - _context135.prev = 78; - _context135.t4 = _context135["catch"](65); - _didIteratorError12 = true; - _iteratorError12 = _context135.t4; - - case 82: - _context135.prev = 82; - _context135.prev = 83; - - if (!_iteratorNormalCompletion12 && _iterator12.return != null) { - _iterator12.return(); - } - - case 85: - _context135.prev = 85; - - if (!_didIteratorError12) { - _context135.next = 88; - break; - } - - throw _iteratorError12; - - case 88: - return _context135.finish(85); - - case 89: - return _context135.finish(82); - - case 90: - i = 0; - - case 91: - if (!(i < args.length)) { - _context135.next = 100; - break; - } - - _arg = args[i]; - - if (!SubtleCrypto$1.isAnotherKey(_arg)) { - _context135.next = 97; - break; - } - - _context135.next = 96; - return this.castKey(_arg); - - case 96: - args[i] = _context135.sent; - - case 97: - i++; - _context135.next = 91; - break; - - case 100: - return _context135.abrupt("return", _superIndex(method).apply(this, args)); - - case 101: - case "end": - return _context135.stop(); - } - } - }, _callee105, this, [[1, 11], [15, 27], [31, 43], [47, 58], [65, 78, 82, 90], [83,, 85, 89]]); - })); - } - }, { - key: "fixNativeArguments", - value: function fixNativeArguments(method, args) { - var _a, _b, _c, _d, _e, _f, _g, _h, _j; - - var res = _toConsumableArray(args); - - if (method === "importKey") { - if (this.browserInfo.name === Browser.IE && ((_c = (_a = res[0]) === null || _a === void 0 ? void 0 : (_b = _a).toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b)) === "jwk" && !BufferSourceConverter.isBufferSource(res[1])) { - res[1] = Convert.FromUtf8String(JSON.stringify(res[1])); - } - } - - if (this.browserInfo.name === Browser.IE && args[1] instanceof WrappedNativeCryptoKey) { - switch (method) { - case "sign": - case "verify": - case "encrypt": - case "decrypt": - res[0] = Object.assign(Object.assign({}, this.prepareAlgorithm(res[0])), { - hash: (_f = (_e = (_d = res[1]) === null || _d === void 0 ? void 0 : _d.algorithm) === null || _e === void 0 ? void 0 : _e.hash) === null || _f === void 0 ? void 0 : _f.name - }); - break; - - case "wrapKey": - case "unwrapKey": - res[4] = Object.assign(Object.assign({}, this.prepareAlgorithm(res[4])), { - hash: (_j = (_h = (_g = res[3]) === null || _g === void 0 ? void 0 : _g.algorithm) === null || _h === void 0 ? void 0 : _h.hash) === null || _j === void 0 ? void 0 : _j.name - }); - break; - } - } - - for (var i = 0; i < res.length; i++) { - var arg = res[i]; - - if (arg instanceof WrappedNativeCryptoKey) { - res[i] = arg.nativeKey; - } - } - - return res; - } - }, { - key: "fixNativeResult", - value: function fixNativeResult(method, args, res) { - var _a, _b, _c; - - if (method === "exportKey") { - if (((_c = (_a = args[0]) === null || _a === void 0 ? void 0 : (_b = _a).toLowerCase) === null || _c === void 0 ? void 0 : _c.call(_b)) === "jwk" && res instanceof ArrayBuffer) { - return JSON.parse(Convert.ToUtf8String(res)); - } - } - - if (this.browserInfo.name === Browser.IE) { - if ("privateKey" in res) { - var privateKeyUsages = ["sign", "decrypt", "unwrapKey", "deriveKey", "deriveBits"]; - var publicKeyUsages = ["verify", "encrypt", "wrapKey"]; - return { - privateKey: this.wrapNativeKey(res.privateKey, args[0], args[1], args[2].filter(function (o) { - return privateKeyUsages.includes(o); - })), - publicKey: this.wrapNativeKey(res.publicKey, args[0], args[1], args[2].filter(function (o) { - return publicKeyUsages.includes(o); - })) - }; - } else if ("extractable" in res) { - return this.wrapNativeKey(res, method === "importKey" ? args[2] : args[4], res.extractable, method === "importKey" ? args[4] : args[6]); - } - } - - return res; - } - }, { - key: "wrapNativeKey", - value: function wrapNativeKey(key, algorithm, extractable, keyUsages) { - if (this.browserInfo.name === Browser.IE) { - var algs = ["RSASSA-PKCS1-v1_5", "RSA-PSS", "RSA-OAEP"]; - var index = algs.map(function (o) { - return o.toLowerCase(); - }).indexOf(key.algorithm.name.toLowerCase()); - - if (index !== -1) { - var alg = this.prepareAlgorithm(algorithm); - - if (SubtleCrypto.isHashedAlgorithm(alg)) { - var newAlg = Object.assign(Object.assign(Object.assign({}, key.algorithm), alg), { - name: algs[index] - }); - return new WrappedNativeCryptoKey(newAlg, extractable, key.type, keyUsages, key); - } - } - } - - return key; - } - }, { - key: "castKey", - value: function castKey(key) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee106() { - var provider, jwk; - return regeneratorRuntime.wrap(function _callee106$(_context136) { - while (1) { - switch (_context136.prev = _context136.next) { - case 0: - Debug.info("Cast native CryptoKey to linter key.", key); - - if (key.extractable) { - _context136.next = 3; - break; - } - - throw new Error("Cannot cast unextractable crypto key"); - - case 3: - provider = this.getProvider(key.algorithm.name); - _context136.next = 6; - return this.exportKey("jwk", key); - - case 6: - jwk = _context136.sent; - return _context136.abrupt("return", provider.importKey("jwk", jwk, key.algorithm, true, key.usages)); - - case 8: - case "end": - return _context136.stop(); - } - } - }, _callee106, this); - })); - } - }, { - key: "fixAlgorithmName", - value: function fixAlgorithmName(args) { - if (this.browserInfo.name === Browser.Edge) { - for (var i = 0; i < args.length; i++) { - var arg = args[0]; - - if (typeof arg === "string") { - var _iteratorNormalCompletion13 = true; - var _didIteratorError13 = false; - var _iteratorError13 = undefined; - - try { - for (var _iterator13 = this.providers.algorithms[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) { - var algorithm = _step13.value; - - if (algorithm.toLowerCase() === arg.toLowerCase()) { - args[i] = algorithm; - break; - } - } - } catch (err) { - _didIteratorError13 = true; - _iteratorError13 = err; - } finally { - try { - if (!_iteratorNormalCompletion13 && _iterator13.return != null) { - _iterator13.return(); - } - } finally { - if (_didIteratorError13) { - throw _iteratorError13; - } - } - } - } else if (_typeof(arg) === "object" && typeof arg.name === "string") { - var _iteratorNormalCompletion14 = true; - var _didIteratorError14 = false; - var _iteratorError14 = undefined; - - try { - for (var _iterator14 = this.providers.algorithms[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) { - var _algorithm = _step14.value; - - if (_algorithm.toLowerCase() === arg.name.toLowerCase()) { - arg.name = _algorithm; - } - - if (typeof arg.hash === "string" && _algorithm.toLowerCase() === arg.hash.toLowerCase() || _typeof(arg.hash) === "object" && typeof arg.hash.name === "string" && _algorithm.toLowerCase() === arg.hash.name.toLowerCase()) { - arg.hash = { - name: _algorithm - }; - } - } - } catch (err) { - _didIteratorError14 = true; - _iteratorError14 = err; - } finally { - try { - if (!_iteratorNormalCompletion14 && _iterator14.return != null) { - _iterator14.return(); - } - } finally { - if (_didIteratorError14) { - throw _iteratorError14; - } - } - } - } - } - } - } - }, { - key: "fixFirefoxEcImportPkcs8", - value: function fixFirefoxEcImportPkcs8(args) { - var preparedAlgorithm = this.prepareAlgorithm(args[2]); - var algName = preparedAlgorithm.name.toUpperCase(); - - if (this.browserInfo.name === Browser.Firefox && args[0] === "pkcs8" && ~["ECDSA", "ECDH"].indexOf(algName) && ~["P-256", "P-384", "P-521"].indexOf(preparedAlgorithm.namedCurve)) { - if (!BufferSourceConverter.isBufferSource(args[1])) { - throw new TypeError("data: Is not ArrayBuffer or ArrayBufferView"); - } - - var preparedData = BufferSourceConverter.toArrayBuffer(args[1]); - var keyInfo = AsnParser.parse(preparedData, PrivateKeyInfo); - var privateKey = AsnParser.parse(keyInfo.privateKey, EcPrivateKey); - var jwk = JsonSerializer.toJSON(privateKey); - jwk.ext = true; - jwk.key_ops = args[4]; - jwk.crv = preparedAlgorithm.namedCurve; - jwk.kty = "EC"; - args[0] = "jwk"; - args[1] = jwk; - } - } - }, { - key: "fixFirefoxEcExportPkcs8", - value: function fixFirefoxEcExportPkcs8(args) { - return __awaiter(this, void 0, void 0, regeneratorRuntime.mark(function _callee107() { - var jwk, ecKey, keyInfo; - return regeneratorRuntime.wrap(function _callee107$(_context137) { - while (1) { - switch (_context137.prev = _context137.next) { - case 0: - _context137.prev = 0; - - if (!(this.browserInfo.name === Browser.Firefox && args[0] === "pkcs8" && ~["ECDSA", "ECDH"].indexOf(args[1].algorithm.name) && ~["P-256", "P-384", "P-521"].indexOf(args[1].algorithm.namedCurve))) { - _context137.next = 11; - break; - } - - _context137.next = 4; - return this.exportKey("jwk", args[1]); - - case 4: - jwk = _context137.sent; - ecKey = JsonParser.fromJSON(jwk, { - targetSchema: EcPrivateKey - }); - keyInfo = new PrivateKeyInfo(); - keyInfo.privateKeyAlgorithm.algorithm = EcCrypto.ASN_ALGORITHM; - keyInfo.privateKeyAlgorithm.parameters = AsnSerializer.serialize(new ObjectIdentifier(getOidByNamedCurve(args[1].algorithm.namedCurve))); - keyInfo.privateKey = AsnSerializer.serialize(ecKey); - return _context137.abrupt("return", AsnSerializer.serialize(keyInfo)); - - case 11: - _context137.next = 17; - break; - - case 13: - _context137.prev = 13; - _context137.t0 = _context137["catch"](0); - Debug.error(_context137.t0); - return _context137.abrupt("return", null); - - case 17: - case "end": - return _context137.stop(); - } - } - }, _callee107, this, [[0, 13]]); - })); - } - }], [{ - key: "isAnotherKey", - value: function isAnotherKey(key) { - if (_typeof(key) === "object" && typeof key.type === "string" && typeof key.extractable === "boolean" && _typeof(key.algorithm) === "object") { - return !(key instanceof CryptoKey$1); - } - - return false; - } - }]); - - return SubtleCrypto$1; - }(SubtleCrypto); - - SubtleCrypto$1.methods = ["digest", "importKey", "exportKey", "sign", "verify", "generateKey", "encrypt", "decrypt", "deriveBits", "deriveKey", "wrapKey", "unwrapKey"]; - - var Crypto$1 = function (_Crypto) { - _inherits(Crypto$1, _Crypto); - - function Crypto$1() { - var _this92; - - _classCallCheck(this, Crypto$1); - - _this92 = _possibleConstructorReturn(this, _getPrototypeOf(Crypto$1).apply(this, arguments)); - _this92.subtle = new SubtleCrypto$1(); - return _this92; - } - - _createClass(Crypto$1, [{ - key: "getRandomValues", - value: function getRandomValues(array) { - return exports.nativeCrypto.getRandomValues(array); - } - }, { - key: "nativeCrypto", - get: function get() { - return exports.nativeCrypto; - } - }]); - - return Crypto$1; - }(Crypto); - - function WrapFunction(subtle, name) { - var fn = subtle[name]; - - subtle[name] = function () { - var args = arguments; - return new Promise(function (resolve, reject) { - var op = fn.apply(subtle, args); - - op.oncomplete = function (e) { - resolve(e.target.result); - }; - - op.onerror = function (e) { - reject("Error on running '".concat(name, "' function")); - }; - }); - }; - } - - if (typeof self !== "undefined" && self["msCrypto"]) { - WrapFunction(exports.nativeSubtle, "generateKey"); - WrapFunction(exports.nativeSubtle, "digest"); - WrapFunction(exports.nativeSubtle, "sign"); - WrapFunction(exports.nativeSubtle, "verify"); - WrapFunction(exports.nativeSubtle, "encrypt"); - WrapFunction(exports.nativeSubtle, "decrypt"); - WrapFunction(exports.nativeSubtle, "importKey"); - WrapFunction(exports.nativeSubtle, "exportKey"); - WrapFunction(exports.nativeSubtle, "wrapKey"); - WrapFunction(exports.nativeSubtle, "unwrapKey"); - WrapFunction(exports.nativeSubtle, "deriveKey"); - WrapFunction(exports.nativeSubtle, "deriveBits"); - } - - if (!Math.imul) { - Math.imul = function imul(a, b) { - var ah = a >>> 16 & 0xffff; - var al = a & 0xffff; - var bh = b >>> 16 & 0xffff; - var bl = b & 0xffff; - return al * bl + (ah * bl + al * bh << 16 >>> 0) | 0; - }; - } - - var window$1 = self; - - if (exports.nativeCrypto) { - Object.freeze(exports.nativeCrypto.getRandomValues); - } - - try { - delete self.crypto; - window$1.crypto = new Crypto$1(); - Object.freeze(window$1.crypto); - } catch (e) { - Debug.error(e); - } - - var crypto = window$1.crypto; - - exports.Crypto = Crypto$1; - exports.CryptoKey = CryptoKey$1; - exports.crypto = crypto; - exports.setCrypto = setCrypto; - - return exports; - -}({}, self.asmCrypto, self.elliptic));