diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,3 @@
+# Version 0.1
+
+* Initial version.
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,219 @@
+Copyright 2020, Renzo Carbonara.
+
+Except where otherwise explicitly mentioned, all of contents of the
+"bitcoin-keys" project are licensed under the Apache License,
+Version 2.0 (the "License"); you may not use this file except in
+compliance with the License. You may obtain a copy of the License at the
+end of this file or at http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+
+-------------------------------------------------------------------------------
+
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+# bitcoin-keys
+
+Bitcoin keys.
+
+This library builds on GHC and GHCJS.
+
+## Developing in GHCJS
+
+* `cabal --ghcjs build` will build the Haskell `bitcoin-keys` library with the
+  JavaScript dependencies already compiled at `js/index.compiled.js`.
+
+* If the `js/index.js` file changes, run `npx webpack` to regenerate
+  `js/index.compiled.js` and commit both files to the repository.
+
+* If the `package.json` file changes, run `npm install -D` to get new JS
+  dependencies, and then run `npx webpack` as above.
diff --git a/bitcoin-keys.cabal b/bitcoin-keys.cabal
new file mode 100644
--- /dev/null
+++ b/bitcoin-keys.cabal
@@ -0,0 +1,51 @@
+cabal-version: 2.4
+name: bitcoin-keys
+version: 0.1
+license: Apache-2.0
+license-file: LICENSE
+extra-source-files: README.md CHANGELOG.md
+author: Renzo Carbonara
+maintainer: renλren.zone
+copyright: Copyright (c) Renzo Carbonara 2020
+category: Cryptography
+build-type: Simple
+synopsis: Bitcoin keys
+description:
+  Bitcoin keys.
+  .
+  This library builds in GHC and GHCJS.
+homepage: https://gitlab.com/k0001/hs-bitcoin-keys
+bug-reports: https://gitlab.com/k0001/hs-bitcoin-keys/issues
+tested-with: GHC == 8.8.3, GHC == 8.6.5, GHCJS == 8.6.0
+
+common basic
+  default-language: Haskell2010
+  ghc-options: -O2 -Wall -Werror=incomplete-patterns
+  ghcjs-options: -O3 -Wall -Werror=incomplete-patterns
+  build-depends: base == 4.*, bytestring
+
+library
+  import: basic
+  hs-source-dirs: lib
+  exposed-modules: Bitcoin.Keys
+  If impl(ghcjs)
+    other-modules: Bitcoin.Keys.GHCJS
+    build-depends: ghcjs-base
+    -- This is file is generated. See README.md.
+    js-sources: js/index.compiled.js
+  else
+    other-modules: Bitcoin.Keys.GHC
+    build-depends: secp256k1-haskell
+
+test-suite test
+  import: basic
+  type: exitcode-stdio-1.0
+  hs-source-dirs: test
+  main-is: Main.hs
+  build-depends:
+    base16-bytestring,
+    hedgehog,
+    bitcoin-keys,
+    tasty,
+    tasty-hedgehog,
+    tasty-hunit,
diff --git a/js/index.compiled.js b/js/index.compiled.js
new file mode 100644
--- /dev/null
+++ b/js/index.compiled.js
@@ -0,0 +1,1 @@
+var h$bitcoin_keys=function(e){var t={};function r(i){if(t[i])return t[i].exports;var f=t[i]={i:i,l:!1,exports:{}};return e[i].call(f.exports,f,f.exports,r),f.l=!0,f.exports}return r.m=e,r.c=t,r.d=function(e,t,i){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(r.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var f in e)r.d(i,f,function(t){return e[t]}.bind(null,f));return i},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=16)}([function(e,t,r){"use strict";var i=t,f=r(2),n=r(3),d=r(10);i.assert=n,i.toArray=d.toArray,i.zero2=d.zero2,i.toHex=d.toHex,i.encode=d.encode,i.getNAF=function(e,t,r){var i=new Array(Math.max(e.bitLength(),r)+1);i.fill(0);for(var f=1<<t+1,n=e.clone(),d=0;d<i.length;d++){var a,c=n.andln(f-1);n.isOdd()?(a=c>(f>>1)-1?(f>>1)-c:c,n.isubn(a)):a=0,i[d]=a,n.iushrn(1)}return i},i.getJSF=function(e,t){var r=[[],[]];e=e.clone(),t=t.clone();for(var i=0,f=0;e.cmpn(-i)>0||t.cmpn(-f)>0;){var n,d,a,c=e.andln(3)+i&3,s=t.andln(3)+f&3;if(3===c&&(c=-1),3===s&&(s=-1),0==(1&c))n=0;else n=3!==(a=e.andln(7)+i&7)&&5!==a||2!==s?c:-c;if(r[0].push(n),0==(1&s))d=0;else d=3!==(a=t.andln(7)+f&7)&&5!==a||2!==c?s:-s;r[1].push(d),2*i===n+1&&(i=1-i),2*f===d+1&&(f=1-f),e.iushrn(1),t.iushrn(1)}return r},i.cachedProperty=function(e,t,r){var i="_"+t;e.prototype[t]=function(){return void 0!==this[i]?this[i]:this[i]=r.call(this)}},i.parseBytes=function(e){return"string"==typeof e?i.toArray(e,"hex"):e},i.intFromLE=function(e){return new f(e,"hex","le")}},function(e,t,r){"use strict";var i=r(3),f=r(7);function n(e,t){return 55296==(64512&e.charCodeAt(t))&&(!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1)))}function d(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function a(e){return 1===e.length?"0"+e:e}function c(e){return 7===e.length?"0"+e:6===e.length?"00"+e:5===e.length?"000"+e:4===e.length?"0000"+e:3===e.length?"00000"+e:2===e.length?"000000"+e:1===e.length?"0000000"+e:e}t.inherits=f,t.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"==typeof e)if(t){if("hex"===t)for((e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e),f=0;f<e.length;f+=2)r.push(parseInt(e[f]+e[f+1],16))}else for(var i=0,f=0;f<e.length;f++){var d=e.charCodeAt(f);d<128?r[i++]=d:d<2048?(r[i++]=d>>6|192,r[i++]=63&d|128):n(e,f)?(d=65536+((1023&d)<<10)+(1023&e.charCodeAt(++f)),r[i++]=d>>18|240,r[i++]=d>>12&63|128,r[i++]=d>>6&63|128,r[i++]=63&d|128):(r[i++]=d>>12|224,r[i++]=d>>6&63|128,r[i++]=63&d|128)}else for(f=0;f<e.length;f++)r[f]=0|e[f];return r},t.toHex=function(e){for(var t="",r=0;r<e.length;r++)t+=a(e[r].toString(16));return t},t.htonl=d,t.toHex32=function(e,t){for(var r="",i=0;i<e.length;i++){var f=e[i];"little"===t&&(f=d(f)),r+=c(f.toString(16))}return r},t.zero2=a,t.zero8=c,t.join32=function(e,t,r,f){var n=r-t;i(n%4==0);for(var d=new Array(n/4),a=0,c=t;a<d.length;a++,c+=4){var s;s="big"===f?e[c]<<24|e[c+1]<<16|e[c+2]<<8|e[c+3]:e[c+3]<<24|e[c+2]<<16|e[c+1]<<8|e[c],d[a]=s>>>0}return d},t.split32=function(e,t){for(var r=new Array(4*e.length),i=0,f=0;i<e.length;i++,f+=4){var n=e[i];"big"===t?(r[f]=n>>>24,r[f+1]=n>>>16&255,r[f+2]=n>>>8&255,r[f+3]=255&n):(r[f+3]=n>>>24,r[f+2]=n>>>16&255,r[f+1]=n>>>8&255,r[f]=255&n)}return r},t.rotr32=function(e,t){return e>>>t|e<<32-t},t.rotl32=function(e,t){return e<<t|e>>>32-t},t.sum32=function(e,t){return e+t>>>0},t.sum32_3=function(e,t,r){return e+t+r>>>0},t.sum32_4=function(e,t,r,i){return e+t+r+i>>>0},t.sum32_5=function(e,t,r,i,f){return e+t+r+i+f>>>0},t.sum64=function(e,t,r,i){var f=e[t],n=i+e[t+1]>>>0,d=(n<i?1:0)+r+f;e[t]=d>>>0,e[t+1]=n},t.sum64_hi=function(e,t,r,i){return(t+i>>>0<t?1:0)+e+r>>>0},t.sum64_lo=function(e,t,r,i){return t+i>>>0},t.sum64_4_hi=function(e,t,r,i,f,n,d,a){var c=0,s=t;return c+=(s=s+i>>>0)<t?1:0,c+=(s=s+n>>>0)<n?1:0,e+r+f+d+(c+=(s=s+a>>>0)<a?1:0)>>>0},t.sum64_4_lo=function(e,t,r,i,f,n,d,a){return t+i+n+a>>>0},t.sum64_5_hi=function(e,t,r,i,f,n,d,a,c,s){var o=0,h=t;return o+=(h=h+i>>>0)<t?1:0,o+=(h=h+n>>>0)<n?1:0,o+=(h=h+a>>>0)<a?1:0,e+r+f+d+c+(o+=(h=h+s>>>0)<s?1:0)>>>0},t.sum64_5_lo=function(e,t,r,i,f,n,d,a,c,s){return t+i+n+a+s>>>0},t.rotr64_hi=function(e,t,r){return(t<<32-r|e>>>r)>>>0},t.rotr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0},t.shr64_hi=function(e,t,r){return e>>>r},t.shr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0}},function(e,t,r){(function(e){!function(e,t){"use strict";function i(e,t){if(!e)throw new Error(t||"Assertion failed")}function f(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function n(e,t,r){if(n.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&("le"!==t&&"be"!==t||(r=t,t=10),this._init(e||0,t||10,r||"be"))}var d;"object"==typeof e?e.exports=n:t.BN=n,n.BN=n,n.wordSize=26;try{d=r(22).Buffer}catch(e){}function a(e,t,r){for(var i=0,f=Math.min(e.length,r),n=t;n<f;n++){var d=e.charCodeAt(n)-48;i<<=4,i|=d>=49&&d<=54?d-49+10:d>=17&&d<=22?d-17+10:15&d}return i}function c(e,t,r,i){for(var f=0,n=Math.min(e.length,r),d=t;d<n;d++){var a=e.charCodeAt(d)-48;f*=i,f+=a>=49?a-49+10:a>=17?a-17+10:a}return f}n.isBN=function(e){return e instanceof n||null!==e&&"object"==typeof e&&e.constructor.wordSize===n.wordSize&&Array.isArray(e.words)},n.max=function(e,t){return e.cmp(t)>0?e:t},n.min=function(e,t){return e.cmp(t)<0?e:t},n.prototype._init=function(e,t,r){if("number"==typeof e)return this._initNumber(e,t,r);if("object"==typeof e)return this._initArray(e,t,r);"hex"===t&&(t=16),i(t===(0|t)&&t>=2&&t<=36);var f=0;"-"===(e=e.toString().replace(/\s+/g,""))[0]&&f++,16===t?this._parseHex(e,f):this._parseBase(e,t,f),"-"===e[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),t,r)},n.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(i(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),t,r)},n.prototype._initArray=function(e,t,r){if(i("number"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var f=0;f<this.length;f++)this.words[f]=0;var n,d,a=0;if("be"===r)for(f=e.length-1,n=0;f>=0;f-=3)d=e[f]|e[f-1]<<8|e[f-2]<<16,this.words[n]|=d<<a&67108863,this.words[n+1]=d>>>26-a&67108863,(a+=24)>=26&&(a-=26,n++);else if("le"===r)for(f=0,n=0;f<e.length;f+=3)d=e[f]|e[f+1]<<8|e[f+2]<<16,this.words[n]|=d<<a&67108863,this.words[n+1]=d>>>26-a&67108863,(a+=24)>=26&&(a-=26,n++);return this.strip()},n.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var i,f,n=0;for(r=e.length-6,i=0;r>=t;r-=6)f=a(e,r,r+6),this.words[i]|=f<<n&67108863,this.words[i+1]|=f>>>26-n&4194303,(n+=24)>=26&&(n-=26,i++);r+6!==t&&(f=a(e,t,r+6),this.words[i]|=f<<n&67108863,this.words[i+1]|=f>>>26-n&4194303),this.strip()},n.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var i=0,f=1;f<=67108863;f*=t)i++;i--,f=f/t|0;for(var n=e.length-r,d=n%i,a=Math.min(n,n-d)+r,s=0,o=r;o<a;o+=i)s=c(e,o,o+i,t),this.imuln(f),this.words[0]+s<67108864?this.words[0]+=s:this._iaddn(s);if(0!==d){var h=1;for(s=c(e,o,e.length,t),o=0;o<d;o++)h*=t;this.imuln(h),this.words[0]+s<67108864?this.words[0]+=s:this._iaddn(s)}},n.prototype.copy=function(e){e.words=new Array(this.length);for(var t=0;t<this.length;t++)e.words[t]=this.words[t];e.length=this.length,e.negative=this.negative,e.red=this.red},n.prototype.clone=function(){var e=new n(null);return this.copy(e),e},n.prototype._expand=function(e){for(;this.length<e;)this.words[this.length++]=0;return this},n.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},n.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},n.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var s=["","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"],o=[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],h=[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];function u(e,t,r){r.negative=t.negative^e.negative;var i=e.length+t.length|0;r.length=i,i=i-1|0;var f=0|e.words[0],n=0|t.words[0],d=f*n,a=67108863&d,c=d/67108864|0;r.words[0]=a;for(var s=1;s<i;s++){for(var o=c>>>26,h=67108863&c,u=Math.min(s,t.length-1),b=Math.max(0,s-e.length+1);b<=u;b++){var l=s-b|0;o+=(d=(f=0|e.words[l])*(n=0|t.words[b])+h)/67108864|0,h=67108863&d}r.words[s]=0|h,c=0|o}return 0!==c?r.words[s]=0|c:r.length--,r.strip()}n.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||"hex"===e){r="";for(var f=0,n=0,d=0;d<this.length;d++){var a=this.words[d],c=(16777215&(a<<f|n)).toString(16);r=0!==(n=a>>>24-f&16777215)||d!==this.length-1?s[6-c.length]+c+r:c+r,(f+=2)>=26&&(f-=26,d--)}for(0!==n&&(r=n.toString(16)+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(e===(0|e)&&e>=2&&e<=36){var u=o[e],b=h[e];r="";var l=this.clone();for(l.negative=0;!l.isZero();){var p=l.modn(b).toString(e);r=(l=l.idivn(b)).isZero()?p+r:s[u-p.length]+p+r}for(this.isZero()&&(r="0"+r);r.length%t!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}i(!1,"Base should be between 2 and 36")},n.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&i(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-e:e},n.prototype.toJSON=function(){return this.toString(16)},n.prototype.toBuffer=function(e,t){return i(void 0!==d),this.toArrayLike(d,e,t)},n.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},n.prototype.toArrayLike=function(e,t,r){var f=this.byteLength(),n=r||Math.max(1,f);i(f<=n,"byte array longer than desired length"),i(n>0,"Requested array length <= 0"),this.strip();var d,a,c="le"===t,s=new e(n),o=this.clone();if(c){for(a=0;!o.isZero();a++)d=o.andln(255),o.iushrn(8),s[a]=d;for(;a<n;a++)s[a]=0}else{for(a=0;a<n-f;a++)s[a]=0;for(a=0;!o.isZero();a++)d=o.andln(255),o.iushrn(8),s[n-a-1]=d}return s},Math.clz32?n.prototype._countBits=function(e){return 32-Math.clz32(e)}:n.prototype._countBits=function(e){var t=e,r=0;return t>=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},n.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},n.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},n.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;t<this.length;t++){var r=this._zeroBits(this.words[t]);if(e+=r,26!==r)break}return e},n.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},n.prototype.toTwos=function(e){return 0!==this.negative?this.abs().inotn(e).iaddn(1):this.clone()},n.prototype.fromTwos=function(e){return this.testn(e-1)?this.notn(e).iaddn(1).ineg():this.clone()},n.prototype.isNeg=function(){return 0!==this.negative},n.prototype.neg=function(){return this.clone().ineg()},n.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},n.prototype.iuor=function(e){for(;this.length<e.length;)this.words[this.length++]=0;for(var t=0;t<e.length;t++)this.words[t]=this.words[t]|e.words[t];return this.strip()},n.prototype.ior=function(e){return i(0==(this.negative|e.negative)),this.iuor(e)},n.prototype.or=function(e){return this.length>e.length?this.clone().ior(e):e.clone().ior(this)},n.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},n.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;r<t.length;r++)this.words[r]=this.words[r]&e.words[r];return this.length=t.length,this.strip()},n.prototype.iand=function(e){return i(0==(this.negative|e.negative)),this.iuand(e)},n.prototype.and=function(e){return this.length>e.length?this.clone().iand(e):e.clone().iand(this)},n.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},n.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var i=0;i<r.length;i++)this.words[i]=t.words[i]^r.words[i];if(this!==t)for(;i<t.length;i++)this.words[i]=t.words[i];return this.length=t.length,this.strip()},n.prototype.ixor=function(e){return i(0==(this.negative|e.negative)),this.iuxor(e)},n.prototype.xor=function(e){return this.length>e.length?this.clone().ixor(e):e.clone().ixor(this)},n.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},n.prototype.inotn=function(e){i("number"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var f=0;f<t;f++)this.words[f]=67108863&~this.words[f];return r>0&&(this.words[f]=~this.words[f]&67108863>>26-r),this.strip()},n.prototype.notn=function(e){return this.clone().inotn(e)},n.prototype.setn=function(e,t){i("number"==typeof e&&e>=0);var r=e/26|0,f=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<<f:this.words[r]&~(1<<f),this.strip()},n.prototype.iadd=function(e){var t,r,i;if(0!==this.negative&&0===e.negative)return this.negative=0,t=this.isub(e),this.negative^=1,this._normSign();if(0===this.negative&&0!==e.negative)return e.negative=0,t=this.isub(e),e.negative=1,t._normSign();this.length>e.length?(r=this,i=e):(r=e,i=this);for(var f=0,n=0;n<i.length;n++)t=(0|r.words[n])+(0|i.words[n])+f,this.words[n]=67108863&t,f=t>>>26;for(;0!==f&&n<r.length;n++)t=(0|r.words[n])+f,this.words[n]=67108863&t,f=t>>>26;if(this.length=r.length,0!==f)this.words[this.length]=f,this.length++;else if(r!==this)for(;n<r.length;n++)this.words[n]=r.words[n];return this},n.prototype.add=function(e){var t;return 0!==e.negative&&0===this.negative?(e.negative=0,t=this.sub(e),e.negative^=1,t):0===e.negative&&0!==this.negative?(this.negative=0,t=e.sub(this),this.negative=1,t):this.length>e.length?this.clone().iadd(e):e.clone().iadd(this)},n.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,i,f=this.cmp(e);if(0===f)return this.negative=0,this.length=1,this.words[0]=0,this;f>0?(r=this,i=e):(r=e,i=this);for(var n=0,d=0;d<i.length;d++)n=(t=(0|r.words[d])-(0|i.words[d])+n)>>26,this.words[d]=67108863&t;for(;0!==n&&d<r.length;d++)n=(t=(0|r.words[d])+n)>>26,this.words[d]=67108863&t;if(0===n&&d<r.length&&r!==this)for(;d<r.length;d++)this.words[d]=r.words[d];return this.length=Math.max(this.length,d),r!==this&&(this.negative=1),this.strip()},n.prototype.sub=function(e){return this.clone().isub(e)};var b=function(e,t,r){var i,f,n,d=e.words,a=t.words,c=r.words,s=0,o=0|d[0],h=8191&o,u=o>>>13,b=0|d[1],l=8191&b,p=b>>>13,m=0|d[2],v=8191&m,y=m>>>13,g=0|d[3],w=8191&g,M=g>>>13,S=0|d[4],A=8191&S,_=S>>>13,x=0|d[5],I=8191&x,k=x>>>13,z=0|d[6],q=8191&z,R=z>>>13,P=0|d[7],E=8191&P,N=P>>>13,j=0|d[8],L=8191&j,B=j>>>13,O=0|d[9],T=8191&O,K=O>>>13,C=0|a[0],F=8191&C,Z=C>>>13,U=0|a[1],V=8191&U,J=U>>>13,H=0|a[2],X=8191&H,D=H>>>13,W=0|a[3],Y=8191&W,$=W>>>13,Q=0|a[4],G=8191&Q,ee=Q>>>13,te=0|a[5],re=8191&te,ie=te>>>13,fe=0|a[6],ne=8191&fe,de=fe>>>13,ae=0|a[7],ce=8191&ae,se=ae>>>13,oe=0|a[8],he=8191&oe,ue=oe>>>13,be=0|a[9],le=8191&be,pe=be>>>13;r.negative=e.negative^t.negative,r.length=19;var me=(s+(i=Math.imul(h,F))|0)+((8191&(f=(f=Math.imul(h,Z))+Math.imul(u,F)|0))<<13)|0;s=((n=Math.imul(u,Z))+(f>>>13)|0)+(me>>>26)|0,me&=67108863,i=Math.imul(l,F),f=(f=Math.imul(l,Z))+Math.imul(p,F)|0,n=Math.imul(p,Z);var ve=(s+(i=i+Math.imul(h,V)|0)|0)+((8191&(f=(f=f+Math.imul(h,J)|0)+Math.imul(u,V)|0))<<13)|0;s=((n=n+Math.imul(u,J)|0)+(f>>>13)|0)+(ve>>>26)|0,ve&=67108863,i=Math.imul(v,F),f=(f=Math.imul(v,Z))+Math.imul(y,F)|0,n=Math.imul(y,Z),i=i+Math.imul(l,V)|0,f=(f=f+Math.imul(l,J)|0)+Math.imul(p,V)|0,n=n+Math.imul(p,J)|0;var ye=(s+(i=i+Math.imul(h,X)|0)|0)+((8191&(f=(f=f+Math.imul(h,D)|0)+Math.imul(u,X)|0))<<13)|0;s=((n=n+Math.imul(u,D)|0)+(f>>>13)|0)+(ye>>>26)|0,ye&=67108863,i=Math.imul(w,F),f=(f=Math.imul(w,Z))+Math.imul(M,F)|0,n=Math.imul(M,Z),i=i+Math.imul(v,V)|0,f=(f=f+Math.imul(v,J)|0)+Math.imul(y,V)|0,n=n+Math.imul(y,J)|0,i=i+Math.imul(l,X)|0,f=(f=f+Math.imul(l,D)|0)+Math.imul(p,X)|0,n=n+Math.imul(p,D)|0;var ge=(s+(i=i+Math.imul(h,Y)|0)|0)+((8191&(f=(f=f+Math.imul(h,$)|0)+Math.imul(u,Y)|0))<<13)|0;s=((n=n+Math.imul(u,$)|0)+(f>>>13)|0)+(ge>>>26)|0,ge&=67108863,i=Math.imul(A,F),f=(f=Math.imul(A,Z))+Math.imul(_,F)|0,n=Math.imul(_,Z),i=i+Math.imul(w,V)|0,f=(f=f+Math.imul(w,J)|0)+Math.imul(M,V)|0,n=n+Math.imul(M,J)|0,i=i+Math.imul(v,X)|0,f=(f=f+Math.imul(v,D)|0)+Math.imul(y,X)|0,n=n+Math.imul(y,D)|0,i=i+Math.imul(l,Y)|0,f=(f=f+Math.imul(l,$)|0)+Math.imul(p,Y)|0,n=n+Math.imul(p,$)|0;var we=(s+(i=i+Math.imul(h,G)|0)|0)+((8191&(f=(f=f+Math.imul(h,ee)|0)+Math.imul(u,G)|0))<<13)|0;s=((n=n+Math.imul(u,ee)|0)+(f>>>13)|0)+(we>>>26)|0,we&=67108863,i=Math.imul(I,F),f=(f=Math.imul(I,Z))+Math.imul(k,F)|0,n=Math.imul(k,Z),i=i+Math.imul(A,V)|0,f=(f=f+Math.imul(A,J)|0)+Math.imul(_,V)|0,n=n+Math.imul(_,J)|0,i=i+Math.imul(w,X)|0,f=(f=f+Math.imul(w,D)|0)+Math.imul(M,X)|0,n=n+Math.imul(M,D)|0,i=i+Math.imul(v,Y)|0,f=(f=f+Math.imul(v,$)|0)+Math.imul(y,Y)|0,n=n+Math.imul(y,$)|0,i=i+Math.imul(l,G)|0,f=(f=f+Math.imul(l,ee)|0)+Math.imul(p,G)|0,n=n+Math.imul(p,ee)|0;var Me=(s+(i=i+Math.imul(h,re)|0)|0)+((8191&(f=(f=f+Math.imul(h,ie)|0)+Math.imul(u,re)|0))<<13)|0;s=((n=n+Math.imul(u,ie)|0)+(f>>>13)|0)+(Me>>>26)|0,Me&=67108863,i=Math.imul(q,F),f=(f=Math.imul(q,Z))+Math.imul(R,F)|0,n=Math.imul(R,Z),i=i+Math.imul(I,V)|0,f=(f=f+Math.imul(I,J)|0)+Math.imul(k,V)|0,n=n+Math.imul(k,J)|0,i=i+Math.imul(A,X)|0,f=(f=f+Math.imul(A,D)|0)+Math.imul(_,X)|0,n=n+Math.imul(_,D)|0,i=i+Math.imul(w,Y)|0,f=(f=f+Math.imul(w,$)|0)+Math.imul(M,Y)|0,n=n+Math.imul(M,$)|0,i=i+Math.imul(v,G)|0,f=(f=f+Math.imul(v,ee)|0)+Math.imul(y,G)|0,n=n+Math.imul(y,ee)|0,i=i+Math.imul(l,re)|0,f=(f=f+Math.imul(l,ie)|0)+Math.imul(p,re)|0,n=n+Math.imul(p,ie)|0;var Se=(s+(i=i+Math.imul(h,ne)|0)|0)+((8191&(f=(f=f+Math.imul(h,de)|0)+Math.imul(u,ne)|0))<<13)|0;s=((n=n+Math.imul(u,de)|0)+(f>>>13)|0)+(Se>>>26)|0,Se&=67108863,i=Math.imul(E,F),f=(f=Math.imul(E,Z))+Math.imul(N,F)|0,n=Math.imul(N,Z),i=i+Math.imul(q,V)|0,f=(f=f+Math.imul(q,J)|0)+Math.imul(R,V)|0,n=n+Math.imul(R,J)|0,i=i+Math.imul(I,X)|0,f=(f=f+Math.imul(I,D)|0)+Math.imul(k,X)|0,n=n+Math.imul(k,D)|0,i=i+Math.imul(A,Y)|0,f=(f=f+Math.imul(A,$)|0)+Math.imul(_,Y)|0,n=n+Math.imul(_,$)|0,i=i+Math.imul(w,G)|0,f=(f=f+Math.imul(w,ee)|0)+Math.imul(M,G)|0,n=n+Math.imul(M,ee)|0,i=i+Math.imul(v,re)|0,f=(f=f+Math.imul(v,ie)|0)+Math.imul(y,re)|0,n=n+Math.imul(y,ie)|0,i=i+Math.imul(l,ne)|0,f=(f=f+Math.imul(l,de)|0)+Math.imul(p,ne)|0,n=n+Math.imul(p,de)|0;var Ae=(s+(i=i+Math.imul(h,ce)|0)|0)+((8191&(f=(f=f+Math.imul(h,se)|0)+Math.imul(u,ce)|0))<<13)|0;s=((n=n+Math.imul(u,se)|0)+(f>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,i=Math.imul(L,F),f=(f=Math.imul(L,Z))+Math.imul(B,F)|0,n=Math.imul(B,Z),i=i+Math.imul(E,V)|0,f=(f=f+Math.imul(E,J)|0)+Math.imul(N,V)|0,n=n+Math.imul(N,J)|0,i=i+Math.imul(q,X)|0,f=(f=f+Math.imul(q,D)|0)+Math.imul(R,X)|0,n=n+Math.imul(R,D)|0,i=i+Math.imul(I,Y)|0,f=(f=f+Math.imul(I,$)|0)+Math.imul(k,Y)|0,n=n+Math.imul(k,$)|0,i=i+Math.imul(A,G)|0,f=(f=f+Math.imul(A,ee)|0)+Math.imul(_,G)|0,n=n+Math.imul(_,ee)|0,i=i+Math.imul(w,re)|0,f=(f=f+Math.imul(w,ie)|0)+Math.imul(M,re)|0,n=n+Math.imul(M,ie)|0,i=i+Math.imul(v,ne)|0,f=(f=f+Math.imul(v,de)|0)+Math.imul(y,ne)|0,n=n+Math.imul(y,de)|0,i=i+Math.imul(l,ce)|0,f=(f=f+Math.imul(l,se)|0)+Math.imul(p,ce)|0,n=n+Math.imul(p,se)|0;var _e=(s+(i=i+Math.imul(h,he)|0)|0)+((8191&(f=(f=f+Math.imul(h,ue)|0)+Math.imul(u,he)|0))<<13)|0;s=((n=n+Math.imul(u,ue)|0)+(f>>>13)|0)+(_e>>>26)|0,_e&=67108863,i=Math.imul(T,F),f=(f=Math.imul(T,Z))+Math.imul(K,F)|0,n=Math.imul(K,Z),i=i+Math.imul(L,V)|0,f=(f=f+Math.imul(L,J)|0)+Math.imul(B,V)|0,n=n+Math.imul(B,J)|0,i=i+Math.imul(E,X)|0,f=(f=f+Math.imul(E,D)|0)+Math.imul(N,X)|0,n=n+Math.imul(N,D)|0,i=i+Math.imul(q,Y)|0,f=(f=f+Math.imul(q,$)|0)+Math.imul(R,Y)|0,n=n+Math.imul(R,$)|0,i=i+Math.imul(I,G)|0,f=(f=f+Math.imul(I,ee)|0)+Math.imul(k,G)|0,n=n+Math.imul(k,ee)|0,i=i+Math.imul(A,re)|0,f=(f=f+Math.imul(A,ie)|0)+Math.imul(_,re)|0,n=n+Math.imul(_,ie)|0,i=i+Math.imul(w,ne)|0,f=(f=f+Math.imul(w,de)|0)+Math.imul(M,ne)|0,n=n+Math.imul(M,de)|0,i=i+Math.imul(v,ce)|0,f=(f=f+Math.imul(v,se)|0)+Math.imul(y,ce)|0,n=n+Math.imul(y,se)|0,i=i+Math.imul(l,he)|0,f=(f=f+Math.imul(l,ue)|0)+Math.imul(p,he)|0,n=n+Math.imul(p,ue)|0;var xe=(s+(i=i+Math.imul(h,le)|0)|0)+((8191&(f=(f=f+Math.imul(h,pe)|0)+Math.imul(u,le)|0))<<13)|0;s=((n=n+Math.imul(u,pe)|0)+(f>>>13)|0)+(xe>>>26)|0,xe&=67108863,i=Math.imul(T,V),f=(f=Math.imul(T,J))+Math.imul(K,V)|0,n=Math.imul(K,J),i=i+Math.imul(L,X)|0,f=(f=f+Math.imul(L,D)|0)+Math.imul(B,X)|0,n=n+Math.imul(B,D)|0,i=i+Math.imul(E,Y)|0,f=(f=f+Math.imul(E,$)|0)+Math.imul(N,Y)|0,n=n+Math.imul(N,$)|0,i=i+Math.imul(q,G)|0,f=(f=f+Math.imul(q,ee)|0)+Math.imul(R,G)|0,n=n+Math.imul(R,ee)|0,i=i+Math.imul(I,re)|0,f=(f=f+Math.imul(I,ie)|0)+Math.imul(k,re)|0,n=n+Math.imul(k,ie)|0,i=i+Math.imul(A,ne)|0,f=(f=f+Math.imul(A,de)|0)+Math.imul(_,ne)|0,n=n+Math.imul(_,de)|0,i=i+Math.imul(w,ce)|0,f=(f=f+Math.imul(w,se)|0)+Math.imul(M,ce)|0,n=n+Math.imul(M,se)|0,i=i+Math.imul(v,he)|0,f=(f=f+Math.imul(v,ue)|0)+Math.imul(y,he)|0,n=n+Math.imul(y,ue)|0;var Ie=(s+(i=i+Math.imul(l,le)|0)|0)+((8191&(f=(f=f+Math.imul(l,pe)|0)+Math.imul(p,le)|0))<<13)|0;s=((n=n+Math.imul(p,pe)|0)+(f>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,i=Math.imul(T,X),f=(f=Math.imul(T,D))+Math.imul(K,X)|0,n=Math.imul(K,D),i=i+Math.imul(L,Y)|0,f=(f=f+Math.imul(L,$)|0)+Math.imul(B,Y)|0,n=n+Math.imul(B,$)|0,i=i+Math.imul(E,G)|0,f=(f=f+Math.imul(E,ee)|0)+Math.imul(N,G)|0,n=n+Math.imul(N,ee)|0,i=i+Math.imul(q,re)|0,f=(f=f+Math.imul(q,ie)|0)+Math.imul(R,re)|0,n=n+Math.imul(R,ie)|0,i=i+Math.imul(I,ne)|0,f=(f=f+Math.imul(I,de)|0)+Math.imul(k,ne)|0,n=n+Math.imul(k,de)|0,i=i+Math.imul(A,ce)|0,f=(f=f+Math.imul(A,se)|0)+Math.imul(_,ce)|0,n=n+Math.imul(_,se)|0,i=i+Math.imul(w,he)|0,f=(f=f+Math.imul(w,ue)|0)+Math.imul(M,he)|0,n=n+Math.imul(M,ue)|0;var ke=(s+(i=i+Math.imul(v,le)|0)|0)+((8191&(f=(f=f+Math.imul(v,pe)|0)+Math.imul(y,le)|0))<<13)|0;s=((n=n+Math.imul(y,pe)|0)+(f>>>13)|0)+(ke>>>26)|0,ke&=67108863,i=Math.imul(T,Y),f=(f=Math.imul(T,$))+Math.imul(K,Y)|0,n=Math.imul(K,$),i=i+Math.imul(L,G)|0,f=(f=f+Math.imul(L,ee)|0)+Math.imul(B,G)|0,n=n+Math.imul(B,ee)|0,i=i+Math.imul(E,re)|0,f=(f=f+Math.imul(E,ie)|0)+Math.imul(N,re)|0,n=n+Math.imul(N,ie)|0,i=i+Math.imul(q,ne)|0,f=(f=f+Math.imul(q,de)|0)+Math.imul(R,ne)|0,n=n+Math.imul(R,de)|0,i=i+Math.imul(I,ce)|0,f=(f=f+Math.imul(I,se)|0)+Math.imul(k,ce)|0,n=n+Math.imul(k,se)|0,i=i+Math.imul(A,he)|0,f=(f=f+Math.imul(A,ue)|0)+Math.imul(_,he)|0,n=n+Math.imul(_,ue)|0;var ze=(s+(i=i+Math.imul(w,le)|0)|0)+((8191&(f=(f=f+Math.imul(w,pe)|0)+Math.imul(M,le)|0))<<13)|0;s=((n=n+Math.imul(M,pe)|0)+(f>>>13)|0)+(ze>>>26)|0,ze&=67108863,i=Math.imul(T,G),f=(f=Math.imul(T,ee))+Math.imul(K,G)|0,n=Math.imul(K,ee),i=i+Math.imul(L,re)|0,f=(f=f+Math.imul(L,ie)|0)+Math.imul(B,re)|0,n=n+Math.imul(B,ie)|0,i=i+Math.imul(E,ne)|0,f=(f=f+Math.imul(E,de)|0)+Math.imul(N,ne)|0,n=n+Math.imul(N,de)|0,i=i+Math.imul(q,ce)|0,f=(f=f+Math.imul(q,se)|0)+Math.imul(R,ce)|0,n=n+Math.imul(R,se)|0,i=i+Math.imul(I,he)|0,f=(f=f+Math.imul(I,ue)|0)+Math.imul(k,he)|0,n=n+Math.imul(k,ue)|0;var qe=(s+(i=i+Math.imul(A,le)|0)|0)+((8191&(f=(f=f+Math.imul(A,pe)|0)+Math.imul(_,le)|0))<<13)|0;s=((n=n+Math.imul(_,pe)|0)+(f>>>13)|0)+(qe>>>26)|0,qe&=67108863,i=Math.imul(T,re),f=(f=Math.imul(T,ie))+Math.imul(K,re)|0,n=Math.imul(K,ie),i=i+Math.imul(L,ne)|0,f=(f=f+Math.imul(L,de)|0)+Math.imul(B,ne)|0,n=n+Math.imul(B,de)|0,i=i+Math.imul(E,ce)|0,f=(f=f+Math.imul(E,se)|0)+Math.imul(N,ce)|0,n=n+Math.imul(N,se)|0,i=i+Math.imul(q,he)|0,f=(f=f+Math.imul(q,ue)|0)+Math.imul(R,he)|0,n=n+Math.imul(R,ue)|0;var Re=(s+(i=i+Math.imul(I,le)|0)|0)+((8191&(f=(f=f+Math.imul(I,pe)|0)+Math.imul(k,le)|0))<<13)|0;s=((n=n+Math.imul(k,pe)|0)+(f>>>13)|0)+(Re>>>26)|0,Re&=67108863,i=Math.imul(T,ne),f=(f=Math.imul(T,de))+Math.imul(K,ne)|0,n=Math.imul(K,de),i=i+Math.imul(L,ce)|0,f=(f=f+Math.imul(L,se)|0)+Math.imul(B,ce)|0,n=n+Math.imul(B,se)|0,i=i+Math.imul(E,he)|0,f=(f=f+Math.imul(E,ue)|0)+Math.imul(N,he)|0,n=n+Math.imul(N,ue)|0;var Pe=(s+(i=i+Math.imul(q,le)|0)|0)+((8191&(f=(f=f+Math.imul(q,pe)|0)+Math.imul(R,le)|0))<<13)|0;s=((n=n+Math.imul(R,pe)|0)+(f>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,i=Math.imul(T,ce),f=(f=Math.imul(T,se))+Math.imul(K,ce)|0,n=Math.imul(K,se),i=i+Math.imul(L,he)|0,f=(f=f+Math.imul(L,ue)|0)+Math.imul(B,he)|0,n=n+Math.imul(B,ue)|0;var Ee=(s+(i=i+Math.imul(E,le)|0)|0)+((8191&(f=(f=f+Math.imul(E,pe)|0)+Math.imul(N,le)|0))<<13)|0;s=((n=n+Math.imul(N,pe)|0)+(f>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,i=Math.imul(T,he),f=(f=Math.imul(T,ue))+Math.imul(K,he)|0,n=Math.imul(K,ue);var Ne=(s+(i=i+Math.imul(L,le)|0)|0)+((8191&(f=(f=f+Math.imul(L,pe)|0)+Math.imul(B,le)|0))<<13)|0;s=((n=n+Math.imul(B,pe)|0)+(f>>>13)|0)+(Ne>>>26)|0,Ne&=67108863;var je=(s+(i=Math.imul(T,le))|0)+((8191&(f=(f=Math.imul(T,pe))+Math.imul(K,le)|0))<<13)|0;return s=((n=Math.imul(K,pe))+(f>>>13)|0)+(je>>>26)|0,je&=67108863,c[0]=me,c[1]=ve,c[2]=ye,c[3]=ge,c[4]=we,c[5]=Me,c[6]=Se,c[7]=Ae,c[8]=_e,c[9]=xe,c[10]=Ie,c[11]=ke,c[12]=ze,c[13]=qe,c[14]=Re,c[15]=Pe,c[16]=Ee,c[17]=Ne,c[18]=je,0!==s&&(c[19]=s,r.length++),r};function l(e,t,r){return(new p).mulp(e,t,r)}function p(e,t){this.x=e,this.y=t}Math.imul||(b=u),n.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?b(this,e,t):r<63?u(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var i=0,f=0,n=0;n<r.length-1;n++){var d=f;f=0;for(var a=67108863&i,c=Math.min(n,t.length-1),s=Math.max(0,n-e.length+1);s<=c;s++){var o=n-s,h=(0|e.words[o])*(0|t.words[s]),u=67108863&h;a=67108863&(u=u+a|0),f+=(d=(d=d+(h/67108864|0)|0)+(u>>>26)|0)>>>26,d&=67108863}r.words[n]=a,i=d,d=f}return 0!==i?r.words[n]=i:r.length--,r.strip()}(this,e,t):l(this,e,t)},p.prototype.makeRBT=function(e){for(var t=new Array(e),r=n.prototype._countBits(e)-1,i=0;i<e;i++)t[i]=this.revBin(i,r,e);return t},p.prototype.revBin=function(e,t,r){if(0===e||e===r-1)return e;for(var i=0,f=0;f<t;f++)i|=(1&e)<<t-f-1,e>>=1;return i},p.prototype.permute=function(e,t,r,i,f,n){for(var d=0;d<n;d++)i[d]=t[e[d]],f[d]=r[e[d]]},p.prototype.transform=function(e,t,r,i,f,n){this.permute(n,e,t,r,i,f);for(var d=1;d<f;d<<=1)for(var a=d<<1,c=Math.cos(2*Math.PI/a),s=Math.sin(2*Math.PI/a),o=0;o<f;o+=a)for(var h=c,u=s,b=0;b<d;b++){var l=r[o+b],p=i[o+b],m=r[o+b+d],v=i[o+b+d],y=h*m-u*v;v=h*v+u*m,m=y,r[o+b]=l+m,i[o+b]=p+v,r[o+b+d]=l-m,i[o+b+d]=p-v,b!==a&&(y=c*h-s*u,u=c*u+s*h,h=y)}},p.prototype.guessLen13b=function(e,t){var r=1|Math.max(t,e),i=1&r,f=0;for(r=r/2|0;r;r>>>=1)f++;return 1<<f+1+i},p.prototype.conjugate=function(e,t,r){if(!(r<=1))for(var i=0;i<r/2;i++){var f=e[i];e[i]=e[r-i-1],e[r-i-1]=f,f=t[i],t[i]=-t[r-i-1],t[r-i-1]=-f}},p.prototype.normalize13b=function(e,t){for(var r=0,i=0;i<t/2;i++){var f=8192*Math.round(e[2*i+1]/t)+Math.round(e[2*i]/t)+r;e[i]=67108863&f,r=f<67108864?0:f/67108864|0}return e},p.prototype.convert13b=function(e,t,r,f){for(var n=0,d=0;d<t;d++)n+=0|e[d],r[2*d]=8191&n,n>>>=13,r[2*d+1]=8191&n,n>>>=13;for(d=2*t;d<f;++d)r[d]=0;i(0===n),i(0==(-8192&n))},p.prototype.stub=function(e){for(var t=new Array(e),r=0;r<e;r++)t[r]=0;return t},p.prototype.mulp=function(e,t,r){var i=2*this.guessLen13b(e.length,t.length),f=this.makeRBT(i),n=this.stub(i),d=new Array(i),a=new Array(i),c=new Array(i),s=new Array(i),o=new Array(i),h=new Array(i),u=r.words;u.length=i,this.convert13b(e.words,e.length,d,i),this.convert13b(t.words,t.length,s,i),this.transform(d,n,a,c,i,f),this.transform(s,n,o,h,i,f);for(var b=0;b<i;b++){var l=a[b]*o[b]-c[b]*h[b];c[b]=a[b]*h[b]+c[b]*o[b],a[b]=l}return this.conjugate(a,c,i),this.transform(a,c,u,n,i,f),this.conjugate(u,n,i),this.normalize13b(u,i),r.negative=e.negative^t.negative,r.length=e.length+t.length,r.strip()},n.prototype.mul=function(e){var t=new n(null);return t.words=new Array(this.length+e.length),this.mulTo(e,t)},n.prototype.mulf=function(e){var t=new n(null);return t.words=new Array(this.length+e.length),l(this,e,t)},n.prototype.imul=function(e){return this.clone().mulTo(e,this)},n.prototype.imuln=function(e){i("number"==typeof e),i(e<67108864);for(var t=0,r=0;r<this.length;r++){var f=(0|this.words[r])*e,n=(67108863&f)+(67108863&t);t>>=26,t+=f/67108864|0,t+=n>>>26,this.words[r]=67108863&n}return 0!==t&&(this.words[r]=t,this.length++),this},n.prototype.muln=function(e){return this.clone().imuln(e)},n.prototype.sqr=function(){return this.mul(this)},n.prototype.isqr=function(){return this.imul(this.clone())},n.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r<t.length;r++){var i=r/26|0,f=r%26;t[r]=(e.words[i]&1<<f)>>>f}return t}(e);if(0===t.length)return new n(1);for(var r=this,i=0;i<t.length&&0===t[i];i++,r=r.sqr());if(++i<t.length)for(var f=r.sqr();i<t.length;i++,f=f.sqr())0!==t[i]&&(r=r.mul(f));return r},n.prototype.iushln=function(e){i("number"==typeof e&&e>=0);var t,r=e%26,f=(e-r)/26,n=67108863>>>26-r<<26-r;if(0!==r){var d=0;for(t=0;t<this.length;t++){var a=this.words[t]&n,c=(0|this.words[t])-a<<r;this.words[t]=c|d,d=a>>>26-r}d&&(this.words[t]=d,this.length++)}if(0!==f){for(t=this.length-1;t>=0;t--)this.words[t+f]=this.words[t];for(t=0;t<f;t++)this.words[t]=0;this.length+=f}return this.strip()},n.prototype.ishln=function(e){return i(0===this.negative),this.iushln(e)},n.prototype.iushrn=function(e,t,r){var f;i("number"==typeof e&&e>=0),f=t?(t-t%26)/26:0;var n=e%26,d=Math.min((e-n)/26,this.length),a=67108863^67108863>>>n<<n,c=r;if(f-=d,f=Math.max(0,f),c){for(var s=0;s<d;s++)c.words[s]=this.words[s];c.length=d}if(0===d);else if(this.length>d)for(this.length-=d,s=0;s<this.length;s++)this.words[s]=this.words[s+d];else this.words[0]=0,this.length=1;var o=0;for(s=this.length-1;s>=0&&(0!==o||s>=f);s--){var h=0|this.words[s];this.words[s]=o<<26-n|h>>>n,o=h&a}return c&&0!==o&&(c.words[c.length++]=o),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},n.prototype.ishrn=function(e,t,r){return i(0===this.negative),this.iushrn(e,t,r)},n.prototype.shln=function(e){return this.clone().ishln(e)},n.prototype.ushln=function(e){return this.clone().iushln(e)},n.prototype.shrn=function(e){return this.clone().ishrn(e)},n.prototype.ushrn=function(e){return this.clone().iushrn(e)},n.prototype.testn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,f=1<<t;return!(this.length<=r)&&!!(this.words[r]&f)},n.prototype.imaskn=function(e){i("number"==typeof e&&e>=0);var t=e%26,r=(e-t)/26;if(i(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var f=67108863^67108863>>>t<<t;this.words[this.length-1]&=f}return this.strip()},n.prototype.maskn=function(e){return this.clone().imaskn(e)},n.prototype.iaddn=function(e){return i("number"==typeof e),i(e<67108864),e<0?this.isubn(-e):0!==this.negative?1===this.length&&(0|this.words[0])<e?(this.words[0]=e-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(e),this.negative=1,this):this._iaddn(e)},n.prototype._iaddn=function(e){this.words[0]+=e;for(var t=0;t<this.length&&this.words[t]>=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},n.prototype.isubn=function(e){if(i("number"==typeof e),i(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t<this.length&&this.words[t]<0;t++)this.words[t]+=67108864,this.words[t+1]-=1;return this.strip()},n.prototype.addn=function(e){return this.clone().iaddn(e)},n.prototype.subn=function(e){return this.clone().isubn(e)},n.prototype.iabs=function(){return this.negative=0,this},n.prototype.abs=function(){return this.clone().iabs()},n.prototype._ishlnsubmul=function(e,t,r){var f,n,d=e.length+r;this._expand(d);var a=0;for(f=0;f<e.length;f++){n=(0|this.words[f+r])+a;var c=(0|e.words[f])*t;a=((n-=67108863&c)>>26)-(c/67108864|0),this.words[f+r]=67108863&n}for(;f<this.length-r;f++)a=(n=(0|this.words[f+r])+a)>>26,this.words[f+r]=67108863&n;if(0===a)return this.strip();for(i(-1===a),a=0,f=0;f<this.length;f++)a=(n=-(0|this.words[f])+a)>>26,this.words[f]=67108863&n;return this.negative=1,this.strip()},n.prototype._wordDiv=function(e,t){var r=(this.length,e.length),i=this.clone(),f=e,d=0|f.words[f.length-1];0!==(r=26-this._countBits(d))&&(f=f.ushln(r),i.iushln(r),d=0|f.words[f.length-1]);var a,c=i.length-f.length;if("mod"!==t){(a=new n(null)).length=c+1,a.words=new Array(a.length);for(var s=0;s<a.length;s++)a.words[s]=0}var o=i.clone()._ishlnsubmul(f,1,c);0===o.negative&&(i=o,a&&(a.words[c]=1));for(var h=c-1;h>=0;h--){var u=67108864*(0|i.words[f.length+h])+(0|i.words[f.length+h-1]);for(u=Math.min(u/d|0,67108863),i._ishlnsubmul(f,u,h);0!==i.negative;)u--,i.negative=0,i._ishlnsubmul(f,1,h),i.isZero()||(i.negative^=1);a&&(a.words[h]=u)}return a&&a.strip(),i.strip(),"div"!==t&&0!==r&&i.iushrn(r),{div:a||null,mod:i}},n.prototype.divmod=function(e,t,r){return i(!e.isZero()),this.isZero()?{div:new n(0),mod:new n(0)}:0!==this.negative&&0===e.negative?(a=this.neg().divmod(e,t),"mod"!==t&&(f=a.div.neg()),"div"!==t&&(d=a.mod.neg(),r&&0!==d.negative&&d.iadd(e)),{div:f,mod:d}):0===this.negative&&0!==e.negative?(a=this.divmod(e.neg(),t),"mod"!==t&&(f=a.div.neg()),{div:f,mod:a.mod}):0!=(this.negative&e.negative)?(a=this.neg().divmod(e.neg(),t),"div"!==t&&(d=a.mod.neg(),r&&0!==d.negative&&d.isub(e)),{div:a.div,mod:d}):e.length>this.length||this.cmp(e)<0?{div:new n(0),mod:this}:1===e.length?"div"===t?{div:this.divn(e.words[0]),mod:null}:"mod"===t?{div:null,mod:new n(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new n(this.modn(e.words[0]))}:this._wordDiv(e,t);var f,d,a},n.prototype.div=function(e){return this.divmod(e,"div",!1).div},n.prototype.mod=function(e){return this.divmod(e,"mod",!1).mod},n.prototype.umod=function(e){return this.divmod(e,"mod",!0).mod},n.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,i=e.ushrn(1),f=e.andln(1),n=r.cmp(i);return n<0||1===f&&0===n?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},n.prototype.modn=function(e){i(e<=67108863);for(var t=(1<<26)%e,r=0,f=this.length-1;f>=0;f--)r=(t*r+(0|this.words[f]))%e;return r},n.prototype.idivn=function(e){i(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var f=(0|this.words[r])+67108864*t;this.words[r]=f/e|0,t=f%e}return this.strip()},n.prototype.divn=function(e){return this.clone().idivn(e)},n.prototype.egcd=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var f=new n(1),d=new n(0),a=new n(0),c=new n(1),s=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++s;for(var o=r.clone(),h=t.clone();!t.isZero();){for(var u=0,b=1;0==(t.words[0]&b)&&u<26;++u,b<<=1);if(u>0)for(t.iushrn(u);u-- >0;)(f.isOdd()||d.isOdd())&&(f.iadd(o),d.isub(h)),f.iushrn(1),d.iushrn(1);for(var l=0,p=1;0==(r.words[0]&p)&&l<26;++l,p<<=1);if(l>0)for(r.iushrn(l);l-- >0;)(a.isOdd()||c.isOdd())&&(a.iadd(o),c.isub(h)),a.iushrn(1),c.iushrn(1);t.cmp(r)>=0?(t.isub(r),f.isub(a),d.isub(c)):(r.isub(t),a.isub(f),c.isub(d))}return{a:a,b:c,gcd:r.iushln(s)}},n.prototype._invmp=function(e){i(0===e.negative),i(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var f,d=new n(1),a=new n(0),c=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var s=0,o=1;0==(t.words[0]&o)&&s<26;++s,o<<=1);if(s>0)for(t.iushrn(s);s-- >0;)d.isOdd()&&d.iadd(c),d.iushrn(1);for(var h=0,u=1;0==(r.words[0]&u)&&h<26;++h,u<<=1);if(h>0)for(r.iushrn(h);h-- >0;)a.isOdd()&&a.iadd(c),a.iushrn(1);t.cmp(r)>=0?(t.isub(r),d.isub(a)):(r.isub(t),a.isub(d))}return(f=0===t.cmpn(1)?d:a).cmpn(0)<0&&f.iadd(e),f},n.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var i=0;t.isEven()&&r.isEven();i++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var f=t.cmp(r);if(f<0){var n=t;t=r,r=n}else if(0===f||0===r.cmpn(1))break;t.isub(r)}return r.iushln(i)},n.prototype.invm=function(e){return this.egcd(e).a.umod(e)},n.prototype.isEven=function(){return 0==(1&this.words[0])},n.prototype.isOdd=function(){return 1==(1&this.words[0])},n.prototype.andln=function(e){return this.words[0]&e},n.prototype.bincn=function(e){i("number"==typeof e);var t=e%26,r=(e-t)/26,f=1<<t;if(this.length<=r)return this._expand(r+1),this.words[r]|=f,this;for(var n=f,d=r;0!==n&&d<this.length;d++){var a=0|this.words[d];n=(a+=n)>>>26,a&=67108863,this.words[d]=a}return 0!==n&&(this.words[d]=n,this.length++),this},n.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},n.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),i(e<=67108863,"Number is too big");var f=0|this.words[0];t=f===e?0:f<e?-1:1}return 0!==this.negative?0|-t:t},n.prototype.cmp=function(e){if(0!==this.negative&&0===e.negative)return-1;if(0===this.negative&&0!==e.negative)return 1;var t=this.ucmp(e);return 0!==this.negative?0|-t:t},n.prototype.ucmp=function(e){if(this.length>e.length)return 1;if(this.length<e.length)return-1;for(var t=0,r=this.length-1;r>=0;r--){var i=0|this.words[r],f=0|e.words[r];if(i!==f){i<f?t=-1:i>f&&(t=1);break}}return t},n.prototype.gtn=function(e){return 1===this.cmpn(e)},n.prototype.gt=function(e){return 1===this.cmp(e)},n.prototype.gten=function(e){return this.cmpn(e)>=0},n.prototype.gte=function(e){return this.cmp(e)>=0},n.prototype.ltn=function(e){return-1===this.cmpn(e)},n.prototype.lt=function(e){return-1===this.cmp(e)},n.prototype.lten=function(e){return this.cmpn(e)<=0},n.prototype.lte=function(e){return this.cmp(e)<=0},n.prototype.eqn=function(e){return 0===this.cmpn(e)},n.prototype.eq=function(e){return 0===this.cmp(e)},n.red=function(e){return new S(e)},n.prototype.toRed=function(e){return i(!this.red,"Already a number in reduction context"),i(0===this.negative,"red works only with positives"),e.convertTo(this)._forceRed(e)},n.prototype.fromRed=function(){return i(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},n.prototype._forceRed=function(e){return this.red=e,this},n.prototype.forceRed=function(e){return i(!this.red,"Already a number in reduction context"),this._forceRed(e)},n.prototype.redAdd=function(e){return i(this.red,"redAdd works only with red numbers"),this.red.add(this,e)},n.prototype.redIAdd=function(e){return i(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,e)},n.prototype.redSub=function(e){return i(this.red,"redSub works only with red numbers"),this.red.sub(this,e)},n.prototype.redISub=function(e){return i(this.red,"redISub works only with red numbers"),this.red.isub(this,e)},n.prototype.redShl=function(e){return i(this.red,"redShl works only with red numbers"),this.red.shl(this,e)},n.prototype.redMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.mul(this,e)},n.prototype.redIMul=function(e){return i(this.red,"redMul works only with red numbers"),this.red._verify2(this,e),this.red.imul(this,e)},n.prototype.redSqr=function(){return i(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},n.prototype.redISqr=function(){return i(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},n.prototype.redSqrt=function(){return i(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},n.prototype.redInvm=function(){return i(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},n.prototype.redNeg=function(){return i(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},n.prototype.redPow=function(e){return i(this.red&&!e.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,e)};var m={k256:null,p224:null,p192:null,p25519:null};function v(e,t){this.name=e,this.p=new n(t,16),this.n=this.p.bitLength(),this.k=new n(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function y(){v.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function g(){v.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function w(){v.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function M(){v.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function S(e){if("string"==typeof e){var t=n._prime(e);this.m=t.p,this.prime=t}else i(e.gtn(1),"modulus must be greater than 1"),this.m=e,this.prime=null}function A(e){S.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new n(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)}v.prototype._tmp=function(){var e=new n(null);return e.words=new Array(Math.ceil(this.n/13)),e},v.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var i=t<this.n?-1:r.ucmp(this.p);return 0===i?(r.words[0]=0,r.length=1):i>0?r.isub(this.p):void 0!==r.strip?r.strip():r._strip(),r},v.prototype.split=function(e,t){e.iushrn(this.n,0,t)},v.prototype.imulK=function(e){return e.imul(this.k)},f(y,v),y.prototype.split=function(e,t){for(var r=Math.min(e.length,9),i=0;i<r;i++)t.words[i]=e.words[i];if(t.length=r,e.length<=9)return e.words[0]=0,void(e.length=1);var f=e.words[9];for(t.words[t.length++]=4194303&f,i=10;i<e.length;i++){var n=0|e.words[i];e.words[i-10]=(4194303&n)<<4|f>>>22,f=n}f>>>=22,e.words[i-10]=f,0===f&&e.length>10?e.length-=10:e.length-=9},y.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r<e.length;r++){var i=0|e.words[r];t+=977*i,e.words[r]=67108863&t,t=64*i+(t/67108864|0)}return 0===e.words[e.length-1]&&(e.length--,0===e.words[e.length-1]&&e.length--),e},f(g,v),f(w,v),f(M,v),M.prototype.imulK=function(e){for(var t=0,r=0;r<e.length;r++){var i=19*(0|e.words[r])+t,f=67108863&i;i>>>=26,e.words[r]=f,t=i}return 0!==t&&(e.words[e.length++]=t),e},n._prime=function(e){if(m[e])return m[e];var t;if("k256"===e)t=new y;else if("p224"===e)t=new g;else if("p192"===e)t=new w;else{if("p25519"!==e)throw new Error("Unknown prime "+e);t=new M}return m[e]=t,t},S.prototype._verify1=function(e){i(0===e.negative,"red works only with positives"),i(e.red,"red works only with red numbers")},S.prototype._verify2=function(e,t){i(0==(e.negative|t.negative),"red works only with positives"),i(e.red&&e.red===t.red,"red works only with red numbers")},S.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},S.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},S.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},S.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},S.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},S.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},S.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},S.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},S.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},S.prototype.isqr=function(e){return this.imul(e,e.clone())},S.prototype.sqr=function(e){return this.mul(e,e)},S.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(i(t%2==1),3===t){var r=this.m.add(new n(1)).iushrn(2);return this.pow(e,r)}for(var f=this.m.subn(1),d=0;!f.isZero()&&0===f.andln(1);)d++,f.iushrn(1);i(!f.isZero());var a=new n(1).toRed(this),c=a.redNeg(),s=this.m.subn(1).iushrn(1),o=this.m.bitLength();for(o=new n(2*o*o).toRed(this);0!==this.pow(o,s).cmp(c);)o.redIAdd(c);for(var h=this.pow(o,f),u=this.pow(e,f.addn(1).iushrn(1)),b=this.pow(e,f),l=d;0!==b.cmp(a);){for(var p=b,m=0;0!==p.cmp(a);m++)p=p.redSqr();i(m<l);var v=this.pow(h,new n(1).iushln(l-m-1));u=u.redMul(v),h=v.redSqr(),b=b.redMul(h),l=m}return u},S.prototype.invm=function(e){var t=e._invmp(this.m);return 0!==t.negative?(t.negative=0,this.imod(t).redNeg()):this.imod(t)},S.prototype.pow=function(e,t){if(t.isZero())return new n(1).toRed(this);if(0===t.cmpn(1))return e.clone();var r=new Array(16);r[0]=new n(1).toRed(this),r[1]=e;for(var i=2;i<r.length;i++)r[i]=this.mul(r[i-1],e);var f=r[0],d=0,a=0,c=t.bitLength()%26;for(0===c&&(c=26),i=t.length-1;i>=0;i--){for(var s=t.words[i],o=c-1;o>=0;o--){var h=s>>o&1;f!==r[0]&&(f=this.sqr(f)),0!==h||0!==d?(d<<=1,d|=h,(4===++a||0===i&&0===o)&&(f=this.mul(f,r[d]),a=0,d=0)):a=0}c=26}return f},S.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},S.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},n.mont=function(e){return new A(e)},f(A,S),A.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},A.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},A.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),f=r.isub(i).iushrn(this.shift),n=f;return f.cmp(this.m)>=0?n=f.isub(this.m):f.cmpn(0)<0&&(n=f.iadd(this.m)),n._forceRed(this)},A.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new n(0)._forceRed(this);var r=e.mul(t),i=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),f=r.isub(i).iushrn(this.shift),d=f;return f.cmp(this.m)>=0?d=f.isub(this.m):f.cmpn(0)<0&&(d=f.iadd(this.m)),d._forceRed(this)},A.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(e,this)}).call(this,r(21)(e))},function(e,t){function r(e,t){if(!e)throw new Error(t||"Assertion failed")}e.exports=r,r.equal=function(e,t,r){if(e!=t)throw new Error(r||"Assertion failed: "+e+" != "+t)}},function(e,t,r){e.exports=r(17)(r(18))},function(e,t,r){"use strict";var i=r(1),f=r(3);function n(){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}t.BlockHash=n,n.prototype.update=function(e,t){if(e=i.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=i.join32(e,0,e.length-r,this.endian);for(var f=0;f<e.length;f+=this._delta32)this._update(e,f,f+this._delta32)}return this},n.prototype.digest=function(e){return this.update(this._pad()),f(null===this.pending),this._digest(e)},n.prototype._pad=function(){var e=this.pendingTotal,t=this._delta8,r=t-(e+this.padLength)%t,i=new Array(r+this.padLength);i[0]=128;for(var f=1;f<r;f++)i[f]=0;if(e<<=3,"big"===this.endian){for(var n=8;n<this.padLength;n++)i[f++]=0;i[f++]=0,i[f++]=0,i[f++]=0,i[f++]=0,i[f++]=e>>>24&255,i[f++]=e>>>16&255,i[f++]=e>>>8&255,i[f++]=255&e}else for(i[f++]=255&e,i[f++]=e>>>8&255,i[f++]=e>>>16&255,i[f++]=e>>>24&255,i[f++]=0,i[f++]=0,i[f++]=0,i[f++]=0,n=8;n<this.padLength;n++)i[f++]=0;return i}},function(e,t,r){"use strict";var i=r(2),f=r(0),n=f.getNAF,d=f.getJSF,a=f.assert;function c(e,t){this.type=e,this.p=new i(t.p,16),this.red=t.prime?i.red(t.prime):i.mont(this.p),this.zero=new i(0).toRed(this.red),this.one=new i(1).toRed(this.red),this.two=new i(2).toRed(this.red),this.n=t.n&&new i(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.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 r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function s(e,t){this.curve=e,this.type=t,this.precomputed=null}e.exports=c,c.prototype.point=function(){throw new Error("Not implemented")},c.prototype.validate=function(){throw new Error("Not implemented")},c.prototype._fixedNafMul=function(e,t){a(e.precomputed);var r=e._getDoubles(),i=n(t,1,this._bitLength),f=(1<<r.step+1)-(r.step%2==0?2:1);f/=3;for(var d=[],c=0;c<i.length;c+=r.step){var s=0;for(t=c+r.step-1;t>=c;t--)s=(s<<1)+i[t];d.push(s)}for(var o=this.jpoint(null,null,null),h=this.jpoint(null,null,null),u=f;u>0;u--){for(c=0;c<d.length;c++){(s=d[c])===u?h=h.mixedAdd(r.points[c]):s===-u&&(h=h.mixedAdd(r.points[c].neg()))}o=o.add(h)}return o.toP()},c.prototype._wnafMul=function(e,t){var r=4,i=e._getNAFPoints(r);r=i.wnd;for(var f=i.points,d=n(t,r,this._bitLength),c=this.jpoint(null,null,null),s=d.length-1;s>=0;s--){for(t=0;s>=0&&0===d[s];s--)t++;if(s>=0&&t++,c=c.dblp(t),s<0)break;var o=d[s];a(0!==o),c="affine"===e.type?o>0?c.mixedAdd(f[o-1>>1]):c.mixedAdd(f[-o-1>>1].neg()):o>0?c.add(f[o-1>>1]):c.add(f[-o-1>>1].neg())}return"affine"===e.type?c.toP():c},c.prototype._wnafMulAdd=function(e,t,r,i,f){for(var a=this._wnafT1,c=this._wnafT2,s=this._wnafT3,o=0,h=0;h<i;h++){var u=(x=t[h])._getNAFPoints(e);a[h]=u.wnd,c[h]=u.points}for(h=i-1;h>=1;h-=2){var b=h-1,l=h;if(1===a[b]&&1===a[l]){var p=[t[b],null,null,t[l]];0===t[b].y.cmp(t[l].y)?(p[1]=t[b].add(t[l]),p[2]=t[b].toJ().mixedAdd(t[l].neg())):0===t[b].y.cmp(t[l].y.redNeg())?(p[1]=t[b].toJ().mixedAdd(t[l]),p[2]=t[b].add(t[l].neg())):(p[1]=t[b].toJ().mixedAdd(t[l]),p[2]=t[b].toJ().mixedAdd(t[l].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],v=d(r[b],r[l]);o=Math.max(v[0].length,o),s[b]=new Array(o),s[l]=new Array(o);for(var y=0;y<o;y++){var g=0|v[0][y],w=0|v[1][y];s[b][y]=m[3*(g+1)+(w+1)],s[l][y]=0,c[b]=p}}else s[b]=n(r[b],a[b],this._bitLength),s[l]=n(r[l],a[l],this._bitLength),o=Math.max(s[b].length,o),o=Math.max(s[l].length,o)}var M=this.jpoint(null,null,null),S=this._wnafT4;for(h=o;h>=0;h--){for(var A=0;h>=0;){var _=!0;for(y=0;y<i;y++)S[y]=0|s[y][h],0!==S[y]&&(_=!1);if(!_)break;A++,h--}if(h>=0&&A++,M=M.dblp(A),h<0)break;for(y=0;y<i;y++){var x,I=S[y];0!==I&&(I>0?x=c[y][I-1>>1]:I<0&&(x=c[y][-I-1>>1].neg()),M="affine"===x.type?M.mixedAdd(x):M.add(x))}}for(h=0;h<i;h++)c[h]=null;return f?M:M.toP()},c.BasePoint=s,s.prototype.eq=function(){throw new Error("Not implemented")},s.prototype.validate=function(){return this.curve.validate(this)},c.prototype.decodePoint=function(e,t){e=f.toArray(e,t);var r=this.p.byteLength();if((4===e[0]||6===e[0]||7===e[0])&&e.length-1==2*r)return 6===e[0]?a(e[e.length-1]%2==0):7===e[0]&&a(e[e.length-1]%2==1),this.point(e.slice(1,1+r),e.slice(1+r,1+2*r));if((2===e[0]||3===e[0])&&e.length-1===r)return this.pointFromX(e.slice(1,1+r),3===e[0]);throw new Error("Unknown point format")},s.prototype.encodeCompressed=function(e){return this.encode(e,!0)},s.prototype._encode=function(e){var t=this.curve.p.byteLength(),r=this.getX().toArray("be",t);return e?[this.getY().isEven()?2:3].concat(r):[4].concat(r,this.getY().toArray("be",t))},s.prototype.encode=function(e,t){return f.encode(this._encode(t),e)},s.prototype.precompute=function(e){if(this.precomputed)return this;var t={doubles:null,naf:null,beta:null};return t.naf=this._getNAFPoints(8),t.doubles=this._getDoubles(4,e),t.beta=this._getBeta(),this.precomputed=t,this},s.prototype._hasDoubles=function(e){if(!this.precomputed)return!1;var t=this.precomputed.doubles;return!!t&&t.points.length>=Math.ceil((e.bitLength()+1)/t.step)},s.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],i=this,f=0;f<t;f+=e){for(var n=0;n<e;n++)i=i.dbl();r.push(i)}return{step:e,points:r}},s.prototype._getNAFPoints=function(e){if(this.precomputed&&this.precomputed.naf)return this.precomputed.naf;for(var t=[this],r=(1<<e)-1,i=1===r?null:this.dbl(),f=1;f<r;f++)t[f]=t[f-1].add(i);return{wnd:e,points:t}},s.prototype._getBeta=function(){return null},s.prototype.dblp=function(e){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}},function(e,t){"function"==typeof Object.create?e.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports=function(e,t){if(t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}}},function(e,t,r){"use strict";var i,f=t,n=r(9),d=r(12),a=r(0).assert;function c(e){"short"===e.type?this.curve=new d.short(e):"edwards"===e.type?this.curve=new d.edwards(e):this.curve=new d.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,a(this.g.validate(),"Invalid curve"),a(this.g.mul(this.n).isInfinity(),"Invalid curve, G*N != O")}function s(e,t){Object.defineProperty(f,e,{configurable:!0,enumerable:!0,get:function(){var r=new c(t);return Object.defineProperty(f,e,{configurable:!0,enumerable:!0,value:r}),r}})}f.PresetCurve=c,s("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:n.sha256,gRed:!1,g:["188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012","07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811"]}),s("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:n.sha256,gRed:!1,g:["b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21","bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34"]}),s("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:n.sha256,gRed:!1,g:["6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296","4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5"]}),s("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:n.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"]}),s("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:n.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"]}),s("curve25519",{type:"mont",prime:"p25519",p:"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed",a:"76d06",b:"1",n:"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed",hash:n.sha256,gRed:!1,g:["9"]}),s("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:n.sha256,gRed:!1,g:["216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a","6666666666666666666666666666666666666666666666666666666666666658"]});try{i=r(33)}catch(e){i=void 0}s("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:n.sha256,beta:"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee",lambda:"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72",basis:[{a:"3086d221a7d46bcde86c90e49284eb15",b:"-e4437ed6010e88286f547fa90abfe4c3"},{a:"114ca50f7a8e2f3f657c1108d9d44cfd8",b:"3086d221a7d46bcde86c90e49284eb15"}],gRed:!1,g:["79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798","483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8",i]})},function(e,t,r){var i=t;i.utils=r(1),i.common=r(5),i.sha=r(27),i.ripemd=r(31),i.hmac=r(32),i.sha1=i.sha.sha1,i.sha256=i.sha.sha256,i.sha224=i.sha.sha224,i.sha384=i.sha.sha384,i.sha512=i.sha.sha512,i.ripemd160=i.ripemd.ripemd160},function(e,t,r){"use strict";var i=t;function f(e){return 1===e.length?"0"+e:e}function n(e){for(var t="",r=0;r<e.length;r++)t+=f(e[r].toString(16));return t}i.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if("string"!=typeof e){for(var i=0;i<e.length;i++)r[i]=0|e[i];return r}if("hex"===t){(e=e.replace(/[^a-z0-9]+/gi,"")).length%2!=0&&(e="0"+e);for(i=0;i<e.length;i+=2)r.push(parseInt(e[i]+e[i+1],16))}else for(i=0;i<e.length;i++){var f=e.charCodeAt(i),n=f>>8,d=255&f;n?r.push(n,d):r.push(d)}return r},i.zero2=f,i.toHex=n,i.encode=function(e,t){return"hex"===t?n(e):e}},function(e,t,r){var i;function f(e){this.rand=e}if(e.exports=function(e){return i||(i=new f(null)),i.generate(e)},e.exports.Rand=f,f.prototype.generate=function(e){return this._rand(e)},f.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r<t.length;r++)t[r]=this.rand.getByte();return t},"object"==typeof self)self.crypto&&self.crypto.getRandomValues?f.prototype._rand=function(e){var t=new Uint8Array(e);return self.crypto.getRandomValues(t),t}:self.msCrypto&&self.msCrypto.getRandomValues?f.prototype._rand=function(e){var t=new Uint8Array(e);return self.msCrypto.getRandomValues(t),t}:"object"==typeof window&&(f.prototype._rand=function(){throw new Error("Not implemented yet")});else try{var n=r(23);if("function"!=typeof n.randomBytes)throw new Error("Not supported");f.prototype._rand=function(e){return n.randomBytes(e)}}catch(e){}},function(e,t,r){"use strict";var i=t;i.base=r(6),i.short=r(24),i.mont=r(25),i.edwards=r(26)},function(e,t,r){"use strict";var i=r(1).rotr32;function f(e,t,r){return e&t^~e&r}function n(e,t,r){return e&t^e&r^t&r}function d(e,t,r){return e^t^r}t.ft_1=function(e,t,r,i){return 0===e?f(t,r,i):1===e||3===e?d(t,r,i):2===e?n(t,r,i):void 0},t.ch32=f,t.maj32=n,t.p32=d,t.s0_256=function(e){return i(e,2)^i(e,13)^i(e,22)},t.s1_256=function(e){return i(e,6)^i(e,11)^i(e,25)},t.g0_256=function(e){return i(e,7)^i(e,18)^e>>>3},t.g1_256=function(e){return i(e,17)^i(e,19)^e>>>10}},function(e,t,r){"use strict";var i=r(1),f=r(5),n=r(13),d=r(3),a=i.sum32,c=i.sum32_4,s=i.sum32_5,o=n.ch32,h=n.maj32,u=n.s0_256,b=n.s1_256,l=n.g0_256,p=n.g1_256,m=f.BlockHash,v=[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];function y(){if(!(this instanceof y))return new y;m.call(this),this.h=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225],this.k=v,this.W=new Array(64)}i.inherits(y,m),e.exports=y,y.blockSize=512,y.outSize=256,y.hmacStrength=192,y.padLength=64,y.prototype._update=function(e,t){for(var r=this.W,i=0;i<16;i++)r[i]=e[t+i];for(;i<r.length;i++)r[i]=c(p(r[i-2]),r[i-7],l(r[i-15]),r[i-16]);var f=this.h[0],n=this.h[1],m=this.h[2],v=this.h[3],y=this.h[4],g=this.h[5],w=this.h[6],M=this.h[7];for(d(this.k.length===r.length),i=0;i<r.length;i++){var S=s(M,b(y),o(y,g,w),this.k[i],r[i]),A=a(u(f),h(f,n,m));M=w,w=g,g=y,y=a(v,S),v=m,m=n,n=f,f=a(S,A)}this.h[0]=a(this.h[0],f),this.h[1]=a(this.h[1],n),this.h[2]=a(this.h[2],m),this.h[3]=a(this.h[3],v),this.h[4]=a(this.h[4],y),this.h[5]=a(this.h[5],g),this.h[6]=a(this.h[6],w),this.h[7]=a(this.h[7],M)},y.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h,"big"):i.split32(this.h,"big")}},function(e,t,r){"use strict";var i=r(1),f=r(5),n=r(3),d=i.rotr64_hi,a=i.rotr64_lo,c=i.shr64_hi,s=i.shr64_lo,o=i.sum64,h=i.sum64_hi,u=i.sum64_lo,b=i.sum64_4_hi,l=i.sum64_4_lo,p=i.sum64_5_hi,m=i.sum64_5_lo,v=f.BlockHash,y=[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];function g(){if(!(this instanceof g))return new g;v.call(this),this.h=[1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209],this.k=y,this.W=new Array(160)}function w(e,t,r,i,f){var n=e&r^~e&f;return n<0&&(n+=4294967296),n}function M(e,t,r,i,f,n){var d=t&i^~t&n;return d<0&&(d+=4294967296),d}function S(e,t,r,i,f){var n=e&r^e&f^r&f;return n<0&&(n+=4294967296),n}function A(e,t,r,i,f,n){var d=t&i^t&n^i&n;return d<0&&(d+=4294967296),d}function _(e,t){var r=d(e,t,28)^d(t,e,2)^d(t,e,7);return r<0&&(r+=4294967296),r}function x(e,t){var r=a(e,t,28)^a(t,e,2)^a(t,e,7);return r<0&&(r+=4294967296),r}function I(e,t){var r=d(e,t,14)^d(e,t,18)^d(t,e,9);return r<0&&(r+=4294967296),r}function k(e,t){var r=a(e,t,14)^a(e,t,18)^a(t,e,9);return r<0&&(r+=4294967296),r}function z(e,t){var r=d(e,t,1)^d(e,t,8)^c(e,t,7);return r<0&&(r+=4294967296),r}function q(e,t){var r=a(e,t,1)^a(e,t,8)^s(e,t,7);return r<0&&(r+=4294967296),r}function R(e,t){var r=d(e,t,19)^d(t,e,29)^c(e,t,6);return r<0&&(r+=4294967296),r}function P(e,t){var r=a(e,t,19)^a(t,e,29)^s(e,t,6);return r<0&&(r+=4294967296),r}i.inherits(g,v),e.exports=g,g.blockSize=1024,g.outSize=512,g.hmacStrength=192,g.padLength=128,g.prototype._prepareBlock=function(e,t){for(var r=this.W,i=0;i<32;i++)r[i]=e[t+i];for(;i<r.length;i+=2){var f=R(r[i-4],r[i-3]),n=P(r[i-4],r[i-3]),d=r[i-14],a=r[i-13],c=z(r[i-30],r[i-29]),s=q(r[i-30],r[i-29]),o=r[i-32],h=r[i-31];r[i]=b(f,n,d,a,c,s,o,h),r[i+1]=l(f,n,d,a,c,s,o,h)}},g.prototype._update=function(e,t){this._prepareBlock(e,t);var r=this.W,i=this.h[0],f=this.h[1],d=this.h[2],a=this.h[3],c=this.h[4],s=this.h[5],b=this.h[6],l=this.h[7],v=this.h[8],y=this.h[9],g=this.h[10],z=this.h[11],q=this.h[12],R=this.h[13],P=this.h[14],E=this.h[15];n(this.k.length===r.length);for(var N=0;N<r.length;N+=2){var j=P,L=E,B=I(v,y),O=k(v,y),T=w(v,y,g,z,q),K=M(v,y,g,z,q,R),C=this.k[N],F=this.k[N+1],Z=r[N],U=r[N+1],V=p(j,L,B,O,T,K,C,F,Z,U),J=m(j,L,B,O,T,K,C,F,Z,U);j=_(i,f),L=x(i,f),B=S(i,f,d,a,c),O=A(i,f,d,a,c,s);var H=h(j,L,B,O),X=u(j,L,B,O);P=q,E=R,q=g,R=z,g=v,z=y,v=h(b,l,V,J),y=u(l,l,V,J),b=c,l=s,c=d,s=a,d=i,a=f,i=h(V,J,H,X),f=u(V,J,H,X)}o(this.h,0,i,f),o(this.h,2,d,a),o(this.h,4,c,s),o(this.h,6,b,l),o(this.h,8,v,y),o(this.h,10,g,z),o(this.h,12,q,R),o(this.h,14,P,E)},g.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h,"big"):i.split32(this.h,"big")}},function(e,t,r){"use strict";r.r(t),r.d(t,"prvVerify",(function(){return n})),r.d(t,"pubVerify",(function(){return d})),r.d(t,"pubAddTweak",(function(){return a})),r.d(t,"prvAddTweak",(function(){return c})),r.d(t,"prvToPub",(function(){return s})),r.d(t,"pubUncompressed",(function(){return o}));var i=r(4),f=r.n(i);const n=f.a.privateKeyVerify,d=f.a.publicKeyVerify;function a(e,t){const r=e.slice();try{return f.a.publicKeyTweakAdd(r,t,!0)}catch{return null}}function c(e,t){const r=e.slice();try{return f.a.privateKeyTweakAdd(r,t)}catch{return null}}function s(e){return f.a.publicKeyCreate(e,!0)}function o(e){return f.a.publicKeyConvert(e,!1)}},function(e,t){const r="Impossible case. Please create issue.",i="The tweak was out of range or the resulted private key is invalid",f="The tweak was out of range or equal to zero",n="Unknow error on context randomization",d="Private Key is invalid",a="Public Key could not be parsed",c="Public Key serialization error",s="The sum of the public keys is not valid",o="Signature could not be parsed",h="The nonce generation function failed, or the private key was invalid",u="Public key could not be recover",b="Scalar was invalid (zero or overflow)";function l(e,t){if(!e)throw new Error(t)}function p(e,t,r){if(l(t instanceof Uint8Array,`Expected ${e} to be an Uint8Array`),void 0!==r)if(Array.isArray(r)){const i=`Expected ${e} to be an Uint8Array with length [${r.join(", ")}]`;l(r.includes(t.length),i)}else{const i=`Expected ${e} to be an Uint8Array with length ${r}`;l(t.length===r,i)}}function m(e){l("Boolean"===y(e),"Expected compressed to be a Boolean")}function v(e=(e=>new Uint8Array(e)),t){return"function"==typeof e&&(e=e(t)),p("output",e,t),e}function y(e){return Object.prototype.toString.call(e).slice(8,-1)}e.exports=e=>({contextRandomize(t){switch(l(null===t||t instanceof Uint8Array,"Expected seed to be an Uint8Array or null"),null!==t&&p("seed",t,32),e.contextRandomize(t)){case 1:throw new Error(n)}},privateKeyVerify:t=>(p("private key",t,32),0===e.privateKeyVerify(t)),privateKeyNegate(t){switch(p("private key",t,32),e.privateKeyNegate(t)){case 0:return t;case 1:throw new Error(r)}},privateKeyTweakAdd(t,r){switch(p("private key",t,32),p("tweak",r,32),e.privateKeyTweakAdd(t,r)){case 0:return t;case 1:throw new Error(i)}},privateKeyTweakMul(t,r){switch(p("private key",t,32),p("tweak",r,32),e.privateKeyTweakMul(t,r)){case 0:return t;case 1:throw new Error(f)}},publicKeyVerify:t=>(p("public key",t,[33,65]),0===e.publicKeyVerify(t)),publicKeyCreate(t,r=!0,i){switch(p("private key",t,32),m(r),i=v(i,r?33:65),e.publicKeyCreate(i,t)){case 0:return i;case 1:throw new Error(d);case 2:throw new Error(c)}},publicKeyConvert(t,r=!0,i){switch(p("public key",t,[33,65]),m(r),i=v(i,r?33:65),e.publicKeyConvert(i,t)){case 0:return i;case 1:throw new Error(a);case 2:throw new Error(c)}},publicKeyNegate(t,i=!0,f){switch(p("public key",t,[33,65]),m(i),f=v(f,i?33:65),e.publicKeyNegate(f,t)){case 0:return f;case 1:throw new Error(a);case 2:throw new Error(r);case 3:throw new Error(c)}},publicKeyCombine(t,r=!0,i){l(Array.isArray(t),"Expected public keys to be an Array"),l(t.length>0,"Expected public keys array will have more than zero items");for(const e of t)p("public key",e,[33,65]);switch(m(r),i=v(i,r?33:65),e.publicKeyCombine(i,t)){case 0:return i;case 1:throw new Error(a);case 2:throw new Error(s);case 3:throw new Error(c)}},publicKeyTweakAdd(t,r,f=!0,n){switch(p("public key",t,[33,65]),p("tweak",r,32),m(f),n=v(n,f?33:65),e.publicKeyTweakAdd(n,t,r)){case 0:return n;case 1:throw new Error(a);case 2:throw new Error(i)}},publicKeyTweakMul(t,r,i=!0,n){switch(p("public key",t,[33,65]),p("tweak",r,32),m(i),n=v(n,i?33:65),e.publicKeyTweakMul(n,t,r)){case 0:return n;case 1:throw new Error(a);case 2:throw new Error(f)}},signatureNormalize(t){switch(p("signature",t,64),e.signatureNormalize(t)){case 0:return t;case 1:throw new Error(o)}},signatureExport(t,i){p("signature",t,64);const f={output:i=v(i,72),outputlen:72};switch(e.signatureExport(f,t)){case 0:return i.slice(0,f.outputlen);case 1:throw new Error(o);case 2:throw new Error(r)}},signatureImport(t,i){switch(p("signature",t),i=v(i,64),e.signatureImport(i,t)){case 0:return i;case 1:throw new Error(o);case 2:throw new Error(r)}},ecdsaSign(t,i,f={},n){p("message",t,32),p("private key",i,32),l("Object"===y(f),"Expected options to be an Object"),void 0!==f.data&&p("options.data",f.data),void 0!==f.noncefn&&l("Function"===y(f.noncefn),"Expected options.noncefn to be a Function");const d={signature:n=v(n,64),recid:null};switch(e.ecdsaSign(d,t,i,f.data,f.noncefn)){case 0:return d;case 1:throw new Error(h);case 2:throw new Error(r)}},ecdsaVerify(t,r,i){switch(p("signature",t,64),p("message",r,32),p("public key",i,[33,65]),e.ecdsaVerify(t,r,i)){case 0:return!0;case 3:return!1;case 1:throw new Error(o);case 2:throw new Error(a)}},ecdsaRecover(t,i,f,n=!0,d){switch(p("signature",t,64),l("Number"===y(i)&&i>=0&&i<=3,"Expected recovery id to be a Number within interval [0, 3]"),p("message",f,32),m(n),d=v(d,n?33:65),e.ecdsaRecover(d,t,i,f)){case 0:return d;case 1:throw new Error(o);case 2:throw new Error(u);case 3:throw new Error(r)}},ecdh(t,r,i={},f){switch(p("public key",t,[33,65]),p("private key",r,32),l("Object"===y(i),"Expected options to be an Object"),void 0!==i.data&&p("options.data",i.data),void 0!==i.hashfn?(l("Function"===y(i.hashfn),"Expected options.hashfn to be a Function"),void 0!==i.xbuf&&p("options.xbuf",i.xbuf,32),void 0!==i.ybuf&&p("options.ybuf",i.ybuf,32),p("output",f)):f=v(f,32),e.ecdh(f,t,r,i.data,i.hashfn,i.xbuf,i.ybuf)){case 0:return f;case 1:throw new Error(a);case 2:throw new Error(b)}}})},function(e,t,r){const i=new(0,r(19).ec)("secp256k1"),f=i.curve,n=f.n.constructor;function d(e){const t=e[0];switch(t){case 2:case 3:return 33!==e.length?null:function(e,t){let r=new n(t);if(r.cmp(f.p)>=0)return null;r=r.toRed(f.red);let d=r.redSqr().redIMul(r).redIAdd(f.b).redSqrt();return 3===e!==d.isOdd()&&(d=d.redNeg()),i.keyPair({pub:{x:r,y:d}})}(t,e.subarray(1,33));case 4:case 6:case 7:return 65!==e.length?null:function(e,t,r){let d=new n(t),a=new n(r);if(d.cmp(f.p)>=0||a.cmp(f.p)>=0)return null;if(d=d.toRed(f.red),a=a.toRed(f.red),(6===e||7===e)&&a.isOdd()!==(7===e))return null;const c=d.redSqr().redIMul(d);return a.redSqr().redISub(c.redIAdd(f.b)).isZero()?i.keyPair({pub:{x:d,y:a}}):null}(t,e.subarray(1,33),e.subarray(33,65));default:return null}}function a(e,t){const r=t.encode(null,33===e.length);for(let t=0;t<e.length;++t)e[t]=r[t]}e.exports={contextRandomize:()=>0,privateKeyVerify(e){const t=new n(e);return t.cmp(f.n)<0&&!t.isZero()?0:1},privateKeyNegate(e){const t=new n(e),r=f.n.sub(t).umod(f.n).toArrayLike(Uint8Array,"be",32);return e.set(r),0},privateKeyTweakAdd(e,t){const r=new n(t);if(r.cmp(f.n)>=0)return 1;if(r.iadd(new n(e)),r.cmp(f.n)>=0&&r.isub(f.n),r.isZero())return 1;const i=r.toArrayLike(Uint8Array,"be",32);return e.set(i),0},privateKeyTweakMul(e,t){let r=new n(t);if(r.cmp(f.n)>=0||r.isZero())return 1;r.imul(new n(e)),r.cmp(f.n)>=0&&(r=r.umod(f.n));const i=r.toArrayLike(Uint8Array,"be",32);return e.set(i),0},publicKeyVerify:e=>null===d(e)?1:0,publicKeyCreate(e,t){const r=new n(t);if(r.cmp(f.n)>=0||r.isZero())return 1;return a(e,i.keyFromPrivate(t).getPublic()),0},publicKeyConvert(e,t){const r=d(t);if(null===r)return 1;return a(e,r.getPublic()),0},publicKeyNegate(e,t){const r=d(t);if(null===r)return 1;const i=r.getPublic();return i.y=i.y.redNeg(),a(e,i),0},publicKeyCombine(e,t){const r=new Array(t.length);for(let e=0;e<t.length;++e)if(r[e]=d(t[e]),null===r[e])return 1;let i=r[0].getPublic();for(let e=1;e<r.length;++e)i=i.add(r[e].pub);return i.isInfinity()?2:(a(e,i),0)},publicKeyTweakAdd(e,t,r){const i=d(t);if(null===i)return 1;if((r=new n(r)).cmp(f.n)>=0)return 2;const c=i.getPublic().add(f.g.mul(r));return c.isInfinity()?2:(a(e,c),0)},publicKeyTweakMul(e,t,r){const i=d(t);if(null===i)return 1;if((r=new n(r)).cmp(f.n)>=0||r.isZero())return 2;return a(e,i.getPublic().mul(r)),0},signatureNormalize(e){const t=new n(e.subarray(0,32)),r=new n(e.subarray(32,64));return t.cmp(f.n)>=0||r.cmp(f.n)>=0?1:(1===r.cmp(i.nh)&&e.set(f.n.sub(r).toArrayLike(Uint8Array,"be",32),32),0)},signatureExport(e,t){const r=t.subarray(0,32),i=t.subarray(32,64);if(new n(r).cmp(f.n)>=0)return 1;if(new n(i).cmp(f.n)>=0)return 1;const{output:d}=e;let a=d.subarray(4,37);a[0]=0,a.set(r,1);let c=33,s=0;for(;c>1&&0===a[s]&&!(128&a[s+1]);--c,++s);if(a=a.subarray(s),128&a[0])return 1;if(c>1&&0===a[0]&&!(128&a[1]))return 1;let o=d.subarray(39,72);o[0]=0,o.set(i,1);let h=33,u=0;for(;h>1&&0===o[u]&&!(128&o[u+1]);--h,++u);return o=o.subarray(u),128&o[0]||h>1&&0===o[0]&&!(128&o[1])?1:(e.outputlen=6+c+h,d[0]=48,d[1]=e.outputlen-2,d[2]=2,d[3]=a.length,d.set(a,4),d[4+c]=2,d[5+c]=o.length,d.set(o,6+c),0)},signatureImport(e,t){if(t.length<8)return 1;if(t.length>72)return 1;if(48!==t[0])return 1;if(t[1]!==t.length-2)return 1;if(2!==t[2])return 1;const r=t[3];if(0===r)return 1;if(5+r>=t.length)return 1;if(2!==t[4+r])return 1;const i=t[5+r];if(0===i)return 1;if(6+r+i!==t.length)return 1;if(128&t[4])return 1;if(r>1&&0===t[4]&&!(128&t[5]))return 1;if(128&t[r+6])return 1;if(i>1&&0===t[r+6]&&!(128&t[r+7]))return 1;let d=t.subarray(4,4+r);if(33===d.length&&0===d[0]&&(d=d.subarray(1)),d.length>32)return 1;let a=t.subarray(6+r);if(33===a.length&&0===a[0]&&(a=a.slice(1)),a.length>32)throw new Error("S length is too long");let c=new n(d);c.cmp(f.n)>=0&&(c=new n(0));let s=new n(t.subarray(6+r));return s.cmp(f.n)>=0&&(s=new n(0)),e.set(c.toArrayLike(Uint8Array,"be",32),0),e.set(s.toArrayLike(Uint8Array,"be",32),32),0},ecdsaSign(e,t,r,d,a){if(a){const e=a;a=i=>{const f=e(t,r,null,d,i);if(!(f instanceof Uint8Array&&32===f.length))throw new Error("This is the way");return new n(f)}}const c=new n(r);if(c.cmp(f.n)>=0||c.isZero())return 1;let s;try{s=i.sign(t,r,{canonical:!0,k:a,pers:d})}catch(e){return 1}return e.signature.set(s.r.toArrayLike(Uint8Array,"be",32),0),e.signature.set(s.s.toArrayLike(Uint8Array,"be",32),32),e.recid=s.recoveryParam,0},ecdsaVerify(e,t,r){const a={r:e.subarray(0,32),s:e.subarray(32,64)},c=new n(a.r),s=new n(a.s);if(c.cmp(f.n)>=0||s.cmp(f.n)>=0)return 1;if(1===s.cmp(i.nh)||c.isZero()||s.isZero())return 3;const o=d(r);if(null===o)return 2;const h=o.getPublic();return i.verify(t,a,h)?0:3},ecdsaRecover(e,t,r,d){const c={r:t.slice(0,32),s:t.slice(32,64)},s=new n(c.r),o=new n(c.s);if(s.cmp(f.n)>=0||o.cmp(f.n)>=0)return 1;if(s.isZero()||o.isZero())return 2;let h;try{h=i.recoverPubKey(d,c,r)}catch(e){return 2}return a(e,h),0},ecdh(e,t,r,a,c,s,o){const h=d(t);if(null===h)return 1;const u=new n(r);if(u.cmp(f.n)>=0||u.isZero())return 2;const b=h.getPublic().mul(u);if(void 0===c){const t=b.encode(null,!0),r=i.hash().update(t).digest();for(let t=0;t<32;++t)e[t]=r[t]}else{s||(s=new Uint8Array(32));const t=b.getX().toArray("be",32);for(let e=0;e<32;++e)s[e]=t[e];o||(o=new Uint8Array(32));const r=b.getY().toArray("be",32);for(let e=0;e<32;++e)o[e]=r[e];const i=c(s,o,a);if(!(i instanceof Uint8Array&&i.length===e.length))return 2;e.set(i)}return 0}}},function(e,t,r){"use strict";var i=t;i.version=r(20).version,i.utils=r(0),i.rand=r(11),i.curve=r(12),i.curves=r(8),i.ec=r(34),i.eddsa=r(38)},function(e){e.exports=JSON.parse('{"_args":[["elliptic@6.5.3","/home/k/q/bitcoin-keys.git/bitcoin-keys"]],"_from":"elliptic@6.5.3","_id":"elliptic@6.5.3","_inBundle":false,"_integrity":"sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==","_location":"/elliptic","_phantomChildren":{},"_requested":{"type":"version","registry":true,"raw":"elliptic@6.5.3","name":"elliptic","escapedName":"elliptic","rawSpec":"6.5.3","saveSpec":null,"fetchSpec":"6.5.3"},"_requiredBy":["/browserify-sign","/create-ecdh","/secp256k1"],"_resolved":"https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz","_spec":"6.5.3","_where":"/home/k/q/bitcoin-keys.git/bitcoin-keys","author":{"name":"Fedor Indutny","email":"fedor@indutny.com"},"bugs":{"url":"https://github.com/indutny/elliptic/issues"},"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"},"description":"EC cryptography","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"},"files":["lib"],"homepage":"https://github.com/indutny/elliptic","keywords":["EC","Elliptic","curve","Cryptography"],"license":"MIT","main":"lib/elliptic.js","name":"elliptic","repository":{"type":"git","url":"git+ssh://git@github.com/indutny/elliptic.git"},"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","test":"npm run lint && npm run unit","unit":"istanbul test _mocha --reporter=spec test/index.js","version":"grunt dist && git add dist/"},"version":"6.5.3"}')},function(e,t){e.exports=function(e){return e.webpackPolyfill||(e.deprecate=function(){},e.paths=[],e.children||(e.children=[]),Object.defineProperty(e,"loaded",{enumerable:!0,get:function(){return e.l}}),Object.defineProperty(e,"id",{enumerable:!0,get:function(){return e.i}}),e.webpackPolyfill=1),e}},function(e,t){},function(e,t){},function(e,t,r){"use strict";var i=r(0),f=r(2),n=r(7),d=r(6),a=i.assert;function c(e){d.call(this,"short",e),this.a=new f(e.a,16).toRed(this.red),this.b=new f(e.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(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function s(e,t,r,i){d.BasePoint.call(this,e,"affine"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new f(t,16),this.y=new f(r,16),i&&(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 o(e,t,r,i){d.BasePoint.call(this,e,"jacobian"),null===t&&null===r&&null===i?(this.x=this.curve.one,this.y=this.curve.one,this.z=new f(0)):(this.x=new f(t,16),this.y=new f(r,16),this.z=new f(i,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}n(c,d),e.exports=c,c.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new f(e.beta,16).toRed(this.red);else{var i=this._getEndoRoots(this.p);t=(t=i[0].cmp(i[1])<0?i[0]:i[1]).toRed(this.red)}if(e.lambda)r=new f(e.lambda,16);else{var n=this._getEndoRoots(this.n);0===this.g.mul(n[0]).x.cmp(this.g.x.redMul(t))?r=n[0]:(r=n[1],a(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new f(e.a,16),b:new f(e.b,16)}})):this._getEndoBasis(r)}}},c.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:f.mont(e),r=new f(2).toRed(t).redInvm(),i=r.redNeg(),n=new f(3).toRed(t).redNeg().redSqrt().redMul(r);return[i.redAdd(n).fromRed(),i.redSub(n).fromRed()]},c.prototype._getEndoBasis=function(e){for(var t,r,i,n,d,a,c,s,o,h=this.n.ushrn(Math.floor(this.n.bitLength()/2)),u=e,b=this.n.clone(),l=new f(1),p=new f(0),m=new f(0),v=new f(1),y=0;0!==u.cmpn(0);){var g=b.div(u);s=b.sub(g.mul(u)),o=m.sub(g.mul(l));var w=v.sub(g.mul(p));if(!i&&s.cmp(h)<0)t=c.neg(),r=l,i=s.neg(),n=o;else if(i&&2==++y)break;c=s,b=u,u=s,m=l,l=o,v=p,p=w}d=s.neg(),a=o;var M=i.sqr().add(n.sqr());return d.sqr().add(a.sqr()).cmp(M)>=0&&(d=t,a=r),i.negative&&(i=i.neg(),n=n.neg()),d.negative&&(d=d.neg(),a=a.neg()),[{a:i,b:n},{a:d,b:a}]},c.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],i=t[1],f=i.b.mul(e).divRound(this.n),n=r.b.neg().mul(e).divRound(this.n),d=f.mul(r.a),a=n.mul(i.a),c=f.mul(r.b),s=n.mul(i.b);return{k1:e.sub(d).sub(a),k2:c.add(s).neg()}},c.prototype.pointFromX=function(e,t){(e=new f(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),i=r.redSqrt();if(0!==i.redSqr().redSub(r).cmp(this.zero))throw new Error("invalid point");var n=i.fromRed().isOdd();return(t&&!n||!t&&n)&&(i=i.redNeg()),this.point(e,i)},c.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,i=this.a.redMul(t),f=t.redSqr().redMul(t).redIAdd(i).redIAdd(this.b);return 0===r.redSqr().redISub(f).cmpn(0)},c.prototype._endoWnafMulAdd=function(e,t,r){for(var i=this._endoWnafT1,f=this._endoWnafT2,n=0;n<e.length;n++){var d=this._endoSplit(t[n]),a=e[n],c=a._getBeta();d.k1.negative&&(d.k1.ineg(),a=a.neg(!0)),d.k2.negative&&(d.k2.ineg(),c=c.neg(!0)),i[2*n]=a,i[2*n+1]=c,f[2*n]=d.k1,f[2*n+1]=d.k2}for(var s=this._wnafMulAdd(1,i,f,2*n,r),o=0;o<2*n;o++)i[o]=null,f[o]=null;return s},n(s,d.BasePoint),c.prototype.point=function(e,t,r){return new s(this,e,t,r)},c.prototype.pointFromJSON=function(e,t){return s.fromJSON(this,e,t)},s.prototype._getBeta=function(){if(this.curve.endo){var e=this.precomputed;if(e&&e.beta)return e.beta;var t=this.curve.point(this.x.redMul(this.curve.endo.beta),this.y);if(e){var r=this.curve,i=function(e){return r.point(e.x.redMul(r.endo.beta),e.y)};e.beta=t,t.precomputed={beta:null,naf:e.naf&&{wnd:e.naf.wnd,points:e.naf.points.map(i)},doubles:e.doubles&&{step:e.doubles.step,points:e.doubles.points.map(i)}}}return t}},s.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]},s.fromJSON=function(e,t,r){"string"==typeof t&&(t=JSON.parse(t));var i=e.point(t[0],t[1],r);if(!t[2])return i;function f(t){return e.point(t[0],t[1],r)}var n=t[2];return i.precomputed={beta:null,doubles:n.doubles&&{step:n.doubles.step,points:[i].concat(n.doubles.points.map(f))},naf:n.naf&&{wnd:n.naf.wnd,points:[i].concat(n.naf.points.map(f))}},i},s.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)+">"},s.prototype.isInfinity=function(){return this.inf},s.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),i=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,i)},s.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),i=e.redInvm(),f=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(i),n=f.redSqr().redISub(this.x.redAdd(this.x)),d=f.redMul(this.x.redSub(n)).redISub(this.y);return this.curve.point(n,d)},s.prototype.getX=function(){return this.x.fromRed()},s.prototype.getY=function(){return this.y.fromRed()},s.prototype.mul=function(e){return e=new f(e,16),this.isInfinity()?this:this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},s.prototype.mulAdd=function(e,t,r){var i=[this,t],f=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,f):this.curve._wnafMulAdd(1,i,f,2)},s.prototype.jmulAdd=function(e,t,r){var i=[this,t],f=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(i,f,!0):this.curve._wnafMulAdd(1,i,f,2,!0)},s.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},s.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,i=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(i)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(i)}}}return t},s.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},n(o,d.BasePoint),c.prototype.jpoint=function(e,t,r){return new o(this,e,t,r)},o.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),i=this.y.redMul(t).redMul(e);return this.curve.point(r,i)},o.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},o.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),i=this.x.redMul(t),f=e.x.redMul(r),n=this.y.redMul(t.redMul(e.z)),d=e.y.redMul(r.redMul(this.z)),a=i.redSub(f),c=n.redSub(d);if(0===a.cmpn(0))return 0!==c.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var s=a.redSqr(),o=s.redMul(a),h=i.redMul(s),u=c.redSqr().redIAdd(o).redISub(h).redISub(h),b=c.redMul(h.redISub(u)).redISub(n.redMul(o)),l=this.z.redMul(e.z).redMul(a);return this.curve.jpoint(u,b,l)},o.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,i=e.x.redMul(t),f=this.y,n=e.y.redMul(t).redMul(this.z),d=r.redSub(i),a=f.redSub(n);if(0===d.cmpn(0))return 0!==a.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=d.redSqr(),s=c.redMul(d),o=r.redMul(c),h=a.redSqr().redIAdd(s).redISub(o).redISub(o),u=a.redMul(o.redISub(h)).redISub(f.redMul(s)),b=this.z.redMul(d);return this.curve.jpoint(h,u,b)},o.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r<e;r++)t=t.dbl();return t}var i=this.curve.a,f=this.curve.tinv,n=this.x,d=this.y,a=this.z,c=a.redSqr().redSqr(),s=d.redAdd(d);for(r=0;r<e;r++){var o=n.redSqr(),h=s.redSqr(),u=h.redSqr(),b=o.redAdd(o).redIAdd(o).redIAdd(i.redMul(c)),l=n.redMul(h),p=b.redSqr().redISub(l.redAdd(l)),m=l.redISub(p),v=b.redMul(m);v=v.redIAdd(v).redISub(u);var y=s.redMul(a);r+1<e&&(c=c.redMul(u)),n=p,a=y,s=v}return this.curve.jpoint(n,s.redMul(f),a)},o.prototype.dbl=function(){return this.isInfinity()?this:this.curve.zeroA?this._zeroDbl():this.curve.threeA?this._threeDbl():this._dbl()},o.prototype._zeroDbl=function(){var e,t,r;if(this.zOne){var i=this.x.redSqr(),f=this.y.redSqr(),n=f.redSqr(),d=this.x.redAdd(f).redSqr().redISub(i).redISub(n);d=d.redIAdd(d);var a=i.redAdd(i).redIAdd(i),c=a.redSqr().redISub(d).redISub(d),s=n.redIAdd(n);s=(s=s.redIAdd(s)).redIAdd(s),e=c,t=a.redMul(d.redISub(c)).redISub(s),r=this.y.redAdd(this.y)}else{var o=this.x.redSqr(),h=this.y.redSqr(),u=h.redSqr(),b=this.x.redAdd(h).redSqr().redISub(o).redISub(u);b=b.redIAdd(b);var l=o.redAdd(o).redIAdd(o),p=l.redSqr(),m=u.redIAdd(u);m=(m=m.redIAdd(m)).redIAdd(m),e=p.redISub(b).redISub(b),t=l.redMul(b.redISub(e)).redISub(m),r=(r=this.y.redMul(this.z)).redIAdd(r)}return this.curve.jpoint(e,t,r)},o.prototype._threeDbl=function(){var e,t,r;if(this.zOne){var i=this.x.redSqr(),f=this.y.redSqr(),n=f.redSqr(),d=this.x.redAdd(f).redSqr().redISub(i).redISub(n);d=d.redIAdd(d);var a=i.redAdd(i).redIAdd(i).redIAdd(this.curve.a),c=a.redSqr().redISub(d).redISub(d);e=c;var s=n.redIAdd(n);s=(s=s.redIAdd(s)).redIAdd(s),t=a.redMul(d.redISub(c)).redISub(s),r=this.y.redAdd(this.y)}else{var o=this.z.redSqr(),h=this.y.redSqr(),u=this.x.redMul(h),b=this.x.redSub(o).redMul(this.x.redAdd(o));b=b.redAdd(b).redIAdd(b);var l=u.redIAdd(u),p=(l=l.redIAdd(l)).redAdd(l);e=b.redSqr().redISub(p),r=this.y.redAdd(this.z).redSqr().redISub(h).redISub(o);var m=h.redSqr();m=(m=(m=m.redIAdd(m)).redIAdd(m)).redIAdd(m),t=b.redMul(l.redISub(e)).redISub(m)}return this.curve.jpoint(e,t,r)},o.prototype._dbl=function(){var e=this.curve.a,t=this.x,r=this.y,i=this.z,f=i.redSqr().redSqr(),n=t.redSqr(),d=r.redSqr(),a=n.redAdd(n).redIAdd(n).redIAdd(e.redMul(f)),c=t.redAdd(t),s=(c=c.redIAdd(c)).redMul(d),o=a.redSqr().redISub(s.redAdd(s)),h=s.redISub(o),u=d.redSqr();u=(u=(u=u.redIAdd(u)).redIAdd(u)).redIAdd(u);var b=a.redMul(h).redISub(u),l=r.redAdd(r).redMul(i);return this.curve.jpoint(o,b,l)},o.prototype.trpl=function(){if(!this.curve.zeroA)return this.dbl().add(this);var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr(),i=t.redSqr(),f=e.redAdd(e).redIAdd(e),n=f.redSqr(),d=this.x.redAdd(t).redSqr().redISub(e).redISub(i),a=(d=(d=(d=d.redIAdd(d)).redAdd(d).redIAdd(d)).redISub(n)).redSqr(),c=i.redIAdd(i);c=(c=(c=c.redIAdd(c)).redIAdd(c)).redIAdd(c);var s=f.redIAdd(d).redSqr().redISub(n).redISub(a).redISub(c),o=t.redMul(s);o=(o=o.redIAdd(o)).redIAdd(o);var h=this.x.redMul(a).redISub(o);h=(h=h.redIAdd(h)).redIAdd(h);var u=this.y.redMul(s.redMul(c.redISub(s)).redISub(d.redMul(a)));u=(u=(u=u.redIAdd(u)).redIAdd(u)).redIAdd(u);var b=this.z.redAdd(d).redSqr().redISub(r).redISub(a);return this.curve.jpoint(h,u,b)},o.prototype.mul=function(e,t){return e=new f(e,t),this.curve._wnafMul(this,e)},o.prototype.eq=function(e){if("affine"===e.type)return this.eq(e.toJ());if(this===e)return!0;var t=this.z.redSqr(),r=e.z.redSqr();if(0!==this.x.redMul(r).redISub(e.x.redMul(t)).cmpn(0))return!1;var i=t.redMul(this.z),f=r.redMul(e.z);return 0===this.y.redMul(f).redISub(e.y.redMul(i)).cmpn(0)},o.prototype.eqXToP=function(e){var t=this.z.redSqr(),r=e.toRed(this.curve.red).redMul(t);if(0===this.x.cmp(r))return!0;for(var i=e.clone(),f=this.curve.redN.redMul(t);;){if(i.iadd(this.curve.n),i.cmp(this.curve.p)>=0)return!1;if(r.redIAdd(f),0===this.x.cmp(r))return!0}},o.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)+">"},o.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},function(e,t,r){"use strict";var i=r(2),f=r(7),n=r(6),d=r(0);function a(e){n.call(this,"mont",e),this.a=new i(e.a,16).toRed(this.red),this.b=new i(e.b,16).toRed(this.red),this.i4=new i(4).toRed(this.red).redInvm(),this.two=new i(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function c(e,t,r){n.BasePoint.call(this,e,"projective"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new i(t,16),this.z=new i(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}f(a,n),e.exports=a,a.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),i=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===i.redSqrt().redSqr().cmp(i)},f(c,n.BasePoint),a.prototype.decodePoint=function(e,t){return this.point(d.toArray(e,t),1)},a.prototype.point=function(e,t){return new c(this,e,t)},a.prototype.pointFromJSON=function(e){return c.fromJSON(this,e)},c.prototype.precompute=function(){},c.prototype._encode=function(){return this.getX().toArray("be",this.curve.p.byteLength())},c.fromJSON=function(e,t){return new c(e,t[0],t[1]||e.one)},c.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)+">"},c.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},c.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),i=e.redMul(t),f=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(i,f)},c.prototype.add=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),i=this.x.redSub(this.z),f=e.x.redAdd(e.z),n=e.x.redSub(e.z).redMul(r),d=f.redMul(i),a=t.z.redMul(n.redAdd(d).redSqr()),c=t.x.redMul(n.redISub(d).redSqr());return this.curve.point(a,c)},c.prototype.mul=function(e){for(var t=e.clone(),r=this,i=this.curve.point(null,null),f=[];0!==t.cmpn(0);t.iushrn(1))f.push(t.andln(1));for(var n=f.length-1;n>=0;n--)0===f[n]?(r=r.diffAdd(i,this),i=i.dbl()):(i=r.diffAdd(i,this),r=r.dbl());return i},c.prototype.mulAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.jumlAdd=function(){throw new Error("Not supported on Montgomery curve")},c.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},c.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},function(e,t,r){"use strict";var i=r(0),f=r(2),n=r(7),d=r(6),a=i.assert;function c(e){this.twisted=1!=(0|e.a),this.mOneA=this.twisted&&-1==(0|e.a),this.extended=this.mOneA,d.call(this,"edwards",e),this.a=new f(e.a,16).umod(this.red.m),this.a=this.a.toRed(this.red),this.c=new f(e.c,16).toRed(this.red),this.c2=this.c.redSqr(),this.d=new f(e.d,16).toRed(this.red),this.dd=this.d.redAdd(this.d),a(!this.twisted||0===this.c.fromRed().cmpn(1)),this.oneC=1==(0|e.c)}function s(e,t,r,i,n){d.BasePoint.call(this,e,"projective"),null===t&&null===r&&null===i?(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 f(t,16),this.y=new f(r,16),this.z=i?new f(i,16):this.curve.one,this.t=n&&new f(n,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()))))}n(c,d),e.exports=c,c.prototype._mulA=function(e){return this.mOneA?e.redNeg():this.a.redMul(e)},c.prototype._mulC=function(e){return this.oneC?e:this.c.redMul(e)},c.prototype.jpoint=function(e,t,r,i){return this.point(e,t,r,i)},c.prototype.pointFromX=function(e,t){(e=new f(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),i=this.c2.redSub(this.a.redMul(r)),n=this.one.redSub(this.c2.redMul(this.d).redMul(r)),d=i.redMul(n.redInvm()),a=d.redSqrt();if(0!==a.redSqr().redSub(d).cmp(this.zero))throw new Error("invalid point");var c=a.fromRed().isOdd();return(t&&!c||!t&&c)&&(a=a.redNeg()),this.point(e,a)},c.prototype.pointFromY=function(e,t){(e=new f(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr(),i=r.redSub(this.c2),n=r.redMul(this.d).redMul(this.c2).redSub(this.a),d=i.redMul(n.redInvm());if(0===d.cmp(this.zero)){if(t)throw new Error("invalid point");return this.point(this.zero,e)}var a=d.redSqrt();if(0!==a.redSqr().redSub(d).cmp(this.zero))throw new Error("invalid point");return a.fromRed().isOdd()!==t&&(a=a.redNeg()),this.point(a,e)},c.prototype.validate=function(e){if(e.isInfinity())return!0;e.normalize();var t=e.x.redSqr(),r=e.y.redSqr(),i=t.redMul(this.a).redAdd(r),f=this.c2.redMul(this.one.redAdd(this.d.redMul(t).redMul(r)));return 0===i.cmp(f)},n(s,d.BasePoint),c.prototype.pointFromJSON=function(e){return s.fromJSON(this,e)},c.prototype.point=function(e,t,r,i){return new s(this,e,t,r,i)},s.fromJSON=function(e,t){return new s(e,t[0],t[1],t[2])},s.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)+">"},s.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},s.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var i=this.curve._mulA(e),f=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),n=i.redAdd(t),d=n.redSub(r),a=i.redSub(t),c=f.redMul(d),s=n.redMul(a),o=f.redMul(a),h=d.redMul(n);return this.curve.point(c,s,h,o)},s.prototype._projDbl=function(){var e,t,r,i=this.x.redAdd(this.y).redSqr(),f=this.x.redSqr(),n=this.y.redSqr();if(this.curve.twisted){var d=(s=this.curve._mulA(f)).redAdd(n);if(this.zOne)e=i.redSub(f).redSub(n).redMul(d.redSub(this.curve.two)),t=d.redMul(s.redSub(n)),r=d.redSqr().redSub(d).redSub(d);else{var a=this.z.redSqr(),c=d.redSub(a).redISub(a);e=i.redSub(f).redISub(n).redMul(c),t=d.redMul(s.redSub(n)),r=d.redMul(c)}}else{var s=f.redAdd(n);a=this.curve._mulC(this.z).redSqr(),c=s.redSub(a).redSub(a);e=this.curve._mulC(i.redISub(s)).redMul(c),t=this.curve._mulC(s).redMul(f.redISub(n)),r=s.redMul(c)}return this.curve.point(e,t,r)},s.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},s.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),i=this.t.redMul(this.curve.dd).redMul(e.t),f=this.z.redMul(e.z.redAdd(e.z)),n=r.redSub(t),d=f.redSub(i),a=f.redAdd(i),c=r.redAdd(t),s=n.redMul(d),o=a.redMul(c),h=n.redMul(c),u=d.redMul(a);return this.curve.point(s,o,u,h)},s.prototype._projAdd=function(e){var t,r,i=this.z.redMul(e.z),f=i.redSqr(),n=this.x.redMul(e.x),d=this.y.redMul(e.y),a=this.curve.d.redMul(n).redMul(d),c=f.redSub(a),s=f.redAdd(a),o=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(n).redISub(d),h=i.redMul(c).redMul(o);return this.curve.twisted?(t=i.redMul(s).redMul(d.redSub(this.curve._mulA(n))),r=c.redMul(s)):(t=i.redMul(s).redMul(d.redSub(n)),r=this.curve._mulC(c).redMul(s)),this.curve.point(h,t,r)},s.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},s.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},s.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},s.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},s.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},s.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},s.prototype.getX=function(){return this.normalize(),this.x.fromRed()},s.prototype.getY=function(){return this.normalize(),this.y.fromRed()},s.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},s.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),i=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(i),0===this.x.cmp(t))return!0}},s.prototype.toP=s.prototype.normalize,s.prototype.mixedAdd=s.prototype.add},function(e,t,r){"use strict";t.sha1=r(28),t.sha224=r(29),t.sha256=r(14),t.sha384=r(30),t.sha512=r(15)},function(e,t,r){"use strict";var i=r(1),f=r(5),n=r(13),d=i.rotl32,a=i.sum32,c=i.sum32_5,s=n.ft_1,o=f.BlockHash,h=[1518500249,1859775393,2400959708,3395469782];function u(){if(!(this instanceof u))return new u;o.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.W=new Array(80)}i.inherits(u,o),e.exports=u,u.blockSize=512,u.outSize=160,u.hmacStrength=80,u.padLength=64,u.prototype._update=function(e,t){for(var r=this.W,i=0;i<16;i++)r[i]=e[t+i];for(;i<r.length;i++)r[i]=d(r[i-3]^r[i-8]^r[i-14]^r[i-16],1);var f=this.h[0],n=this.h[1],o=this.h[2],u=this.h[3],b=this.h[4];for(i=0;i<r.length;i++){var l=~~(i/20),p=c(d(f,5),s(l,n,o,u),b,r[i],h[l]);b=u,u=o,o=d(n,30),n=f,f=p}this.h[0]=a(this.h[0],f),this.h[1]=a(this.h[1],n),this.h[2]=a(this.h[2],o),this.h[3]=a(this.h[3],u),this.h[4]=a(this.h[4],b)},u.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h,"big"):i.split32(this.h,"big")}},function(e,t,r){"use strict";var i=r(1),f=r(14);function n(){if(!(this instanceof n))return new n;f.call(this),this.h=[3238371032,914150663,812702999,4144912697,4290775857,1750603025,1694076839,3204075428]}i.inherits(n,f),e.exports=n,n.blockSize=512,n.outSize=224,n.hmacStrength=192,n.padLength=64,n.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h.slice(0,7),"big"):i.split32(this.h.slice(0,7),"big")}},function(e,t,r){"use strict";var i=r(1),f=r(15);function n(){if(!(this instanceof n))return new n;f.call(this),this.h=[3418070365,3238371032,1654270250,914150663,2438529370,812702999,355462360,4144912697,1731405415,4290775857,2394180231,1750603025,3675008525,1694076839,1203062813,3204075428]}i.inherits(n,f),e.exports=n,n.blockSize=1024,n.outSize=384,n.hmacStrength=192,n.padLength=128,n.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h.slice(0,12),"big"):i.split32(this.h.slice(0,12),"big")}},function(e,t,r){"use strict";var i=r(1),f=r(5),n=i.rotl32,d=i.sum32,a=i.sum32_3,c=i.sum32_4,s=f.BlockHash;function o(){if(!(this instanceof o))return new o;s.call(this),this.h=[1732584193,4023233417,2562383102,271733878,3285377520],this.endian="little"}function h(e,t,r,i){return e<=15?t^r^i:e<=31?t&r|~t&i:e<=47?(t|~r)^i:e<=63?t&i|r&~i:t^(r|~i)}function u(e){return e<=15?0:e<=31?1518500249:e<=47?1859775393:e<=63?2400959708:2840853838}function b(e){return e<=15?1352829926:e<=31?1548603684:e<=47?1836072691:e<=63?2053994217:0}i.inherits(o,s),t.ripemd160=o,o.blockSize=512,o.outSize=160,o.hmacStrength=192,o.padLength=64,o.prototype._update=function(e,t){for(var r=this.h[0],i=this.h[1],f=this.h[2],s=this.h[3],o=this.h[4],y=r,g=i,w=f,M=s,S=o,A=0;A<80;A++){var _=d(n(c(r,h(A,i,f,s),e[l[A]+t],u(A)),m[A]),o);r=o,o=s,s=n(f,10),f=i,i=_,_=d(n(c(y,h(79-A,g,w,M),e[p[A]+t],b(A)),v[A]),S),y=S,S=M,M=n(w,10),w=g,g=_}_=a(this.h[1],f,M),this.h[1]=a(this.h[2],s,S),this.h[2]=a(this.h[3],o,y),this.h[3]=a(this.h[4],r,g),this.h[4]=a(this.h[0],i,w),this.h[0]=_},o.prototype._digest=function(e){return"hex"===e?i.toHex32(this.h,"little"):i.split32(this.h,"little")};var l=[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],m=[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],v=[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]},function(e,t,r){"use strict";var i=r(1),f=r(3);function n(e,t,r){if(!(this instanceof n))return new n(e,t,r);this.Hash=e,this.blockSize=e.blockSize/8,this.outSize=e.outSize/8,this.inner=null,this.outer=null,this._init(i.toArray(t,r))}e.exports=n,n.prototype._init=function(e){e.length>this.blockSize&&(e=(new this.Hash).update(e).digest()),f(e.length<=this.blockSize);for(var t=e.length;t<this.blockSize;t++)e.push(0);for(t=0;t<e.length;t++)e[t]^=54;for(this.inner=(new this.Hash).update(e),t=0;t<e.length;t++)e[t]^=106;this.outer=(new this.Hash).update(e)},n.prototype.update=function(e,t){return this.inner.update(e,t),this},n.prototype.digest=function(e){return this.outer.update(this.inner.digest()),this.outer.digest(e)}},function(e,t){e.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"]]}}},function(e,t,r){"use strict";var i=r(2),f=r(35),n=r(0),d=r(8),a=r(11),c=n.assert,s=r(36),o=r(37);function h(e){if(!(this instanceof h))return new h(e);"string"==typeof e&&(c(d.hasOwnProperty(e),"Unknown curve "+e),e=d[e]),e instanceof d.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}e.exports=h,h.prototype.keyPair=function(e){return new s(this,e)},h.prototype.keyFromPrivate=function(e,t){return s.fromPrivate(this,e,t)},h.prototype.keyFromPublic=function(e,t){return s.fromPublic(this,e,t)},h.prototype.genKeyPair=function(e){e||(e={});for(var t=new f({hash:this.hash,pers:e.pers,persEnc:e.persEnc||"utf8",entropy:e.entropy||a(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||"utf8",nonce:this.n.toArray()}),r=this.n.byteLength(),n=this.n.sub(new i(2));;){var d=new i(t.generate(r));if(!(d.cmp(n)>0))return d.iaddn(1),this.keyFromPrivate(d)}},h.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},h.prototype.sign=function(e,t,r,n){"object"==typeof r&&(n=r,r=null),n||(n={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new i(e,16));for(var d=this.n.byteLength(),a=t.getPrivate().toArray("be",d),c=e.toArray("be",d),s=new f({hash:this.hash,entropy:a,nonce:c,pers:n.pers,persEnc:n.persEnc||"utf8"}),h=this.n.sub(new i(1)),u=0;;u++){var b=n.k?n.k(u):new i(s.generate(this.n.byteLength()));if(!((b=this._truncateToN(b,!0)).cmpn(1)<=0||b.cmp(h)>=0)){var l=this.g.mul(b);if(!l.isInfinity()){var p=l.getX(),m=p.umod(this.n);if(0!==m.cmpn(0)){var v=b.invm(this.n).mul(m.mul(t.getPrivate()).iadd(e));if(0!==(v=v.umod(this.n)).cmpn(0)){var y=(l.getY().isOdd()?1:0)|(0!==p.cmp(m)?2:0);return n.canonical&&v.cmp(this.nh)>0&&(v=this.n.sub(v),y^=1),new o({r:m,s:v,recoveryParam:y})}}}}}},h.prototype.verify=function(e,t,r,f){e=this._truncateToN(new i(e,16)),r=this.keyFromPublic(r,f);var n=(t=new o(t,"hex")).r,d=t.s;if(n.cmpn(1)<0||n.cmp(this.n)>=0)return!1;if(d.cmpn(1)<0||d.cmp(this.n)>=0)return!1;var a,c=d.invm(this.n),s=c.mul(e).umod(this.n),h=c.mul(n).umod(this.n);return this.curve._maxwellTrick?!(a=this.g.jmulAdd(s,r.getPublic(),h)).isInfinity()&&a.eqXToP(n):!(a=this.g.mulAdd(s,r.getPublic(),h)).isInfinity()&&0===a.getX().umod(this.n).cmp(n)},h.prototype.recoverPubKey=function(e,t,r,f){c((3&r)===r,"The recovery param is more than two bits"),t=new o(t,f);var n=this.n,d=new i(e),a=t.r,s=t.s,h=1&r,u=r>>1;if(a.cmp(this.curve.p.umod(this.curve.n))>=0&&u)throw new Error("Unable to find sencond key candinate");a=u?this.curve.pointFromX(a.add(this.curve.n),h):this.curve.pointFromX(a,h);var b=t.r.invm(n),l=n.sub(d).mul(b).umod(n),p=s.mul(b).umod(n);return this.g.mulAdd(l,a,p)},h.prototype.getKeyRecoveryParam=function(e,t,r,i){if(null!==(t=new o(t,i)).recoveryParam)return t.recoveryParam;for(var f=0;f<4;f++){var n;try{n=this.recoverPubKey(e,t,f)}catch(e){continue}if(n.eq(r))return f}throw new Error("Unable to find valid recovery factor")}},function(e,t,r){"use strict";var i=r(9),f=r(10),n=r(3);function d(e){if(!(this instanceof d))return new d(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=f.toArray(e.entropy,e.entropyEnc||"hex"),r=f.toArray(e.nonce,e.nonceEnc||"hex"),i=f.toArray(e.pers,e.persEnc||"hex");n(t.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._init(t,r,i)}e.exports=d,d.prototype._init=function(e,t,r){var i=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var f=0;f<this.V.length;f++)this.K[f]=0,this.V[f]=1;this._update(i),this._reseed=1,this.reseedInterval=281474976710656},d.prototype._hmac=function(){return new i.hmac(this.hash,this.K)},d.prototype._update=function(e){var t=this._hmac().update(this.V).update([0]);e&&(t=t.update(e)),this.K=t.digest(),this.V=this._hmac().update(this.V).digest(),e&&(this.K=this._hmac().update(this.V).update([1]).update(e).digest(),this.V=this._hmac().update(this.V).digest())},d.prototype.reseed=function(e,t,r,i){"string"!=typeof t&&(i=r,r=t,t=null),e=f.toArray(e,t),r=f.toArray(r,i),n(e.length>=this.minEntropy/8,"Not enough entropy. Minimum is: "+this.minEntropy+" bits"),this._update(e.concat(r||[])),this._reseed=1},d.prototype.generate=function(e,t,r,i){if(this._reseed>this.reseedInterval)throw new Error("Reseed is required");"string"!=typeof t&&(i=r,r=t,t=null),r&&(r=f.toArray(r,i||"hex"),this._update(r));for(var n=[];n.length<e;)this.V=this._hmac().update(this.V).digest(),n=n.concat(this.V);var d=n.slice(0,e);return this._update(r),this._reseed++,f.encode(d,t)}},function(e,t,r){"use strict";var i=r(2),f=r(0).assert;function n(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}e.exports=n,n.fromPublic=function(e,t,r){return t instanceof n?t:new n(e,{pub:t,pubEnc:r})},n.fromPrivate=function(e,t,r){return t instanceof n?t:new n(e,{priv:t,privEnc:r})},n.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:"Invalid public key"}:e.validate()?e.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"}},n.prototype.getPublic=function(e,t){return"string"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},n.prototype.getPrivate=function(e){return"hex"===e?this.priv.toString(16,2):this.priv},n.prototype._importPrivate=function(e,t){this.priv=new i(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},n.prototype._importPublic=function(e,t){if(e.x||e.y)return"mont"===this.ec.curve.type?f(e.x,"Need x coordinate"):"short"!==this.ec.curve.type&&"edwards"!==this.ec.curve.type||f(e.x&&e.y,"Need both x and y coordinate"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},n.prototype.derive=function(e){return e.mul(this.priv).getX()},n.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},n.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},n.prototype.inspect=function(){return"<Key priv: "+(this.priv&&this.priv.toString(16,2))+" pub: "+(this.pub&&this.pub.inspect())+" >"}},function(e,t,r){"use strict";var i=r(2),f=r(0),n=f.assert;function d(e,t){if(e instanceof d)return e;this._importDER(e,t)||(n(e.r&&e.s,"Signature without r or s"),this.r=new i(e.r,16),this.s=new i(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function a(){this.place=0}function c(e,t){var r=e[t.place++];if(!(128&r))return r;var i=15&r;if(0===i||i>4)return!1;for(var f=0,n=0,d=t.place;n<i;n++,d++)f<<=8,f|=e[d],f>>>=0;return!(f<=127)&&(t.place=d,f)}function s(e){for(var t=0,r=e.length-1;!e[t]&&!(128&e[t+1])&&t<r;)t++;return 0===t?e:e.slice(t)}function o(e,t){if(t<128)e.push(t);else{var r=1+(Math.log(t)/Math.LN2>>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}e.exports=d,d.prototype._importDER=function(e,t){e=f.toArray(e,t);var r=new a;if(48!==e[r.place++])return!1;var n=c(e,r);if(!1===n)return!1;if(n+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var d=c(e,r);if(!1===d)return!1;var s=e.slice(r.place,d+r.place);if(r.place+=d,2!==e[r.place++])return!1;var o=c(e,r);if(!1===o)return!1;if(e.length!==o+r.place)return!1;var h=e.slice(r.place,o+r.place);if(0===s[0]){if(!(128&s[1]))return!1;s=s.slice(1)}if(0===h[0]){if(!(128&h[1]))return!1;h=h.slice(1)}return this.r=new i(s),this.s=new i(h),this.recoveryParam=null,!0},d.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=s(t),r=s(r);!(r[0]||128&r[1]);)r=r.slice(1);var i=[2];o(i,t.length),(i=i.concat(t)).push(2),o(i,r.length);var n=i.concat(r),d=[48];return o(d,n.length),d=d.concat(n),f.encode(d,e)}},function(e,t,r){"use strict";var i=r(9),f=r(8),n=r(0),d=n.assert,a=n.parseBytes,c=r(39),s=r(40);function o(e){if(d("ed25519"===e,"only tested with ed25519 so far"),!(this instanceof o))return new o(e);e=f[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=i.sha512}e.exports=o,o.prototype.sign=function(e,t){e=a(e);var r=this.keyFromSecret(t),i=this.hashInt(r.messagePrefix(),e),f=this.g.mul(i),n=this.encodePoint(f),d=this.hashInt(n,r.pubBytes(),e).mul(r.priv()),c=i.add(d).umod(this.curve.n);return this.makeSignature({R:f,S:c,Rencoded:n})},o.prototype.verify=function(e,t,r){e=a(e),t=this.makeSignature(t);var i=this.keyFromPublic(r),f=this.hashInt(t.Rencoded(),i.pubBytes(),e),n=this.g.mul(t.S());return t.R().add(i.pub().mul(f)).eq(n)},o.prototype.hashInt=function(){for(var e=this.hash(),t=0;t<arguments.length;t++)e.update(arguments[t]);return n.intFromLE(e.digest()).umod(this.curve.n)},o.prototype.keyFromPublic=function(e){return c.fromPublic(this,e)},o.prototype.keyFromSecret=function(e){return c.fromSecret(this,e)},o.prototype.makeSignature=function(e){return e instanceof s?e:new s(this,e)},o.prototype.encodePoint=function(e){var t=e.getY().toArray("le",this.encodingLength);return t[this.encodingLength-1]|=e.getX().isOdd()?128:0,t},o.prototype.decodePoint=function(e){var t=(e=n.parseBytes(e)).length-1,r=e.slice(0,t).concat(-129&e[t]),i=0!=(128&e[t]),f=n.intFromLE(r);return this.curve.pointFromY(f,i)},o.prototype.encodeInt=function(e){return e.toArray("le",this.encodingLength)},o.prototype.decodeInt=function(e){return n.intFromLE(e)},o.prototype.isPoint=function(e){return e instanceof this.pointClass}},function(e,t,r){"use strict";var i=r(0),f=i.assert,n=i.parseBytes,d=i.cachedProperty;function a(e,t){this.eddsa=e,this._secret=n(t.secret),e.isPoint(t.pub)?this._pub=t.pub:this._pubBytes=n(t.pub)}a.fromPublic=function(e,t){return t instanceof a?t:new a(e,{pub:t})},a.fromSecret=function(e,t){return t instanceof a?t:new a(e,{secret:t})},a.prototype.secret=function(){return this._secret},d(a,"pubBytes",(function(){return this.eddsa.encodePoint(this.pub())})),d(a,"pub",(function(){return this._pubBytes?this.eddsa.decodePoint(this._pubBytes):this.eddsa.g.mul(this.priv())})),d(a,"privBytes",(function(){var e=this.eddsa,t=this.hash(),r=e.encodingLength-1,i=t.slice(0,e.encodingLength);return i[0]&=248,i[r]&=127,i[r]|=64,i})),d(a,"priv",(function(){return this.eddsa.decodeInt(this.privBytes())})),d(a,"hash",(function(){return this.eddsa.hash().update(this.secret()).digest()})),d(a,"messagePrefix",(function(){return this.hash().slice(this.eddsa.encodingLength)})),a.prototype.sign=function(e){return f(this._secret,"KeyPair can only verify"),this.eddsa.sign(e,this)},a.prototype.verify=function(e,t){return this.eddsa.verify(e,t,this)},a.prototype.getSecret=function(e){return f(this._secret,"KeyPair is public only"),i.encode(this.secret(),e)},a.prototype.getPublic=function(e){return i.encode(this.pubBytes(),e)},e.exports=a},function(e,t,r){"use strict";var i=r(2),f=r(0),n=f.assert,d=f.cachedProperty,a=f.parseBytes;function c(e,t){this.eddsa=e,"object"!=typeof t&&(t=a(t)),Array.isArray(t)&&(t={R:t.slice(0,e.encodingLength),S:t.slice(e.encodingLength)}),n(t.R&&t.S,"Signature without R or S"),e.isPoint(t.R)&&(this._R=t.R),t.S instanceof i&&(this._S=t.S),this._Rencoded=Array.isArray(t.R)?t.R:t.Rencoded,this._Sencoded=Array.isArray(t.S)?t.S:t.Sencoded}d(c,"S",(function(){return this.eddsa.decodeInt(this.Sencoded())})),d(c,"R",(function(){return this.eddsa.decodePoint(this.Rencoded())})),d(c,"Rencoded",(function(){return this.eddsa.encodePoint(this.R())})),d(c,"Sencoded",(function(){return this.eddsa.encodeInt(this.S())})),c.prototype.toBytes=function(){return this.Rencoded().concat(this.Sencoded())},c.prototype.toHex=function(){return f.encode(this.toBytes(),"hex").toUpperCase()},e.exports=c}]);
diff --git a/lib/Bitcoin/Keys.hs b/lib/Bitcoin/Keys.hs
new file mode 100644
--- /dev/null
+++ b/lib/Bitcoin/Keys.hs
@@ -0,0 +1,65 @@
+{-# LANGUAGE CPP #-}
+
+-- | This module exports tools for working with Bitcoin keys.
+module Bitcoin.Keys
+  ( -- * Private
+    I.Prv
+  , I.parsePrv
+  , I.prvRaw
+  , I.prvToPub
+
+   -- * Public
+  , I.Pub
+  , parsePub
+  , I.pubCompressed
+  , I.pubUncompressed
+
+   -- * Tweak
+  , I.Tweak
+  , I.parseTweak
+  , I.pubAddTweak
+  , I.prvAddTweak
+  ) where
+
+import Control.Applicative
+import Control.Monad
+import Data.Bits
+import qualified Data.ByteString as B
+
+#ifdef ghcjs_HOST_OS
+import qualified Bitcoin.Keys.GHCJS as I
+#else
+import qualified Bitcoin.Keys.GHC as I
+#endif
+
+-- | Construct a 'I.Pub' key from either its compressed or uncompressed SEC-encoded
+-- bytes.
+--
+-- * Compressed keys are 33 bytes. The leftmost byte is @0x02@ if the @y@
+-- coordinate is even, or @0x03@ if odd. The remaining 32 bytes
+-- are the big-endian encoded @x@ coordinate.
+--
+-- * Uncompressed keys are 65 bytes. The leftmost byte is @0x04@. The next 32
+-- bytes are the big-endian encoded @x@ cordinate. The next 32 bytes are the
+-- big-endian encoded @y@ coordinate.
+--
+-- Returns 'Nothing' if something is not satisfied.
+parsePub :: B.ByteString -> Maybe I.Pub
+{-# INLINE parsePub #-}
+parsePub b = I.parsePubCompressed b <|> parsePubUncompressed b
+
+-- | Builds a public key from its uncompressed SEC-encoded bytes.
+--
+-- Uncompressed keys are 65 bytes. The leftmost byte is @0x04@. The next 32
+-- bytes are the big-endian encoded @x@ cordinate. The next 32 bytes are the
+-- big-endian encoded @y@ coordinate.
+--
+-- Returns 'Nothing' if something is not satisfied.
+parsePubUncompressed :: B.ByteString -> Maybe I.Pub
+{-# INLINE parsePubUncompressed #-}
+parsePubUncompressed b = do
+  guard (B.length b == 65 && B.index b 0 == 0x04)
+  let w0 = 0x02 + (B.index b 64 .&. 0x01)
+  I.parsePubCompressed (B.cons w0 (B.take 32 (B.drop 1 b)))
+
+
diff --git a/lib/Bitcoin/Keys/GHC.hs b/lib/Bitcoin/Keys/GHC.hs
new file mode 100644
--- /dev/null
+++ b/lib/Bitcoin/Keys/GHC.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+-- | Implementation to be used when compiled with GHC
+module Bitcoin.Keys.GHC
+  ( Prv
+  , parsePrv
+  , prvRaw
+  , prvToPub
+  , prvAddTweak
+
+  , Pub
+  , parsePubCompressed
+  , pubCompressed
+  , pubUncompressed
+  , pubAddTweak
+
+  , Tweak
+  , parseTweak
+  ) where
+
+import Control.Monad
+import qualified Crypto.Secp256k1 as K
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy.Char8 as BL8
+import qualified Data.ByteString.Builder as BB
+
+--------------------------------------------------------------------------------
+
+-- | Private key.
+--
+-- Construct with 'parsePrv'.
+newtype Prv = Prv K.SecKey
+  deriving newtype (Eq)
+
+instance Ord Prv where
+  compare a b = compare (prvRaw a) (prvRaw b)
+  {-# INLINE compare #-}
+
+-- | Big-endian base-16.
+instance Show Prv where
+  showsPrec n p = showParen (n > 10) $
+    showString "Prv " .
+    mappend (BL8.unpack (BB.toLazyByteString (BB.byteStringHex (prvRaw p))))
+
+-- | Obtain the 32 raw bytes inside a 'Prv' (big-endian).
+--
+-- @
+-- 'Just' == 'parsePrv' . 'prvRaw'
+-- @
+prvRaw :: Prv -> B.ByteString
+{-# INLINE prvRaw #-}
+prvRaw (Prv x) = K.getSecKey x
+
+-- | Construct a 'Prv' key from its raw 32 bytes (big-endian).
+--
+-- Returns 'Nothing' if something is not satisfied.
+--
+-- @
+-- 'Just' == 'parsePrv' . 'prvRaw'
+-- @
+parsePrv :: B.ByteString -> Maybe Prv
+{-# INLINE parsePrv #-}
+parsePrv x = do
+  guard (B.length x == 32)
+  Prv <$> K.secKey x
+
+-- | Obtain the 'Pub' key for 'Prv'.
+prvToPub :: Prv -> Pub
+{-# INLINE prvToPub #-}
+prvToPub (Prv x) = Pub (K.derivePubKey x)
+
+-- | Tweak a 'Prv'ate key by adding 'Tweak' times the generator to it.
+--
+-- Returns 'Nothing' if the resulting 'Prv' would be invalid.
+--
+-- @
+-- 'pubAddTweak' t . 'prvToPub' == fmap 'prvToPub' . 'prvAddTweak' t
+-- @
+prvAddTweak :: Tweak -> Prv -> Maybe Prv
+{-# INLINE prvAddTweak #-}
+prvAddTweak (Tweak t) (Prv p) = Prv <$> K.tweakAddSecKey p t
+
+--------------------------------------------------------------------------------
+
+-- | Public key.
+--
+-- Construct with 'Bitcoin.Keys.parsePub'.
+newtype Pub = Pub K.PubKey
+  deriving newtype (Eq)
+
+instance Ord Pub where
+  compare a b = compare (pubCompressed a) (pubCompressed b)
+  {-# INLINE compare #-}
+
+-- | SEC compressed base-16.
+instance Show Pub where
+  showsPrec n p = showParen (n > 10) $
+    showString "Pub " .
+    mappend (BL8.unpack (BB.toLazyByteString (BB.byteStringHex (pubCompressed p))))
+
+-- | Obtain the 33-bytes contatining the SEC compressed 'Pub'lic key.
+--
+-- @
+-- 'Just' == 'Bitcoin.Keys.parsePub' . 'pubCompressed'
+-- @
+pubCompressed :: Pub -> B.ByteString
+{-# INLINE pubCompressed #-}
+pubCompressed (Pub x) = K.exportPubKey True x
+
+-- | Obtain the 65-bytes contatining the SEC uncompressed 'Pub'lic key.
+--
+-- @
+-- 'Just' == 'Bitcoin.Keys.parsePub' . 'pubUncompressed'
+-- @
+pubUncompressed :: Pub -> B.ByteString
+{-# INLINE pubUncompressed #-}
+pubUncompressed (Pub x) = K.exportPubKey False x
+
+-- | Builds a public key from its compressed SEC-encoded bytes.
+--
+-- * Compressed keys are 33 bytes. The leftmost byte is @0x02@ if the @y@
+-- coordinate is even, or @0x03@ if odd. The remaining 32 bytes
+-- are the big-endian encoded @x@ coordinate.
+--
+-- @
+-- 'Just' == 'Bitcoin.Keys.parsePub' . 'pubCompressed'
+-- @
+parsePubCompressed :: B.ByteString -> Maybe Pub
+{-# INLINE parsePubCompressed #-}
+parsePubCompressed x = do
+  guard (B.length x == 33)
+  Pub <$> K.importPubKey x
+
+-- | Tweak a 'Pub'lic key by adding 'Tweak' times the generator to it.
+--
+-- Returns 'Nothing' if the resulting 'Pub' would be invalid.
+--
+-- @
+-- 'pubAddTweak' t . 'prvToPub' == fmap 'prvToPub' . 'prvAddTweak' t
+-- @
+pubAddTweak :: Tweak -> Pub -> Maybe Pub
+{-# INLINE pubAddTweak #-}
+pubAddTweak (Tweak t) (Pub p) = Pub <$> K.tweakAddPubKey p t
+
+--------------------------------------------------------------------------------
+
+-- | A 32-byte number used to modify a 'Pub' or 'Prv' using 'prvAddTweak'
+-- or 'pubAddTweak'.
+newtype Tweak = Tweak K.Tweak
+  deriving newtype (Eq)
+
+instance Ord Tweak where
+  compare (Tweak a) (Tweak b) = compare (K.getTweak a) (K.getTweak b)
+
+-- | Big-endian base-16.
+instance Show Tweak where
+  showsPrec n (Tweak x) = showParen (n > 10) $
+    showString "Tweak " .
+    mappend (BL8.unpack (BB.toLazyByteString (BB.byteStringHex (K.getTweak x))))
+
+-- | Construct a 'Tweak' from its raw 32 bytes (big-endian).
+--
+-- Returns 'Nothing' if something is not satisfied.
+parseTweak :: B.ByteString -> Maybe Tweak
+{-# INLINE parseTweak #-}
+parseTweak x = do
+  guard (B.length x == 32)
+  Tweak <$> K.tweak x
diff --git a/lib/Bitcoin/Keys/GHCJS.hs b/lib/Bitcoin/Keys/GHCJS.hs
new file mode 100644
--- /dev/null
+++ b/lib/Bitcoin/Keys/GHCJS.hs
@@ -0,0 +1,216 @@
+{-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE JavaScriptFFI #-}
+
+-- | Implementation to be used when compiled with GHCJS
+module Bitcoin.Keys.GHCJS
+  ( Prv
+  , parsePrv
+  , prvRaw
+  , prvToPub
+  , prvAddTweak
+
+  , Pub
+  , parsePubCompressed
+  , pubCompressed
+  , pubUncompressed
+  , pubAddTweak
+
+  , Tweak
+  , parseTweak
+  ) where
+
+import Control.Monad
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy.Char8 as BL8
+import qualified Data.ByteString.Builder as BB
+import qualified GHCJS.Buffer as Buf
+import GHCJS.Types (JSVal)
+import GHCJS.Nullable
+import qualified JavaScript.TypedArray.ArrayBuffer as AB
+import qualified JavaScript.TypedArray as TA
+
+--------------------------------------------------------------------------------
+
+-- | Private key.
+--
+-- Construct with 'parsePrv'.
+newtype Prv = Prv B.ByteString
+  deriving newtype (Eq, Ord)
+
+-- | Big-endian base-16.
+instance Show Prv where
+  showsPrec n p = showParen (n > 10) $
+    showString "Prv " .
+    mappend (BL8.unpack (BB.toLazyByteString (BB.byteStringHex (prvRaw p))))
+
+-- | Obtain the 32 raw bytes inside a 'Prv' (big-endian).
+--
+-- @
+-- 'Just' == 'parsePrv' . 'prvRaw'
+-- @
+prvRaw :: Prv -> B.ByteString
+{-# INLINE prvRaw #-}
+prvRaw (Prv x) = x
+
+-- | Construct a 'Prv' key from its raw 32 bytes (big-endian).
+--
+-- Returns 'Nothing' if something is not satisfied.
+--
+-- @
+-- 'Just' == 'parsePrv' . 'prvRaw'
+-- @
+parsePrv :: B.ByteString -> Maybe Prv
+parsePrv b = do
+  guard (B.length b == 32)
+  guard (js_prvVerify (bsToU8A b))
+  pure (Prv b)
+
+foreign import javascript unsafe
+  "h$bitcoin_keys.prvVerify($1)"
+  js_prvVerify :: TA.Uint8Array -> Bool
+
+-- | Obtain the 'Pub' key for 'Prv'.
+prvToPub :: Prv -> Pub
+{-# INLINE prvToPub #-}
+prvToPub = Pub . bsFromU8A . js_prvToPub . bsToU8A . prvRaw
+
+foreign import javascript unsafe "h$bitcoin_keys.prvToPub($1)"
+  js_prvToPub :: TA.Uint8Array -> TA.Uint8Array
+
+-- | Tweak a 'Prv'ate key by adding 'Tweak' times the generator to it.
+--
+-- Returns 'Nothing' if the resulting 'Prv' would be invalid.
+prvAddTweak :: Tweak -> Prv -> Maybe Prv
+{-# INLINE prvAddTweak #-}
+prvAddTweak (Tweak t) (Prv p) = do
+  jsv <- nullableToMaybe (js_prvAddTweak (bsToU8A p) (bsToU8A t))
+  pure $ Prv (bsFromU8A (js_unsafe_JSVal_to_UInt8Array jsv))
+
+foreign import javascript unsafe "h$bitcoin_keys.prvAddTweak($1, $2)"
+  js_prvAddTweak :: TA.Uint8Array  -- ^ Private key.
+                 -> TA.Uint8Array  -- ^ Tweak.
+                           -> Nullable JSVal -- ^ Nullable Uint8Array
+
+--------------------------------------------------------------------------------
+
+-- | Public key.
+--
+-- Construct with 'Bitcoin.Keys.parsePub'.
+newtype Pub = Pub B.ByteString
+  deriving newtype (Eq, Ord)
+
+-- | SEC compressed base-16.
+instance Show Pub where
+  showsPrec n p = showParen (n > 10) $
+    showString "Pub " .
+    mappend (BL8.unpack (BB.toLazyByteString (BB.byteStringHex (pubCompressed p))))
+
+-- | Obtain the 33-bytes contatining the SEC compressed 'Pub'lic key.
+--
+-- @
+-- 'Just' == 'Bitcoin.Keys.parsePub' . 'pubCompressed'
+-- @
+pubCompressed :: Pub -> B.ByteString
+{-# INLINE pubCompressed #-}
+pubCompressed (Pub x) = x
+
+-- | Obtain the 65-bytes contatining the SEC uncompressed 'Pub'lic key.
+--
+-- @
+-- 'Just' == 'Bitcoin.Keys.parsePub' . 'pubUncompressed'
+-- @
+pubUncompressed :: Pub -> B.ByteString
+{-# INLINE pubUncompressed #-}
+pubUncompressed = bsFromU8A . js_pubUncompressed . bsToU8A . pubCompressed
+
+foreign import javascript unsafe "h$bitcoin_keys.pubUncompressed($1)"
+  js_pubUncompressed :: TA.Uint8Array -- ^ Compressed public key.
+                     -> TA.Uint8Array -- ^ Uncompressed public key.
+
+
+-- | Builds a public key from its compressed SEC-encoded bytes.
+--
+-- * Compressed keys are 33 bytes. The leftmost byte is @0x02@ if the @y@
+-- coordinate is even, or @0x03@ if odd. The remaining 32 bytes
+-- are the big-endian encoded @x@ coordinate.
+--
+-- @
+-- 'Just' == 'Bitcoin.Keys.parsePub' . 'pubCompressed'
+-- @
+parsePubCompressed :: B.ByteString -> Maybe Pub
+parsePubCompressed b = do
+  guard (B.length b == 33)
+  guard (js_pubVerify (bsToU8A b))
+  pure (Pub b)
+
+foreign import javascript unsafe "h$bitcoin_keys.pubVerify($1)"
+  js_pubVerify :: TA.Uint8Array   -- ^ Compressed public key.
+               -> Bool            -- ^ Whether the key is valid.
+
+-- | Tweak a 'Pub'lic key by adding 'Tweak' times the generator to it.
+--
+-- Returns 'Nothing' if the resulting 'Pub' would be invalid.
+pubAddTweak :: Tweak -> Pub -> Maybe Pub
+{-# INLINE pubAddTweak #-}
+pubAddTweak (Tweak t) (Pub p) = do
+  jsv <- nullableToMaybe (js_pubAddTweak (bsToU8A p) (bsToU8A t))
+  pure $ Pub (bsFromU8A (js_unsafe_JSVal_to_UInt8Array jsv))
+
+foreign import javascript unsafe "h$bitcoin_keys.pubAddTweak($1, $2)"
+  js_pubAddTweak :: TA.Uint8Array  -- ^ Public key.
+                 -> TA.Uint8Array  -- ^ Tweak.
+                 -> Nullable JSVal -- ^ Nullable Uint8Array
+
+--------------------------------------------------------------------------------
+
+-- | A 32-byte number used to modify a 'Pub' or 'Prv' using 'prvAddTweak'
+-- or 'pubAddTweak'.
+newtype Tweak = Tweak B.ByteString
+  deriving newtype (Eq, Ord)
+
+-- | Big-endian base-16.
+instance Show Tweak where
+  showsPrec n (Tweak b) = showParen (n > 10) $
+    showString "Tweak " .
+    mappend (BL8.unpack (BB.toLazyByteString (BB.byteStringHex b)))
+
+-- | Construct a 'Tweak' from its raw 32 bytes (big-endian).
+--
+-- Returns 'Nothing' if something is not satisfied.
+parseTweak :: B.ByteString -> Maybe Tweak
+parseTweak b = do
+  guard (B.length b == 32)
+  pure $ Tweak b
+
+--------------------------------------------------------------------------------
+
+bsToU8A :: B.ByteString -> TA.Uint8Array
+bsToU8A x
+  | B.length x == 0 = js_emptyUint8Array
+  | otherwise = let (buf, off, len) = Buf.fromByteString x
+                in js_newUint8Array (Buf.getArrayBuffer buf) off len
+
+foreign import javascript unsafe "new Uint8Array($1, $2, $3)"
+  js_newUint8Array :: AB.ArrayBuffer
+                   -> Int  -- ^ Byte offset.
+                   -> Int  -- ^ Byte length.
+                   -> TA.Uint8Array
+
+foreign import javascript unsafe "new Uint8Array(0)"
+  js_emptyUint8Array :: TA.Uint8Array
+
+--------------------------------------------------------------------------------
+
+bsFromU8A :: TA.Uint8Array -> B.ByteString
+bsFromU8A x = Buf.toByteString (TA.byteOffset x)
+                               (Just (TA.byteLength x))
+                               (Buf.createFromArrayBuffer (TA.buffer x))
+
+--------------------------------------------------------------------------------
+
+foreign import javascript unsafe "$r = $1;"
+  js_unsafe_JSVal_to_UInt8Array :: JSVal -> TA.Uint8Array
+
diff --git a/test/Main.hs b/test/Main.hs
new file mode 100644
--- /dev/null
+++ b/test/Main.hs
@@ -0,0 +1,255 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# OPTIONS_GHC -Wno-type-defaults #-}
+
+module Main (main) where
+
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Base16 as B16
+import Data.Maybe
+import Data.Word
+import qualified Test.Tasty as Tasty
+import qualified Test.Tasty.Runners as Tasty
+import Test.Tasty (TestTree, testGroup)
+import Test.Tasty.HUnit (testCase, (@?=), (@=?))
+import Test.Tasty.Hedgehog (testProperty, HedgehogTestLimit(..))
+import Hedgehog (MonadGen, property, forAll, (===))
+import qualified Hedgehog.Gen as Gen
+import qualified Hedgehog.Range as Range
+import qualified System.IO as IO
+
+import qualified Bitcoin.Keys as S
+
+--------------------------------------------------------------------------------
+
+main :: IO ()
+main = do
+  IO.hSetBuffering IO.stdout IO.LineBuffering
+  IO.hSetBuffering IO.stderr IO.LineBuffering
+  Tasty.defaultMainWithIngredients
+    [ Tasty.consoleTestReporter
+    , Tasty.listingTests
+    ] $ Tasty.localOption (HedgehogTestLimit (Just 2000))
+      $ tt
+
+tt :: TestTree
+tt = testGroup "bitcoin-keys"
+  [ testCase "Show Pub" $ do
+      show pub1c @?= "Pub 024ed59d3f6548c41172ec26b9144f547185cb2a9f28fccb6e3ae53dc4f1827154"
+
+  , testCase "Show Prv" $ do
+      show prv1 @?= "Prv 76deed24fcdfb479656af6c5c4ab906090c5ee39da1c1ad1f1ad56dfce378a03"
+
+  , testCase "Show Tweak" $ do
+      show tweak1 @?= "Tweak 0ef561fb5f4e9e2319a5b75ed3be3c895e6ec272c0b5185dc414fb7e47c3a770"
+
+  , testCase "parsePub: uncompressed vs compressed (even y)" $ do
+      pub1c @=? pub1u
+      S.pubCompressed pub1c @?= pub1c_raw
+      S.pubCompressed pub1u @?= pub1c_raw
+      S.pubUncompressed pub1c @?= pub1u_raw
+      S.pubUncompressed pub1u @?= pub1u_raw
+
+  , testCase "parsePub: uncompressed vs compressed (odd y)" $ do
+      pub2c @=? pub2u
+      S.pubCompressed pub2c @?= pub2c_raw
+      S.pubCompressed pub2u @?= pub2c_raw
+      S.pubUncompressed pub2c @?= pub2u_raw
+      S.pubUncompressed pub2u @?= pub2u_raw
+
+  , testCase "Ord Pub" $ do
+      compare pub1c pub2c @?= LT
+      compare pub2c pub1c @?= GT
+      compare pub1c pub1c @?= EQ
+      compare pub2c pub2c @?= EQ
+
+  , testCase "Ord Prv" $ do
+      compare prv1 prv2 @?= LT
+      compare prv2 prv1 @?= GT
+      compare prv1 prv1 @?= EQ
+      compare prv2 prv2 @?= EQ
+
+  , testCase "prvToPub prv1" $ do
+      S.prvToPub prv1 @?= pub1c
+
+  , testCase "prvToPub prv2" $ do
+      S.prvToPub prv2 @?= pub2c
+
+  , testProperty "parsePrv . prvRaw" $ property $ do
+      prv <- forAll genPrv
+      Just prv === S.parsePrv (S.prvRaw prv)
+
+  , testProperty "parsePub . pubCompressed" $ property $ do
+      pub <- forAll genPub
+      Just pub === S.parsePub (S.pubCompressed pub)
+
+  , testProperty "parsePub . pubUncompressed" $ property $ do
+      pub <- forAll genPub
+      Just pub === S.parsePub (S.pubUncompressed pub)
+
+  , testProperty "parsePrv: invalid" $ property $ do
+      raw <- forAll $ Gen.bytes (Range.constant 0 200)
+      case B.length raw of
+         32 -> pure ()
+         _  -> Nothing === S.parsePrv raw
+
+  , testProperty "parsePub: invalid" $ property $ do
+      raw <- forAll $ Gen.bytes (Range.constant 0 200)
+      case B.length raw of
+         33 | B.head raw `elem` [0x02, 0x03] -> pure ()
+         65 | B.head raw == 0x04 -> pure ()
+         _  -> Nothing === S.parsePub raw
+
+  , testProperty "parseTweak" $ property $ do
+      raw <- forAll $ Gen.bytes (Range.constant 0 200)
+      let yt = S.parsePrv raw
+      case B.length raw of
+         32 -> True === isJust yt
+         _  -> Nothing === yt
+
+  , testProperty "addPrvTweak vs addPubTweak (prop)" $ property $ do
+      tweak <- forAll genTweak
+      prv <- forAll genPrv
+      let pub = S.prvToPub prv
+          yprv' = S.prvAddTweak tweak prv
+          ypub' = S.pubAddTweak tweak pub
+      ypub' === fmap S.prvToPub yprv'
+
+  , testCase "addPrvTweak vs addPubTweak (prv1)" $ do
+       let Just pub' = S.prvToPub <$> S.prvAddTweak tweak1 prv1
+       Just pub' @?= S.pubAddTweak tweak1 pub1c
+
+  , testCase "addPrvTweak vs addPubTweak (prv2)" $ do
+       let Just pub' = S.prvToPub <$> S.prvAddTweak tweak1 prv2
+       Just pub' @?= S.pubAddTweak tweak1 pub2c
+
+  , testCase "addPrvTweak prv1" $ do
+      let Just x = S.parsePrv $ fromBase16
+            "85d44f205c2e529c7f10ae249869cce9ef34b0ac9ad1332fb5c2525e15fb3173"
+      S.prvAddTweak tweak1 prv1 @?= Just x
+
+  , testCase "addPrvTweak prv2" $ do
+      let Just x = S.parsePrv $ fromBase16
+            "cb186f2bc6a2ace5580fb1fda1861ea2757435aa1e66a812d7decb7d368eddee"
+      S.prvAddTweak tweak1 prv2 @?= Just x
+
+  , testCase "addPubTweak pub1" $ do
+      let Just x = S.parsePub $ fromBase16
+            "038089e37ec58d5ace95bc84ee11d6c366d1b464ba703c2f8ec189bc2bce76f1f3"
+      S.pubAddTweak tweak1 pub1c @?= Just x
+
+  , testCase "addPubTweak pub2" $ do
+      let Just x = S.parsePub $ fromBase16
+            "025c8fd62030ba8ee8ede5bf053613a31a4850c9489eb62bec7cfb3efaa1e07b43"
+      S.pubAddTweak tweak1 pub2c @?= Just x
+  ]
+
+--------------------------------------------------------------------------------
+
+genTweak :: MonadGen m => m S.Tweak
+genTweak = do
+  b <- Gen.bytes (Range.singleton 32)
+  let Just k = S.parseTweak b
+  pure k
+
+genPrv :: MonadGen m => m S.Prv
+genPrv = do
+  b <- Gen.bytes (Range.singleton 32)
+  let Just k = S.parsePrv b
+  pure k
+
+genPub :: MonadGen m => m S.Pub
+genPub = go 10000 where
+  go 0 = error "genPub: too many attempts"
+  go n = do
+    h <- Gen.element [2, 3 :: Word8]
+    b <- Gen.bytes (Range.singleton 32)
+    case S.parsePub (B.cons h b) of
+      Just k -> pure k
+      Nothing -> go (n - 1)
+
+--------------------------------------------------------------------------------
+-- BIP39 mnemonic: abandon abandon arm
+--
+-- BIP39 seed: 2f7b8b6eeeb7201d88ed45dcd4706ccd76e5feb61f1961990869581781f8944ae2bebff36156c6965054add29f2cf9ee8b7b488179bfba24773ce2b06ec0ce04
+--
+-- BIP32 Derivation path: m/44'/0'/0'/0/0
+--
+-- Private key WIF: L1CnCq2yTvfzngQTF4Fnh5daYUwAuysrqU5dNwZFcv33Cwu4Gf2F
+
+prv1 :: S.Prv
+prv1 = maybe (error "prv1") id (S.parsePrv prv1_raw)
+
+prv1_raw :: B.ByteString
+prv1_raw = fromBase16
+  "76deed24fcdfb479656af6c5c4ab906090c5ee39da1c1ad1f1ad56dfce378a03"
+
+-- | Compressed version of `pub1u`
+pub1c :: S.Pub
+pub1c = maybe (error "pub1c") id (S.parsePub pub1c_raw)
+
+pub1c_raw :: B.ByteString
+pub1c_raw = fromBase16
+  "024ed59d3f6548c41172ec26b9144f547185cb2a9f28fccb6e3ae53dc4f1827154"
+
+-- | Uncompressed version of `pub1c`
+pub1u :: S.Pub
+pub1u = maybe (error "pub1u") id (S.parsePub pub1u_raw)
+
+pub1u_raw :: B.ByteString
+pub1u_raw = fromBase16
+  "044ed59d3f6548c41172ec26b9144f547185cb2a9f28fccb6e3ae53dc4f1827154\
+    \ba3a12d8b383bfff1dacd6930285f4a51a01ee64e102652d5bc137c49b97815e"
+
+--------------------------------------------------------------------------------
+-- BIP39 mnemonic: abandon abandon arm
+--
+-- BIP39 seed: 2f7b8b6eeeb7201d88ed45dcd4706ccd76e5feb61f1961990869581781f8944ae2bebff36156c6965054add29f2cf9ee8b7b488179bfba24773ce2b06ec0ce04
+--
+-- BIP32 Derivation path: m/84'/0'/0'/0/0
+--
+-- Private key WIF: L3XRaAfqnZLCcUpcCi4g1GqMLTKvr9nbvCYBmrs1TAjx4acpZ2eY
+
+prv2 :: S.Prv
+prv2 = maybe (error "prv2") id (S.parsePrv prv2_raw)
+
+prv2_raw :: B.ByteString
+prv2_raw = fromBase16
+  "bc230d3067540ec23e69fa9ecdc7e219170573375db18fb513c9cffeeecb367e"
+
+-- | Compressed version of `pub2u`
+pub2c :: S.Pub
+pub2c = maybe (error "pub2c") id (S.parsePub pub2c_raw)
+
+pub2c_raw :: B.ByteString
+pub2c_raw = fromBase16
+  "0315bd146d8b45383ad431a8204717dc9f46a7a46c1f44eeaab02d49f4511ccff0"
+
+-- | Uncompressed version of `pub2c`
+pub2u :: S.Pub
+pub2u = maybe (error "pub2u") id (S.parsePub pub2u_raw)
+
+pub2u_raw :: B.ByteString
+pub2u_raw = fromBase16
+  "0415bd146d8b45383ad431a8204717dc9f46a7a46c1f44eeaab02d49f4511ccff0\
+    \7d7817de34c0a281b45691eec966e95d936554b2320462214cd2a17aebcf460f"
+
+--------------------------------------------------------------------------------
+-- Randomly generated
+
+tweak1 :: S.Tweak
+tweak1 = maybe (error "tweak1") id (S.parseTweak tweak1_raw)
+
+tweak1_raw :: B.ByteString
+tweak1_raw = fromBase16
+  "0ef561fb5f4e9e2319a5b75ed3be3c895e6ec272c0b5185dc414fb7e47c3a770"
+
+--------------------------------------------------------------------------------
+
+fromBase16 :: B.ByteString -> B.ByteString
+fromBase16 a = case B16.decode a of
+  (b, "") -> b
+  _ -> error ("Invalid base16 string: " <> show a)
+
