diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,75 @@
 # Change log for [raaz].
 
+## [0.3.0] - May 20, 2021
+
+  This is a major rewrite of the raaz library with significant change in the
+  API and internals.
+
+* Platform requirements
+
+  - Cabal >= 3.0.0.0
+  - GHC   >= 8.4
+
+* User facing interface
+
+  - Top level `Raaz` module centred around cryptographic operation
+    instead of specific primitives. This release supports the
+    following operations
+
+	- message digest provided via Blake2b
+	- message authentication provided via Blake2b
+	- authenticated encryption via XChaCha20Poly1305
+
+  - Explicit primitive based interface meant only for interworking
+    with other library.
+
+  - Dropped support for SHA1, SHA224, SHA384, HMAC, and AES-CBC,
+	mainly to concentrate efforts and reach stable release soon.
+
+  - Pluggable interface for primitive implementations and entropy
+    source (recommended only for advanced users)
+
+* Internal changes.
+
+  - Use libverse for the low level FFI implementations. From now on
+    newer primitives will be coded up in verse instead of hand written
+    C/assembly. (See https://github.com/raaz-crypto/libverse/>)
+
+  - Backpack based modules and signatures instead of classes for
+    primitive implementation. Simplifies the library and allows easy
+    plugging in of custom implementations.
+
+* CSPRG and Entropy
+
+  - Entropy on linux: uses getrandom by default with flag to fall back
+	to `/dev/urandom`.
+
+  - The raaz command now exposes the sub-command entropy (just like
+	rand) mainly for system entropy quality checking.
+
+  - A host-endian variant of chacha20 keystream for csprg.
+
+  - Backpack based pluggable entropy source (recommended only for
+	advanced users).
+
+* Type level improvements.
+
+  - Using Data.Proxy.Proxy to get rid of some uses of undefined.
+
+  - Primitives block sizes to type level.
+
+  - Aligned pointer with alignment at type level.
+
+* Other changes.
+
+  - Cross testing implementations with the monocypher library
+
+  - Licensing changed to Apache-2.0 OR BSD-3-Clause dual licensing.
+
 ## [0.2.3] - 25 April, 2021
 
 This is a minor release just update package dependencies.
 
-* Get raaz to work with ghc-9.0
 
 ## [0.2.2] - 13 December, 2020
 
@@ -87,5 +152,5 @@
 [0.2.0]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.2.0>
 [0.2.1]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.2.1>
 [0.2.2]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.2.2>
-[0.2.3]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.2.3>
+[0.3.0]: <http://github.com/raaz-crypto/raaz/releases/tag/v0.3.0>
 [raaz]:  <http://github.com/raaz-crypto/raaz/>
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
--- a/LICENSE
+++ /dev/null
@@ -1,30 +0,0 @@
-Copyright (c) 2012, Piyush P Kurur
-
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-
-    * Neither the name of Piyush P Kurur nor the names of other
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/LICENSE-APACHE-2.0 b/LICENSE-APACHE-2.0
new file mode 100644
--- /dev/null
+++ b/LICENSE-APACHE-2.0
@@ -0,0 +1,202 @@
+
+                                 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/LICENSE-BSD3 b/LICENSE-BSD3
new file mode 100644
--- /dev/null
+++ b/LICENSE-BSD3
@@ -0,0 +1,30 @@
+Copyright (c) 2012, Piyush P Kurur
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Piyush P Kurur nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,63 +1,85 @@
 Raaz: A secure cryptographic library
-------------------------------------
+====================================
 
+[![Apache-2.0 OR BSD-3-Clause][shields-license]](#legal)
 [![][ci-build]][github-actions]
 [![][ci-checks]][github-actions]
-[![Build Windows][appveyor-status]][appveyor-raaz]
 [![Hackage][hackage-badge]][hackage]
 [![Hackage Dependencies][hackage-deps-badge]][hackage-deps]
 
+Raaz is a cryptographic library in Haskell that provide a high level
+and safe access to a lot of cryptographic operations. The library can
+be used for standalone cryptographic applications as well as for
+implementing other network protocols. Some of the features that are
+unique to raaz are the following
 
-This is the repository of `raaz`, a Haskell library that implements
-some standard cryptographic primitives. This library is the basis on
-which we plan to build a cryptographic framework in Haskell. For
-example, there are plans to implement some common cryptographic
-protocols like `ssh`. Thus applications that require cryptographic
-security, in particular secure networking applications can be built
-out of this.
+1. Pervasive use of types for better safety.
+2. Default choice of primitives and implementations are safe.
+3. Mechanism to have multiple implementations for any given
+   cryptographic primitives. An advanced user who has an in-depth
+   knowledge of the platform should be able to plugin the desired
+   implementation.
+4. Strong emphasis on API design with through documentation.
 
-Raaz is also an attempt to provide better security guarantees by
-making use of Haskell's strong typing. Besides, we put a lot of
-emphasis on better API design and good documentation which, we
-believe, makes the usage of the library secure.
+Building
+--------
 
-The word `Raaz` (&#x0930;&#x093E;&#x095B;) stands for secret in Hindi.
+The recommended way to install raaz is through `cabal-install` version
+3.0 or above. We also need a version of GHC that supports backpack
+(for details on which version of GHC is supported, refer to our
+[CI-builds][github-actions]).
 
-Hacking and Discussion
-----------------------
+    cabal build
+	cabal test
+	cabal install
 
-* For hacking see our [github repository][repo].
+Online documentation
+--------------------
 
-* For discussion see our [google groups][emailgroups] mailing list.
+- [Latest release][doc-latest]
+- [Release candidate][doc-candidate]
 
-* Hangout on irc.freenode.net (channel: #haskell-raaz).
+About the name
+--------------
 
-For details please refer to [our wiki][wiki].
+The word `Raaz` (&#x0930;&#x093E;&#x095B;) stands for secret in Hindi.
 
-## Releasing and reviewing.
 
-The repository also contains the file Releasing.md which contains
-checklist for releasing a new version of the library. Any crypto
-library should undergo through review by multiple people. In the file
-Reviewing.md, we collect some common pitfalls to look for while
-reviewing the code. It is good to actively look for some of the
-problems suggested there but of course one should also look for other
-problems.
+Legal
+-----
 
+Copyright 2012 Piyush P Kurur
 
+The library is licensed under
 
+* Apache License, Version 2.0
+  <http://www.apache.org/licenses/LICENSE-2.0>
+* BSD 3-Clause license
+  <https://opensource.org/licenses/BSD-3-Clause>
 
+You may not use this software except in compliance with one of the
+above Licenses (*at your option*).
+
+SPDX-License-Identifier: (Apache-2.0 OR  BSD-3-Clause)
+
+Unless required by applicable law or agreed to in writing, software
+distributed under these Licenses is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied. For the exact terms and conditions see the accompanying
+LICENSE file.
+
+
 [wiki]: <https://github.com/raaz-crypto/raaz/wiki> "Raaz Wiki"
 [repo]: <https://github.com/raaz-crypto/raaz> "Raaz on github"
-
+[blake2]: <https://blake2.net/> "Blake2 hash function"
 [emailgroups]: <https://groups.google.com/forum/#!forum/hraaz> "Raaz on Google groups"
-
 [hackage]:       <https://hackage.haskell.org/package/raaz>
 [hackage-badge]: <https://img.shields.io/hackage/v/raaz.svg>
 [hackage-deps-badge]: <https://img.shields.io/hackage-deps/v/raaz.svg>
-[hackage-deps]: <http://packdeps.haskellers.com/feed?needle=raaz>
-[appveyor-status]: <https://ci.appveyor.com/api/projects/status/github/raaz-crypto/raaz?branch=master&svg=true>
-[appveyor-raaz]: <https://ci.appveyor.com/project/raaz-crypto/raaz>
+[hackage-deps]: <https://packdeps.haskellers.com/feed?needle=raaz>
+[shields-license]: <https://img.shields.io/badge/License-Apache--2.0%20OR%20BSD--3--Clause-informational.svg>
 [ci-build]: <https://github.com/raaz-crypto/raaz/workflows/Build/badge.svg> "Building source"
 [ci-checks]: <https://github.com/raaz-crypto/raaz/workflows/Checks/badge.svg> "Source code checks"
 [github-actions]: <https://github.com/raaz-crypto/raaz/actions> "Github actions"
+[doc-latest]: <https://hackage.haskell.org/package/raaz>
+[doc-candidate]: <https://hackage.haskell.org/package/raaz-0.3.0/candidate>
diff --git a/Raaz.hs b/Raaz.hs
deleted file mode 100644
--- a/Raaz.hs
+++ /dev/null
@@ -1,22 +0,0 @@
--- | This is the top-level module for the Raaz cryptographic library.
--- By importing this module you get a rather high-level access to the
--- primitives provided by the library.
-module Raaz
-       ( module Raaz.Cipher
-       , module Raaz.Core
-       , module Raaz.Hash
-       , module Raaz.Random
-       , version
-       ) where
-
-import           Data.Version  (Version)
-import qualified Paths_raaz as P
-
-import           Raaz.Core
-import           Raaz.Hash
-import           Raaz.Cipher
-import           Raaz.Random
-
--- | Raaz library version number.
-version :: Version
-version = P.version
diff --git a/Raaz/Cipher.hs b/Raaz/Cipher.hs
deleted file mode 100644
--- a/Raaz/Cipher.hs
+++ /dev/null
@@ -1,33 +0,0 @@
--- | This module exposes all the ciphers provided by raaz. The
--- interface here is pretty low level and it is usually the case that
--- you would not need to work at this level of detail.
-module Raaz.Cipher
-       ( -- * Ciphers
-         -- $cipherdoc$
-         StreamCipher
-       , transform, chacha20
-       , Cipher
-       , aes128cbc, aes192cbc, aes256cbc
-       ) where
-
-
-import Raaz.Cipher.AES      ( aes128cbc, aes192cbc, aes256cbc)
-import Raaz.Cipher.ChaCha20
-import Raaz.Cipher.Internal (transform, Cipher, StreamCipher)
-
--- $cipherdoc$
---
--- The raaz library exposes symmetric key encryption using instances
--- of the class `Cipher`. For a cipher @c@, the type family @`Key` c@
--- gives the type of its key. As of now, we only support the safe
--- usage of stream ciphers. Encryption and Decryption are the same for
--- stream ciphers and we call this combinator `transform`. Block
--- ciphers do not have a natural way to handle streams that are of
--- size less than their block size. A future release will handle these
--- issues.
---
--- If you are thinking of encryption using private keys consider
--- encrypted-authenticated modes. Currently we do not have support for
--- this either but hopefully this will also be fixed soon.
---
--- TODO: Fix the above documentation when it is done.
diff --git a/Raaz/Cipher/AES.hs b/Raaz/Cipher/AES.hs
deleted file mode 100644
--- a/Raaz/Cipher/AES.hs
+++ /dev/null
@@ -1,12 +0,0 @@
--- | The AES block cipher.
-module Raaz.Cipher.AES
-       ( AES, KEY128, KEY192, KEY256, IV
-       -- * Some AES cipher modes.
-       , aes128cbc, aes192cbc, aes256cbc
-       , aes128ctr
-       ) where
-
-import Raaz.Cipher.AES.Internal
-import Raaz.Cipher.AES.Recommendation()
-
-{-# ANN module "HLint: ignore Use import/export shortcut" #-}
diff --git a/Raaz/Cipher/AES/CBC/Implementation/CPortable.hs b/Raaz/Cipher/AES/CBC/Implementation/CPortable.hs
deleted file mode 100644
--- a/Raaz/Cipher/AES/CBC/Implementation/CPortable.hs
+++ /dev/null
@@ -1,196 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface         #-}
-{-# LANGUAGE DataKinds                        #-}
-{-# LANGUAGE MultiParamTypeClasses            #-}
-{-# LANGUAGE FlexibleInstances                #-}
-
--- | Portable C implementation of AES ciphers.
-module Raaz.Cipher.AES.CBC.Implementation.CPortable
-       ( aes128cbcI, aes192cbcI, aes256cbcI
-       ) where
-
-import Control.Applicative
-import Control.Monad.IO.Class   ( liftIO )
-import Foreign.Ptr              ( Ptr    )
-import Prelude
-
-import Raaz.Core
-import Raaz.Cipher.Internal
-import Raaz.Cipher.AES.Internal
-
-------------- Memory for 128-bit cbc --------------
-
--- | Memory for aes-128-cbc
-data M128 = M128 { m128ekey :: MemoryCell EKEY128
-                 , m128iv   :: MemoryCell IV
-                 }
-
-instance Memory M128  where
-  memoryAlloc     = M128 <$> memoryAlloc <*> memoryAlloc
-  unsafeToPointer = unsafeToPointer . m128ekey
-
-instance Initialisable M128 (KEY128, IV) where
-  initialise (k,iv) = do
-    onSubMemory m128ekey $ do initialise k
-                              withCellPointer $ c_transpose 11
-    onSubMemory m128iv   $ do initialise iv
-                              withCellPointer $ c_transpose 1
-
-------------- Memory for 192-bit cbc --------------
-
--- | Memory for aes-192-cbc
-data M192 = M192 { m192ekey :: MemoryCell EKEY192
-                 , m192iv   :: MemoryCell IV
-                 }
-
-instance Memory M192  where
-  memoryAlloc     = M192 <$> memoryAlloc <*> memoryAlloc
-  unsafeToPointer = unsafeToPointer . m192ekey
-
-instance Initialisable M192 (KEY192, IV) where
-  initialise (k,iv) = do
-    onSubMemory m192ekey $ do initialise k
-                              withCellPointer $ c_transpose 13
-    onSubMemory m192iv   $ do initialise iv
-                              withCellPointer $ c_transpose 1
-
-
-------------- Memory for 256-bit cbc --------------
-
--- | Memory for aes-256-cbc
-data M256 = M256 { m256ekey :: MemoryCell EKEY256
-                 , m256iv   :: MemoryCell IV
-                 }
-
-instance Memory M256  where
-  memoryAlloc     = M256 <$> memoryAlloc <*> memoryAlloc
-  unsafeToPointer = unsafeToPointer . m256ekey
-
-instance Initialisable M256 (KEY256, IV) where
-  initialise (k,iv) = do
-    onSubMemory m256ekey $ do initialise k
-                              withCellPointer $ c_transpose 15
-    onSubMemory m256iv   $ do initialise iv
-                              withCellPointer $ c_transpose 1
-
-------------------- 128-bit CBC Implementation ----------------
-
--- | Implementation of 128-bit AES in CBC mode using Portable C.
-aes128cbcI :: Implementation (AES 128 'CBC)
-aes128cbcI = SomeCipherI cbc128CPortable
-
--- | 128-bit AES in CBC mode using Portable C.
-cbc128CPortable :: CipherI (AES 128 'CBC) M128 M128
-cbc128CPortable =
-  CipherI { cipherIName = "aes128cbc-cportable"
-          , cipherIDescription =
-            "128-bit AES in cbc mode implemented in Portable C"
-          , encryptBlocks = cbc128Encrypt
-          , decryptBlocks = cbc128Decrypt
-          , cipherStartAlignment = wordAlignment
-          }
-
--- | The encryption action.
-cbc128Encrypt :: Pointer -> BLOCKS (AES 128 'CBC) -> MT M128 ()
-cbc128Encrypt buf nBlocks =
-  do eKeyPtr <- onSubMemory m128ekey getCellPointer
-     ivPtr   <- onSubMemory m128iv   getCellPointer
-     liftIO $ c_aes_cbc_e buf (fromEnum nBlocks) 10 eKeyPtr ivPtr
-
--- | The decryption action.
-cbc128Decrypt :: Pointer -> BLOCKS (AES 128 'CBC) -> MT M128 ()
-cbc128Decrypt buf nBlocks =
-  do eKeyPtr <- onSubMemory m128ekey getCellPointer
-     ivPtr   <- onSubMemory m128iv   getCellPointer
-     liftIO $ c_aes_cbc_d buf (fromEnum nBlocks) 10 eKeyPtr ivPtr
-
-
-
-------------------- 192-bit CBC Implementation ----------------
-
--- | Implementation of 192-bit AES in CBC mode using Portable C.
-aes192cbcI :: Implementation (AES 192 'CBC)
-aes192cbcI = SomeCipherI cbc192CPortable
-
--- | 192-bit AES in CBC mode using Portable C.
-cbc192CPortable :: CipherI (AES 192 'CBC) M192 M192
-cbc192CPortable =
-  CipherI { cipherIName = "aes192cbc-cportable"
-          , cipherIDescription =
-            "192-bit AES in cbc mode implemented in Portable C"
-          , encryptBlocks = cbc192Encrypt
-          , decryptBlocks = cbc192Decrypt
-          , cipherStartAlignment = wordAlignment
-          }
-
--- | The encryption action.
-cbc192Encrypt :: Pointer -> BLOCKS (AES 192 'CBC) -> MT M192 ()
-cbc192Encrypt buf nBlocks =
-  do eKeyPtr <- onSubMemory m192ekey getCellPointer
-     ivPtr   <- onSubMemory m192iv   getCellPointer
-     liftIO $ c_aes_cbc_e buf (fromEnum nBlocks) 12 eKeyPtr ivPtr
-
--- | The decryption action.
-cbc192Decrypt :: Pointer -> BLOCKS (AES 192 'CBC) -> MT M192 ()
-cbc192Decrypt buf nBlocks =
-  do eKeyPtr <- onSubMemory m192ekey getCellPointer
-     ivPtr   <- onSubMemory m192iv   getCellPointer
-     liftIO $ c_aes_cbc_d buf (fromEnum nBlocks) 12 eKeyPtr ivPtr
-
-------------------- 256-bit CBC Implementation ----------------
-
--- | Implementation of 256-bit AES in CBC mode using Portable C.
-aes256cbcI :: Implementation (AES 256 'CBC)
-aes256cbcI = SomeCipherI cbc256CPortable
-
--- | 256-bit AES in CBC mode using Portable C.
-cbc256CPortable :: CipherI (AES 256 'CBC) M256 M256
-cbc256CPortable =
-  CipherI { cipherIName = "aes256cbc-cportable"
-          , cipherIDescription =
-            "256-bit AES in cbc mode implemented in Portable C"
-          , encryptBlocks = cbc256Encrypt
-          , decryptBlocks = cbc256Decrypt
-          , cipherStartAlignment = wordAlignment
-
-          }
-
--- | The encryption action.
-cbc256Encrypt :: Pointer -> BLOCKS (AES 256 'CBC) -> MT M256 ()
-cbc256Encrypt buf nBlocks =
-  do eKeyPtr <- onSubMemory m256ekey getCellPointer
-     ivPtr   <- onSubMemory m256iv   getCellPointer
-     liftIO $ c_aes_cbc_e buf (fromEnum nBlocks) 14 eKeyPtr ivPtr
-
--- | The decryption action.
-cbc256Decrypt :: Pointer -> BLOCKS (AES 256 'CBC) -> MT M256 ()
-cbc256Decrypt buf nBlocks =
-  do eKeyPtr <- onSubMemory m256ekey getCellPointer
-     ivPtr   <- onSubMemory m256iv   getCellPointer
-     liftIO $ c_aes_cbc_d buf (fromEnum nBlocks) 14 eKeyPtr ivPtr
-
---------------------- Foreign functions ------------------------
-
--- | Transpose AES matrices.
-foreign import ccall unsafe
-  "raaz/cipher/aes/common.h raazAESTranspose"
-  c_transpose :: Int -> Ptr ekey -> IO ()
-
-
--- | CBC encrypt.
-foreign import ccall unsafe
-  "raaz/cipher/aes/cportable.h raazAESCBCEncryptCPortable"
-  c_aes_cbc_e :: Pointer  -- Input
-              -> Int      -- number of blocks
-              -> Int      -- rounds
-              -> Ptr ekey -- extended key
-              -> Ptr iv   -- iv
-              -> IO ()
--- | CBC decrypt
-foreign import ccall unsafe
-  "raaz/cipher/aes/cportable.h raazAESCBCDecryptCPortable"
-  c_aes_cbc_d :: Pointer  -- Input
-              -> Int      -- number of blocks
-              -> Int      -- rounds
-              -> Ptr ekey -- extened key
-              -> Ptr iv  -- iv
-              -> IO ()
diff --git a/Raaz/Cipher/AES/Internal.hs b/Raaz/Cipher/AES/Internal.hs
deleted file mode 100644
--- a/Raaz/Cipher/AES/Internal.hs
+++ /dev/null
@@ -1,209 +0,0 @@
-{-# LANGUAGE DataKinds                        #-}
-{-# LANGUAGE KindSignatures                   #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving       #-}
-{-# LANGUAGE ForeignFunctionInterface         #-}
-{-# LANGUAGE FlexibleInstances                #-}
-{-# LANGUAGE MultiParamTypeClasses            #-}
-{-# LANGUAGE TypeFamilies                     #-}
-
--- | Internals of AES.
-module Raaz.Cipher.AES.Internal
-       (-- * AES cipher.
-         AES(..)
-       -- ** AES key types.
-       , KEY128, KEY192, KEY256
-       , EKEY128, EKEY192, EKEY256, IV
-       , aes128cbc, aes192cbc, aes256cbc
-       , aes128ctr
-       ) where
-
-import Data.String
-import Data.Word
-
-import Foreign.Ptr      ( castPtr, Ptr )
-import Foreign.Storable (Storable, poke)
-import GHC.TypeLits
-
-import Raaz.Core
-import Raaz.Random
-
-import Raaz.Cipher.Internal
-
---------------- Basic types associated with AES -------------
-
--- | The type associated with AES ciphers. Raaz provides AES variants
--- with key lengths 128, 192 and 256. The key types for the above
--- ciphers in cbc mode are given by the types @(`KEY128`, IV)@,
--- @(`KEY192`, IV)@ @(`KEY256`, IV)@ respectively.
-data AES (n :: Nat) (mode :: CipherMode) = AES
-
--- | The basic word used in AES.
-type WORD    = BE Word32
-
--- | A tuple of AES words.
-type TUPLE n = Tuple n WORD
-
--- | Key used for AES-128
-newtype KEY128  = KEY128  (TUPLE 4)  deriving (Storable, EndianStore)
-
-
--- | Key used for AES-128
-newtype KEY192  = KEY192  (TUPLE 6)  deriving (Storable, EndianStore)
-
--- | Key used for AES-128
-newtype KEY256  = KEY256  (TUPLE 8)  deriving (Storable, EndianStore)
-
-instance Encodable KEY128
-instance Encodable KEY192
-instance Encodable KEY256
-
-instance RandomStorable KEY128 where
-  fillRandomElements = unsafeFillRandomElements
-
-
-instance RandomStorable KEY192 where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable KEY256 where
-  fillRandomElements = unsafeFillRandomElements
-
--- | Expects in base 16
-instance IsString KEY128 where
-  fromString = fromBase16
-
--- | Shows in base 16
-instance Show KEY128 where
-  show = showBase16
-
--- | Expects in  base 16
-instance IsString KEY192 where
-  fromString = fromBase16
-
--- | Shows in base 16
-instance Show KEY192 where
-  show = showBase16
-
--- | Expects in base 16
-instance IsString KEY256 where
-  fromString = fromBase16
-
--- | Shows in base 16
-instance Show KEY256 where
-  show = showBase16
-
---------------- AES CBC ---------------------------------
-
--- | The IV used by the CBC mode.
-newtype IV  = IV (TUPLE 4) deriving (Storable, EndianStore)
-
-instance Encodable IV
-
-instance RandomStorable IV where
-  fillRandomElements = unsafeFillRandomElements
-
--- | Expects in base16.
-instance IsString IV where
-  fromString = fromBase16
-
--- | Shown as a its base16 encoding.
-instance Show IV where
-  show = showBase16
-
------------------ AES 128 CBC ------------------------------
-
--- | 128-bit aes cipher in `CBC` mode.
-aes128cbc :: AES 128 'CBC
-aes128cbc = AES
-
--- | The 128-bit aes cipher in cbc mode.
-instance Primitive (AES 128 'CBC) where
-  blockSize _ = BYTES 16
-  type Implementation (AES 128 'CBC) = SomeCipherI (AES 128 'CBC)
-
--- | Key is @(`KEY128`,`IV`)@ pair.
-type instance Key (AES 128 'CBC) = (KEY128,IV)
-
-instance Describable (AES 128 'CBC) where
-  name _ = "aes-128-cbc"
-  description _ = "The AES cipher in CBC mode with 128-bit key"
-
-instance Cipher (AES 128 'CBC)
-
------------------ AES 192 CBC --------------------------------
-
--- | 128-bit aes cipher in `CBC` mode.
-aes192cbc :: AES 192 'CBC
-aes192cbc = AES
-
--- | The 192-bit aes cipher in cbc mode.
-instance Primitive (AES 192 'CBC) where
-  blockSize _ = BYTES 16
-  type Implementation (AES 192 'CBC) = SomeCipherI (AES 192 'CBC)
-
--- | Key is @(`KEY192`,`IV`)@ pair.
-type instance Key (AES 192 'CBC) = (KEY192,IV)
-
-instance Describable (AES 192 'CBC) where
-  name _ = "aes-192-cbc"
-  description _ = "The AES cipher in CBC mode with 192-bit key"
-
-instance Cipher (AES 192 'CBC)
-
-------------------- AES 256 CBC -----------------------------
-
--- | 128-bit aes cipher in `CBC` mode.
-aes256cbc :: AES 256 'CBC
-aes256cbc = AES
-
--- | The 256-bit aes cipher in cbc mode.
-instance Primitive (AES 256 'CBC) where
-  blockSize _ = BYTES 16
-  type Implementation (AES 256 'CBC) = SomeCipherI (AES 256 'CBC)
-
--- | Key is @(`KEY256`,`IV`)@ pair.
-type instance Key (AES 256 'CBC) = (KEY256,IV)
-
-
-instance Describable (AES 256 'CBC) where
-  name _ = "aes-256-cbc"
-  description _ = "The AES cipher in CBC mode with 256-bit key"
-
-instance Cipher (AES 256 'CBC)
-
-
-------------------- AES CTR mode ---------------------------
-
--- | Smart constructors for AES 128 ctr.
-aes128ctr :: AES 128 'CTR
-aes128ctr = AES
-
---------------  Memory for storing extended keys ---------
-
--- | Extended key for aes128
-newtype EKEY128 = EKEY128 (TUPLE 44) deriving (Storable, EndianStore)
--- | Extended key for aes192
-newtype EKEY192 = EKEY192 (TUPLE 52) deriving (Storable, EndianStore)
-
--- | Extended key for aes256
-newtype EKEY256 = EKEY256 (TUPLE 60) deriving (Storable, EndianStore)
-
-instance Initialisable (MemoryCell EKEY128) KEY128 where
-  initialise k = withCellPointer $ pokeAndExpand k (c_expand 4)
-
-instance Initialisable (MemoryCell EKEY192) KEY192 where
-  initialise k = withCellPointer $ pokeAndExpand k (c_expand 6)
-
-instance Initialisable (MemoryCell EKEY256) KEY256 where
-  initialise k = withCellPointer $ pokeAndExpand k (c_expand 8)
-
-foreign import ccall unsafe
-  "raaz/cipher/aes/common.h raazAESExpand"
-  c_expand :: Int -> Ptr ekey -> IO ()
-
--- | Poke a key and expand it with the given routine.
-pokeAndExpand :: Storable k
-              => k                    -- ^ key to poke
-              -> (Ptr ekey -> IO ())  -- ^ expansion algorithm
-              -> Ptr ekey             -- ^ buffer pointer.
-              -> IO ()
-pokeAndExpand k expander ptr = poke (castPtr ptr) k >> expander ptr
diff --git a/Raaz/Cipher/AES/Recommendation.hs b/Raaz/Cipher/AES/Recommendation.hs
deleted file mode 100644
--- a/Raaz/Cipher/AES/Recommendation.hs
+++ /dev/null
@@ -1,29 +0,0 @@
--- | This sets up the recommended implementation of various AES cipher
--- modes.
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE DataKinds            #-}
-{-# LANGUAGE FlexibleInstances    #-}
---
--- The orphan instance declaration separates the implementation and
--- setting the recommended instances. Therefore, we ignore the warning.
---
-
-module Raaz.Cipher.AES.Recommendation where
-
-import           Raaz.Core
-import           Raaz.Cipher.Internal
-import           Raaz.Cipher.AES.Internal
-import qualified Raaz.Cipher.AES.CBC.Implementation.CPortable as CPCBC
-
--- | Recommended implementation of AES-128 cbc
-instance Recommendation (AES 128 'CBC) where
-         recommended _ = CPCBC.aes128cbcI
-
--- | Recommended implementation of AES-192 cbc
-instance Recommendation (AES 192 'CBC) where
-         recommended _ = CPCBC.aes192cbcI
-
--- | Recommended implementation of AES-256 cbc
-instance Recommendation (AES 256 'CBC) where
-         recommended _ = CPCBC.aes256cbcI
diff --git a/Raaz/Cipher/ChaCha20.hs b/Raaz/Cipher/ChaCha20.hs
deleted file mode 100644
--- a/Raaz/Cipher/ChaCha20.hs
+++ /dev/null
@@ -1,11 +0,0 @@
--- | The Chacha20 cipher.
-module Raaz.Cipher.ChaCha20
-       ( ChaCha20, chacha20, KEY, IV, Counter
-       ) where
-
-import Raaz.Cipher.ChaCha20.Internal
-import Raaz.Cipher.ChaCha20.Recommendation()
-
--- | The chacha20 stream cipher.
-chacha20 :: ChaCha20
-chacha20 = ChaCha20
diff --git a/Raaz/Cipher/ChaCha20/Implementation/CPortable.hs b/Raaz/Cipher/ChaCha20/Implementation/CPortable.hs
deleted file mode 100644
--- a/Raaz/Cipher/ChaCha20/Implementation/CPortable.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface         #-}
-{-# LANGUAGE MultiParamTypeClasses            #-}
-{-# LANGUAGE FlexibleInstances                #-}
-{-# LANGUAGE DataKinds                        #-}
-
--- | Portable C implementation of ChaCha20.
-module Raaz.Cipher.ChaCha20.Implementation.CPortable
-       ( implementation, chacha20Random
-       ) where
-
-import Control.Monad.IO.Class   ( liftIO )
-import Foreign.Ptr              ( Ptr    )
-
-import Raaz.Core
-import Raaz.Cipher.Internal
-import Raaz.Cipher.ChaCha20.Internal
-
--- | The portable c implementation of chacha20 cipher.
-implementation :: SomeCipherI ChaCha20
-implementation  = SomeCipherI chacha20Portable
-
--- | Chacha20 block transformation.
-foreign import ccall unsafe
-  "raaz/cipher/chacha20/cportable.h raazChaCha20Block"
-  c_chacha20_block :: Pointer      -- Message
-                   -> Int          -- number of blocks
-                   -> Ptr KEY      -- key
-                   -> Ptr IV       -- iv
-                   -> Ptr Counter  -- Counter value
-                   -> IO ()
-
-
-
-
--- | Encrypting/Decrypting a block of chacha20.
-chacha20Block :: Pointer -> BLOCKS ChaCha20 -> MT ChaCha20Mem ()
-chacha20Block msgPtr nblocks = do keyPtr <- onSubMemory keyCell     getCellPointer
-                                  ivPtr  <- onSubMemory ivCell      getCellPointer
-                                  ctrPtr <- onSubMemory counterCell getCellPointer
-                                  liftIO $ c_chacha20_block msgPtr (fromEnum nblocks) keyPtr ivPtr ctrPtr
-
--- | The chacha20 randomness generator.
-chacha20Random :: Pointer -> BLOCKS ChaCha20 -> MT ChaCha20Mem ()
-chacha20Random = chacha20Block
-
----------------------- DANGEROUS CODE --------------------------------------
-
--- | The chacha20 randomness generator. We have set the alignment to
--- 32 because this allows gcc to further optimise the implementation.
-chacha20Portable :: CipherI ChaCha20 ChaCha20Mem ChaCha20Mem
-chacha20Portable = makeCipherI
-                   "chacha20-cportable"
-                   "Implementation of the chacha20 stream cipher (RFC7539)"
-                   chacha20Block
-                   32
diff --git a/Raaz/Cipher/ChaCha20/Implementation/Vector128.hs b/Raaz/Cipher/ChaCha20/Implementation/Vector128.hs
deleted file mode 100644
--- a/Raaz/Cipher/ChaCha20/Implementation/Vector128.hs
+++ /dev/null
@@ -1,39 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface         #-}
-{-# LANGUAGE MultiParamTypeClasses            #-}
-{-# LANGUAGE FlexibleInstances                #-}
-
-module Raaz.Cipher.ChaCha20.Implementation.Vector128
-       ( implementation
-       ) where
-
-import Control.Monad.IO.Class   ( liftIO )
-import Foreign.Ptr              ( Ptr    )
-
-import Raaz.Core
-import Raaz.Cipher.Internal
-import Raaz.Cipher.ChaCha20.Internal
-
-implementation :: SomeCipherI ChaCha20
-implementation  = SomeCipherI chacha20Vector
-
--- | Chacha20 block transformation.
-foreign import ccall unsafe "raazChaCha20BlockVector"
-  c_chacha20_block :: Pointer      -- Message
-                   -> Int          -- number of blocks
-                   -> Ptr KEY      -- key
-                   -> Ptr IV       -- iv
-                   -> Ptr Counter  -- Counter value
-                   -> IO ()
-
-chacha20Block :: Pointer -> BLOCKS ChaCha20 -> MT ChaCha20Mem ()
-chacha20Block msgPtr nblocks = do keyPtr <- onSubMemory keyCell     getCellPointer
-                                  ivPtr  <- onSubMemory ivCell      getCellPointer
-                                  ctrPtr <- onSubMemory counterCell getCellPointer
-                                  liftIO $ c_chacha20_block msgPtr (fromEnum nblocks) keyPtr ivPtr ctrPtr
-
-chacha20Vector :: CipherI ChaCha20 ChaCha20Mem ChaCha20Mem
-chacha20Vector = makeCipherI
-                   "chacha20-vector-128"
-                   "Implementation of the chacha20 stream cipher using the gcc's vector instructions"
-                   chacha20Block
-                   16
diff --git a/Raaz/Cipher/ChaCha20/Implementation/Vector256.hs b/Raaz/Cipher/ChaCha20/Implementation/Vector256.hs
deleted file mode 100644
--- a/Raaz/Cipher/ChaCha20/Implementation/Vector256.hs
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface         #-}
-{-# LANGUAGE MultiParamTypeClasses            #-}
-{-# LANGUAGE FlexibleInstances                #-}
-{-# LANGUAGE DataKinds                        #-}
-
-module Raaz.Cipher.ChaCha20.Implementation.Vector256
-       ( implementation, chacha20Random
-       ) where
-
-import Control.Monad.IO.Class   ( liftIO )
-import Foreign.Ptr              ( Ptr    )
-import Raaz.Core
-import Raaz.Cipher.Internal
-import Raaz.Cipher.ChaCha20.Internal
-
---------------------------- Setting up the implementation ----------------------------
-
-implementation :: SomeCipherI ChaCha20
-implementation  = SomeCipherI chacha20Vector
-
-
-chacha20Vector :: CipherI ChaCha20 ChaCha20Mem ChaCha20Mem
-chacha20Vector = makeCipherI
-                 "chacha20-vector-256"
-                 "Implementation of the chacha20 stream cipher using the gcc's 256-bit vector instructions"
-                 chacha20Block
-                 32
-
------------------------------ The block transformation ---------------------------------
-
--- | Chacha20 block transformation.
-foreign import ccall unsafe
-  "raazChaCha20BlockVector256"
-  c_chacha20_block :: Pointer      -- Message
-                   -> Int          -- number of blocks
-                   -> Ptr KEY      -- key
-                   -> Ptr IV       -- iv
-                   -> Ptr Counter  -- Counter value
-                   -> IO ()
-
-chacha20Block :: Pointer -> BLOCKS ChaCha20 -> MT ChaCha20Mem ()
-chacha20Block msgPtr nblocks = do keyPtr <- onSubMemory keyCell     getCellPointer
-                                  ivPtr  <- onSubMemory ivCell      getCellPointer
-                                  ctrPtr <- onSubMemory counterCell getCellPointer
-                                  liftIO $ c_chacha20_block msgPtr (fromEnum nblocks) keyPtr ivPtr ctrPtr
-
-
------------------------------ The chacha20 stream cipher ----------------------------------
-
-chacha20Random :: Pointer -> BLOCKS ChaCha20 -> MT ChaCha20Mem ()
-chacha20Random = chacha20Block
diff --git a/Raaz/Cipher/ChaCha20/Internal.hs b/Raaz/Cipher/ChaCha20/Internal.hs
deleted file mode 100644
--- a/Raaz/Cipher/ChaCha20/Internal.hs
+++ /dev/null
@@ -1,92 +0,0 @@
-{-# LANGUAGE DataKinds                        #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving       #-}
-{-# LANGUAGE FlexibleInstances                #-}
-{-# LANGUAGE MultiParamTypeClasses            #-}
-{-# LANGUAGE TypeFamilies                     #-}
-
--- | The internals of ChaCha20 ciphers.
-module Raaz.Cipher.ChaCha20.Internal
-       ( ChaCha20(..), WORD, Counter(..), IV(..), KEY(..), ChaCha20Mem(..)
-       ) where
-
-import Control.Applicative
-import Data.Word
-import Data.String
-import Foreign.Storable
-import Prelude
-
-
-import Raaz.Core
-import Raaz.Cipher.Internal
-
--- | The chacha20 stream cipher.
-
-
--- | The word type
-type WORD     = LE Word32
-
--- | The IV for the chacha20
-newtype IV       = IV (Tuple 3 (LE Word32))     deriving (Storable, EndianStore)
-
-instance Encodable IV
-
-instance Show IV where
-  show = showBase16
-instance IsString IV where
-  fromString = fromBase16
-
--- | The counter type for chacha20
-newtype Counter  = Counter (LE Word32) deriving (Num, Storable, EndianStore, Show, Eq, Ord)
-
-
--- | The key type.
-newtype KEY      = ChaCha20Key (Tuple 8 WORD) deriving (Storable, EndianStore)
-
-instance Encodable KEY
-
-instance Show KEY where
-  show = showBase16
-
-instance IsString KEY where
-  fromString = fromBase16
-
--- | The type associated with the ChaCha20 cipher.
-data ChaCha20 = ChaCha20
-
-instance Primitive ChaCha20 where
-  blockSize _ = BYTES 64
-  type Implementation ChaCha20 = SomeCipherI ChaCha20
-
--- | The key for ChaCha20.
-type instance Key ChaCha20 = (KEY, IV, Counter)
-
-instance Describable ChaCha20 where
-  name        _ = "chacha20"
-  description _ = "The ChaCha20 cipher"
-
-instance Cipher ChaCha20
-
-instance StreamCipher ChaCha20
-
-
-
----------- Memory for ChaCha20 implementations  ------------------
--- | chacha20 memory
-data ChaCha20Mem = ChaCha20Mem { keyCell      :: MemoryCell KEY
-                               , ivCell       :: MemoryCell IV
-                               , counterCell  :: MemoryCell Counter
-                               }
-
-
-instance Memory ChaCha20Mem where
-  memoryAlloc     = ChaCha20Mem <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
-  unsafeToPointer = unsafeToPointer . keyCell
-
-instance Initialisable ChaCha20Mem (KEY, IV, Counter) where
-  initialise (k,iv,ctr) = do onSubMemory keyCell     $ initialise k
-                             onSubMemory ivCell      $ initialise iv
-                             onSubMemory counterCell $ initialise ctr
-
-
-instance Initialisable ChaCha20Mem (KEY, IV) where
-  initialise (k, iv) = initialise (k, iv, 0 :: Counter)
diff --git a/Raaz/Cipher/ChaCha20/Recommendation.hs b/Raaz/Cipher/ChaCha20/Recommendation.hs
deleted file mode 100644
--- a/Raaz/Cipher/ChaCha20/Recommendation.hs
+++ /dev/null
@@ -1,88 +0,0 @@
--- | This sets up the recommended implementation of chacha20 cipher.
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE FlexibleInstances    #-}
-{-# LANGUAGE CPP                  #-}
-
---
--- The orphan instance declaration separates the implementation and
--- setting the recommended instances. Therefore, we ignore the warning.
---
-
-module Raaz.Cipher.ChaCha20.Recommendation
-       ( chacha20Random, RandomBuf, getBufferPointer, randomBufferSize
-       ) where
-
-import Control.Applicative
-import Prelude
-
-import Raaz.Core
-import Raaz.Cipher.ChaCha20.Internal
-
-#ifdef HAVE_VECTOR_256
-import Raaz.Cipher.ChaCha20.Implementation.Vector256
-#else
-import Raaz.Cipher.ChaCha20.Implementation.CPortable
-#endif
-
------------- Setting the recommended implementation -------------------
-
-instance Recommendation ChaCha20 where
-         recommended _ = implementation
-
-
---------------- Some information used by Raaz/Random/ChaCha20PRG.hs -------------
-
--- | The chacha stream cipher is also used as the prg for generating
--- random bytes. Such a prg needs to keep an auxilary buffer type so
--- that one can generate random bytes not just of block size but
--- smaller. This memory type is essentially for maintaining such a
--- buffer.
-
-newtype RandomBuf = RandomBuf { unBuf :: Pointer }
-
-
-
-instance Memory RandomBuf where
-
-  memoryAlloc     = RandomBuf <$> pointerAlloc sz
-    where sz = atLeastAligned randomBufferSize randomBufferAlignment
-
-  unsafeToPointer = unBuf
-
--- | Get the actual location where the data is to be stored. Ensures
--- that the pointer is aligned to the @randomBufferAlignment@
--- restriction.
-getBufferPointer :: MT RandomBuf Pointer
-getBufferPointer = actualPtr <$> getMemory
-  where actualPtr = flip alignPtr randomBufferAlignment . unBuf
-
-
---------------------- DANGEROUS CODE --------------------------------
-
--- Things to take care in this module
--- ==================================
---
--- 1. ENSURE randomBufferSize IS THE MAXIMUM FOR ALL IMPLEMENTATIONS of
---    chacha20 random stream. OTHERWISE BUFFER OVERFLOW.
---
--- 2. Ensure that the alignment requirement is the maximum so that any
---    implementation can use the same memory.
-
-
-
-
--- | The size of the buffer in blocks of ChaCha20. While the
--- implementations should handle any multiple of blocks, often
--- implementations naturally handle some multiple of blocks, for
--- example the Vector256 implementation handles 2-chacha blocks. Set
--- this quantity to the maximum supported by all implementations.
-randomBufferSize :: BLOCKS ChaCha20
-randomBufferSize = 16  `blocksOf` ChaCha20
-
--- | Implementations are also designed to work with a specific
--- alignment boundary. Unaligned access can slow down the primitives
--- quite a bit. Set this to the maximum of alignment supported by all
--- implementations
-randomBufferAlignment :: Alignment
-randomBufferAlignment = 32 -- For 256-bit vector instructions.
diff --git a/Raaz/Cipher/Internal.hs b/Raaz/Cipher/Internal.hs
deleted file mode 100644
--- a/Raaz/Cipher/Internal.hs
+++ /dev/null
@@ -1,270 +0,0 @@
-{-# LANGUAGE CPP                       #-}
-{-# LANGUAGE ExistentialQuantification #-}
-{-# LANGUAGE TypeFamilies              #-}
-{-# LANGUAGE FlexibleContexts          #-}
-{-# LANGUAGE FlexibleInstances         #-}
-{-# LANGUAGE MultiParamTypeClasses     #-}
-{-# LANGUAGE ScopedTypeVariables       #-}
-{-# LANGUAGE ConstraintKinds           #-}
-
--- | This module exposes the low-level internal details of ciphers. Do
--- not import this module unless you want to implement a new cipher or
--- give a new implementation of an existing cipher.
-module Raaz.Cipher.Internal
-       (
-         -- * Internals of a cipher.
-         -- $cipherdoc$
-         Cipher, CipherMode(..)
-         -- ** Cipher implementation
-       , CipherI(..), SomeCipherI(..)
-
-         -- ** Stream ciphers.
-         -- $streamcipher$
-       , StreamCipher, makeCipherI
-       , transform, transform'
-       -- ** Unsafe encryption and decryption.
-       -- $unsafecipher$
-       --
-       , unsafeEncrypt, unsafeDecrypt, unsafeEncrypt', unsafeDecrypt'
-
-       ) where
-
-import Control.Monad.IO.Class          (liftIO)
-import Data.ByteString.Internal as IB
-import Foreign.Ptr                     (castPtr)
-import System.IO.Unsafe                (unsafePerformIO)
-
-import Raaz.Core
-import Raaz.Core.Util.ByteString as B
-
--- $cipherdoc$
---
--- Ciphers provide symmetric encryption in the raaz library and are
--- captured by the type class `Cipher`.  They are instances of the
--- class `Symmetric` and the associated type `Key` captures the all
--- that is required to determine the encryption and decryption
--- process. In most ciphers, this includes what is know as the
--- _encryption key_ as well as the _initialisation vector_.
---
--- Instances of `Cipher` is only required to provide full block
--- encryption/decryption algorithms.  Implementations are captured by
--- two types.
---
--- [`CipherI`:] Values of this type that captures implementations of a
--- cipher.  This type is parameterised over the memory element that is
--- used internally by the implementation.
---
--- [`SomeCipherI`:] The existentially quantified version of `CipherI`
--- over its memory element. By wrapping the memory element inside the
--- existential quantifier, values of this type exposes only the
--- interface and not the internals of the implementation. The
--- `Implementation` associated type of a cipher is the type
--- `SomeCipherI`
---
--- To support a new cipher, a developer needs to:
---
--- 1. Define a new type which captures the cipher. This type should be
---    an instance of the class `Cipher`.
---
--- 2. Define an implementation, i.e. a value of the type `SomeCipherI`.
---
--- 3. Define a recommended implementation, i.e. an instance of the
---    type class `Raaz.Core.Primitives.Recommendation`
---
-
--- $streamcipher$
---
--- Stream ciphers are special class of ciphers which can encrypt
--- messages of any length (not necessarily multiples of block length).
--- Typically, stream ciphers are obtained by xoring the data with a
--- stream of prg values that the stream ciphers generate. As a
--- consequence, the encryption and decryption is the same algorithm.
--- one can also use the stream cipher as a pseudo-random generator.
---
--- We have the class `StreamCipher` that captures valid stream ciphers.
---
-
-
--- | Block cipher modes.
-data CipherMode = CBC -- ^ Cipher-block chaining
-                | CTR -- ^ Counter
-                deriving (Show, Eq)
-
--- | The implementation of a block cipher.
-data CipherI cipher encMem decMem = CipherI
-     { cipherIName         :: String
-     , cipherIDescription  :: String
-       -- | The underlying block encryption function.
-     , encryptBlocks :: Pointer -> BLOCKS cipher -> MT encMem ()
-       -- | The underlying block decryption function.
-     , decryptBlocks :: Pointer -> BLOCKS cipher -> MT decMem ()
-     , cipherStartAlignment :: Alignment
-     }
-
--- | Type constraints on the memory of a block cipher implementation.
-type CipherM cipher encMem decMem = ( Initialisable encMem (Key cipher)
-                                    , Initialisable decMem (Key cipher)
-                                    , Primitive cipher
-                                    ) -- TODO: More need initialisable from buffer.
-
--- | Some implementation of a block cipher. This type is existentially
--- quantifies over the memory used in the implementation.
-data SomeCipherI cipher =
-  forall encMem decMem . CipherM cipher encMem decMem
-  => SomeCipherI (CipherI cipher encMem decMem)
-
-
-instance BlockAlgorithm (CipherI cipher encMem decMem) where
-  bufferStartAlignment = cipherStartAlignment
-
-instance Describable (CipherI cipher encMem decMem) where
-  name        = cipherIName
-  description = cipherIDescription
-
-
-instance Describable (SomeCipherI cipher) where
-  name         (SomeCipherI cI) = name cI
-  description  (SomeCipherI cI) = description cI
-
-instance BlockAlgorithm (SomeCipherI cipher) where
-  bufferStartAlignment (SomeCipherI imp) = bufferStartAlignment imp
-
-
--- | Class capturing ciphers. The implementation of this class should
--- give an encryption and decryption algorithm for messages of length
--- which is a multiple of the block size.  Needless to say, the
--- encryption and decryption should be inverses of each other for such
--- messages.
-class (Primitive cipher, Implementation cipher ~ SomeCipherI cipher, Describable cipher)
-      => Cipher cipher
-
--- | Class that captures stream ciphers. An instance of `StreamCipher`
--- should be an instance of `Cipher`, with the following additional
--- constraints.
---
--- 1. The encryption and decryption should be the same algorithm.
---
--- 2. Encryption/decryption can be applied to a messages of length @l@
---    even if @l@ is not a multiple of block length.
---
--- 3. The encryption of a prefix of a length @l@ of a message @m@
---    should be the same as the @l@ length prefix of the encryption of
---    @m@.
---
--- It is the duty of the implementer of the cipher to ensure that the
--- above conditions are true before declaring an instance of a stream
--- cipher.
-class Cipher cipher => StreamCipher cipher
-
-
--- | Constructs a `CipherI`  value out of a stream transformation function. Useful in
---   building a Cipher instance of a stream cipher.
-makeCipherI :: String                                -- ^ name
-            -> String                                -- ^ description
-            -> (Pointer -> BLOCKS prim -> MT mem ()) -- ^ stream transformer
-            -> Alignment                             -- ^ buffer starting alignment
-            -> CipherI prim mem mem
-makeCipherI nm des trans = CipherI nm des trans trans
-
------------------- Unsafe cipher operations ------------------------
-
--- $unsafecipher$
---
--- We expose some unsafe functions to encrypt and decrypt bytestrings.
--- These function works correctly only if the input byte string has a
--- length which is a multiple of the block size of the cipher and
--- hence are unsafe to use as general methods of encryption and
--- decryption of data.  Use these functions for testing and
--- benchmarking and nothing else.
---
--- There are multiple ways to handle arbitrary sized strings like
--- padding, cipher block stealing etc. They are not exposed here
--- though.
-
--- | Encrypt the given `ByteString`. This function is unsafe because
--- it only works correctly when the input `ByteString` is of length
--- which is a multiple of the block length of the cipher.
-unsafeEncrypt' :: Cipher c
-               => c                -- ^ The cipher to use
-               -> Implementation c -- ^ The implementation to use
-               -> Key c            -- ^ The key to use
-               -> ByteString       -- ^ The string to encrypt.
-               -> ByteString
-unsafeEncrypt' c simp@(SomeCipherI imp) key bs = IB.unsafeCreate sbytes go
-  where sz           = atMost (B.length bs) `asTypeOf` blocksOf 1 c
-        BYTES sbytes = inBytes sz
-        go    ptr    = allocBufferFor simp sz $ \ buf -> insecurely $ do
-          initialise key
-          liftIO $ unsafeNCopyToPointer sz bs buf -- Copy the input to buffer.
-          encryptBlocks imp buf sz
-          liftIO $ Raaz.Core.memcpy (destination (castPtr ptr)) (source buf) sz
-
--- | Transforms a given bytestring using a stream cipher. We use the
--- transform instead of encrypt/decrypt because for stream ciphers
--- these operations are same.
-
-transform' :: StreamCipher c
-           => c
-           -> Implementation c
-           -> Key c
-           -> ByteString
-           -> ByteString
-transform' c simp@(SomeCipherI imp) key bs = unsafePerformIO $ IB.createAndTrim (fromEnum $ inBytes blks) action
-   where blks          = atLeast len `asTypeOf` blocksOf 1 c
-         len           = B.length bs
-         action ptr    = allocBufferFor simp blks $ \ buf -> insecurely $ do
-           initialise key
-           liftIO $ unsafeCopyToPointer bs buf -- copy data into the buffer
-           encryptBlocks imp buf blks          -- encrypt it
-           liftIO $ Raaz.Core.memcpy (destination (castPtr ptr)) (source buf) len
-                                               -- copy it back to the actual pointer.
-           return $ fromIntegral len
-
--- | Transform a given bytestring using the recommended implementation
--- of a stream cipher.
-transform :: (StreamCipher c, Recommendation c)
-           => c
-           -> Key c
-           -> ByteString
-           -> ByteString
-transform c = transform' c $ recommended c
-
-
-
--- | Encrypt using the recommended implementation. This function is
--- unsafe because it only works correctly when the input `ByteString`
--- is of length which is a multiple of the block length of the cipher.
-unsafeEncrypt :: (Cipher c, Recommendation c)
-              => c            -- ^ The cipher
-              -> Key c        -- ^ The key to use
-              -> ByteString   -- ^ The string to encrypt
-              -> ByteString
-unsafeEncrypt c = unsafeEncrypt' c $ recommended c
-
--- | Decrypts the given `ByteString`. This function is unsafe because
--- it only works correctly when the input `ByteString` is of length
--- which is a multiple of the block length of the cipher.
-unsafeDecrypt' :: Cipher c
-               => c                -- ^ The cipher to use
-               -> Implementation c -- ^ The implementation to use
-               -> Key c            -- ^ The key to use
-               -> ByteString       -- ^ The string to encrypt.
-               -> ByteString
-unsafeDecrypt' c simp@(SomeCipherI imp) key bs = IB.unsafeCreate sbytes go
-  where sz           = atMost (B.length bs) `asTypeOf` blocksOf 1 c
-        BYTES sbytes = inBytes sz
-        go    ptr    = allocBufferFor simp sz $ \ buf -> insecurely $ do
-          initialise key
-          liftIO $ unsafeNCopyToPointer sz bs buf -- Copy the input to buffer.
-          decryptBlocks imp buf sz
-          liftIO $ Raaz.Core.memcpy (destination (castPtr ptr)) (source buf) sz
-
--- | Decrypt using the recommended implementation. This function is
--- unsafe because it only works correctly when the input `ByteString`
--- is of length which is a multiple of the block length of the cipher.
-unsafeDecrypt :: (Cipher c, Recommendation c)
-              => c            -- ^ The cipher
-              -> Key c        -- ^ The key to use
-              -> ByteString   -- ^ The string to encrypt
-              -> ByteString
-unsafeDecrypt c = unsafeDecrypt' c $ recommended c
diff --git a/Raaz/Core.hs b/Raaz/Core.hs
deleted file mode 100644
--- a/Raaz/Core.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-{-|
-
-Core functions, data types and classes of the raaz package.
-
--}
-
-module Raaz.Core
-       ( module Raaz.Core.ByteSource
-       , module Raaz.Core.Constants
-       , module Raaz.Core.Encode
-       , module Raaz.Core.Memory
-       , module Raaz.Core.Primitives
-       , module Raaz.Core.Types
-       , module Raaz.Core.Util
-       ) where
-
-import Raaz.Core.ByteSource
-import Raaz.Core.Constants
-import Raaz.Core.Encode
-import Raaz.Core.Memory
-import Raaz.Core.Primitives
-import Raaz.Core.Types
-import Raaz.Core.Util
-
-{-# ANN module "HLint: ignore Use import/export shortcut" #-}
diff --git a/Raaz/Core/ByteSource.hs b/Raaz/Core/ByteSource.hs
deleted file mode 100644
--- a/Raaz/Core/ByteSource.hs
+++ /dev/null
@@ -1,164 +0,0 @@
-{-# LANGUAGE FlexibleContexts  #-}
--- | Module define byte sources.
-module Raaz.Core.ByteSource
-       ( -- * Byte sources.
-         -- $bytesource$
-
-         ByteSource(..), PureByteSource
-       --    InfiniteSource(..)
-       , FillResult(..)
-       , fill, processChunks
-       , withFillResult
-       ) where
-
-import           Control.Applicative
-import           Control.Monad.IO.Class
-import qualified Data.ByteString      as B
-import qualified Data.ByteString.Lazy as L
-import           Prelude hiding(length)
-import           System.IO            (Handle, hIsEOF)
-
-import           Raaz.Core.MonoidalAction
-import           Raaz.Core.Types      (BYTES, Pointer, LengthUnit (..))
-import           Raaz.Core.Util.ByteString( unsafeCopyToPointer
-                                          , unsafeNCopyToPointer
-                                          , length
-                                          )
-import           Raaz.Core.Types.Pointer  (hFillBuf)
-
--- $bytesource$
---
--- Cryptographic input come from various sources; they can come from
--- network sockets or might be just a string in the Haskell. To give a
--- uniform interfaces for all such inputs, we define the abstract
--- concept of a /byte source/. Essentially a byte source is one from
--- which we can fill a buffer with bytes.
---
--- Among instances of `ByteSource`, some like for example
--- `B.ByteString` are /pure/ in the sense filling a buffer with bytes
--- from such a source has no other side-effects. This is in contrast
--- to a source like a sockets. The type class `PureByteSource`
--- captures such byte sources.
---
-
--- | This type captures the result of a fill operation.
-data FillResult a = Remaining a           -- ^ There is still bytes left.
-                  | Exhausted (BYTES Int) -- ^ source exhausted with so much
-                                          -- bytes read.
-                    deriving (Show, Eq)
-
-instance Functor FillResult where
-  fmap f (Remaining a ) = Remaining $ f a
-  fmap _ (Exhausted sz) = Exhausted sz
-
--- | Combinator to handle a fill result.
-withFillResult :: (a -> b)          -- ^ stuff to do when filled
-               -> (BYTES Int -> b)  -- ^ stuff to do when exhausted
-               -> FillResult a      -- ^ the fill result to process
-               -> b
-withFillResult continueWith _     (Remaining a)  = continueWith a
-withFillResult _            endBy (Exhausted sz) = endBy sz
-
------------------------- Byte sources ----------------------------------
-
--- | Abstract byte sources. A bytesource is something that you can use
--- to fill a buffer.
---
---  __WARNING:__ The source is required to return `Exhausted` in the
--- boundary case where it has exactly the number of bytes
--- requested. In other words, if the source returns @Remaining@ on any
--- particular request, there should be at least 1 additional byte left
--- on the source for the next request. Cryptographic block primitives
--- have do certain special processing for the last block and it is
--- required to know whether the last block has been read or not.
-class ByteSource src where
-  -- | Fills a buffer from the source.
-  fillBytes :: BYTES Int  -- ^ Buffer size
-            -> src        -- ^ The source to fill.
-            -> Pointer  -- ^ Buffer pointer
-            -> IO (FillResult src)
-
--- | A version of fillBytes that takes type safe lengths as input.
-fill :: ( LengthUnit len
-        , ByteSource src
-        )
-     => len
-     -> src
-     -> Pointer
-     -> IO (FillResult src)
-fill = fillBytes . inBytes
-{-# INLINE fill #-}
-
--- | Process data from a source in chunks of a particular size.
-processChunks :: ( MonadIO m, LengthUnit chunkSize, ByteSource src)
-              => m a                 -- action on a complete chunk,
-              -> (BYTES Int -> m b)  -- action on the last partial chunk,
-              -> src                 -- the source
-              -> chunkSize           -- size of the chunksize
-              -> Pointer             -- buffer to fill the chunk in
-              -> m b
-processChunks mid end source csz ptr = go source
-  where fillChunk src = liftIO $ fill csz src ptr
-        step src      = mid >> go src
-        go src        = fillChunk src >>= withFillResult step end
-
-
--- | A byte source src is pure if filling from it does not have any
--- other side effect on the state of the byte source. Formally, two
--- different fills form the same source should fill the buffer with
--- the same bytes.  This additional constraint on the source helps to
--- /purify/ certain crypto computations like computing the hash or mac
--- of the source. Usualy sources like `B.ByteString` etc are pure byte
--- sources. A file handle is a byte source that is /not/ a pure
--- source.
-class ByteSource src => PureByteSource src where
-
------------------------ Instances of byte source -----------------------
-
--- | __WARNING:_ The `fillBytes` may block.
-instance ByteSource Handle where
-  {-# INLINE fillBytes #-}
-  fillBytes sz hand cptr = do
-    count <- hFillBuf hand cptr sz
-    eof   <- hIsEOF hand
-    if eof then return $ Exhausted count
-      else return $ Remaining hand
-
-instance ByteSource B.ByteString where
-  {-# INLINE fillBytes #-}
-  fillBytes sz bs cptr | l <= sz    = do unsafeCopyToPointer bs cptr
-                                         return $ Exhausted l
-                       | otherwise = do unsafeNCopyToPointer sz bs cptr
-                                        return $ Remaining rest
-       where l    = length bs
-             rest = B.drop (fromIntegral sz) bs
-
-instance ByteSource L.ByteString where
-  {-# INLINE fillBytes #-}
-  fillBytes sz bs = fmap (fmap L.fromChunks) . fillBytes sz (L.toChunks bs)
-
-instance ByteSource src => ByteSource (Maybe src) where
-  {-# INLINE fillBytes #-}
-  fillBytes sz ma cptr = maybe exhausted fillIt ma
-          where exhausted = return $ Exhausted 0
-                fillIt a  = fmap Just <$> fillBytes sz a cptr
-
-instance ByteSource src => ByteSource [src] where
-  fillBytes _  []     _    = return $ Exhausted 0
-  fillBytes sz (x:xs) cptr = do
-    result <- fillBytes sz x cptr
-    case result of
-      Remaining nx     -> return $ Remaining $ nx:xs
-      Exhausted bytesX -> let nptr              = bytesX <.> cptr
-                              whenXSExhausted bytesXS = return $ Exhausted $ bytesX + bytesXS
-                              whenXSRemains           = return . Remaining
-                           in fillBytes (sz - bytesX) xs nptr
-                              >>= withFillResult whenXSRemains whenXSExhausted
-
-
---------------------- Instances of pure byte source --------------------
-
-instance PureByteSource B.ByteString where
-instance PureByteSource L.ByteString where
-instance PureByteSource src => PureByteSource [src]
-instance PureByteSource src => PureByteSource (Maybe src)
diff --git a/Raaz/Core/Constants.hs b/Raaz/Core/Constants.hs
deleted file mode 100644
--- a/Raaz/Core/Constants.hs
+++ /dev/null
@@ -1,9 +0,0 @@
--- | Some constants used by raaz.
-module Raaz.Core.Constants
-       ( l1Cache
-       ) where
-import Raaz.Core.Types
-
--- | Typical size of L1 cache. Used for selecting buffer size etc in crypto operations.
-l1Cache :: BYTES Int
-l1Cache = 32768
diff --git a/Raaz/Core/CpuSupports.hs b/Raaz/Core/CpuSupports.hs
deleted file mode 100644
--- a/Raaz/Core/CpuSupports.hs
+++ /dev/null
@@ -1,75 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface #-}
-
--- | This module gives functions that check at runtime whether the
--- underlying cpu supports given features. CPU features are
--- architecture specific. However, functions from this module are
--- guaranteed to be defined always -- they return `False` for
--- incompatible architecture. For example, the flag `avx2` is relevant
--- only for a an X86 architecture. So it is defined false, for say the
--- ARM architecture.
-
-module Raaz.Core.CpuSupports
-       ( sse, sse2, sse3
-       , sse4_1, sse4_2
-       , avx, avx2
-       ) where
-
-import Foreign.C
-import System.IO.Unsafe(unsafePerformIO)
-
-foreign import ccall unsafe "raaz_supports_sse"
-  c_sse :: IO CInt
-
-foreign import ccall unsafe "raaz_supports_sse2"
-  c_sse2 :: IO CInt
-
-foreign import ccall unsafe "raaz_supports_sse3"
-  c_sse3 :: IO CInt
-
-
-foreign import ccall unsafe "raaz_supports_sse4_1"
-  c_sse4_1 :: IO CInt
-
-
-foreign import ccall unsafe "raaz_supports_sse4_2"
-  c_sse4_2 :: IO CInt
-
-foreign import ccall unsafe "raaz_supports_avx"
-  c_avx :: IO CInt
-
-foreign import ccall unsafe "raaz_supports_avx2"
-  c_avx2 :: IO CInt
-
-
-{-# NOINLINE gccBuiltInToBool #-}
-
-gccBuiltInToBool :: IO CInt -> Bool
-gccBuiltInToBool = unsafePerformIO . fmap (>0)
-
--- | Check whether the cpu supports sse extension.
-sse :: Bool
-sse = gccBuiltInToBool c_sse
-
--- | Check whether the cpu supports sse2 extension.
-sse2 :: Bool
-sse2 = gccBuiltInToBool c_sse2
-
--- | Check whether the cpu supports sse3 extension.
-sse3 :: Bool
-sse3 = gccBuiltInToBool c_sse3
-
--- | Check whether the cpu supports sse4_1 extension.
-sse4_1 :: Bool
-sse4_1 = gccBuiltInToBool c_sse4_1
-
--- | Check whether the cpu supports sse-4.2 extension.
-sse4_2 :: Bool
-sse4_2 = gccBuiltInToBool c_sse4_2
-
--- | Check whether the cpu supports avx extension.
-avx :: Bool
-avx = gccBuiltInToBool c_avx
-
--- | Check whether the cpu supports avx2 extension.
-avx2 :: Bool
-avx2 = gccBuiltInToBool c_avx2
diff --git a/Raaz/Core/Encode.hs b/Raaz/Core/Encode.hs
deleted file mode 100644
--- a/Raaz/Core/Encode.hs
+++ /dev/null
@@ -1,86 +0,0 @@
--- | Encoding and decoding values to formats.
-module Raaz.Core.Encode
-       ( -- * Encoding of binary data.
-         -- $encodable$
-         Encodable(..)
-       , Format(..)
-       , encode, decode, translate, unsafeDecode
-       -- ** The base 16 encoding format
-       , Base16
-       , fromBase16, showBase16
-       -- ** Other binary formats.
-       , Base64
-       ) where
-
-import Raaz.Core.Encode.Internal
-import Raaz.Core.Encode.Base16
-import Raaz.Core.Encode.Base64
-
--- $encodable$
---
--- Often one wants to represent cryptographic hashes, secret keys or
--- just binary data into various enocoding formats like base64,
--- hexadecimal etc. This module gives a generic interface for all such
--- operations. There are two main classes that capture the essence of
--- encoding.
---
--- [`Format`:] The class of all types that are encoding formats to binary
---     data. They are all instances of `Show` and `Data.String.IsString` for
---     ease of printing and inclusion in source code.
---
--- [`Encodable`:] The class of all types that can be encoded /into/ binary.
---
--- The combinators `encode` and `decode` allows encoding any instance of `Encodable` to
--- any of the instances of `Format`.
---
--- == Sample code that makes use of Base16 encoding.
---
--- > theAnswer :: LE Word64
--- > theAnswer = 42
--- >
--- > main = do putStr "The answer to life, universe and everything is:"
--- >           print answserInBase16
--- >    where answerInBase16 :: Base16
--- >          answerInBase16 = encode theAnswer
--- >
--- > checkAnswer :: Base16 -> Bool
--- > checkAnswer = maybe False (==theAnswer) . decode
--- >
--- > checkAnswerBS :: ByteString -> Bool
--- > checkAnswerBS = checkAnswer . fromString
---
--- In the above example, @`LE` Word64@, which captures 64-bit unsigned
--- integers is an instance of Encode (but not Word64). The encode
--- combinator then converts in into the type Base16 that is an
--- instance of `Format`. The print then uses the `Show` instance of
--- Base16 to print it as a sequence of hexadecimal
--- characters. Similarly the decode combinator in @checkAnswer@
--- decodes a base16 before comparing with the answer.
---
--- == Liberal @IsString@ instances
---
--- Certain ascii printable formats like Base16 and Base64 have a more
--- liberal `IsString` instance: they typically allow the use of spaces
--- and newline in the input to the `fromString` function . This allows
--- a more readable representation of these types when using the
--- @OverloadedStrings@ extension. See the documentation of the
--- corresponding instance declarations to see what characters are
--- ignored. However, all `Show` instance of formats are strict in the
--- sense that they do not produce any such extraneous characters.
-
--- | Encode in a given format.
-encode :: (Encodable a, Format fmt) => a -> fmt
-encode = encodeByteString . toByteString
-
--- | Decode from a given format. It results in Nothing if there is a
--- parse error.
-decode :: (Format fmt, Encodable a) => fmt -> Maybe a
-decode = fromByteString . decodeFormat
-
--- | The unsafe version of `decode`.
-unsafeDecode :: (Format fmt, Encodable a) => fmt -> a
-unsafeDecode = unsafeFromByteString . decodeFormat
-
--- | Translate from one format to another.
-translate :: (Format fmt1, Format fmt2) => fmt1 -> fmt2
-translate = encodeByteString . decodeFormat
diff --git a/Raaz/Core/Encode/Base16.hs b/Raaz/Core/Encode/Base16.hs
deleted file mode 100644
--- a/Raaz/Core/Encode/Base16.hs
+++ /dev/null
@@ -1,119 +0,0 @@
--- | Base 16 or hexadecimal encoding of objects.
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE CPP                        #-}
-module Raaz.Core.Encode.Base16
-       ( Base16
-       , fromBase16, showBase16
-       ) where
-
-import Data.Char
-import Data.Bits
-import Data.String
-
-import Data.ByteString as B
-import Data.ByteString.Char8 as C8
-import Data.ByteString.Internal (c2w)
-
-import Data.ByteString.Unsafe(unsafeIndex)
-import Data.Monoid
-import Data.Word
-
-import Prelude
-
-import Raaz.Core.Encode.Internal
-
--- | The type corresponding to base-16 or hexadecimal encoding. The
--- `Base16` encoding has a special place in this library: most
--- cryptographic types use `Base16` encoding for their `Show` and
--- `IsString` instance. The combinators `fromBase16` and `showBase16`
--- are exposed mainly to make these definitions easy.
---
-
-newtype Base16 = Base16 {unBase16 :: ByteString}
-#if MIN_VERSION_base(4,11,0)
-                 deriving (Eq, Semigroup, Monoid)
-#else
-                 deriving (Eq, Monoid)
-#endif
-
--- Developers note: Internally base16 just stores the bytestring as
--- is. The conversion happens when we do an encode and decode of
--- actual base16.
---
-
-
-instance Encodable Base16 where
-  toByteString          = hex . unBase16
-
-  fromByteString bs
-    | B.length bs `mod` 2 /= 0 = Nothing
-    | validInput bs            = Just $ Base16 $ unsafeFromHex bs
-    | otherwise                = Nothing
-    where validInput  = C8.all isHexDigit
-  unsafeFromByteString bs
-    | B.length bs `mod` 2 /= 0 = error "base16 encoding is always of even size"
-    | otherwise                = Base16 $ unsafeFromHex bs
-
-instance Show Base16 where
-  show = C8.unpack . toByteString
-
--- | Ignores spaces and ':' (colon).
-instance IsString Base16 where
-  fromString = unsafeFromByteString . C8.filter (not . useless) . fromString
-    where useless c = isSpace c || c == ':'
-
-instance Format Base16 where
-  encodeByteString = Base16
-  {-# INLINE encodeByteString #-}
-
-  decodeFormat     = unBase16
-  {-# INLINE decodeFormat #-}
-
--- Since the encoding to base16 is usually used for user interaction
--- we can afford to be slower here.
---
--- TODO (Liquid Haskell)
---
-{--@ hex :: inp:ByteString -> { bs : ByteString | bslen bs = 2 * bslen inp } @-}
---
-hex :: ByteString -> ByteString
-hex  bs = fst $ B.unfoldrN (2 * B.length bs) gen 0
-    where gen i | rm == 0   = Just (hexDigit $ top4 w, i+1)
-                | otherwise = Just (hexDigit $ bot4 w, i+1)
-            where (idx, rm) = quotRem i 2
-                  w         = unsafeIndex bs idx
-
-
-
-
-
-hexDigit :: Word8 -> Word8
-hexDigit x | x < 10    = c2w '0' + x
-           | otherwise = c2w 'a' + (x - 10)
-
-top4 :: Word8 -> Word8; top4 x  = x `shiftR` 4
-bot4 :: Word8 -> Word8; bot4 x  = x  .&. 0x0F
-
-{-@ unsafeFromHex :: {bs : ByteString | (bslen bs) mod 2 == 0 } -> ByteString @-}
-unsafeFromHex :: ByteString -> ByteString
-unsafeFromHex bs = fst $ B.unfoldrN len gen 0
-  where len   = B.length bs `quot` 2
-        gen i = Just (shiftL w0 4 .|. w1, i + 1)
-          where w0 = fromHexWord $ unsafeIndex bs (2 * i)
-                w1 = fromHexWord $ unsafeIndex bs (2 * i + 1)
-        fromHexWord x
-          | c2w '0' <= x && x <= c2w '9' = x - c2w '0'
-          | c2w 'a' <= x && x <= c2w 'f' = 10 + (x - c2w 'a')
-          | c2w 'A' <= x && x <= c2w 'F' = 10 + (x - c2w 'A')
-          | otherwise                    = error "bad base16 character"
-
-
--- | Base16 variant of `fromString`. Useful in definition of
--- `IsString` instances as well as in cases where the default
--- `IsString` instance does not parse from a base16 encoding.
-fromBase16 :: Encodable a => String -> a
-fromBase16 = unsafeFromByteString . unBase16 . fromString
-
--- | Base16 variant of `show`.
-showBase16 :: Encodable a => a -> String
-showBase16 = show . Base16 . toByteString
diff --git a/Raaz/Core/Encode/Base64.hs b/Raaz/Core/Encode/Base64.hs
deleted file mode 100644
--- a/Raaz/Core/Encode/Base64.hs
+++ /dev/null
@@ -1,182 +0,0 @@
--- | Base 64 encoding of objects.
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE CPP                        #-}
-module Raaz.Core.Encode.Base64( Base64 ) where
-
-import Data.Char
-import Data.Bits
-import Data.String
-
-import Data.ByteString as B
-import Data.ByteString.Char8 as C8
-import Data.ByteString.Internal (c2w, w2c)
-
-import Data.ByteString.Unsafe(unsafeIndex)
-import Data.Monoid
-import Data.Word
-import Raaz.Core.Encode.Internal
-
-
--- | The type corresponding to the standard padded base-64 binary
--- encoding.
-newtype Base64 = Base64 {unBase64 :: ByteString}
-#if MIN_VERSION_base(4,11,0)
-                 deriving (Eq, Semigroup, Monoid)
-#else
-                 deriving (Eq, Monoid)
-#endif
-
-
--- Developers note: Internally base16 just stores the bytestring as
--- is. The conversion happens when we do an encode and decode of
--- actual base16.
-
-instance Encodable Base64 where
-  toByteString          = toB64 . unBase64
-
-  fromByteString bs
-    | B.null bs                = Just $ Base64 B.empty
-    | B.length bs `rem` 4 /= 0 = Nothing
-    | okeyPad                  = Just $ Base64 $ unsafeFromB64 bs
-    | otherwise                = Nothing
-    where padPart     = C8.dropWhile isB64Char bs
-          okeyPad     = padPart == C8.empty || padPart == C8.singleton '=' || padPart == C8.pack "=="
-          isB64Char c = isAlpha c || isDigit c || c == '+' || c == '/'
-
-
-  unsafeFromByteString bs | B.null bs = Base64 B.empty
-                          | otherwise = Base64 $ unsafeFromB64 bs
-
-
-instance Show Base64 where
-  show = C8.unpack . toByteString
-
--- | Ignores spaces and newlines.
-instance IsString Base64 where
-  fromString = unsafeFromByteString . C8.filter (not . isSpace) . fromString
-
-instance Format Base64 where
-  encodeByteString = Base64
-  {-# INLINE encodeByteString #-}
-
-  decodeFormat     = unBase64
-  {-# INLINE decodeFormat #-}
-
-
-
-------------- Base 64 encoding -------------------------
-
--- NOTE: The topN functions ensure that the top N bits of a word are present
--- in the least N significant bits. The botN ensures that there
-
-top6 :: Word8 -> Word8; bot2 :: Word8 -> Word8
-top4 :: Word8 -> Word8; bot4 :: Word8 -> Word8
-top2 :: Word8 -> Word8; bot6 :: Word8 -> Word8
-
-top6 w = w `shiftR` 2; bot2 w = w .&. 0x03
-top4 w = w `shiftR` 4; bot4 w = w .&. 0x0F
-top2 w = w `shiftR` 6; bot6 w = w .&. 0x3F
-
---------------- Combining bytes -----------------------------------
-
-byte0 :: Word8 -> Word8
-byte1 :: Word8 -> Word8 -> Word8
-byte2 :: Word8 -> Word8 -> Word8
-byte3 :: Word8 -> Word8
-pad   :: Word8
-
-
-byte0     = b64 . top6
-byte1 t p = b64 $ shiftL (bot2 p) 4 .|. top4 t
-byte2 t p = b64 $ shiftL (bot4 p) 2 .|. top2 t
-byte3     = b64 . bot6
-pad       = c2w '='
-
--- | Encoding word.
-b64 :: Word8 -> Word8
-b64 w | 0  <= w  && w <= 25 = c2w 'A' + w
-      | 26 <= w  && w <= 51 = c2w 'a' + w - 26
-      | 52 <= w  && w <= 61 = c2w '0' + w - 52
-      | w == 62             = c2w '+'
-      | w == 63             = c2w '/'
-      | otherwise           = error "oops: b64"
-
-
-unB64 :: Word8 -> Word8
-unB64 w | c2w 'A' <= w && w <= c2w 'Z' = w - c2w 'A'
-        | c2w 'a' <= w && w <= c2w 'z' = w - c2w 'a' + 26
-        | c2w '0' <= w && w <= c2w '9' = w - c2w '0' + 52
-        | w == c2w '+'                 = 62
-        | w == c2w '/'                 = 63
-        | otherwise                    = error $ "oops unB64:" ++ [w2c w]
-
-
-
-
--- Since the encoding to base16 is usually used for user interaction
--- we can afford to be slower here.
-
--- TODO (Liquid Haskell)
---
-{--@ toB64 :: ByteString -> { bs : ByteString | (bslen bs) mod 4 == 0 @-}
---
-toB64 :: ByteString -> ByteString
-toB64 bs = fst (B.unfoldrN (4*n) gen 0) <> padding
-    where gen i    = Just (byte i, i + 1)
-          at blk i = unsafeIndex bs $ 3 * blk + i
-
-          byte i = case r of
-            0 -> byte0          $ at q 0
-            1 -> byte1 (at q 1) $ at q 0
-            2 -> byte2 (at q 2) $ at q 1
-            3 -> byte3          $ at q 2
-            _ -> error "base64 bad index"
-            where (q, r) = quotRem i 4
-
-          (n,p) = B.length bs `quotRem` 3
-
-          padding = case p of
-            0 -> mempty
-            1 -> B.pack [ byte0   $ at n 0
-                        , byte1 0 $ at n 0
-                        , pad, pad
-                        ]
-            2 -> B.pack [ byte0          $ at n 0
-                        , byte1 (at n 1) $ at n 0
-                        , byte2 0        $ at n 1
-                        , pad
-                        ]
-            _ -> error "base64 pad bad index"
-
--- Notes: Merge is used to convert from base64 digits, which are
--- words of 6-bits.
-merg0 :: Word8 -> Word8 -> Word8
-merg1 :: Word8 -> Word8 -> Word8
-merg2 :: Word8 -> Word8 -> Word8
-merg0 a b = (unB64 a `shiftL` 2) .|. top4 (unB64 b)
-merg1 a b = (unB64 a `shiftL` 4) .|. top6 (unB64 b)
-merg2 a b = (unB64 a `shiftL` 6) .|. unB64 b
-
-
-unsafeFromB64 :: ByteString -> ByteString
-unsafeFromB64 bs = fst (B.unfoldrN (3*n) gen 0) <> unPad
-  where n         = B.length bs `quot` 4 - 1
-        gen i     = Just (byte i, i + 1)
-        at blk i  = unsafeIndex bs $ 4 * blk + i
-
-        byte i    = case r of
-          0 -> merg0 (at q 0) $ at q 1
-          1 -> merg1 (at q 1) $ at q 2
-          2 -> merg2 (at q 2) $ at q 3
-          _ -> error "base64 bad index"
-          where (q, r) = quotRem i 3
-
-        unPad
-          | at n 2 == c2w '=' = B.singleton $ merg0 (at n 0) $ at n 1
-          | at n 3 == c2w '=' = B.pack [ merg0 (at n 0) $ at n 1
-                                       , merg1 (at n 1) $ at n 2
-                                       ]
-          | otherwise         = B.pack [ merg0 (at n 0) $ at n 1
-                                       , merg1 (at n 1) $ at n 2
-                                       , merg2 (at n 2) $ at n 3
-                                       ]
diff --git a/Raaz/Core/Encode/Internal.hs b/Raaz/Core/Encode/Internal.hs
deleted file mode 100644
--- a/Raaz/Core/Encode/Internal.hs
+++ /dev/null
@@ -1,140 +0,0 @@
-{-# LANGUAGE FlexibleInstances #-}
-{-# LANGUAGE DefaultSignatures #-}
-{-# LANGUAGE FlexibleContexts  #-}
-
--- | Internal module that has the encode class and some utility functions.
-module Raaz.Core.Encode.Internal
-       ( Encodable(..), Format(..)
-       ) where
-
-import Data.Maybe
-
-import           Data.ByteString              (ByteString)
-import           Data.ByteString.Internal     (unsafeCreate)
-import           Data.String
-import           Data.Word
-import           Foreign.Ptr
-import Prelude hiding               (length)
-import System.IO.Unsafe   (unsafePerformIO)
-
-import Raaz.Core.Types.Endian
-import Raaz.Core.Types.Pointer
-import Raaz.Core.Util.ByteString(length, withByteString)
-
-
--- | The type class `Encodable` captures all the types that can be
--- encoded into a stream of bytes. For a user defined type say @Foo@,
--- defining an instance `Encodable` is all that is required to make
--- use of `encode` and `decode` for any of the supported encoding
--- formats (i.e. instances of the class `Format`).
---
--- Minimum complete definition for this class is `toByteString` and
--- `fromByteString`. Instances of `EndianStore` have default
--- definitions for both these functions and hence a trivial instance
--- declaration is sufficient for such types.
---
--- > newtype Foo = Foo (LE Word64) deriving (Storable, EndianStore)
--- >
--- > instance EndianStore Foo where
--- >   ...
--- >
--- > instance Encodable Foo
--- >
---
--- In particular, all the endian encoded versions of Haskell's word,
--- i.e types like @`LE` Word32@, @`LE` Word64@ etc, are instances of
--- `Encodable`. Note that the corresponding plain type is /not/ an
--- instance of `Encodable` because encoding of say `Word32` without
--- specifying whether the endianness is meaningless.
---
-class Encodable a where
-  -- | Convert stuff to bytestring
-  toByteString          :: a           -> ByteString
-
-  -- | Try parsing back a value. Returns nothing on failure.
-  fromByteString        :: ByteString  -> Maybe a
-
-  -- | Unsafe version of `fromByteString`
-  unsafeFromByteString  :: ByteString  -> a
-
-  default toByteString :: EndianStore a => a -> ByteString
-  toByteString w    = unsafeCreate (fromEnum $ sizeOf w) putit
-    where putit ptr = store (castPtr ptr) w
-
-
-  default fromByteString :: EndianStore a => ByteString -> Maybe a
-  fromByteString bs  | sizeOf proxy == length bs   = Just w
-                     | otherwise                   = Nothing
-         where w     = unsafePerformIO $ withByteString bs (load . castPtr)
-               proxy = undefined `asTypeOf` w
-
-  unsafeFromByteString = fromMaybe (error "fromByteString error") . fromByteString
-
-instance Encodable Word8
-instance Encodable (LE Word32)
-instance Encodable (LE Word64)
-instance Encodable (BE Word32)
-instance Encodable (BE Word64)
-
-instance Encodable ByteString where
-  toByteString         = id
-  {-# INLINE toByteString #-}
-  fromByteString       = Just
-  {-# INLINE fromByteString #-}
-  unsafeFromByteString = id
-  {-# INLINE unsafeFromByteString #-}
-
-instance Encodable a => Encodable (BITS a) where
-  toByteString (BITS a) = toByteString a
-  fromByteString        = fmap BITS . fromByteString
-  unsafeFromByteString  = BITS      . unsafeFromByteString
-
-
-
-instance Encodable a => Encodable (BYTES a) where
-  toByteString         (BYTES a) = toByteString a
-  fromByteString        = fmap BYTES . fromByteString
-  unsafeFromByteString  = BYTES      . unsafeFromByteString
-
-
-
--- | A binary format is a representation of binary data often in
--- printable form. We distinguish between various binary formats at
--- the type level and each supported format corresponds to an instance
--- of the the class `Format`. The `encodeByteString` and
--- `decodeFormat` are required to satisfy the laws
---
--- > decodeFormat . encodeByteString = id
---
--- For type safety, the formats themselves are opaque types and hence
--- it is not possible to obtain the underlying binary data directly.
--- We require binary formats to be instances of the class `Encodable`,
--- with the combinators `toByteString` and `fromByteString` of the
--- `Encodable` class performing the actual encoding and decoding.
---
--- Instances of `Format` are required to be instances of `Show` and so
--- that the encoded format can be easily printed. They are also
--- required to be instances of `IsString` so that they can be easily
--- represented in Haskell source using the @OverloadedStrings@
--- extension.  However, be careful when using this due to the fact
--- that invalid encodings can lead to runtime errors.
---
-class (IsString fmt, Show fmt, Encodable fmt) => Format fmt where
-
-  -- | Encode binary data into the format. The return type gurantees
-  -- that any binary data can indeed be encoded into a format.
-  encodeByteString :: ByteString -> fmt
-
-  -- | Decode the format to its associated binary
-  -- representation. Notice that this function always succeeds: we
-  -- assume that elements of the type `fmt` are valid encodings and
-  -- hence the return type is `ByteString` instead of @`Maybe`
-  -- ByteString@.
-  decodeFormat     :: fmt        -> ByteString
-
--- | Bytestring itself is an encoding format (namely binary format).
-instance Format ByteString where
-  encodeByteString = id
-  {-# INLINE encodeByteString #-}
-  decodeFormat     = id
-  {-# INLINE decodeFormat     #-}
diff --git a/Raaz/Core/Memory.hs b/Raaz/Core/Memory.hs
deleted file mode 100644
--- a/Raaz/Core/Memory.hs
+++ /dev/null
@@ -1,447 +0,0 @@
-{-|
-
-The memory subsystem associated with raaz.
-
-
-__Warning:__ This module is pretty low level and should not be needed in typical
-use cases. Only developers of protocols and primitives might have a
-reason to look into this module.
-
--}
-
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE GADTs                      #-}
-{-# LANGUAGE RankNTypes                 #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE CPP                        #-}
-
-module Raaz.Core.Memory
-       (
-       -- * The Memory subsystem.
-       -- $memorysubsystem$
-
-       -- ** Memory elements.
-         Memory(..), VoidMemory, copyMemory
-       -- *** Initialisation and Extraction.
-       -- $init-extract$
-       , Initialisable(..), Extractable(..)
-       , InitialisableFromBuffer(..), ExtractableToBuffer(..)
-       -- *** A basic memory cell.
-       , MemoryCell, withCellPointer, getCellPointer
-
-       -- ** Memory threads.
-       , MemoryThread(..), doIO , getMemory, modify, execute
-       , MT
-       -- **** Some low level `MT` actions.
-
-       , liftPointerAction
-
-       -- ** Memory allocation
-       ,  Alloc, pointerAlloc
-       ) where
-
-import           Control.Applicative
-import           Control.Monad.IO.Class
-
-#if MIN_VERSION_base(4,9,0)
-import           Data.Kind
-#endif
-
-import           Foreign.Storable            ( Storable )
-import           Foreign.Ptr                 ( castPtr, Ptr )
-import           Raaz.Core.MonoidalAction
-import           Raaz.Core.Transfer
-import           Raaz.Core.Types
-
--- $memorysubsystem$
---
--- Cryptographic operations often need to keep sensitive information
--- like private keys in its memory space. Such sensitive information
--- can leak to the external would if the memory where the data is
--- stored is swapped out to a disk. What makes this particularly
--- dangerous is that the data can reside on the disk almost
--- permanently and might even survive when the hardware is
--- scrapped. The primary purpose of the memory subsystem is to provide
--- a way to allocate and manage /secure memory/, i.e. memory that will
--- not be swapped out as long as the memory is used and will be wiped
--- clean after use. It consists of the following components:
---
--- [The `Memory` type class:] A memory element is some type that holds
--- an internal buffer inside it.
---
--- [The `Alloc` type:] Memory elements need to be allocated and this
--- is involves a lot of low lever pointer arithmetic. The `Alloc`
--- types gives a high level interface for memory allocation. For a
--- memory type `mem`, the type `Alloc mem` can be seen as the
--- _allocation strategy_ for mem. For example, one of the things that
--- it keeps track of is the space required to create an memory element
--- of type `mem`. There is a natural applicative instance for `Alloc`
--- which helps build the allocation strategy for a compound memory
--- type from its components in a modular fashion _without_ explicit
--- size calculation or offset computation.
---
--- [`MemoryThread`s:] Instances of this class are actions that use
--- some kind of memory elements inside it. Such a thread can be run
--- using the combinator `securely` or the combinator `insecurely`. If
--- one use the combinator `securely`, then the allocation of the
--- memory element to be used by the action is done using a locked
--- memory pool which is wiped clean before de-allocation.
-
--- $init-extract$
---
--- Memory elements often needs to be initialised. Similarly data needs
--- to be extracted out of memory. An instance declaration
--- @`Initialisable` mem a@ for the memory type @mem@ indicates that it
--- can be initialised with the pure value @a@. Similary, if values of
--- type @b@ can be extracted out of a memory element @mem@, we can
--- indicate it with an instance of @`Extractable` mem a@.
---
--- There is an inherent danger in initialising and extracting pure
--- values out of memory. Pure values are stored on the Haskell heap
--- and hence can be swapped out. Consider a memory element @mem@ that
--- stores some sensitive information, say for example the unencrypted
--- private key. Suppose we extract this key out of the memory element
--- as a pure value before its encryption and storage into the key
--- file. It is likely that the key is swapped out to the disk as the
--- extracted key is part of the the haskell heap.
---
--- The `InitialiseFromBuffer` (`ExtractableToBuffer`) class gives an
--- interface for reading from (writing to) buffers directly minimising
--- the chances of inadvertent exposure of sensitive information from
--- the Haskell heap due to swapping.
-
-
--- | An action of type @`MT` mem a@ is an action that uses internally
--- a single memory object of type @mem@ and returns a result of type
--- @a@. All the actions are performed on a single memory element and
--- hence the side effects persist. It is analogues to the @ST@ monad.
-newtype MT mem a = MT { unMT :: mem -> IO a }
-
-
-instance Functor (MT mem) where
-  fmap f mst = MT $ \ m -> f <$> unMT mst m
-
-instance Applicative (MT mem) where
-  pure       = MT . const . pure
-  mf <*> ma  = MT $ \ m -> unMT mf m <*> unMT ma m
-
-instance Monad (MT mem) where
-  return    =  MT . const . return
-  ma >>= f  =  MT runIt
-    where runIt mem = unMT ma mem >>= \ a -> unMT (f a) mem
-
--- | __WARNING:__ do not lift a secure memory action.
-instance MonadIO (MT mem) where
-  liftIO = MT . const
-
--- | A class that captures abstract "memory threads". A memory thread
--- can either be run `securely` or `insecurely`. Pure IO actions can
--- be run inside a memory thread using the @runIO@.  However, the IO
--- action that is being run /must not/ directly or indirectly run a
--- `secure` action ever. In particular, the following code is bad.
---
--- > -- BAD EXAMPLE: DO NOT USE.
--- > runIO $ securely $ foo
--- >
---
--- On the other hand the following code is fine
---
--- >
--- > runIO $ insecurely $ someMemoryAction
--- >
---
--- As to why this is dangerous, it has got to do with the fact that
--- @mlock@ and @munlock@ do not nest correctly. A single @munlock@ can
--- unlock multiple calls of @mlock@ on the same page.  Whether a given
--- @IO@ action unlocks memory is difficult to keep track of; for all
--- you know, it might be a FFI call that does an @memunlock@. Hence,
--- currently there is no easy way to enforce this.
---
-
-
-#if MIN_VERSION_base(4,9,0)
-class MemoryThread (mT :: Type -> Type -> Type) where
-#else
-class MemoryThread (mT :: * -> * -> *) where
-#endif
-
-
-  -- | Run a memory action with the internal memory allocated from a
-  -- locked memory buffer. This memory buffer will never be swapped
-  -- out by the operating system and will be wiped clean before
-  -- releasing.
-  --
-  -- Memory locking is an expensive operation and usually there would be
-  -- a limit to how much locked memory can be allocated. Nonetheless,
-  -- actions that work with sensitive information like passwords should
-  -- use this to run an memory action.
-  securely   :: Memory mem => mT mem a -> IO a
-
-  -- | Run a memory action with the internal memory used by the action
-  -- being allocated from unlocked memory. Use this function when you
-  -- work with data that is not sensitive to security considerations
-  -- (for example, when you want to verify checksums of files).
-  insecurely :: Memory mem => mT mem a -> IO a
-
-  -- | Lift an actual memory thread.
-  liftMT :: MT mem a -> mT mem a
-
-
-  -- | Combinator that allows us to run a memory action on a
-  -- sub-memory element. A sub-memory of @submem@ of a memory element
-  -- @mem@ is given by a projection @proj : mem -> submem@. The action
-  -- @onSubMemory proj@ lifts the a memory thread on the sub element
-  -- to the compound element.
-  --
-  onSubMemory :: (mem -> submem) -> mT submem a -> mT mem a
-
-
-instance MemoryThread MT where
-  securely               = withSecureMemory . unMT
-  insecurely             = withMemory . unMT
-  liftMT                 = id
-  onSubMemory proj mtsub = MT $ unMT mtsub . proj
-
-------------- Lifting pointer actions -----------------------------
-
--- | Run a given memory action in the memory thread.
-execute :: MemoryThread mT => (mem -> IO a) -> mT mem a
-execute = liftMT . MT
-
--- | Perform an IO action inside the memory thread.
-doIO :: MemoryThread mT => IO a -> mT mem a
-doIO = execute . const
-
--- | A pointer action inside a monad @m@ is some function that takes a
--- pointer action of type @Pointer -> m a@ and supplies it with an
--- appropriate pointer. In particular, memory allocators are pointer
--- actions.
-type PointerAction m a b = (Pointer -> m a) -> m b
-
--- | An IO allocator can be lifted to the memory thread level as follows.
-liftPointerAction :: PointerAction IO a b -> PointerAction (MT mem) a b
-liftPointerAction allocator mtAction
-  = execute $ \ mem -> allocator (\ ptr -> unMT (mtAction ptr) mem)
-
--- TODO: This is a very general pattern needs more exploration.
-
--- | Get the underlying memory element of the memory thread.
-getMemory :: MemoryThread mT => mT mem mem
-getMemory = execute return
-
------------------------- A memory allocator -----------------------
-
-
-type AllocField = Field Pointer
-
--- | A memory allocator for the memory type @mem@. The `Applicative`
--- instance of @Alloc@ can be used to build allocations for
--- complicated memory elements from simpler ones.
-type Alloc mem = TwistRF AllocField (BYTES Int) mem
-
--- | Make an allocator for a given memory type.
-makeAlloc :: LengthUnit l => l -> (Pointer -> mem) -> Alloc mem
-makeAlloc l memCreate = TwistRF (WrapArrow memCreate) $ atLeast l
-
--- | Allocates a buffer of size @l@ and returns the pointer to it pointer.
-pointerAlloc :: LengthUnit l => l -> Alloc Pointer
-pointerAlloc l = makeAlloc l id
-
----------------------------------------------------------------------
-
--- | Any cryptographic primitives use memory to store stuff. This
--- class abstracts all types that hold some memory. Cryptographic
--- application often requires securing the memory from being swapped
--- out (think of memory used to store private keys or passwords). This
--- abstraction supports memory securing. If your platform supports
--- memory locking, then securing a memory will prevent the memory from
--- being swapped to the disk. Once secured the memory location is
--- overwritten by nonsense before being freed.
---
--- While some basic memory elements like `MemoryCell` are exposed from
--- the library, often we require compound memory objects built out of
--- simpler ones. The `Applicative` instance of the `Alloc` can be made
--- use of in such situation to simplify such instance declaration as
--- illustrated in the instance declaration for a pair of memory
--- elements.
---
--- > instance (Memory ma, Memory mb) => Memory (ma, mb) where
--- >
--- >    memoryAlloc             = (,) <$> memoryAlloc <*> memoryAlloc
--- >
--- >    unsafeToPointer (ma, _) =  unsafeToPointer ma
---
-class Memory m where
-
-  -- | Returns an allocator for this memory.
-  memoryAlloc     :: Alloc m
-
-  -- | Returns the pointer to the underlying buffer.
-  unsafeToPointer :: m -> Pointer
-
--- | A memory element that holds nothing.
-data VoidMemory = VoidMemory { unVoidMemory :: Pointer  }
-
-instance Memory VoidMemory where
-  memoryAlloc      = makeAlloc (0 :: BYTES Int) VoidMemory
-  unsafeToPointer  = unVoidMemory
-
-
-instance ( Memory ma, Memory mb ) => Memory (ma, mb) where
-    memoryAlloc             = (,) <$> memoryAlloc <*> memoryAlloc
-    unsafeToPointer (ma, _) =  unsafeToPointer ma
-
-instance ( Memory ma
-         , Memory mb
-         , Memory mc
-         )
-         => Memory (ma, mb, mc) where
-  memoryAlloc              = (,,)
-                             <$> memoryAlloc
-                             <*> memoryAlloc
-                             <*> memoryAlloc
-  unsafeToPointer (ma,_,_) =  unsafeToPointer ma
-
-instance ( Memory ma
-         , Memory mb
-         , Memory mc
-         , Memory md
-         )
-         => Memory (ma, mb, mc, md) where
-  memoryAlloc                = (,,,)
-                               <$> memoryAlloc
-                               <*> memoryAlloc
-                               <*> memoryAlloc
-                               <*> memoryAlloc
-
-  unsafeToPointer (ma,_,_,_) =  unsafeToPointer ma
-
--- | Copy data from a given memory location to the other. The first
--- argument is destionation and the second argument is source to match
--- with the convention followed in memcpy.
-copyMemory :: Memory m => Dest m -- ^ Destination
-                       -> Src  m -- ^ Source
-                       -> IO ()
-copyMemory dmem smem = memcpy (unsafeToPointer <$> dmem) (unsafeToPointer <$> smem) sz
-  where sz       = twistMonoidValue $ getAlloc smem
-        getAlloc :: Memory m => Src m -> Alloc m
-        getAlloc _ = memoryAlloc
-
--- | Perform an action which makes use of this memory. The memory
--- allocated will automatically be freed when the action finishes
--- either gracefully or with some exception. Besides being safer,
--- this method might be more efficient as the memory might be
--- allocated from the stack directly and will have very little GC
--- overhead.
-withMemory   :: Memory m => (m -> IO a) -> IO a
-withMemory   = withM memoryAlloc
-  where withM :: Alloc m -> (m -> IO a) -> IO a
-        withM alctr action = allocaBuffer sz actualAction
-          where sz                 = twistMonoidValue alctr
-                getM               = computeField $ twistFunctorValue alctr
-                wipeIt cptr        = memset cptr 0 sz
-                actualAction  cptr = action (getM cptr) <* wipeIt cptr
-
-
--- | Similar to `withMemory` but allocates a secure memory for the
--- action. Secure memories are never swapped on to disk and will be
--- wiped clean of sensitive data after use. However, be careful when
--- using this function in a child thread. Due to the daemonic nature
--- of Haskell threads, if the main thread exists before the child
--- thread is done with its job, sensitive data can leak. This is
--- essentially a limitation of the bracket which is used internally.
-withSecureMemory :: Memory m => (m -> IO a) -> IO a
-withSecureMemory = withSM memoryAlloc
-  where -- withSM :: Memory m => Alloc m -> (m -> IO a) -> IO a
-        withSM alctr action = allocaSecure sz $ action . getM
-          where sz     = twistMonoidValue alctr
-                getM   = computeField $ twistFunctorValue alctr
-
-
------------------------ Initialising and Extracting stuff ----------------------
-
--- | Memories that can be initialised with a pure value. The pure
--- value resides in the Haskell heap and hence can potentially be
--- swapped. Therefore, this class should be avoided if compromising
--- the initialisation value can be dangerous. Consider using
--- `InitialiseableFromBuffer`
---
-
-class Memory m => Initialisable m v where
-  initialise :: v -> MT m ()
-
--- | Memories from which pure values can be extracted. Once a pure value is
--- extracted,
-class Memory m => Extractable m v where
-  extract  :: MT m v
-
-
--- | Apply the given function to the value in the cell. For a function @f :: b -> a@,
--- the action @modify f@ first extracts a value of type @b@ from the
--- memory element, applies @f@ to it and puts the result back into the
--- memory.
---
--- > modify f = do b          <- extract
--- >               initialise $  f b
---
-modify :: (Initialisable mem a, Extractable mem b, MemoryThread mT ) =>  (b -> a) -> mT mem ()
-modify f = liftMT $ extract >>= initialise . f
-
--- | A memory type that can be initialised from a pointer buffer. The initialisation performs
--- a direct copy from the input buffer and hence the chances of the
--- initialisation value ending up in the swap is minimised.
-class Memory m => InitialisableFromBuffer m where
-  initialiser :: m -> ReadM (MT m)
-
--- | A memory type that can extract bytes into a buffer. The extraction will perform
--- a direct copy and hence the chances of the extracted value ending
--- up in the swap space is minimised.
-class Memory m => ExtractableToBuffer m where
-  extractor :: m -> WriteM (MT m)
-
---------------------- Some instances of Memory --------------------
-
--- | A memory location to store a value of type having `Storable`
--- instance.
-newtype MemoryCell a = MemoryCell { unMemoryCell :: Ptr a }
-
-
-instance Storable a => Memory (MemoryCell a) where
-
-  memoryAlloc = allocator undefined
-    where allocator :: Storable b => b -> Alloc (MemoryCell b)
-          allocator b = makeAlloc (alignedSizeOf b) $ MemoryCell . castPtr
-
-  unsafeToPointer  = castPtr . unMemoryCell
-
--- | The location where the actual storing of element happens. This
--- pointer is guaranteed to be aligned to the alignment restriction of @a@
-actualCellPtr :: Storable a => MemoryCell a -> Ptr a
-actualCellPtr = nextAlignedPtr . unMemoryCell
-
--- | Work with the underlying pointer of the memory cell. Useful while
--- working with ffi functions.
-withCellPointer :: (MemoryThread mT, Storable a) => (Ptr a -> IO b) -> mT (MemoryCell a) b
-{-# INLINE withCellPointer #-}
-withCellPointer action = execute $ action . actualCellPtr
-
-
--- | Get the pointer associated with the given memory cell.
-getCellPointer :: (MemoryThread mT, Storable a) => mT (MemoryCell a) (Ptr a)
-{-# INLINE getCellPointer #-}
-getCellPointer = liftMT $ actualCellPtr <$> getMemory
-
-instance Storable a => Initialisable (MemoryCell a) a where
-  initialise a = execute $ flip pokeAligned a . unMemoryCell
-  {-# INLINE initialise #-}
-
-instance Storable a => Extractable (MemoryCell a) a where
-  extract = execute $ peekAligned . unMemoryCell
-  {-# INLINE extract #-}
-
-instance EndianStore a => InitialisableFromBuffer (MemoryCell a) where
-  initialiser  = readInto 1 . destination . actualCellPtr
-
-instance EndianStore a => ExtractableToBuffer (MemoryCell a) where
-  extractor  = writeFrom 1 . source . actualCellPtr
diff --git a/Raaz/Core/MonoidalAction.hs b/Raaz/Core/MonoidalAction.hs
deleted file mode 100644
--- a/Raaz/Core/MonoidalAction.hs
+++ /dev/null
@@ -1,243 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE CPP                        #-}
-
--- | A module that abstracts out monoidal actions.
-module Raaz.Core.MonoidalAction
-       ( -- * Monoidal action
-         -- $basics$
-         LAction (..), Distributive, SemiR (..), (<++>), semiRSpace, semiRMonoid
-         -- ** Monoidal action on functors
-       , LActionF(..), DistributiveF, TwistRF(..), twistFunctorValue, twistMonoidValue
-         -- * Fields
-         -- $fields$
-       , FieldA, FieldM, Field, computeField, runFieldM, liftToFieldM
-       ) where
-
-import Control.Arrow
-import Control.Applicative
-import Data.Monoid
-
------------------- Actions and Monoidal actions -----------------------
-
--- $basics$
---
--- Consider any instance @l@ of a length unit as a monoid under
--- addition. Length units acts on pointers by displacing them. It
--- turns out that this action is crucial in abstracting out many
--- pointer manipulations in our library. In particular, Applicative
--- parsers, memory allocators and data serialisers can be abstractly
--- captured using this action.
---
--- We start with setting up some terminology.  Our setting here is a
--- space of points (captured by the type @space@) on which a monoid
--- (captured by the type @m@) acts. The space which we are most
--- interested in is the space of `CryptoPtr` and the monoid that act
--- on it can be any instance of `LengthUnit` as described above.
---
--- In this module, we consider /left/ actions of monoids, although
--- right actions can be analogously defined as well. For applications
--- we have in mind, namely for parsers etc, it is sufficient to
--- restrict our attention to left actions.  The left action will be
--- written in multiplicative notation with the operator `<.>` being the
--- multiplication.
-
--- | A monoid @m@ acting on the left of a space. Think of a left
--- action as a multiplication with the monoid. It should satisfy the
--- law:
---
--- > 1 <.> p = p                         -- identity
--- > a <> b <.> p  = a <.> b <.> p   -- successive displacements
---
-class Monoid m => LAction m space where
-  (<.>) :: m -> space -> space
-
-
-infixr 5 <.>
-
--- | An alternate symbol for <> more useful in the additive context.
-(<++>) :: Monoid m => m -> m -> m
-(<++>) = (<>)
-
-infixr 5 <++>
-
-
--- | Uniform action of a monoid on a functor. The laws that should
--- be satisfied are:
---
--- > 1 <<.>> fx  = fx
--- > (a <> b) <<.>> fx  = a . (b <<.>> fx)
--- > m <<.>> fmap f u = fmap f (m <<.>> u)   -- acts uniformly
-class (Monoid m, Functor f) => LActionF m f where
-  (<<.>>) :: m -> f a -> f a
-
-infixr 5 <<.>>
-
----------------------- The semi-direct products ------------------------
-
--- | A left-monoid action on a monoidal-space, i.e. the space on which
--- the monoid acts is itself a monoid, is /distributive/ if it
--- satisfies the law:
---
--- > a <.> p <> q  = (a <.> p) <> (a <.> q).
---
--- The above law implies that every element @m@ is a monoid
--- homomorphism.
-class (LAction m space, Monoid space) => Distributive m space
-
--- | The semidirect product Space ⋊ Monoid. For monoids acting on
--- monoidal spaces distributively the semi-direct product is itself a
--- monoid. It turns out that data serialisers can essentially seen as
--- a semidirect product.
-data SemiR space m = SemiR space !m
-
-#if MIN_VERSION_base(4,11,0)
-
-instance Distributive m space => Semigroup (SemiR space m) where
-  (<>) (SemiR x a) (SemiR y b) = SemiR (x `mappend`  (a <.> y))  (a `mappend` b)
-
-#endif
-
-instance Distributive m space => Monoid (SemiR space m) where
-
-  mempty = SemiR mempty mempty
-  {-# INLINE mempty #-}
-
-  mappend (SemiR x a) (SemiR y b) = SemiR (x <++>  a <.> y)  (a <> b)
-  {-# INLINE mappend #-}
-
-  mconcat = foldr mappend mempty
-  {-# INLINE mconcat #-}
-
--- | From the an element of semi-direct product Space ⋊ Monoid return
--- the point.
-semiRSpace :: SemiR space m -> space
-{-# INLINE semiRSpace #-}
-semiRSpace (SemiR space _) = space
-
--- | From the an element of semi-direct product Space ⋊ Monoid return
--- the monoid element.
-semiRMonoid :: SemiR space m -> m
-{-# INLINE semiRMonoid #-}
-semiRMonoid (SemiR _ m) =  m
-
---------------------------- Twisted functors ----------------------------
-
-
-
--- | The generalisation of distributivity to applicative
--- functors. This generalisation is what allows us to capture
--- applicative functors like parsers. For an applicative functor, and
--- a monoid acting uniformly on it, we say that the action is
--- distributive if the following laws are satisfied:
---
--- > m <<.>> (pure a) = pure a            -- pure values are stoic
--- > m <<.>> (a <*> b) = (m <<.>> a) <*> (m <<.>> b)  -- dist
-class (Applicative f, LActionF m f) => DistributiveF m f
-
--- | The twisted functor is essentially a generalisation of
--- semi-direct product to applicative functors.
-data TwistRF f m a = TwistRF (f a) !m
-
--- | Get the underlying functor value.
-twistFunctorValue :: TwistRF f m a -> f a
-twistFunctorValue (TwistRF fa _) = fa
-{-# INLINE twistFunctorValue #-}
-
--- | Get the underlying monoid value.
-twistMonoidValue :: TwistRF f m a -> m
-twistMonoidValue (TwistRF _ m) =  m
-{-# INLINE twistMonoidValue #-}
-
-instance Functor f => Functor (TwistRF f m) where
-  fmap f (TwistRF x m) = TwistRF (fmap f x) m
-
--- Proof of functor laws.
---
--- fmap id (TwistRF (x, m)) = TwistRF (fmap id x, m)
---                          = TwistRF (x, m)
---
--- fmap (f . g)  (TwistRF fx m) = TwistRF (fmap (f . g) x, m)
---                              = TwistRF (fmap f . fmap g $ x, m)
---                              = TwistRF (fmap f (fmap g x), m)
---                              = fmap f   $ TwistRF (fmap g x,  m)
---                              = (fmap f . fmap g) (TwistRF fx) m)
---
-
-instance DistributiveF m f => Applicative (TwistRF f m) where
-  pure a = TwistRF (pure a) mempty
-  {-# INLINE pure #-}
-
-  (TwistRF f mf)  <*> (TwistRF val mval)  = TwistRF res mres
-    where res  = f <*> mf <<.>> val
-          mres = mf <> mval
-
--- Consider an expression @u = u1 <*> u2 <*> ... <ur>@ where
--- ui = TwistRF fi mi
---
--- u = TwistRF f m where m = m1 <> m2 <> .. <> mr
--- f = f1 <*> m1 f2 <*> (m1 m2) f3 ...    <*> (m1 m2 .. mr-1) fr.
---
--- We will separately verify the functor part and the monoid
--- part of the  ofNow we can verify the laws of applicative
---
---
-
-
-------------------------- A generic field -----------------------------------
-
--- $fields$
---
--- The main goal behind looking at monoidal actions are to captures
--- concrete objects of interest to us like parsers, serialisers and
--- memory allocators. These are essentially functions with domain
--- `CryptoPtr`. For example, a parser is a function that takes a
--- `CryptoPtr`, reads @n@ bytes say and produces a result a. To
--- sequence the next parse we need to essentially keep track of this
--- @n@. If we abstract this out to the general setting we need to
--- consider functions whose domain is the space of points. We use the
--- physicist's terminology and call them fields. The action of the
--- monoid on a space of points naturally extends to fields on them
---
--- @F^g   = λ x -> F (x^g) @
---
--- For our applications, we need to define generalised fields
--- associated with arrows. This is because we often have to deal with
--- functions that have side effects (i.e. `Kleisli` arrows). However,
--- for conceptual understanding, it is sufficient to stick to ordinary
--- functions. In fact, the informal proofs that we have scattered in
--- the source all have been written only for the arrow @->@.
-
--- | A field on the space is a function from the points in the space
--- to some value. Here we define it for a general arrow.
-
-type FieldA arrow = WrappedArrow arrow
-
-
--- | A field where the underlying arrow is the (->). This is normally
--- what we call a field.
-type Field = FieldA (->)
-
--- | Compute the value of a field at a given point in the space.
-computeField :: Field space b -> space -> b
-computeField = unwrapArrow
-{-# INLINE computeField #-}
-
--- | A monadic arrow field.
-type FieldM monad = FieldA (Kleisli monad)
-
--- | Lift a monadic action to FieldM.
-liftToFieldM :: (a -> m b) -> FieldM m a b
-liftToFieldM = WrapArrow . Kleisli
-{-# INLINE liftToFieldM #-}
--- | Runs a monadic field at a given point in the space.
-runFieldM :: FieldM monad space b -> space -> monad b
-runFieldM = runKleisli . unwrapArrow
-{-# INLINE runFieldM #-}
-
--- | The action on the space translates to the action on field.
-instance (Arrow arrow, LAction m space) => LActionF m (WrappedArrow arrow space) where
-  m <<.>> field =   WrapArrow $ unwrapArrow field <<^ (m<.>)
-  {-# INLINE (<<.>>) #-}
-
-instance (Arrow arrow, LAction m space) => DistributiveF m (WrappedArrow arrow space)
diff --git a/Raaz/Core/Parse/Applicative.hs b/Raaz/Core/Parse/Applicative.hs
deleted file mode 100644
--- a/Raaz/Core/Parse/Applicative.hs
+++ /dev/null
@@ -1,120 +0,0 @@
--- | An applicative version of parser. This provides a restricted
--- parser which has only an applicative instance.
-module Raaz.Core.Parse.Applicative
-       ( Parser, parseWidth, parseError, runParser
-       , unsafeRunParser
-       , parse, parseStorable
-       , parseVector, parseStorableVector
-       , unsafeParseVector, unsafeParseStorableVector
-       , parseByteString
-       , skip
-       ) where
-
-import           Data.ByteString           (ByteString)
-import           Data.Vector.Generic       (Vector, generateM)
-import           Foreign.Ptr               (castPtr)
-import           Foreign.Storable          (Storable, peek, peekElemOff)
-import           Prelude          hiding   ( length )
-import           System.IO.Unsafe          (unsafePerformIO)
-
-import           Raaz.Core.MonoidalAction
-import           Raaz.Core.Types.Endian
-import           Raaz.Core.Types.Pointer
-import           Raaz.Core.Util.ByteString (createFrom, length, withByteString)
-
-
-type BytesMonoid   = BYTES Int
-type ParseAction   = FieldM IO Pointer
-
--- | An applicative parser type for reading data from a pointer.
-type Parser = TwistRF ParseAction BytesMonoid
-
-makeParser :: LengthUnit l => l -> (Pointer -> IO a) -> Parser a
-makeParser l action = TwistRF (liftToFieldM action) $ inBytes l
-
--- | Skip over some data.
-skip :: LengthUnit u => u -> Parser ()
-skip = flip makeParser $ const $ return ()
-
--- | A parser that fails with a given error message.
-parseError  :: String -> Parser a
-parseError msg = makeParser (0 :: BYTES Int) $ \ _ -> fail msg
-
--- | Return the bytes that this parser will read.
-parseWidth :: Parser a -> BYTES Int
-parseWidth =  twistMonoidValue
-
-
--- | Runs a parser on a byte string. It returns `Nothing` if the byte string is smaller than
--- what the parser would consume.
-runParser :: Parser a -> ByteString -> Maybe a
-runParser pr bs
-  | length bs < parseWidth pr = Nothing
-  | otherwise                 = Just $ unsafePerformIO $ withByteString bs $ unsafeRunParser pr
-
--- | Run the parser without checking the length constraints.
-unsafeRunParser :: Parser a -> Pointer -> IO a
-unsafeRunParser = runFieldM . twistFunctorValue
-
--- | The primary purpose of this function is to satisfy type checkers.
-undefParse :: Parser a -> a
-undefParse _ = undefined
-
--- | Parses a value which is an instance of Storable. Beware that this
--- parser expects that the value is stored in machine endian. Mostly
--- it is useful in defining the `peek` function in a complicated
--- `Storable` instance.
-parseStorable :: Storable a => Parser a
-parseStorable = pa
-  where pa = makeParser (sizeOf $ undefParse pa) (peek . castPtr)
-
--- | Parse a crypto value. Endian safety is take into account
--- here. This is what you would need when you parse packets from an
--- external source. You can also use this to define the `load`
--- function in a complicated `EndianStore` instance.
-parse :: EndianStore a => Parser a
-parse = pa
-  where pa = makeParser (sizeOf $ undefParse pa) (load . castPtr)
-
--- | Parses a strict bytestring of a given length.
-parseByteString :: LengthUnit l => l -> Parser ByteString
-parseByteString l = makeParser l $ createFrom l
-
--- | Similar to @parseStorableVector@ but is expected to be slightly
--- faster. It does not check whether the length parameter is
--- non-negative and hence is unsafe. Use it only if you can prove that
--- the length parameter is non-negative.
-unsafeParseStorableVector :: (Storable a, Vector v a) => Int -> Parser (v a)
-unsafeParseStorableVector n = pvec
-  where pvec      = makeParser  width $ \ cptr -> generateM n (getA cptr)
-        width     = fromIntegral n * sizeOf (undefA pvec)
-        undefA    :: (Storable a, Vector v a)=> Parser (v a) -> a
-        undefA _  = undefined
-        getA      = peekElemOff . castPtr
-
--- | Similar to @parseVector@ but is expected to be slightly
--- faster. It does not check whether the length parameter is
--- non-negative and hence is unsafe. Use it only if you can prove that
--- the length parameter is non-negative.
-unsafeParseVector :: (EndianStore a, Vector v a) => Int -> Parser (v a)
-unsafeParseVector n = pvec
-  where pvec     = makeParser  width $ \ cptr -> generateM n (loadFromIndex (castPtr cptr))
-        width    = fromIntegral n * sizeOf (undefA pvec)
-        undefA   :: (EndianStore a, Vector v a)=> Parser (v a) -> a
-        undefA _ = undefined
-
--- | Similar to `parseVector` but parses according to the host
--- endian. This function is essentially used to define storable
--- instances of complicated data. It is unlikely to be of use when
--- parsing externally serialised data as one would want to keep track
--- of the endianness of the data.
-parseStorableVector :: (Storable a, Vector v a) => Int -> Parser (v a)
-parseStorableVector n | n < 0      = parseError $ "parseStorableVector on " ++ show n
-                      | otherwise  = unsafeParseStorableVector n
-
--- | Parses a vector of elements. It takes care of the correct endian
--- conversion. This is the function to use while parsing external
--- data.
-parseVector :: (EndianStore a, Vector v a) => Int -> Parser (v a)
-parseVector n | n < 0      = parseError $ "parseVector on " ++ show n
-              | otherwise  = unsafeParseVector n
diff --git a/Raaz/Core/Primitives.hs b/Raaz/Core/Primitives.hs
deleted file mode 100644
--- a/Raaz/Core/Primitives.hs
+++ /dev/null
@@ -1,128 +0,0 @@
-{-|
-
-Generic cryptographic block primtives and their implementations. This
-module exposes low-level generic code used in the raaz system. Most
-likely, one would not need to stoop so low and it might be better to
-use a more high level interface.
-
--}
-
-{-# LANGUAGE TypeFamilies                #-}
-{-# LANGUAGE MultiParamTypeClasses       #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving  #-}
-{-# LANGUAGE FlexibleContexts            #-}
-{-# LANGUAGE CPP                         #-}
-{-# LANGUAGE ConstraintKinds             #-}
-{-# LANGUAGE ExistentialQuantification   #-}
-
-module Raaz.Core.Primitives
-       ( -- * Primtives and their implementations.
-         Primitive(..), BlockAlgorithm(..), Key, Recommendation(..)
-       , BLOCKS, blocksOf
-       , allocBufferFor
-       ) where
-
-import Data.Monoid
-
-#if MIN_VERSION_base(4,9,0)
-import           Data.Kind
-#endif
-
-import Prelude
-
-import Raaz.Core.Types
-
--- | Implementation of block primitives work on buffers. Often for optimal
--- performance, and in some case for safety, we need restrictions on
--- the size and alignment of the buffer pointer. This type class
--- captures such restrictions.
-class Describable a => BlockAlgorithm a where
-
-  -- | The alignment expected for the buffer pointer.
-  bufferStartAlignment :: a -> Alignment
-
-
------------------------ A primitive ------------------------------------
-
-
--- | The type class that captures an abstract block cryptographic
--- primitive. Bulk cryptographic primitives like hashes, ciphers etc
--- often acts on blocks of data. The size of the block is captured by
--- the member `blockSize`.
---
--- As a library, raaz believes in providing multiple implementations
--- for a given primitive. The associated type `Implementation`
--- captures implementations of the primitive.
---
--- For use in production code, the library recommends a particular
--- implementation using the `Recommendation` class. By default this is
--- the implementation used when no explicit implementation is
--- specified.
-class BlockAlgorithm (Implementation p) => Primitive p where
-
-  -- | The block size.
-  blockSize :: p -> BYTES Int
-
-  -- | Associated type that captures an implementation of this
-  -- primitive.
-#if MIN_VERSION_base(4,9,0)
-  type Implementation p :: Type
-#else
-  type Implementation p :: *
-#endif
-
--- | Primitives that have a recommended implementations.
-class Primitive p => Recommendation p where
-  -- | The recommended implementation for the primitive.
-  recommended :: p -> Implementation p
-
--- | Allocate a buffer a particular implementation of a primitive prim.
--- algorithm @algo@. It ensures that the memory passed is aligned
--- according to the demands of the implementation.
-allocBufferFor :: Primitive prim
-               => Implementation prim
-               -> BLOCKS prim
-               -> (Pointer -> IO b)
-               -> IO b
-allocBufferFor imp  = allocaAligned $ bufferStartAlignment imp
-
--- | Some primitives like ciphers have an encryption/decryption key. This
--- type family captures the key associated with a primitive if it has
--- any.
-#if MIN_VERSION_base(4,9,0)
-type family  Key prim :: Type
-#else
-type family  Key prim :: *
-#endif
-
-------------------- Type safe lengths in units of block ----------------
-
--- | Type safe message length in units of blocks of the primitive.
--- When dealing with buffer lengths for a primitive, it is often
--- better to use the type safe units `BLOCKS`. Functions in the raaz
--- package that take lengths usually allow any type safe length as
--- long as they can be converted to bytes. This can avoid a lot of
--- tedious and error prone length calculations.
-newtype BLOCKS p = BLOCKS {unBLOCKS :: Int}
-                 deriving (Show, Eq, Ord, Enum)
-
-#if MIN_VERSION_base(4,11,0)
-instance Semigroup (BLOCKS p) where
-  (<>) x y = BLOCKS $ unBLOCKS x + unBLOCKS y
-#endif
-
-instance Monoid (BLOCKS p) where
-  mempty      = BLOCKS 0
-  mappend x y = BLOCKS $ unBLOCKS x + unBLOCKS y
-
-instance Primitive p => LengthUnit (BLOCKS p) where
-  inBytes p@(BLOCKS x) = scale * blockSize (getPrimitiveType p)
-    where scale = BYTES x
-          getPrimitiveType :: BLOCKS p -> p
-          getPrimitiveType _ = undefined
-
--- | The expression @n `blocksOf` p@ specifies the message lengths in
--- units of the block length of the primitive @p@. This expression is
--- sometimes required to make the type checker happy.
-blocksOf :: Int -> p -> BLOCKS p
-blocksOf n _ = BLOCKS n
diff --git a/Raaz/Core/Transfer.hs b/Raaz/Core/Transfer.hs
deleted file mode 100644
--- a/Raaz/Core/Transfer.hs
+++ /dev/null
@@ -1,326 +0,0 @@
--- | Module to reading from and writing into buffers.
-
-{-# LANGUAGE FlexibleContexts           #-}
-{-# LANGUAGE TypeSynonymInstances       #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE CPP                        #-}
-
-module Raaz.Core.Transfer
-       ( -- * Transfer actions.
-         -- $transfer$
-
-         -- ** Read action
-         ReadM, ReadIO, bytesToRead, unsafeRead
-       , readBytes, readInto
-
-         -- ** Write action.
-       ,  WriteM, WriteIO, bytesToWrite, unsafeWrite
-       , write, writeStorable, writeVector, writeStorableVector
-       , writeFrom, writeBytes
-       , padWrite, prependWrite, glueWrites
-       , writeByteString, skipWrite
-
-       ) where
-
-import           Control.Monad.IO.Class
-import           Data.ByteString           (ByteString)
-import           Data.String
-import           Data.ByteString.Internal  (unsafeCreate)
-import           Data.Monoid
-import qualified Data.Vector.Generic       as G
-import           Data.Word                 (Word8)
-import           Foreign.Ptr               (castPtr, Ptr)
-import           Foreign.Storable          ( Storable, poke )
-
-import           Raaz.Core.MonoidalAction
-import           Raaz.Core.Types.Copying
-import           Raaz.Core.Types.Endian
-import           Raaz.Core.Types.Pointer
-import           Raaz.Core.Util.ByteString as BU
-import           Raaz.Core.Encode
-
--- $transfer$
---
--- Low level buffer operations are problematic portions of any
--- crypto-library. Buffers are usually represented by the starting
--- pointer and one needs to keep track of the buffer sizes
--- carefully. An operation that writes into a buffer, if it writes
--- beyond the actual size of the buffer, can lead to a possible remote
--- code execution. On the other hand, when reading from a buffer, if
--- we read beyond the buffer it can leak private data to the attacker
--- (as in the case of Heart bleed bug). This module is indented to
--- give a relatively high level interface to this problem. We expose
--- two types, the `ReadM` and the `WriteM` type which deals with these
--- two aspects. Both these actions keep track of the number of bytes
--- that they transfer.
-
--- Complex reads and writes can be constructed using the monoid
--- instance of these types.
-
-
-
--- | This monoid captures a transfer action.
-newtype TransferM m = TransferM { unTransferM :: m () }
-
-#if MIN_VERSION_base(4,11,0)
-instance Monad m => Semigroup (TransferM m) where
-  (<>) wa wb = TransferM $ unTransferM wa >> unTransferM wb
-#endif
-
-
-instance Monad m => Monoid (TransferM m) where
-  mempty        = TransferM $ return ()
-  {-# INLINE mempty #-}
-
-  mappend wa wb = TransferM $ unTransferM wa >> unTransferM wb
-  {-# INLINE mappend #-}
-
-  mconcat = TransferM . mapM_ unTransferM
-  {-# INLINE mconcat #-}
-
--- | A action that transfers bytes from its input pointer. Transfer
--- could either be writing or reading.
-type TransferAction m = Pointer -> TransferM m
-
-instance LAction (BYTES Int) (TransferAction m) where
-  offset <.> action = action . (offset<.>)
-  {-# INLINE (<.>) #-}
-
-instance Monad m => Distributive (BYTES Int) (TransferAction m)
-
--- | Byte transfers that keep track of the number of bytes that were
--- transferred (from/into) its input buffer.
-type Transfer m = SemiR (TransferAction m) (BYTES Int)
-
--- | Make an explicit transfer action given.
-makeTransfer :: LengthUnit u => u -> (Pointer -> m ()) -> Transfer m
-{-# INLINE makeTransfer #-}
-makeTransfer sz action = SemiR (TransferM . action) $ inBytes sz
-
-
--------------------------- Monoid for writing stuff --------------------------------------
-
--- | An element of type `WriteM m` is an action which when executed transfers bytes
--- /into/ its input buffer.  The type @`WriteM` m@ forms a monoid and
--- hence can be concatnated using the `<>` operator.
-newtype WriteM m = WriteM { unWriteM :: Transfer m }
-#if MIN_VERSION_base(4,11,0)
-                 deriving (Semigroup, Monoid)
-#else
-                 deriving Monoid
-#endif
-
-
--- | A write io-action.
-type WriteIO = WriteM IO
-
--- | Returns the bytes that will be written when the write action is performed.
-bytesToWrite :: WriteM m -> BYTES Int
-bytesToWrite = semiRMonoid . unWriteM
-
--- | Perform the write action without any checks of the buffer
-unsafeWrite :: WriteM m
-            -> Pointer   -- ^ The pointer for the buffer to be written into.
-            -> m ()
-unsafeWrite wr =  unTransferM . semiRSpace (unWriteM wr)
-
--- | Function that explicitly constructs a write action.
-makeWrite     :: LengthUnit u => u -> (Pointer -> m ()) -> WriteM m
-makeWrite sz  = WriteM . makeTransfer sz
-
-
--- | The expression @`writeStorable` a@ gives a write action that
--- stores a value @a@ in machine endian. The type of the value @a@ has
--- to be an instance of `Storable`. This should be used when we want
--- to talk with C functions and not when talking to the outside world
--- (otherwise this could lead to endian confusion). To take care of
--- endianness use the `write` combinator.
-writeStorable :: (MonadIO m, Storable a) => a -> WriteM m
-writeStorable a = WriteM $ makeTransfer (sizeOf a) pokeIt
-  where pokeIt = liftIO . flip poke a . castPtr
--- | The expression @`write` a@ gives a write action that stores a
--- value @a@. One needs the type of the value @a@ to be an instance of
--- `EndianStore`. Proper endian conversion is done irrespective of
--- what the machine endianness is. The man use of this write is to
--- serialize data for the consumption of the outside world.
-write :: (MonadIO m, EndianStore a) => a -> WriteM m
-write a = makeWrite (sizeOf a) $ liftIO . flip (store . castPtr) a
-
--- | Write many elements from the given buffer
-writeFrom :: (MonadIO m, EndianStore a) => Int -> Src (Ptr a) -> WriteM m
-writeFrom n src = makeWrite (sz undefined src)
-                  $ \ ptr -> liftIO  $ copyToBytes (destination ptr) src n
-  where sz :: Storable a => a -> Src (Ptr a) -> BYTES Int
-        sz a _ = toEnum n * sizeOf a
-
--- | The vector version of `writeStorable`.
-writeStorableVector :: (Storable a, G.Vector v a, MonadIO m) => v a -> WriteM m
-{-# INLINE writeStorableVector #-}
-writeStorableVector = G.foldl' foldFunc mempty
-  where foldFunc w a =  w <> writeStorable a
-
-{-
-
-TODO: This function can be slow due to the fact that each time we use
-the semi-direct product, we incur a cost due to the lambda being not
-lifted.
-
--}
-
--- | The vector version of `write`.
-writeVector :: (EndianStore a, G.Vector v a, MonadIO m) => v a -> WriteM m
-{-# INLINE writeVector #-}
-{- TODO: improve this using the fact that the size is known -}
-
-writeVector = G.foldl' foldFunc mempty
-  where foldFunc w a =  w <> write a
-{- TODO: Same as in writeStorableVector -}
-
-
--- | The combinator @writeBytes n b@ writes @b@ as the next @n@
--- consecutive bytes.
-writeBytes :: (LengthUnit n, MonadIO m) => Word8 -> n -> WriteM m
-writeBytes w8 n = makeWrite n memsetIt
-  where memsetIt cptr = liftIO $ memset cptr w8 n
-
-{-
--- | The write action @padWriteTo w n wr@ is wr padded with the byte @w@ so that the total length
--- is n. If the total bytes written by @wr@ is greater than @n@ then this throws an error.
-padWriteTo :: ( LengthUnit n, MonadIO m)
-              => Word8     -- ^ the padding byte to use
-              -> n         -- ^ the total length to pad to
-              -> WriteM m  -- ^ the write that needs padding
-              -> WriteM m
-padWriteTo w8 n wrm | pl < 0    = error "padToLength: padding length smaller than total length"
-                    | otherwise = wrm <> writeBytes w8 n
-  where pl = inBytes n - bytesToWrite wrm
-
--}
-
--- | The combinator @glueWrites w n hdr ftr@ is equivalent to
--- @hdr <> glue <> ftr@ where the write @glue@ writes as many bytes
--- @w@ so that the total length is aligned to the boundary @n@.
-glueWrites :: ( LengthUnit n, MonadIO m)
-           =>  Word8    -- ^ The bytes to use in the glue
-           -> n        -- ^ The length boundary to align to.
-           -> WriteM m -- ^ The header write
-           -> WriteM m -- ^ The footer write
-           -> WriteM m
-glueWrites w8 n hdr ftr = hdr <> writeBytes w8 lglue <> ftr
-  where lhead   = bytesToWrite hdr
-        lfoot   = bytesToWrite ftr
-        lexceed = (lhead + lfoot) `rem` nBytes  -- bytes exceeding the boundary.
-        lglue   = nBytes - lexceed
-        nBytes  = inBytes n
-
-
-
--- | The write action @prependWrite w n wr@ is wr pre-pended with the byte @w@ so that the total length
--- ends at a multiple of @n@.
-prependWrite  :: ( LengthUnit n, MonadIO m)
-              => Word8     -- ^ the byte to pre-pend with.
-              -> n         -- ^ the length to align the message to
-              -> WriteM m  -- ^ the message that needs pre-pending
-              -> WriteM m
-prependWrite w8 n = glueWrites w8 n mempty
-
--- | The write action @padWrite w n wr@ is wr padded with the byte @w@ so that the total length
--- ends at a multiple of @n@.
-padWrite :: ( LengthUnit n, MonadIO m)
-         => Word8     -- ^ the padding byte to use
-         -> n         -- ^ the length to align message to
-         -> WriteM m  -- ^ the message that needs padding
-         -> WriteM m
-padWrite w8 n = flip (glueWrites w8 n) mempty
-
--- | Writes a strict bytestring.
-writeByteString :: MonadIO m => ByteString -> WriteM m
-writeByteString bs = makeWrite (BU.length bs) $ liftIO  . BU.unsafeCopyToPointer bs
-
--- | A write action that just skips over the given bytes.
-skipWrite :: (LengthUnit u, Monad m) => u -> WriteM m
-skipWrite = flip makeWrite $ const $ return ()
-
-instance MonadIO m => IsString (WriteM m)  where
-  fromString = writeByteString . fromString
-
-instance Encodable (WriteM IO) where
-  {-# INLINE toByteString #-}
-  toByteString w  = unsafeCreate n $ unsafeWrite w . castPtr
-    where BYTES n = bytesToWrite w
-
-  {-# INLINE unsafeFromByteString #-}
-  unsafeFromByteString = writeByteString
-
-  {-# INLINE fromByteString #-}
-  fromByteString       = Just . writeByteString
-
-------------------------  Read action ----------------------------
-
--- | The `ReadM` is the type that captures the act of reading from a buffer
--- and possibly doing some action on the bytes read. Although
--- inaccurate, it is helpful to think of elements of `ReadM` as action
--- that on an input buffer transfers data from it to some unspecified
--- source.
---
--- Read actions form a monoid with the following semantics: if @r1@
--- and @r2@ are two read actions then @r1 `<>` r2@ first reads the
--- data associated from @r1@ and then the read associated with the
--- data @r2@.
-
-newtype ReadM m = ReadM { unReadM :: Transfer m}
-#if MIN_VERSION_base(4,11,0)
-                 deriving (Semigroup, Monoid)
-#else
-                 deriving Monoid
-#endif
-
--- | A read io-action.
-type ReadIO = ReadM IO
-
--- | Function that explicitly constructs a write action.
-makeRead     :: LengthUnit u => u -> (Pointer -> m ()) -> ReadM m
-makeRead sz  = ReadM . makeTransfer sz
-
-
--- | The expression @bytesToRead r@ gives the total number of bytes that
--- would be read from the input buffer if the action @r@ is performed.
-bytesToRead :: ReadM m -> BYTES Int
-bytesToRead = semiRMonoid . unReadM
-
--- | The action @unsafeRead r ptr@ results in reading @bytesToRead r@
--- bytes from the buffer pointed by @ptr@. This action is unsafe as it
--- will not (and cannot) check if the action reads beyond what is
--- legally stored at @ptr@.
-unsafeRead :: ReadM m
-           -> Pointer   -- ^ The pointer for the buffer to be written into.
-           -> m ()
-unsafeRead rd =  unTransferM . semiRSpace (unReadM rd)
-
--- | The action @readBytes sz dptr@ gives a read action, which if run on
--- an input buffer, will transfers @sz@ to the destination buffer
--- pointed by @dptr@. Note that it is the responsibility of the user
--- to make sure that @dptr@ has enough space to receive @sz@ units of
--- data if and when the read action is executed.
-readBytes :: ( LengthUnit sz, MonadIO m)
-          => sz             -- ^ how much to read.
-          -> Dest Pointer   -- ^ buffer to read the bytes into
-          -> ReadM m
-readBytes sz dest = makeRead sz
-                    $ \ ptr -> liftIO  $ memcpy dest (source ptr) sz
-
--- | The action @readInto n dptr@ gives a read action which if run on an
--- input buffer, will transfers @n@ elements of type @a@ into the
--- buffer pointed by @dptr@. In particular, the read action @readInto n
--- dptr@ is the same as @readBytes (fromIntegral n :: BYTES Int) dptr@
--- when the type @a@ is `Word8`.
-readInto :: (EndianStore a, MonadIO m)
-         => Int             -- ^ how many elements to read.
-         -> Dest (Ptr a)    -- ^ buffer to read the elements into
-         -> ReadM m
-readInto n dest = makeRead (sz undefined dest)
-                  $ \ ptr -> liftIO $ copyFromBytes dest (source ptr) n
-  where sz :: Storable a => a -> Dest (Ptr a) -> BYTES Int
-        sz a _ = toEnum n * sizeOf a
diff --git a/Raaz/Core/Types.hs b/Raaz/Core/Types.hs
deleted file mode 100644
--- a/Raaz/Core/Types.hs
+++ /dev/null
@@ -1,68 +0,0 @@
--- | This module exposes some core types used through out the Raaz
--- library. One of the major goals of the raaz cryptographic library
--- is to use the type safety of Haskell to catch some common
--- bugs at compile time.
---
--- __WARNING:__ If you are just a user of this library, it is unlikely
--- that you will need to import this module. It is only required if
--- you are a developer and want to define a new cryptographic data
--- type.
-
-module Raaz.Core.Types
-       ( -- * Overview.
-         -- $overview$
-         module Raaz.Core.Types.Equality
-       , module Raaz.Core.Types.Endian
-       , module Raaz.Core.Types.Pointer
-       , module Raaz.Core.Types.Aligned
-       , module Raaz.Core.Types.Tuple
-       , module Raaz.Core.Types.Copying
-       , Describable(..)
-       ) where
-
-import Raaz.Core.Types.Aligned
-import Raaz.Core.Types.Describe
-import Raaz.Core.Types.Equality
-import Raaz.Core.Types.Endian
-import Raaz.Core.Types.Pointer
-import Raaz.Core.Types.Tuple
-import Raaz.Core.Types.Copying( Src, Dest, source, destination)
-
-
--- $overview$
---
--- A lot of cryptographic code is low level and involves quite a bit
--- of boilerplate and are therefore fertile grounds for bugs. This
--- module describes types specific to raaz that are designed to catch
--- bugs in such low level code. The three principles that we follow
--- in the design are:
---
--- 1. Define distinct types for semantically different objects. For
---    example, distinguish between buffer length/pointer offset in
---    bytes versus other units (see `LengthUnit`) or make endian aware
---    variants of standard word types (see `BE` and `LE`) etc.
---
--- 2. Make sure that the low level functions are sensitive to these
---    types. For example, the function `sizeOf` exposed here returns
---    @`BYTES` `Int`@ instead of just `Int` and functions like
---    `allocaBuffer` are generic enough to work with any length units.
---
--- 3. Provide obvious instances for some basic type and have and
---    idiom/design pattern to build such interfaces for user defined
---    types. For example, we have a very specific way to build timing
---    safe equality functions for arbitrary types. Most of the time,
---    in our case it just amounts to handling product types.
---
--- == Role of Monoids.
---
--- Monoids play an important role in facilitating the top down
--- approach to type safety that we mentioned above. Some types
--- described here have a natural monoid semantics. For example, when
--- dealing with pointer offsets and buffer sizes, we use type safe
--- length units like `BYTES`. These length units are instances of
--- monoids where the underlying operation is addition. On the other
--- hand, when it comes to pointer alignment which is captured by the
--- type `Alignment`, the monoid operation is taking the lowest common
--- multiple.
---
-{-# ANN module "HLint: ignore Use import/export shortcut" #-}
diff --git a/Raaz/Core/Types/Aligned.hs b/Raaz/Core/Types/Aligned.hs
deleted file mode 100644
--- a/Raaz/Core/Types/Aligned.hs
+++ /dev/null
@@ -1,83 +0,0 @@
-{-# LANGUAGE CPP                   #-}
-{-# LANGUAGE DataKinds             #-}
-{-# LANGUAGE ConstraintKinds      #-}
-{-# LANGUAGE KindSignatures        #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE TypeFamilies          #-}
-{-# LANGUAGE RankNTypes            #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-
--- | This module gives ways to force the alignment of types.
-module Raaz.Core.Types.Aligned
-  ( -- * Types to force alignment.
-    Aligned, unAligned, aligned16Bytes, aligned32Bytes, aligned64Bytes
-  ) where
-
-
-#if MIN_VERSION_base(4,7,0)
-import           Data.Proxy
-#endif
-
-import           GHC.TypeLits
-import           Foreign.Ptr                 ( castPtr      )
-import           Foreign.Storable            ( Storable(..) )
-import           Prelude hiding              ( length       )
-
-
--- | A type @w@ forced to be aligned to the alignment boundary @alg@
-newtype Aligned (align :: Nat) w
-  = Aligned { unAligned :: w -- ^ The underlying unAligned value.
-            }
-
--- | Align the value to 16-byte boundary
-aligned16Bytes :: w -> Aligned 16 w
-{-# INLINE aligned16Bytes #-}
-
--- | Align the value to 32-byte boundary
-aligned32Bytes :: w -> Aligned 32 w
-{-# INLINE aligned32Bytes #-}
-
--- | Align the value to 64-byte boundary
-aligned64Bytes :: w -> Aligned 64 w
-{-# INLINE aligned64Bytes #-}
-
-aligned16Bytes = Aligned
-aligned32Bytes = Aligned
-aligned64Bytes = Aligned
-
-#if MIN_VERSION_base(4,7,0)
-
--- | The constraint on the alignment o(since base 4.7.0).
-type AlignBoundary (alg :: Nat) = KnownNat alg
-
-alignmentBoundary :: AlignBoundary alg => Aligned alg a -> Int
-alignmentBoundary = aB Proxy
-  where aB :: AlignBoundary algn => Proxy algn -> Aligned algn a -> Int
-        aB algn _ = fromEnum $ natVal algn
-
-#else
-
--- | The constraint on the alignment (pre base 4.7.0).
-type AlignBoundary (alg :: Nat) = SingI alg
-
-alignmentBoundary :: AlignBoundary algn => Aligned algn a -> Int
-alignmentBoundary = withSing aB
-  where aB        ::  AlignBoundary algn => Sing algn      -> Aligned algn a -> Int
-        aB algn _ = fromEnum $ fromSing algn
-
-
-#endif
-
-
-instance (Storable a, AlignBoundary alg) => Storable (Aligned alg a) where
-
-  sizeOf = sizeOf . unAligned
-
-  alignment alg = lcm valueAlignment forceAlignment
-    where valueAlignment = alignment $ unAligned alg
-          forceAlignment = alignmentBoundary alg
-
-  peek = fmap Aligned .  peek . castPtr
-
-  poke ptr = poke (castPtr ptr) . unAligned
diff --git a/Raaz/Core/Types/Copying.hs b/Raaz/Core/Types/Copying.hs
deleted file mode 100644
--- a/Raaz/Core/Types/Copying.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
--- | Types to avoid source destination confusion while copying.
-module Raaz.Core.Types.Copying
-       (
-         -- * Copying.
-         -- $copyconvention$
-         Src(..), Dest(..), source, destination
-       ) where
-
-import Foreign.Storable ( Storable )
-
--- $copyconvention$
---
--- Consider a copy operation that involves copying data between two
--- entities of the same type. If the source and target is confused
--- this can lead to bugs. The types `Src` and `Dest` helps in avoiding
--- this confusion. The convention that we follow is that copy function
--- mark its destination and source explicitly at the type level. The
--- actual constructors for the type `Src` and `Dest` are not available
--- to users of the library. Instead they use the smart constructors
--- `source` and `destination` when passing arguments to these
--- functions.
---
--- The developers of the raaz library do have access to the
--- constructors. However, it is unlikely one would need it. Since both
--- `Src` and `Dest` derive the underlying `Storable` instance, one can
--- mark `Src` and `Dest` in calls to `FFI` functions as well.
-
-
--- | The source of a copy operation.
-newtype Src  a = Src { unSrc :: a } deriving Storable
-
--- | smart constructor for source
-source :: a -> Src a
-source = Src
-
-instance Functor Src where
-  fmap f = Src . f . unSrc
-
--- | The destination of a copy operation.
---
--- Note to Developers of Raaz: Since the `Dest` type inherits the
--- Storable instance of the base type, one can use this type in
--- foreign functions.
-newtype Dest a = Dest { unDest :: a } deriving Storable
-
--- | smart constructor for destionation.
-destination :: a -> Dest a
-destination = Dest
-
-instance Functor Dest where
-  fmap f = Dest . f . unDest
diff --git a/Raaz/Core/Types/Describe.hs b/Raaz/Core/Types/Describe.hs
deleted file mode 100644
--- a/Raaz/Core/Types/Describe.hs
+++ /dev/null
@@ -1,14 +0,0 @@
--- | This module exposes ways to attach descriptions to types of the
--- library.
-module Raaz.Core.Types.Describe
-       ( Describable(..)
-       ) where
-
--- | This class captures all types that have some sort of description
--- attached to it.
-class Describable d where
-  -- | Short name that describes the object.
-  name :: d -> String
-
-  -- | Longer description
-  description :: d -> String
diff --git a/Raaz/Core/Types/Endian.hs b/Raaz/Core/Types/Endian.hs
deleted file mode 100644
--- a/Raaz/Core/Types/Endian.hs
+++ /dev/null
@@ -1,447 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE ForeignFunctionInterface   #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE DeriveDataTypeable         #-}
-{-# LANGUAGE TypeFamilies               #-}
-
--- | Endian safe types.
-module Raaz.Core.Types.Endian
-       ( -- * Endianess aware types.
-         -- $endianness$
-         EndianStore(..), copyFromBytes, copyToBytes
-       -- ** Endian explicit word types.
-       , LE, BE, littleEndian, bigEndian
-       -- ** Helper functions for endian aware storing and loading.
-       , storeAt, storeAtIndex
-       , loadFrom, loadFromIndex
-       ) where
-
-import           Control.Applicative
-import           Control.DeepSeq             ( NFData)
-import           Control.Monad               ( liftM )
-import           Data.Bits
-import           Data.Typeable
-import           Data.Vector.Unboxed         ( MVector(..), Vector, Unbox )
-import           Data.Word
-import           Foreign.Ptr                 ( castPtr, Ptr )
-import           Foreign.Storable            ( Storable, peek, poke )
-
-import           Prelude
-
-import qualified Data.Vector.Generic         as GV
-import qualified Data.Vector.Generic.Mutable as GVM
-
-
-import           Raaz.Core.Types.Copying
-import           Raaz.Core.Types.Pointer
-import           Raaz.Core.Types.Equality
-
-#include "MachDeps.h"
-
--- $endianness$
---
--- Cryptographic primitives often consider their input as an array of
--- words of a particular endianness. Endianness is only relevant when
--- serialising to (or de-serialising from) their encoding to the
--- outside world. Raaz strives to use types to provide an endian
--- agnostic interface to all data that is relevant to the outside
--- world.
---
--- The starting point of an endian agnostic interface is the class
--- `EndianStore`. Instances of this class support an endian agnostic
--- `load` and `store`. Endian adjusted copying is also provided for
--- these types through the helper functions `copyFromBytes` and
--- `copyToBytes`.
---
--- It is tedious to think about endianness for each new type one might
--- encounter. As before, we have a top down approach to defining such
--- an interface. To start with, the library exposes endian aware
--- variants of `Word32` and `Word64` and functions @littleEndian@ and
--- @bigEndian@ for conversions. The `Tuple` type inherits the
--- endianness of its element type, i.e for example @Tuple 10 (LE
--- Word32)@ when loded (or stored) will load (or store) 10 32-bit
--- words assuming that the words are expressed in little endian. Other
--- types are then built out of these endian aware types. For example,
--- cryptographic type `SHA512` is defined as.
---
--- >
--- > newtype SHA512 = SHA512 (Tuple 8 (BE Word64))
--- >                      deriving (Equality, Eq, Storable, EndianStore)
--- >
---
-
--- | This class captures types which provides an endian agnostic way
--- of loading from and storing to data buffers. Any multi-byte type
--- that is meant to be serialised to the outside world should be an
--- instance of this class. When defining the `load`, `store`,
--- `adjustEndian` member functions, care should be taken to ensure
--- proper endian conversion.
---
-class Storable w => EndianStore w where
-
-  -- | The action @store ptr w@ stores @w@ at the location pointed by
-  -- @ptr@.  Endianness of the type @w@ is taken care of when storing.
-  -- For example, irrespective of the endianness of the machine,
-  -- @store ptr (0x01020304 :: BE Word32)@ will store the bytes
-  -- @0x01@, @0x02@, @0x03@, @0x04@ respectively at locations @ptr@,
-  -- @ptr +1@, @ptr+2@ and @ptr+3@. On the other hand @store ptr
-  -- (0x01020304 :: LE Word32)@ would store @0x04@, @0x03@, @0x02@,
-  -- @0x01@ at the above locations.
-
-  store :: Ptr w   -- ^ the location.
-        -> w       -- ^ value to store
-        -> IO ()
-
-  -- | The action @load ptr@ loads the value stored at the @ptr@. Like
-  -- store, it takes care of the endianness of the data type.  For
-  -- example, if @ptr@ points to a buffer containing the bytes @0x01@,
-  -- @0x02@, @0x03@, @0x04@, irrespective of the endianness of the
-  -- machine, @load ptr :: IO (BE Word32)@ will load the vale
-  -- @0x01020304@ of type @BE Word32@ and @load ptr :: IO (LE Word32)@
-  -- will load @0x04030201@ of type @LE Word32@.
-  load  :: Ptr w -> IO w
-
-  -- | The action @adjustEndian ptr n@ adjusts the encoding of bytes
-  -- stored at the location @ptr@ to conform with the endianness of
-  -- the underlying data type. For example, assume that @ptr@ points
-  -- to a buffer containing the bytes @0x01 0x02 0x03 0x04@, and we
-  -- are on a big endian machine, then @adjustEndian (ptr :: Ptr (LE
-  -- Word32)) 1@ will result in @ptr@ pointing to the sequence @0x04
-  -- 0x03 0x02 0x01@. On the other hand if we were on a little endian
-  -- machine, the sequence should remain the same.  In particular, the
-  -- following equalities should hold.
-  --
-  -- >
-  -- > store ptr w          = poke ptr w >> adjustEndian ptr 1
-  -- >
-  --
-  -- Similarly the value loaded by @load ptr@ should be same as the
-  -- value returned by @adjustEndian ptr 1 >> peak ptr@, although the
-  -- former does not change the contents stored at @ptr@ where as the
-  -- latter might does modify the contents pointed by @ptr@ if the
-  -- endianness of the machine and the time do not agree.
-  --
-  -- The action @adjustEndian ptr n >> adjustEndian ptr n @ should be
-  -- equivalent to @return ()@.
-  --
-  adjustEndian :: Ptr w  -- ^ buffer pointers,
-               -> Int    -- ^ how many w's are present,
-               -> IO ()
-
-
-instance EndianStore Word8 where
-  store                  = poke
-  load                   = peek
-  adjustEndian  _ _      = return ()
-
-instance EndianStore w => EndianStore (BYTES w) where
-  store ptr (BYTES w)  = store (castPtr ptr) w
-  load                 = fmap BYTES . load . castPtr
-  adjustEndian         = adjustEndian . castToPtrW
-    where castToPtrW :: Ptr (BYTES w) -> Ptr w
-          castToPtrW = castPtr
-
--- | Store the given value at an offset from the crypto pointer. The
--- offset is given in type safe units.
-storeAt :: ( EndianStore w
-           , LengthUnit offset
-           )
-        => Ptr w     -- ^ the pointer
-        -> offset    -- ^ the absolute offset in type safe length units.
-        -> w         -- ^ value to store
-        -> IO ()
-{-# INLINE storeAt #-}
-storeAt ptr = store . movePtr ptr
-
--- | Store the given value as the @n@-th element of the array
--- pointed by the crypto pointer.
-storeAtIndex :: EndianStore w
-             => Ptr w          -- ^ the pointer to the first element of the
-                               -- array
-             -> Int            -- ^ the index of the array
-             -> w              -- ^ the value to store
-             -> IO ()
-{-# INLINE storeAtIndex #-}
-storeAtIndex cptr index w = storeAt cptr offset w
-  where offset = toEnum index * sizeOf w
-
-
--- | Load the @n@-th value of an array pointed by the crypto pointer.
-loadFromIndex :: EndianStore w
-              => Ptr w   -- ^ the pointer to the first element of
-                         -- the array
-              -> Int     -- ^ the index of the array
-              -> IO w
-{-# INLINE loadFromIndex #-}
-loadFromIndex cptr index = load (shiftPtr cptr undefined)
-  where shiftPtr :: Storable w => Ptr w -> w -> Ptr w
-        shiftPtr ptr w = movePtr ptr (toEnum index * sizeOf w)
-
--- | Load from a given offset. The offset is given in type safe units.
-loadFrom :: ( EndianStore w
-            , LengthUnit offset
-            )
-         => Ptr w    -- ^ the pointer
-         -> offset   -- ^ the offset
-         -> IO w
-{-# INLINE loadFrom #-}
-loadFrom ptr = load . movePtr ptr
-
--- | For the type @w@, the action @copyFromBytes dest src n@ copies @n@-elements from
--- @src@ to @dest@. Copy performed by this combinator accounts for the
--- endianness of the data in @dest@ and is therefore /not/ a mere copy
--- of @n * sizeOf(w)@ bytes. This action does not modify the @src@
--- pointer in any way.
-
-copyFromBytes :: EndianStore w
-              => Dest (Ptr w)
-              -> Src  Pointer
-              -> Int          -- ^ How many items.
-              -> IO ()
-copyFromBytes dest@(Dest ptr) src n =  memcpy (castPtr <$> dest) src (sz dest undefined)
-                                       >> adjustEndian ptr n
-  where sz     :: Storable w => Dest (Ptr w) -> w -> BYTES Int
-        sz _ w =  sizeOf w * toEnum n
-
--- | Similar to @copyFromBytes@ but the transfer is done in the other direction. The copy takes
--- care of performing the appropriate endian encoding.
-copyToBytes :: EndianStore w
-            => Dest Pointer
-            -> Src (Ptr w)
-            -> Int
-            -> IO ()
-copyToBytes dest@(Dest dptr) src n =  memcpy dest  (castPtr <$> src) (sz src undefined)
-                                     >> adjust src (castPtr dptr)
-  where adjust :: EndianStore w => Src (Ptr w) -> Ptr w -> IO ()
-        adjust _ ptr = adjustEndian ptr n
-
-        sz     :: Storable w => Src (Ptr w) -> w -> BYTES Int
-        sz _ w =  sizeOf w * toEnum n
-
-
-{-
-Developers notes:
------------------
-
-Make sure that the endian encoded version does not have any
-performance penalty. We may have to stare at the core code generated
-by ghc.
-
--}
-
--- | Little endian version of the word type @w@
-newtype LE w = LE { unLE :: w }
-    deriving ( Bounded, Enum, Read, Show
-             , Integral, Num, Real, Eq, Equality, Ord
-             , Bits, Storable, Typeable, NFData
-             )
-
-instance Functor LE where
-  fmap f = LE . f . unLE
-
--- | Big endian version of the word type @w@
-newtype BE w = BE { unBE :: w }
-    deriving ( Bounded, Enum, Read, Show
-             , Integral, Num, Real, Eq, Equality, Ord
-             , Bits, Storable, Typeable, NFData
-             )
-
-instance Functor BE where
-  fmap f = BE . f . unBE
-
--- | Convert to the little endian variant.
-littleEndian :: w -> LE w
-{-# INLINE littleEndian #-}
-littleEndian = LE
-
--- | Convert to the big endian variants.
-bigEndian :: w -> BE w
-{-# INLINE bigEndian #-}
-bigEndian = BE
-
----------------- The foreign function calls ----------------------
-
-foreign import ccall unsafe "raaz/core/endian.h raazSwap32Array"
-  c_Swap32Array :: Ptr Word32 -> Int -> IO ()
-foreign import ccall unsafe "raaz/core/endian.h raazSwap64Array"
-  c_Swap64Array :: Ptr Word64 -> Int -> IO ()
-
-# if !MIN_VERSION_base(4,7,0)
-
-foreign import ccall unsafe "raaz/core/endian.h raazSwap32"
-  byteSwap32  :: Word32 -> Word32
-foreign import ccall unsafe "raaz/core/endian.h raazSwap64"
-  byteSwap64  :: Word64 -> Word64
-
-# endif
-
-#ifdef WORDS_BIGENDIAN
-
-unLEPtr :: Ptr (LE w) -> Ptr w
-unLEPtr = castPtr
-
-instance EndianStore (LE Word32) where
-  load  ptr    = fmap byteSwap32 <$>  peek ptr
-  store ptr    = poke ptr  . fmap byteSwap32
-  adjustEndian = c_Swap32Array . unLEPtr
-
-
-instance EndianStore (LE Word64) where
-  load  ptr     = fmap byteSwap64    <$> peek ptr
-  store ptr     = poke ptr  . fmap byteSwap64
-  adjustEndian  = c_Swap64Array . unLEPtr
-
-
-instance EndianStore (BE Word32) where
-  load             = peek
-  store            = poke
-  adjustEndian _ _ = return ()
-
-instance EndianStore (BE Word64) where
-  load             = peek
-  store            = poke
-  adjustEndian _ _ = return ()
-
-# else
-
-unBEPtr :: Ptr (BE w) -> Ptr w
-unBEPtr = castPtr
-
---- We are in a little endian machine.
-
-instance EndianStore (BE Word32) where
-  load  ptr    = fmap byteSwap32 <$> peek ptr
-  store ptr    = poke ptr . fmap byteSwap32
-  adjustEndian = c_Swap32Array . unBEPtr
-
-
-instance EndianStore (BE Word64) where
-  load  ptr    = fmap byteSwap64 <$> peek ptr
-  store ptr    = poke ptr . fmap byteSwap64
-  adjustEndian = c_Swap64Array . unBEPtr
-
-
-instance EndianStore (LE Word32) where
-  load             = peek
-  store            = poke
-  adjustEndian _ _ = return ()
-
-instance EndianStore (LE Word64) where
-  load              = peek
-  store             = poke
-  adjustEndian _ _  = return ()
-
-
-#endif
-
-------------------- Unboxed vector of Endian word types ---------------
-
-instance Unbox w => Unbox (LE w)
-instance Unbox w => Unbox (BE w)
-
-------------------- Defining the vector types --------------------------
-
-newtype instance MVector s (LE w) = MV_LE (MVector s w)
-newtype instance Vector    (LE w) = V_LE  (Vector w)
-
-newtype instance MVector s (BE w) = MV_BE (MVector s w)
-newtype instance Vector    (BE w) = V_BE  (Vector w)
-
-instance Unbox w => GVM.MVector MVector (LE w) where
-  {-# INLINE basicLength #-}
-  {-# INLINE basicUnsafeSlice #-}
-  {-# INLINE basicOverlaps #-}
-  {-# INLINE basicUnsafeNew #-}
-  {-# INLINE basicUnsafeReplicate #-}
-  {-# INLINE basicUnsafeRead #-}
-  {-# INLINE basicUnsafeWrite #-}
-  {-# INLINE basicClear #-}
-  {-# INLINE basicSet #-}
-  {-# INLINE basicUnsafeCopy #-}
-  {-# INLINE basicUnsafeGrow #-}
-  basicLength          (MV_LE v)        = GVM.basicLength v
-  basicUnsafeSlice i n (MV_LE v)        = MV_LE $ GVM.basicUnsafeSlice i n v
-  basicOverlaps (MV_LE v1) (MV_LE v2)   = GVM.basicOverlaps v1 v2
-
-  basicUnsafeRead  (MV_LE v) i          = LE `liftM` GVM.basicUnsafeRead v i
-  basicUnsafeWrite (MV_LE v) i (LE x)   = GVM.basicUnsafeWrite v i x
-
-  basicClear (MV_LE v)                  = GVM.basicClear v
-  basicSet   (MV_LE v)         (LE x)   = GVM.basicSet v x
-
-  basicUnsafeNew n                      = MV_LE `liftM` GVM.basicUnsafeNew n
-  basicUnsafeReplicate n     (LE x)     = MV_LE `liftM` GVM.basicUnsafeReplicate n x
-  basicUnsafeCopy (MV_LE v1) (MV_LE v2) = GVM.basicUnsafeCopy v1 v2
-  basicUnsafeGrow (MV_LE v)   n         = MV_LE `liftM` GVM.basicUnsafeGrow v n
-
-#if MIN_VERSION_vector(0,11,0)
-  basicInitialize (MV_LE v)           = GVM.basicInitialize v
-#endif
-
-instance Unbox w => GV.Vector Vector (LE w) where
-  {-# INLINE basicUnsafeFreeze #-}
-  {-# INLINE basicUnsafeThaw #-}
-  {-# INLINE basicLength #-}
-  {-# INLINE basicUnsafeSlice #-}
-  {-# INLINE basicUnsafeIndexM #-}
-  {-# INLINE elemseq #-}
-  basicUnsafeFreeze (MV_LE v)   = V_LE  `liftM` GV.basicUnsafeFreeze v
-  basicUnsafeThaw (V_LE v)      = MV_LE `liftM` GV.basicUnsafeThaw v
-  basicLength (V_LE v)          = GV.basicLength v
-  basicUnsafeSlice i n (V_LE v) = V_LE $ GV.basicUnsafeSlice i n v
-  basicUnsafeIndexM (V_LE v) i  = LE   `liftM`  GV.basicUnsafeIndexM v i
-
-  basicUnsafeCopy (MV_LE mv) (V_LE v) = GV.basicUnsafeCopy mv v
-  elemseq _ (LE x)                    = GV.elemseq (undefined :: Vector a) x
-
-
-instance Unbox w => GVM.MVector MVector (BE w) where
-  {-# INLINE basicLength #-}
-  {-# INLINE basicUnsafeSlice #-}
-  {-# INLINE basicOverlaps #-}
-  {-# INLINE basicUnsafeNew #-}
-  {-# INLINE basicUnsafeReplicate #-}
-  {-# INLINE basicUnsafeRead #-}
-  {-# INLINE basicUnsafeWrite #-}
-  {-# INLINE basicClear #-}
-  {-# INLINE basicSet #-}
-  {-# INLINE basicUnsafeCopy #-}
-  {-# INLINE basicUnsafeGrow #-}
-  basicLength          (MV_BE v)        = GVM.basicLength v
-  basicUnsafeSlice i n (MV_BE v)        = MV_BE $ GVM.basicUnsafeSlice i n v
-  basicOverlaps (MV_BE v1) (MV_BE v2)   = GVM.basicOverlaps v1 v2
-
-  basicUnsafeRead  (MV_BE v) i          = BE `liftM` GVM.basicUnsafeRead v i
-  basicUnsafeWrite (MV_BE v) i (BE x)   = GVM.basicUnsafeWrite v i x
-
-  basicClear (MV_BE v)                  = GVM.basicClear v
-  basicSet   (MV_BE v)         (BE x)   = GVM.basicSet v x
-
-  basicUnsafeNew n                      = MV_BE `liftM` GVM.basicUnsafeNew n
-  basicUnsafeReplicate n     (BE x)     = MV_BE `liftM` GVM.basicUnsafeReplicate n x
-  basicUnsafeCopy (MV_BE v1) (MV_BE v2) = GVM.basicUnsafeCopy v1 v2
-  basicUnsafeGrow (MV_BE v)   n         = MV_BE `liftM` GVM.basicUnsafeGrow v n
-
-#if MIN_VERSION_vector(0,11,0)
-  basicInitialize (MV_BE v)           = GVM.basicInitialize v
-#endif
-
-
-
-instance Unbox w => GV.Vector Vector (BE w) where
-  {-# INLINE basicUnsafeFreeze #-}
-  {-# INLINE basicUnsafeThaw #-}
-  {-# INLINE basicLength #-}
-  {-# INLINE basicUnsafeSlice #-}
-  {-# INLINE basicUnsafeIndexM #-}
-  {-# INLINE elemseq #-}
-  basicUnsafeFreeze (MV_BE v)   = V_BE  `liftM` GV.basicUnsafeFreeze v
-  basicUnsafeThaw (V_BE v)      = MV_BE `liftM` GV.basicUnsafeThaw v
-  basicLength (V_BE v)          = GV.basicLength v
-  basicUnsafeSlice i n (V_BE v) = V_BE $ GV.basicUnsafeSlice i n v
-  basicUnsafeIndexM (V_BE v) i  = BE   `liftM`  GV.basicUnsafeIndexM v i
-
-  basicUnsafeCopy (MV_BE mv) (V_BE v) = GV.basicUnsafeCopy mv v
-  elemseq _ (BE x)                    = GV.elemseq (undefined :: Vector a) x
diff --git a/Raaz/Core/Types/Equality.hs b/Raaz/Core/Types/Equality.hs
deleted file mode 100644
--- a/Raaz/Core/Types/Equality.hs
+++ /dev/null
@@ -1,334 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE TypeFamilies #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FlexibleContexts      #-}
-
--- | This module defines combinators, types and instances for defining
--- timing safe equality checks.
-module Raaz.Core.Types.Equality
-       ( -- * Timing safe equality checking.
-         -- $timingSafeEquality$
-         Equality(..), (===)
-       , Result
-       ) where
-
-import           Control.Monad               ( liftM )
-import           Data.Bits
-
-#if !MIN_VERSION_base(4,8,0)
-import Data.Monoid  -- Import only when base < 4.8.0
-#endif
-
-import qualified Data.Vector.Generic         as G
-import qualified Data.Vector.Generic.Mutable as GM
-import           Data.Vector.Unboxed         ( MVector(..), Vector, Unbox )
-import           Data.Word
-
-
-
--- $timingSafeEquality$
---
--- Many cryptographic setting require comparing two secrets and such
--- comparisons should be timing safe, i.e. the time taken to make the
--- comparison should not depend on the actual values that are
--- compared. Unfortunately, the equality comparison of may Haskell
--- types like `ByteString`, provided via the class `Eq` is /not/
--- timing safe. In raaz we take special care in defining the `Eq`
--- instance of all cryptographically sensitive types which make them
--- timing safe . For example, if we compare two digests @dgst1 ==
--- dgst2@, the `Eq` instance is defined in such a way that the time
--- taken is constant irrespective of the actual values. We also give a
--- mechanism to build timing safe equality for more complicated types
--- that user might need to define in her use cases as we now describe.
---
--- The starting point of defining such timing safe equality is the
--- class `Equality` which plays the role `Eq`. The member function
--- `eq` playing the role of (`==`) with an important difference.  The
--- comparison function `eq` returns the type type `Result` instead of
--- `Bool` and it is timing safe. The `Eq` instance is then defined by
--- making use of the operator (`===`). Thus a user of the library can
--- stick to the familiar `Eq` class and get the benefits of timing
--- safe comparison
---
--- == Building timing safe equality for Custom types.
---
--- For basic types like `Word32`, `Word64` this module defines
--- instances of `Equality`. The `Tuple` type inherits the `Equality`
--- instance from its base type. As a developer, new crypto-primitives
--- or protocols often need to define timing safe equality for types
--- other than those exported here. This is done in two stages.
---
--- 1. Define an instance of `Equality`.
---
--- 2. Make use of the above instance to define `Eq` instance as follows.
---
--- > data SomeSensitiveType = ...
--- >
--- > instance Equality SomeSensitiveType where
--- >          eq a b = ...
--- >
--- > instance Eq SomeSensitiveType where
--- >      (==) a b = a === b
---
--- === Combining multiple comparisons using Monoid operations
---
--- The `Result` type is an opaque type and does not allow inspection
--- via a pattern match or conversion to `Bool`. However, while
--- defining the `Equality` instance, we often need to perform an AND
--- of multiple comparison (think of comparing a tuple). This is where
--- the monoid instance of `Result` is useful. If @r1@ and @r2@ are the
--- results of two comparisons then @r1 `mappend` r2@ essentially takes
--- the AND of these results. However, unlike in the case of AND-ing in
--- `Bool`, `mappend` on the `Result` type does not short-circuit.  In
--- fact, the whole point of using `Result` type instead of `Bool` is
--- to avoid this short circuiting.
---
--- To illustrate, we have the following code fragment
---
--- > data Foo = Foo Word32 Word64
--- >
--- > instance Equality Foo where
--- >    eq (Foo a b) (Foo c d) = eq a c `mapped` eq b d
--- >
--- > instance Eq Foo where
--- >    (=) = (===)
---
--- == Automatic deriving of `Equality` instances.
---
--- We often find ourselves wrapping existing types in new types
--- keeping in line with the philosophy of distinguishing sematically
--- distinct data with their types. It would be tedious to repeat the
--- above process for each such type. Often, we can get away by just
--- deriving these instances thereby saving a lot of boilerplate. For
--- example, consider a data type that needs to keep a 128-byte
--- secret. A simple deriving class would work in such cases.
---
--- >
--- > newtype Secret = Secret (Tuple 128 Word8) deriving (Equality, Eq)
--- >
---
--- The `Eq` instance here would be timing safe because it is
--- essentially the `Eq` instance of tuples. The deriving `Equality` is
--- not strictly required here. However, we suggest keeping it so that
--- on can define timing safe equality for other types that contain a
--- component of type `Secret`.
---
--- === Beware: deriving clause can be dangerous
---
--- The deriving clause that we defined above while convenient, hides a
--- danger when not used properly. For example, consider the following
--- definitions.
---
--- > data    Bad      = Bad Bar Biz deriving Eq
--- > newtype BadAgain = BadAgain (Bar, Biz) deriving (Eq, Equality)
--- >
---
--- The comparison for the elements of the type `Bad` would leak some
--- timing information /even/ when `Bar` and `Biz` are instances of
--- `Equality` and thus have timing safe equalities themselves. This is
--- because the automatic derivation of `Eq` instances in the above two
--- cases performs a component by component comparison and combines the
--- result using @`and`@. Due to boolean short circuiting, this
--- will lead to timing information being leaked.
---
--- For product types, we can safely derive the `Equality` instance and use
--- it to define the @Eq@ instance as follows
---
--- >
--- > newtype Okey2 = Okey (Foo, Bar) deriving Equality
--- >
--- > instance Eq Okey2 where
--- >    (=) = (===)
--- >
---
---
-
-
-
--- | All types that support timing safe equality are instances of this class.
-class Equality a where
-  eq :: a -> a -> Result
-
--- | Check whether two values are equal using the timing safe `eq`
--- function. Use this function when defining the `Eq` instance for a
--- Sensitive data type.
-(===) :: Equality a => a -> a -> Bool
-(===) a b = isSuccessful $ eq a b
-
-instance Equality Word where
-  eq a b = Result $ a `xor` b
-
-instance Equality Word8 where
-  eq w1 w2 = Result $ fromIntegral $ xor w1 w2
-
-instance Equality Word16 where
-  eq w1 w2 = Result $ fromIntegral $ xor w1 w2
-
-instance Equality Word32 where
-  eq w1 w2 = Result $ fromIntegral $ xor w1 w2
-
-
-#include "MachDeps.h"
-instance Equality Word64 where
--- It assumes that Word size is atleast 32 Bits
-#if WORD_SIZE_IN_BITS < 64
-  eq w1 w2 = eq w11 w21 `mappend` eq w12 w22
-    where
-      w11 :: Word
-      w12 :: Word
-      w21 :: Word
-      w22 :: Word
-      w11 = fromIntegral $ w1 `shiftR` 32
-      w12 = fromIntegral w1
-      w21 = fromIntegral $ w2 `shiftR` 32
-      w22 = fromIntegral w2
-#else
-  eq w1 w2 = Result $ fromIntegral $ xor w1 w2
-#endif
-
--- Now comes the boring instances for tuples.
-
-instance ( Equality a
-         , Equality b
-         ) => Equality (a , b) where
-  eq (a1,a2) (b1,b2) = eq a1 b1 `mappend` eq a2 b2
-
-
-instance ( Equality a
-         , Equality b
-         , Equality c
-         ) => Equality (a , b, c) where
-  eq (a1,a2,a3) (b1,b2,b3) = eq a1 b1 `mappend`
-                             eq a2 b2 `mappend`
-                             eq a3 b3
-
-
-instance ( Equality a
-         , Equality b
-         , Equality c
-         , Equality d
-         ) => Equality (a , b, c, d) where
-  eq (a1,a2,a3,a4) (b1,b2,b3,b4) = eq a1 b1 `mappend`
-                                   eq a2 b2 `mappend`
-                                   eq a3 b3 `mappend`
-                                   eq a4 b4
-
-instance ( Equality a
-         , Equality b
-         , Equality c
-         , Equality d
-         , Equality e
-         ) => Equality (a , b, c, d, e) where
-  eq (a1,a2,a3,a4,a5) (b1,b2,b3,b4,b5) = eq a1 b1 `mappend`
-                                         eq a2 b2 `mappend`
-                                         eq a3 b3 `mappend`
-                                         eq a4 b4 `mappend`
-                                         eq a5 b5
-
-
-instance ( Equality a
-         , Equality b
-         , Equality c
-         , Equality d
-         , Equality e
-         , Equality f
-         ) => Equality (a , b, c, d, e, f) where
-  eq (a1,a2,a3,a4,a5,a6) (b1,b2,b3,b4,b5,b6) = eq a1 b1 `mappend`
-                                               eq a2 b2 `mappend`
-                                               eq a3 b3 `mappend`
-                                               eq a4 b4 `mappend`
-                                               eq a5 b5 `mappend`
-                                               eq a6 b6
-
-instance ( Equality a
-         , Equality b
-         , Equality c
-         , Equality d
-         , Equality e
-         , Equality f
-         , Equality g
-         ) => Equality (a , b, c, d, e, f, g) where
-  eq (a1,a2,a3,a4,a5,a6,a7) (b1,b2,b3,b4,b5,b6,b7) = eq a1 b1 `mappend`
-                                                     eq a2 b2 `mappend`
-                                                     eq a3 b3 `mappend`
-                                                     eq a4 b4 `mappend`
-                                                     eq a5 b5 `mappend`
-                                                     eq a6 b6 `mappend`
-                                                     eq a7 b7
-
-
--- | The result of a comparison. This is an opaque type and the monoid instance essentially takes
--- AND of two comparisons in a timing safe way.
-newtype Result =  Result { unResult :: Word }
-
-#if MIN_VERSION_base(4,11,0)
-instance Semigroup Result where
-    (<>) a b = Result (unResult a .|. unResult b)
-#endif
-
-instance Monoid Result where
-  mempty      = Result 0
-  mappend a b = Result (unResult a .|. unResult b)
-  {-# INLINE mempty  #-}
-  {-# INLINE mappend #-}
-
--- | Checks whether a given equality comparison is successful.
-isSuccessful :: Result -> Bool
-{-# INLINE isSuccessful #-}
-isSuccessful = (==0) . unResult
-
--- | MVector for Results.
-newtype instance MVector s Result = MV_Result (MVector s Word)
--- | Vector of Results.
-newtype instance Vector    Result = V_Result  (Vector Word)
-
-instance Unbox Result
-
-instance GM.MVector MVector Result where
-  {-# INLINE basicLength #-}
-  {-# INLINE basicUnsafeSlice #-}
-  {-# INLINE basicOverlaps #-}
-  {-# INLINE basicUnsafeNew #-}
-  {-# INLINE basicUnsafeReplicate #-}
-  {-# INLINE basicUnsafeRead #-}
-  {-# INLINE basicUnsafeWrite #-}
-  {-# INLINE basicClear #-}
-  {-# INLINE basicSet #-}
-  {-# INLINE basicUnsafeCopy #-}
-  {-# INLINE basicUnsafeGrow #-}
-  basicLength          (MV_Result v)            = GM.basicLength v
-  basicUnsafeSlice i n (MV_Result v)            = MV_Result $ GM.basicUnsafeSlice i n v
-  basicOverlaps (MV_Result v1) (MV_Result v2)   = GM.basicOverlaps v1 v2
-
-  basicUnsafeRead  (MV_Result v) i              = Result `liftM` GM.basicUnsafeRead v i
-  basicUnsafeWrite (MV_Result v) i (Result x)   = GM.basicUnsafeWrite v i x
-
-  basicClear (MV_Result v)                      = GM.basicClear v
-  basicSet   (MV_Result v)         (Result x)   = GM.basicSet v x
-
-  basicUnsafeNew n                              = MV_Result `liftM` GM.basicUnsafeNew n
-  basicUnsafeReplicate n     (Result x)         = MV_Result `liftM` GM.basicUnsafeReplicate n x
-  basicUnsafeCopy (MV_Result v1) (MV_Result v2) = GM.basicUnsafeCopy v1 v2
-  basicUnsafeGrow (MV_Result v)   n             = MV_Result `liftM` GM.basicUnsafeGrow v n
-
-#if MIN_VERSION_vector(0,11,0)
-  basicInitialize (MV_Result v)               = GM.basicInitialize v
-#endif
-
-
-
-instance G.Vector Vector Result where
-  {-# INLINE basicUnsafeFreeze #-}
-  {-# INLINE basicUnsafeThaw #-}
-  {-# INLINE basicLength #-}
-  {-# INLINE basicUnsafeSlice #-}
-  {-# INLINE basicUnsafeIndexM #-}
-  {-# INLINE elemseq #-}
-  basicUnsafeFreeze (MV_Result v)             = V_Result  `liftM` G.basicUnsafeFreeze v
-  basicUnsafeThaw (V_Result v)                = MV_Result `liftM` G.basicUnsafeThaw v
-  basicLength (V_Result v)                    = G.basicLength v
-  basicUnsafeSlice i n (V_Result v)           = V_Result $ G.basicUnsafeSlice i n v
-  basicUnsafeIndexM (V_Result v) i            = Result   `liftM`  G.basicUnsafeIndexM v i
-
-  basicUnsafeCopy (MV_Result mv) (V_Result v) = G.basicUnsafeCopy mv v
-  elemseq _ (Result x)                        = G.elemseq (undefined :: Vector a) x
diff --git a/Raaz/Core/Types/Pointer.hs b/Raaz/Core/Types/Pointer.hs
deleted file mode 100644
--- a/Raaz/Core/Types/Pointer.hs
+++ /dev/null
@@ -1,444 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE ForeignFunctionInterface   #-}
-
-
--- | This module exposes types that builds in type safety into some of
--- the low level pointer operations. The functions here are pretty low
--- level and will be required only by developers of the library that
--- to the core of the library.
-module Raaz.Core.Types.Pointer
-       ( -- * Pointers, offsets, and alignment
-         Pointer
-         -- ** Type safe length units.
-       , LengthUnit(..)
-       , BYTES(..), BITS(..), inBits
-       , sizeOf
-         -- *** Some length arithmetic
-       , bitsQuotRem, bytesQuotRem
-       , bitsQuot, bytesQuot
-       , atLeast, atLeastAligned, atMost
-         -- ** Types measuring alignment
-       , Alignment, wordAlignment
-       , ALIGN
-       , alignment, alignPtr, movePtr, alignedSizeOf, nextAlignedPtr, peekAligned, pokeAligned
-         -- ** Allocation functions.
-       , allocaAligned, allocaSecureAligned, allocaBuffer, allocaSecure, mallocBuffer
-         -- ** Some buffer operations
-       , memset, memmove, memcpy
-       , hFillBuf
-       ) where
-
-
-
-import           Control.Applicative
-import           Control.Exception     ( bracket_)
-import           Control.Monad         ( void, when )
-import           Control.Monad.IO.Class
-import           Data.Monoid
-import           Data.Word
-import           Foreign.Marshal.Alloc
-import           Foreign.Ptr           ( Ptr         )
-import qualified Foreign.Ptr           as FP
-import           Foreign.Storable      ( Storable, peek, poke )
-import qualified Foreign.Storable      as FS
-import           System.IO             (hGetBuf, Handle)
-
-import Prelude -- To stop the annoying warnings of Applicatives and Monoids.
-
-import Raaz.Core.MonoidalAction
-import Raaz.Core.Types.Equality
-import Raaz.Core.Types.Copying
-
--- $basics$
---
--- The main concepts introduced here are the following
---
--- [`Pointer`:] The generic pointer type that is used through the
--- library.
---
--- [`LengthUnit`:] This class captures types units of length.
---
--- [`Alignment`:] A dedicated type that is used to keep track of
--- alignment constraints.  offsets in We have the generic pointer type
--- `Pointer` and distinguish between different length units at the
--- type level. This helps in to avoid a lot of length conversion
--- errors.
-
-
-
--- Developers notes: I assumes that word alignment is alignment
--- safe. If this is not the case one needs to fix this to avoid
--- performance degradation or worse incorrect load/store.
-
-
--- | A type whose only purpose in this universe is to provide
--- alignment safe pointers.
-newtype Align = Align Word deriving Storable
-
--- | The pointer type used by all cryptographic library.
-type Pointer = Ptr Align
-
-
--- | In cryptographic settings, we need to measure pointer offsets and
--- buffer sizes. The smallest of length/offset that we have is bytes
--- measured using the type `BYTES`. In various other circumstances, it
--- would be more natural to measure these in multiples of bytes. For
--- example, when allocating buffer to use encrypt using a block cipher
--- it makes sense to measure the buffer size in multiples of block of
--- the cipher. Explicit conversion between these length units, while
--- allocating or moving pointers, involves a lot of low level scaling
--- that is also error prone. To avoid these errors due to unit
--- conversions, we distinguish between different length units at the
--- type level. This type class capturing all such types, i.e. types
--- that stand of length units. Allocation functions and pointer
--- arithmetic are generalised to these length units.
---
--- All instances of a `LengthUnit` are required to be instances of
--- `Monoid` where the monoid operation gives these types the natural
--- size/offset addition semantics: i.e. shifting a pointer by offset
--- @a `mappend` b@ is same as shifting it by @a@ and then by @b@.
-class (Enum u, Monoid u) => LengthUnit u where
-  -- | Express the length units in bytes.
-  inBytes :: u -> BYTES Int
-
--- | Type safe lengths/offsets in units of bytes.
-newtype BYTES a  = BYTES a
-        deriving ( Show, Eq, Equality, Ord, Enum, Integral
-                 , Real, Num, Storable, Bounded
-                 )
-
--- | Type safe lengths/offsets in units of bits.
-newtype BITS  a  = BITS  a
-        deriving ( Show, Eq, Equality, Ord, Enum, Integral
-                 , Real, Num, Storable, Bounded
-                 )
-
--- | Type safe length unit that measures offsets in multiples of word
--- length. This length unit can be used if one wants to make sure that
--- all offsets are word aligned.
-newtype ALIGN    = ALIGN { unALIGN :: Int }
-                 deriving ( Show, Eq,Ord, Enum, Integral
-                          , Real, Num, Storable
-                          )
-#if MIN_VERSION_base(4,11,0)
-
-instance Num a => Semigroup (BYTES a) where
-  (<>) = (+)
-
-#endif
-
-instance Num a => Monoid (BYTES a) where
-  mempty  = 0
-  mappend = (+)
-
-#if MIN_VERSION_base(4,11,0)
-
-instance Semigroup ALIGN where
-  (<>) x y = ALIGN $ unALIGN x + unALIGN y
-
-#endif
-
-instance Monoid ALIGN where
-  mempty  = ALIGN 0
-  mappend x y = ALIGN $ unALIGN x + unALIGN y
-
-instance LengthUnit ALIGN where
-  inBytes (ALIGN x) = BYTES $ x * FS.alignment (undefined :: Align)
-  {-# INLINE inBytes #-}
-
-instance LengthUnit (BYTES Int) where
-  inBytes = id
-  {-# INLINE inBytes #-}
-
--- | Express the length units in bits.
-inBits  :: LengthUnit u => u -> BITS Word64
-inBits u = BITS $ 8 * fromIntegral by
-  where BYTES by = inBytes u
-
--- | Express length unit @src@ in terms of length unit @dest@ rounding
--- upwards.
-atLeast :: ( LengthUnit src
-           , LengthUnit dest
-           )
-        => src
-        -> dest
-atLeast src | r == 0    = u
-            | otherwise = succ u
-    where (u , r) = bytesQuotRem $ inBytes src
-
-
--- | Often we want to allocate a buffer of size @l@. We also want to
--- make sure that the buffer starts at an alignment boundary
--- @a@. However, the standard word allocation functions might return a
--- pointer that is not aligned as desired. The @atLeastAligned l a@
--- returns a length @n@ such the length @n@ is big enough to ensure
--- that there is at least @l@ length of valid buffer starting at the
--- next pointer aligned at boundary @a@. If the alignment required in
--- @a@ then allocating @l + a - 1 should do the trick.
-atLeastAligned :: LengthUnit l => l -> Alignment -> ALIGN
-atLeastAligned l a = n + pad - 1
-  where n = atLeast l
-        -- Alignment adjusted to word boundary.
-        algn = wordAlignment   <> a
-        pad  = atLeast $ BYTES  $ unAlignment algn
-
-
--- | Express length unit @src@ in terms of length unit @dest@ rounding
--- downwards.
-atMost :: ( LengthUnit src
-          , LengthUnit dest
-          )
-       => src
-       -> dest
-atMost = fst . bytesQuotRem . inBytes
-
--- | A length unit @u@ is usually a multiple of bytes. The function
--- `bytesQuotRem` is like `quotRem`: the value @byteQuotRem bytes@ is
--- a tuple @(x,r)@, where @x@ is @bytes@ expressed in the unit @u@
--- with @r@ being the reminder.
-bytesQuotRem :: LengthUnit u
-             => BYTES Int
-             -> (u , BYTES Int)
-bytesQuotRem bytes = (u , r)
-  where divisor       = inBytes (toEnum 1 `asTypeOf` u)
-        (BYTES q, r)  = bytes `quotRem` divisor
-        u             = toEnum q
-
--- | Function similar to `bytesQuotRem` but returns only the quotient.
-bytesQuot :: LengthUnit u
-          => BYTES Int
-          -> u
-bytesQuot bytes = u
-  where divisor = inBytes (toEnum 1 `asTypeOf` u)
-        q       = bytes `quot` divisor
-        u       = toEnum $ fromEnum q
-
-
--- | Function similar to `bytesQuotRem` but works with bits instead.
-bitsQuotRem :: LengthUnit u
-            => BITS Word64
-            -> (u , BITS Word64)
-bitsQuotRem bits = (u , r)
-  where divisor = inBits (toEnum 1 `asTypeOf` u)
-        (q, r)  = bits `quotRem` divisor
-        u       = toEnum $ fromEnum q
-
--- | Function similar to `bitsQuotRem` but returns only the quotient.
-bitsQuot :: LengthUnit u
-         => BITS Word64
-         -> u
-bitsQuot bits = u
-  where divisor = inBits (toEnum 1 `asTypeOf` u)
-        q       = bits `quot` divisor
-        u       = toEnum $ fromEnum q
-
--- | The most interesting monoidal action for us.
-instance LengthUnit u => LAction u Pointer where
-  a <.> ptr  = movePtr ptr a
-  {-# INLINE (<.>) #-}
-
------------------------- Alignment --------------------------------
-
--- | Types to measure alignment in units of bytes.
-newtype Alignment = Alignment { unAlignment :: Int }
-        deriving ( Show, Eq, Ord, Enum, Integral
-                 , Real, Num
-                 )
-
--- | The default alignment to use is word boundary.
-wordAlignment :: Alignment
-wordAlignment = alignment (undefined :: Align)
-
-#if MIN_VERSION_base(4,11,0)
-
-instance Semigroup Alignment where
-  (<>) = lcm
-#endif
-
-instance Monoid Alignment where
-  mempty  = Alignment 1
-  mappend = lcm
-
-
----------- Type safe versions of some pointer functions -----------------
-
--- | Compute the size of a storable element.
-sizeOf :: Storable a => a -> BYTES Int
-sizeOf = BYTES . FS.sizeOf
-
--- | Size of the buffer to be allocated to store an element of type
--- @a@ so as to guarantee that there exist enough space to store the
--- element after aligning the pointer. If the size of the element is
--- @s@ and its alignment is @a@ then this quantity is essentially
--- equal to @s + a - 1@. All units measured in word alignment.
-alignedSizeOf  :: Storable a => a -> ALIGN
-alignedSizeOf a =  atLeastAligned (sizeOf a) $ alignment a
-
--- | Compute the alignment for a storable object.
-alignment :: Storable a => a -> Alignment
-alignment =  Alignment . FS.alignment
-
--- | Align a pointer to the appropriate alignment.
-alignPtr :: Ptr a -> Alignment -> Ptr a
-alignPtr ptr = FP.alignPtr ptr . unAlignment
-
--- | Move the given pointer with a specific offset.
-movePtr :: LengthUnit l => Ptr a -> l -> Ptr a
-movePtr ptr l = FP.plusPtr ptr offset
-  where BYTES offset = inBytes l
-
--- | Compute the next aligned pointer starting from the given pointer
--- location.
-nextAlignedPtr :: Storable a => Ptr a -> Ptr a
-nextAlignedPtr ptr = alignPtr ptr $ alignment $ elementOfPtr ptr
-  where elementOfPtr :: Ptr b -> b
-        elementOfPtr _ = undefined
-
--- | Peek the element from the next aligned location.
-peekAligned :: Storable a => Ptr a -> IO a
-peekAligned = peek . nextAlignedPtr
-
--- | Poke the element from the next aligned location.
-pokeAligned     :: Storable a => Ptr a -> a -> IO ()
-pokeAligned ptr =  poke $ nextAlignedPtr ptr
-
--------------------------- Allocation  ---------------------------
-
--- | A less general version of `allocaAligned` where the pointer passed
--- is aligned to word boundary.
-allocaBuffer :: LengthUnit l
-             => l                  -- ^ buffer length
-             -> (Pointer -> IO b)  -- ^ the action to run
-             -> IO b
-{-# INLINE allocaBuffer #-}
-allocaBuffer = allocaAligned wordAlignment
-
-
--- | The expression @allocaAligned a l action@ allocates a local
--- buffer of length @l@ and alignment @a@ and passes it on to the IO
--- action @action@. No explicit freeing of the memory is required as
--- the memory is allocated locally and freed once the action
--- finishes. It is better to use this function than
--- @`allocaBytesAligned`@ as it does type safe scaling and alignment.
-allocaAligned :: LengthUnit l
-              => Alignment          -- ^ the alignment of the buffer
-              -> l                  -- ^ size of the buffer
-              -> (Pointer -> IO b)  -- ^ the action to run
-              -> IO b
-allocaAligned algn l = allocaBytesAligned b a
-  where BYTES     b = inBytes l
-        Alignment a = algn
-
------------------ Secure allocation ---------------------------------
-
--- | A less general version of `allocaSecureAligned` where the pointer passed
--- is aligned to word boundary
-allocaSecure :: LengthUnit l
-             => l
-             -> (Pointer -> IO b)
-             -> IO b
-allocaSecure = allocaSecureAligned wordAlignment
-
-foreign import ccall unsafe "raaz/core/memory.h raazMemorylock"
-  c_mlock :: Pointer -> BYTES Int -> IO Int
-
-foreign import ccall unsafe "raaz/core/memory.h raazMemoryunlock"
-  c_munlock :: Pointer -> BYTES Int -> IO ()
-
-
--- | This function allocates a chunk of "secure" memory of a given
--- size and runs the action. The memory (1) exists for the duration of
--- the action (2) will not be swapped during that time and (3) will be
--- wiped clean and deallocated when the action terminates either
--- directly or indirectly via errors. While this is mostly secure,
--- there can be strange situations in multi-threaded application where
--- the memory is not wiped out. For example if you run a
--- crypto-sensitive action inside a child thread and the main thread
--- gets exists, then the child thread is killed (due to the demonic
--- nature of haskell threads) immediately and might not give it chance
--- to wipe the memory clean. This is a problem inherent to how the
--- `bracket` combinator works inside a child thread.
---
--- TODO: File this insecurity in the wiki.
---
-allocaSecureAligned :: LengthUnit l
-                    => Alignment
-                    -> l
-                    -> (Pointer -> IO a)
-                    -> IO a
-
-
-
-
-allocaSecureAligned a l action = allocaAligned a l actualAction
-  where sz = inBytes l
-        actualAction cptr = let
-          lockIt    = do c <- c_mlock cptr sz
-                         when (c /= 0) $ fail "secure memory: unable to lock memory"
-          releaseIt =  memset cptr 0 l >>  c_munlock cptr sz
-          in bracket_ lockIt releaseIt $ action cptr
-
--- | Creates a memory of given size. It is better to use over
--- @`mallocBytes`@ as it uses typesafe length.
-mallocBuffer :: LengthUnit l
-             => l                    -- ^ buffer length
-             -> IO Pointer
-{-# INLINE mallocBuffer #-}
-mallocBuffer l = mallocBytes bytes
-  where BYTES bytes = inBytes l
-
-
--------------------- Low level pointer operations ------------------
-
--- | A version of `hGetBuf` which works for any type safe length units.
-hFillBuf :: LengthUnit bufSize
-         => Handle
-         -> Pointer
-         -> bufSize
-         -> IO (BYTES Int)
-{-# INLINE hFillBuf #-}
-hFillBuf handle cptr bufSize = BYTES <$> hGetBuf handle cptr bytes
-  where BYTES bytes = inBytes bufSize
-
-------------------- Copy move and set contents ----------------------------
-
--- | Some common PTR functions abstracted over type safe length.
-foreign import ccall unsafe "string.h memcpy" c_memcpy
-    :: Dest Pointer -> Src Pointer -> BYTES Int -> IO Pointer
-
--- | Copy between pointers.
-memcpy :: (MonadIO m, LengthUnit l)
-       => Dest Pointer -- ^ destination
-       -> Src  Pointer -- ^ src
-       -> l            -- ^ Number of Bytes to copy
-       -> m ()
-memcpy dest src = liftIO . void . c_memcpy dest src . inBytes
-
-{-# SPECIALIZE memcpy :: Dest Pointer -> Src Pointer -> BYTES Int -> IO () #-}
-
-foreign import ccall unsafe "string.h memmove" c_memmove
-    :: Dest Pointer -> Src Pointer -> BYTES Int -> IO Pointer
-
--- | Move between pointers.
-memmove :: (MonadIO m, LengthUnit l)
-        => Dest Pointer -- ^ destination
-        -> Src Pointer  -- ^ source
-        -> l            -- ^ Number of Bytes to copy
-        -> m ()
-memmove dest src = liftIO . void . c_memmove dest src . inBytes
-{-# SPECIALIZE memmove :: Dest Pointer -> Src Pointer -> BYTES Int -> IO () #-}
-
-foreign import ccall unsafe "string.h memset" c_memset
-    :: Pointer -> Word8 -> BYTES Int -> IO Pointer
-
--- | Sets the given number of Bytes to the specified value.
-memset :: (MonadIO m, LengthUnit l)
-       => Pointer -- ^ Target
-       -> Word8     -- ^ Value byte to set
-       -> l         -- ^ Number of bytes to set
-       -> m ()
-memset p w = liftIO . void . c_memset p w . inBytes
-{-# SPECIALIZE memset :: Pointer -> Word8 -> BYTES Int -> IO () #-}
diff --git a/Raaz/Core/Types/Tuple.hs b/Raaz/Core/Types/Tuple.hs
deleted file mode 100644
--- a/Raaz/Core/Types/Tuple.hs
+++ /dev/null
@@ -1,187 +0,0 @@
-{-# LANGUAGE CPP                   #-}
-{-# LANGUAGE DataKinds             #-}
-{-# LANGUAGE ConstraintKinds      #-}
-{-# LANGUAGE KindSignatures        #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE FlexibleInstances     #-}
-{-# LANGUAGE TypeFamilies          #-}
-{-# LANGUAGE RankNTypes            #-}
-{-# LANGUAGE ScopedTypeVariables   #-}
-{-# LANGUAGE TypeOperators         #-}
-
--- | Tuples of unboxed values with type level length encoding.
-module Raaz.Core.Types.Tuple
-       ( -- * Length encoded tuples
-         Tuple, Dimension, dimension, initial, diagonal
-       , repeatM, zipWith
-         -- ** Unsafe operations
-       , unsafeFromList
-       ) where
-
-import           Control.Applicative
-import qualified Data.List           as L
-import           Data.Monoid
-
-#if MIN_VERSION_base(4,7,0)
-import           Data.Proxy
-#endif
-
-import qualified Data.Vector.Unboxed as V
-import           GHC.TypeLits
-import           Foreign.Ptr                 ( castPtr, Ptr )
-import           Foreign.Storable            ( Storable(..) )
-import           Prelude hiding              ( length, zipWith )
-
-
-import Raaz.Core.Types.Equality
-import Raaz.Core.Types.Endian
-import Raaz.Core.Transfer
-import Raaz.Core.Parse.Applicative
-
--- | Tuples that encode their length in their types. For tuples, we call
--- the length its dimension.
-newtype Tuple (dim :: Nat) a = Tuple { unTuple :: V.Vector a }
-                             deriving Show
-
-instance (V.Unbox a, Equality a) => Equality (Tuple dim a) where
-  eq (Tuple u) (Tuple v) = V.foldl' mappend mempty $ V.zipWith eq u v
-
--- | Equality checking is timing safe.
-instance (V.Unbox a, Equality a) => Eq (Tuple dim a) where
-  (==) = (===)
-
--- | Function to make the type checker happy
-getA :: Tuple dim a -> a
-getA _ = undefined
-
--- | Function that returns the dimension of the tuple. The dimension
--- is calculated without inspecting the tuple and hence the term
--- @`dimension` (undefined :: Tuple 5 Int)@ will evaluate to 5.
-#if MIN_VERSION_base(4,7,0)
-
--- | The constaint on the dimension of the tuple (since base 4.7.0)
-type Dimension (dim :: Nat) = KnownNat dim
-
-{-@ assume natValInt :: Dimension dim => proxy dim -> { v : Int | v == dim } @-}
-natValInt :: Dimension dim => proxy dim -> Int
-natValInt = fromEnum . natVal
-
--- | This combinator returns the dimension of the tuple.
-{-@ dimension :: Dimension dim  => Raaz.Core.Types.Tuple.Tuple dim a -> {n: Int | n == dim } @-}
-dimension  :: Dimension dim => Tuple dim a -> Int
-dimensionP :: Dimension dim
-           => Proxy dim
-           -> Tuple dim a
-           -> Int
-dimensionP sz _ = natValInt sz
-dimension = dimensionP Proxy
-
-#else
-
--- | The constaint on the dimension of the tuple (pre base 4.7.0)
-type Dimension (dim :: Nat) = SingI dim
-
--- | This combinator returns the dimension of the tuple.
-dimension  :: Dimension dim => Tuple dim a -> Int
-dimensionP :: Dimension dim
-           => Sing dim
-           -> Tuple dim a
-           -> Int
-dimension       = withSing dimensionP
-dimensionP sz _ = fromEnum $ fromSing sz
-
-#endif
-
--- | Get the dimension to parser
-getParseDimension :: (V.Unbox a, Dimension dim)
-                  => Parser (Tuple dim a) -> Int
-getTupFromP       :: (V.Unbox a, Dimension dim)
-                  => Parser (Tuple dim a) -> Tuple dim a
-
-getParseDimension = dimension . getTupFromP
-getTupFromP _     = undefined
-
-
-
-instance (V.Unbox a, Storable a, Dimension dim)
-         => Storable (Tuple dim a) where
-
-  sizeOf tup = dimension tup * sizeOf (getA tup)
-  alignment  = alignment . getA
-
-  peek  = unsafeRunParser tupParser . castPtr
-    where len = getParseDimension tupParser
-          tupParser = Tuple <$> unsafeParseStorableVector len
-
-  poke ptr tup = unsafeWrite writeTup cptr
-    where writeTup = writeStorableVector $ unTuple tup
-          cptr     = castPtr ptr
-
-
-instance (V.Unbox a, EndianStore a, Dimension dim)
-         => EndianStore (Tuple dim a) where
-
-  load = unsafeRunParser tupParser . castPtr
-     where tupParser = Tuple <$> unsafeParseVector len
-           len       = getParseDimension tupParser
-
-  store ptr tup = unsafeWrite writeTup cptr
-     where writeTup = writeVector $ unTuple tup
-           cptr     = castPtr ptr
-
-  adjustEndian ptr n = adjustEndian (unTupPtr ptr) $ nos ptr undefined
-       where nos     :: Ptr (Tuple dim a) -> Tuple dim a -> Int
-             nos _ w = dimension w * n
-             unTupPtr   :: Ptr (Tuple dim a) -> Ptr a
-             unTupPtr   = castPtr
-
-
--- | Construct a tuple by repeating a monadic action.
-repeatM :: (Functor m, Monad m, V.Unbox a, Dimension dim) => m a -> m (Tuple dim a)
-repeatM = mkTupM undefined
-  where mkTupM :: (Functor m, V.Unbox a, Monad m, Dimension dim) => Tuple dim a -> m a -> m (Tuple dim a)
-        mkTupM uTup action = Tuple <$> V.replicateM (dimension uTup) action
-
-
--- | Construct a tuple out of the list. This function is unsafe and
--- will result in run time error if the list is not of the correct
--- dimension.
-{-@ unsafeFromList :: (V.Unbox a, Dimension dim)
-                   => { xs:[a] | len xs = dim }
-                   -> Raaz.Core.Types.Tuple.Tuple dim a
-
-@-}
-unsafeFromList :: (V.Unbox a, Dimension dim) => [a] -> Tuple dim a
-unsafeFromList xs
-  | dimension tup == L.length xs = tup
-  | otherwise                    = wrongLengthMesg
-  where tup = Tuple $ V.fromList xs
-        wrongLengthMesg = error "tuple: unsafeFromList: wrong length"
-
--- | Computes the initial fragment of a tuple. No length needs to be given
--- as it is infered from the types.
-{-@ lazy initial @-}
-initial ::  (V.Unbox a, Dimension dim0)
-         => Tuple dim1 a
-         -> Tuple dim0 a
-initial = mkTuple undefined
-  where mkTuple :: (V.Unbox a, Dimension dim0) => Tuple dim0 a -> Tuple dim1 a  -> Tuple dim0 a
-        mkTuple uTup tup = Tuple $ V.take (dimension uTup) $ unTuple tup
-
--- TODO: Put a constraint that dim0 <= dim1
-
--- | The @diagonal a@ gives a tuple, all of whose entries is @a@.
-diagonal :: (V.Unbox a, Dimension dim) => a -> Tuple dim a
-diagonal = mkTup undefined
-  where mkTup :: (V.Unbox a, Dimension dim) => Tuple dim a -> a -> Tuple dim a
-        mkTup uTup a = Tuple $ V.replicate (dimension uTup) a
-
-
--- | A zipwith function for tuples
-
-zipWith :: (V.Unbox a, V.Unbox b, V.Unbox c)
-        => (a -> b -> c)
-        -> Tuple dim a
-        -> Tuple dim b
-        -> Tuple dim c
-zipWith f (Tuple at) (Tuple bt)= Tuple $ V.zipWith f at bt
diff --git a/Raaz/Core/Util.hs b/Raaz/Core/Util.hs
deleted file mode 100644
--- a/Raaz/Core/Util.hs
+++ /dev/null
@@ -1,11 +0,0 @@
-{-|
-
-Some useful utility functions and combinators.
-
--}
-
-module Raaz.Core.Util
-       ( module Raaz.Core.Util.ByteString
-       ) where
-
-import Raaz.Core.Util.ByteString
diff --git a/Raaz/Core/Util/ByteString.hs b/Raaz/Core/Util/ByteString.hs
deleted file mode 100644
--- a/Raaz/Core/Util/ByteString.hs
+++ /dev/null
@@ -1,91 +0,0 @@
-{-|
-
-Some utility function for byte strings.
-
--}
-
-{-# LANGUAGE FlexibleContexts #-}
-module Raaz.Core.Util.ByteString
-       ( length, replicate
-       , fromByteStringStorable
-       , create, createFrom
-       , withByteString
-       , unsafeCopyToPointer
-       , unsafeNCopyToPointer
-       ) where
-
-import           Prelude            hiding (length, replicate)
-import qualified Data.ByteString    as B
-import           Data.ByteString    (ByteString)
-import qualified Data.ByteString.Internal as BI
-import           Data.Word
-import           Foreign.ForeignPtr (withForeignPtr)
-import           Foreign.Ptr        (castPtr, plusPtr)
-import           Foreign.Storable   (peek, Storable)
-
-import           System.IO.Unsafe   (unsafePerformIO)
-
-import           Raaz.Core.Types.Pointer
-import           Raaz.Core.Types.Copying
-
--- | A typesafe length for Bytestring
-length :: ByteString -> BYTES Int
-length = BYTES . B.length
-
--- | A type safe version of replicate
-replicate :: LengthUnit l => l -> Word8 -> ByteString
-replicate l = B.replicate sz
-  where BYTES sz = inBytes l
-
--- | Copy the bytestring to the crypto buffer. This operation leads to
--- undefined behaviour if the crypto pointer points to an area smaller
--- than the size of the byte string.
-unsafeCopyToPointer :: ByteString   -- ^ The source.
-                    -> Pointer      -- ^ The destination.
-                    -> IO ()
-unsafeCopyToPointer bs cptr =  withForeignPtr fptr $
-           \ p -> memcpy dptr (source $ p `plusPtr` offset) (BYTES n)
-    where (fptr, offset,n) = BI.toForeignPtr bs
-          dptr = destination $ castPtr cptr
-
-
--- | Similar to `unsafeCopyToPointer` but takes an additional input
--- @n@ which is the number of bytes (expressed in type safe length
--- units) to transfer. This operation leads to undefined behaviour if
--- either the bytestring is shorter than @n@ or the crypto pointer
--- points to an area smaller than @n@.
-unsafeNCopyToPointer :: LengthUnit n
-                       => n              -- ^ length of data to be copied
-                       -> ByteString     -- ^ The source byte string
-                       -> Pointer        -- ^ The buffer
-                       -> IO ()
-unsafeNCopyToPointer n bs cptr = withForeignPtr fptr $
-           \ p -> memcpy dptr (source $ p `plusPtr` offset) n
-    where (fptr, offset,_) = BI.toForeignPtr bs
-          dptr             = destination $ castPtr cptr
-
--- | Works directly on the pointer associated with the
--- `ByteString`. This function should only read and not modify the
--- contents of the pointer.
-withByteString :: ByteString -> (Pointer -> IO a) -> IO a
-withByteString bs f = withForeignPtr fptr (f . flip plusPtr off . castPtr)
-  where (fptr, off, _) = BI.toForeignPtr bs
-
--- | Get the value from the bytestring using `peek`.
-fromByteStringStorable :: Storable k => ByteString -> k
-fromByteStringStorable str = unsafePerformIO $ withByteString str (peek . castPtr)
-
-
--- | The action @create l act@ creates a length @l@ bytestring where
--- the contents are filled using the the @act@ to fill the buffer.
-create :: LengthUnit l => l -> (Pointer -> IO ()) -> IO ByteString
-create l act = myCreate (act . castPtr)
-  where myCreate =  BI.create $ fromIntegral $ inBytes l
-
--- | The IO action @createFrom n cptr@ creates a bytestring by copying
--- @n@ bytes from the pointer @cptr@.
-createFrom :: LengthUnit l => l -> Pointer -> IO ByteString
-createFrom l cptr = create l filler
-  where filler dptr = memcpy (destination $ castPtr dptr) (source cptr) l
-
-----------------------  Hexadecimal encoding. -----------------------------------
diff --git a/Raaz/Hash.hs b/Raaz/Hash.hs
deleted file mode 100644
--- a/Raaz/Hash.hs
+++ /dev/null
@@ -1,96 +0,0 @@
-{-|
-
-This module exposes all the cryptographic hash functions available
-under the raaz library.
-
--}
-{-# OPTIONS_GHC -fno-warn-warnings-deprecations #-}
-
-module Raaz.Hash
-       (
-         -- * Cryptographic hashes and hmacs.
-         -- $computingHash$
-
-         -- ** Encoding and displaying.
-         -- $encoding$
-         --
-         Hash, hash, hashFile, hashSource
-       , HMAC, hmac, hmacFile, hmacSource
-         -- * Exposing individual hashes.
-         -- $individualHashes$
-       , module Raaz.Hash.Blake2
-       , module Raaz.Hash.Sha224
-       , module Raaz.Hash.Sha256
-       , module Raaz.Hash.Sha384
-       , module Raaz.Hash.Sha512
-       -- , module Raaz.Hash.Blake256
-
-       ) where
-
--- import Raaz.Hash.Blake256
-
-import Raaz.Hash.Blake2
-import Raaz.Hash.Sha224
-import Raaz.Hash.Sha256
-import Raaz.Hash.Sha384
-import Raaz.Hash.Sha512
-
-import Raaz.Hash.Internal      ( Hash, hash, hashFile, hashSource )
-import Raaz.Hash.Internal.HMAC ( HMAC, hmac, hmacFile, hmacSource )
-
--- $computingHash$
---
---
--- The cryptographic hashes provided by raaz give the following
--- guarantees:
---
--- 1. Distinct hashes are distinct types and hence it is a compiler
---    error to compare two different hashes.
---
--- 2. A hash and its associated hmac are distinct types and hence
---    it is an compile time error to compare a hash with its  hmac.
---
--- 3. The `Eq` instance for hashes and the corresponding hmacs use
---    a constant time equality test and hence it is safe to check
---    equality using the operator `==`.
---
--- The functions `hash`, `hashFile`, and `hashSource` provide a rather
--- high level interface for computing hashes. For hmacs the associated
--- functions are `hmac`, `hmacFile`, and `hmacSource`
---
--- === NOTE: SHA1 is broken.
---
--- SHA1 is no more available form this module, its use is highly
--- depreciated. If you want to use it for transition please import
--- Raaz.Hash.Sha1 specifically
-
-
--- $encoding$
---
--- When interfacing with other applications or when printing output to
--- users, it is often necessary to encode hash, hmac or their keys as
--- strings. Applications usually present hashes encoded in base16. The
--- `Show` and `Data.String.IsString` instances for the hashes exposed
--- here follow this convention.
---
--- More generaly, hashes, hmacs and their key are instances of type
--- class `Raaz.Core.Encode.Encodable` and can hence can be encoded in
--- any of the formats supported in raaz.
-
--- $individualHashes$
---
--- Individual hash and hmacs are exposed via their respective modules.
--- These module also export the specialized variants for `hashSource`,
--- `hash` and `hashFile` for specific hashes.  For example, if you are
--- interested only in say `SHA512` you can import the module
--- "Raaz.Hash.Sha512". This will expose the functions `sha512Source`,
--- `sha512` and `sha512File` which are specialized variants of
--- `hashSource` `hash` and `hashFile` respectively for the hash
--- `SHA512`. For example, if you want to print the sha512 checksum of
--- a file, you can use the following.
---
--- > sha512Checksum :: FilePath -> IO ()
--- >            -- print the sha512 checksum of a given file.
--- > sha512Checksum fname =  sha512File fname >>= print
-
-{-# ANN module "HLint: ignore Use import/export shortcut" #-}
diff --git a/Raaz/Hash/Blake2.hs b/Raaz/Hash/Blake2.hs
deleted file mode 100644
--- a/Raaz/Hash/Blake2.hs
+++ /dev/null
@@ -1,39 +0,0 @@
-{-|
-
-This module exposes combinators to compute the BLAKE2b hash and the
-associated HMAC for some common types.
-
--}
-
-module Raaz.Hash.Blake2
-       ( -- * The BLAKE2 cryptographic hashes
-         BLAKE2b, BLAKE2s
-       , blake2b, blake2bFile, blake2bSource
-       ) where
-
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Lazy as L
-
-import Raaz.Core
-
-import Raaz.Hash.Internal        ( hashSource, hash, hashFile       )
-import Raaz.Hash.Blake2.Internal
-import Raaz.Hash.Blake2.Recommendation()
-
--- | Compute the blake2b hash of an instance of `PureByteSource`. Use
--- this for computing the sha1 hash of a strict or lazy byte string.
-blake2b       :: PureByteSource src => src -> BLAKE2b
-blake2b       = hash
-
-
-{-# SPECIALIZE blake2b :: B.ByteString -> BLAKE2b #-}
-{-# SPECIALIZE blake2b :: L.ByteString -> BLAKE2b #-}
-
-
--- | Compute the blake2b hash of a file.
-blake2bFile   :: FilePath -> IO BLAKE2b
-blake2bFile   = hashFile
-
--- | Compute the blake2b hash of a general byte source.
-blake2bSource :: ByteSource src => src -> IO BLAKE2b
-blake2bSource = hashSource
diff --git a/Raaz/Hash/Blake2/Implementation/CPortable.hs b/Raaz/Hash/Blake2/Implementation/CPortable.hs
deleted file mode 100644
--- a/Raaz/Hash/Blake2/Implementation/CPortable.hs
+++ /dev/null
@@ -1,98 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface   #-}
--- | The portable C-implementation of SHA1
-module Raaz.Hash.Blake2.Implementation.CPortable
-       ( implementation2b
-       , implementation2s
-       ) where
-
-import Foreign.Ptr              ( Ptr )
-import Data.Word
-import Raaz.Core
-import Raaz.Hash.Internal
-import Raaz.Hash.Blake2.Internal
-
--- | The portable C implementation of BLAKE2b.
-implementation2b :: Implementation BLAKE2b
-implementation2b =  SomeHashI cPortable2b
-
--- | The portable C implementation of BLAKE2s.
-implementation2s :: Implementation BLAKE2s
-implementation2s =  SomeHashI cPortable2s
-
-
-cPortable2b :: HashI BLAKE2b Blake2bMem
-cPortable2b = blake2bImplementation
-              "blake2b-cportable"
-              "BLAKE2b Implementation using portable C and Haskell FFI"
-              compressIt
-              c_blake2b_last
-  where compressIt ptr = c_blake2b_compress ptr . fromEnum
-
-
-cPortable2s :: HashI BLAKE2s Blake2sMem
-cPortable2s = blake2sImplementation
-              "blake2s-cportable"
-              "BLAKE2s Implementation using portable C and Haskell FFI"
-              compressIt
-              c_blake2s_last
-  where compressIt ptr = c_blake2s_compress ptr . fromEnum
-
-
-
-
-
-------------------------- FFI For Blake2b -------------------------------------
-
-foreign import ccall unsafe
-  "raaz/hash/blake2/common.h raazHashBlake2bPortableBlockCompress"
-  c_blake2b_compress  :: Pointer
-                      -> Int
-                      -> Ptr (BYTES Word64)
-                      -> Ptr (BYTES Word64)
-                      -> Ptr BLAKE2b
-                      -> IO ()
-
-foreign import ccall unsafe
-  "raaz/hash/blake2/common.h raazHashBlake2bPortableLastBlock"
-  c_blake2b_last   :: Pointer
-                   -> BYTES Int
-                   -> BYTES Word64
-                   -> BYTES Word64
-                   -> Word64
-                   -> Word64
-                   -> Ptr BLAKE2b
-                   -> IO ()
-
-
-------------------------- FFI For Blake2s -------------------------------------
-
-
-foreign import ccall unsafe
-  "raaz/hash/blake2/common.h raazHashBlake2sPortableBlockCompress"
-  c_blake2s_compress  :: Pointer
-                      -> Int
-                      -> BYTES Word64
-                      -> Ptr BLAKE2s
-                      -> IO ()
-
-foreign import ccall unsafe
-  "raaz/hash/blake2/common.h raazHashBlake2sPortableLastBlock"
-  c_blake2s_last   :: Pointer
-                   -> BYTES Int
-                   -> BYTES Word64
-                   -> Word32
-                   -> Word32
-                   -> Ptr BLAKE2s
-                   -> IO ()
-
-{-
-
-void raazHashBlake2bPortableBlockCompress( Block2b *mesg, int nblocks,
-					   Word2b *Upper, Word2b *Lower,
-					   Blake2b h)
-
-void raazHashBlake2bPortableLastBlock( Block2b mesg, int nbytes,
-				       Word2b upper, Word2b lower,
-				       Word2b f0 , Word2b f1,
-				       Blake2b h)
--}
diff --git a/Raaz/Hash/Blake2/Internal.hs b/Raaz/Hash/Blake2/Internal.hs
deleted file mode 100644
--- a/Raaz/Hash/Blake2/Internal.hs
+++ /dev/null
@@ -1,272 +0,0 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE RecordWildCards            #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE ForeignFunctionInterface   #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE DataKinds                  #-}
-{-# LANGUAGE FlexibleContexts           #-}
-{-# CFILES raaz/hash/sha1/portable.c    #-}
-
--- | Internal types and function for blake2 hashes.
-module Raaz.Hash.Blake2.Internal
-       ( -- * The blake2 types
-         BLAKE2, BLAKE2b, BLAKE2s
-       , Blake2bMem, Blake2sMem
-       , blake2Pad, blake2bImplementation
-       , blake2sImplementation
-       ) where
-
-import           Control.Applicative
-import           Control.Monad.IO.Class
-import           Data.Bits           ( xor, complement )
-import           Data.Monoid
-import           Data.String
-import           Data.Word
-import           Foreign.Ptr         ( Ptr          )
-import           Foreign.Storable    ( Storable(..) )
-import           Prelude      hiding ( zipWith      )
-
-import           Raaz.Core
-import           Raaz.Core.Transfer
-import           Raaz.Hash.Internal
-
------------------------------ The blake2 type ---------------------------------
-
--- | The BLAKE2 type.
-newtype BLAKE2 w = BLAKE2 (Tuple 8 w)
-               deriving (Eq, Equality, Storable, EndianStore)
-
--- | Word type for Blake2b
-type Word2b = LE Word64
-
--- | Word type for Blake2s
-type Word2s = LE Word32
-
--- | The BLAKE2b hash type.
-type BLAKE2b = BLAKE2 Word2b
-
--- | The BLAKE2s hash type.
-type BLAKE2s = BLAKE2 Word2s
-
-instance Encodable BLAKE2b
-instance Encodable BLAKE2s
-
-
-instance IsString BLAKE2b where
-  fromString = fromBase16
-
-instance IsString BLAKE2s where
-  fromString = fromBase16
-
-instance Show BLAKE2b where
-  show =  showBase16
-
-instance Show BLAKE2s where
-  show =  showBase16
-
-instance Primitive BLAKE2b where
-  blockSize _ = BYTES 128
-  type Implementation BLAKE2b = SomeHashI BLAKE2b
-
-instance Hash BLAKE2b where
-  additionalPadBlocks _ = toEnum 1
-
-instance Primitive BLAKE2s where
-  blockSize _ = BYTES 64
-  type Implementation BLAKE2s = SomeHashI BLAKE2s
-
-instance Hash BLAKE2s where
-  additionalPadBlocks _ = toEnum 1
-
--- | The initial value to start the blake2b hashing. This is equal to
--- the iv `xor` the parameter block.
-hash2b0 :: BLAKE2b
-hash2b0 = BLAKE2 $ unsafeFromList [ 0x6a09e667f3bcc908 `xor` 0x01010040
-                                  , 0xbb67ae8584caa73b
-                                  , 0x3c6ef372fe94f82b
-                                  , 0xa54ff53a5f1d36f1
-                                  , 0x510e527fade682d1
-                                  , 0x9b05688c2b3e6c1f
-                                  , 0x1f83d9abfb41bd6b
-                                  , 0x5be0cd19137e2179
-                                  ]
-
--- | The initial value to start the blake2b hashing. This is equal to
--- the iv `xor` the parameter block.
-hash2s0 :: BLAKE2s
-hash2s0 = BLAKE2 $ unsafeFromList [ 0x6a09e667 `xor` 0x01010020
-                                  , 0xbb67ae85
-                                  , 0x3c6ef372
-                                  , 0xa54ff53a
-                                  , 0x510e527f
-                                  , 0x9b05688c
-                                  , 0x1f83d9ab
-                                  , 0x5be0cd19
-                                  ]
-
----------------------------------- Memory element for BLAKE2b -----------------------
-
--- | Memory element for BLAKE2b implementations.
-data Blake2bMem = Blake2bMem { blake2bCell :: MemoryCell BLAKE2b
-                             , uLengthCell :: MemoryCell (BYTES Word64)
-                             , lLengthCell :: MemoryCell (BYTES Word64)
-                             }
-
-
-instance Memory Blake2bMem where
-  memoryAlloc     = Blake2bMem <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
-  unsafeToPointer = unsafeToPointer . blake2bCell
-
-instance Initialisable Blake2bMem () where
-  initialise _ = do onSubMemory blake2bCell  $ initialise hash2b0
-                    onSubMemory uLengthCell  $ initialise (0 :: BYTES Word64)
-                    onSubMemory lLengthCell  $ initialise (0 :: BYTES Word64)
-
-instance Extractable Blake2bMem BLAKE2b where
-  extract = onSubMemory blake2bCell extract
-
----------------------------------- Memory element for BLAKE2b -----------------------
-
--- | Memory element for BLAKE2s implementations.
-data Blake2sMem = Blake2sMem { blake2sCell :: MemoryCell BLAKE2s
-                             , lengthCell  :: MemoryCell (BYTES Word64)
-                             }
-
-instance Memory Blake2sMem where
-  memoryAlloc     = Blake2sMem <$> memoryAlloc <*> memoryAlloc
-  unsafeToPointer = unsafeToPointer . blake2sCell
-
-instance Initialisable Blake2sMem () where
-  initialise _ = do onSubMemory blake2sCell $ initialise hash2s0
-                    onSubMemory lengthCell  $ initialise (0 :: BYTES Word64)
-
-instance Extractable Blake2sMem BLAKE2s where
-  extract = onSubMemory blake2sCell extract
-
------------------------ Padding for Blake code ------------------------------
-
--- | The generic blake2 padding algorithm.
-blake2Pad :: (Primitive prim, MonadIO m)
-          => prim      -- ^ the primitive (BLAKE2b or BLAKE2s).
-          -> BYTES Int -- ^ length of the message
-          -> WriteM m
-blake2Pad prim = padWrite 0 (blocksOf 1 prim) . skipWrite
-
-
-
------------------------ Create a blake2b implementation ---------------------
-type Compress2b =  Pointer            -- ^ Buffer
-                -> BLOCKS BLAKE2b     -- ^ number of blocks
-                -> Ptr (BYTES Word64) -- ^ Upper count
-                -> Ptr (BYTES Word64) -- ^ Lower
-                -> Ptr BLAKE2b
-                -> IO ()
-
-type Last2b =  Pointer
-            -> BYTES Int
-            -> BYTES Word64 -- Upper
-            -> BYTES Word64 -- Lower
-            -> Word64       -- f0
-            -> Word64       -- f1
-            -> Ptr BLAKE2b
-            -> IO ()
-
-
--- | Create a hash implementation form BLAKE2b given a compression
--- function and the last block function.
-blake2bImplementation :: String  -- ^ Name
-                      -> String  -- ^ Description
-                      -> Compress2b
-                      -> Last2b
-                      -> HashI BLAKE2b Blake2bMem
-blake2bImplementation nm descr compress2b last2b
-  = HashI { hashIName              = nm
-          , hashIDescription       = descr
-          , compress               = comp
-          , compressFinal          = final
-          , compressStartAlignment = 32  --  Allow gcc to use vector instructions
-          }
-  where comp buf blks = do uPtr   <- onSubMemory uLengthCell getCellPointer
-                           lPtr   <- onSubMemory lLengthCell getCellPointer
-                           hshPtr <- onSubMemory blake2bCell getCellPointer
-                           liftIO $ compress2b buf blks uPtr lPtr hshPtr
-
-        lastBlock buf r = do u      <- onSubMemory uLengthCell extract
-                             l      <- onSubMemory lLengthCell extract
-                             hshPtr <- onSubMemory blake2bCell getCellPointer
-                             let f0 = complement 0
-                                 f1 = 0
-                               in  liftIO $ last2b buf r u l f0 f1 hshPtr
-
-        final buf nbytes = unsafeWrite blake2bPad buf >> finalPadded buf nbytes
-          where blake2bPad = blake2Pad (undefined :: BLAKE2b) nbytes
-
-        finalPadded buf nbytes
-          | nbytes == 0 = lastBlock buf 0  -- only when actual input is empty.
-          | otherwise   = let
-              (blks,r)       =  bytesQuotRem nbytes
-              blksToCompress = if r == 0 then blks <> toEnum (-1) else blks
-              remBytes       = if r > 0 then r else inBytes $ blocksOf 1 (undefined :: BLAKE2b)
-              lastBlockPtr   = buf `movePtr` blksToCompress
-              in do comp buf blksToCompress
-                    lastBlock lastBlockPtr remBytes
-
-------------------------- Implementations of blake2s ---------------------------------------------
-
-type Compress2s =  Pointer            -- ^ Buffer
-                -> BLOCKS BLAKE2s     -- ^ number of blocks
-                -> BYTES Word64       -- ^ length of the message so far
-                -> Ptr BLAKE2s        -- ^ Hash pointer
-                -> IO ()
-
-type Last2s =  Pointer
-            -> BYTES Int
-            -> BYTES Word64
-            -> Word32       -- f0
-            -> Word32       -- f1
-            -> Ptr BLAKE2s
-            -> IO ()
-
--- | Create a hash implementation form BLAKE2s given a compression
--- function and the last block function.
-blake2sImplementation :: String  -- ^ Name
-                      -> String  -- ^ Description
-                      -> Compress2s
-                      -> Last2s
-                      -> HashI BLAKE2s Blake2sMem
-blake2sImplementation nm descr compress2s last2s
-  = HashI { hashIName              = nm
-          , hashIDescription       = descr
-          , compress               = comp
-          , compressFinal          = final
-          , compressStartAlignment = 32  --  Allow gcc to use vector instructions
-          }
-  where comp buf blks = do len    <- onSubMemory lengthCell  extract    -- extract current length
-
-                           hshPtr <- onSubMemory blake2sCell getCellPointer
-                           liftIO $ compress2s buf blks len hshPtr
-
-                           let increment :: BYTES Word64
-                               increment = fromIntegral $ inBytes blks -- update the length by blks
-                               in onSubMemory lengthCell $ modify (+increment)
-
-
-        lastBlock buf r = do len    <- onSubMemory lengthCell extract
-                             hshPtr <- onSubMemory blake2sCell getCellPointer
-                             let f0 = complement 0
-                                 f1 = 0
-                               in liftIO $ last2s buf r len f0 f1 hshPtr
-
-        final buf nbytes = unsafeWrite blake2sPad buf >> finalPadded buf nbytes
-          where blake2sPad = blake2Pad (undefined :: BLAKE2s) nbytes
-
-        finalPadded buf nbytes
-          | nbytes == 0 = lastBlock buf 0  -- only when actual input is empty.
-          | otherwise   = let
-              (blks,r)       =  bytesQuotRem nbytes
-              blksToCompress = if r == 0 then blks <> toEnum (-1) else blks
-              remBytes       = if r > 0 then r else inBytes $ blocksOf 1 (undefined :: BLAKE2s)
-              lastBlockPtr   = buf `movePtr` blksToCompress
-              in do comp buf blksToCompress
-                    lastBlock lastBlockPtr remBytes
diff --git a/Raaz/Hash/Blake2/Recommendation.hs b/Raaz/Hash/Blake2/Recommendation.hs
deleted file mode 100644
--- a/Raaz/Hash/Blake2/Recommendation.hs
+++ /dev/null
@@ -1,22 +0,0 @@
--- | This sets up the recommended implementation of Sha1.
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE FlexibleInstances #-}
---
--- The orphan instance declaration separates the implementation and
--- setting the recommended instances. Therefore, we ignore the warning.
---
-
-module Raaz.Hash.Blake2.Recommendation where
-
-import Raaz.Core
-import Raaz.Hash.Blake2.Internal
-import qualified Raaz.Hash.Blake2.Implementation.CPortable as CPortable
-
-
--- | Recommended implementation for blake2b.
-instance Recommendation BLAKE2b where
-  recommended _ = CPortable.implementation2b
-
--- | Recommended implementation for balke2s.
-instance Recommendation BLAKE2s where
-  recommended _ = CPortable.implementation2s
diff --git a/Raaz/Hash/Internal.hs b/Raaz/Hash/Internal.hs
deleted file mode 100644
--- a/Raaz/Hash/Internal.hs
+++ /dev/null
@@ -1,286 +0,0 @@
-{-# LANGUAGE CPP                       #-}
-{-# LANGUAGE ExistentialQuantification #-}
-{-# LANGUAGE TypeFamilies              #-}
-{-# LANGUAGE RecordWildCards           #-}
-{-# LANGUAGE FlexibleContexts          #-}
-{-# LANGUAGE FlexibleInstances         #-}
-{-# LANGUAGE MultiParamTypeClasses     #-}
-{-# LANGUAGE ScopedTypeVariables       #-}
-{-# LANGUAGE ConstraintKinds           #-}
-
--- | This module exposes the low-level internal details of
--- cryptographic hashes. Do not import this module unless you want to
--- implement a new hash or give a new implementation of an existing
--- hash.
-module Raaz.Hash.Internal
-       ( -- * Cryptographic hashes and their implementations.
-         -- $hashdoc$
-         Hash(..)
-       , hash, hashFile, hashSource
-         -- ** Computing hashes using non-standard implementations.
-       , hash', hashFile', hashSource'
-         -- * Hash implementations.
-       , HashI(..), SomeHashI(..), HashM
-         -- ** Implementation of truncated hashes.
-       , truncatedI
-         -- * Memory used by most hashes.
-       , HashMemory(..), extractLength, updateLength
-       -- * Some low level functions.
-       , completeHashing
-       ) where
-
-
-#if !MIN_VERSION_base(4,8,0)
-import           Control.Applicative
-#endif
-
-import qualified Data.ByteString      as B
-import qualified Data.ByteString.Lazy as L
-import           Data.Monoid
-import           Data.Word
-import           Foreign.Storable
-import           System.IO
-import           System.IO.Unsafe     (unsafePerformIO)
-
-import Raaz.Core
-
--- $hashdoc$
---
--- Each cryptographic hash is a distinct type and are instances of a
--- the type class `Hash`. The standard idiom that we follow for hash
--- implementations are the following:
---
--- [`HashI`:] This type captures implementations of a the hash. This
--- type is parameterised over the memory element used by the
--- implementation.
---
--- [`SomeHashI`:] This type is the existentially quantified version of
--- `HashI` over its memory element. Thus it exposes only the interface
--- and not the internals of the implementation. The `Implementation`
--- associated type of a hash is the type `SomeHashI`
---
--- To support a new hash, a developer needs to:
---
--- 1. Define a new type which captures the result of hashing. This
---    type should be an instance of the class `Hash`.
---
--- 2. Define an implementation, i.e. a value of the type `SomeHashI`.
---
--- 3. Define a recommended implementation, i.e. an instance of the
---    type class `Raaz.Core.Primitives.Recommendation`
-
--------------------- Hash Implementations --------------------------
-
--- | The Hash implementation. Implementations should ensure the
--- following.
---
--- 1. The action @compress impl ptr blks@ should only read till the
--- @blks@ offset starting at ptr and never write any data.
---
--- 2. The action @padFinal impl ptr byts@ should touch at most
--- @⌈byts/blocksize⌉ + padBlocks@ blocks starting at ptr. It should
--- not write anything till the @byts@ offset but may write stuff
--- beyond that.
---
--- An easy to remember this rule is to remember that computing hash of
--- a payload should not modify the payload.
---
-data HashI h m = HashI
-  { hashIName           :: String
-  , hashIDescription    :: String
-  , compress       :: Pointer -> BLOCKS h  -> MT m ()
-                      -- ^ compress the blocks,
-  , compressFinal  :: Pointer -> BYTES Int -> MT m ()
-                      -- ^ pad and process the final bytes,
-  , compressStartAlignment :: Alignment
-  }
-
-instance BlockAlgorithm (HashI h m) where
-  bufferStartAlignment = compressStartAlignment
-
--- | The constraints that a memory used by a hash implementation
--- should satisfy.
-type HashM h m = (Initialisable m (), Extractable m h, Primitive h)
-
--- | Some implementation of a given hash. The existentially
--- quantification allows us freedom to choose the best memory type
--- suitable for each implementations.
-data SomeHashI h = forall m . HashM h m =>
-     SomeHashI (HashI h m)
-
-instance Describable (HashI h m) where
-  name        = hashIName
-  description = hashIDescription
-
-
-instance Describable (SomeHashI h) where
-  name         (SomeHashI hI) = name hI
-  description  (SomeHashI hI) = description hI
-
-instance BlockAlgorithm (SomeHashI h) where
-  bufferStartAlignment (SomeHashI imp) = bufferStartAlignment imp
-
--- | Certain hashes are essentially bit-truncated versions of other
--- hashes. For example, SHA224 is obtained from SHA256 by dropping the
--- last 32-bits. This combinator can be used build an implementation
--- of truncated hash from the implementation of its parent hash.
-truncatedI :: (BLOCKS htrunc -> BLOCKS h)
-           -> (mtrunc        -> m)
-           -> HashI h m -> HashI htrunc mtrunc
-truncatedI coerce unMtrunc (HashI{..})
-  = HashI { hashIName        = hashIName
-          , hashIDescription = hashIDescription
-          , compress         = comp
-          , compressFinal    = compF
-          , compressStartAlignment = compressStartAlignment
-          }
-  where comp  ptr = onSubMemory unMtrunc . compress ptr . coerce
-        compF ptr = onSubMemory unMtrunc . compressFinal ptr
-
----------------------- The Hash class ---------------------------------
-
--- | Type class capturing a cryptographic hash.
-class ( Primitive h
-      , EndianStore h
-      , Encodable h
-      , Eq h
-      , Implementation h ~ SomeHashI h
-      ) => Hash h where
-  -- | Cryptographic hashes can be computed for messages that are not
-  -- a multiple of the block size. This combinator computes the
-  -- maximum size of padding that can be attached to a message.
-  additionalPadBlocks :: h -> BLOCKS h
-
----------------------- Helper combinators --------------------------
-
--- | Compute the hash of a pure byte source like, `B.ByteString`.
-hash :: ( Hash h, Recommendation h, PureByteSource src )
-     => src  -- ^ Message
-     -> h
-hash = unsafePerformIO . hashSource
-{-# INLINEABLE hash #-}
-{-# SPECIALIZE hash :: (Hash h, Recommendation h) => B.ByteString -> h #-}
-{-# SPECIALIZE hash :: (Hash h, Recommendation h) => L.ByteString -> h #-}
-
--- | Compute the hash of file.
-hashFile :: ( Hash h, Recommendation h)
-         => FilePath  -- ^ File to be hashed
-         -> IO h
-hashFile fileName = withBinaryFile fileName ReadMode hashSource
-{-# INLINEABLE hashFile #-}
-
-
--- | Compute the hash of a generic byte source.
-hashSource :: ( Hash h, Recommendation h, ByteSource src )
-           => src  -- ^ Message
-           -> IO h
-hashSource = go undefined
-  where go :: (Hash h, Recommendation h, ByteSource src) => h -> src -> IO h
-        go h = hashSource' $ recommended h
-
-{-# INLINEABLE hashSource #-}
-{-# SPECIALIZE hashSource :: (Hash h, Recommendation h) => Handle -> IO h #-}
-
-
--- | Similar to `hash` but the user can specify the implementation to
--- use.
-hash' :: ( PureByteSource src
-         , Hash h
-         )
-      => Implementation h -- ^ Implementation
-      -> src              -- ^ the message as a byte source.
-      -> h
-hash' imp = unsafePerformIO . hashSource' imp
-{-# INLINEABLE hash' #-}
-
--- TODO: For bytestrings (strict and lazy) we can do better. We can
--- avoid copying as the bytestring exposes the underlying
--- pointer. However, there is a huge cost if the underlying pointer
--- does not start at the machine alignment boundary. The idea
--- therefore is to process strict bytestring is multiples of blocks
--- directly if the starting pointer is aligned.
---
--- More details in the bug report #256.
---
--- https://github.com/raaz-crypto/raaz/issues/256
---
-
--- | Similar to hashFile' but the user can specify the implementation
--- to use.
-hashFile' :: Hash h
-          => Implementation h  -- ^ Implementation
-          -> FilePath          -- ^ File to be hashed
-          -> IO h
-hashFile' imp fileName = withBinaryFile fileName ReadMode $ hashSource' imp
-{-# INLINEABLE hashFile' #-}
-
-
--- | Similar to @hashSource@ but the user can specify the
--- implementation to use.
-hashSource' :: (Hash h, ByteSource src)
-            => Implementation h
-            -> src
-            -> IO h
-hashSource' (SomeHashI impl) src =
-  insecurely $ initialise () >> completeHashing impl src
-
-
--- | Gives a memory action that completes the hashing procedure with
--- the rest of the source. Useful to compute the hash of a source with
--- some prefix (like in the HMAC procedure).
-completeHashing :: (Hash h, ByteSource src, HashM h m)
-                => HashI h m
-                -> src
-                -> MT m h
-completeHashing imp@(HashI{..}) src =
-  allocate $ \ ptr -> let
-    comp                = compress ptr bufSize
-    finish bytes        = compressFinal ptr bytes >> extract
-    in processChunks comp finish src bufSize ptr
-  where bufSize             = atLeast l1Cache <> toEnum 1
-        totalSize           = bufSize <> additionalPadBlocks undefined
-        allocate            = liftPointerAction $ allocBufferFor (SomeHashI imp) totalSize
-
------------------------ Hash memory ----------------------------------
-
--- | Computing cryptographic hashes usually involves chunking the
--- message into blocks and compressing one block at a time. Usually
--- this compression makes use of the hash of the previous block and
--- the length of the message seen so far to compressing the current
--- block. Most implementations therefore need to keep track of only
--- hash and the length of the message seen so. This memory can be used
--- in such situations.
-data HashMemory h =
-  HashMemory
-  { hashCell          :: MemoryCell h
-                         -- ^ Cell to store the hash
-  , messageLengthCell :: MemoryCell (BITS Word64)
-                         -- ^ Cell to store the length
-  }
-
-instance Storable h => Memory (HashMemory h) where
-
-  memoryAlloc     = HashMemory <$> memoryAlloc <*> memoryAlloc
-
-  unsafeToPointer = unsafeToPointer . hashCell
-
-instance Storable h => Initialisable (HashMemory h) h where
-  initialise h = do
-    onSubMemory hashCell          $ initialise h
-    onSubMemory messageLengthCell $ initialise (0 :: BITS Word64)
-
-instance Storable h => Extractable (HashMemory h) h where
-  extract = onSubMemory hashCell extract
-
--- | Extract the length of the message hashed so far.
-extractLength :: MT (HashMemory h) (BITS Word64)
-extractLength = onSubMemory messageLengthCell extract
-{-# INLINE extractLength #-}
-
-
--- | Update the message length by a given amount.
-updateLength :: LengthUnit u => u -> MT (HashMemory h) ()
-{-# INLINE updateLength #-}
-updateLength u = onSubMemory messageLengthCell $ modify (nBits +)
-  where nBits :: BITS Word64
-        nBits =  inBits u
diff --git a/Raaz/Hash/Internal/HMAC.hs b/Raaz/Hash/Internal/HMAC.hs
deleted file mode 100644
--- a/Raaz/Hash/Internal/HMAC.hs
+++ /dev/null
@@ -1,223 +0,0 @@
--- |The HMAC construction for a cryptographic hash
-
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE FlexibleContexts           #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE ScopedTypeVariables        #-}
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE UndecidableInstances       #-}
-{-# LANGUAGE ExistentialQuantification  #-}
-{-# LANGUAGE ConstraintKinds            #-}
-module Raaz.Hash.Internal.HMAC
-       ( HMAC (..)
-         -- * Combinators for computing HMACs
-       , hmac, hmacFile, hmacSource
-         -- ** Computing HMACs using non-standard implementations.
-       , hmac', hmacFile', hmacSource'
-       ) where
-
-import           Control.Applicative
-import           Control.Monad.IO.Class    (liftIO)
-import           Data.Bits                 (xor)
-import           Data.ByteString.Char8     (ByteString)
-import qualified Data.ByteString           as B
-import qualified Data.ByteString.Lazy      as L
-import           Data.Monoid
-import           Data.String
-import           Data.Word
-import           Foreign.Ptr               ( castPtr      )
-import           Foreign.Storable          ( Storable(..) )
-import           Prelude                   hiding (length, replicate)
-import           System.IO
-import           System.IO.Unsafe     (unsafePerformIO)
-
-import           Raaz.Core          hiding (alignment)
-import           Raaz.Core.Parse.Applicative
-import           Raaz.Core.Transfer
-import           Raaz.Random
-
-import           Raaz.Hash.Internal
-
---------------------------- The HMAC Key -----------------------------
-
--- | The HMAC key type. The HMAC keys are usually of size at most the
--- block size of the associated hash, although the hmac construction
--- allows using keys arbitrary size. Using keys of small size, in
--- particular smaller than the size of the corresponding hash, can can
--- compromise security.
---
--- == A note on `Show` and `IsString` instances of keys.
---
--- As any other cryptographic type HMAC keys also have a `IsString`
--- and `Show` instance which is essentially the key expressed in
--- base16.  Keys larger than the block size of the underlying hashes
--- are shortened by applying the appropriate hash. As a result the
--- `show` and `fromString` need not be inverses of each other.
---
-newtype HMACKey h = HMACKey { unKey :: B.ByteString }
-#if MIN_VERSION_base(4,11,0)
-                 deriving (Semigroup, Monoid)
-#else
-                 deriving Monoid
-#endif
-
-instance (Hash h, Recommendation h) => Storable (HMACKey h) where
-
-  sizeOf    _  = fromIntegral $ blockSize (undefined :: h)
-
-  alignment _  = alignment (undefined :: Word8)
-
-  peek         = unsafeRunParser (HMACKey <$> parseByteString (blockSize (undefined :: h))) . castPtr
-
-  poke ptr key = unsafeWrite (writeByteString $ hmacAdjustKey key) $ castPtr ptr
-
-hmacAdjustKey :: (Hash h, Recommendation h, Encodable h)
-              => HMACKey h -- ^ the key.
-              -> ByteString
-hmacAdjustKey key = padIt trimedKey
-  where keyStr      = unKey key
-        trimedKey   = if length keyStr > sz
-                      then toByteString
-                           $ hash keyStr `asTypeOf` theHash key
-                      else keyStr
-        padIt k     = k <> replicate (sz - length k) 0
-        sz          = blockSize $ theHash key
-        theHash     :: HMACKey h -> h
-        theHash  _  = undefined
-
--- The HMACKey is just stored as a binary data.
-instance (Hash h, Recommendation h) => EndianStore (HMACKey h) where
-  store            = poke
-  load             = peek
-  adjustEndian _ _ = return ()
-
-instance (Hash h, Recommendation h) => RandomStorable (HMACKey h) where
-  fillRandomElements = unsafeFillRandomElements
-
-instance (Hash h, Recommendation h) => Encodable (HMACKey h)
-
--- | Base16 representation of the string.
-instance IsString (HMACKey h) where
-  fromString = HMACKey
-               . (decodeFormat :: Base16 -> ByteString)
-               . fromString
-
-instance Show (HMACKey h) where
-  show = show . (encodeByteString :: ByteString -> Base16) . unKey
-
-----------------  The HMAC type -----------------------------------------
-
--- | The HMAC associated to a hash value. The HMAC type is essentially
--- the underlying hash type wrapped inside a newtype. Therefore, the
--- `Eq` instance for HMAC is essentially the `Eq` instance for the
--- underlying hash. It is safe against timing attack provided the
--- underlying hash comparison is safe under timing attack.
-newtype HMAC h = HMAC {unHMAC :: h} deriving ( Eq, Storable
-                                             , EndianStore
-                                             , Encodable
-                                             , IsString
-                                             )
-instance Show h => Show (HMAC h) where
-  show  = show . unHMAC
-
-
-type instance  Key (HMAC h) = HMACKey h
-
--- | Compute the hash of a pure byte source like, `B.ByteString`.
-hmac :: ( Hash h, Recommendation h, PureByteSource src )
-     => Key (HMAC h)
-     -> src  -- ^ Message
-     -> HMAC h
-hmac key = unsafePerformIO . hmacSource key
-{-# INLINEABLE hmac #-}
-{-# SPECIALIZE hmac :: (Hash h, Recommendation h) => Key (HMAC h) -> B.ByteString -> HMAC h #-}
-{-# SPECIALIZE hmac :: (Hash h, Recommendation h) => Key (HMAC h) -> L.ByteString -> HMAC h #-}
-
--- | Compute the hmac of file.
-hmacFile :: (Hash h, Recommendation h)
-         => Key (HMAC h) -- ^ Key to use for mac-ing
-         -> FilePath     -- ^ File to be hashed
-         -> IO (HMAC h)
-hmacFile key fileName = withBinaryFile fileName ReadMode $ hmacSource key
-{-# INLINEABLE hmacFile #-}
-
--- | Compute the hmac of a generic byte source.
-hmacSource :: ( Hash h, Recommendation h, ByteSource src )
-           => Key (HMAC h)  -- ^ key to use for mac-ing.
-           -> src           -- ^ Message
-           -> IO (HMAC h)
-hmacSource = go undefined
-  where go :: (Hash h, Recommendation h, ByteSource src)
-              => h -> Key (HMAC h) -> src -> IO (HMAC h)
-        go h = hmacSource' (recommended h)
-
-{-# INLINEABLE hmacSource #-}
-{-# SPECIALIZE hmacSource :: (Hash h, Recommendation h) => Key (HMAC h) -> Handle -> IO (HMAC h) #-}
-
-
--- | Compute the hmac of a pure byte source like, `B.ByteString`.
-hmac' :: ( Hash h, Recommendation h, PureByteSource src )
-      => Implementation h
-      -> Key (HMAC h)
-      -> src  -- ^ Message
-      -> HMAC h
-hmac' impl key = unsafePerformIO . hmacSource' impl key
-{-# INLINEABLE hmac' #-}
-{-# SPECIALIZE hmac' :: (Hash h, Recommendation h)
-                     => Implementation h
-                     -> Key (HMAC h)
-                     -> B.ByteString
-                     -> HMAC h
-  #-}
-{-# SPECIALIZE hmac' :: (Hash h, Recommendation h)
-                     => Implementation h
-                     -> Key (HMAC h)
-                     -> L.ByteString
-                     -> HMAC h
-  #-}
-
-
--- | Compute the hmac of file.
-hmacFile' :: (Hash h, Recommendation h)
-         => Implementation h
-         -> Key (HMAC h)
-         -> FilePath  -- ^ File to be hashed
-         -> IO (HMAC h)
-hmacFile' impl key fileName = withBinaryFile fileName ReadMode $ hmacSource' impl key
-{-# INLINEABLE hmacFile' #-}
-
--- | Compute the hmac of a generic ByteSource using a given implementation.
-hmacSource' :: (Hash h, Recommendation h, ByteSource src)
-            => Implementation h
-            -> Key (HMAC h)
-            -> src
-            -> IO (HMAC h)
-hmacSource' imp@(SomeHashI hI) key src =
-  insecurely $ do
-
-    -- Hash the first block for the inner hash
-    initialise ()
-    allocate $ \ ptr -> do
-      liftIO $ unsafeCopyToPointer innerFirstBlock ptr
-      compress hI ptr $ toEnum 1
-
-    -- Finish it by hashing the source.
-    innerHash <- completeHashing hI src
-
-
-    -- Hash the outer block.
-    initialise ()
-    allocate $ \ ptr -> do
-      liftIO $ unsafeCopyToPointer outerFirstBlock ptr
-      compress hI ptr $ toEnum 1
-
-    -- Finish it with hashing the  hash computed above
-    HMAC <$> completeHashing hI (toByteString innerHash)
-
-  where allocate = liftPointerAction $ allocBufferFor imp $ (toEnum 1) `asTypeOf` (theBlock key)
-        innerFirstBlock = B.map (xor 0x36) $ hmacAdjustKey key
-        outerFirstBlock = B.map (xor 0x5c) $ hmacAdjustKey key
-        theBlock :: Key (HMAC h) -> BLOCKS h
-        theBlock _ = toEnum 1
diff --git a/Raaz/Hash/Sha/Util.hs b/Raaz/Hash/Sha/Util.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha/Util.hs
+++ /dev/null
@@ -1,123 +0,0 @@
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE FlexibleContexts           #-}
-{-# LANGUAGE ConstraintKinds            #-}
-
--- | Some utility functions useful for all Sha hashes.
-module Raaz.Hash.Sha.Util
-       ( shaImplementation
-       , length64Write
-       , length128Write
-       , Compressor
-       ) where
-
-import Data.Monoid                  ( (<>)      )
-import Data.Word
-import Foreign.Ptr                  ( Ptr       )
-import Foreign.Storable             ( Storable  )
-
-import Raaz.Core
-import Raaz.Core.Transfer
-import Raaz.Hash.Internal
-
--- | The utilities in this module can be used on primitives which
--- satisfies the following constraint.
-type IsSha h    = (Primitive h, Storable h, Memory (HashMemory h))
-
--- | All actions here are in the following monad
-type ShaMonad h = MT (HashMemory h)
-
--- | The Writes used in this module.
-type ShaWrite h = WriteM (ShaMonad h)
---
--- The message in the sha1 family of hashes pads the message, the last
--- few bytes of which are used to store the message length. Hashes
--- like sha1, sha256 etc writes the message lengths in 64-bits while
--- sha512 uses lengths in 128 bits. The generic writes `length64Write`
--- and `length128Write` are write actions that support this.
-
--- | Type that captures length writes.
-type LengthWrite h = BITS Word64 -> ShaWrite h
-
--- | The length encoding that uses 64-bits.
-length64Write :: LengthWrite h
-length64Write (BITS w) = write $ bigEndian w
-
--- | The length encoding that uses 128-bits.
-length128Write :: LengthWrite h
-length128Write w = writeStorable (0 :: Word64) <> length64Write w
-
-
--- | The type alias for the raw compressor function. The compressor function
--- does not need to know the length of the message so far and hence
--- this is not supposed to update lengths.
-type Compressor h = Pointer -- ^ The buffer to compress
-                  -> Int    -- ^ The number of blocks to compress
-                  -> Ptr h  -- ^ The cell memory containing the hash
-                  -> IO ()
-
--- | Action on a Buffer
-type ShaBufferAction bufSize h = Pointer       -- ^ The data buffer
-                               -> bufSize      -- ^ Total data present
-                               -> ShaMonad h ()
-
--- | Lifts the raw compressor to a buffer action. This function does not update
--- the lengths.
-liftCompressor          :: IsSha h => Compressor h -> ShaBufferAction (BLOCKS h) h
-liftCompressor comp ptr = onSubMemory hashCell . withCellPointer . comp ptr . fromEnum
-
-
--- | The combinator `shaBlocks` on an input compressor @comp@ gives a buffer action
--- that process blocks of data.
-shaBlocks :: Primitive h
-          => ShaBufferAction (BLOCKS h) h -- ^ the compressor function
-          -> ShaBufferAction (BLOCKS h) h
-shaBlocks comp ptr nblocks =
-  comp ptr nblocks >> updateLength nblocks
-
--- | The combinator `shaFinal` on an input compressor @comp@ gives
--- buffer action for the final chunk of data.
-shaFinal :: (Primitive h, Storable h)
-         => ShaBufferAction (BLOCKS h) h   -- ^ the raw compressor
-         -> LengthWrite h                  -- ^ the length writer
-         -> ShaBufferAction (BYTES Int) h
-shaFinal comp lenW ptr msgLen = do
-  updateLength msgLen
-  totalBits <- extractLength
-  let pad      = shaPad undefined msgLen $ lenW totalBits
-      blocks   = atMost $ bytesToWrite pad
-      in unsafeWrite pad ptr >> comp ptr blocks
-
-
--- | Padding is message followed by a single bit 1 and a glue of zeros
--- followed by the length so that the message is aligned to the block boundary.
-shaPad :: IsSha h
-       => h
-       -> BYTES Int -- Message length
-       -> ShaWrite h
-       -> ShaWrite h
-shaPad h msgLen = glueWrites 0 boundary hdr
-  where skipMessage = skipWrite msgLen
-        oneBit      = writeStorable (0x80 :: Word8)
-        hdr         = skipMessage <> oneBit
-        boundary    = blocksOf 1 h
-
-
-
--- | Creates an implementation for a sha hash given the compressor and
--- the length writer.
-shaImplementation :: IsSha h
-                  => String                   -- ^ Name
-                  -> String                   -- ^ Description
-                  -> Compressor  h
-                  -> LengthWrite h
-                  -> HashI h (HashMemory h)
-shaImplementation nam des comp lenW
-  = HashI { hashIName               = nam
-          , hashIDescription        = des
-          , compress                = shaBlocks shaComp
-          , compressFinal           = shaFinal  shaComp lenW
-          , compressStartAlignment  = wordAlignment
-          }
-  where shaComp = liftCompressor comp
-
-{-# INLINE shaImplementation #-}
diff --git a/Raaz/Hash/Sha1.hs b/Raaz/Hash/Sha1.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha1.hs
+++ /dev/null
@@ -1,78 +0,0 @@
-{-|
-
-This module exposes combinators to compute the SHA1 hash and the
-associated HMAC for some common types.
-
-
--}
-module Raaz.Hash.Sha1
-{-# DEPRECATED "SHA1 is broken. This module is here only for transition." #-}
-       (
-         -- * The broken SHA1 cryptographic hash.
-         -- $sha1$
-         SHA1
-       , sha1, sha1File, sha1Source
-         -- * HMAC computation using SHA1
-       , hmacSha1, hmacSha1File, hmacSha1Source
-       ) where
-
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Lazy as L
-
-import Raaz.Core
-
-import Raaz.Hash.Internal      ( hashSource, hash, hashFile       )
-import Raaz.Hash.Internal.HMAC ( hmacSource, hmac, hmacFile, HMAC )
-import Raaz.Hash.Sha1.Internal ( SHA1 )
-import Raaz.Hash.Sha1.Recommendation()
-
--- $sha1$
---
--- We already have a collision for SHA1:
--- <https://security.googleblog.com/2017/02/announcing-first-sha1-collision.html>
---
--- While it does not yet rule out SHA1 for some specific tasks, there
--- is no reason for its continual usage. This module is present only
--- to facilitate the transition to a better hash. Use it assuming no
--- security guarantees. Raaz will not try to optimise the
--- implementations given here and will remove this module at some
--- point of time. So do not rely on this for your software.
---
---
---
-
-{-# DEPRECATED sha1, sha1File, sha1Source
-               "SHA1 is broken. This functions are here only for transition." #-}
--- | Compute the sha1 hash of an instance of `PureByteSource`. Use
--- this for computing the sha1 hash of a strict or lazy byte string.
-sha1       :: PureByteSource src => src -> SHA1
-sha1       = hash
-
-
-{-# SPECIALIZE sha1 :: B.ByteString -> SHA1 #-}
-{-# SPECIALIZE sha1 :: L.ByteString -> SHA1 #-}
-
-
--- | Compute the sha1 hash of a file.
-sha1File   :: FilePath -> IO SHA1
-sha1File   = hashFile
-
--- | Compute the sha1 hash of a general byte source.
-sha1Source :: ByteSource src => src -> IO SHA1
-sha1Source = hashSource
-
-
-{-# DEPRECATED hmacSha1, hmacSha1File, hmacSha1Source
-               "SHA1 is broken. This functions are here only for transition." #-}
-
--- | Compute the message authentication code using hmac-sha1.
-hmacSha1 :: PureByteSource src  => Key (HMAC SHA1) -> src -> HMAC SHA1
-hmacSha1 = hmac
-
--- | Compute the message authentication code for a file.
-hmacSha1File :: Key (HMAC SHA1) -> FilePath -> IO (HMAC SHA1)
-hmacSha1File = hmacFile
-
--- | Compute the message authetication code for a generic byte source.
-hmacSha1Source :: ByteSource src => Key (HMAC SHA1) -> src -> IO (HMAC SHA1)
-hmacSha1Source = hmacSource
diff --git a/Raaz/Hash/Sha1/Implementation/CPortable.hs b/Raaz/Hash/Sha1/Implementation/CPortable.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha1/Implementation/CPortable.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface   #-}
--- | The portable C-implementation of SHA1
-module Raaz.Hash.Sha1.Implementation.CPortable
-       ( implementation
-       ) where
-
-import Foreign.Ptr              ( Ptr )
-import Raaz.Core
-import Raaz.Hash.Internal
-import Raaz.Hash.Sha.Util
-import Raaz.Hash.Sha1.Internal
-
--- | The portable C implementation of SHA1.
-implementation :: Implementation SHA1
-implementation =  SomeHashI cPortable
-
-cPortable :: HashI SHA1 (HashMemory SHA1)
-cPortable = shaImplementation
-            "sha1-cportable"
-            "Sha1 Implementation using portable C and Haskell FFI"
-            c_sha1_compress length64Write
-
-foreign import ccall unsafe
-  "raaz/hash/sha1/portable.h raazHashSha1PortableCompress"
-  c_sha1_compress  :: Pointer -> Int -> Ptr SHA1 -> IO ()
diff --git a/Raaz/Hash/Sha1/Internal.hs b/Raaz/Hash/Sha1/Internal.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha1/Internal.hs
+++ /dev/null
@@ -1,56 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE DataKinds                  #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE FlexibleInstances          #-}
-
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# CFILES raaz/hash/sha1/portable.c    #-}
-
-{-|
-
-This module exposes the `SHA1` hash constructor. You would hardly need
-to import the module directly as you would want to treat the `SHA1`
-type as an opaque type for type safety. This module is exported only
-for special uses like writing a test case or defining a binary
-instance etc.
-
--}
-
-module Raaz.Hash.Sha1.Internal (SHA1(..)) where
-
-import           Data.String
-import           Data.Word
-import           Foreign.Storable    ( Storable(..) )
-
-import           Raaz.Core
-
-import           Raaz.Hash.Internal
-
--- | The cryptographic hash SHA1.
-newtype SHA1 = SHA1 (Tuple 5 (BE Word32))
-             deriving (Storable, EndianStore, Equality, Eq)
-
-instance Encodable SHA1
-
-instance IsString SHA1 where
-  fromString = fromBase16
-
-instance Show SHA1 where
-  show = showBase16
-
-instance Initialisable (HashMemory SHA1) () where
-  initialise _ = initialise $ SHA1 $ unsafeFromList [ 0x67452301
-                                                    , 0xefcdab89
-                                                    , 0x98badcfe
-                                                    , 0x10325476
-                                                    , 0xc3d2e1f0
-                                                    ]
-
-
-instance Primitive SHA1 where
-  blockSize _              = BYTES 64
-  type Implementation SHA1 = SomeHashI SHA1
-
-instance Hash SHA1 where
-  additionalPadBlocks _ = toEnum 1
diff --git a/Raaz/Hash/Sha1/Recommendation.hs b/Raaz/Hash/Sha1/Recommendation.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha1/Recommendation.hs
+++ /dev/null
@@ -1,16 +0,0 @@
--- | This sets up the recommended implementation of Sha1.
-{-# OPTIONS_GHC -fno-warn-orphans #-}
---
--- The orphan instance declaration separates the implementation and
--- setting the recommended instances. Therefore, we ignore the warning.
---
-
-module Raaz.Hash.Sha1.Recommendation where
-
-import Raaz.Core
-import Raaz.Hash.Sha1.Internal
-import qualified Raaz.Hash.Sha1.Implementation.CPortable as CPortable
-
--- | Recommended implementation for SHA1.
-instance Recommendation SHA1 where
-  recommended _ = CPortable.implementation
diff --git a/Raaz/Hash/Sha224.hs b/Raaz/Hash/Sha224.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha224.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-|
-
-This module exposes combinators to compute the SHA224 hash and the
-associated HMAC for some common types.
-
--}
-
-module Raaz.Hash.Sha224
-       ( -- * The SHA224 cryptographic hash
-         SHA224
-       , sha224, sha224File, sha224Source
-       -- * HMAC computation using SHA224
-       , hmacSha224, hmacSha224File, hmacSha224Source
-       ) where
-
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Lazy as L
-
-import Raaz.Core
-
-import Raaz.Hash.Internal        ( hashSource, hash, hashFile       )
-import Raaz.Hash.Internal.HMAC   ( hmacSource, hmac, hmacFile, HMAC )
-import Raaz.Hash.Sha224.Internal ( SHA224 )
-import Raaz.Hash.Sha224.Recommendation()
-
--- | Compute the sha224 hash of an instance of `PureByteSource`. Use
--- this for computing the sha224 hash of a strict or lazy byte string.
-sha224       :: PureByteSource src => src -> SHA224
-sha224       = hash
-{-# SPECIALIZE sha224 :: B.ByteString -> SHA224 #-}
-{-# SPECIALIZE sha224 :: L.ByteString -> SHA224 #-}
-
-
--- | Compute the sha224 hash of a file.
-sha224File   :: FilePath -> IO SHA224
-sha224File   = hashFile
-
--- | Compute the sha224 hash of a general byte source.
-sha224Source :: ByteSource src => src -> IO SHA224
-sha224Source = hashSource
-
--- | Compute the message authentication code using hmac-sha224.
-hmacSha224 :: PureByteSource src
-           => Key (HMAC SHA224)  -- ^ Key to use
-           -> src                -- ^ pure source whose hmac is to be
-                                 -- computed
-           -> HMAC SHA224
-hmacSha224 = hmac
-
--- | Compute the message authentication code for a file.
-hmacSha224File :: Key (HMAC SHA224) -- ^ Key to use
-               -> FilePath          -- ^ File whose hmac is to be computed
-               -> IO (HMAC SHA224)
-hmacSha224File = hmacFile
-
--- | Compute the message authetication code for a generic byte source.
-hmacSha224Source :: ByteSource src
-                 => Key (HMAC SHA224)
-                 -> src
-                 -> IO (HMAC SHA224)
-hmacSha224Source = hmacSource
diff --git a/Raaz/Hash/Sha224/Implementation/CPortable.hs b/Raaz/Hash/Sha224/Implementation/CPortable.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha224/Implementation/CPortable.hs
+++ /dev/null
@@ -1,45 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses      #-}
--- | The portable C-implementation of SHA224
-module Raaz.Hash.Sha224.Implementation.CPortable
-       ( implementation
-       ) where
-
-import Control.Applicative
-import Prelude
-
-import Raaz.Core
-import Raaz.Hash.Internal
-import Raaz.Hash.Sha224.Internal
-
-import           Raaz.Hash.Sha256.Internal ( SHA256(..) )
-import qualified Raaz.Hash.Sha256.Implementation.CPortable as SHA256I
-
-
-newtype SHA224Memory  = SHA224Memory { unSHA224Mem :: HashMemory SHA256 }
-
-instance Memory SHA224Memory where
-  memoryAlloc     = SHA224Memory <$> memoryAlloc
-  unsafeToPointer = unsafeToPointer . unSHA224Mem
-
-instance Initialisable SHA224Memory () where
-  initialise _ = onSubMemory unSHA224Mem $
-                 initialise $ SHA256 $ unsafeFromList [ 0xc1059ed8
-                                                      , 0x367cd507
-                                                      , 0x3070dd17
-                                                      , 0xf70e5939
-                                                      , 0xffc00b31
-                                                      , 0x68581511
-                                                      , 0x64f98fa7
-                                                      , 0xbefa4fa4
-                                                      ]
-
-instance Extractable SHA224Memory SHA224 where
-  extract = trunc <$> onSubMemory unSHA224Mem extract
-    where trunc (SHA256 tup) = SHA224 $ initial tup
-
--- | The portable C implementation of SHA224.
-implementation :: Implementation SHA224
-implementation =  SomeHashI cPortable
-
-cPortable :: HashI SHA224 SHA224Memory
-cPortable = truncatedI (toEnum . fromEnum) unSHA224Mem SHA256I.cPortable
diff --git a/Raaz/Hash/Sha224/Internal.hs b/Raaz/Hash/Sha224/Internal.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha224/Internal.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-|
-
-This module exposes the `SHA224` hash constructor. You would hardly
-need to import the module directly as you would want to treat the
-`SHA224` type as an opaque type for type safety. This module is
-exported only for special uses like writing a test case or defining a
-binary instance etc.
-
--}
-
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE DataKinds                  #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# CFILES raaz/hash/sha1/portable.c    #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Raaz.Hash.Sha224.Internal
-       ( SHA224(..)
-       ) where
-
-import           Data.String
-import           Data.Word
-import           Foreign.Storable          ( Storable )
-
-import           Raaz.Core
-import           Raaz.Hash.Internal
-
------------------------------ SHA224 -------------------------------------------
-
--- | Sha224 hash value which consist of 7 32bit words.
-newtype SHA224 = SHA224 (Tuple 7 (BE Word32))
-            deriving (Eq, Equality, Storable, EndianStore)
-
-instance Encodable SHA224
-
-instance IsString SHA224 where
-  fromString = fromBase16
-
-instance Show SHA224 where
-  show =  showBase16
-
-instance Primitive SHA224 where
-  blockSize _                = BYTES 64
-  type Implementation SHA224 = SomeHashI SHA224
-
-instance Hash SHA224 where
-  additionalPadBlocks _ = toEnum 1
diff --git a/Raaz/Hash/Sha224/Recommendation.hs b/Raaz/Hash/Sha224/Recommendation.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha224/Recommendation.hs
+++ /dev/null
@@ -1,16 +0,0 @@
--- | This sets up the recommended implementation of Sha224.
-{-# OPTIONS_GHC -fno-warn-orphans #-}
---
--- The orphan instance declaration separates the implementation and
--- setting the recommended instances. Therefore, we ignore the warning.
---
-
-module Raaz.Hash.Sha224.Recommendation where
-
-import Raaz.Core
-import Raaz.Hash.Sha224.Internal
-import qualified Raaz.Hash.Sha224.Implementation.CPortable as CPortable
-
--- | Recommended implementation for SHA224.
-instance Recommendation SHA224 where
-  recommended _ = CPortable.implementation
diff --git a/Raaz/Hash/Sha256.hs b/Raaz/Hash/Sha256.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha256.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-|
-
-This module exposes combinators to compute the SHA256 hash and the
-associated HMAC for some common types.
-
--}
-
-module Raaz.Hash.Sha256
-       ( -- * The SHA256 cryptographic hash
-         SHA256
-       , sha256, sha256File, sha256Source
-       -- * HMAC computation using SHA256
-       , hmacSha256, hmacSha256File, hmacSha256Source
-       ) where
-
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Lazy as L
-
-import Raaz.Core
-
-import Raaz.Hash.Internal        ( hashSource, hash, hashFile       )
-import Raaz.Hash.Internal.HMAC   ( hmacSource, hmac, hmacFile, HMAC )
-import Raaz.Hash.Sha256.Internal ( SHA256 )
-import Raaz.Hash.Sha256.Recommendation()
-
--- | Compute the sha256 hash of an instance of `PureByteSource`. Use
--- this for computing the sha256 hash of a strict or lazy byte string.
-sha256       :: PureByteSource src => src -> SHA256
-sha256       = hash
-{-# SPECIALIZE sha256 :: B.ByteString -> SHA256 #-}
-{-# SPECIALIZE sha256 :: L.ByteString -> SHA256 #-}
-
-
--- | Compute the sha256 hash of a file.
-sha256File   :: FilePath -> IO SHA256
-sha256File   = hashFile
-
--- | Compute the sha256 hash of a general byte source.
-sha256Source :: ByteSource src => src -> IO SHA256
-sha256Source = hashSource
-
--- | Compute the message authentication code using hmac-sha256.
-hmacSha256 :: PureByteSource src
-           => Key (HMAC SHA256)  -- ^ Key to use
-           -> src                -- ^ pure source whose hmac is to be
-                                 -- computed
-           -> HMAC SHA256
-hmacSha256 = hmac
-
--- | Compute the message authentication code for a file.
-hmacSha256File :: Key (HMAC SHA256) -- ^ Key to use
-               -> FilePath          -- ^ File whose hmac is to be computed
-               -> IO (HMAC SHA256)
-hmacSha256File = hmacFile
-
--- | Compute the message authetication code for a generic byte source.
-hmacSha256Source :: ByteSource src
-                 => Key (HMAC SHA256)
-                 -> src
-                 -> IO (HMAC SHA256)
-hmacSha256Source = hmacSource
diff --git a/Raaz/Hash/Sha256/Implementation/CPortable.hs b/Raaz/Hash/Sha256/Implementation/CPortable.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha256/Implementation/CPortable.hs
+++ /dev/null
@@ -1,29 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface   #-}
--- | The portable C-implementation of SHA256.
-module Raaz.Hash.Sha256.Implementation.CPortable
-       ( implementation, cPortable
-       ) where
-
-import Foreign.Ptr               ( Ptr )
-import Raaz.Core
-import Raaz.Hash.Internal
-import Raaz.Hash.Sha.Util
-import Raaz.Hash.Sha256.Internal
-
--- | The portable C implementation of SHA256.
-implementation :: Implementation SHA256
-implementation =  SomeHashI cPortable
-
--- | The Hash implementation, i.e. `HashI` associated with the
--- portable C implementation for the hash SHA256. This can be used to
--- define an implementation of truncated hashes like SHA224.
-cPortable :: HashI SHA256 (HashMemory SHA256)
-cPortable = shaImplementation
-            "sha256-cportable"
-            "Sha256 Implementation using portable C and Haskell FFI"
-            c_sha256_compress length64Write
-
-
-foreign import ccall unsafe
-  "raaz/hash/sha256/portable.h raazHashSha256PortableCompress"
-  c_sha256_compress  :: Pointer -> Int -> Ptr SHA256 -> IO ()
diff --git a/Raaz/Hash/Sha256/Internal.hs b/Raaz/Hash/Sha256/Internal.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha256/Internal.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE DataKinds                  #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# CFILES raaz/hash/sha1/portable.c    #-}
-
--- | Internals of Sha256.
-module Raaz.Hash.Sha256.Internal
-       ( SHA256(..)
-       ) where
-
-
-import Data.String
-import Data.Word
-import Foreign.Storable    ( Storable )
-
-import Raaz.Core
-
-import Raaz.Hash.Internal
-
------------------------------ SHA256 -------------------------------------------
-
--- | The Sha256 hash value.
-newtype SHA256 = SHA256 (Tuple 8 (BE Word32))
-              deriving (Eq, Equality, Storable, EndianStore)
-
-instance Encodable SHA256
-
-instance IsString SHA256 where
-  fromString = fromBase16
-
-instance Show SHA256 where
-  show =  showBase16
-
-instance Initialisable (HashMemory SHA256) () where
-  initialise _ = initialise $ SHA256 $ unsafeFromList [ 0x6a09e667
-                                                      , 0xbb67ae85
-                                                      , 0x3c6ef372
-                                                      , 0xa54ff53a
-                                                      , 0x510e527f
-                                                      , 0x9b05688c
-                                                      , 0x1f83d9ab
-                                                      , 0x5be0cd19
-                                                      ]
-
-instance Primitive SHA256 where
-  blockSize _                = BYTES 64
-  type Implementation SHA256 = SomeHashI SHA256
-
-instance Hash SHA256 where
-  additionalPadBlocks _ = toEnum 1
diff --git a/Raaz/Hash/Sha256/Recommendation.hs b/Raaz/Hash/Sha256/Recommendation.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha256/Recommendation.hs
+++ /dev/null
@@ -1,16 +0,0 @@
--- | This sets up the recommended implementation of Sha256.
-{-# OPTIONS_GHC -fno-warn-orphans #-}
---
--- The orphan instance declaration separates the implementation and
--- setting the recommended instances. Therefore, we ignore the warning.
---
-
-module Raaz.Hash.Sha256.Recommendation where
-
-import Raaz.Core
-import Raaz.Hash.Sha256.Internal
-import qualified Raaz.Hash.Sha256.Implementation.CPortable as CPortable
-
--- | Recommended implementation for SHA256.
-instance Recommendation SHA256 where
-  recommended _ = CPortable.implementation
diff --git a/Raaz/Hash/Sha384.hs b/Raaz/Hash/Sha384.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha384.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-|
-
-This module exposes combinators to compute the SHA384 hash and the
-associated HMAC for some common types.
-
--}
-
-module Raaz.Hash.Sha384
-       ( -- * The SHA384 cryptographic hash
-         SHA384
-       , sha384, sha384File, sha384Source
-       -- * HMAC computation using SHA384
-       , hmacSha384, hmacSha384File, hmacSha384Source
-       ) where
-
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Lazy as L
-
-import Raaz.Core
-
-import Raaz.Hash.Internal        ( hashSource, hash, hashFile       )
-import Raaz.Hash.Internal.HMAC   ( hmacSource, hmac, hmacFile, HMAC )
-import Raaz.Hash.Sha384.Internal ( SHA384 )
-import Raaz.Hash.Sha384.Recommendation()
-
--- | Compute the sha384 hash of an instance of `PureByteSource`. Use
--- this for computing the sha384 hash of a strict or lazy byte string.
-sha384       :: PureByteSource src => src -> SHA384
-sha384       = hash
-{-# SPECIALIZE sha384 :: B.ByteString -> SHA384 #-}
-{-# SPECIALIZE sha384 :: L.ByteString -> SHA384 #-}
-
-
--- | Compute the sha384 hash of a file.
-sha384File   :: FilePath -> IO SHA384
-sha384File   = hashFile
-
--- | Compute the sha384 hash of a general byte source.
-sha384Source :: ByteSource src => src -> IO SHA384
-sha384Source = hashSource
-
--- | Compute the message authentication code using hmac-sha384.
-hmacSha384 :: PureByteSource src
-           => Key (HMAC SHA384)  -- ^ Key to use
-           -> src                -- ^ pure source whose hmac is to be
-                                 -- computed
-           -> HMAC SHA384
-hmacSha384 = hmac
-
--- | Compute the message authentication code for a file.
-hmacSha384File :: Key (HMAC SHA384) -- ^ Key to use
-               -> FilePath          -- ^ File whose hmac is to be computed
-               -> IO (HMAC SHA384)
-hmacSha384File = hmacFile
-
--- | Compute the message authetication code for a generic byte source.
-hmacSha384Source :: ByteSource src
-                 => Key (HMAC SHA384)
-                 -> src
-                 -> IO (HMAC SHA384)
-hmacSha384Source = hmacSource
diff --git a/Raaz/Hash/Sha384/Implementation/CPortable.hs b/Raaz/Hash/Sha384/Implementation/CPortable.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha384/Implementation/CPortable.hs
+++ /dev/null
@@ -1,47 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses       #-}
--- | The portable C-implementation of SHA384
-module Raaz.Hash.Sha384.Implementation.CPortable
-       ( implementation
-       ) where
-
-import Control.Applicative
-import Prelude
-
-import Raaz.Core
-import Raaz.Hash.Internal
-import Raaz.Hash.Sha384.Internal
-import Raaz.Hash.Sha512.Internal
-
-import qualified Raaz.Hash.Sha512.Implementation.CPortable as SHA512I
-
-
-newtype SHA384Memory = SHA384Memory { unSHA384Mem :: HashMemory SHA512 }
-
-instance Memory SHA384Memory where
-  memoryAlloc     = SHA384Memory <$> memoryAlloc
-  unsafeToPointer = unsafeToPointer . unSHA384Mem
-
-instance Initialisable SHA384Memory () where
-  initialise _ = onSubMemory unSHA384Mem
-                 $ initialise
-                 $ SHA512
-                 $ unsafeFromList [ 0xcbbb9d5dc1059ed8
-                                  , 0x629a292a367cd507
-                                  , 0x9159015a3070dd17
-                                  , 0x152fecd8f70e5939
-                                  , 0x67332667ffc00b31
-                                  , 0x8eb44a8768581511
-                                  , 0xdb0c2e0d64f98fa7
-                                  , 0x47b5481dbefa4fa4
-                                  ]
-
-instance Extractable SHA384Memory SHA384 where
-  extract = trunc <$> onSubMemory unSHA384Mem extract
-    where trunc (SHA512 v) = SHA384 $ initial v
-
--- | The portable C implementation of SHA384.
-implementation :: Implementation SHA384
-implementation =  SomeHashI cPortable
-
-cPortable :: HashI SHA384 SHA384Memory
-cPortable = truncatedI (toEnum . fromEnum) unSHA384Mem SHA512I.cPortable
diff --git a/Raaz/Hash/Sha384/Internal.hs b/Raaz/Hash/Sha384/Internal.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha384/Internal.hs
+++ /dev/null
@@ -1,40 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE DataKinds                  #-}
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# CFILES raaz/hash/sha1/portable.c    #-}
-
--- | Internals of Sha384.
-module Raaz.Hash.Sha384.Internal
-       ( SHA384(..)
-       ) where
-
-import           Data.String
-import           Data.Word
-import           Foreign.Storable    ( Storable(..) )
-
-import           Raaz.Core
-import           Raaz.Hash.Internal
-
-
------------------------------ SHA384 -------------------------------------------
-
--- | The Sha384 hash value.
-newtype SHA384 = SHA384 (Tuple 6 (BE Word64))
-                 deriving (Eq, Equality, Storable, EndianStore)
-
-instance Encodable SHA384
-
-instance IsString SHA384 where
-  fromString = fromBase16
-
-instance Show SHA384 where
-  show =  showBase16
-instance Primitive SHA384 where
-  blockSize _ = BYTES 128
-  type Implementation SHA384 = SomeHashI SHA384
-
-instance Hash SHA384 where
-  additionalPadBlocks _ = toEnum 1
diff --git a/Raaz/Hash/Sha384/Recommendation.hs b/Raaz/Hash/Sha384/Recommendation.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha384/Recommendation.hs
+++ /dev/null
@@ -1,16 +0,0 @@
--- | This sets up the recommended implementation of Sha384.
-{-# OPTIONS_GHC -fno-warn-orphans #-}
---
--- The orphan instance declaration separates the implementation and
--- setting the recommended instances. Therefore, we ignore the warning.
---
-
-module Raaz.Hash.Sha384.Recommendation where
-
-import Raaz.Core
-import Raaz.Hash.Sha384.Internal
-import qualified Raaz.Hash.Sha384.Implementation.CPortable as CPortable
-
--- | Recommended implementation for SHA384.
-instance Recommendation SHA384 where
-  recommended _ = CPortable.implementation
diff --git a/Raaz/Hash/Sha512.hs b/Raaz/Hash/Sha512.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha512.hs
+++ /dev/null
@@ -1,61 +0,0 @@
-{-|
-
-This module exposes combinators to compute the SHA512 hash and the
-associated HMAC for some common types.
-
--}
-
-module Raaz.Hash.Sha512
-       ( -- * The SHA512 cryptographic hash
-         SHA512
-       , sha512, sha512File, sha512Source
-       -- * HMAC computation using SHA512
-       , hmacSha512, hmacSha512File, hmacSha512Source
-       ) where
-
-import qualified Data.ByteString as B
-import qualified Data.ByteString.Lazy as L
-
-import Raaz.Core
-
-import Raaz.Hash.Internal        ( hashSource, hash, hashFile       )
-import Raaz.Hash.Internal.HMAC   ( hmacSource, hmac, hmacFile, HMAC )
-import Raaz.Hash.Sha512.Internal ( SHA512 )
-import Raaz.Hash.Sha512.Recommendation()
-
--- | Compute the sha512 hash of an instance of `PureByteSource`. Use
--- this for computing the sha512 hash of a strict or lazy byte string.
-sha512       :: PureByteSource src => src -> SHA512
-sha512       = hash
-{-# SPECIALIZE sha512 :: B.ByteString -> SHA512 #-}
-{-# SPECIALIZE sha512 :: L.ByteString -> SHA512 #-}
-
-
--- | Compute the sha512 hash of a file.
-sha512File   :: FilePath -> IO SHA512
-sha512File   = hashFile
-
--- | Compute the sha512 hash of a general byte source.
-sha512Source :: ByteSource src => src -> IO SHA512
-sha512Source = hashSource
-
--- | Compute the message authentication code using hmac-sha512.
-hmacSha512 :: PureByteSource src
-           => Key (HMAC SHA512)  -- ^ Key to use
-           -> src                -- ^ pure source whose hmac is to be
-                                 -- computed
-           -> HMAC SHA512
-hmacSha512 = hmac
-
--- | Compute the message authentication code for a file.
-hmacSha512File :: Key (HMAC SHA512) -- ^ Key to use
-               -> FilePath          -- ^ File whose hmac is to be computed
-               -> IO (HMAC SHA512)
-hmacSha512File = hmacFile
-
--- | Compute the message authetication code for a generic byte source.
-hmacSha512Source :: ByteSource src
-                 => Key (HMAC SHA512)
-                 -> src
-                 -> IO (HMAC SHA512)
-hmacSha512Source = hmacSource
diff --git a/Raaz/Hash/Sha512/Implementation/CPortable.hs b/Raaz/Hash/Sha512/Implementation/CPortable.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha512/Implementation/CPortable.hs
+++ /dev/null
@@ -1,28 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface   #-}
--- | The portable C-implementation of SHA512
-module Raaz.Hash.Sha512.Implementation.CPortable
-       ( implementation, cPortable
-       ) where
-
-import Foreign.Ptr                ( Ptr )
-import Raaz.Core
-import Raaz.Hash.Internal
-import Raaz.Hash.Sha.Util
-import Raaz.Hash.Sha512.Internal
-
--- | The portable C implementation of SHA512.
-implementation :: Implementation SHA512
-implementation =  SomeHashI cPortable
-
--- | The Hash implementation, i.e. `HashI` associated with the
--- portable C implementation for the hash SHA512. This can be used
--- to implement truncated implementation like SHA384.
-cPortable :: HashI SHA512 (HashMemory SHA512)
-cPortable = shaImplementation
-            "sha512-cportable"
-            "Sha512 Implementation using portable C and Haskell FFI"
-            c_sha512_compress length128Write
-
-foreign import ccall unsafe
-  "raaz/hash/sha512/portable.h raazHashSha512PortableCompress"
-  c_sha512_compress  :: Pointer -> Int -> Ptr SHA512 -> IO ()
diff --git a/Raaz/Hash/Sha512/Internal.hs b/Raaz/Hash/Sha512/Internal.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha512/Internal.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-{-# LANGUAGE CPP                        #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-{-# LANGUAGE TypeFamilies               #-}
-{-# LANGUAGE FlexibleInstances          #-}
-{-# LANGUAGE MultiParamTypeClasses      #-}
-{-# LANGUAGE DataKinds                  #-}
-{-# CFILES raaz/hash/sha1/portable.c    #-}
-
--- | Internals of Sha512.
-module Raaz.Hash.Sha512.Internal (SHA512(..)) where
-
-
-import           Data.String
-import           Data.Word
-import           Foreign.Storable    ( Storable(..) )
-
-import           Raaz.Core
-
-
-import           Raaz.Hash.Internal
-
------------------------------ SHA512 ---------------------------------
-
--- | The Sha512 hash value. Used in implementation of Sha384 as well.
-newtype SHA512 = SHA512 (Tuple 8 (BE Word64))
-               deriving (Eq, Equality, Storable, EndianStore)
-
-instance Encodable SHA512
-
-instance IsString SHA512 where
-  fromString = fromBase16
-
-instance Show SHA512 where
-  show =  showBase16
-
-instance Primitive SHA512 where
-  blockSize _ = BYTES 128
-  type Implementation SHA512 = SomeHashI SHA512
-
-instance Initialisable (HashMemory SHA512) () where
-  initialise _ = initialise $ SHA512
-                 $ unsafeFromList [ 0x6a09e667f3bcc908
-                                  , 0xbb67ae8584caa73b
-                                  , 0x3c6ef372fe94f82b
-                                  , 0xa54ff53a5f1d36f1
-                                  , 0x510e527fade682d1
-                                  , 0x9b05688c2b3e6c1f
-                                  , 0x1f83d9abfb41bd6b
-                                  , 0x5be0cd19137e2179
-                                  ]
-
-instance Hash SHA512 where
-  additionalPadBlocks _ = toEnum 1
diff --git a/Raaz/Hash/Sha512/Recommendation.hs b/Raaz/Hash/Sha512/Recommendation.hs
deleted file mode 100644
--- a/Raaz/Hash/Sha512/Recommendation.hs
+++ /dev/null
@@ -1,16 +0,0 @@
--- | This sets up the recommended implementation of Sha512.
-{-# OPTIONS_GHC -fno-warn-orphans #-}
---
--- The orphan instance declaration separates the implementation and
--- setting the recommended instances. Therefore, we ignore the warning.
---
-
-module Raaz.Hash.Sha512.Recommendation where
-
-import Raaz.Core
-import Raaz.Hash.Sha512.Internal
-import qualified Raaz.Hash.Sha512.Implementation.CPortable as CPortable
-
--- | Recommend implementation for SHA512.
-instance Recommendation SHA512 where
-  recommended _ = CPortable.implementation
diff --git a/Raaz/Random.hs b/Raaz/Random.hs
deleted file mode 100644
--- a/Raaz/Random.hs
+++ /dev/null
@@ -1,399 +0,0 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
--- | Interface for cryptographically secure random byte generators.
-module Raaz.Random
-       ( -- * Cryptographically secure randomness.
-         -- $randomness$
-         RT, RandM
-       , randomByteString
-       , random, randomiseCell
-       -- ** Types that can be generated randomly
-       , RandomStorable(..), unsafeFillRandomElements
-         -- * Low level access to randomness.
-       , fillRandomBytes
-       , reseed
-       -- * Internals
-       -- $internals$
-       ) where
-
-import Control.Applicative
-import Control.Monad
-import Control.Monad.IO.Class
-import Data.ByteString             ( ByteString             )
-import Data.Int
-import Data.Vector.Unboxed  hiding ( replicateM, create     )
-import Data.Word
-
-import Foreign.Ptr      ( Ptr     , castPtr)
-import Foreign.Storable ( Storable, peek   )
-import Prelude
-
-import Raaz.Core
-import Raaz.Cipher.ChaCha20.Internal(KEY, IV)
-import Raaz.Random.ChaCha20PRG
-
-
--- $randomness$
---
--- The raaz library gives a relatively high level interface to
--- cryptographically secure randomness. The combinator `random`
--- generates pure value of certain types where as a sequence of random
--- bytes can be generated using the combinator
--- `randomByteString`. Both these combinators returns actions in the
--- `RandM`, the monad that captures actions that generate/use
--- cryptographically secure random bytes.
---
--- = Running a random action
---
--- There are two ways to run an `RandM` action, either `securely` or
--- `insecurely`. The only difference in these two is how they store
--- their seed in memory. The combinator `securely` ensures that the
--- seed of the CS-PRG is in a locked memory which is wiped clean after
--- the action is done. It is only needed in certain special cases
--- where the generated bytes needs to be kept secret, like for example
--- when generating long term keys. Even in those special cases, we
--- need to take extra precautions to ensure that no data is leaked
--- (details follow). For almost all other cases, we just need to use
--- `insecurely` as demonstrated below.
---
--- > -- Generate a pair of random Word8's
--- > import Raaz
--- > import Data.Word
--- >
--- > main :: IO ()
--- > main = insecurely rPair >>= print
--- >    where rPair :: RandM (Word8, Word8)
--- >          rPair = (,) <$> random <$> random
--- >
---
---
--- > -- A version of hello world that has gone nuts. Printed in base16
--- > -- to save some terminal grief.
--- >
--- > main = insecurely who >>= \ w -> putStrLn $ "hello " ++ showBase16 w
--- >   where who :: RandM ByteString
--- >         who = randomByteString 10
--- >
---
--- = Generating sensitive data
---
--- The pseudo-random generator exposed here is cryptographically
--- strong enough to be used in generating long term private key for a
--- PKI system. However, special care is to be taken when generating
--- such data as we do not want the data to be swapped out of the
--- memory. The `securely` combinator is precisely for this
--- scenario. However, it is not enough to just wrap a `RandM` action
--- in `securely` to avoid leaking sensitive data. The use of
--- `securely` instead of `insecurely` in the following code gives us
--- /no additional security/.
---
--- > -- Could as well use insecurely
--- > genWord64 :: IO Word64
--- > genWord64 = securely random
--- >
--- > -- Could as well use insecurely
--- > genRandomPassword :: IO ByteString
--- > genRandomPassword = securely $ randomByteString 42
---
--- Running a random action like `randomByteString`, using the
--- combinator `securely` only guarantees the seed is kept in locked
--- memory whereas the generated pure value resides in the unlocked
--- Haskell heap.  It is not feasible to ensure that the value is
--- stored in locked memory as the garbage collector often moves values
--- around. In general, it is not good to generate sensitive values as
--- a pure Haskell values. The solution we now describe gets into the
--- guts of the memory system of raaz. We recommend users who are not
--- developers of raaz or crypto-protocols on top of the raaz library,
--- to look for more high level solutions that hopefully raaz will
--- export.
---
--- The monad `RandM` is a specialisation of the more general random
--- monad @`RT` mem@ which captures a random actions that use an
--- additional memory element of type @mem@ (See the `Raaz.Core.Memory`
--- module for a description of the memory subsystem of raaz). The main
--- idea is to generate the random data directly into the additional
--- memory used by the action. A typical situation is to generate a
--- random element into a memory cell. This can be achieved by using
--- `randomiseCell` which, together with appropriate uses of
--- `onSubMemory`, should take care of most use cases of generating
--- sensitive data. Here is an example where we generate a key and iv
--- at randomly and perform an action with it.
---
--- > type SensitiveInfo = (MemoryCell Key, Memory IV)
--- >
--- > main :: IO ()
--- > main = securely $ do
--- >
--- >     -- Initialisation
--- >     onSubMemory fst randomiseCell -- randomise key
--- >     onSubMemory snd randomiseCell -- randomise iv
--- >
--- >     doSomethingWithKeyIV
---
--- More complicated interactions might require direct use of low level
--- buffer filling operations `fillRandomBytes` and
--- `fillRandomElements`. We recommend that this be avoided as much as
--- possible as they are prone to all the problems with pointer
--- functions.
---
---
-
--- $internals$
---
--- __Note:__ Only for developers and reviewers.
---
--- Generating unpredictable stream of bytes is one task that has burnt
--- the fingers of a lot of programmers. Unfortunately, getting it
--- correct is something of a black art. We give the internal details
--- of the cryptographic pseudo-random generator used in raaz. Note
--- that none of the details here are accessible or tuneable by the
--- user. This is a deliberate design choice to insulate the user from
--- things that are pretty easy to mess up.
---
--- The pseudo-random generator in Raaz uses the chacha20 stream
--- cipher. We more or less follow the /fast key erasure technique/
--- (https://blog.cr.yp.to/20170723-random.html) which is used in the
--- arc4random implementation in OpenBSD.  The two main steps in the
--- generation of the required random bytes are the following:
---
--- [Seeding:] Setting the internal state of of the chacha20 cipher,
--- i.e. its key, iv, and counter.
---
--- [Sampling:] Pre-computing a few blocks of the chacha20 key stream
--- in an auxiliary buffer which in turn is used to satisfy the
--- requests for random bytes.
---
--- The internal chacha20 state and auxilary buffer used to cache
--- generated random bytes is part of the memory used in the `RT` monad
--- and hence using `securely` will ensure that they are locked.
---
--- == Seeding.
---
--- We use the /system entropy source/ to seed the (key, iv) of the
--- chacha20 cipher.  Reading the system entropy source is a costly
--- affair as it often involves a system call. Therefore, seeding is
--- done at the beginning of the operation and once every 1G blocks
--- (64GB) of data generated. No direct access to the system entropy is
--- provided to the user except through the `reseed` combinator which
--- itself is not really recommended. This is a deliberate design
--- choice to avoid potential confusion and the resulting error for the
--- user.
---
--- User level libraries have very little access to actual entropy
--- sources and it is very difficult to ascertain the quality of the
--- ones that we do have. Therefore, we believe it is better to rely on
--- the operating system for the entropy needed for seeding. As a
--- result, security of PRG is crucially dependent on the quality of
--- system entropy source. If the seed is predictable then everything
--- till the next seeding (an infrequent event as explained above) is
--- deterministic and hence compromised. Be warned that the entropy in
--- many systems are quite low at certain epochs, like at the time of
--- startup. This can cause the PRG to be compromised. We try to
--- mitigate this by using the best know source for each supported
--- operating system. Given below is the list of our choice of entropy
--- source.
---
--- [OpenBSD/NetBSD:] The arc4random call.
---
--- [Linux:] Defaults to @\/dev\/urandom@ but has experimental support
--- for `getrandom` (needs testing). The `getrandom` call is better but
--- many current systems do not have support for this (needs kernel >
--- 3.17 and libc > 2.25).
---
--- [Other Posix:] Uses @\/dev\/urandom@
---
--- [Windows:] Support using CryptGenRandom from Wincrypt.h.
---
--- == Sampling.
---
--- Instead of running the chacha20 cipher for every request, we
--- generate 16 blocks of ChaCha20 key stream in an auxiliary buffer
--- and satisfy requests for random bytes from this buffer. To ensure
--- that the compromise of the PRG state does not compromise the random
--- data already generated and given out, we do the following.
---
--- 1. At each sampling, we re-initialise the (key,iv) pair using the
---    key size + iv size bytes from the auxiliary buffer. This ensures
---    that there is no way to know which key,iv pairs was used to
---    generate the current contents in the auxiliary buffer.
---
--- 2. Every use of data from the auxiliary buffer, whether it is to
---    satisfy a request for random bytes or to reinitialise the
---    (key,iv) pair in step 1 is wiped out immediately.
---
--- Assuming the security of the chacha20 stream cipher we have the
--- following security guarantee.
---
--- [Security Guarantee:] At any point of time, a compromise of the
--- cipher state (i.e. key iv pair) and/or the auxiliary buffer does
--- not reveal the random data that is given out previously.
---
-
--- | A batch of actions on the memory element @mem@ that uses some
--- randomness.
-newtype RT mem a = RT { unRT :: MT (RandomState, mem) a }
-                 deriving (Functor, Applicative, Monad, MonadIO)
-
--- | Run a randomness thread. In particular, this combinator takes
--- care of seeding the internal prg at the start.
-seedAndRunRT :: RT m a
-      -> MT (RandomState, m) a
-seedAndRunRT action = onSubMemory fst reseedMT >> unRT action
-
--- | The monad for generating cryptographically secure random data.
-type RandM = RT VoidMemory
-
-instance MemoryThread RT where
-  insecurely        = insecurely . seedAndRunRT
-  securely          = securely   . seedAndRunRT
-  liftMT            = RT . onSubMemory snd
-  onSubMemory proj  = RT . onSubMemory projP . unRT
-    where projP (rstate, mem) = (rstate, proj mem)
-          -- No (misguided) use of functor instance for (,) here.
-
--- | Reseed from the system entropy pool. There is never a need to
--- explicitly seed your generator. The insecurely and securely calls
--- makes sure that your generator is seed before
--- starting. Furthermore, the generator also reseeds after every few
--- GB of random bytes that it generates. Generating random data from
--- the system entropy is usually an order of magnitude slower than
--- using a fast stream cipher. Reseeding often can slow your program
--- considerably without any additional security advantage.
---
-reseed :: RT mem ()
-reseed = RT $ onSubMemory fst reseedMT
-
--- | Fill the given input pointer with random bytes.
-fillRandomBytes :: LengthUnit l => l ->  Pointer -> RT mem ()
-fillRandomBytes l = RT . onSubMemory fst . fillRandomBytesMT l
-
-
--- | Instances of `Storable` which can be randomly generated. It might
--- appear that all instances of the class `Storable` should be
--- be instances of this class, after all we know the size of the
--- element, why not write that many random bytes. In fact, this module
--- provides an `unsafeFillRandomElements` which does that. However, we
--- do not give a blanket definition for all storables because for
--- certain refinements of a given type, like for example, Word8's
--- modulo 10, `unsafeFillRandomElements` introduces unacceptable
--- skews.
-class Storable a => RandomStorable a where
-  -- | Fill the buffer with so many random elements of type a.
-  fillRandomElements :: Memory mem
-                     => Int       -- ^ number of elements to fill
-                     -> Ptr a     -- ^ The buffer to fill
-                     -> RT mem ()
-
--- TOTHINK:
--- -------
---
--- Do we want to give a default definition like
---
--- > fillRandomElements = unsafeFillRandomElements
---
--- This would will make the instance definitions easier for the
--- Storables types that is spread over its entire range. However, it
--- would lead to a lazy definition which will compromise the quality
--- of the randomness.
-
-
-
--- | This is a helper function that has been exported to simplify the
--- definition of a `RandomStorable` instance for `Storable`
--- types. However, there is a reason why we do not give a blanket
--- instance for all instances `Storable` and why this function is
--- unsafe? This function generates a random element of type @a@ by
--- generating @n@ random bytes where @n@ is the size of the elements
--- of @a@. For instances that range the entire @n@ byte space this is
--- fine. However, if the type is actually a refinement of such a type,
--- (consider a @`Word8`@ modulo @10@ for example) this function
--- generates an unacceptable skew in the distribution. Hence this
--- function is prefixed unsafe.
-unsafeFillRandomElements :: (Memory mem, Storable a) => Int -> Ptr a -> RT mem ()
-unsafeFillRandomElements n ptr = fillRandomBytes totalSz $ castPtr ptr
-  where totalSz = fromIntegral n * sizeOf (getElement ptr)
-        getElement :: Ptr a -> a
-        getElement _ = undefined
-
-
--- | Generate a random element from an instance of a RandomStorable
--- element.
-random :: (RandomStorable a, Memory mem) => RT mem a
-random = RT $ liftPointerAction alloc (getIt . castPtr)
-  where getIt ptr    = unRT $ fillRandomElements 1 ptr >> liftIO (peek ptr)
-        alloc        :: Storable a => (Pointer -> IO a) -> IO a
-        alloc action = allocaAligned algn sz action
-          where getElement   :: (Pointer -> IO b) -> b
-                getElement _ = undefined
-                thisElement  = getElement action
-                algn         = alignment thisElement
-                sz           = sizeOf    thisElement
-
--- | Randomise the contents of a memory cell. Equivalent to @`random`
--- >>= liftMT . initialise@ but ensures that no data is transferred to
--- unlocked memory.
-randomiseCell :: RandomStorable a => RT (MemoryCell a) ()
-randomiseCell = getCellPointer >>= fillRandomElements 1
-
--- | Generate a random byteString.
-
-randomByteString :: LengthUnit l
-                 => l
-                 -> RT mem ByteString
-randomByteString l = RT $ onSubMemory fst  $ liftPointerAction (create l) $ fillRandomBytesMT l
-
-------------------------------- Some instances of Random ------------------------
-
-instance RandomStorable Word8 where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Word16 where
-
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Word32 where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Word64 where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Word where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Int8 where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Int16 where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Int32 where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Int64 where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable Int where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable KEY where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable IV where
-  fillRandomElements = unsafeFillRandomElements
-
-instance RandomStorable w => RandomStorable (LE w) where
-  fillRandomElements n = fillRandomElements n . lePtrToPtr
-    where lePtrToPtr :: Ptr (LE w) -> Ptr w
-          lePtrToPtr = castPtr
-
-instance RandomStorable w => RandomStorable (BE w) where
-  fillRandomElements n = fillRandomElements n . bePtrToPtr
-    where bePtrToPtr :: Ptr (BE w) -> Ptr w
-          bePtrToPtr = castPtr
-
-instance (Dimension d, Unbox w, RandomStorable w) => RandomStorable (Tuple d w) where
-  fillRandomElements n ptr = fillRandomElements (n * sz) $ tupPtrToPtr ptr
-    where getTuple    :: Dimension d => Ptr (Tuple d w) -> Tuple d w
-          getTuple _  = undefined
-          tupPtrToPtr ::  Ptr (Tuple d w) -> Ptr w
-          tupPtrToPtr = castPtr
-          sz         = dimension $ getTuple ptr
diff --git a/Raaz/Random/ChaCha20PRG.hs b/Raaz/Random/ChaCha20PRG.hs
deleted file mode 100644
--- a/Raaz/Random/ChaCha20PRG.hs
+++ /dev/null
@@ -1,136 +0,0 @@
--- | The module exposes the ChaCha20 based PRG.
-{-# LANGUAGE FlexibleContexts #-}
-module Raaz.Random.ChaCha20PRG
-       ( reseedMT, fillRandomBytesMT, RandomState(..)
-       ) where
-
-import Control.Applicative
-import Control.Monad
-import Foreign.Ptr   (Ptr, castPtr)
-import Prelude
-
-import Raaz.Core
-import Raaz.Cipher.ChaCha20.Internal
-import Raaz.Cipher.ChaCha20.Recommendation
-import Raaz.Entropy
-
--- | The maximum value of counter before reseeding from entropy
--- source. Currently set to 1024 * 1024 * 1024. Which will generate
--- 64GB before reseeding.
---
--- The counter is a 32-bit quantity. Which means that one can generate
--- 2^32 blocks of data before the counter roles over and starts
--- repeating. We have choosen a conservative 2^30 blocks here.
-maxCounterVal :: Counter
-maxCounterVal = 1024 * 1024 * 1024
-
--- | Memory for strong the internal memory state.
-data RandomState = RandomState { chacha20State  :: ChaCha20Mem
-                               , auxBuffer      :: RandomBuf
-                               , remainingBytes :: MemoryCell (BYTES Int)
-                               }
-
--------------------------- Some helper functions on random state -------------------
-
--- | Run an action on the auxilary buffer.
-withAuxBuffer :: (Ptr something -> MT RandomState a) -> MT RandomState a
-withAuxBuffer action = onSubMemory auxBuffer getBufferPointer >>= action . castPtr
-
--- | Get the number of bytes in the buffer.
-getRemainingBytes :: MT RandomState (BYTES Int)
-getRemainingBytes = onSubMemory remainingBytes extract
-
--- | Set the number of remaining bytes.
-setRemainingBytes :: BYTES Int -> MT RandomState ()
-setRemainingBytes = onSubMemory remainingBytes . initialise
-
-instance Memory RandomState where
-  memoryAlloc     = RandomState <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
-  unsafeToPointer = unsafeToPointer  . chacha20State
-
--------------------------------- The PRG operations ---------------------------------------------
-
--- | The overall idea is to generate a key stream into the auxilary
--- buffer using chacha20 and giving out bytes from this buffer. This
--- operation we call sampling. A portion of the sample is used for
--- resetting the key and iv to make the prg safe against backward
--- prediction, i.e. even if one knows the current seed (i.e. key iv
--- pair) one cannot predict the random values generated before.
-
-
-
--- | This fills in the random block with some new randomness
-newSample :: MT RandomState ()
-newSample = do
-  seedIfReq
-  withAuxBuffer $ onSubMemory chacha20State . flip chacha20Random randomBufferSize -- keystream
-  setRemainingBytes $ inBytes randomBufferSize -- Total bytes generated in one go
-  fillKeyIVWith fillExistingBytes
-
-
--- | See the PRG from system entropy.
-seed :: MT RandomState ()
-seed = do onSubMemory (counterCell . chacha20State) $ initialise (0 :: Counter)
-          fillKeyIVWith getEntropy
-
--- | Seed if we have already generated maxCounterVal blocks of random
--- bytes.
-seedIfReq :: MT RandomState ()
-seedIfReq = do c <- onSubMemory (counterCell . chacha20State) extract
-               when (c > maxCounterVal) seed
-
--- | Fill the iv and key from a filling function.
-fillKeyIVWith :: (BYTES Int -> Pointer -> MT RandomState a) -- ^ The function used to fill the buffer
-              -> MT RandomState ()
-fillKeyIVWith filler = let
-  keySize = sizeOf (undefined :: KEY)
-  ivSize  = sizeOf (undefined :: IV)
-  in do onSubMemory (keyCell . chacha20State) getCellPointer >>= void . filler keySize . castPtr
-        onSubMemory (ivCell  . chacha20State) getCellPointer >>= void . filler ivSize  . castPtr
-
-
-
-
-
---------------------------- DANGEROUS CODE ---------------------------------------
-
--- | Reseed the prg.
-reseedMT :: MT RandomState ()
-reseedMT = seed >> newSample
-
--- NONTRIVIALITY: Picking up the newSample is important when we first
--- reseed.
-
--- | The function to generate random bytes. Fills from existing bytes
--- and continues if not enough bytes are obtained.
-fillRandomBytesMT :: LengthUnit l => l -> Pointer -> MT RandomState ()
-fillRandomBytesMT l = go (inBytes l)
-  where go m ptr
-            | m > 0  = do mGot <- fillExistingBytes m ptr   -- Fill from the already generated buffer.
-                          when (mGot <= 0) newSample        -- We did not get any so sample.
-                          go (m - mGot) $ movePtr ptr mGot  -- Get the remaining.
-            | otherwise = return ()   -- Nothing to do
-
-
--- | Fill from already existing bytes. Returns the number of bytes
--- filled. Let remaining bytes be r. Then fillExistingBytes will fill
--- min(r,m) bytes into the buffer, and return the number of bytes
--- filled.
-fillExistingBytes :: BYTES Int -> Pointer -> MT RandomState (BYTES Int)
-fillExistingBytes req ptr = withAuxBuffer $ \ sptr -> do
-  r <- getRemainingBytes
-  let m  = min r req            -- actual bytes filled.
-      l  = r - m                -- leftover
-      tailPtr = movePtr sptr l
-    in do
-    -- Fills the source ptr from the end.
-    --  sptr                tailPtr
-    --   |                  |
-    --   V                  V
-    --   -----------------------------------------------------
-    --   |   l              |    m                           |
-    --   -----------------------------------------------------
-    memcpy (destination ptr) (source tailPtr) m -- transfer the bytes to destination
-    memset tailPtr 0 m                          -- wipe the bytes already transfered.
-    setRemainingBytes l                         -- set leftover bytes.
-    return m
diff --git a/Releasing.md b/Releasing.md
deleted file mode 100644
--- a/Releasing.md
+++ /dev/null
@@ -1,57 +0,0 @@
-# Checklist for releasing.
-
-## Pre-release checklist.
-
-Suppose that the release that one wants to do is version A.B.C. We
-assume that the current master has all the necessary changes except
-the release specific ones. The workflow is to start with a release
-branch which we will call release-A.B.C.
-
-* The first step is to update travis.yml to start building on the
-  release-A.B.C This should be done before actually creating the
-  release branch because we want all the release specific changes that
-  are pushed to be built by travis. This is done on the master branch.
-  push this change to the main repository
-
-* Create a fresh branch titled release-A.B.C.
-
-* Go over the bug-tracker for bugs to be addressed for this release.
-  mark them.
-
-* A pending change log entry should already be there for this entry.
-  Please review it.
-
-* Hack and get the project to shape.
-
-* When ready merge to the master as a non-ff merge.
-
-## Candidate release.
-
-Hackage supports candidate releases which we should be making use of.
-Here is a set of steps that can be done with a candidate release that
-can help in doing a high quality release
-
-1. Make sure to trigger a documentation build for the candidate on
-   hackage.  This is currently not automated but would likely be the
-   case.
-
-2. The package build matrix is likely to be operational for candidate
-   packages as well. This gives good package compatibility hints for
-   high quality release.
-
-
-3. Get down-stream packagers to make an experimental upload of the
-   package into their CI system. Distributions like Debian often do
-   have multi-arch builds and also add builds across other platforms
-   like Hurd, kFreeBSD etc. Successful builds
-
-
-## Post release
-
-* Upload the release on hackage.
-
-* Tag the release branch. Put the change log in the tag message.
-
-* Bump up the release version.
-
-* Create a pending entry for the next release in the Change log.
diff --git a/Reviewing.md b/Reviewing.md
deleted file mode 100644
--- a/Reviewing.md
+++ /dev/null
@@ -1,132 +0,0 @@
-# Checklist for reviewing code.
-
-## Reviewing Haskell code
-
-### Timing safe equality.
-
-All cryptographically sensitive data types should have timing safe
-equality comparison. The class `Equality` is the timing safe
-counterpart of the `Eq` class. All such sensitive types should define
-the `Equality` instance first using the `eq` and the monoid instance
-of the `Result` type. The `Eq` type should then be a simple use of
-`(===)`.
-
-Good example.
-
-```haskell
-
-data GoodSensitiveType = ...
-
-instance Equality GoodSensitiveType where
-	eq a b = ...
-
-instance Eq GoodSensitiveType where
-	(==) = (===)
-
-```
-
-Here are some other example of a good definition.
-
-```haskell
-
--- makes use of the Equality instance for pair.
-newtype AnotherGoodType = AGT (Foo,Bar) deriving Equality
-
-instance Eq AnotherGoodType where
-	(==) = (===)
-
--- | Makes use of the Equality and Eq instances of tuple types.
-newtype Foo = Foo (Tuple 42 Word32) deriving (Equality, Eq)
-
-
-```
-
-A bad example. The deriving clause makes the (==) timing dependent
-even if `Foo` and `Bar` have timing safe equality.
-
-```haskell
-data BadSensitiveType = BadSensitiveType Foo Bar deriving Eq
-
-```
-
-
-### Dangerous modules
-
-We document here some of the Haskell modules that do dangerous stuff
-so that they can be audited more carefully. The exact dangers are
-documented in the module.
-
-
-1. Raaz.Cipher.ChaCha20.Recommendation.
-
-2. Raaz.Cipher.ChaCha20.Implementation.CPortable
-
-
-## Reviewing C code.
-
-For speed, the block primitives are written in C. Most primitives have
-a default word type (64-bit unsigned int for `sha512` for
-example). They also have a block that is essentially an array of such
-words (for `sha512` it is 16. So it will be common to see declarations
-of the following kind.
-
-```C
-
-typedef uint64_t   Word;  /* basic unit of sha512 hash  */
-#define HASH_SIZE  8      /* Number of words in a Hash  */
-#define BLOCK_SIZE 16     /* Number of words in a block */
-
-typedef Word Hash [ HASH_SIZE  ];
-typedef Word Block[ BLOCK_SIZE ];
-
-```
-
-In such a setting, we often have a loop that goes over all the
-blocks. This would typically look like the following.
-
-```C
-
-void foo(Block *ptr, int nblocks, ...)
-{
-	/* Other stuff here */
-
-	while(nblocks > 0) /* looping over all blocks */
-	{
-
-       doSomethingOn((*ptr)[i]); /* do something on the ith word in the current block */
-
-       -- nblocks; ++ ptr; /* move to the next block ensure these are
-                            * on the same line
-	                        */
-
-	}
-}
-
-```
-
-We would like to follow the above convention be cause it reduces the
-chance of incorrect pointer arithmetic. The bugs are concentrated on
-the definition of the block and word types. So if one is reviewing
-such low level code, it is better to get familiarised with this
-programming pattern.
-
-
-## Stuff that effects both C and Haskell.
-
-## Alignment and restrict for block primitives
-
-GCC can perform brutal optimisations even to Portable C
-implementations if the right argument is qualified with restrict and
-the alignment is matched to the associated vector operations. But these
-features are Dangerous
-
-1. Make sure that the alignment that you provide at the Haskell end
-   when you define the Implementation is the same as (or a multiple
-   of) that at the C side.
-
-2. Since we expect to call these functions as an ffi it is relatively
-   safe to assume that the buffer is not aliased. So restrict can also
-   be given.
-
-Be careful with ChaCha20 implementation where the alignment is also
-used for the PRG buffer (See the dangerous modules subsection).
diff --git a/api/aead/Auth/Implementation.hsig b/api/aead/Auth/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/api/aead/Auth/Implementation.hsig
@@ -0,0 +1,20 @@
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE KindSignatures              #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+-- | The implementation of the authenticator part of the construction.
+signature Auth.Implementation where
+
+import Raaz.Core
+
+data Prim
+data Internals
+
+instance Eq Prim
+instance Equality Prim
+instance Memory Internals
+instance WriteAccessible Internals
+instance Extractable Internals Prim
diff --git a/api/aead/Cipher/Implementation.hsig b/api/aead/Cipher/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/api/aead/Cipher/Implementation.hsig
@@ -0,0 +1,35 @@
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE FlexibleContexts            #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+-- | Implementation for the cipher part of the AEAD construction. It
+-- is assumed that the initialisation of the cipher `Internals` is
+-- done in the following order.
+--
+-- 1. Initialise the key either using initialise or using the `WriteAccessable` interface
+--
+-- 2. Initialise the nounce
+--
+-- 3. Initialise the BlockCount
+--
+signature Cipher.Implementation where
+
+import           Raaz.Core
+
+-- | The primitive
+data Prim
+
+-- | The internal memory used by the implementation.
+data Internals
+instance Memory Internals
+
+instance Initialisable Internals (Key Prim)
+
+-- | Write access to key is provided.
+instance WriteAccessible Internals
+instance Initialisable Internals (Nounce Prim)
+instance Initialisable Internals (BlockCount Prim) -- To restore/advance
+                                                   -- to a particular
+                                                   -- block in the stream
diff --git a/api/aead/Interface.hs b/api/aead/Interface.hs
new file mode 100644
--- /dev/null
+++ b/api/aead/Interface.hs
@@ -0,0 +1,233 @@
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE RecordWildCards            #-}
+
+-- |
+--
+-- Module      : aead-api: Interface
+-- Description : Generic interface to authenticated encryption.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+-- | The interface for an aead construction using a stream cipher like
+-- chacha20 and authenticator like poly1305.
+module Interface( -- * Locking and unlocking stuff
+                  unsafeLock, unlock
+                  -- ** Additional data.
+                , Locked, AuthTag, Cipher
+                , unsafeLockWith, unlockWith
+                , unsafeToNounce, unsafeToCipherText, unsafeToAuthTag
+                , unsafeLocked
+                , AEADMem
+                , name
+                , description
+                ) where
+
+import           Data.ByteString
+import           System.IO.Unsafe ( unsafePerformIO )
+
+import           Raaz.Core
+import           Raaz.Primitive.AEAD.Internal
+import qualified Cipher.Implementation as CI
+import qualified Auth.Implementation   as AI
+
+import qualified Cipher.Utils as CU
+import qualified Auth.Utils as AU
+
+import qualified Cipher.Buffer as CB
+
+-- | The associated cipher.
+type Cipher = CI.Prim
+
+-- | The associated message authenticator.
+type AuthTag = AI.Prim
+
+-- | The locked message.
+type Locked  = AEAD Cipher AuthTag
+
+-- | This function takes the plain text and the additional data, and
+-- constructs the associated Locked message. A peer who has the right
+-- @(key, nounce)@ pair and the `aad` can recover the unencrypted
+-- object using the `unlockWith` function.
+unsafeLockWith :: (Encodable plain, Encodable aad)
+               => aad              -- ^ the authenticated additional data.
+               -> Key Cipher       -- ^ The key for the stream cipher
+               -> Nounce Cipher    -- ^ The nounce used by the stream cipher.
+               -> plain            -- ^ the unencrypted object
+               -> Locked
+unsafeLockWith aad k n plain = unsafePerformIO $ withMemory $ \ mem -> do
+  initialise k mem
+  initialise n mem
+  cText <- encrypt plain mem
+  AEAD n cText <$> computeAuth aad cText mem
+
+-- | Unlock an encrypted authenticated version of the data given the
+-- additional data, key, and nounce. An attempt to unlock the element
+-- can result in `Nothing` if either of the following is true.
+--
+-- 1. The key, nounce pair used to encrypt the data is incorrect.
+--
+-- 2. The Authenticated additional data (@aad@) is incorrect.
+--
+-- 3. The Locked message is of the wrong type and hence the
+-- `fromByteString` failed.
+--
+-- 4. The Locked message has been tampered.
+--
+-- The interface provided above makes it impossible to know which of
+-- the above errors occurred. This is a deliberate design as revealing
+-- the nature of the failure can leak information to a potential
+-- attacker.
+--
+unlockWith :: (Encodable plain, Encodable aad)
+            => aad              -- ^ the authenticated additional data.
+            -> Key Cipher       -- ^ The key for the stream cipher
+            -> Locked
+                                -- ^ The encrypted authenticated version of the data.
+            -> Maybe plain
+unlockWith aad k aead = unsafePerformIO $ withMemory $ \ mem -> do
+  initialise k mem
+  initialise (unsafeToNounce aead) mem
+  isSuccess <- verify aad aead mem
+  if isSuccess then decrypt aead mem else return Nothing
+
+
+-- | Generate a locked version of an unencrypted object. You will need
+-- the exact same key and nounce to unlock the object.
+unsafeLock :: Encodable plain
+           => Key Cipher
+           -> Nounce Cipher
+           -> plain
+           -> Locked
+unsafeLock = unsafeLockWith ()
+
+
+-- | Unlock the encrypted packet.
+unlock :: Encodable plain
+       => Key Cipher
+       -> Locked
+       -> Maybe plain
+unlock = unlockWith ()
+
+-- | The internal memory used for computing the AEAD packet. When using
+-- this memory for packet computation, it is important to initalise the
+-- memory in the following order.
+--
+-- 1. Initialise with key either using the `initialise` function or, by using
+--    the `WriteAccessible` instance using the `mem.
+-- 2. Initialise the nounce
+--
+-- We are then all set to go.
+--
+data AEADMem = AEADMem { cipherInternals :: CI.Internals
+                       , authInternals   :: AI.Internals
+                       , internBuffer    :: CB.Buffer 1
+                       }
+
+instance Memory AEADMem where
+  memoryAlloc     = AEADMem <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . cipherInternals
+
+-- | Initialise with the key of the cipher.
+instance Initialisable AEADMem (Key Cipher) where
+  initialise k = initialise k . cipherInternals
+
+instance WriteAccessible AEADMem where
+  writeAccess = writeAccess . cipherInternals
+  afterWriteAdjustment = afterWriteAdjustment . cipherInternals
+
+-- | Initialise after the key is already initialised.
+instance Initialisable AEADMem (Nounce Cipher) where
+  initialise n AEADMem{..} = do
+    initialise n cipherInternals
+    let zeroCount = 0 `blocksOf` (Proxy :: Proxy Cipher)
+      in initialise zeroCount cipherInternals
+
+    --
+    -- Generate the key stream
+    --
+    CB.memsetBuffer 0 internBuffer                -- clear the internal buffer
+    CU.processBuffer internBuffer cipherInternals -- generate the keystream
+    --
+    -- Initialise the authenticator from the keystream.
+    --
+    memTransfer (destination authInternals) (source internBuffer)
+
+--------------------- Internal functions ---------------------------------
+---
+-- These are some of the internal functions that are used by various
+-- lock unlock functions. One of the constraints that we want to
+-- enforce is that unauthenticated input should never be
+-- decrypted. Hence, despite their cute names, these functions should
+-- not be exposed to the user from this module
+
+-- | Transform the input bytestring with the cipher.
+transform :: ByteString -- The plain text associated with the data
+          -> AEADMem
+          -> IO ByteString
+transform bs = CU.transform bs . cipherInternals
+
+-- | Compute the authenticator
+computeAuth :: Encodable aad
+            => aad               -- ^ The additional data that needs
+                                 -- to be authenticated
+            -> ByteString        -- ^ The cipher text.
+            -> AEADMem
+            -> IO AuthTag
+computeAuth aad cText aeadmem =
+  AU.processByteSource (toByteString authWr) authMem >> extract authMem
+  where (aadWr, lAAD) = padAndLen aad
+        (cWr, lC)     = padAndLen cText
+        authWr        = aadWr <> cWr <> write lAAD <> write lC
+        authMem       = authInternals aeadmem
+
+
+verify :: Encodable aad
+       => aad
+       -> Locked
+       -> AEADMem
+       -> IO Bool
+verify aad aead = fmap matchTag . computeAuth aad (unsafeToCipherText aead)
+  where matchTag = (==) (unsafeToAuthTag aead)
+
+-- | Encrypt a plain text object.
+encrypt :: Encodable plain
+        => plain      -- The plain object that needs encryption
+        -> AEADMem
+        -> IO ByteString
+encrypt plain = transform $ toByteString plain
+
+
+-- | Decrypt to recover the plain text object. We assume a stream
+-- cipher and hence transform is the encryption and decryption
+-- routine.
+decrypt :: Encodable plain
+        => Locked
+        -> AEADMem
+        -> IO (Maybe plain)
+decrypt aead = fmap fromByteString . transform (unsafeToCipherText aead)
+
+-- | Compute the padded write of an encodable element and its length.
+padAndLen :: Encodable a => a -> (WriteTo, LE Word64)
+padAndLen a = (padWrite 0 pL aWr, len)
+  where aWr   = writeEncodable a
+        len   = toLen (transferSize aWr)
+        toLen = toEnum . fromEnum
+        pL    = 1 `blocksOf` (Proxy :: Proxy AuthTag)
+
+-- | Create the locked message from the associated Nounce, cipher
+-- text, and the authentication tag.
+unsafeLocked :: Nounce Cipher
+             -> ByteString
+             -> AuthTag
+             -> Locked
+unsafeLocked = AEAD
+
+name :: String
+name = unwords [CI.name,"+", AI.name]
+
+description :: String
+description = unwords [ "AEAD implementation based on",name]
diff --git a/api/auth/Implementation.hsig b/api/auth/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/api/auth/Implementation.hsig
@@ -0,0 +1,39 @@
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE KindSignatures              #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+-- | This signature imposes additional constraints on the primitive to
+-- make it possible to use it as a message authenticator. Here is the list.
+--
+-- 1. The `Prim` type captures the message authentication code and
+--    hence should be instances of `Eq`, so that we can compare
+--    messages by checking the digest, and `Equality`, so that the
+--    equality comparison can be made timing safe when part of a
+--    compound data.
+--
+-- 2. To start the process of computing the message authentication,
+--    the `Internal` state of the implementation should be initialised
+--    using the secret key.
+--
+-- 3. At the end of the message, the authentication code, which recall
+--    is captured by the type `Prim` should be extractable from the
+--    internal state.
+--
+
+signature Implementation where
+
+import Raaz.Core
+
+data Prim
+data Internals
+
+
+instance Equality Prim
+instance Eq Prim
+
+instance Memory Internals
+instance Initialisable Internals (Key Prim)
+instance Extractable Internals Prim
diff --git a/api/auth/Interface.hs b/api/auth/Interface.hs
new file mode 100644
--- /dev/null
+++ b/api/auth/Interface.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE RecordWildCards       #-}
+module Interface ( Auth
+                 , auth
+                 , authFile
+                 , authSource
+                 , AuthCxt
+                 , startAuth
+                 , updateAuth
+                 , finaliseAuth
+                 , name
+                 , description
+                 ) where
+
+import GHC.TypeLits
+
+import qualified Data.ByteString      as B
+import qualified Data.ByteString.Lazy as L
+import           System.IO.Unsafe     (unsafePerformIO)
+
+
+import           Raaz.Core
+import qualified Implementation
+import           Utils
+import           Context
+
+type Auth    = Implementation.Prim
+type AuthCxt = Cxt
+-- | Compute the authenticator of a pure byte source like,
+-- `B.ByteString`.
+auth :: PureByteSource src
+     => Key Auth
+     -> src  -- ^ Message
+     -> Auth
+auth key = unsafePerformIO . authSource key
+{-# INLINEABLE auth #-}
+{-# SPECIALIZE auth :: Key Auth -> B.ByteString -> Auth #-}
+{-# SPECIALIZE auth :: Key Auth -> L.ByteString -> Auth #-}
+
+-- | Compute the auth of file.
+authFile :: Key Auth
+         -> FilePath  -- ^ File to be authed
+         -> IO Auth
+authFile key fileName = withBinaryFile fileName ReadMode $ authSource key
+{-# INLINEABLE authFile   #-}
+
+
+-- | Compute the auth of an arbitrary byte source.
+authSource :: ByteSource src
+           => Key Auth
+           -> src
+           -> IO Auth
+{-# SPECIALIZE authSource :: Key Auth -> B.ByteString -> IO Auth #-}
+{-# SPECIALIZE authSource :: Key Auth -> L.ByteString -> IO Auth #-}
+{-# SPECIALIZE authSource :: Key Auth -> Handle       -> IO Auth #-}
+
+authSource key src = withMemory $ \ mem -> do
+  initialise key mem
+  processByteSource src mem
+  extract mem
+
+-- | Prepare the context to (re)start a session of incremental
+-- processing.
+startAuth :: KnownNat n
+          => Key Auth   -- ^ The key to be used
+          -> AuthCxt n
+          -> IO ()
+startAuth k cxt@Cxt{..} = do initialise k cxtInternals
+                             unsafeSetCxtEmpty cxt
+
+
+-- | Add some more data into the context, in this case the entirety of
+-- the byte source src.
+updateAuth :: (KnownNat n, ByteSource src)
+           => src
+           -> AuthCxt n
+           -> IO ()
+updateAuth = updateCxt
+
+-- | Finalise the context to get hold of the digest.
+finaliseAuth :: KnownNat n
+             => AuthCxt n
+             -> IO Auth
+finaliseAuth cxt@Cxt{..} = finaliseCxt cxt >> extract cxtInternals
+
+
+-- | Textual name of the authenticator implementation.
+name :: String
+name = Implementation.name
+
+-- | Description of the implementation
+description :: String
+description = Implementation.description
diff --git a/api/digest/Implementation.hsig b/api/digest/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/api/digest/Implementation.hsig
@@ -0,0 +1,41 @@
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE KindSignatures              #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+-- | This signature imposes additional constraints on the primitive to
+-- make it possible to use it as a message digest. Here is the list.
+--
+-- 1. The `Prim` type captures the message digest and hence should be
+--    instances of `Eq`, so that we can compare messages by checking
+--    the digest, and `Equality`, so that the equality comparison can
+--    be made timing safe when part of a compound data.
+--
+-- 2. To start the process of computing the message digest the
+--    `Internal` state of the implementation should use initialised by
+--    @()@.
+--
+-- 3. At the end of the message, the digest, which recall is captured
+--    by the type `Prim` should be extracted from the internal state.
+--
+
+signature Implementation where
+
+
+import Raaz.Core
+
+-- | The primitive.
+data Prim
+
+instance Eq Prim
+instance Equality Prim
+
+-- | The internal memory used by the primitive.
+data Internals
+instance Memory Internals
+
+
+instance Initialisable Internals ()
+instance Extractable Internals Prim
diff --git a/api/digest/Interface.hs b/api/digest/Interface.hs
new file mode 100644
--- /dev/null
+++ b/api/digest/Interface.hs
@@ -0,0 +1,92 @@
+{-# LANGUAGE RecordWildCards       #-}
+-- |
+--
+-- Module      : digest-api: Interface
+-- Description : Generic interface to message digest.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Interface ( Digest
+                 , digest
+                 , digestFile
+                 , digestSource
+                 , DigestCxt
+                 , startDigest
+                 , updateDigest
+                 , finaliseDigest
+                 , name
+                 , description
+                 ) where
+
+import GHC.TypeLits
+
+import qualified Data.ByteString      as B
+import qualified Data.ByteString.Lazy as L
+import           System.IO.Unsafe     (unsafePerformIO)
+
+
+import           Raaz.Core
+import qualified Implementation
+import           Utils
+import           Context
+
+type Digest    = Implementation.Prim
+type DigestCxt = Cxt
+-- | Compute the digest of a pure byte source like, `B.ByteString`.
+digest :: PureByteSource src
+       => src  -- ^ Message
+       -> Digest
+digest = unsafePerformIO . digestSource
+{-# INLINEABLE digest #-}
+{-# SPECIALIZE digest :: B.ByteString -> Digest #-}
+{-# SPECIALIZE digest :: L.ByteString -> Digest #-}
+
+-- | Compute the digest of file.
+digestFile :: FilePath  -- ^ File to be digested
+           -> IO Digest
+digestFile fileName = withBinaryFile fileName ReadMode digestSource
+{-# INLINEABLE digestFile #-}
+
+-- | Compute the digest of an arbitrary byte source.
+digestSource :: ByteSource src
+             => src
+             -> IO Digest
+{-# SPECIALIZE digestSource :: B.ByteString -> IO Digest #-}
+{-# SPECIALIZE digestSource :: L.ByteString -> IO Digest #-}
+{-# SPECIALIZE digestSource :: Handle       -> IO Digest #-}
+
+digestSource src = withMemory $ \ mem -> do
+  initialise () mem
+  processByteSource src mem
+  extract mem
+
+-- | Textual name of the digest implementation.
+name :: String
+name = Implementation.name
+
+-- | Description of the implementation
+description :: String
+description = Implementation.description
+
+-- | Prepare the context to (re)start a session of incremental
+-- processing.
+startDigest :: KnownNat n => Cxt n -> IO ()
+startDigest cxt@Cxt{..} = do initialise () cxtInternals
+                             unsafeSetCxtEmpty cxt
+
+
+-- | Add some more data into the context, in this case the entirety of
+-- the byte source src.
+updateDigest :: (KnownNat n, ByteSource src)
+       => src
+       -> Cxt n
+       -> IO ()
+updateDigest = updateCxt
+
+-- | Finalise the context to get hold of the digest.
+finaliseDigest :: KnownNat n
+               => Cxt n
+               -> IO Digest
+finaliseDigest cxt@Cxt{..} = finaliseCxt cxt >> extract cxtInternals
diff --git a/api/encrypt/Implementation.hsig b/api/encrypt/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/api/encrypt/Implementation.hsig
@@ -0,0 +1,36 @@
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE FlexibleContexts            #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+-- | Implementation of stream ciphers. Since encryption/decryption is
+-- done by typically xoring the keystream witht he data, the have two
+-- property.
+--
+-- 1. Using the same key stream can compromise the safety so typically these
+--    primitives take, apart from the key a nounce that needs to be distinct.
+--    It is the key nounce pair that should not be reused.
+--
+-- 2. They usually can rewind/advace/skip input and perform
+--    encryption/decryption.
+--
+
+signature Implementation where
+
+import Raaz.Core
+
+-- | The primitive
+data Prim
+
+-- | The internal memory used by the implementation.
+data Internals
+instance Memory Internals
+
+instance Initialisable Internals (Key Prim)
+instance Initialisable Internals (Nounce Prim)
+instance Initialisable Internals (BlockCount Prim) -- To restore/advance
+                                               -- to a particular
+                                               -- block in the stream
+
+instance Extractable Internals (BlockCount Prim)   -- To query the position
diff --git a/api/encrypt/Interface.hs b/api/encrypt/Interface.hs
new file mode 100644
--- /dev/null
+++ b/api/encrypt/Interface.hs
@@ -0,0 +1,60 @@
+{-# LANGUAGE FlexibleContexts #-}
+
+-- | The interface for a stream cipher. For stream ciphers, both
+-- encrypt and decrypt are same. One of the advantage of stream cipher
+-- is that it allows rewinding/advancing the stream before encrypting
+-- and decryption. This interface also supports such
+-- rewinding/advancing.
+module Interface( Cipher
+                , encrypt
+                , decrypt
+                , encryptAt
+                , decryptAt
+                , name
+                , description
+                ) where
+
+import           Data.ByteString
+import           System.IO.Unsafe ( unsafePerformIO )
+
+import           Raaz.Core
+import           Implementation
+
+import qualified Utils as U
+
+type Cipher = Implementation.Prim
+
+-- | Encrypt using the cipher.
+encrypt :: Key Prim     -- ^ The key for the stream cipher
+        -> Nounce Prim  -- ^ The nounce used by the stream cipher.
+        -> ByteString   -- ^ The bytestring to process
+        -> ByteString
+encrypt key nounce = encryptAt key nounce mempty
+
+-- | Same as encrypt but first advances so many blocks.
+encryptAt :: Key Prim
+          -> Nounce Prim
+          -> BlockCount Prim
+          -> ByteString
+          -> ByteString
+encryptAt key nounce blk bs = unsafePerformIO $ withMemory $ \ mem -> do
+  initialise key mem
+  initialise nounce mem
+  initialise blk mem
+  U.transform bs mem
+
+-- | Same as decrypt but first advance so many blocks.
+decryptAt :: Key Prim
+          -> Nounce Prim
+          -> BlockCount Prim
+          -> ByteString
+          -> ByteString
+decryptAt = encryptAt
+
+-- | Decrypt using the cipher. Since we are concerned with stream
+-- ciphers both encrypt and decrypt are the same.
+decrypt :: Key Prim
+        -> Nounce Prim
+        -> ByteString
+        -> ByteString
+decrypt = encrypt
diff --git a/api/random/Entropy.hsig b/api/random/Entropy.hsig
new file mode 100644
--- /dev/null
+++ b/api/random/Entropy.hsig
@@ -0,0 +1,48 @@
+-- | Cryptographic pseudo-random generators need an entropy source
+-- using which its internal state is initialised at startup or after
+-- some pre-defined amount of random data is generated. This signature
+-- captures the interface for getting randomness from the entropy
+-- pool. The pseudo-random generator exposed from this component can
+-- work with any module that satisfies this signature. Be warned
+-- however that it is really not a good idea to plug in random (pun
+-- unintended) entropy sources.
+--
+-- == Default entropy source
+--
+-- The Entropy module exposed by the @raaz:implementation@ component
+-- is what is used by default by the raaz library. User level
+-- libraries have very little access to actual entropy sources and it
+-- is very difficult to ascertain the quality of the ones that we do
+-- have. Therefore, we believe it is better to rely on the operating
+-- system for the entropy needed for seeding. Given below is the list of our choice
+-- of entropy source.
+--
+-- [OpenBSD/NetBSD:] The arc4random call.
+--
+-- [Linux:] The @getrandom@ system call. For older (< 3.17) kernels
+-- lacking support for this call, you might need to compile raaz with
+-- the `linux-getrandom` disabled.
+--
+-- [Other Posix:] Uses @\/dev\/urandom@
+--
+-- [Windows:] Support using CryptGenRandom from Wincrypt.h.
+--
+-- Be warned that on some (older?) posix systems, the entropy can be
+-- quite low at certain epochs, like at the time of startup. Another
+-- situation when entropy gets compromised is when containers are
+-- replicated. Defending against these however are beyond the scope of
+-- raaz.
+
+signature Entropy where
+
+import Raaz.Core
+
+-- | The name of the source from which entropy is gathered. For
+-- information purposes only. Mainly for information purposes.
+entropySource :: String
+
+
+-- | Read the given amount of random bytes from the entropy pool. Do
+-- not over use this function as it is meant to be used just to seed a
+-- PRG.
+getEntropy :: BYTES Int -> Ptr Word8 -> IO (BYTES Int)
diff --git a/api/random/Implementation.hsig b/api/random/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/api/random/Implementation.hsig
@@ -0,0 +1,72 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE TypeFamilies                #-}
+
+-- | Cryptographically secure pseudo-random generator or CSPRG for
+-- short is typically implemented from a stream cipher by setting its
+-- internals from an entropy source and generating its key stream as
+-- the pseudo-random stream. This signature captures primitives that
+-- can be used in such a fashion.
+--
+-- == Defaults
+--
+-- The raaz:implementation package uses the ChaCha20 cipher to satisfy
+-- this implementation.
+
+signature Implementation ( Prim
+                         , name
+                         , description
+                         , Internals
+                         , BufferAlignment
+                         , RandomBufferSize
+                         , reseedAfter
+                         , randomBlocks
+                         ) where
+
+import Raaz.Core
+
+-- | The primitive.
+data Prim
+instance Primitive Prim
+
+-- | The name of the implementation.
+name :: String
+
+-- | The description of the implementation.
+description :: String
+
+-- | The internal memory. It should be possible to initialise the
+-- contents of the internal memory from a buffer. After generating
+-- some pseudo-random bytes, we use this ability to achieve the /fast
+-- key erasure/ (<https://blog.cr.yp.to/20170723-random.html>). This
+-- design ensure that revealing the current state does not compromise
+-- the pseudo-random bytes generated in the past.
+data Internals
+instance Memory Internals
+instance WriteAccessible Internals
+
+-- | The alignment required for buffer (hack around bug
+-- https://ghc.haskell.org/trac/ghc/ticket/15138)
+type BufferAlignment = 32
+
+-- | The number of blocks of the cipher that is generated in one go
+-- encoded as a type level nat.
+type RandomBufferSize = 16
+
+
+-- | How many blocks of the primitive to generated before re-seeding.
+reseedAfter :: BlockCount Prim
+
+-- | Generate pseudo-random data in multiples of the blocks.  The sole
+-- purpose of this function is to stretch a fixed size seed (the key
+-- of the cipher) to a cryptographically unpredictable stream of
+-- bytes. While, the key stream function of a cipher is a natural
+-- candidate actual implementations might differ for example, by
+-- ignoring the endian considerations. In particular, if deterministic
+-- generation of random bytes across architectures are what is
+-- desired, this function is not suitable.
+randomBlocks :: AlignedBlockPtr BufferAlignment Prim
+             -> BlockCount Prim
+             -> Internals
+             -> IO ()
diff --git a/api/random/Internal.hs b/api/random/Internal.hs
new file mode 100644
--- /dev/null
+++ b/api/random/Internal.hs
@@ -0,0 +1,21 @@
+-- | Some internal functions exposed by raaz mainly for testing
+-- purposes. The functions here are pretty low level and/or expose to
+-- much of the system details. If you find your self needing some of
+-- the functions here, it should be treated as a bug in raaz. Please
+-- file an issue.
+module Internal
+      ( fillSystemEntropy
+      ) where
+
+import Raaz.Core
+import Entropy
+
+-- | __WARNING__ Never use this function directly. Only exposed for
+-- testing the quality of system entropy. Fill the given input buffer
+-- with from the system entropy pool. This is provided only to test
+-- the quality of the system entropy function with systems like
+-- die-harder. The function is going to be less safe (due to the low
+-- level nature of the function) and slower (due to system call
+-- overheads).
+fillSystemEntropy :: LengthUnit l => l -> Ptr Word8 -> IO (BYTES Int)
+fillSystemEntropy = getEntropy . inBytes
diff --git a/api/random/PRGenerator.hs b/api/random/PRGenerator.hs
new file mode 100644
--- /dev/null
+++ b/api/random/PRGenerator.hs
@@ -0,0 +1,197 @@
+-- | This module implements the pseudo-random generator using the
+-- /fast key erasure technique/
+-- (<https://blog.cr.yp.to/20170723-random.html>) parameterised on the
+-- signatures "Implementation" and "Entropy". This technique is the
+-- underlying algorithm used in systems like OpenBSD in their
+-- implementation of arc4random.
+--
+-- __WARNING:__ These details are only for developers and reviewers of
+-- raaz the library. A casual user should not be looking into this
+-- module this let alone tweaking the code here.
+--
+
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE DataKinds        #-}
+{-# LANGUAGE RecordWildCards   #-}
+-- {-# LANGUAGE NamedFieldPun    #-}
+
+module PRGenerator
+       ( -- * Pseudo-random generator
+         -- $internals$
+         RandomState, reseed, fillRandomBytes
+         -- ** Information about the cryptographic generator.
+       , entropySource, csprgName, csprgDescription
+       ) where
+
+import Foreign.Ptr ( castPtr )
+import Entropy
+import Prelude
+
+import Raaz.Core
+import Raaz.Core.Memory
+
+import Implementation
+import Context
+
+-- $internals$
+--
+-- Generating unpredictable stream of bytes is one task that has burnt
+-- the fingers of a lot of programmers. Unfortunately, getting it
+-- correct is something of a black art. We give the internal details
+-- of the cryptographic pseudo-random generator used in raaz. Note
+-- that none of the details here are accessible or tuneable by the
+-- user. This is a deliberate design choice to insulate the user from
+-- things that are pretty easy to mess up.
+--
+-- The pseudo-random generator is essentially a primitive that
+-- supports the generation of multiple blocks of data once its
+-- internals are set. The overall idea is to set the internals from a
+-- truly random source and then use the primitive to expand the
+-- internal state into pseudo-random bytes. However, there are tricky
+-- issues regarding forward security that will make such a simplistic
+-- algorithm insecure. Besides, where do we get our truly random seed
+-- to begin the process?
+--
+-- We more or less follow the /fast key erasure technique/
+-- (<https://blog.cr.yp.to/20170723-random.html>) which is used in the
+-- arc4random implementation in OpenBSD.  The two main steps in the
+-- generation of the required random bytes are the following:
+--
+-- [Seeding:] Setting the internal state of a primitive. We use the
+-- `getEntropy` function for this purposes.
+--
+-- [Sampling:] Pre-computing a few blocks using `randomBlocks` that
+-- will later on be used to satisfy satisfy the requests for random
+-- bytes.
+--
+-- Instead of running the `randomBlocks` for every request, we
+-- generate `RandomBufferSize` blocks of random blocks in an auxiliary
+-- buffer and satisfy requests for random bytes from this buffer. To
+-- ensure that the compromise of the PRG state does not compromise the
+-- random data already generated and given out, we do the following.
+--
+-- 1. After generating `RandomBufferSize` blocks of data in the
+--    auxiliary buffer, we immediately re-initialise the internals of
+--    the primitive from the auxiliary buffer. This ensures that there
+--    is no way to know which internal state was used to generate the
+--    current contents in the auxiliary buffer.
+--
+-- 2. Every use of data from the auxiliary buffer, whether it is to
+--    satisfy a request for random bytes or to reinitialise the
+--    internals in step 1 is wiped out immediately.
+--
+-- Assuming the security of the entropy source given by the
+-- `getEntropy` and the random block generator given by the
+-- `randomBlocks` we have the following security guarantee.
+--
+-- [Security Guarantee:] At any point of time, a compromise of the
+-- cipher state (i.e. key iv pair) and/or the auxiliary buffer does
+-- not reveal the random data that is given out previously.
+--
+
+
+-- | Name of the csprg used for stretching the seed.
+csprgName :: String
+csprgName = name
+
+-- | A short description of the csprg.
+csprgDescription :: String
+csprgDescription = description
+
+-- | Memory for storing the csprg state.
+data RandomState = RandomState { randomCxt       :: Cxt RandomBufferSize
+                               , randomGenBlocks :: MemoryCell (BlockCount Prim)
+                               }
+
+
+instance Memory RandomState where
+  memoryAlloc     = RandomState <$> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . randomCxt
+
+-- | Gives access into the internals of the associated cipher.
+instance WriteAccessible RandomState where
+  writeAccess          = writeAccess . cxtInternals . randomCxt
+  afterWriteAdjustment = afterWriteAdjustment . cxtInternals . randomCxt
+
+-------------------------------- The PRG operations ---------------------------------------------
+
+-- | Generate a new sample, i.e. fill the context with psrg.
+sample :: RandomState -> IO ()
+sample rstate@RandomState{..} = do
+  genBlocks <- extract randomGenBlocks
+  if genBlocks >= reseedAfter then reseed rstate
+    else generateRandom rstate
+
+-- | Reseed the state from the system entropy pool. The CSPRG
+-- interface automatically takes care of reseeding from the entropy
+-- pool at regular intervals and the user almost never needs to use
+-- this.
+reseed :: RandomState -> IO ()
+reseed rstate@RandomState{..} = do
+  unsafeInitWithEntropy rstate
+  initialise zeroBlocks randomGenBlocks
+  generateRandom rstate
+
+
+-- | Generate random bytes into the context in one go which will then
+-- be slowly released to the outside world. We also keep track of how
+-- much blocks is generated which will be used to check when to reseed
+-- the generator from system entropy.
+generateRandom :: RandomState -> IO ()
+generateRandom rstate@RandomState{..} = do
+  unsafeGenerateBlocks randomBlocks randomCxt
+  modifyMem (mappend $ cxtBlockCount $ pure randomCxt) randomGenBlocks
+  unsafeInitFromBuffer rstate
+
+------------------------------ DANGEROUS ACCESS manipulation ------------------------
+
+--
+-- These are highly unsafe code do not export. All hell breaks loose
+-- otherwise.
+--
+
+-- | Initialise the internals from the entropy source.
+unsafeInitWithEntropy :: RandomState -> IO ()
+unsafeInitWithEntropy = mapM_ initWithEntropy . writeAccess
+  where initWithEntropy Access{..} = getEntropy accessSize accessPtr
+
+-- | Initialise the internals from the already generated blocks. CSPRG
+-- implementations should ensure that the context is large enough to
+-- hold enough bytes so even after initialising the internals, there
+-- is enough data left to give out for subsequent calls. Otherwise
+-- each sampling will result in a infinite loop.
+unsafeInitFromBuffer :: RandomState -> IO ()
+unsafeInitFromBuffer rstate@RandomState{..} = mapM_ initFromBuffer $ writeAccess rstate
+  where initFromBuffer Access{..}
+          = unsafeWriteTo accessSize (destination accessPtr) randomCxt
+
+
+-- | Zero blocks of the primitive
+zeroBlocks :: BlockCount Prim
+zeroBlocks = 0 `blocksOf` Proxy
+
+
+unsafeRandomBytes :: BYTES Int
+                  -> Dest (Ptr Word8)
+                  -> RandomState -> IO ()
+unsafeRandomBytes sz destPtr rstate@RandomState{..}
+  = go sz destPtr
+  where go n ptr
+          | n <= 0 = return ()
+          | otherwise = do trfed <- unsafeWriteTo n ptr randomCxt
+                           let more    = n - trfed
+                               nextPtr = (`movePtr` trfed) <$> ptr
+                             in when (more > 0) $ sample rstate >> go more nextPtr
+
+-- | Fill a buffer pointed by the given pointer with random bytes.
+fillRandomBytes :: (LengthUnit l, Pointer ptr)
+                => l
+                -> Dest (ptr a)
+                -> RandomState
+                -> IO ()
+fillRandomBytes l ptr = unsafeRandomBytes (inBytes l) wptr
+  where wptr = fmap (castPtr . unsafeRawPtr) ptr
+
+instance ByteSource RandomState where
+  fillBytes n rstate ptr
+    = unsafeRandomBytes n (destination (castPtr ptr)) rstate >> return (Remaining rstate)
diff --git a/benchmarks/BenchPrimitives.hs b/benchmarks/BenchPrimitives.hs
deleted file mode 100644
--- a/benchmarks/BenchPrimitives.hs
+++ /dev/null
@@ -1,195 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE FlexibleInstances   #-}
-{-# LANGUAGE CPP                 #-}
-{-# LANGUAGE RecordWildCards     #-}
-
--- | This module benchmarks all block function and shows the
-
-import Control.Monad
-import Criterion
-import Criterion.Types hiding (measure)
-import Criterion.Measurement
-import Data.Int
-import Data.List              (span)
-import Text.PrettyPrint
-import System.IO
-
-import Raaz.Core
-import Raaz.Cipher
-import Raaz.Cipher.Internal
-import Raaz.Hash.Internal
-import Raaz.Random
-
-import qualified Raaz.Hash.Blake2.Implementation.CPortable    as Blake2CP
-import qualified Raaz.Hash.Sha1.Implementation.CPortable      as Sha1CP
-import qualified Raaz.Hash.Sha256.Implementation.CPortable    as Sha256CP
-import qualified Raaz.Hash.Sha512.Implementation.CPortable    as Sha512CP
-import qualified Raaz.Cipher.AES.CBC.Implementation.CPortable as AesCbcCP
-import qualified Raaz.Cipher.ChaCha20.Implementation.CPortable as ChaCha20CP
-
-# ifdef HAVE_VECTOR_128
-import qualified Raaz.Cipher.ChaCha20.Implementation.Vector128 as ChaCha20V128
-# endif
-
-# ifdef HAVE_VECTOR_256
-import qualified Raaz.Cipher.ChaCha20.Implementation.Vector256 as ChaCha20V256
-# endif
-
-
-#if !MIN_VERSION_criterion(1,2,0)
-toBenchmarkable :: (Int64 -> IO ()) -> Benchmarkable
-toBenchmarkable = Benchmarkable
-#endif
-
-#if MIN_VERSION_base(4,11,0)
-import Prelude hiding ((<>))
-#endif
-
--- The total data processed
-nBytes :: BYTES Int
-nBytes = 32 * 1024
-
--- How many times to run each benchmark
-nRuns :: Int64
-nRuns = 10000
-
-type Result            = (String, Measured)
-type RaazBench         = (String, Benchmarkable)
-
-allBench :: [RaazBench]
-allBench =    [ memsetBench, randomnessBench ]
-           ++ chacha20Benchs
-           ++ aesBenchs
-           ++ blake2Benchs
-           ++ sha1Benchs
-           ++ sha256Benchs
-           ++ sha512Benchs
-
-main :: IO ()
-main = do putStrLn $ "Buffer Size = " ++ show (fromIntegral nBytes :: Int)
-          putStrLn $ "Iterations  = " ++ show nRuns
-          mapM_ runRaazBench allBench
-
-
-pprMeasured :: Measured -> Doc
-pprMeasured (Measured{..}) = vcat
-  [ text "time       " <+> eq <+> text (secs tm)
-  , text "cycles     " <+> eq <+> double cy
-  , text "rate       " <+> eq <+> text rt   <> text "bps"
-  , text "secs/byte  " <+> eq <+> text secB <> text "sec/byte"
-  , text "cycles/byte" <+> eq <+> double cycB
-  ]
-  where tm    = measTime   / fromIntegral nRuns
-        cy    = fromIntegral measCycles / fromIntegral nRuns
-        bytes = fromIntegral nBytes
-        secB  = humanise $ tm / bytes
-        cycB  = cy    / bytes
-        rt    = humanise $ 8 * bytes / tm
-        eq    = text "="
-
-
--------------  All benchmarks ---------------------------------------------
-
-memsetBench :: RaazBench
-memsetBench = ("memset", toBenchmarkable $ memBench . fromIntegral )
-  where memBench count = allocaBuffer nBytes $ \ ptr -> replicateM_ count (memset ptr 42 nBytes)
-
-
-sha1Benchs :: [ RaazBench ]
-sha1Benchs = [ hashBench Sha1CP.implementation ]
-
-sha256Benchs :: [ RaazBench ]
-sha256Benchs = [ hashBench Sha256CP.implementation ]
-
-sha512Benchs :: [ RaazBench ]
-sha512Benchs = [ hashBench Sha512CP.implementation ]
-
-blake2Benchs :: [ RaazBench ]
-blake2Benchs = [ hashBench Blake2CP.implementation2b
-               , hashBench Blake2CP.implementation2s
-               ]
-
-aesBenchs     :: [ RaazBench ]
-aesBenchs      = [ encryptBench AesCbcCP.aes128cbcI
-                 , decryptBench AesCbcCP.aes128cbcI
-                 , encryptBench AesCbcCP.aes192cbcI
-                 , decryptBench AesCbcCP.aes192cbcI
-                 , encryptBench AesCbcCP.aes256cbcI
-                 , decryptBench AesCbcCP.aes256cbcI
-                 ]
-chacha20Benchs :: [ RaazBench ]
-chacha20Benchs = [ encryptBench ChaCha20CP.implementation
-#               ifdef HAVE_VECTOR_256
-                , encryptBench ChaCha20V256.implementation
-#               endif
-#               ifdef HAVE_VECTOR_128
-                , encryptBench ChaCha20V128.implementation
-#               endif
-                ]
-
-
---------------------------- Helper functions ---------------------------------------------------------------------------
-
-encryptBench :: Cipher c => Implementation c -> RaazBench
-encryptBench si@(SomeCipherI impl) = (nm , toBenchmarkable $ encrBench . fromIntegral)
-  where encrBench count = allocBufferFor si sz $ \ ptr -> insecurely $ replicateM_ count $ encryptBlocks impl ptr sz
-        nm = name si ++ "-encrypt"
-        sz = atLeast nBytes
-
-
-decryptBench :: Cipher c => Implementation c -> RaazBench
-decryptBench si@(SomeCipherI impl) = (nm , toBenchmarkable $ decrBench . fromIntegral)
-  where decrBench count = allocBufferFor si sz $ \ ptr -> insecurely $ replicateM_ count $ decryptBlocks impl ptr sz
-        nm = name si ++ "-decrypt"
-        sz = atLeast nBytes
-
-hashBench :: Hash h => Implementation h -> RaazBench
-hashBench hi@(SomeHashI impl) = (nm, toBenchmarkable $ compressBench . fromIntegral )
-  where compressBench count = allocBufferFor hi sz $ \ ptr -> insecurely $ replicateM_ count $ compress impl ptr sz
-        nm = name hi ++ "-compress"
-        sz = atLeast nBytes
-
-randomnessBench :: RaazBench
-randomnessBench = ("random", toBenchmarkable $ rand . fromIntegral)
-  where rand count = allocaBuffer nBytes $ insecurely . replicateM_ count . fillIt
-        fillIt :: Pointer -> RandM ()
-        fillIt = fillRandomBytes nBytes
-
-runRaazBench :: RaazBench -> IO ()
-runRaazBench (nm, bm) = do
-  (memt,x) <- measure bm nRuns
-  putStrLn $ render $ text nm $+$ nest 8 (pprMeasured memt)
-  hFlush stdout
-
--------------------------- Humanise output -----------------------------------
-
-humanise :: Double -> String
-humanise u | u < 1     = goL 0 u
-           | otherwise = goU 0 u
-  where goL e x | x > 1 || e == -3  = restrictDecimals 2  x ++ unitPrefix e
-                | otherwise         = goL (e  - 1) (x * 1000)
-
-        goU e x | x < 100 || e == 5 = restrictDecimals 2 x  ++ unitPrefix e
-                | otherwise         = goU (e  + 1) (x / 1000)
-
-
-
-restrictDecimals :: Int -> Double -> String
-restrictDecimals n x = u ++ take (n+1) v
-  where (u,v) = span (/= '.') $ show x
-
-
--- | @prefix n@ gives proper prefix every 10^{3n} exponent
-unitPrefix :: Int -> String
-unitPrefix ex
-  | ex <  -3   = error "exponent too small name"
-  | ex == -3   = "n"
-  | ex == -2   = "μ"
-  | ex == -1   = "m"
-  | ex == 0    = ""
-  | ex == 1    = "K"
-  | ex == 2    = "M"
-  | ex == 3    = "G"
-  | ex == 4    = "T"
-  | ex == 5    = "P"
-  | otherwise  = error "exponent to large to name"
diff --git a/benchmarks/BlazeVsWrite.hs b/benchmarks/BlazeVsWrite.hs
deleted file mode 100644
--- a/benchmarks/BlazeVsWrite.hs
+++ /dev/null
@@ -1,62 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE FlexibleInstances   #-}
-import           Control.Monad
-import           Criterion
-import           Criterion.Main
-import qualified Blaze.ByteString.Builder                as BB
-import qualified Blaze.ByteString.Builder.Internal.Write as BB
-
-import           Data.ByteString                         ( ByteString )
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Lazy as LBS
-import           Data.Monoid
-import           Data.Word
-import           Foreign.Ptr (castPtr)
-
-import           Raaz.Core.Types
-import qualified Raaz.Core.Transfer  as RW
-import qualified Raaz.Core.Encode as E
-
--- Why 4000 entries. The result size is roughly 32k which is the L1 cache
--- size. 4 * 8 bytes * 1 kilo
-maxVal :: Num n => n
-maxVal = 40000
-
-ws :: [Word]
-ws = [1..maxVal]
-
-w64s :: [Word64]
-w64s = [1..maxVal]
-
-le64s :: [LE Word64]
-le64s = [1..maxVal]
-
-be64s :: [BE Word64]
-be64s = [1..maxVal]
-
-main :: IO ()
-main = defaultMain
-         [ bgroup "Words"
-           [ bench "blaze/write"
-             $ nf (blazeWrite BB.writeStorable) ws
-           , bench "write"
-             $ nf (raazWrite RW.writeStorable)  ws
-           ]
-         , bgroup "LE64s"
-           [ bench "blaze/write"
-             $ nf (blazeWrite BB.writeWord64le) w64s
-           , bench "write"
-             $ nf (raazWrite RW.write)          le64s
-           ]
-         , bgroup "BE64s"
-           [ bench "blaze/write"
-             $ nf (blazeWrite BB.writeWord64be) w64s
-           , bench "write"
-             $ nf (raazWrite RW.write)          be64s
-           ]
-         ]
-blazeWrite :: (a -> BB.Write)   -> [a] -> ByteString
-blazeWrite fn = BB.writeToByteString . mconcat . map fn
-
-raazWrite  :: (a -> RW.WriteIO) -> [a] -> ByteString
-raazWrite fn = E.toByteString . mconcat . map fn
diff --git a/benchmarks/Cipher.hs b/benchmarks/Cipher.hs
deleted file mode 100644
--- a/benchmarks/Cipher.hs
+++ /dev/null
@@ -1,79 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE FlexibleInstances   #-}
-{-# LANGUAGE CPP                 #-}
-import           Control.Monad
-import           Criterion
-import           Criterion.Main
-import           Criterion.Types
-import           Foreign.Marshal.Alloc
-
-import           Raaz.Core
-import           Raaz.Cipher
-import           Raaz.Cipher.Internal
-import qualified Raaz.Cipher.ChaCha20.Implementation.CPortable as CPortable
-# ifdef HAVE_VECTOR_128
-import qualified Raaz.Cipher.ChaCha20.Implementation.Vector128 as Vector128
-# endif
-
-# ifdef HAVE_VECTOR_256
-import qualified Raaz.Cipher.ChaCha20.Implementation.Vector256 as Vector256
-# endif
-
--- | Buffer size used
-bufSize :: BYTES Int
-bufSize = 32 * 1024
-
-
-main :: IO ()
-main = defaultMain [ chacha20Bench, aesBench ]
-
-
------------------ Benchmarks of individual ciphers. ------------------------
-aesBench :: Benchmark
-aesBench = bgroup "AES"
-           [ benchCipher aes128cbc
-           , benchCipher aes192cbc
-           , benchCipher aes256cbc
-           ]
-
-chacha20Bench :: Benchmark
-chacha20Bench = bgroup "ChaCha20"
-                [ benchEncrypt' chacha20 CPortable.implementation
-#               ifdef HAVE_VECTOR_128
-                , benchEncrypt' chacha20 Vector128.implementation
-#               endif
-#               ifdef HAVE_VECTOR_256
-                , benchEncrypt' chacha20 Vector256.implementation
-#               endif
-                ]
-
-
------------------- Low level functions ---------------------------------------
-benchCipher :: (Cipher c, Recommendation c) => c  -> Benchmark
-benchCipher c = bgroup (name c) [benchEncrypt c, benchDecrypt c]
-
-benchEncrypt :: (Cipher c, Recommendation c) => c -> Benchmark
-benchEncrypt c = benchEncrypt' c $ recommended c
-
-benchDecrypt  :: (Cipher c, Recommendation c) => c -> Benchmark
-benchDecrypt c = benchDecrypt' c $ recommended c
-
-
-benchEncrypt' :: Cipher c => c -> Implementation c -> Benchmark
-benchEncrypt' c si@(SomeCipherI imp) = bench nm $ nfIO go
-  where go = allocBufferFor si sz $ \ ptr -> insecurely $ encryptBlocks imp ptr sz
-        sz = atMost bufSize
-        nm = "encrypt" ++ name si
-
-benchDecrypt' :: Cipher c => c -> Implementation c -> Benchmark
-benchDecrypt' c si@(SomeCipherI imp) = bench nm $ nfIO go
-  where go = allocBufferFor si sz $ \ ptr -> insecurely $ decryptBlocks imp ptr sz
-        sz = atMost bufSize
-        nm = "decrypt" ++ name si
-
-{--
--- | Compare ciphers with a plain memset.
-benchMemSet :: Benchmark
-benchMemSet = bench "memset" $ nfIO go
-  where go = allocaBuffer bufSize $ \ ptr -> memset ptr 0 bufSize
---}
diff --git a/benchmarks/Main.hs b/benchmarks/Main.hs
new file mode 100644
--- /dev/null
+++ b/benchmarks/Main.hs
@@ -0,0 +1,52 @@
+-- | This module benchmarks all block function and shows the
+
+import Control.Monad
+
+import Prelude
+import System.IO
+import Text.PrettyPrint
+
+import           Benchmark.Types
+import qualified Benchmark.Blake2b.CPortable     as Blake2bCP
+import qualified Benchmark.Blake2b.CHandWritten  as Blake2bCHW
+
+import qualified Benchmark.Blake2s.CHandWritten  as Blake2sCHW
+
+import qualified Benchmark.ChaCha20.CPortable    as ChaCha20CP
+import qualified Benchmark.ChaCha20.CHandWritten as ChaCha20CHW
+
+import qualified Benchmark.Poly1305.CPortable    as Poly1305CP
+
+import qualified Benchmark.Sha256.CPortable      as Sha256CP
+import qualified Benchmark.Sha256.CHandWritten   as Sha256CHW
+
+import qualified Benchmark.Sha512.CPortable      as Sha512CP
+import qualified Benchmark.Sha512.CHandWritten   as Sha512CHW
+
+import qualified Benchmark.CSPRG.CPortable       as CSPRGCP
+
+
+main :: IO ()
+main = do
+  hSetEncoding stdout utf8
+  putStrLn $ render header
+  mapM_ printBench [ Blake2bCP.bench
+                   , Blake2bCHW.bench
+
+                   , Blake2sCHW.bench
+
+                   , Poly1305CP.bench
+
+                   , CSPRGCP.bench
+
+                   , ChaCha20CP.bench
+                   , ChaCha20CHW.bench
+
+                   , Sha256CP.bench
+                   , Sha256CHW.bench
+
+                   , Sha512CP.bench
+                   , Sha512CHW.bench
+                   ]
+
+  where printBench = runRaazBench >=> pure . render >=> putStrLn
diff --git a/benchmarks/internal/Benchmark/CSPRG.hs b/benchmarks/internal/Benchmark/CSPRG.hs
new file mode 100644
--- /dev/null
+++ b/benchmarks/internal/Benchmark/CSPRG.hs
@@ -0,0 +1,24 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE MonoLocalBinds   #-}
+module Benchmark.CSPRG where
+
+import Control.Monad
+import GHC.TypeLits
+
+import Raaz.Core
+import Benchmark.Types
+import Buffer
+import Implementation
+
+
+-- | Number of blocks.
+nblocks :: BlockCount Prim
+nblocks = atLeast nBytes
+
+allocAndRun  :: (BufferPtr -> IO ()) -> IO ()
+allocAndRun  = allocaBuffer (nblocks <> additionalBlocks)
+
+bench :: KnownNat BufferAlignment => RaazBench
+bench = (name, toBenchmarkable $ action . fromIntegral)
+  where action count = allocAndRun $ doit count
+        doit count ptr = withMemory $ \ mem -> replicateM_ count (randomBlocks ptr nblocks mem)
diff --git a/benchmarks/internal/Benchmark/Primitive.hs b/benchmarks/internal/Benchmark/Primitive.hs
new file mode 100644
--- /dev/null
+++ b/benchmarks/internal/Benchmark/Primitive.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE MonoLocalBinds   #-}
+module Benchmark.Primitive where
+
+import Control.Monad
+import GHC.TypeLits
+
+import Raaz.Core
+import Implementation
+import Benchmark.Types
+
+-- | Number of blocks.
+nblocks :: BlockCount Prim
+nblocks = atLeast nBytes
+
+allocAndRun  :: (BufferPtr -> IO ()) -> IO ()
+allocAndRun  = allocaBuffer (nblocks <> additionalBlocks)
+
+bench :: KnownNat BufferAlignment => RaazBench
+bench = (nm, toBenchmarkable $ action . fromIntegral)
+  where action count = allocAndRun $ doit count
+        nm = name
+        doit count ptr = withMemory $ \ mem -> replicateM_ count (processBlocks ptr nblocks mem)
diff --git a/benchmarks/internal/Benchmark/Types.hs b/benchmarks/internal/Benchmark/Types.hs
new file mode 100644
--- /dev/null
+++ b/benchmarks/internal/Benchmark/Types.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE RecordWildCards #-}
+
+module Benchmark.Types
+       ( RaazBench
+       , toBenchmarkable
+       , nBytes
+       , nRuns
+       , runRaazBench
+       , header
+       ) where
+
+import Criterion.Measurement
+import Criterion.Measurement.Types hiding (measure)
+
+import Data.Int
+import Text.PrettyPrint
+
+import Raaz.Core
+
+-- | The total data processed in each benchmark.
+nBytes :: BYTES Int
+nBytes = 32 * 1024
+
+-- | How many times to run each benchmark
+nRuns :: Int64
+nRuns = 10000
+
+type RaazBench         = (String, Benchmarkable)
+
+header :: Doc
+header = hsep $ punctuate comma $ map text
+         [ "Implementation"
+         , "time"
+         , "cycles"
+         , "rate (bits/sec)"
+         , "time/byte"
+         , "cycles/byte"
+         ]
+
+-- | Execute a benchmark and writeout the results.
+runRaazBench :: RaazBench -> IO Doc
+runRaazBench (nm, bm) = do
+  (memt,_) <- measure bm nRuns
+  return $ hsep $ punctuate comma $ text nm : pprMeasured memt
+
+
+------------------------ Helper functions ------------------------
+
+
+pprMeasured :: Measured -> [Doc]
+pprMeasured Measured{..} =
+  [ text (secs tm)          -- time
+  , text (humanise cy)      -- cycles
+  , text rt                 -- rate
+  , text secB               -- secs/byte
+  , text (humanise cycB)    -- cycles/byte
+  ]
+  where tm    = measTime   / fromIntegral nRuns
+        cy    = fromIntegral measCycles / fromIntegral nRuns
+        bytes = fromIntegral nBytes
+        secB  = humanise (tm / bytes) ++ "s"
+        cycB  = cy    / bytes
+        rt    = humanise $ 8 * bytes / tm
+
+
+-- | Humanise the output units.
+humanise :: Double -> String
+humanise u | u < 1     = goL 0 u
+           | otherwise = goU 0 u
+  where goL e x | x > 1 || e == -3  = restrictDecimals 2  x ++ unitPrefix e
+                | otherwise         = goL (e  - 1) (x * 1000)
+
+        goU e x | x < 100 || e == 5 = restrictDecimals 2 x  ++ unitPrefix e
+                | otherwise         = goU (e  + 1) (x / 1000)
+
+
+restrictDecimals :: Int -> Double -> String
+restrictDecimals n x = u ++ take (n+1) v
+  where (u,v) = span (/= '.') $ show x
+
+
+-- | @Unit prefix n@ gives proper prefix every 10^{3n} exponent
+unitPrefix :: Int -> String
+unitPrefix ex
+  | ex <  -3   = error "exponent too small name"
+  | ex == -3   = "n"
+  | ex == -2   = "µ"
+  | ex == -1   = "m"
+  | ex == 0    = ""
+  | ex == 1    = "K"
+  | ex == 2    = "M"
+  | ex == 3    = "G"
+  | ex == 4    = "T"
+  | ex == 5    = "P"
+  | otherwise  = error "exponent to large to name"
diff --git a/bin/Command/Checksum.hs b/bin/Command/Checksum.hs
deleted file mode 100644
--- a/bin/Command/Checksum.hs
+++ /dev/null
@@ -1,189 +0,0 @@
-{-# LANGUAGE GADTs              #-}
-{-# LANGUAGE RankNTypes         #-}
-{-# LANGUAGE RecordWildCards    #-}
-{-# LANGUAGE ConstraintKinds    #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# LANGUAGE CPP                #-}
-
-module Command.Checksum ( checksum )  where
-
-import Control.Monad
-import Data.Char                ( toLower )
-import Data.Monoid
-import Data.String
-import Options.Applicative
-import Raaz
-import System.Exit
-import System.IO
-
-
-------------------------- Supported checksum algorithm -------------------------------
-
--- You can add new hash algorithms by adding a constructor for the
--- GADT, Algorithm h. You should also enable the command by adding a mkCmd line in the checksum
-
-
-checksum :: Parser (IO ())
-#if MIN_VERSION_optparse_applicative(0,13,0)
-checksum = subparser $ commandGroup "Checksum Computation"
-#else
-checksum = subparser $ mempty
-#endif
-           <> mkCmd Blake2b
-           <> mkCmd Blake2s
-           <> mkCmd Sha512
-           <> mkCmd Sha256
-           -- Add the mkCmd here and also add an appropriate
-           -- constructor for the Algorithm type. If you add a hash
-           -- Foo then the associated command will be foosum.
-
--- | The hash algorithm to use.
-data Algorithm h  where
-  Blake2b  :: Algorithm BLAKE2b
-  Blake2s  :: Algorithm BLAKE2s
-  Sha256   :: Algorithm SHA256
-  Sha512   :: Algorithm SHA512
-  -- Add new hash algorithm here.
-
-
-deriving instance Show (Algorithm h)
-           -- Add a mkCmd here for the new hash algorithm
-
-mkCmd :: Digest h => Algorithm h -> Mod CommandFields (IO ())
-mkCmd algo = command cmd inf
-  where inf = info (helper <*> opts) $ fullDesc <> hdr <> desc
-        opts     = run algo <$> optParse
-        algoname = map toLower $ show algo
-        cmd      = algoname ++ "sum"
-        hdr      = header $ unwords [ "raaz", cmd, "- File checksums using", algoname]
-        desc     = progDesc $ "Compute or verify the file checksums using " ++ algoname
-
-
------------------------- Types and constriants -------------------------------------
-
-
--- | This constraint class consolidates the constraints on the checksum algorithms.
-type Digest h = (Hash h, Recommendation h, Show h, IsString h)
-
-
-
-data Option = Option { checkDigest   :: Bool -- ^ true if we need verification.
-                     , reportOkey    :: Bool -- ^ whether to print success
-                     , reportFailure :: Bool -- ^ whether to print failure
-                     , inputFiles    :: [FilePath]
-                     }
-
---------------------- The checksum type ----------------------------------------
-
-data Checksum h  = Checksum {filePath :: FilePath, fileDigest  :: h}
-
-
-instance Show h => Show (Checksum h) where
-  show (Checksum{..}) = show fileDigest ++ "  " ++ filePath
-
-parse :: Digest h => Algorithm h -> String -> Checksum h
-parse algo inp = Checksum { filePath   = drop 2 rest
-                          , fileDigest = parseDigest algo digest
-                          }
-  where parseDigest    :: Digest h => Algorithm h -> String -> h
-        parseDigest _  = fromString
-        (digest, rest) = break (==' ') inp -- break at the space.
-
--- | Parse the lines into checksum.
-parseMany :: Digest h => Algorithm h -> String -> [Checksum h]
-parseMany algo = map (parse algo) . lines
-
----------- The main combinators that does the actual work -------------
-
--- | The workhorse for this command.
-run :: Digest h => Algorithm h -> Option -> IO ()
-run algo opt@(Option{..})
-  | checkDigest = runVerify algo opt
-  | otherwise   = runCompute algo inputFiles
-
-
---------------------------- Compute mode ---------------------------------------
-
-runCompute :: Digest h
-           => Algorithm h    -- Algorithm to use
-           -> [FilePath]     -- files for which checksums need to be computed.
-           -> IO ()
-runCompute algo files
-  | null files = computeStdin algo >>= print  -- No files means compute it for stdin.
-  | otherwise  = mapM_ printToken files       -- Print the token for each file.
-  where printToken = compute algo >=> print
-
-
-
--- | Compute the checksum of a file.
-compute :: Digest h
-        => Algorithm h  -- ^ The hashing algorithm to use.
-        -> FilePath     -- ^ The file to compute the token for.
-        -> IO (Checksum h)
-compute _ fp = Checksum fp <$> hashFile fp
-
-
--- | Compute the checksum of standard input
-computeStdin :: Digest h => Algorithm h -> IO (Checksum h)
-computeStdin _ = Checksum "-" <$> hashSource stdin
-
------------------------------------ Verify Mode ---------------------------------------
-
-runVerify :: Digest h => Algorithm h -> Option -> IO ()
-runVerify algo opt@(Option{..}) = do
-  nFails <- if null inputFiles then getContents >>= verifyLines
-            else sum <$> mapM verifyFile inputFiles
-
-  when reportFailure $ putStrLn $ show nFails ++ " failures."
-  when (nFails > 0)  exitFailure
-  where
-    verifyLines     = verifyList opt . parseMany algo
-    verifyFile fp   = withFile fp ReadMode $ hGetContents  >=> verifyLines
-
-
-verify :: Digest h
-       => Option
-       -> Checksum  h
-       -> IO Bool
-verify (Option{..}) (Checksum{..}) = do
-  digest <- hashFile filePath
-  let result = digest == fileDigest
-      okey   = when reportOkey    $ putStrLn $ filePath ++ ": OK"
-      failed = when reportFailure $ putStrLn $ filePath ++ ": FAILED"
-    in do if result then okey else failed
-          return result
-
-verifyList :: Digest h
-           => Option
-           -> [Checksum h]
-           -> IO Int
-verifyList opt   = fmap countFailures . mapM (verify opt)
-  where countFailures = Prelude.length . filter not
-
-
------------------------------ Option parsers ----------------------------------
-
-optParse   :: Parser Option
-optParse  =  verbosityOpt <*> (Option <$> checkOpt <*> pure True <*> pure True <*> files)
-
-  where checkOpt = switch
-                   $  long "check"
-                   <> short 'c'
-                   <> help "Verify the input checksums instead of compute"
-        files = many $ argument str $ metavar "FILE.."
-
-
-verbosityOpt :: Parser (Option -> Option)
-verbosityOpt = (.) <$> statusOpt <*> quietOpt
-  where statusOnly opt = opt { reportOkey = False, reportFailure = False }
-        quietMode  opt = opt { reportOkey = False }
-
-        statusOpt = flag id statusOnly
-                    $  short 's'
-                    <> long  "status"
-                    <> help "Do not print anything, only return the verification status"
-
-        quietOpt  = flag id quietMode
-                    $  short 'q'
-                    <> long "quite"
-                    <> help "Do not print OK, print only failures"
diff --git a/bin/Command/CpuInfo.hs b/bin/Command/CpuInfo.hs
deleted file mode 100644
--- a/bin/Command/CpuInfo.hs
+++ /dev/null
@@ -1,32 +0,0 @@
-{-# LANGUAGE CPP #-}
-module Command.CpuInfo where
-
-import Data.Monoid
-import Options.Applicative
-
-import Raaz.Core.CpuSupports as CpuSupports
-
-display :: (Bool, String) -> String
-display (True, cap) = unwords ["+", cap]
-display (_,cap)     = unwords ["-", cap]
-
-cpuInfo :: Parser (IO ())
-
-
-#if MIN_VERSION_optparse_applicative(0,13,0)
-cpuInfo = subparser $ commandGroup "CPU capabilities" <> cpuInfoCmd <> metavar "cpuinfo"
-#else
-cpuInfo = subparser $ cpuInfoCmd <> metavar "cpuinfo"
-#endif
-  where cpuInfoCmd = command "cpuinfo" $ info (helper <*> opts) $ fullDesc
-                     <> header "raaz cpuinfo - CPU capabilities detected at runtime."
-                     <> progDesc "Shows the capabilities understood/detected by raaz at runtime. Recommended implementations depend on this."
-
-        opts = pure $ mapM_ (putStrLn . display) [ (CpuSupports.sse, "sse")
-                                                 , (CpuSupports.sse2, "sse2")
-                                                 , (CpuSupports.sse3, "sse3")
-                                                 , (CpuSupports.sse4_1, "sse4.1")
-                                                 , (CpuSupports.sse4_2, "sse4.2")
-                                                 , (CpuSupports.avx,    "avx")
-                                                 , (CpuSupports.avx2,   "avx2")
-                                                 ]
diff --git a/bin/Command/Rand.lhs b/bin/Command/Rand.lhs
deleted file mode 100644
--- a/bin/Command/Rand.lhs
+++ /dev/null
@@ -1,65 +0,0 @@
-This command spits out never ending stream of cryptographically secure
-bytes. Apart from replacing Yo-Yo Honey Singh (`raaz rand >
-/dev/audio), it is used to test the quality of the randomnes produced.
-
-
-> {-# LANGUAGE CPP #-}
-> module Command.Rand ( rand ) where
-
-> import Control.Applicative
-> import Control.Monad.IO.Class(liftIO)
-> import Data.Monoid
-> import Options.Applicative
-> import Raaz
-> import System.IO
-
-So much bytes generated in one go before writing to stdout.
-
-> bufSize :: BYTES Int
-> bufSize = 32 * 1024
-
-
-> opts :: Parser (IO ())
-> opts =   nRandomBytes . toEnum <$> argument auto (metavar "NUMBER_OF_BYTES")
->      <|> pure infinteBytes
->   where nRandomBytes n = withBuffer $ insecurely  . genBytes n
->         infinteBytes = withBuffer $ insecurely  . genInfiniteBytes
->         withBuffer = allocaBuffer bufSize
-
-
-
-
-> rand :: Parser (IO ())
-
-#if MIN_VERSION_optparse_applicative(0,13,0)
-> rand = subparser $ commandGroup "Randomness" <> randCmd <> metavar "rand"
-#else
-> rand = subparser $ randCmd <> metavar "rand"
-#endif
-
->   where randCmd = command "rand" $ info (helper <*> opts) $ fullDesc
->           <> header "raaz rand - Cryptographically secure pseudo random bytes."
->           <> progDesc "Generate cryptographically secure pseudo random bytes onto the stdout."
-
-
-
-
-> genInfiniteBytes :: Pointer -> RandM ()
-> genInfiniteBytes ptr = goForEver
->   where goForEver = emitRand bufSize ptr >> goForEver
-
-
-Generate so many bytes.
-
-> genBytes :: BYTES Int -> Pointer-> RandM ()
-> genBytes n ptr = go n
->   where go m | m >= bufSize = do emitRand bufSize ptr; go (m - bufSize)
->              | otherwise    =    emitRand m ptr
-
-
--- Emit so may random bytes.
-
-> emitRand :: BYTES Int -> Pointer-> RandM ()
-> emitRand m ptr = do
->   fillRandomBytes m ptr
->   liftIO $ hPutBuf stdout ptr $ fromIntegral m
diff --git a/bin/Main.hs b/bin/Main.hs
deleted file mode 100644
--- a/bin/Main.hs
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# LANGUAGE RecordWildCards #-}
---
--- The main function that drives other commands.
---
-
-
-import Data.Version          (showVersion)
-import Data.Monoid
-import Options.Applicative
-import Raaz                  (version)
-
-import           Command.Checksum
-import           Command.CpuInfo
-import           Command.Rand
-
-
-data Option = ShowVersion
-             | RunCommand (IO ())
-
-progOption  :: Parser Option
-progOption = flag ShowVersion ShowVersion versionMods
-             <|> RunCommand <$> rand
-             <|> RunCommand <$> checksum
-             <|> RunCommand <$> cpuInfo
-
-  where versionMods = short 'v'
-                      <> long "version"
-                      <> help "Print the version of the raaz library used"
-
----------------------- The main function and stuff ------------------------------
-run :: Option -> IO ()
-run ShowVersion      = putStrLn $ "raaz version " ++ showVersion version
-run (RunCommand cmd) = cmd
-
-
-main :: IO ()
-main = execParser opts >>= run
-  where opts = info (helper <*> progOption) $
-               fullDesc
-               <> header "raaz - A command line interface to the raaz cryptographic library."
-               <> footer "Homepage: http://github.com/raaz-crypto"
diff --git a/bin/Usage.hs b/bin/Usage.hs
deleted file mode 100644
--- a/bin/Usage.hs
+++ /dev/null
@@ -1,25 +0,0 @@
-module Usage( usage, errorBailout ) where
-
-import System.Console.GetOpt
-import System.IO
-import System.Exit
-
--- | The usage message for the program.
-usage :: [OptDescr a]  -- ^ options
-      -> String        -- ^ Header
-      -> [String]      -- ^ errors
-      -> String
-usage options header errs
-  | null errs = usageInfo header options
-  | otherwise = "raaz: " ++ unlines errs ++ usageInfo header options
-
-
-
--- | Bail out on error
-errorBailout :: [OptDescr a] -- ^ Options
-             -> String       -- ^ Header
-             -> [String]     -- ^ Errors
-             -> IO b
-errorBailout opts str errs = do
-  hPutStrLn stderr $ usage opts str errs
-  exitFailure
diff --git a/cbits/raaz/cipher/aes/common.c b/cbits/raaz/cipher/aes/common.c
deleted file mode 100644
--- a/cbits/raaz/cipher/aes/common.c
+++ /dev/null
@@ -1,135 +0,0 @@
-#include "common.h"
-
-static const Column rcon[] =
-{
-    0x8d000000, 0x01000000, 0x02000000, 0x04000000,
-    0x08000000, 0x10000000, 0x20000000, 0x40000000,
-    0x80000000, 0x1b000000, 0x36000000, 0x6c000000,
-    0xd8000000, 0xab000000
-};
-
-/* Don't ask Don't tell Endianess policy: See header files for
- * details.
- */
-void raazAESExpand(int Nk, Column *eKey)
-{
-    Column temp;
-    int Nr;
-    int i;
-    switch (Nk)
-    {
-	case 4: /* AES 128 */
-	    Nr = 10; break;
-	case 6: /* AES 192 */
-	    Nr = 12; break;
-	case 8: /* AES 256 */
-	    Nr = 14; break;
-    }
-    for(i = Nk; i < (Nr + 1) * 4; ++i)
-    {
-	temp = eKey[i-1];
-	if (i % Nk == 0)
-	{
-	    temp  = SBoxWord(temp);
-	    temp  = RotateL(temp,8);
-	    temp ^= rcon[i/Nk];
-	} else if ( Nk > 6 && (i % Nk == 4) ) { temp = SBoxWord(temp);}
-
-	eKey[i] = eKey[i - Nk ] ^ temp;
-    }
-}
-
-void raazAESTranspose(int n, Matrix *state)
-{
-    register Word w0,w1,w2,w3;
-    int i;
-    for(i = 0; i < n; ++i)
-    {
-	w0 = state[i][0];
-	w1 = state[i][1];
-	w2 = state[i][2];
-	w3 = state[i][3];
-
-	state[i][0] = MkW(B3(w0),B3(w1),B3(w2),B3(w3));
-	state[i][1] = MkW(B2(w0),B2(w1),B2(w2),B2(w3));
-	state[i][2] = MkW(B1(w0),B1(w1),B1(w2),B1(w3));
-	state[i][3] = MkW(B0(w0),B0(w1),B0(w2),B0(w3));
-
-    }
-}
-
-/******************* SBOX and inverse SBOX **************/
-
-const Byte sbox[256] =
-{
-    0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
-    0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
-    0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
-    0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
-    0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
-    0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
-    0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
-    0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
-    0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
-    0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
-    0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
-    0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
-    0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
-    0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
-    0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
-    0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
-    0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
-    0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
-    0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
-    0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
-    0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
-    0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
-    0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
-    0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
-    0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
-    0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
-    0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
-    0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
-    0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
-    0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
-    0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
-    0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-};
-
-/* The actual inverse box array */
-
-const Byte inv_sbox[256] =
-{
-    0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
-    0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
-    0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
-    0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
-    0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
-    0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
-    0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
-    0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
-    0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
-    0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
-    0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
-    0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
-    0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
-    0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
-    0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
-    0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
-    0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
-    0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
-    0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
-    0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
-    0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
-    0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
-    0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
-    0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
-    0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
-    0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
-    0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
-    0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
-    0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
-    0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
-    0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
-    0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
-};
diff --git a/cbits/raaz/cipher/aes/common.h b/cbits/raaz/cipher/aes/common.h
deleted file mode 100644
--- a/cbits/raaz/cipher/aes/common.h
+++ /dev/null
@@ -1,128 +0,0 @@
-#ifndef _RAAZ_AES_COMMON_H_
-#define _RAAZ_AES_COMMON_H_
-#include <stdint.h>
-#include <inttypes.h>
-
-typedef uint8_t Byte;
-typedef Byte    Block[16]; /* The AES block */
-
-/*
-
-Representing the AES block/state as 4 words.
---------------------------------------------
-
-AES state a 4x4 matrix of bytes. This could be represented either as
-4, 32-bit word each of which is a row of the matrix or 4, 32 bit words
-each of which is a column. Although the C-Language will be agnostic to
-our distinction and hence no type safety in this, we use such distinct
-names mainly for documentation purposes
-
-*/
-
-typedef uint32_t Word;       /* A Word used in aes                    */
-typedef Word     Row;        /* A row    of the aes state matrix      */
-typedef Word     Column;     /* A column of the aes state matrix      */
-
-typedef Word   Matrix[4];    /* AES matrix                            */
-typedef Row    RMatrix[4];   /* AES matrix as an array of 4 rows      */
-typedef Column CMatrix[4];   /* AES matrix as an array of 4 columns   */
-
-extern const Byte sbox[256];     /* The AES SBOX as an array          */
-extern const Byte inv_sbox[256]; /* The AES inverse sbox as an array  */
-
-
-/******************** Common functions ********************************/
-/*
-
-Endian assumption: Don't ask, don't tell
-
-All functions should not be bothered about doing endian gymnastics. It
-is assumed that these gymnastics are handled at the haskell level and
-these functions are merely FFI stubs. What this means is the following:
-
-
-It is the callers, in this case the haskell functions duty to ensure a
-function that is expecting a Matrix M in column order, i.e. expecting
-an an argument of type CMatrix, should be fed 4 words such that the
-ith word 0 <= i <= 3 should have M[0][i] as the most significant byte
-followed by M[1][i] as the next significant byte etc.
-
-An easy way to ensure the above is to make the type signature use BE
-Word32 for the columns.
-
-These functions, if they write data out would have this ostrich like
-behaviour towards endianness and it is up to the haskell code to
-compensate.
-
-*/
-
-extern void raazAESTranspose(int n, Matrix *state); /* Transpose all matrices */
-extern void raazAESExpand(int Nk, Column *eKey); /* Key expansion */
-
-
-
-/* Compute the ith  byte of a row */
-#define B0(row) (Byte) (row)
-#define B1(row) (Byte) ((row) >> 8 )
-#define B2(row) (Byte) ((row) >> 16)
-#define B3(row) (Byte) ((row) >> 24)
-
-/* Move the byte to the appropriate offset inside a row */
-#define B0ToR(b) (Row)(b)
-#define B1ToR(b) (B0ToR(b)) << 8
-#define B2ToR(b) (B0ToR(b)) << 16
-#define B3ToR(b) (B0ToR(b)) << 24
-
-/* Make a row out of the bytes given */
-#define MkW(w3,w2,w1,w0) (B0ToR(w0))|(B1ToR(w1))|(B2ToR(w2))|(B3ToR(w3))
-
-/* The SBOX of a word */
-
-#define SB0(r)  sbox[B0(r)]
-#define SB1(r)  sbox[B1(r)]
-#define SB2(r)  sbox[B2(r)]
-#define SB3(r)  sbox[B3(r)]
-
-#define ISB0(r) inv_sbox[B0(r)]
-#define ISB1(r) inv_sbox[B1(r)]
-#define ISB2(r) inv_sbox[B2(r)]
-#define ISB3(r) inv_sbox[B3(r)]
-
-/* Computing the sbox of a row */
-
-#define SBoxWord(r)  (MkW(SB3(r),  SB2(r),  SB1(r),  SB0(r)))
-
-/* With shifts                 */
-#define SBoxWordShift8(r)  (MkW(SB2(r),  SB1(r), SB0(r), SB3(r)))
-#define SBoxWordShift16(r) (MkW(SB1(r),  SB0(r), SB3(r), SB2(r)))
-#define SBoxWordShift24(r) (MkW(SB0(r),  SB3(r), SB2(r), SB1(r)))
-
-#define SubBytesAndShift(r)                     \
-    {                                           \
-    r##0 = SBoxWord(r##0);                      \
-    r##1 = SBoxWordShift8(r##1);                \
-    r##2 = SBoxWordShift16(r##2);               \
-    r##3 = SBoxWordShift24(r##3);               \
-    }
-
-
-#define ISBoxWord(r)        (MkW(ISB3(r), ISB2(r), ISB1(r), ISB0(r)))
-#define ISBoxWordShift8(r)  (MkW(ISB0(r), ISB3(r), ISB2(r), ISB1(r)))
-#define ISBoxWordShift16(r) (MkW(ISB1(r), ISB0(r), ISB3(r), ISB2(r)))
-#define ISBoxWordShift24(r) (MkW(ISB2(r), ISB1(r), ISB0(r), ISB3(r)))
-
-
-#define InvSubBytesAndShift(r)                  \
-    {                                           \
-    r##0 = ISBoxWord(r##0);                     \
-    r##1 = ISBoxWordShift8(r##1);               \
-    r##2 = ISBoxWordShift16(r##2);              \
-    r##3 = ISBoxWordShift24(r##3);              \
-    }
-
-
-
-#define RotateL(r, n) ((r) << n) | ((r) >> (32 - n))
-#define RotateR(r, n) ((r) >> n) | ((r) << (32 - n))
-
-#endif
diff --git a/cbits/raaz/cipher/aes/cportable.c b/cbits/raaz/cipher/aes/cportable.c
deleted file mode 100644
--- a/cbits/raaz/cipher/aes/cportable.c
+++ /dev/null
@@ -1,269 +0,0 @@
-#include "common.h"
-
-#define ShiftLeftBytes(r) ((r << 1) & 0xfefefefe)
-#define CycleBits(r)      ((r >> 7) & 0x01010101)
-#define Mult02(r) ShiftLeftBytes(r) ^ (CycleBits(r) * 0x1b)
-
-
-/* Loading a state */
-
-#define Load(r,in)                                      \
-    {                                                   \
-        r##0 = MkW((in)[0],(in)[4],(in)[8] ,(in)[12]);  \
-        r##1 = MkW((in)[1],(in)[5],(in)[9] ,(in)[13]);  \
-        r##2 = MkW((in)[2],(in)[6],(in)[10],(in)[14]);  \
-        r##3 = MkW((in)[3],(in)[7],(in)[11],(in)[15]);  \
-    }
-
-/* n = r */
-
-#define Copy(n,r)						\
-    { n##0 = r##0; n##1 = r##1; n##2 = r##2; n##3 = r##3; }
-
-/* n ^= r */
-
-#define XOR(n,r)						\
-	{ n##0 ^= r##0; n##1 ^= r##1; n##2 ^= r##2; n##3 ^= r##3; }
-
-#define Store(r,out)              \
-    {                             \
-	(out)[0]  = B3(r##0);	  \
-	(out)[4]  = B2(r##0);	  \
-	(out)[8]  = B1(r##0);	  \
-	(out)[12] = B0(r##0);	  \
-                                  \
-	(out)[1]  = B3(r##1);	  \
-	(out)[5]  = B2(r##1);	  \
-	(out)[9]  = B1(r##1);	  \
-	(out)[13] = B0(r##1);	  \
-                                  \
-	(out)[2]  = B3(r##2);	  \
-	(out)[6]  = B2(r##2);	  \
-	(out)[10] = B1(r##2);	  \
-	(out)[14] = B0(r##2);	  \
-                                  \
-	(out)[3]  = B3(r##3);	  \
-	(out)[7]  = B2(r##3);	  \
-	(out)[11] = B1(r##3);	  \
-	(out)[15] = B0(r##3);	  \
-    }
-
-#define AddRoundKey(r,s)        \
-    {                           \
-        r##0 ^= s[0];           \
-        r##1 ^= s[1];           \
-        r##2 ^= s[2];           \
-        r##3 ^= s[3];           \
-    }
-
-
-#define AddRoundKeyAssign(n,r,key)      \
-    {                                   \
-        n##0 = r##0 ^ key[0];		\
-        n##1 = r##1 ^ key[1];		\
-        n##2 = r##2 ^ key[2];		\
-        n##3 = r##3 ^ key[3];		\
-    }
-
-#define MixColumns(n,r)                \
-    {                                  \
-        n##0 = r##1 ^ r##2 ^ r##3 ;    \
-        n##1 = r##2 ^ r##3 ^ r##0 ;    \
-        n##2 = r##3 ^ r##0 ^ r##1 ;    \
-        n##3 = r##0 ^ r##1 ^ r##2 ;    \
-                                       \
-        r##0 = Mult02(r##0);           \
-        r##1 = Mult02(r##1);           \
-        r##2 = Mult02(r##2);           \
-        r##3 = Mult02(r##3);           \
-				       \
-        n##0 ^= r##0 ^ r##1;           \
-        n##1 ^= r##1 ^ r##2;           \
-        n##2 ^= r##2 ^ r##3;           \
-        n##3 ^= r##3 ^ r##0;           \
-    }
-
-
-#define InvMixColumns(n,r)                        \
-        {                                         \
-        MixColumns(n,r)                           \
-                                                  \
-        r##0 ^= r##2 ;                            \
-        r##1 ^= r##3 ;                            \
-						  \
-        r##0 = Mult02(r##0);                      \
-        r##1 = Mult02(r##1);                      \
-						  \
-        n##0 ^= r##0;                             \
-        n##1 ^= r##1;                             \
-        n##2 ^= r##0;                             \
-        n##3 ^= r##1;                             \
-						  \
-        r##0 = Mult02(r##0);                      \
-        r##1 = Mult02(r##1);                      \
-        r##0 ^= r##1;                             \
-						  \
-        n##0 ^= r##0;                             \
-        n##1 ^= r##0;                             \
-        n##2 ^= r##0;                             \
-        n##3 ^= r##0;                             \
-        }
-
-#define DECL_MATRIX_REGISTER(r)  \
-    register Row r##0;           \
-    register Row r##1;		 \
-    register Row r##2;		 \
-    register Row r##3;
-
-#define DECL_MATRIX(r) \
-    Row r##0;          \
-    Row r##1;          \
-    Row r##2;          \
-    Row r##3;
-
-
-/* The encryption macro
-
-   Uses variables state, temp, eKey, r and nRounds
-
-   If state contained the block that needs to be encrypted then by the
-   end of ENCRYPT state will contain the encrypted block.
-
- */
-
-#define ENCRYPT	{				\
-    AddRoundKey(state, eKey[0]);                \
-    for(r = 1; r < nRounds; ++r)		\
-    {						\
-        SubBytesAndShift(state);		\
-        MixColumns(temp,state);                 \
-	AddRoundKeyAssign(state,temp, eKey[r]); \
-    }                                           \
-    SubBytesAndShift(state);                    \
-    AddRoundKey(state,eKey[nRounds]);           \
-}
-
-/* The decryption macro
-
-   Uses variables state, temp, eKey, r and nRounds
-
-   If state contained the block that needs to be encrypted then by the
-   end of DECRYPT the variable state will contain the decrypted block.
-
- */
-
-
-#define DECRYPT {                               \
-    AddRoundKey(state,eKey[nRounds]);           \
-    for(r = nRounds - 1; r > 0; --r)		\
-    {                                           \
-	InvSubBytesAndShift(state);             \
-	AddRoundKeyAssign(temp,state, eKey[r]); \
-	InvMixColumns(state,temp);              \
-    }                                           \
-    InvSubBytesAndShift(state);                 \
-    AddRoundKey(state,eKey[0]);			\
-}
-
-void raazAESCBCEncryptCPortable(
-    Block *inp, int nBlocks,
-    int nRounds, RMatrix *eKey,
-    RMatrix iv)
-{
-    int r;
-    DECL_MATRIX_REGISTER(state);
-    DECL_MATRIX_REGISTER(temp);
-
-    state0 = iv[0];
-    state1 = iv[1];
-    state2 = iv[2];
-    state3 = iv[3];
-
-    /* Invariant: State contains the iv for the current block */
-    while( nBlocks )
-    {
-	/* Load the actual block into temp */
-	Load(temp, *inp);
-
-	/* XOR with the iv that is in state and store it in state */
-
-	XOR(state, temp);
-
-	ENCRYPT; /* now state contains the encrypted block which is
-		    also the iv for the next block.
-		 */
-
-	Store(state, *inp);
-
-	--nBlocks;
-	++inp;
-    }
-
-    iv[0] = state0;
-    iv[1] = state1;
-    iv[2] = state2;
-    iv[3] = state3;
-
-}
-
-
-void raazAESCBCDecryptCPortable(
-    Block *inp, int nBlocks,
-    int nRounds, RMatrix *eKey,
-    RMatrix iv)
-{
-    int cursor, r;
-
-    DECL_MATRIX(endIV)
-    DECL_MATRIX_REGISTER(state);
-    DECL_MATRIX_REGISTER(temp);
-
-
-    Load(state, inp[nBlocks - 1]); /* Start from the last block */
-
-    /* The last encrypted block is also the IV for the subsequent
-       blocks. So keep track of it.
-    */
-
-    Copy(endIV, state);
-
-    /*
-      The invariant kept track of is that the variable state contains
-      the current block that is to be decrypted.
-    */
-
-    for(cursor = nBlocks - 1; cursor > 0 ; --cursor)
-    {
-
-	DECRYPT;
-
-	/* Load the IV for the current block into temp */
-	Load(temp, inp[cursor - 1]);
-
-	/* Recover the actual block */
-	XOR(state,temp)
-
-	/* Store the decrypted block */
-	Store(state, inp[cursor]);
-
-	/* Maintain the invariant by moving stuff in temp to state */
-	Copy(state, temp);
-
-    }
-
-    /* For the first block */
-    DECRYPT;
-
-    state0 ^= iv[0];
-    state1 ^= iv[1];
-    state2 ^= iv[2];
-    state3 ^= iv[3];
-
-    Store(state, inp[0]);
-
-    iv[0] = endIV0;
-    iv[1] = endIV1;
-    iv[2] = endIV2;
-    iv[3] = endIV3;
-
-}
diff --git a/cbits/raaz/cipher/aes/cportable.h b/cbits/raaz/cipher/aes/cportable.h
deleted file mode 100644
--- a/cbits/raaz/cipher/aes/cportable.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#pragma once
-
-extern void raazAESCBCEncryptCPortable(
-    Block *inp, int nBlocks,
-    int nRounds, RMatrix *eKey,
-    RMatrix iv);
-
-extern void raazAESCBCDecryptCPortable(
-    Block *inp, int nBlocks,
-    int nRounds, RMatrix *eKey,
-    RMatrix iv);
diff --git a/cbits/raaz/cipher/chacha20/common.h b/cbits/raaz/cipher/chacha20/common.h
deleted file mode 100644
--- a/cbits/raaz/cipher/chacha20/common.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#pragma once
-
-#include <stdint.h>
-#include <inttypes.h>
-#include <raaz/core/endian.h>
-
-typedef uint32_t Word;
-typedef Word     State[16];
-typedef Word     Block[16];
-
-/* Implementation in accordance to RFC7539
- * https://tools.ietf.org/html/rfc7539
- *
- * Note that there is a difference in the rfc and the version
- * published by djb.  In the rfc one uses 32-bit counter and 96-bit
- * nounce, whereas the published version of djb uses 64bit counter and
- * 64bit nounce.
- *
- * As a result the maximum data that should be encrypted with this
- * cipher (for a given key, iv pair).
- *
- * 2^32 blocks = 256 GB.
- *
- */
-
-typedef uint32_t Counter;
-typedef Word     IV[3];
-typedef Word     Key[8];
-
-# define BLOCK_SIZE       (sizeof(State))
-
-#define C0 ((Word) 0x61707865)
-#define C1 ((Word) 0x3320646e)
-#define C2 ((Word) 0x79622d32)
-#define C3 ((Word) 0x6b206574)
-
-
-/* Vector types */
-
-# ifdef HAVE_VECTOR_128
-/* Type of 128-bit SIMD instructions */
-typedef Word Vec  __attribute__ ((vector_size (16)));
-# endif
-
-# ifdef HAVE_VECTOR_256
-/* Type of 256-bit SIMD instructions */
-typedef Word Vec2 __attribute__ ((vector_size (32)));
-# endif
-
-# ifdef HAVE_VECTOR_512
-/* Type of 512-bit SIMD instructions */
-typedef Word Vec4 __attribute__ ((vector_size (64)));
-# endif
diff --git a/cbits/raaz/cipher/chacha20/cportable.c b/cbits/raaz/cipher/chacha20/cportable.c
deleted file mode 100644
--- a/cbits/raaz/cipher/chacha20/cportable.c
+++ /dev/null
@@ -1,119 +0,0 @@
-#include "common.h"
-
-/* The main chacha20 block transform for a complete block of data.
- *
- * Maximum bytes that should be encoded is 2^32 * 64 = 256GB.  The
- * counter repeats after that.
- *
- */
-
-
-
-/* Warnings all macros are unprotected use with care */
-
-# define R(x,i) ((x << i) | (x >> (32 - i)))
-
-# define QROUND(a,b,c,d)			\
-    {						\
-	a += b; d ^= a; d = R(d,16);		\
-	c += d; b ^= c; b = R(b,12);		\
-	a += b; d ^= a; d = R(d,8);		\
-	c += d; b ^= c; b = R(b,7);		\
-    }						\
-
-
-
-# define ROUND			  \
-    {				  \
-	QROUND(x0, x4, x8,  x12); \
-	QROUND(x1, x5, x9,  x13); \
-	QROUND(x2, x6, x10, x14); \
-	QROUND(x3, x7, x11, x15); \
-	QROUND(x0, x5, x10, x15); \
-	QROUND(x1, x6, x11, x12); \
-	QROUND(x2, x7, x8,  x13); \
-	QROUND(x3, x4, x9,  x14); \
-    }
-
-
-# define XOR(i,a)    (*msg)[i] ^= raaz_tole32(a)
-# define EMIT(i,a)   (*msg)[i]  = a
-
-/*
-
-Some function for debugging.
-
-# define PR(i)        printf("%8x  ", x##i)
-# define PRM(i)       printf("%8x  ", (*msg)[i])
-# define NEWLINE      printf("\n")
-# define PRINTSTATE				\
-    {						\
-    PR(0); PR(1);   PR(2);    PR(3); NEWLINE;	\
-    PR(4); PR(5);   PR(6);    PR(7); NEWLINE;	\
-    PR(8); PR(9);   PR(10);   PR(11); NEWLINE;	\
-    PR(12); PR(13); PR(14); PR(15); NEWLINE;	\
-    }
-
-# define PRINTMESG				\
-    {						\
-    PRM(0); PRM(1);   PRM(2);    PRM(3); NEWLINE;	\
-    PRM(4); PRM(5);   PRM(6);    PRM(7); NEWLINE;	\
-    PRM(8); PRM(9);   PRM(10);   PRM(11); NEWLINE;	\
-    PRM(12); PRM(13); PRM(14); PRM(15); NEWLINE;	\
-    }
-
-*/
-
-
-
-# pragma GCC optimize "tree-vectorize"
-
-void raazChaCha20Block(Block * msg, int nblocks, const Key key, const IV iv, Counter  *ctr)
-{
-    register Word x0,  x1,  x2, x3;
-    register Word x4,  x5,  x6, x7;
-    register Word x8,  x9,  x10, x11;
-    register Word x12, x13, x14, x15;
-    register Word valCtr; /* value of the ctr */
-
-    valCtr = *ctr;
-    while( nblocks > 0){
-
-
-	x0  = C0     ; x1  = C1     ; x2  = C2     ; x3  = C3     ;
-	x4  = key[0] ; x5  = key[1] ; x6  = key[2] ; x7  = key[3] ;
-	x8  = key[4] ; x9  = key[5] ; x10 = key[6] ; x11 = key[7] ;
-	x12 = valCtr ; x13 = iv[0]  ; x14 = iv[1]  ; x15 = iv[2]  ;
-
-
-	ROUND; /* 0,1   */
-	ROUND; /* 2,3   */
-	ROUND; /* 4,5   */
-	ROUND; /* 6,7   */
-	ROUND; /* 8,9   */
-	ROUND; /* 10,11 */
-	ROUND; /* 12,13 */
-	ROUND; /* 14,15 */
-	ROUND; /* 16,17 */
-	ROUND; /* 18,19 */
-
-
-
-	x0  += C0     ; x1  += C1     ; x2  += C2     ; x3  += C3     ;
-	x4  += key[0] ; x5  += key[1] ; x6  += key[2] ; x7  += key[3] ;
-	x8  += key[4] ; x9  += key[5] ; x10 += key[6] ; x11 += key[7] ;
-	x12 += valCtr ; x13 += iv[0]  ; x14 += iv[1]  ; x15 += iv[2]  ;
-
-
-	XOR(0,x0)   ; XOR(1, x1) ; XOR(2, x2)   ; XOR(3,  x3)  ;
-	XOR(4,x4)   ; XOR(5, x5) ; XOR(6, x6)   ; XOR(7,  x7)  ;
-	XOR(8,x8)   ; XOR(9, x9) ; XOR(10, x10) ; XOR(11, x11) ;
-	XOR(12,x12) ; XOR(13,x13); XOR(14, x14) ; XOR(15, x15) ;
-
-
-	++ valCtr;
-	--nblocks; ++msg; /* move to the next block */
-    }
-    *ctr = valCtr;         /* increment counter      */
-    return;
-}
diff --git a/cbits/raaz/cipher/chacha20/vector128.c b/cbits/raaz/cipher/chacha20/vector128.c
deleted file mode 100644
--- a/cbits/raaz/cipher/chacha20/vector128.c
+++ /dev/null
@@ -1,175 +0,0 @@
-#include "common.h"
-
-
-# define R(x,i) (  (x << ((Vec){i,i,i,i})) | (x >> ((Vec){32 - i, 32 - i, 32 - i, 32 - i})))
-
-# define QROUND(a,b,c,d)			\
-    {						\
-	a += b; d ^= a; d = R(d,16);		\
-	c += d; b ^= c; b = R(b,12);		\
-	a += b; d ^= a; d = R(d,8);		\
-	c += d; b ^= c; b = R(b,7);		\
-    }						\
-
-/*
-
-  r0 = x0 x1 x2  x3
-  r1 = x4 x5 x6  x7
-  r2 = x8 x9 x10 x11
-  r3 = x12 x13 x14 x15
-
-  QROUND(r0, r1, r2, r3) : Handles row o
-
-  d0 = x0  x1    x2   x3
-  d1 = x5  x6    x7   x4
-  d2 = x10 x11   x8   x9
-  d3 = x15 x12   x13  x14
-
- */
-
-# ifdef __clang__
-#   define SIG  1 , 2 , 3 , 0
-#   define SIG2 2 , 3 , 0 , 1
-#   define SIG3 3 , 0 , 1 , 2
-
-
-#   define ISIG  SIG3
-#   define ISIG2 SIG2
-#   define ISIG3 SIG
-
-#   define TODIAG					\
-    {							\
-	B = __builtin_shufflevector(B, B, SIG  );	\
-	C = __builtin_shufflevector(C, C, SIG2 );	\
-	D = __builtin_shufflevector(D, D, SIG3 );	\
-    }
-
-#   define TOROW					\
-    {							\
-	B = __builtin_shufflevector(B, B, ISIG  );	\
-	C = __builtin_shufflevector(C, C, ISIG2 );	\
-	D = __builtin_shufflevector(D, D, ISIG3 );	\
-    }
-
-# else
-
-#   define SIG  ((Vec){ 1 , 2 , 3 , 0 })
-#   define SIG2 ((Vec){ 2 , 3 , 0 , 1 })
-#   define SIG3 ((Vec){ 3 , 0 , 1 , 2 })
-
-
-#   define ISIG  ((Vec){ 3 , 0 , 1 , 2 })
-#   define ISIG2 ((Vec){ 2 , 3 , 0  ,1 })
-#   define ISIG3 ((Vec){ 1 , 2 , 3 , 0 })
-
-
-
-#   define TODIAG				\
-    {						\
-	B = __builtin_shuffle ( B, SIG  );	\
-	C = __builtin_shuffle ( C, SIG2 );	\
-	D = __builtin_shuffle ( D, SIG3 );	\
-    }
-
-
-#   define TOROW		      \
-    {				      \
-	B = __builtin_shuffle(B, ISIG  );	\
-	C = __builtin_shuffle(C, ISIG2 );	\
-	D = __builtin_shuffle(D, ISIG3 );	\
-    }
-
-
-#endif
-
-
-# define ROUND							\
-     { QROUND(A,B,C,D); TODIAG; QROUND(A,B,C,D); TOROW; }
-
-
-# define XORA(i) (*msg)[i] ^= raaz_tole32( A[i]    )
-# define XORB(i) (*msg)[i] ^= raaz_tole32( B[i-4]  )
-# define XORC(i) (*msg)[i] ^= raaz_tole32( C[i-8]  )
-# define XORD(i) (*msg)[i] ^= raaz_tole32( D[i-12] )
-
-
-# define ChaChaConstantRow  ((Vec){ C0     , C1     , C2     ,  C3    })
-
-
-
-
-# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-#   define INP(i) (((Vec *)msg)[i])
-#   define WR(i,R) { MSG  = INP(i); MSG ^= R; INP(i) = MSG; }
-#   define WRITE { WR(0,A); WR(1,B); WR(2,C); WR(3,D); }
-# else
-#   define XORA(i) (*msg)[i] ^= raaz_tole32( A[i]    )
-#   define XORB(i) (*msg)[i] ^= raaz_tole32( B[i-4]  )
-#   define XORC(i) (*msg)[i] ^= raaz_tole32( C[i-8]  )
-#   define XORD(i) (*msg)[i] ^= raaz_tole32( D[i-12] )
-#   define WRITE                                        \
-    {   XORA(0)  ; XORA(1)  ; XORA(2)  ; XORA(3);       \
-        XORB(4)  ; XORB(5)  ; XORB(6)  ; XORB(7);       \
-        XORC(8)  ; XORC(9)  ; XORC(10) ; XORC(11);      \
-        XORD(12) ; XORD(13) ; XORD(14) ; XORD(15);      \
-    }
-#  endif /* Byte order */
-
-
-/* One should ensure that msg is aligned to 16 bytes. */
-static inline void chacha20vec128(Block *msg, int nblocks, const Key key, const IV iv, Counter *ctr)
-{
-    register Vec A , B, C, D;
-    register Vec M1, M2, M3;
-    register Vec MSG;
-
-    /* TODO: Optimise with vector load (take care of alignments) */
-
-    M1 =  (Vec){ key[0] , key[1] , key[2] , key[3] };
-    M2 =  (Vec){ key[4] , key[5] , key[6] , key[7] };
-    M3 =  (Vec){ *(ctr) , iv[0]  ,  iv[1] , iv[2]  };
-
-    *ctr += nblocks;
-
-    for(; nblocks > 0; -- nblocks, ++msg)
-    {
-	/* Initialise the state;
-	   Except for the counter everything is the same
-	 */
-
-	A = ChaChaConstantRow;
-	B = M1; C = M2; D = M3;
-
-	ROUND; /* 0,1   */
-	ROUND; /* 2,3   */
-	ROUND; /* 4,5   */
-	ROUND; /* 6,7   */
-	ROUND; /* 8,9   */
-	ROUND; /* 10,11 */
-	ROUND; /* 12,13 */
-	ROUND; /* 14,15 */
-	ROUND; /* 16,17 */
-	ROUND; /* 18,19 */
-
-	A += ChaChaConstantRow;
-
-
-	B += M1;
-	C += M2;
-	D += M3;
-
-	/* TODO: Optimise with vector load (take care of
-	 * alignments) */
-
-	WRITE;
-
-	++M3[0];         /* increment counter      */
-
-    }
-    return;
-}
-
-void raazChaCha20BlockVector(Block *msg, int nblocks, const Key key, const IV iv, Counter *ctr)
-{
-    chacha20vec128(msg, nblocks, key, iv, ctr);
-}
diff --git a/cbits/raaz/cipher/chacha20/vector256.c b/cbits/raaz/cipher/chacha20/vector256.c
deleted file mode 100644
--- a/cbits/raaz/cipher/chacha20/vector256.c
+++ /dev/null
@@ -1,179 +0,0 @@
-#include "common.h"
-
-# define R(x,i) (                                                       \
-        (x << (Vec2){i,i,i,i,i,i,i,i}) |                                \
-        (x >> (Vec2){32 -i, 32 - i, 32 -i, 32 -i, 32 -i, 32 - i, 32 - i , 32 - i }) \
-        )
-
-/*
-# define R(x,i) ( (x << i) | (x >> (32 - i)))
-*/
-
-# define QROUND(a,b,c,d)                        \
-    {                                           \
-        a += b; d ^= a; d = R(d,16);            \
-        c += d; b ^= c; b = R(b,12);            \
-        a += b; d ^= a; d = R(d,8);             \
-        c += d; b ^= c; b = R(b,7);             \
-    }                                           \
-
-
-
-/*
-
-  r0 = x0 x1 x2  x3
-  r1 = x4 x5 x6  x7
-  r2 = x8 x9 x10 x11
-  r3 = x12 x13 x14 x15
-
-  QROUND(r0, r1, r2, r3) : Handles row o
-
-  d0 = x0  x1    x2   x3
-  d1 = x5  x6    x7   x4
-  d2 = x10 x11   x8   x9
-  d3 = x15 x12   x13  x14
-
- */
-
-
-
-# define SIG       1 , 2 , 3 , 0 , 5  , 6  , 7  , 4
-# define SIG2      2 , 3 , 0 , 1 , 6  , 7  , 4  , 5
-# define SIG3      3 , 0 , 1 , 2 , 7  , 4  , 5  , 6
-# define MASK_LOW  0 , 1 , 2 , 3 , 8  , 9  , 10 , 11
-# define MASK_HIGH 4 , 5 , 6 , 7 , 12 , 13 , 14 , 15
-
-# define ISIG  SIG3
-# define ISIG2 SIG2
-# define ISIG3 SIG
-
-#ifdef __clang__
-
-#     define SIGMA(X)   (__builtin_shufflevector( X, X, SIG))
-#     define SIGMA2(X)  (__builtin_shufflevector( X, X, SIG2))
-#     define SIGMA3(X)  (__builtin_shufflevector( X, X, SIG3))
-#     define ISIGMA(X)  (__builtin_shufflevector( X, X, ISIG))
-#     define ISIGMA2(X) (__builtin_shufflevector( X, X, ISIG2))
-#     define ISIGMA3(X) (__builtin_shufflevector( X, X, ISIG3))
-
-#     define MERGE_LOW(X,Y)  (__builtin_shufflevector(X,Y, MASK_LOW))
-#     define MERGE_HIGH(X,Y) (__builtin_shufflevector(X,Y, MASK_HIGH))
-
-#else
-
-
-#     define SIGMA(X)   (__builtin_shuffle( X, (Vec2){SIG}))
-#     define SIGMA2(X)  (__builtin_shuffle( X, (Vec2){SIG2}))
-#     define SIGMA3(X)  (__builtin_shuffle( X, (Vec2){SIG3}))
-#     define ISIGMA(X)  (__builtin_shuffle( X, (Vec2){ISIG}))
-#     define ISIGMA2(X) (__builtin_shuffle( X, (Vec2){ISIG2}))
-#     define ISIGMA3(X) (__builtin_shuffle( X, (Vec2){ISIG3}))
-
-#     define MERGE_LOW(X,Y)  (__builtin_shuffle(X,Y, (Vec2){MASK_LOW} ))
-#     define MERGE_HIGH(X,Y) (__builtin_shuffle(X,Y, (Vec2){MASK_HIGH}))
-
-#endif
-
-#  define TODIAG { B = SIGMA(B) ; C = SIGMA2(C) ; D = SIGMA3(D); }
-#  define TOROW	 { B = ISIGMA(B); C = ISIGMA2(C); D = ISIGMA3(D); }
-
-
-# define ROUND              { QROUND(A,B,C,D); TODIAG; QROUND(A,B,C,D); TOROW; }
-# define ChaChaConstantRow  (Vec2){ C0 , C1 , C2 , C3, C0 , C1 , C2  , C3}
-
-# define LOW(X)          ((Vec){X[0],X[1],X[2],X[3]})
-# define HIGH(X)         ((Vec){X[4],X[5],X[6],X[7]})
-
-# if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-#   define ADJUST_ENDIAN(A) {} /* do nothing */
-# else
-#   define SWAP(A,i) bswap_32(A[i])
-#   define ADJUST_ENDIAN(A) {					   \
-	A  = (Vec2){ SWAP(A,0), SWAP(A,1), SWAP(A,2), SWAP(A,3)	   \
-		     SWAP(A,4), SWAP(A,5), SWAP(A,6), SWAP(A,7)};}
-# endif
-
-# define INP(i)            (((Vec*)msg)[i])
-# define INP2(i)            (((Vec2*)msg)[i])
-
-# ifdef HAVE_AVX2
-#   define WRITE_LOW { 	MSG = MERGE_LOW(A,B); INP2(0) ^= MSG; MSG = MERGE_LOW(C,D); INP2(1) ^= MSG; }
-#   define WRITE_HIGH { MSG = MERGE_HIGH(A,B); INP2(2) ^= MSG; MSG = MERGE_HIGH(C,D); INP2(3) ^= MSG; }
-# else
-#   define WRITE_LOW { INP(0) ^= LOW(A); INP(1) ^= LOW(B); INP(2) ^= LOW(C); INP(3) ^= LOW(D); }
-#   define WRITE_HIGH { INP(4) ^= HIGH(A); INP(5) ^= HIGH(B); INP(6) ^= HIGH(C); INP(7) ^= HIGH(D); }
-# endif
-
-# define EMIT(X,i) ((Vec2 *)msg)[i] = X
-
-void raazChaCha20BlockVector256(Block *msg, int nblocks, const Key key, const IV iv, Counter *ctr)
-{
-
-    register Vec2 A , B, C, D;
-    register Vec2 M1, M2, M3;
-    register Vec2 MSG;
-
-    M1 =  (Vec2){
-        key[0] , key[1] , key[2] , key[3],
-        key[0] , key[1] , key[2] , key[3]
-    };
-    M2 =  (Vec2){
-        key[4] , key[5] , key[6] , key[7],
-        key[4] , key[5] , key[6] , key[7]
-    };
-
-    M3 =  (Vec2){
-        *(ctr)   , iv[0]  ,  iv[1] , iv[2],
-        *(ctr)+1 , iv[0]  ,  iv[1] , iv[2]
-    };
-
-    *ctr += nblocks;
-    while(nblocks > 0)
-    {
-        /* Initialise the state;
-           Except for the counter everything is the same
-         */
-
-
-        A = ChaChaConstantRow;
-        B = M1; C = M2; D = M3;
-
-        ROUND; /* 0,1   */
-        ROUND; /* 2,3   */
-        ROUND; /* 4,5   */
-        ROUND; /* 6,7   */
-        ROUND; /* 8,9   */
-        ROUND; /* 10,11 */
-        ROUND; /* 12,13 */
-        ROUND; /* 14,15 */
-        ROUND; /* 16,17 */
-        ROUND; /* 18,19 */
-
-        A += ChaChaConstantRow;
-
-
-        B += M1;
-        C += M2;
-        D += M3;
-
-
-
-	/* Writing the stream */
-
-
-	ADJUST_ENDIAN(A); ADJUST_ENDIAN(B); ADJUST_ENDIAN(C); ADJUST_ENDIAN(D);
-
-	WRITE_LOW; /* Write the lower block */
-
-	if( nblocks == 1) break; /* nblocks was odd and hence we are done */
-
-
-	WRITE_HIGH;
-
-	/* Move by two blocks at a time.	 */
-	nblocks -= 2;   msg += 2;
-	M3 += (Vec2){2,0,0,0,2,0,0,0};
-    }
-
-   return;
-}
diff --git a/cbits/raaz/core/cpusupports.c b/cbits/raaz/core/cpusupports.c
deleted file mode 100644
--- a/cbits/raaz/core/cpusupports.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-
-This module exposes runtime checks for cpu flags. Works only with GCC.
-
- */
-
-
-# define GCC_VERSION (__GNUC__ * 10 + __GNUC_MINOR__)
-
-/* Check an x86_64 feature */
-
-# ifdef ARCH_X86_64
-#     define X86_64_SUPPORTS(x) { __builtin_cpu_init(); return __builtin_cpu_supports((x)); }
-# else
-#     define X86_64_SUPPORTS(x) { return 0; }
-# endif
-
-# if GCC_VERSION >= 48 && !defined(__clang__)
-# pragma GCC push_options
-# pragma GCC optimize ("O0")
-
-int raaz_supports_sse()   { X86_64_SUPPORTS("sse");     }
-int raaz_supports_sse2()  { X86_64_SUPPORTS("sse2");    }
-int raaz_supports_sse3()  { X86_64_SUPPORTS("sse3");    }
-int raaz_supports_sse4_1(){ X86_64_SUPPORTS("sse4.1");  }
-int raaz_supports_sse4_2(){ X86_64_SUPPORTS("sse4.2");  }
-int raaz_supports_avx()   { X86_64_SUPPORTS("avx");     }
-int raaz_supports_avx2()  { X86_64_SUPPORTS("avx2");    }
-
-# pragma GCC pop_options
-
-# else
-
-int raaz_supports_sse()   { return 0;}
-int raaz_supports_sse2()  { return 0;}
-int raaz_supports_sse3()  { return 0;}
-int raaz_supports_sse4_1(){ return 0;}
-int raaz_supports_sse4_2(){ return 0;}
-int raaz_supports_avx()   { return 0;}
-int raaz_supports_avx2()  { return 0;}
-
-#endif
diff --git a/cbits/raaz/core/endian.c b/cbits/raaz/core/endian.c
deleted file mode 100644
--- a/cbits/raaz/core/endian.c
+++ /dev/null
@@ -1,89 +0,0 @@
-#include <raaz/core/endian.h>
-
-/*
- *  These are declared as macros because they will work for both
- *  32-bit as well as 64-bit cases.
- */
-
-# define MASK(i)       (0xFFULL << (8*(i))) /* mask to select the ith byte              */
-# define SEL(a,i)      ((a) & MASK(i))      /* select the ith byte                      */
-# define MOVL(a,i)      ((a) << (8*(i)))    /* shift the bytes i positions to the left  */
-# define MOVR(a,i)      ((a) >> (8*(i)))    /* shift the bytes i positions to the right */
-# define SWAP(a,i,j)   (MOVL(SEL(a,i),(j-i)) | MOVR(SEL(a,j), (j - i)))
-                       /* This function swaps the ith and jth bytes and sets other bytes to 0 */
-
-
-
-# define TO32(x)     ((uint32_t)(x))
-# define TO64(x)     ((uint64_t)(x))
-
-# define B32(ptr,i) (TO32(ptr[i]))
-# define B64(ptr,i) (TO64(ptr[i]))
-
-/* Make a 32-bit quantity out of the 4 bytes given in MSB first order */
-# define MK32(a,b,c,d) ( (a) << 24 | (b) << 16 | (c) << 8 | (d) )
-
-/* Similar to MK32 but for 64-bit quantities */
-# define MK64(a,b,c,d,e,f,g,h)  \
-    ((a) <<  56  | (b) << 48   | (c) << 40 | (d) << 32	| (e) << 24   | (f) << 16   | (g) << 8  | (h))
-
-
-#ifdef __RAAZ_REQUIRE_PORTABLE_SWAP__
-
-uint32_t raaz_bswap32(uint32_t a){ return (SWAP(a,0,3) | SWAP(a,1,2)); }
-uint64_t raaz_bswap64(uint64_t a){ return (SWAP(a,0,7) | SWAP(a,1,6)  | SWAP(a,2,5) | SWAP(a,3,4)); }
-
-#endif
-
-
-#ifdef __RAAZ_REQUIRE_PORTABLE_ENDIAN__
-
-uint32_t raaz_tobe32(uint32_t x)
-{
-    uint8_t *ptr = (uint8_t *) &x;
-    return MK32(B32(ptr,0), B32(ptr,1), B32(ptr,2), B32(ptr,3));
-}
-
-
-uint32_t raaz_tole32(uint32_t x)
-{
-    uint8_t *ptr = (uint8_t *) &x;
-    return MK32(B32(ptr,3), B32(ptr,2), B32(ptr,1), B32(ptr,0));
-
-}
-
-uint64_t raaz_tobe64(uint64_t x)
-{
-    uint8_t *ptr = (uint8_t *) &x;
-    return MK64(B64(ptr,0), B64(ptr,1), B64(ptr,2), B64(ptr,3),
-		B64(ptr,4), B64(ptr,5), B64(ptr,6), B64(ptr,7));
-}
-
-
-uint64_t raaz_tole64(uint64_t x)
-{
-    uint8_t *ptr = (uint8_t *) &x;
-    return MK64(B64(ptr,7), B64(ptr,6), B64(ptr,5), B64(ptr,4),
-		B64(ptr,3), B64(ptr,2), B64(ptr,1), B64(ptr,0));
-}
-
-#endif
-
-
-/* Finally we define the functions that are called by Haskell as FFI
- * routines for their endian store instances. These should not be
- * declared static inline.
- */
-
-uint32_t raazSwap32(uint32_t a){ return raaz_bswap32(a);}
-uint64_t raazSwap64(uint64_t a){ return raaz_bswap64(a);}
-
-void raazSwap32Array(uint32_t *ptr, int n)
-{
-    for(;n > 0; ++ptr, --n){*ptr = raaz_bswap32(*ptr);}
-}
-
-void raazSwap64Array(uint64_t *ptr, int n)
-{
-    for(;n > 0; ++ptr, --n){*ptr = raaz_bswap64(*ptr);}
-}
diff --git a/cbits/raaz/core/endian.h b/cbits/raaz/core/endian.h
deleted file mode 100644
--- a/cbits/raaz/core/endian.h
+++ /dev/null
@@ -1,100 +0,0 @@
-# pragma once
-# include <stdint.h>
-
-/* This header file does the following
-
-1. Declarations of raazSwap* and RaazSwap*Array functions that are the
-   C functions for call from Haskell.
-
-2. Endian conversion functions that are used by implementations of
-   primitives.
-
-Note that on the Haskell side endian conversion happens by calling the
-swap if required and we do not need the endian functions
-here. Therefore, they are declared as static inline whenever possible.
-
-
-We first define functions for byte swapping falling back to portable C
-implementation (indicated by defining __RAAZ_REQUIRE_PORTABLE_SWAP__)
-available in raaz/core/endian.c. The C-ffi stub functions make use of
-these functions. The endian conversions functions also use them if we
-can detect the byte order. Otherwise they too have a portable c
-implementation (indicated by defining
-__RAAZ_REQUIRE_PORTABLE_ENDIAN__)
-
-*/
-
-/*
- *         Byte swapping. Use platform specific ones when we know it.
- */
-
-#ifdef PLATFORM_OSX
-#  include <libkern/OSByteOrder.h> /* For PLATFORM OSX */
-
-   static inline uint32_t raaz_bswap32(uint32_t x){ return OSSwapInt32(x); }
-   static inline uint64_t raaz_bswap64(uint64_t x){ return OSSwapInt64(x); }
-
-#elif defined(PLATFORM_WINDOWS)
-#  include<stdlib.h>
-   static inline uint32_t raaz_bswap32(uint32_t x){ return _byteswap_ulong(x); }
-   static inline uint64_t raaz_bswap64(uint64_t x){ return _byteswap_uint64(x); }
-
-#elif defined(PLATFORM_OPENBSD)
-#  include <sys/endian.h>
-   static inline uint32_t raaz_bswap32(uint32_t x){ return bswap32(x); }
-   static inline uint64_t raaz_bswap64(uint64_t x){ return bswap64(x); }
-
-#elif defined(PLATFORM_LINUX) /* All other platforms */
-#  include <byteswap.h>
-   static inline uint32_t raaz_bswap32(uint32_t x){ return bswap_32(x); }
-   static inline uint64_t raaz_bswap64(uint64_t x){ return bswap_64(x); }
-#else
-  /* We do not have platform specific byte swap */
-# define __RAAZ_REQUIRE_PORTABLE_SWAP__
-
-  extern uint32_t raaz_bswap32(uint32_t x);
-  extern uint64_t raaz_bswap64(uint64_t x);
-
-#endif
-
-
-#ifdef __GNUC__
-
-/* For GNUC compiler use byte order checks to define efficient endian
- * conversion */
-
-#  if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
-
-   static inline uint32_t raaz_tobe32(uint32_t x){ return raaz_bswap32(x); }
-   static inline uint64_t raaz_tobe64(uint64_t x){ return raaz_bswap64(x); }
-
-   static inline uint32_t raaz_tole32(uint32_t x){ return x; }
-   static inline uint64_t raaz_tole64(uint64_t x){ return x; }
-
-#  else
-   static inline uint32_t raaz_tobe32(uint32_t x){ return x; }
-   static inline uint64_t raaz_tobe64(uint64_t x){ return x; }
-
-   static inline uint32_t raaz_tole32(uint32_t x){ return raaz_bswap32(x); }
-   static inline uint64_t raaz_tole64(uint64_t x){ return raaz_bswap64(x); }
-
-#  endif /* Byte order */
-
-#else  /* Not __GNUC__ use portable implementations */
-#  define __RAAZ_REQUIRE_PORTABLE_ENDIAN__
-
-   extern uint32_t raaz_tobe32(uint32_t x);
-   extern uint64_t raaz_tobe64(uint64_t x);
-   extern uint32_t raaz_tole32(uint32_t x);
-   extern uint64_t raaz_tole64(uint64_t x);
-
-#endif
-
-/* These are the C functions that are exported for FFI calls to
- * Haskell. Their definitions are available in endian.c
- */
-
-extern uint32_t raazSwap32      (uint32_t a);
-extern uint64_t raazSwap64      (uint64_t a);
-extern void     raazSwap32Array (uint32_t *ptr, int n);
-extern void     raazSwap64Array (uint64_t *ptr, int n);
diff --git a/cbits/raaz/core/memory.c b/cbits/raaz/core/memory.c
deleted file mode 100644
--- a/cbits/raaz/core/memory.c
+++ /dev/null
@@ -1,34 +0,0 @@
-# ifdef PLATFORM_WINDOWS
-# include <windows.h>
-
-   typedef BOOL WINAPI (*VirtualFunction)(LPVOID, SIZE_T);
-
-#else /* we assume posix system */
-
-#  include <sys/mman.h>
-
-#endif
-
-/* Locks and Unlocks Memory */
-int raazMemorylock(void* ptr, size_t size){
-#ifdef PLATFORM_WINDOWS
-  VirtualFunction func =
-     (VirtualFunction)GetProcAddress(GetModuleHandle(TEXT("kernel32")),
-				     "VirtualLock");
-  return !func(ptr, size);
-#else
-    return mlock(ptr,size);
-#endif
-
-}
-
-void raazMemoryunlock(void* ptr, size_t size){
-#ifdef PLATFORM_WINDOWS
-  VirtualFunction func =
-     (VirtualFunction)GetProcAddress(GetModuleHandle (TEXT("kernel32")),
-				     "VirtualUnlock");
-  func(ptr, size);
-#else  /* posix */
-    munlock(ptr,size);
-#endif
-}
diff --git a/cbits/raaz/hash/blake2/blake2b/constants.h b/cbits/raaz/hash/blake2/blake2b/constants.h
deleted file mode 100644
--- a/cbits/raaz/hash/blake2/blake2b/constants.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-
-#include <raaz/hash/blake2/common.h>
-
-const Word2b iv2b0 = 0x6a09e667f3bcc908ULL;
-const Word2b iv2b1 = 0xbb67ae8584caa73bULL;
-const Word2b iv2b2 = 0x3c6ef372fe94f82bULL;
-const Word2b iv2b3 = 0xa54ff53a5f1d36f1ULL;
-const Word2b iv2b4 = 0x510e527fade682d1ULL;
-const Word2b iv2b5 = 0x9b05688c2b3e6c1fULL;
-const Word2b iv2b6 = 0x1f83d9abfb41bd6bULL;
-const Word2b iv2b7 = 0x5be0cd19137e2179ULL;
diff --git a/cbits/raaz/hash/blake2/blake2b/portable.c b/cbits/raaz/hash/blake2/blake2b/portable.c
deleted file mode 100644
--- a/cbits/raaz/hash/blake2/blake2b/portable.c
+++ /dev/null
@@ -1,290 +0,0 @@
-#include <raaz/hash/blake2/common.h>
-#include <raaz/hash/blake2/blake2b/constants.h>
-
-static inline Word2b R(Word2b x, int i)
-{
-    return (x << (64 - i)) | (x >> i);
-}
-
-
-
-
-
-# define G(a,b,c,d,m0,m1)		      \
-    {					      \
-	a += b + m0  ; d ^= a; d = R(d,32);   \
-	c += d       ; b ^= c; b = R(b,24);   \
-	a += b + m1  ; d ^= a; d = R(d,16);   \
-	c += d       ; b ^= c; b = R(b,63);   \
-    }
-
-
-
-/* Definitions for Blake2b */
-
-# define G0(i,j) G(x0, x4, x8,  x12, w##i, w##j);
-# define G1(i,j) G(x1, x5, x9,  x13, w##i, w##j);
-# define G2(i,j) G(x2, x6, x10, x14, w##i, w##j);
-# define G3(i,j) G(x3, x7, x11, x15, w##i, w##j);
-
-# define G4(i,j) G(x0, x5, x10, x15, w##i, w##j);
-# define G5(i,j) G(x1, x6, x11, x12, w##i, w##j);
-# define G6(i,j) G(x2, x7, x8,  x13, w##i, w##j);
-# define G7(i,j) G(x3, x4, x9,  x14, w##i, w##j);
-
-# define ROUND(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) \
-	{							      \
-	    G0( i0,i1 ); G1( i2 ,i3  ); G2( i4 ,i5  ); G3( i6 ,i7  ); \
-	    G4( i8,i9 ); G5( i10,i11 ); G6( i12,i13 ); G7( i14,i15 ); \
-	}
-
-
-/*
-
-This is the block compression algorithm for blake2b. Besides teh usual
-suspects there are the following additional parameters.
-
-1. upper  -- The upper 64 bits of the counter
-2. lower  -- The lower 64 bits of the counter
-3. f0, f1 -- the finalisation flag
-
-*/
-
-
-#define LOAD(i) (raaz_tole64((*mesg)[(i)]))
-
-# pragma GCC optimize "tree-vectorize"
-
-void raazHashBlake2bPortableBlockCompress( Block2b *mesg, int nblocks,
-					   Word2b *Upper, Word2b *Lower,
-					   Blake2b h)
-{
-    register Word2b x0,  x1,  x2,  x3;  /* row 0  */
-    register Word2b x4,  x5,  x6,  x7;  /* row 1  */
-    register Word2b x8,  x9,  x10, x11;  /* row 2  */
-    register Word2b x12, x13, x14, x15;  /* row 3  */
-
-    /* Input block */
-    register Word2b w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
-
-    /* Variable that contains the hash */
-    Word2b  h0, h1, h2, h3, h4, h5, h6, h7;
-
-
-    register Word2b upper, lower;
-    upper = *Upper;
-    lower = *Lower;
-
-    /* Initialisation hash */
-    h0 = h[0];
-    h1 = h[1];
-    h2 = h[2];
-    h3 = h[3];
-    h4 = h[4];
-    h5 = h[5];
-    h6 = h[6];
-    h7 = h[7];
-
-    while( nblocks > 0)
-    {
-
-	/* Initialisation hashes
-
-
-	   Normally, we would like to put the length increment at the
-	   end of the body; somewhere close to the place where we move
-	   to the next block. However, when hashing the i-th block of
-	   input, we need to set upto the initial value with the total
-	   size of data including the i-th block. So we start with an
-	   increment the length counter.
-
-	*/
-
-
-	if (lower > UINT64_MAX - sizeof(Block2b)) { ++upper; } /* Increment the counter */
-	lower += sizeof(Block2b);
-
-
-	x0 = h0;
-	x1 = h1;
-	x2 = h2;
-	x3 = h3;
-	x4 = h4;
-	x5 = h5;
-	x6 = h6;
-	x7 = h7;
-
-	/* Initialisation iv  */
-
-	x8  = iv2b0;
-	x9  = iv2b1;
-	x10 = iv2b2;
-	x11 = iv2b3;
-	x12 = iv2b4 ^ lower;
-	x13 = iv2b5 ^ upper;
-	x14 = iv2b6;
-	x15 = iv2b7;
-
-	/* Load the block */
-
-	w0  = LOAD(0);
-	w1  = LOAD(1);
-	w2  = LOAD(2);
-	w3  = LOAD(3);
-	w4  = LOAD(4);
-	w5  = LOAD(5);
-	w6  = LOAD(6);
-	w7  = LOAD(7);
-	w8  = LOAD(8);
-	w9  = LOAD(9);
-	w10 = LOAD(10);
-	w11 = LOAD(11);
-	w12 = LOAD(12);
-	w13 = LOAD(13);
-	w14 = LOAD(14);
-	w15 = LOAD(15);
-
-
-	ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 0 */
-	ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 1 */
-	ROUND( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4); /* 2 */
-	ROUND(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8); /* 3 */
-	ROUND(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13); /* 4 */
-	ROUND(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9); /* 5 */
-	ROUND( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11); /* 6 */
-	ROUND( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10); /* 7 */
-	ROUND(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5); /* 8 */
-	ROUND( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0); /* 9 */
-
-
-	ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 10 */
-	ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 11 */
-
-	/* Update the hash */
-
-	h0 ^= x0 ^ x8;
-	h1 ^= x1 ^ x9;
-	h2 ^= x2 ^ x10;
-	h3 ^= x3 ^ x11;
-	h4 ^= x4 ^ x12;
-	h5 ^= x5 ^ x13;
-	h6 ^= x6 ^ x14;
-	h7 ^= x7 ^ x15;
-
-	/* Move to the next block */
-	--nblocks; ++mesg;
-
-    }
-
-    h[0] = h0;
-    h[1] = h1;
-    h[2] = h2;
-    h[3] = h3;
-    h[4] = h4;
-    h[5] = h5;
-    h[6] = h6;
-    h[7] = h7;
-    *Upper = upper;
-    *Lower = lower;
-}
-
-/* This is the function for compressing the last block. The nbytes should be <= block size */
-
-#undef  LOAD
-#define LOAD(i) (raaz_tole64(mesg[(i)]))
-void raazHashBlake2bPortableLastBlock( Block2b mesg, int nbytes,
-				       Word2b upper, Word2b lower,
-				       Word2b f0 , Word2b f1,
-				       Blake2b h)
-{
-
-    register Word2b x0,  x1,  x2,  x3;  /* row 0  */
-    register Word2b x4,  x5,  x6,  x7;  /* row 1  */
-    register Word2b x8,  x9,  x10, x11;  /* row 2  */
-    register Word2b x12, x13, x14, x15;  /* row 3  */
-
-    /* Input block */
-    register Word2b w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
-
-    /* Variable that contains the hash */
-    Word2b  h0, h1, h2, h3, h4, h5, h6, h7;
-
-    /* Initialisation hashes
-
-       The increment is here for the same reason as in the block
-       compression function.
-
-    */
-
-
-    if (lower > UINT64_MAX - ((Word2b)nbytes)) { ++upper; } /* Increment the counter */
-    lower += nbytes;
-
-
-    x0 = h[0];
-    x1 = h[1];
-    x2 = h[2];
-    x3 = h[3];
-    x4 = h[4];
-    x5 = h[5];
-    x6 = h[6];
-    x7 = h[7];
-
-    /* Initialisation iv  */
-
-    x8  = iv2b0;
-    x9  = iv2b1;
-    x10 = iv2b2;
-    x11 = iv2b3;
-    x12 = iv2b4 ^ lower;
-    x13 = iv2b5 ^ upper;
-    x14 = iv2b6 ^ f0;
-    x15 = iv2b7 ^ f1;
-
-    /* Load the block */
-
-    w0  = LOAD(0);
-    w1  = LOAD(1);
-    w2  = LOAD(2);
-    w3  = LOAD(3);
-    w4  = LOAD(4);
-    w5  = LOAD(5);
-    w6  = LOAD(6);
-    w7  = LOAD(7);
-    w8  = LOAD(8);
-    w9  = LOAD(9);
-    w10 = LOAD(10);
-    w11 = LOAD(11);
-    w12 = LOAD(12);
-    w13 = LOAD(13);
-    w14 = LOAD(14);
-    w15 = LOAD(15);
-
-
-    ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 0 */
-    ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 1 */
-    ROUND( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4); /* 2 */
-    ROUND(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8); /* 3 */
-    ROUND(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13); /* 4 */
-    ROUND(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9); /* 5 */
-    ROUND( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11); /* 6 */
-    ROUND( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10); /* 7 */
-    ROUND(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5); /* 8 */
-    ROUND( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0); /* 9 */
-
-
-    ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 10 */
-    ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 11 */
-
-    /* Update the hash */
-
-    h[0] ^= x0 ^ x8;
-    h[1] ^= x1 ^ x9;
-    h[2] ^= x2 ^ x10;
-    h[3] ^= x3 ^ x11;
-    h[4] ^= x4 ^ x12;
-    h[5] ^= x5 ^ x13;
-    h[6] ^= x6 ^ x14;
-    h[7] ^= x7 ^ x15;
-
-}
diff --git a/cbits/raaz/hash/blake2/blake2s/constants.h b/cbits/raaz/hash/blake2/blake2s/constants.h
deleted file mode 100644
--- a/cbits/raaz/hash/blake2/blake2s/constants.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#pragma once
-
-#include <raaz/hash/blake2/common.h>
-
-const Word2s iv2s0 = 0x6a09e667UL;
-const Word2s iv2s1 = 0xbb67ae85UL;
-const Word2s iv2s2 = 0x3c6ef372UL;
-const Word2s iv2s3 = 0xa54ff53aUL;
-const Word2s iv2s4 = 0x510e527fUL;
-const Word2s iv2s5 = 0x9b05688cUL;
-const Word2s iv2s6 = 0x1f83d9abUL;
-const Word2s iv2s7 = 0x5be0cd19UL;
diff --git a/cbits/raaz/hash/blake2/blake2s/portable.c b/cbits/raaz/hash/blake2/blake2s/portable.c
deleted file mode 100644
--- a/cbits/raaz/hash/blake2/blake2s/portable.c
+++ /dev/null
@@ -1,284 +0,0 @@
-#include <raaz/hash/blake2/common.h>
-#include <raaz/hash/blake2/blake2s/constants.h>
-
-
-static inline Word2s R(Word2s x, int i)
-{
-    return (x << (32 - i)) | (x >> i);
-}
-
-static inline Word2s  low32(Word2b x)
-{
-    return ((Word2s) x);
-}
-
-
-static inline Word2s  high32(Word2b x)
-{
-    return ((Word2s) (x >> 32));
-}
-
-# define G(a,b,c,d,m0,m1)		      \
-    {					      \
-	a += b + m0 ; d ^= a; d = R(d,16);    \
-	c += d      ; b ^= c; b = R(b,12);    \
-	a += b + m1 ; d ^= a; d = R(d,8);     \
-	c += d      ; b ^= c; b = R(b,7);     \
-    }
-
-
-/* Definitions for Blake2b */
-
-# define G0(i,j) G(x0, x4, x8,  x12, w##i, w##j);
-# define G1(i,j) G(x1, x5, x9,  x13, w##i, w##j);
-# define G2(i,j) G(x2, x6, x10, x14, w##i, w##j);
-# define G3(i,j) G(x3, x7, x11, x15, w##i, w##j);
-
-# define G4(i,j) G(x0, x5, x10, x15, w##i, w##j);
-# define G5(i,j) G(x1, x6, x11, x12, w##i, w##j);
-# define G6(i,j) G(x2, x7, x8,  x13, w##i, w##j);
-# define G7(i,j) G(x3, x4, x9,  x14, w##i, w##j);
-
-# define ROUND(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) \
-    {								      \
-	G0( i0,i1 ); G1( i2 ,i3  ); G2( i4 ,i5  ); G3( i6 ,i7  );     \
-	G4( i8,i9 ); G5( i10,i11 ); G6( i12,i13 ); G7( i14,i15 );     \
-    }
-
-
-/*
-
-This is the block compression algorithm for blake2b. Besides teh usual
-suspects there are the following additional parameters.
-
-1. upper  -- The upper 64 bits of the counter
-2. lower  -- The lower 64 bits of the counter
-3. f0, f1 -- the finalisation flag
-
-*/
-
-
-#define LOAD(i) (raaz_tole32((*mesg)[(i)]))
-
-# pragma GCC optimize "tree-vectorize"
-
-void raazHashBlake2sPortableBlockCompress( Block2s *mesg, int nblocks, Word2b length, Blake2s h)
-{
-    register Word2s x0,  x1,  x2,  x3;   /* row 0  */
-    register Word2s x4,  x5,  x6,  x7;   /* row 1  */
-    register Word2s x8,  x9,  x10, x11;  /* row 2  */
-    register Word2s x12, x13, x14, x15;  /* row 3  */
-
-    /* Input block */
-    register Word2s w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
-
-    /* Variable that contains the hash */
-    Word2s  h0, h1, h2, h3, h4, h5, h6, h7;
-
-    /* Initialisation hash */
-    h0 = h[0];
-    h1 = h[1];
-    h2 = h[2];
-    h3 = h[3];
-    h4 = h[4];
-    h5 = h[5];
-    h6 = h[6];
-    h7 = h[7];
-
-    while( nblocks > 0)
-    {
-
-	/* Initialisation hashes
-
-
-	   Normally, we would like to put the length increment at the
-	   end of the body; somewhere close to the place where we move
-	   to the next block. However, when hashing the i-th block of
-	   input, we need to set upto the initial value with the total
-	   size of data including the i-th block. So we start with an
-	   increment the length counter.
-
-	*/
-
-	length += sizeof(Block2s);
-
-
-
-	x0 = h0;
-	x1 = h1;
-	x2 = h2;
-	x3 = h3;
-	x4 = h4;
-	x5 = h5;
-	x6 = h6;
-	x7 = h7;
-
-	/* Initialisation iv  */
-
-	x8  = iv2s0;
-	x9  = iv2s1;
-	x10 = iv2s2;
-	x11 = iv2s3;
-	x12 = iv2s4 ^ low32(length);
-	x13 = iv2s5 ^ high32(length);
-	x14 = iv2s6;
-	x15 = iv2s7;
-
-	/* Load the block */
-
-	w0  = LOAD(0);
-	w1  = LOAD(1);
-	w2  = LOAD(2);
-	w3  = LOAD(3);
-	w4  = LOAD(4);
-	w5  = LOAD(5);
-	w6  = LOAD(6);
-	w7  = LOAD(7);
-	w8  = LOAD(8);
-	w9  = LOAD(9);
-	w10 = LOAD(10);
-	w11 = LOAD(11);
-	w12 = LOAD(12);
-	w13 = LOAD(13);
-	w14 = LOAD(14);
-	w15 = LOAD(15);
-
-
-	ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 0 */
-	ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 1 */
-	ROUND( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4); /* 2 */
-	ROUND(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8); /* 3 */
-	ROUND(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13); /* 4 */
-	ROUND(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9); /* 5 */
-	ROUND( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11); /* 6 */
-	ROUND( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10); /* 7 */
-	ROUND(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5); /* 8 */
-	ROUND( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0); /* 9 */
-
-
-	/* Update the hash */
-
-	h0 ^= x0 ^ x8;
-	h1 ^= x1 ^ x9;
-	h2 ^= x2 ^ x10;
-	h3 ^= x3 ^ x11;
-	h4 ^= x4 ^ x12;
-	h5 ^= x5 ^ x13;
-	h6 ^= x6 ^ x14;
-	h7 ^= x7 ^ x15;
-
-	/* Move to the next block */
-	--nblocks; ++mesg;
-
-    }
-
-    h[0] = h0;
-    h[1] = h1;
-    h[2] = h2;
-    h[3] = h3;
-    h[4] = h4;
-    h[5] = h5;
-    h[6] = h6;
-    h[7] = h7;
-
-}
-
-
-/* This is the function for compressing the last block. The nbytes should be <= block size */
-
-#undef LOAD
-#define LOAD(i) (raaz_tole32(mesg[(i)]))
-
-void raazHashBlake2sPortableLastBlock( Block2s mesg, int nbytes,
-				       Word2b length,
-				       Word2s f0 , Word2s f1,
-				       Blake2s h)
-{
-
-    register Word2s x0,  x1,  x2,  x3;  /* row 0  */
-    register Word2s x4,  x5,  x6,  x7;  /* row 1  */
-    register Word2s x8,  x9,  x10, x11;  /* row 2  */
-    register Word2s x12, x13, x14, x15;  /* row 3  */
-
-    /* Input block */
-    register Word2s w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
-
-    /* Variable that contains the hash */
-    Word2s  h0, h1, h2, h3, h4, h5, h6, h7;
-
-    /* Initialisation hashes
-
-       The increment is here for the same reason as in the block
-       compression function.
-
-    */
-
-
-    length += nbytes;
-
-
-    x0 = h[0];
-    x1 = h[1];
-    x2 = h[2];
-    x3 = h[3];
-    x4 = h[4];
-    x5 = h[5];
-    x6 = h[6];
-    x7 = h[7];
-
-    /* Initialisation iv  */
-
-    x8  = iv2s0;
-    x9  = iv2s1;
-    x10 = iv2s2;
-    x11 = iv2s3;
-    x12 = iv2s4 ^ low32(length);
-    x13 = iv2s5 ^ high32(length);
-    x14 = iv2s6 ^ f0;
-    x15 = iv2s7 ^ f1;
-
-    /* Load the block */
-
-    w0  = LOAD(0);
-    w1  = LOAD(1);
-    w2  = LOAD(2);
-    w3  = LOAD(3);
-    w4  = LOAD(4);
-    w5  = LOAD(5);
-    w6  = LOAD(6);
-    w7  = LOAD(7);
-    w8  = LOAD(8);
-    w9  = LOAD(9);
-    w10 = LOAD(10);
-    w11 = LOAD(11);
-    w12 = LOAD(12);
-    w13 = LOAD(13);
-    w14 = LOAD(14);
-    w15 = LOAD(15);
-
-
-    ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 0 */
-    ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 1 */
-    ROUND( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4); /* 2 */
-    ROUND(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8); /* 3 */
-    ROUND(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13); /* 4 */
-    ROUND(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9); /* 5 */
-    ROUND( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11); /* 6 */
-    ROUND( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10); /* 7 */
-    ROUND(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5); /* 8 */
-    ROUND( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0); /* 9 */
-
-
-
-    /* Update the hash */
-
-    h[0] ^= x0 ^ x8;
-    h[1] ^= x1 ^ x9;
-    h[2] ^= x2 ^ x10;
-    h[3] ^= x3 ^ x11;
-    h[4] ^= x4 ^ x12;
-    h[5] ^= x5 ^ x13;
-    h[6] ^= x6 ^ x14;
-    h[7] ^= x7 ^ x15;
-
-}
diff --git a/cbits/raaz/hash/blake2/common.h b/cbits/raaz/hash/blake2/common.h
deleted file mode 100644
--- a/cbits/raaz/hash/blake2/common.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-
-#include <raaz/core/endian.h>
-#include <stdint.h>
-
-#define HASH_SIZE  8
-#define BLOCK_SIZE 16
-
-typedef uint64_t Word2b;  /* basic unit for blake2b */
-typedef uint32_t Word2s;  /* basic unit for blake2s */
-
-
-typedef Word2b Blake2b[HASH_SIZE];
-typedef Word2b Block2b[BLOCK_SIZE];
-
-typedef Word2s Blake2s[HASH_SIZE];
-typedef Word2s Block2s[BLOCK_SIZE];
diff --git a/cbits/raaz/hash/sha1/portable.c b/cbits/raaz/hash/sha1/portable.c
deleted file mode 100644
--- a/cbits/raaz/hash/sha1/portable.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
-
-Portable C implementation of SHA1 hashing. The implementation is part
-of the raaz cryptographic network library and is not meant to be used
-as a standalone sha1 function.
-
-Copyright (c) 2012, Piyush P Kurur
-
-All rights reserved.
-
-This software is distributed under the terms and conditions of the
-BSD3 license. See the accompanying file LICENSE for exact terms and
-condition.
-
-*/
-
-#include <raaz/core/endian.h>
-#include <stdint.h>
-
-typedef uint32_t   Word;  /* basic unit of sha1 hash    */
-#define HASH_SIZE  5      /* Number of words in a Hash  */
-#define BLOCK_SIZE 16     /* Number of words in a block */
-
-
-typedef Word Hash [ HASH_SIZE  ];
-typedef Word Block[ BLOCK_SIZE ];
-
-void raazHashSha1PortableCompress(Block *mesg, int nblocks, Hash hash);
-
-/* WARNING: Macro variables not protected use only simple
- * expressions.
- *
- * Notes to Developers: Lot of the code is just repetative loop
- * unrollings.  The comment after these blocks contain elisp macros
- * that generate them (with some tweaks). Preserve these of ease of
- * updating the code.
- *
-*/
-
-#define RotateL(x,n)  ((x << n)  | (x >> (32 - (n))))
-#define RotL30(x)    ((x << 30) | (x >> 2))
-#define RotL1(x)     ((x << 1)  | (x >> 31))
-#define RotL5(x)     ((x << 5)  | (x >> 27))
-
-/* The round constants */
-#define K0  0x5a827999
-#define K20 0x6ed9eba1
-#define K40 0x8f1bbcdc
-#define K60 0xca62c1d6
-
-/* The round functions */
-#define F0(x,y,z)  CH(x,y,z)
-#define F20(x,y,z) PARITY(x,y,z)
-#define F40(x,y,z) MAJ(x,y,z)
-#define F60(x,y,z) PARITY(x,y,z)
-
-#define CH(x,y,z)     ((x & y) ^ (~x & z))
-#define PARITY(x,y,z) (x^y^z)
-#define MAJ(x,y,z)    ((x & (y | z)) | (y & z))
-
-/* One step in the hash function
-
-   a'  = (rotateL a 5 + (f t) b c d + e + k t + w0)
-   b'  = a
-   c'  = rotateL b 30
-   d'  = c
-   e'  = d
-
-Notice the values of a,c,d are carried over but b and e gets updated.
-
-*/
-
-
-#define Step(a,b,c,d,e,w)                       \
-    {                                           \
-        e += RotL5(a) + F(b,c,d) + K + w;       \
-        b =  RotL30(b);                         \
-    }                                           \
-
-/* Message scheduling is done as
-
-   w16 = rotateL (w13 `xor` w8 `xor` w2 `xor` w0) 1
-
-*/
-
-/* Message scheduling */
-#define SCHEDULE                                        \
-    {                                                   \
-        w0 ^= w13 ^ w8 ^ w2; w0  = RotL1(w0);           \
-        w1 ^= w14 ^ w9 ^ w3; w1  = RotL1(w1);           \
-        w2 ^= w15 ^ w10 ^ w4; w2  = RotL1(w2);          \
-        w3 ^= w0 ^ w11 ^ w5; w3  = RotL1(w3);           \
-        w4 ^= w1 ^ w12 ^ w6; w4  = RotL1(w4);           \
-        w5 ^= w2 ^ w13 ^ w7; w5  = RotL1(w5);           \
-        w6 ^= w3 ^ w14 ^ w8; w6  = RotL1(w6);           \
-        w7 ^= w4 ^ w15 ^ w9; w7  = RotL1(w7);           \
-        w8 ^= w5 ^ w0 ^ w10; w8  = RotL1(w8);           \
-        w9 ^= w6 ^ w1 ^ w11; w9  = RotL1(w9);           \
-        w10 ^= w7 ^ w2 ^ w12; w10  = RotL1(w10);        \
-        w11 ^= w8 ^ w3 ^ w13; w11  = RotL1(w11);        \
-        w12 ^= w9 ^ w4 ^ w14; w12  = RotL1(w12);        \
-        w13 ^= w10 ^ w5 ^ w15; w13  = RotL1(w13);       \
-        w14 ^= w11 ^ w6 ^ w0; w14  = RotL1(w14);        \
-        w15 ^= w12 ^ w7 ^ w1; w15  = RotL1(w15);        \
-    }
-
-/*
-  (dotimes (i 16)
-    (setq j (% (+ i 13) 16))
-    (setq k (% (+ i 8)  16))
-    (setq l (% (+ i 2)  16))
-    (insert (format "w%d ^= w%d ^ w%d ^ w%d; " i j k l))
-    (insert (format "w%d  = RotL1(w%d);\\\n" i i)))
-*/
-
-
-/*
-
-   This is the compress routine of sha1. It is safe in the sense that
-   it does not overwrite the message. However, it does overwrite the
-   hash array.
-
-*/
-
-void raazHashSha1PortableCompress(Block *mesg, int nblocks, Hash hash)
-{
-
-    register Word a,b,c,d,e; /* Stores the hash state  */
-
-    /*
-      The message variables:
-
-      (dotimes (i 16)(insert (format "Word w%d;\n" i)))
-
-      Why not an array? Memory wise these two will be more or less
-      same as local arrays will be allocated on stack. However in
-      machines with a large number of general purpose registers the
-      compiler has a chance of allocating all of them to registers
-      making them faster. It might also improve cache hits.
-
-    */
-
-    Word w0;
-    Word w1;
-    Word w2;
-    Word w3;
-    Word w4;
-    Word w5;
-    Word w6;
-    Word w7;
-    Word w8;
-    Word w9;
-    Word w10;
-    Word w11;
-    Word w12;
-    Word w13;
-    Word w14;
-    Word w15;
-
-    while (nblocks > 0)
-    {
-        /* initialisation of the hash state */
-        a = hash[0]; b = hash[1]; c = hash[2]; d = hash[3]; e = hash[4];
-
-        /* Reading in the message
-
-           (dotimes (i 16)
-             (insert (format "w%d = raazLoad32BE( (Word *) mesg, %d);\n" i i)))
-
-        */
-# define      LOAD(i) raaz_tobe32((*mesg)[i])
-        w0  = LOAD(0);
-        w1  = LOAD(1);
-        w2  = LOAD(2);
-        w3  = LOAD(3);
-        w4  = LOAD(4);
-        w5  = LOAD(5);
-        w6  = LOAD(6);
-        w7  = LOAD(7);
-        w8  = LOAD(8);
-        w9  = LOAD(9);
-        w10 = LOAD(10);
-        w11 = LOAD(11);
-        w12 = LOAD(12);
-        w13 = LOAD(13);
-        w14 = LOAD(14);
-        w15 = LOAD(15);
-
-#undef LOAD
-        /* End of reading the message */
-
-#undef K
-#undef F
-#define K K0
-#define F F0
-
-        /* 0-4 */
-        Step(a,b,c,d,e,w0 );
-        Step(e,a,b,c,d,w1 );
-        Step(d,e,a,b,c,w2 );
-        Step(c,d,e,a,b,w3 );
-        Step(b,c,d,e,a,w4 );
-
-        /* 5-9 */
-        Step(a,b,c,d,e,w5 );
-        Step(e,a,b,c,d,w6 );
-        Step(d,e,a,b,c,w7 );
-        Step(c,d,e,a,b,w8 );
-        Step(b,c,d,e,a,w9 );
-
-        /* 10-14 */
-        Step(a,b,c,d,e,w10);
-        Step(e,a,b,c,d,w11);
-        Step(d,e,a,b,c,w12);
-        Step(c,d,e,a,b,w13);
-        Step(b,c,d,e,a,w14);
-
-        /* 15-19 */
-        Step(a,b,c,d,e,w15); SCHEDULE;
-        Step(e,a,b,c,d,w0 );
-        Step(d,e,a,b,c,w1 );
-        Step(c,d,e,a,b,w2 );
-        Step(b,c,d,e,a,w3 );
-
-#undef K
-#undef F
-#define K K20
-#define F F20
-
-        /* 20-24 */
-        Step(a,b,c,d,e,w4 );
-        Step(e,a,b,c,d,w5 );
-        Step(d,e,a,b,c,w6 );
-        Step(c,d,e,a,b,w7 );
-        Step(b,c,d,e,a,w8 );
-
-        /* 25-29 */
-        Step(a,b,c,d,e,w9 );
-        Step(e,a,b,c,d,w10);
-        Step(d,e,a,b,c,w11);
-        Step(c,d,e,a,b,w12);
-        Step(b,c,d,e,a,w13);
-
-        /* 30-34 */
-        Step(a,b,c,d,e,w14);
-        Step(e,a,b,c,d,w15); SCHEDULE;
-        Step(d,e,a,b,c,w0 );
-        Step(c,d,e,a,b,w1 );
-        Step(b,c,d,e,a,w2 );
-
-        /* 35-39 */
-        Step(a,b,c,d,e,w3 );
-        Step(e,a,b,c,d,w4 );
-        Step(d,e,a,b,c,w5 );
-        Step(c,d,e,a,b,w6 );
-        Step(b,c,d,e,a,w7 );
-
-#undef K
-#undef F
-#define K K40
-#define F F40
-
-        /* 40-44 */
-
-        Step(a,b,c,d,e,w8 );
-        Step(e,a,b,c,d,w9 );
-        Step(d,e,a,b,c,w10);
-        Step(c,d,e,a,b,w11);
-        Step(b,c,d,e,a,w12);
-
-        /* 45-49 */
-        Step(a,b,c,d,e,w13);
-        Step(e,a,b,c,d,w14);
-        Step(d,e,a,b,c,w15); SCHEDULE;
-        Step(c,d,e,a,b,w0 );
-        Step(b,c,d,e,a,w1 );
-
-        /* 50-54 */
-        Step(a,b,c,d,e,w2 );
-        Step(e,a,b,c,d,w3 );
-        Step(d,e,a,b,c,w4 );
-        Step(c,d,e,a,b,w5 );
-        Step(b,c,d,e,a,w6 );
-
-        /* 55-59 */
-        Step(a,b,c,d,e,w7 );
-        Step(e,a,b,c,d,w8 );
-        Step(d,e,a,b,c,w9 );
-        Step(c,d,e,a,b,w10);
-        Step(b,c,d,e,a,w11);
-
-#undef K
-#undef F
-#define K K60
-#define F F60
-
-        /* 60-64 */
-        Step(a,b,c,d,e,w12);
-        Step(e,a,b,c,d,w13);
-        Step(d,e,a,b,c,w14);
-        Step(c,d,e,a,b,w15); SCHEDULE;
-        Step(b,c,d,e,a,w0 );
-
-        /* 65-69 */
-        Step(a,b,c,d,e,w1 );
-        Step(e,a,b,c,d,w2 );
-        Step(d,e,a,b,c,w3 );
-        Step(c,d,e,a,b,w4 );
-        Step(b,c,d,e,a,w5 );
-
-        /* 70-74 */
-        Step(a,b,c,d,e,w6 );
-        Step(e,a,b,c,d,w7 );
-        Step(d,e,a,b,c,w8 );
-        Step(c,d,e,a,b,w9 );
-        Step(b,c,d,e,a,w10);
-
-        /* 75-79 */
-        Step(a,b,c,d,e,w11);
-        Step(e,a,b,c,d,w12);
-        Step(d,e,a,b,c,w13);
-        Step(c,d,e,a,b,w14);
-        Step(b,c,d,e,a,w15);
-
-        /* Update the hash */
-        hash[0] += a;
-        hash[1] += b;
-        hash[2] += c;
-        hash[3] += d;
-        hash[4] += e;
-
-        /* Move to next block */
-        --nblocks; ++mesg;
-    }
-    return;
-}
diff --git a/cbits/raaz/hash/sha256/portable.c b/cbits/raaz/hash/sha256/portable.c
deleted file mode 100644
--- a/cbits/raaz/hash/sha256/portable.c
+++ /dev/null
@@ -1,337 +0,0 @@
-/*
-
-Portable C implementation of SHA256 hashing. The implementation is
-part of the raaz cryptographic network library and is not meant to be
-used as a standalone sha256 function.
-
-Copyright (c) 2012, Piyush P Kurur and Satvik Chauhan
-
-All rights reserved.
-
-This software is distributed under the terms and conditions of the
-BSD3 license. See the accompanying file LICENSE for exact terms and
-condition.
-
-*/
-
-#include <raaz/core/endian.h>
-#include <stdint.h>
-
-typedef uint32_t   Word;  /* basic unit of sha256 hash  */
-#define HASH_SIZE  8      /* Number of words in a Hash  */
-#define BLOCK_SIZE 16     /* Number of words in a block */
-
-typedef Word Hash [ HASH_SIZE  ];
-typedef Word Block[ BLOCK_SIZE ];
-
-void raazHashSha256PortableCompress(Block *mesg, int nblocks, Hash h);
-
-/* WARNING: Macro variables not protected use only simple
- * expressions.
- *
- * Notes to Developers: Lot of the code is just repetative loop
- * unrollings.  The comment after these blocks contain elisp macros
- * that generate them (with some tweaks). Preserve these of ease of
- * updating the code.
- *
-*/
-
-#define RotateL(x,n)  ((x << n)  | (x >> (32 - (n))))
-#define RotateR(x,n)  ((x >> n)  | (x << (32 - (n))))
-#define ShiftR(x,n)   (x >> n)
-
-/* The round constants */
-
-#define K0 0x428a2f98
-#define K1 0x71374491
-#define K2 0xb5c0fbcf
-#define K3 0xe9b5dba5
-#define K4 0x3956c25b
-#define K5 0x59f111f1
-#define K6 0x923f82a4
-#define K7 0xab1c5ed5
-#define K8 0xd807aa98
-#define K9 0x12835b01
-#define K10 0x243185be
-#define K11 0x550c7dc3
-#define K12 0x72be5d74
-#define K13 0x80deb1fe
-#define K14 0x9bdc06a7
-#define K15 0xc19bf174
-#define K16 0xe49b69c1
-#define K17 0xefbe4786
-#define K18 0x0fc19dc6
-#define K19 0x240ca1cc
-#define K20 0x2de92c6f
-#define K21 0x4a7484aa
-#define K22 0x5cb0a9dc
-#define K23 0x76f988da
-#define K24 0x983e5152
-#define K25 0xa831c66d
-#define K26 0xb00327c8
-#define K27 0xbf597fc7
-#define K28 0xc6e00bf3
-#define K29 0xd5a79147
-#define K30 0x06ca6351
-#define K31 0x14292967
-#define K32 0x27b70a85
-#define K33 0x2e1b2138
-#define K34 0x4d2c6dfc
-#define K35 0x53380d13
-#define K36 0x650a7354
-#define K37 0x766a0abb
-#define K38 0x81c2c92e
-#define K39 0x92722c85
-#define K40 0xa2bfe8a1
-#define K41 0xa81a664b
-#define K42 0xc24b8b70
-#define K43 0xc76c51a3
-#define K44 0xd192e819
-#define K45 0xd6990624
-#define K46 0xf40e3585
-#define K47 0x106aa070
-#define K48 0x19a4c116
-#define K49 0x1e376c08
-#define K50 0x2748774c
-#define K51 0x34b0bcb5
-#define K52 0x391c0cb3
-#define K53 0x4ed8aa4a
-#define K54 0x5b9cca4f
-#define K55 0x682e6ff3
-#define K56 0x748f82ee
-#define K57 0x78a5636f
-#define K58 0x84c87814
-#define K59 0x8cc70208
-#define K60 0x90befffa
-#define K61 0xa4506ceb
-#define K62 0xbef9a3f7
-#define K63 0xc67178f2
-
-/* The round functions */
-#define CH(x,y,z)     ((x & y) ^ (~x & z))
-#define MAJ(x,y,z)    ((x & (y | z)) | (y & z))
-
-#define SIGB0(x)     (RotateR(x,2) ^ RotateR(x,13) ^ RotateR(x,22))
-#define SIGB1(x)     (RotateR(x,6) ^ RotateR(x,11) ^ RotateR(x,25))
-#define SIGS0(x)     (RotateR(x,7) ^ RotateR(x,18) ^ ShiftR(x,3))
-#define SIGS1(x)     (RotateR(x,17) ^ RotateR(x,19) ^ ShiftR(x,10))
-
-/* One step in the hash function
-
-    t1 = h + SIGB1 e + CH e f g + k t + w t
-    t2 = SIGB0 a + MAJ a b c
-    a' = t1 + t2
-    b' = a
-    c' = b
-    d' = c
-    e' = d + t1
-    f' = e
-    g' = f
-    h' = g
-
-Notice the values of a,b,c,e,f,g are carried over but d and h gets updated.
-
-*/
-
-#define Step(a,b,c,d,e,f,g,h,w,k)                 \
-    {                                             \
-        temp = h + SIGB1(e) + CH(e,f,g) + k + w;  \
-        d   += temp;                              \
-        h    = temp + SIGB0(a) + MAJ(a,b,c);      \
-    }
-
-/* Message scheduling is done as
-
-   w16 = SIGS1(w14) + w9 + SIGS0(w1) + w0
-
-*/
-
-/* Message scheduling
-
-  (dotimes (i 16)
-    (setq j (% (+ i 14) 16))
-    (setq k (% (+ i 9)  16))
-    (setq l (% (+ i 1)  16))
-    (insert (format "\t\t\tw%d += SIGS1(w%d) + w%d + SIGS0(w%d); \\\n" i j k l)))
-
-*/
-
-#define SCHEDULE                                        \
-    {                                                   \
-      w0 += SIGS1(w14) + w9 + SIGS0(w1);                \
-      w1 += SIGS1(w15) + w10 + SIGS0(w2);               \
-      w2 += SIGS1(w0) + w11 + SIGS0(w3);                \
-      w3 += SIGS1(w1) + w12 + SIGS0(w4);                \
-      w4 += SIGS1(w2) + w13 + SIGS0(w5);                \
-      w5 += SIGS1(w3) + w14 + SIGS0(w6);                \
-      w6 += SIGS1(w4) + w15 + SIGS0(w7);                \
-      w7 += SIGS1(w5) + w0 + SIGS0(w8);                 \
-      w8 += SIGS1(w6) + w1 + SIGS0(w9);                 \
-      w9 += SIGS1(w7) + w2 + SIGS0(w10);                \
-      w10 += SIGS1(w8) + w3 + SIGS0(w11);               \
-      w11 += SIGS1(w9) + w4 + SIGS0(w12);               \
-      w12 += SIGS1(w10) + w5 + SIGS0(w13);              \
-      w13 += SIGS1(w11) + w6 + SIGS0(w14);              \
-      w14 += SIGS1(w12) + w7 + SIGS0(w15);              \
-      w15 += SIGS1(w13) + w8 + SIGS0(w0);               \
-    }
-
-/*
-
-   This is the compress routine of sha256. It is safe in the sense
-   that it does not overwrite the message. However, it does overwrite
-   the hash array.
-
-*/
-
-void raazHashSha256PortableCompress(Block *mesg, int nblocks, Hash hash)
-{
-
-    register Word a,b,c,d,e,f,g,h; /* Stores the hash state  */
-
-    register Word temp;            /* A temproray variable   */
-    /*
-      The message variables:
-
-      (dotimes (i 16)(insert (format "\t\tWord w%d;\n" i)))
-
-      Why not an array? Memory wise these two will be more or less
-      same as local arrays will be allocated on stack. However in
-      machines with a large number of general purpose registers the
-      compiler has a chance of allocating all of them to registers
-      making them faster. It might also improve cache hits.
-
-    */
-
-    Word w0;
-    Word w1;
-    Word w2;
-    Word w3;
-    Word w4;
-    Word w5;
-    Word w6;
-    Word w7;
-    Word w8;
-    Word w9;
-    Word w10;
-    Word w11;
-    Word w12;
-    Word w13;
-    Word w14;
-    Word w15;
-
-    /* Looping over all the blocks */
-    while (nblocks > 0)
-    {
-        /* initialisation of the hash state */
-        a = hash[0]; b = hash[1]; c = hash[2]; d = hash[3]; e = hash[4];
-        f = hash[5]; g = hash[6]; h = hash[7];
-
-        /* Reading in the message
-
-           (dotimes (i 16)
-             (insert (format "\t\t\t\tw%d = raazLoad32BE( (Word *) mesg, %d);\n" i i)))
-
-        */
-# define      LOAD(i) raaz_tobe32((*mesg)[i])
-        w0  = LOAD(0);
-        w1  = LOAD(1);
-        w2  = LOAD(2);
-        w3  = LOAD(3);
-        w4  = LOAD(4);
-        w5  = LOAD(5);
-        w6  = LOAD(6);
-        w7  = LOAD(7);
-        w8  = LOAD(8);
-        w9  = LOAD(9);
-        w10 = LOAD(10);
-        w11 = LOAD(11);
-        w12 = LOAD(12);
-        w13 = LOAD(13);
-        w14 = LOAD(14);
-        w15 = LOAD(15);
-
-# undef LOAD
-        /* End of reading the message */
-
-        /* 0-63 */
-        Step(a,b,c,d,e,f,g,h,w0,K0);
-        Step(h,a,b,c,d,e,f,g,w1,K1);
-        Step(g,h,a,b,c,d,e,f,w2,K2);
-        Step(f,g,h,a,b,c,d,e,w3,K3);
-        Step(e,f,g,h,a,b,c,d,w4,K4);
-        Step(d,e,f,g,h,a,b,c,w5,K5);
-        Step(c,d,e,f,g,h,a,b,w6,K6);
-        Step(b,c,d,e,f,g,h,a,w7,K7);
-        Step(a,b,c,d,e,f,g,h,w8,K8);
-        Step(h,a,b,c,d,e,f,g,w9,K9);
-        Step(g,h,a,b,c,d,e,f,w10,K10);
-        Step(f,g,h,a,b,c,d,e,w11,K11);
-        Step(e,f,g,h,a,b,c,d,w12,K12);
-        Step(d,e,f,g,h,a,b,c,w13,K13);
-        Step(c,d,e,f,g,h,a,b,w14,K14);
-        Step(b,c,d,e,f,g,h,a,w15,K15); SCHEDULE;
-        Step(a,b,c,d,e,f,g,h,w0,K16);
-        Step(h,a,b,c,d,e,f,g,w1,K17);
-        Step(g,h,a,b,c,d,e,f,w2,K18);
-        Step(f,g,h,a,b,c,d,e,w3,K19);
-        Step(e,f,g,h,a,b,c,d,w4,K20);
-        Step(d,e,f,g,h,a,b,c,w5,K21);
-        Step(c,d,e,f,g,h,a,b,w6,K22);
-        Step(b,c,d,e,f,g,h,a,w7,K23);
-        Step(a,b,c,d,e,f,g,h,w8,K24);
-        Step(h,a,b,c,d,e,f,g,w9,K25);
-        Step(g,h,a,b,c,d,e,f,w10,K26);
-        Step(f,g,h,a,b,c,d,e,w11,K27);
-        Step(e,f,g,h,a,b,c,d,w12,K28);
-        Step(d,e,f,g,h,a,b,c,w13,K29);
-        Step(c,d,e,f,g,h,a,b,w14,K30);
-        Step(b,c,d,e,f,g,h,a,w15,K31); SCHEDULE;
-        Step(a,b,c,d,e,f,g,h,w0,K32);
-        Step(h,a,b,c,d,e,f,g,w1,K33);
-        Step(g,h,a,b,c,d,e,f,w2,K34);
-        Step(f,g,h,a,b,c,d,e,w3,K35);
-        Step(e,f,g,h,a,b,c,d,w4,K36);
-        Step(d,e,f,g,h,a,b,c,w5,K37);
-        Step(c,d,e,f,g,h,a,b,w6,K38);
-        Step(b,c,d,e,f,g,h,a,w7,K39);
-        Step(a,b,c,d,e,f,g,h,w8,K40);
-        Step(h,a,b,c,d,e,f,g,w9,K41);
-        Step(g,h,a,b,c,d,e,f,w10,K42);
-        Step(f,g,h,a,b,c,d,e,w11,K43);
-        Step(e,f,g,h,a,b,c,d,w12,K44);
-        Step(d,e,f,g,h,a,b,c,w13,K45);
-        Step(c,d,e,f,g,h,a,b,w14,K46);
-        Step(b,c,d,e,f,g,h,a,w15,K47); SCHEDULE;
-        Step(a,b,c,d,e,f,g,h,w0,K48);
-        Step(h,a,b,c,d,e,f,g,w1,K49);
-        Step(g,h,a,b,c,d,e,f,w2,K50);
-        Step(f,g,h,a,b,c,d,e,w3,K51);
-        Step(e,f,g,h,a,b,c,d,w4,K52);
-        Step(d,e,f,g,h,a,b,c,w5,K53);
-        Step(c,d,e,f,g,h,a,b,w6,K54);
-        Step(b,c,d,e,f,g,h,a,w7,K55);
-        Step(a,b,c,d,e,f,g,h,w8,K56);
-        Step(h,a,b,c,d,e,f,g,w9,K57);
-        Step(g,h,a,b,c,d,e,f,w10,K58);
-        Step(f,g,h,a,b,c,d,e,w11,K59);
-        Step(e,f,g,h,a,b,c,d,w12,K60);
-        Step(d,e,f,g,h,a,b,c,w13,K61);
-        Step(c,d,e,f,g,h,a,b,w14,K62);
-        Step(b,c,d,e,f,g,h,a,w15,K63);
-
-        /* Update the hash */
-        hash[0] += a;
-        hash[1] += b;
-        hash[2] += c;
-        hash[3] += d;
-        hash[4] += e;
-        hash[5] += f;
-        hash[6] += g;
-        hash[7] += h;
-
-        /* Move to next block */
-        --nblocks; ++mesg;
-    }
-    return;
-}
diff --git a/cbits/raaz/hash/sha512/portable.c b/cbits/raaz/hash/sha512/portable.c
deleted file mode 100644
--- a/cbits/raaz/hash/sha512/portable.c
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
-
-Portable C implementation of SHA512 hashing. The implementation is
-part of the raaz cryptographic network library and is not meant to be
-used as a standalone sha512 function.
-
-Copyright (c) 2012, Piyush P Kurur and Satvik Chauhan
-
-All rights reserved.
-
-This software is distributed under the terms and conditions of the
-BSD3 license. See the accompanying file LICENSE for exact terms and
-condition.
-
-*/
-
-#include <raaz/core/endian.h>
-#include <stdint.h>
-
-typedef uint64_t   Word;  /* basic unit of sha512 hash  */
-#define HASH_SIZE  8      /* Number of words in a Hash  */
-#define BLOCK_SIZE 16     /* Number of words in a block */
-
-typedef Word Hash [ HASH_SIZE  ];
-typedef Word Block[ BLOCK_SIZE ];
-
-void raazHashSha512PortableCompress(Block *mesg, int nblocks, Hash hash);
-
-/* WARNING: Macro variables not protected use only simple
- * expressions.
- *
- * Notes to Developers: Lot of the code is just repetative loop
- * unrollings.  The comment after these blocks contain elisp macros
- * that generate them (with some tweaks). Preserve these of ease of
- * updating the code.
- *
-*/
-
-#define RotateL(x,n)  ((x << n)  | (x >> (64 - (n))))
-#define RotateR(x,n)  ((x >> n)  | (x << (64 - (n))))
-#define ShiftR(x,n)   ( x >> n )
-
-/* The round constants */
-
-#define K0 0x428a2f98d728ae22
-#define K1 0x7137449123ef65cd
-#define K2 0xb5c0fbcfec4d3b2f
-#define K3 0xe9b5dba58189dbbc
-#define K4 0x3956c25bf348b538
-#define K5 0x59f111f1b605d019
-#define K6 0x923f82a4af194f9b
-#define K7 0xab1c5ed5da6d8118
-#define K8 0xd807aa98a3030242
-#define K9 0x12835b0145706fbe
-#define K10 0x243185be4ee4b28c
-#define K11 0x550c7dc3d5ffb4e2
-#define K12 0x72be5d74f27b896f
-#define K13 0x80deb1fe3b1696b1
-#define K14 0x9bdc06a725c71235
-#define K15 0xc19bf174cf692694
-#define K16 0xe49b69c19ef14ad2
-#define K17 0xefbe4786384f25e3
-#define K18 0x0fc19dc68b8cd5b5
-#define K19 0x240ca1cc77ac9c65
-#define K20 0x2de92c6f592b0275
-#define K21 0x4a7484aa6ea6e483
-#define K22 0x5cb0a9dcbd41fbd4
-#define K23 0x76f988da831153b5
-#define K24 0x983e5152ee66dfab
-#define K25 0xa831c66d2db43210
-#define K26 0xb00327c898fb213f
-#define K27 0xbf597fc7beef0ee4
-#define K28 0xc6e00bf33da88fc2
-#define K29 0xd5a79147930aa725
-#define K30 0x06ca6351e003826f
-#define K31 0x142929670a0e6e70
-#define K32 0x27b70a8546d22ffc
-#define K33 0x2e1b21385c26c926
-#define K34 0x4d2c6dfc5ac42aed
-#define K35 0x53380d139d95b3df
-#define K36 0x650a73548baf63de
-#define K37 0x766a0abb3c77b2a8
-#define K38 0x81c2c92e47edaee6
-#define K39 0x92722c851482353b
-#define K40 0xa2bfe8a14cf10364
-#define K41 0xa81a664bbc423001
-#define K42 0xc24b8b70d0f89791
-#define K43 0xc76c51a30654be30
-#define K44 0xd192e819d6ef5218
-#define K45 0xd69906245565a910
-#define K46 0xf40e35855771202a
-#define K47 0x106aa07032bbd1b8
-#define K48 0x19a4c116b8d2d0c8
-#define K49 0x1e376c085141ab53
-#define K50 0x2748774cdf8eeb99
-#define K51 0x34b0bcb5e19b48a8
-#define K52 0x391c0cb3c5c95a63
-#define K53 0x4ed8aa4ae3418acb
-#define K54 0x5b9cca4f7763e373
-#define K55 0x682e6ff3d6b2b8a3
-#define K56 0x748f82ee5defb2fc
-#define K57 0x78a5636f43172f60
-#define K58 0x84c87814a1f0ab72
-#define K59 0x8cc702081a6439ec
-#define K60 0x90befffa23631e28
-#define K61 0xa4506cebde82bde9
-#define K62 0xbef9a3f7b2c67915
-#define K63 0xc67178f2e372532b
-#define K64 0xca273eceea26619c
-#define K65 0xd186b8c721c0c207
-#define K66 0xeada7dd6cde0eb1e
-#define K67 0xf57d4f7fee6ed178
-#define K68 0x06f067aa72176fba
-#define K69 0x0a637dc5a2c898a6
-#define K70 0x113f9804bef90dae
-#define K71 0x1b710b35131c471b
-#define K72 0x28db77f523047d84
-#define K73 0x32caab7b40c72493
-#define K74 0x3c9ebe0a15c9bebc
-#define K75 0x431d67c49c100d4c
-#define K76 0x4cc5d4becb3e42b6
-#define K77 0x597f299cfc657e2a
-#define K78 0x5fcb6fab3ad6faec
-#define K79 0x6c44198c4a475817
-
-/* The round functions */
-#define CH(x,y,z)     ((x & y) ^ (~x & z))
-#define MAJ(x,y,z)    ((x & (y | z)) | (y & z))
-
-#define SIGB0(x)     (RotateR(x,28) ^ RotateR(x,34) ^ RotateR(x,39))
-#define SIGB1(x)     (RotateR(x,14) ^ RotateR(x,18) ^ RotateR(x,41))
-#define SIGS0(x)     (RotateR(x,1) ^ RotateR(x,8) ^ ShiftR(x,7))
-#define SIGS1(x)     (RotateR(x,19) ^ RotateR(x,61) ^ ShiftR(x,6))
-
-/* One step in the hash function
-
-    t1 = h + SIGB1 e + CH e f g + k t + w t
-    t2 = SIGB0 a + MAJ a b c
-    a' = t1 + t2
-    b' = a
-    c' = b
-    d' = c
-    e' = d + t1
-    f' = e
-    g' = f
-    h' = g
-
-Notice the values of a,b,c,e,f,g are carried over but d and h gets updated.
-
-*/
-
-#define Step(a,b,c,d,e,f,g,h,w,k)                 \
-    {                                             \
-        temp = h + SIGB1(e) + CH(e,f,g) + k + w;  \
-        d   += temp;                              \
-        h    = temp + SIGB0(a) + MAJ(a,b,c);      \
-    }
-
-/* Message scheduling is done as
-
-   w16 = SIGS1(w14) + w9 + SIGS0(w1) + w0
-
-*/
-
-/* Message scheduling
-
-  (dotimes (i 16)
-    (setq j (% (+ i 14) 16))
-    (setq k (% (+ i 9)  16))
-    (setq l (% (+ i 1)  16))
-    (insert (format "\t\t\tw%d += SIGS1(w%d) + w%d + SIGS0(w%d);\\\n" i j k l)))
-
-*/
-
-#define SCHEDULE                                        \
-    {                                                   \
-      w0 += SIGS1(w14) + w9 + SIGS0(w1);                \
-      w1 += SIGS1(w15) + w10 + SIGS0(w2);               \
-      w2 += SIGS1(w0) + w11 + SIGS0(w3);                \
-      w3 += SIGS1(w1) + w12 + SIGS0(w4);                \
-      w4 += SIGS1(w2) + w13 + SIGS0(w5);                \
-      w5 += SIGS1(w3) + w14 + SIGS0(w6);                \
-      w6 += SIGS1(w4) + w15 + SIGS0(w7);                \
-      w7 += SIGS1(w5) + w0 + SIGS0(w8);                 \
-      w8 += SIGS1(w6) + w1 + SIGS0(w9);                 \
-      w9 += SIGS1(w7) + w2 + SIGS0(w10);                \
-      w10 += SIGS1(w8) + w3 + SIGS0(w11);               \
-      w11 += SIGS1(w9) + w4 + SIGS0(w12);               \
-      w12 += SIGS1(w10) + w5 + SIGS0(w13);              \
-      w13 += SIGS1(w11) + w6 + SIGS0(w14);              \
-      w14 += SIGS1(w12) + w7 + SIGS0(w15);              \
-      w15 += SIGS1(w13) + w8 + SIGS0(w0);              \
-    }
-
-
-
-/*
-
-   This is the compress routine of sha512. It is safe in the sense
-   that it does not overwrite the message. However, it does overwrite
-   the hash array.
-
-*/
-
-void raazHashSha512PortableCompress(Block *mesg, int nblocks, Hash hash)
-{
-
-    register Word a,b,c,d,e,f,g,h; /* Stores the hash state  */
-
-    register Word temp;
-
-    /*
-      The message variables:
-
-      (dotimes (i 16)(insert (format "\t\tWord w%d;\n" i)))
-
-      Why not an array? Memory wise these two will be more or less
-      same as local arrays will be allocated on stack. However in
-      machines with a large number of general purpose registers the
-      compiler has a chance of allocating all of them to registers
-      making them faster. It might also improve cache hits.
-
-    */
-
-    Word w0;
-    Word w1;
-    Word w2;
-    Word w3;
-    Word w4;
-    Word w5;
-    Word w6;
-    Word w7;
-    Word w8;
-    Word w9;
-    Word w10;
-    Word w11;
-    Word w12;
-    Word w13;
-    Word w14;
-    Word w15;
-
-    /* Looping over the blocks */
-    while (nblocks > 0)
-    {
-        /* initialisation of the hash state */
-        a = hash[0]; b = hash[1]; c = hash[2]; d = hash[3]; e = hash[4];
-        f = hash[5]; g = hash[6]; h = hash[7];
-
-        /* Reading in the message
-
-           (dotimes (i 16)
-             (insert (format "\t\t\t\tw%d = raazLoad64BE( (Word *) mesg, %d);\n" i i)))
-
-        */
-
-#define LOAD(i) raaz_tobe64((*mesg)[i])
-	w0  = LOAD(0);
-	w1  = LOAD(1);
-	w2  = LOAD(2);
-	w3  = LOAD(3);
-	w4  = LOAD(4);
-	w5  = LOAD(5);
-	w6  = LOAD(6);
-	w7  = LOAD(7);
-	w8  = LOAD(8);
-	w9  = LOAD(9);
-	w10 = LOAD(10);
-	w11 = LOAD(11);
-	w12 = LOAD(12);
-	w13 = LOAD(13);
-	w14 = LOAD(14);
-	w15 = LOAD(15);
-#undef LOAD
-
-        /* End of reading the message */
-
-        /* 0-79 */
-        Step(a,b,c,d,e,f,g,h,w0,K0);
-        Step(h,a,b,c,d,e,f,g,w1,K1);
-        Step(g,h,a,b,c,d,e,f,w2,K2);
-        Step(f,g,h,a,b,c,d,e,w3,K3);
-        Step(e,f,g,h,a,b,c,d,w4,K4);
-        Step(d,e,f,g,h,a,b,c,w5,K5);
-        Step(c,d,e,f,g,h,a,b,w6,K6);
-        Step(b,c,d,e,f,g,h,a,w7,K7);
-        Step(a,b,c,d,e,f,g,h,w8,K8);
-        Step(h,a,b,c,d,e,f,g,w9,K9);
-        Step(g,h,a,b,c,d,e,f,w10,K10);
-        Step(f,g,h,a,b,c,d,e,w11,K11);
-        Step(e,f,g,h,a,b,c,d,w12,K12);
-        Step(d,e,f,g,h,a,b,c,w13,K13);
-        Step(c,d,e,f,g,h,a,b,w14,K14);
-        Step(b,c,d,e,f,g,h,a,w15,K15); SCHEDULE;
-        Step(a,b,c,d,e,f,g,h,w0,K16);
-        Step(h,a,b,c,d,e,f,g,w1,K17);
-        Step(g,h,a,b,c,d,e,f,w2,K18);
-        Step(f,g,h,a,b,c,d,e,w3,K19);
-        Step(e,f,g,h,a,b,c,d,w4,K20);
-        Step(d,e,f,g,h,a,b,c,w5,K21);
-        Step(c,d,e,f,g,h,a,b,w6,K22);
-        Step(b,c,d,e,f,g,h,a,w7,K23);
-        Step(a,b,c,d,e,f,g,h,w8,K24);
-        Step(h,a,b,c,d,e,f,g,w9,K25);
-        Step(g,h,a,b,c,d,e,f,w10,K26);
-        Step(f,g,h,a,b,c,d,e,w11,K27);
-        Step(e,f,g,h,a,b,c,d,w12,K28);
-        Step(d,e,f,g,h,a,b,c,w13,K29);
-        Step(c,d,e,f,g,h,a,b,w14,K30);
-        Step(b,c,d,e,f,g,h,a,w15,K31); SCHEDULE;
-        Step(a,b,c,d,e,f,g,h,w0,K32);
-        Step(h,a,b,c,d,e,f,g,w1,K33);
-        Step(g,h,a,b,c,d,e,f,w2,K34);
-        Step(f,g,h,a,b,c,d,e,w3,K35);
-        Step(e,f,g,h,a,b,c,d,w4,K36);
-        Step(d,e,f,g,h,a,b,c,w5,K37);
-        Step(c,d,e,f,g,h,a,b,w6,K38);
-        Step(b,c,d,e,f,g,h,a,w7,K39);
-        Step(a,b,c,d,e,f,g,h,w8,K40);
-        Step(h,a,b,c,d,e,f,g,w9,K41);
-        Step(g,h,a,b,c,d,e,f,w10,K42);
-        Step(f,g,h,a,b,c,d,e,w11,K43);
-        Step(e,f,g,h,a,b,c,d,w12,K44);
-        Step(d,e,f,g,h,a,b,c,w13,K45);
-        Step(c,d,e,f,g,h,a,b,w14,K46);
-        Step(b,c,d,e,f,g,h,a,w15,K47); SCHEDULE;
-        Step(a,b,c,d,e,f,g,h,w0,K48);
-        Step(h,a,b,c,d,e,f,g,w1,K49);
-        Step(g,h,a,b,c,d,e,f,w2,K50);
-        Step(f,g,h,a,b,c,d,e,w3,K51);
-        Step(e,f,g,h,a,b,c,d,w4,K52);
-        Step(d,e,f,g,h,a,b,c,w5,K53);
-        Step(c,d,e,f,g,h,a,b,w6,K54);
-        Step(b,c,d,e,f,g,h,a,w7,K55);
-        Step(a,b,c,d,e,f,g,h,w8,K56);
-        Step(h,a,b,c,d,e,f,g,w9,K57);
-        Step(g,h,a,b,c,d,e,f,w10,K58);
-        Step(f,g,h,a,b,c,d,e,w11,K59);
-        Step(e,f,g,h,a,b,c,d,w12,K60);
-        Step(d,e,f,g,h,a,b,c,w13,K61);
-        Step(c,d,e,f,g,h,a,b,w14,K62);
-        Step(b,c,d,e,f,g,h,a,w15,K63); SCHEDULE;
-        Step(a,b,c,d,e,f,g,h,w0,K64);
-        Step(h,a,b,c,d,e,f,g,w1,K65);
-        Step(g,h,a,b,c,d,e,f,w2,K66);
-        Step(f,g,h,a,b,c,d,e,w3,K67);
-        Step(e,f,g,h,a,b,c,d,w4,K68);
-        Step(d,e,f,g,h,a,b,c,w5,K69);
-        Step(c,d,e,f,g,h,a,b,w6,K70);
-        Step(b,c,d,e,f,g,h,a,w7,K71);
-        Step(a,b,c,d,e,f,g,h,w8,K72);
-        Step(h,a,b,c,d,e,f,g,w9,K73);
-        Step(g,h,a,b,c,d,e,f,w10,K74);
-        Step(f,g,h,a,b,c,d,e,w11,K75);
-        Step(e,f,g,h,a,b,c,d,w12,K76);
-        Step(d,e,f,g,h,a,b,c,w13,K77);
-        Step(c,d,e,f,g,h,a,b,w14,K78);
-        Step(b,c,d,e,f,g,h,a,w15,K79);
-
-        /* Update the hash */
-        hash[0] += a;
-        hash[1] += b;
-        hash[2] += c;
-        hash[3] += d;
-        hash[4] += e;
-        hash[5] += f;
-        hash[6] += g;
-        hash[7] += h;
-        /* Move to next block */
-        --nblocks; ++mesg;
-    }
-    return;
-}
diff --git a/core/Raaz/Core.hs b/core/Raaz/Core.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core.hs
@@ -0,0 +1,27 @@
+-- |
+--
+-- Module      : Raaz.Core
+-- Description : Core functions, data types and classes of the raaz package.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Core
+       ( module X
+       , module Raaz.Core.Memory
+       ) where
+
+import Raaz.Core.ByteSource as X
+import Raaz.Core.Constants  as X
+import Raaz.Core.Encode     as X
+import Raaz.Core.Memory     hiding ( Access )
+import Raaz.Core.Memory     ( Access )
+import Raaz.Core.Prelude    as X
+import Raaz.Core.Primitive  as X
+import Raaz.Core.Transfer   as X
+import Raaz.Core.Types      as X
+import Raaz.Core.Util.ByteString as X
+
+{-# ANN module "HLint: ignore Use import/export shortcut" #-}
diff --git a/core/Raaz/Core/ByteSource.hs b/core/Raaz/Core/ByteSource.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/ByteSource.hs
@@ -0,0 +1,171 @@
+{-# LANGUAGE FlexibleContexts  #-}
+-- |
+--
+-- Module      : Raaz.Core.ByteSource
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Core.ByteSource
+       ( -- * Byte sources.
+         -- $bytesource$
+
+         ByteSource(..), PureByteSource
+       --    InfiniteSource(..)
+       , FillResult(..)
+       , fill, processChunks
+       , withFillResult
+       ) where
+
+import           Control.Monad.IO.Class
+import qualified Data.ByteString      as B
+import qualified Data.ByteString.Lazy as L
+
+import           Raaz.Core.Prelude
+import           Raaz.Core.Types      (BYTES, Ptr, LengthUnit (..), movePtr)
+import           Raaz.Core.Util.ByteString( unsafeCopyToPointer
+                                          , unsafeNCopyToPointer
+                                          , length
+                                          )
+import           Raaz.Core.Types.Pointer  (hFillBuf, Pointer, unsafeWithPointer)
+
+-- $bytesource$
+--
+-- Cryptographic input come from various sources; they can come from
+-- network sockets or might be just a string in the Haskell. To give a
+-- uniform interfaces for all such inputs, we define the abstract
+-- concept of a /byte source/. Essentially a byte source is one from
+-- which we can fill a buffer with bytes.
+--
+-- Among instances of `ByteSource`, some like for example
+-- `B.ByteString` are /pure/ in the sense filling a buffer with bytes
+-- from such a source has no other side-effects. This is in contrast
+-- to a source like a sockets. The type class `PureByteSource`
+-- captures such byte sources.
+--
+
+-- | This type captures the result of a fill operation.
+data FillResult a = Remaining a           -- ^ There is still bytes left.
+                  | Exhausted (BYTES Int) -- ^ source exhausted with so much
+                                          -- bytes read.
+                    deriving (Show, Eq)
+
+instance Functor FillResult where
+  fmap f (Remaining a ) = Remaining $ f a
+  fmap _ (Exhausted sz) = Exhausted sz
+
+-- | Combinator to handle a fill result.
+withFillResult :: (a -> b)          -- ^ stuff to do when filled
+               -> (BYTES Int -> b)  -- ^ stuff to do when exhausted
+               -> FillResult a      -- ^ the fill result to process
+               -> b
+withFillResult continueWith _     (Remaining a)  = continueWith a
+withFillResult _            endBy (Exhausted sz) = endBy sz
+
+------------------------ Byte sources ----------------------------------
+
+-- | Abstract byte sources. A bytesource is something that you can use
+-- to fill a buffer.
+--
+--  __WARNING:__ The source is required to return `Exhausted` in the
+-- boundary case where it has exactly the number of bytes
+-- requested. In other words, if the source returns @Remaining@ on any
+-- particular request, there should be at least 1 additional byte left
+-- on the source for the next request. Cryptographic block primitives
+-- perform certain special processing, like padding for example, for
+-- the last block and it is required to know whether the last block
+-- has been read or not.
+class ByteSource src where
+  -- | Fills a buffer from the source.
+  fillBytes :: BYTES Int  -- ^ Buffer size
+            -> src        -- ^ The source to fill.
+            -> Ptr a      -- ^ Buffer pointer
+            -> IO (FillResult src)
+
+-- | A version of fillBytes that takes type safe lengths as input.
+fill :: ( Pointer ptr
+        , LengthUnit len
+        , ByteSource src
+        )
+     => len
+     -> src
+     -> ptr a
+     -> IO (FillResult src)
+fill len src = unsafeWithPointer $ fillBytes (inBytes len) src
+{-# INLINE fill #-}
+
+-- | Process data from a source in chunks of a particular size.
+processChunks :: ( Pointer ptr, MonadIO m, LengthUnit chunkSize, ByteSource src)
+              => m a                 -- ^ action on a complete chunk,
+              -> (BYTES Int -> m b)  -- ^ action on the last partial chunk,
+              -> src                 -- ^ the source
+              -> ptr something       -- ^ buffer to fill the chunk in
+              -> chunkSize           -- ^ size of the chunksize
+              -> m b
+processChunks mid end source ptr csz = go source
+  where fillChunk src = liftIO $ fill csz src ptr
+        step src      = mid >> go src
+        go src        = fillChunk src >>= withFillResult step end
+
+
+-- | A byte source src is pure if filling from it does not have any
+-- other side effect on the state of the byte source. Formally, two
+-- different fills form the same source should fill the buffer with
+-- the same bytes.  This additional constraint on the source helps to
+-- /purify/ certain crypto computations like computing the hash or mac
+-- of the source. Usualy sources like `B.ByteString` etc are pure byte
+-- sources. A file handle is a byte source that is /not/ a pure
+-- source.
+class ByteSource src => PureByteSource src where
+
+----------------------- Instances of byte source -----------------------
+
+-- | __WARNING:__ The `fillBytes` may block.
+instance ByteSource Handle where
+  {-# INLINE fillBytes #-}
+  fillBytes sz hand cptr = do
+    count <- hFillBuf hand cptr sz
+    eof   <- hIsEOF hand
+    if eof then return $ Exhausted count
+      else return $ Remaining hand
+
+instance ByteSource B.ByteString where
+  {-# INLINE fillBytes #-}
+  fillBytes sz bs cptr | l <= sz    = do unsafeCopyToPointer bs cptr
+                                         return $ Exhausted l
+                       | otherwise = do unsafeNCopyToPointer sz bs cptr
+                                        return $ Remaining rest
+       where l    = length bs
+             rest = B.drop (fromIntegral sz) bs
+
+instance ByteSource L.ByteString where
+  {-# INLINE fillBytes #-}
+  fillBytes sz bs = fmap (fmap L.fromChunks) . fillBytes sz (L.toChunks bs)
+
+instance ByteSource src => ByteSource (Maybe src) where
+  {-# INLINE fillBytes #-}
+  fillBytes sz ma cptr = maybe exhausted fillIt ma
+          where exhausted = return $ Exhausted 0
+                fillIt a  = fmap Just <$> fillBytes sz a cptr
+
+instance ByteSource src => ByteSource [src] where
+  fillBytes _  []     _    = return $ Exhausted 0
+  fillBytes sz (x:xs) cptr = do
+    result <- fillBytes sz x cptr
+    case result of
+      Remaining nx     -> return $ Remaining $ nx:xs
+      Exhausted bytesX -> let nptr              = movePtr cptr bytesX
+                              whenXSExhausted bytesXS = return $ Exhausted $ bytesX + bytesXS
+                              whenXSRemains           = return . Remaining
+                           in fillBytes (sz - bytesX) xs nptr
+                              >>= withFillResult whenXSRemains whenXSExhausted
+
+
+--------------------- Instances of pure byte source --------------------
+
+instance PureByteSource B.ByteString where
+instance PureByteSource L.ByteString where
+instance PureByteSource src => PureByteSource [src]
+instance PureByteSource src => PureByteSource (Maybe src)
diff --git a/core/Raaz/Core/Constants.hs b/core/Raaz/Core/Constants.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Constants.hs
@@ -0,0 +1,11 @@
+{-# OPTIONS_HADDOCK hide #-}
+-- | Some constants used by raaz.
+module Raaz.Core.Constants
+       ( l1Cache
+       ) where
+import Raaz.Core.Prelude
+import Raaz.Core.Types
+
+-- | Typical size of L1 cache. Used for selecting buffer size etc in crypto operations.
+l1Cache :: BYTES Int
+l1Cache = 32768
diff --git a/core/Raaz/Core/CpuSupports.hs b/core/Raaz/Core/CpuSupports.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/CpuSupports.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# OPTIONS_HADDOCK show-extensions #-}
+
+
+-- |
+--
+-- Module      : Raaz.Core.CpuSupports
+-- Copyright   : (c) Piyush P Kurur, 2017
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+-- This module gives functions that check at runtime whether the
+-- underlying cpu supports given features. CPU features are
+-- architecture specific. However, functions from this module are
+-- guaranteed to be defined always -- they return `False` for
+-- incompatible architecture. For example, the flag `avx2` is relevant
+-- only for a an X86 architecture. So it is defined false, for say the
+-- ARM architecture.
+
+module Raaz.Core.CpuSupports
+       ( sse, sse2, sse3
+       , sse4_1, sse4_2
+       , avx, avx2
+       ) where
+
+import Foreign.C
+import Raaz.Core.Prelude
+
+foreign import ccall unsafe "raaz_supports_sse"
+  c_sse :: IO CInt
+
+foreign import ccall unsafe "raaz_supports_sse2"
+  c_sse2 :: IO CInt
+
+foreign import ccall unsafe "raaz_supports_sse3"
+  c_sse3 :: IO CInt
+
+
+foreign import ccall unsafe "raaz_supports_sse4_1"
+  c_sse4_1 :: IO CInt
+
+
+foreign import ccall unsafe "raaz_supports_sse4_2"
+  c_sse4_2 :: IO CInt
+
+foreign import ccall unsafe "raaz_supports_avx"
+  c_avx :: IO CInt
+
+foreign import ccall unsafe "raaz_supports_avx2"
+  c_avx2 :: IO CInt
+
+
+{-# NOINLINE gccBuiltInToBool #-}
+
+gccBuiltInToBool :: IO CInt -> IO Bool
+gccBuiltInToBool = fmap (>0)
+
+-- | Check whether the cpu supports sse extension.
+sse :: IO Bool
+sse = gccBuiltInToBool c_sse
+
+-- | Check whether the cpu supports sse2 extension.
+sse2 :: IO Bool
+sse2 = gccBuiltInToBool c_sse2
+
+-- | Check whether the cpu supports sse3 extension.
+sse3 :: IO Bool
+sse3 = gccBuiltInToBool c_sse3
+
+-- | Check whether the cpu supports sse4_1 extension.
+sse4_1 :: IO Bool
+sse4_1 = gccBuiltInToBool c_sse4_1
+
+-- | Check whether the cpu supports sse-4.2 extension.
+sse4_2 :: IO Bool
+sse4_2 = gccBuiltInToBool c_sse4_2
+
+-- | Check whether the cpu supports avx extension.
+avx :: IO Bool
+avx = gccBuiltInToBool c_avx
+
+-- | Check whether the cpu supports avx2 extension.
+avx2 :: IO Bool
+avx2 = gccBuiltInToBool c_avx2
diff --git a/core/Raaz/Core/Encode.hs b/core/Raaz/Core/Encode.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Encode.hs
@@ -0,0 +1,95 @@
+-- |
+--
+-- Module      : Raaz.Core.Encode
+-- Description : Encoding and decoding values to formats.
+-- Copyright   : (c) Piyush P Kurur, 2015
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.Core.Encode
+       ( -- * Encoding of binary data.
+         -- $encodable$
+         Encodable(..)
+       , Format(..)
+       , encode, decode, translate, unsafeDecode
+       -- ** The base 16 encoding format
+       , Base16
+       , fromBase16, showBase16
+       -- ** Other binary formats.
+       , Base64
+       ) where
+
+import Raaz.Core.Prelude
+import Raaz.Core.Encode.Internal
+import Raaz.Core.Encode.Base16
+import Raaz.Core.Encode.Base64
+
+-- $encodable$
+--
+-- Often one wants to represent cryptographic hashes, secret keys or
+-- just binary data into various enocoding formats like base64,
+-- hexadecimal etc. This module gives a generic interface for all such
+-- operations. There are two main classes that capture the essence of
+-- encoding.
+--
+-- [`Format`:] The class of all types that are encoding formats to binary
+--     data. They are all instances of `Show` and `Data.String.IsString` for
+--     ease of printing and inclusion in source code.
+--
+-- [`Encodable`:] The class of all types that can be encoded /into/ binary.
+--
+-- The combinators `encode` and `decode` allows encoding any instance of `Encodable` to
+-- any of the instances of `Format`.
+--
+-- == Sample code that makes use of Base16 encoding.
+--
+-- > theAnswer :: LE Word64
+-- > theAnswer = 42
+-- >
+-- > main = do putStr "The answer to life, universe and everything is:"
+-- >           print answserInBase16
+-- >    where answerInBase16 :: Base16
+-- >          answerInBase16 = encode theAnswer
+-- >
+-- > checkAnswer :: Base16 -> Bool
+-- > checkAnswer = maybe False (==theAnswer) . decode
+-- >
+-- > checkAnswerBS :: ByteString -> Bool
+-- > checkAnswerBS = checkAnswer . fromString
+--
+-- In the above example, @`LE` Word64@, which captures 64-bit unsigned
+-- integers is an instance of Encode (but not Word64). The encode
+-- combinator then converts in into the type Base16 that is an
+-- instance of `Format`. The print then uses the `Show` instance of
+-- Base16 to print it as a sequence of hexadecimal
+-- characters. Similarly the decode combinator in @checkAnswer@
+-- decodes a base16 before comparing with the answer.
+--
+-- == Liberal @IsString@ instances
+--
+-- Certain ascii printable formats like Base16 and Base64 have a more
+-- liberal `IsString` instance: they typically allow the use of spaces
+-- and newline in the input to the `fromString` function . This allows
+-- a more readable representation of these types when using the
+-- @OverloadedStrings@ extension. See the documentation of the
+-- corresponding instance declarations to see what characters are
+-- ignored. However, all `Show` instance of formats are strict in the
+-- sense that they do not produce any such extraneous characters.
+
+-- | Encode in a given format.
+encode :: (Encodable a, Format fmt) => a -> fmt
+encode = encodeByteString . toByteString
+
+-- | Decode from a given format. It results in Nothing if there is a
+-- parse error.
+decode :: (Format fmt, Encodable a) => fmt -> Maybe a
+decode = fromByteString . decodeFormat
+
+-- | The unsafe version of `decode`.
+unsafeDecode :: (Format fmt, Encodable a) => fmt -> a
+unsafeDecode = unsafeFromByteString . decodeFormat
+
+-- | Translate from one format to another.
+translate :: (Format fmt1, Format fmt2) => fmt1 -> fmt2
+translate = encodeByteString . decodeFormat
diff --git a/core/Raaz/Core/Encode/Base16.hs b/core/Raaz/Core/Encode/Base16.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Encode/Base16.hs
@@ -0,0 +1,110 @@
+{-# OPTIONS_HADDOCK hide                #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+
+-- | Base 16 or hexadecimal encoding of objects.
+
+module Raaz.Core.Encode.Base16
+       ( Base16
+       , fromBase16, showBase16
+       ) where
+
+import Data.Char
+import Data.ByteString as B
+import Data.ByteString.Char8 as C8
+import Data.ByteString.Internal (c2w)
+
+import Data.ByteString.Unsafe(unsafeIndex)
+
+import Raaz.Core.Prelude
+import Raaz.Core.Encode.Internal
+
+-- | The type corresponding to base-16 or hexadecimal encoding. The
+-- `Base16` encoding has a special place in this library: most
+-- cryptographic types use `Base16` encoding for their `Show` and
+-- `IsString` instance. The combinators `fromBase16` and `showBase16`
+-- are exposed mainly to make these definitions easy.
+--
+
+newtype Base16 = Base16 {unBase16 :: ByteString} deriving (Eq, Semigroup, Monoid)
+
+-- Developers note: Internally base16 just stores the bytestring as
+-- is. The conversion happens when we do an encode and decode of
+-- actual base16.
+--
+
+
+instance Encodable Base16 where
+  toByteString          = hex . unBase16
+
+  fromByteString bs
+    | odd (B.length bs) = Nothing
+    | validInput bs     = Just $ Base16 $ unsafeFromHex bs
+    | otherwise         = Nothing
+    where validInput  = C8.all isHexDigit
+  unsafeFromByteString bs
+    | odd (B.length bs) = error "base16 encoding is always of even size"
+    | otherwise         = Base16 $ unsafeFromHex bs
+
+instance Show Base16 where
+  show = C8.unpack . toByteString
+
+-- | Ignores spaces and ':' (colon).
+instance IsString Base16 where
+  fromString = unsafeFromByteString . C8.filter (not . useless) . fromString
+    where useless c = isSpace c || c == ':'
+
+instance Format Base16 where
+  encodeByteString = Base16
+  {-# INLINE encodeByteString #-}
+
+  decodeFormat     = unBase16
+  {-# INLINE decodeFormat #-}
+
+-- Since the encoding to base16 is usually used for user interaction
+-- we can afford to be slower here.
+--
+-- TODO (Liquid Haskell)
+--
+{--@ hex :: inp:ByteString -> { bs : ByteString | bslen bs = 2 * bslen inp } @-}
+--
+hex :: ByteString -> ByteString
+hex  bs = fst $ B.unfoldrN (2 * B.length bs) gen 0
+    where gen i | rm == 0   = Just (hexDigit $ top4 w, i+1)
+                | otherwise = Just (hexDigit $ bot4 w, i+1)
+            where (idx, rm) = quotRem i 2
+                  w         = unsafeIndex bs idx
+
+
+
+
+
+hexDigit :: Word8 -> Word8
+hexDigit x | x < 10    = c2w '0' + x
+           | otherwise = c2w 'a' + (x - 10)
+
+top4 :: Word8 -> Word8; top4 x  = x `shiftR` 4
+bot4 :: Word8 -> Word8; bot4 x  = x  .&. 0x0F
+
+{-@ unsafeFromHex :: {bs : ByteString | (bslen bs) mod 2 == 0 } -> ByteString @-}
+unsafeFromHex :: ByteString -> ByteString
+unsafeFromHex bs = fst $ B.unfoldrN len gen 0
+  where len   = B.length bs `quot` 2
+        gen i = Just (shiftL w0 4 .|. w1, i + 1)
+          where w0 = fromHexWord $ unsafeIndex bs (2 * i)
+                w1 = fromHexWord $ unsafeIndex bs (2 * i + 1)
+        fromHexWord x
+          | c2w '0' <= x && x <= c2w '9' = x - c2w '0'
+          | c2w 'a' <= x && x <= c2w 'f' = 10 + (x - c2w 'a')
+          | c2w 'A' <= x && x <= c2w 'F' = 10 + (x - c2w 'A')
+          | otherwise                    = error "bad base16 character"
+
+
+-- | Base16 variant of `fromString`. Useful in definition of
+-- `IsString` instances as well as in cases where the default
+-- `IsString` instance does not parse from a base16 encoding.
+fromBase16 :: Encodable a => String -> a
+fromBase16 = unsafeFromByteString . unBase16 . fromString
+
+-- | Base16 variant of `show`.
+showBase16 :: Encodable a => a -> String
+showBase16 = show . Base16 . toByteString
diff --git a/core/Raaz/Core/Encode/Base64.hs b/core/Raaz/Core/Encode/Base64.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Encode/Base64.hs
@@ -0,0 +1,173 @@
+{-# OPTIONS_HADDOCK hide                #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+-- | Base 64 encoding of objects.
+module Raaz.Core.Encode.Base64( Base64 ) where
+
+import Data.Char
+
+import Data.ByteString as B
+import Data.ByteString.Char8 as C8
+import Data.ByteString.Internal (c2w, w2c)
+import Data.ByteString.Unsafe   (unsafeIndex)
+
+import Raaz.Core.Prelude
+import Raaz.Core.Encode.Internal
+
+
+-- | The type corresponding to the standard padded base-64 binary
+-- encoding.
+newtype Base64 = Base64 {unBase64 :: ByteString} deriving (Eq, Semigroup, Monoid)
+
+-- Developers note: Internally base16 just stores the bytestring as
+-- is. The conversion happens when we do an encode and decode of
+-- actual base16.
+
+instance Encodable Base64 where
+  toByteString          = toB64 . unBase64
+
+  fromByteString bs
+    | B.null bs                = Just $ Base64 B.empty
+    | B.length bs `rem` 4 /= 0 = Nothing
+    | okeyPad                  = Just $ Base64 $ unsafeFromB64 bs
+    | otherwise                = Nothing
+    where padPart     = C8.dropWhile isB64Char bs
+          okeyPad     = padPart == C8.empty || padPart == C8.singleton '=' || padPart == C8.pack "=="
+          isB64Char c = isAlpha c || isDigit c || c == '+' || c == '/'
+
+
+  unsafeFromByteString bs | B.null bs = Base64 B.empty
+                          | otherwise = Base64 $ unsafeFromB64 bs
+
+
+instance Show Base64 where
+  show = C8.unpack . toByteString
+
+-- | Ignores spaces and newlines.
+instance IsString Base64 where
+  fromString = unsafeFromByteString . C8.filter (not . isSpace) . fromString
+
+instance Format Base64 where
+  encodeByteString = Base64
+  {-# INLINE encodeByteString #-}
+
+  decodeFormat     = unBase64
+  {-# INLINE decodeFormat #-}
+
+
+
+------------- Base 64 encoding -------------------------
+
+-- NOTE: The topN functions ensure that the top N bits of a word are present
+-- in the least N significant bits. The botN ensures that there
+
+top6 :: Word8 -> Word8; bot2 :: Word8 -> Word8
+top4 :: Word8 -> Word8; bot4 :: Word8 -> Word8
+top2 :: Word8 -> Word8; bot6 :: Word8 -> Word8
+
+top6 w = w `shiftR` 2; bot2 w = w .&. 0x03
+top4 w = w `shiftR` 4; bot4 w = w .&. 0x0F
+top2 w = w `shiftR` 6; bot6 w = w .&. 0x3F
+
+--------------- Combining bytes -----------------------------------
+
+byte0 :: Word8 -> Word8
+byte1 :: Word8 -> Word8 -> Word8
+byte2 :: Word8 -> Word8 -> Word8
+byte3 :: Word8 -> Word8
+pad   :: Word8
+
+
+byte0     = b64 . top6
+byte1 t p = b64 $ shiftL (bot2 p) 4 .|. top4 t
+byte2 t p = b64 $ shiftL (bot4 p) 2 .|. top2 t
+byte3     = b64 . bot6
+pad       = c2w '='
+
+-- | Encoding word.
+b64 :: Word8 -> Word8
+b64 w | 0  <= w  && w <= 25 = c2w 'A' + w
+      | 26 <= w  && w <= 51 = c2w 'a' + w - 26
+      | 52 <= w  && w <= 61 = c2w '0' + w - 52
+      | w == 62             = c2w '+'
+      | w == 63             = c2w '/'
+      | otherwise           = error "oops: b64"
+
+
+unB64 :: Word8 -> Word8
+unB64 w | c2w 'A' <= w && w <= c2w 'Z' = w - c2w 'A'
+        | c2w 'a' <= w && w <= c2w 'z' = w - c2w 'a' + 26
+        | c2w '0' <= w && w <= c2w '9' = w - c2w '0' + 52
+        | w == c2w '+'                 = 62
+        | w == c2w '/'                 = 63
+        | otherwise                    = error $ "oops unB64:" ++ [w2c w]
+
+
+
+
+-- Since the encoding to base16 is usually used for user interaction
+-- we can afford to be slower here.
+
+-- TODO (Liquid Haskell)
+--
+{--@ toB64 :: ByteString -> { bs : ByteString | (bslen bs) mod 4 == 0 @-}
+--
+toB64 :: ByteString -> ByteString
+toB64 bs = fst (B.unfoldrN (4*n) gen 0) <> padding
+    where gen i    = Just (byte i, i + 1)
+          at blk i = unsafeIndex bs $ 3 * blk + i
+
+          byte i = case r of
+            0 -> byte0          $ at q 0
+            1 -> byte1 (at q 1) $ at q 0
+            2 -> byte2 (at q 2) $ at q 1
+            3 -> byte3          $ at q 2
+            _ -> error "base64 bad index"
+            where (q, r) = quotRem i 4
+
+          (n,p) = B.length bs `quotRem` 3
+
+          padding = case p of
+            0 -> mempty
+            1 -> B.pack [ byte0   $ at n 0
+                        , byte1 0 $ at n 0
+                        , pad, pad
+                        ]
+            2 -> B.pack [ byte0          $ at n 0
+                        , byte1 (at n 1) $ at n 0
+                        , byte2 0        $ at n 1
+                        , pad
+                        ]
+            _ -> error "base64 pad bad index"
+
+-- Notes: Merge is used to convert from base64 digits, which are
+-- words of 6-bits.
+merg0 :: Word8 -> Word8 -> Word8
+merg1 :: Word8 -> Word8 -> Word8
+merg2 :: Word8 -> Word8 -> Word8
+merg0 a b = (unB64 a `shiftL` 2) .|. top4 (unB64 b)
+merg1 a b = (unB64 a `shiftL` 4) .|. top6 (unB64 b)
+merg2 a b = (unB64 a `shiftL` 6) .|. unB64 b
+
+
+unsafeFromB64 :: ByteString -> ByteString
+unsafeFromB64 bs = fst (B.unfoldrN (3*n) gen 0) <> unPad
+  where n         = B.length bs `quot` 4 - 1
+        gen i     = Just (byte i, i + 1)
+        at blk i  = unsafeIndex bs $ 4 * blk + i
+
+        byte i    = case r of
+          0 -> merg0 (at q 0) $ at q 1
+          1 -> merg1 (at q 1) $ at q 2
+          2 -> merg2 (at q 2) $ at q 3
+          _ -> error "base64 bad index"
+          where (q, r) = quotRem i 3
+
+        unPad
+          | at n 2 == c2w '=' = B.singleton $ merg0 (at n 0) $ at n 1
+          | at n 3 == c2w '=' = B.pack [ merg0 (at n 0) $ at n 1
+                                       , merg1 (at n 1) $ at n 2
+                                       ]
+          | otherwise         = B.pack [ merg0 (at n 0) $ at n 1
+                                       , merg1 (at n 1) $ at n 2
+                                       , merg2 (at n 2) $ at n 3
+                                       ]
diff --git a/core/Raaz/Core/Encode/Internal.hs b/core/Raaz/Core/Encode/Internal.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Encode/Internal.hs
@@ -0,0 +1,147 @@
+{-# OPTIONS_HADDOCK hide       #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE DefaultSignatures #-}
+{-# LANGUAGE FlexibleContexts  #-}
+
+-- | Internal module that has the encode class and some utility functions.
+module Raaz.Core.Encode.Internal
+       ( Encodable(..), Format(..)
+       ) where
+
+import Data.Maybe
+
+import           Data.ByteString              (ByteString)
+import           Data.ByteString.Internal     (unsafeCreate)
+import           Data.String
+import           Data.Word
+import           Foreign.Ptr
+import Prelude hiding               (length)
+import System.IO.Unsafe   (unsafePerformIO)
+
+import Raaz.Core.Types.Endian
+import Raaz.Core.Types.Pointer
+import Raaz.Core.Util.ByteString(length, withByteString)
+
+
+-- | The type class `Encodable` captures all the types that can be
+-- encoded into a stream of bytes. For a user defined type say @Foo@,
+-- defining an instance `Encodable` is all that is required to make
+-- use of `encode` and `decode` for any of the supported encoding
+-- formats (i.e. instances of the class `Format`).
+--
+-- Minimum complete definition for this class is `toByteString` and
+-- `fromByteString`. Instances of `EndianStore` have default
+-- definitions for both these functions and hence a trivial instance
+-- declaration is sufficient for such types.
+--
+-- > newtype Foo = Foo (LE Word64) deriving (Storable, EndianStore)
+-- >
+-- > instance EndianStore Foo where
+-- >   ...
+-- >
+-- > instance Encodable Foo
+-- >
+--
+-- In particular, all the endian encoded versions of Haskell's word,
+-- i.e types like @`LE` Word32@, @`LE` Word64@ etc, are instances of
+-- `Encodable`. Note that the corresponding plain type is /not/ an
+-- instance of `Encodable` because encoding of say `Word32` without
+-- specifying whether the endianness is meaningless.
+--
+-- === Laws for encoding
+--
+-- Note that not all byte strings can be valid encodings and
+-- `fromByteString` might fail and return `Nothing` on certain
+-- inputs. However, we require the minimum guarantee that
+-- `fromByteString` for actual encodings of elements, i.e. we require
+-- the instances to satisfy the law.
+--
+-- > fromByteString . toByteString = Just
+--
+-- TODO: Write test cases for encoding laws.
+
+class Encodable a where
+  -- | Convert stuff to bytestring
+  toByteString          :: a           -> ByteString
+
+  -- | Try parsing back a value. Returns nothing on failure.
+  fromByteString        :: ByteString  -> Maybe a
+
+  -- | Unsafe version of `fromByteString`
+  unsafeFromByteString  :: ByteString  -> a
+
+  default toByteString :: EndianStore a => a -> ByteString
+  toByteString w    = unsafeCreate (fromEnum $ sizeOf (pure w)) putit
+    where putit ptr = store (castPtr ptr) w
+
+
+  default fromByteString :: EndianStore a => ByteString -> Maybe a
+  fromByteString bs  | sizeOf proxy == length bs   = Just w
+                     | otherwise                   = Nothing
+         where w     = unsafePerformIO $ withByteString bs (load . castPtr)
+               proxy = pure w
+
+  unsafeFromByteString = fromMaybe (error "fromByteString error") . fromByteString
+
+instance Encodable Word8
+instance Encodable (LE Word32)
+instance Encodable (LE Word64)
+instance Encodable (BE Word32)
+instance Encodable (BE Word64)
+instance Encodable ()
+
+instance Encodable ByteString where
+  toByteString         = id
+  {-# INLINE toByteString #-}
+  fromByteString       = Just
+  {-# INLINE fromByteString #-}
+  unsafeFromByteString = id
+  {-# INLINE unsafeFromByteString #-}
+
+instance Encodable a => Encodable (BYTES a) where
+  toByteString         (BYTES a) = toByteString a
+  fromByteString        = fmap BYTES . fromByteString
+  unsafeFromByteString  = BYTES      . unsafeFromByteString
+
+
+
+-- | A binary format is a representation of binary data often in
+-- printable form. We distinguish between various binary formats at
+-- the type level and each supported format corresponds to an instance
+-- of the the class `Format`. The `encodeByteString` and
+-- `decodeFormat` are required to satisfy the laws
+--
+-- > decodeFormat . encodeByteString = id
+--
+-- For type safety, the formats themselves are opaque types and hence
+-- it is not possible to obtain the underlying binary data directly.
+-- We require binary formats to be instances of the class `Encodable`,
+-- with the combinators `toByteString` and `fromByteString` of the
+-- `Encodable` class performing the actual encoding and decoding.
+--
+-- Instances of `Format` are required to be instances of `Show` and so
+-- that the encoded format can be easily printed. They are also
+-- required to be instances of `IsString` so that they can be easily
+-- represented in Haskell source using the @OverloadedStrings@
+-- extension.  However, be careful when using this due to the fact
+-- that invalid encodings can lead to runtime errors.
+--
+class (IsString fmt, Show fmt, Encodable fmt) => Format fmt where
+
+  -- | Encode binary data into the format. The return type gurantees
+  -- that any binary data can indeed be encoded into a format.
+  encodeByteString :: ByteString -> fmt
+
+  -- | Decode the format to its associated binary
+  -- representation. Notice that this function always succeeds: we
+  -- assume that elements of the type `fmt` are valid encodings and
+  -- hence the return type is `ByteString` instead of @`Maybe`
+  -- ByteString@.
+  decodeFormat     :: fmt        -> ByteString
+
+-- | Bytestring itself is an encoding format (namely binary format).
+instance Format ByteString where
+  encodeByteString = id
+  {-# INLINE encodeByteString #-}
+  decodeFormat     = id
+  {-# INLINE decodeFormat     #-}
diff --git a/core/Raaz/Core/Memory.hs b/core/Raaz/Core/Memory.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Memory.hs
@@ -0,0 +1,448 @@
+-- |
+--
+-- Module      : Raaz.Core.Memory
+-- Description : Explicit, typesafe, low-level memory management in raaz
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+{-# LANGUAGE TypeFamilies               #-}
+{-# LANGUAGE GADTs                      #-}
+{-# LANGUAGE RankNTypes                 #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE DataKinds                  #-}
+module Raaz.Core.Memory
+       (
+
+         -- BANNED combinators
+         --
+         -- 1. copyMemory
+
+
+         -- * Low level memory management in raaz.
+         -- $memorysubsystem$
+
+         -- ** The memory class
+         Memory(..)
+       , VoidMemory, withMemoryPtr
+       , withMemory, withSecureMemory
+         -- ** The allocator
+       , Alloc
+       , pointerAlloc
+
+       -- * Initialisation and Extraction.
+       -- $init-extract$
+
+       , Initialisable(..), Extractable(..), modifyMem
+
+       -- * Accessing the bytes directly
+       -- $access$
+       --
+       , Access(..)
+       , ReadAccessible(..), WriteAccessible(..), memTransfer
+       -- * A basic memory cell.
+       , MemoryCell, copyCell, withCellPointer, unsafeGetCellPointer
+
+       ) where
+
+import           Foreign.Ptr                 ( castPtr )
+import           Foreign.Storable            ( Storable )
+
+
+import           Raaz.Core.Prelude
+import           Raaz.Core.MonoidalAction
+import           Raaz.Core.Types    hiding   ( zipWith       )
+import           Raaz.Core.Types.Internal
+
+-------------- BANNED FEATURES ---------------------------------------
+--
+-- This module has a lot of low level pointer gymnastics and hence
+-- should be dealt with care. The following features are BANNED
+-- and hence should never be exposed. Often they are subtle and can
+-- be easily missed. Hence it is documented here.
+--
+-- * COPY BUG
+--
+-- ** Combinator:
+--
+-- >
+-- > `copyMemory :: Memory mem => Dest mem -> Src mem -> IO ()
+-- >
+--
+-- ** THE BUG. At first it looks like a useful, general function to
+-- have which is just a memcpy on the underlying pointers. For a
+-- memory element we can easily get its pointer and size. However this
+-- has a very subtle bug. The actual data in certain memory elements
+-- like MemoryCell's have a runtime dependent offset from its raw
+-- pointer and can defer from one element to another. As an example
+-- consider two MemoryCells A and B of type `MemoryCell Word64` and
+-- let us assume that the alignment restriction for both these is
+-- 8-byte boundary. The Allocation strategy for MemoryCell is the following.
+--
+-- (1) The size is 16 (using the atleastAligned function)
+-- (2) The starting pointer is the next 8-byte aligned pointer from the
+--     given pointer.
+--
+-- It is very well possible that on allocation A gets an 8-byte
+-- aligned memory pointer internally and the nextAligned pointer would
+-- be itself. However, B might not be aligned and hence the actual
+-- pointer for B might have a non-zero offset from its raw
+-- pointer. Clearly a memcpy from the associated raw pointers will
+-- mean that the initial segment of A is lost to B.
+
+
+
+
+-- $memorysubsystem$
+--
+-- __Warning:__ This module is pretty low level and should not be
+-- needed in typical use cases. Only developers of protocols and
+-- primitives might have a reason to look into this module.
+--
+-- The memory subsytem of raaz gives a relatively abstract and type
+-- safe interface for performing low level size calculations and
+-- pointer arithmetic. The two main components of this subsystem
+-- is the class `Memory` whose instances are essentially memory buffers that
+-- are distinguished at the type level, and the type `Alloc` that captures
+-- the allocation strategies for these types.
+--
+
+------------------------ A memory allocator -----------------------
+
+type AllocField = Field (Ptr Word8)
+
+-- | A memory allocator for the memory type @mem@. The `Applicative`
+-- instance of @Alloc@ can be used to build allocations for
+-- complicated memory elements from simpler ones and takes care of
+-- handling the size/offset calculations involved.
+type Alloc mem = TwistRF AllocField (BYTES Int) mem
+
+-- | Make an allocator for a given memory type.
+makeAlloc :: LengthUnit l => l -> (Ptr Word8 -> mem) -> Alloc mem
+makeAlloc l memCreate = TwistRF (WrapArrow memCreate) $ atLeast l
+
+-- | Allocates a buffer of size @l@ and returns the pointer to it pointer.
+pointerAlloc :: LengthUnit l => l -> Alloc (Ptr Word8)
+pointerAlloc l = makeAlloc l id
+
+---------------------------------------------------------------------
+
+-- | Any cryptographic primitives use memory to store stuff. This
+-- class abstracts all types that hold some memory. Cryptographic
+-- application often requires securing the memory from being swapped
+-- out (think of memory used to store private keys or passwords). This
+-- abstraction supports memory securing. If your platform supports
+-- memory locking, then securing a memory will prevent the memory from
+-- being swapped to the disk. Once secured the memory location is
+-- overwritten by nonsense before being freed.
+--
+-- While some basic memory elements like `MemoryCell` are exposed from
+-- the library, often we require compound memory objects built out of
+-- simpler ones. The `Applicative` instance of the `Alloc` can be made
+-- use of in such situation to simplify such instance declaration as
+-- illustrated in the instance declaration for a pair of memory
+-- elements.
+--
+-- > instance (Memory ma, Memory mb) => Memory (ma, mb) where
+-- >
+-- >    memoryAlloc             = (,) <$> memoryAlloc <*> memoryAlloc
+-- >
+-- >    unsafeToPointer (ma, _) =  unsafeToPointer ma
+--
+class Memory m where
+
+  -- | Returns an allocator for this memory.
+  memoryAlloc     :: Alloc m
+
+  -- | Returns the pointer to the underlying buffer.
+  unsafeToPointer :: m -> Ptr Word8
+
+
+-- | A memory element that holds nothing.
+newtype VoidMemory = VoidMemory { unVoidMemory :: Ptr Word8  }
+
+--
+-- DEVELOPER NOTE:
+--
+-- It might be tempting to define VoidMemory as follows.
+--
+-- >
+-- > newtype VoidMemory = VoidMemory
+-- >
+--
+-- However, this will lead to failure of memory instances of product
+-- memories where the first component is VoidMemory. Imagine what
+-- would the member function unsafeToPointer of (VoidMemory,
+-- SomeOtherMemory) look like.
+--
+instance Memory VoidMemory where
+  memoryAlloc      = makeAlloc (0 :: BYTES Int) VoidMemory
+  unsafeToPointer  = unVoidMemory
+
+
+instance ( Memory ma, Memory mb ) => Memory (ma, mb) where
+    memoryAlloc             = (,) <$> memoryAlloc <*> memoryAlloc
+    unsafeToPointer (ma, _) = unsafeToPointer ma
+
+instance ( Memory ma
+         , Memory mb
+         , Memory mc
+         )
+         => Memory (ma, mb, mc) where
+  memoryAlloc              = (,,)
+                             <$> memoryAlloc
+                             <*> memoryAlloc
+                             <*> memoryAlloc
+  unsafeToPointer (ma,_,_) =  unsafeToPointer ma
+
+instance ( Memory ma
+         , Memory mb
+         , Memory mc
+         , Memory md
+         )
+         => Memory (ma, mb, mc, md) where
+  memoryAlloc                = (,,,)
+                               <$> memoryAlloc
+                               <*> memoryAlloc
+                               <*> memoryAlloc
+                               <*> memoryAlloc
+
+  unsafeToPointer (ma,_,_,_) =  unsafeToPointer ma
+
+
+-- | Apply some low level action on the underlying buffer of the
+-- memory.
+withMemoryPtr :: Memory m
+              => (BYTES Int -> Ptr Word8 -> IO a)
+              -> m -> IO a
+withMemoryPtr action mem = action sz $ unsafeToPointer mem
+  where sz = twistMonoidValue $ getAlloc mem
+        getAlloc :: Memory m => m -> Alloc m
+        getAlloc _ = memoryAlloc
+
+-- | Perform an action which makes use of this memory. The memory
+-- allocated will automatically be freed when the action finishes
+-- either gracefully or with some exception. Besides being safer,
+-- this method might be more efficient as the memory might be
+-- allocated from the stack directly and will have very little GC
+-- overhead.
+withMemory   :: Memory mem => (mem -> IO a) -> IO a
+withMemory   = withM memoryAlloc
+  where withM :: Alloc mem -> (mem -> IO a) -> IO a
+        withM alctr action = allocaBuffer sz actualAction
+          where sz                 = twistMonoidValue alctr
+                getM               = computeField $ twistFunctorValue alctr
+                wipeIt cptr        = wipeMemory cptr sz
+                actualAction  cptr = action (getM cptr) <* wipeIt cptr
+
+
+-- | Similar to `withMemory` but allocates a secure memory for the
+-- action. Secure memories are never swapped on to disk and will be
+-- wiped clean of sensitive data after use. However, be careful when
+-- using this function in a child thread. Due to the daemonic nature
+-- of Haskell threads, if the main thread exists before the child
+-- thread is done with its job, sensitive data can leak. This is
+-- essentially a limitation of the bracket which is used internally.
+withSecureMemory :: Memory mem => (mem -> IO a) -> IO a
+withSecureMemory = withSM memoryAlloc
+  where -- withSM :: Memory m => Alloc m -> (m -> IO a) -> IO a
+        withSM alctr action = allocaSecure sz $ action . getM
+          where sz     = twistMonoidValue alctr
+                getM   = computeField $ twistFunctorValue alctr
+
+
+----------------------- Initialising and Extracting stuff ----------------------
+
+-- $init-extract$
+--
+-- Memories often allow initialisation with and extraction of values
+-- in the Haskell world. The `Initialisable` and `Extractable` class
+-- captures this interface.
+--
+-- == Explicit Pointer
+--
+-- Using the `Initialisable` and `Extractable` for sensitive data
+-- interface defeats one important purpose of the memory subsystem
+-- namely providing memory locking. Using these interfaces means
+-- keeping the sensitive information as pure values in the Haskell
+-- heap which impossible to lock. Worse still, the GC often move the
+-- data around spreading it all around the memory. One should use
+-- direct byte transfer via `memcpy` for effecting these
+-- initialisation. An interface to facilitate these is the type
+-- classes `ReadAccessible` and `WriteAccessble` where direct access
+-- is given (via the `Access` buffer) to the portions of the internal
+-- memory where sensitive data is kept.
+
+-- | Memories that can be initialised with a pure value. The pure
+-- value resides in the Haskell heap and hence can potentially be
+-- swapped. Therefore, this class should be avoided if compromising
+-- the initialisation value can be dangerous. Look into the type class
+-- `WriteAccessible` instead.
+class Memory m => Initialisable m v where
+  initialise :: v -> m -> IO ()
+
+-- | Memories from which pure values can be extracted. Much like the
+-- case of the `Initialisable` class, avoid using this interface if
+-- you do not want the data extracted to be swapped. Use the
+-- `ReadAccessible` class instead.
+class Memory m => Extractable m v where
+  extract  :: m -> IO v
+
+
+-- | Apply the given function to the value in the cell. For a function
+-- @f :: b -> a@, the action @modify f@ first extracts a value of type
+-- @b@ from the memory element, applies @f@ to it and puts the result
+-- back into the memory.
+--
+-- > modifyMem f mem = do b <- extract mem
+-- >                      initialise (f b) mem
+--
+modifyMem :: (Initialisable mem a, Extractable mem b) =>  (b -> a) -> mem -> IO ()
+modifyMem f mem = extract mem >>= flip initialise mem . f
+
+-- $access$
+--
+-- To avoid the problems associated with the `Initialisable` and
+-- `Extractable` interface, certain memory types give access to the
+-- associated buffers directly via the `Access` buffer. Data then
+-- needs to be transferred between these memories directly via
+-- `memcpy` making use of the `Access` buffers thereby avoiding a copy
+-- in the Haskell heap where it is prone to leak.
+--
+-- [`ReadAccessible`:] Instances of these class are memories that are
+-- on the source side of the transfer. Examples include the memory
+-- element that is used to implement a Diffie-Hellman key
+-- exchange. The exchanged key is in the memory which can then be used
+-- to initialise a cipher for the actual transfer of encrypted data .
+--
+-- [`WriteAccessible`:] Instances of these classes are memories that
+-- are on the destination side of the transfer. The memory element
+-- that stores the key for a cipher is an example of such a element.
+
+-- | Data type that gives an access buffer to portion of the memory.
+data Access = Access
+  { accessPtr         :: Ptr Word8
+    -- ^ The buffer pointer associated with this access.
+  , accessSize        :: BYTES Int
+    -- ^ Its size
+  }
+
+-- | Transfer the bytes from the source memory to the destination
+-- memory. The total bytes transferred is the minimum of the bytes
+-- available at the source and the space available at the destination.
+memTransfer :: (ReadAccessible src, WriteAccessible dest)
+            => Dest dest
+            -> Src src
+            -> IO ()
+memTransfer dest src = do
+  let dmem = unDest dest
+      smem = unSrc src
+      in do beforeReadAdjustment smem
+            copyAccessList (writeAccess dmem) (readAccess smem)
+            afterWriteAdjustment dmem
+
+
+-- | Copy access list, Internal function.
+copyAccessList :: [Access] -> [Access] -> IO ()
+copyAccessList (da:ds) (sa:ss)
+  | dsize > ssize = tAct >> copyAccessList (da' : ds) ss
+  | ssize > dsize = tAct >> copyAccessList ds         (sa' : ss)
+  | otherwise     = tAct >> copyAccessList ds ss
+    where dsize = accessSize da
+          ssize = accessSize sa
+          trans = min dsize ssize
+          dptr  = accessPtr da
+          sptr  = accessPtr sa
+          da'   = Access (accessPtr da `movePtr` trans) (dsize - trans)
+          sa'   = Access (accessPtr sa `movePtr` trans) (ssize - trans)
+          tAct  = memcpy (destination dptr) (source sptr) trans
+copyAccessList _ _ = return ()
+
+-- | This class captures memories from which bytes can be extracted
+-- directly from (portions of) its buffer.
+class Memory mem => ReadAccessible mem where
+  -- | Internal organisation of the data might need adjustment due to
+  -- host machine having a different endian than the standard byte
+  -- order of the associated type. This action perform the necessary
+  -- adjustment before the bytes can be read-off from the associated
+  -- `readAccess` adjustments.
+  beforeReadAdjustment :: mem -> IO ()
+
+  -- | The ordered access buffers for the memory through which bytes
+  -- may be read off (after running `beforeReadAdjustment` of course)
+  readAccess :: mem -> [Access]
+
+-- | This class captures memories that can be initialised by writing
+-- bytes to (portions of) its buffer.
+class Memory mem => WriteAccessible mem where
+
+  -- | The ordered access to buffers through which bytes may be
+  -- written into the memory.
+  writeAccess :: mem -> [Access]
+
+  -- | After writing data into the buffer, the memory might need
+  -- further adjustments before it is considered "initialised" with
+  -- the sensitive data.
+  --
+  afterWriteAdjustment :: mem -> IO ()
+
+--------------------- Some instances of Memory --------------------
+
+-- | A memory location to store a value of type having `Storable`
+-- instance.
+newtype MemoryCell a = MemoryCell { unMemoryCell :: Ptr a }
+
+
+instance Storable a => Memory (MemoryCell a) where
+
+  memoryAlloc = allocator undefined
+    where allocator :: Storable b => b -> Alloc (MemoryCell b)
+          allocator b = makeAlloc (alignedSizeOf $ pure b) $ MemoryCell . castPtr
+
+  unsafeToPointer  = castPtr . unMemoryCell
+
+-- | The location where the actual storing of element happens. This
+-- pointer is guaranteed to be aligned to the alignment restriction of @a@
+unsafeGetCellPointer :: Storable a => MemoryCell a -> Ptr a
+unsafeGetCellPointer = nextLocation . unMemoryCell
+
+-- | Work with the underlying pointer of the memory cell. Useful while
+-- working with ffi functions.
+withCellPointer :: Storable a => (Ptr a -> IO b) -> MemoryCell a -> IO b
+{-# INLINE withCellPointer #-}
+withCellPointer action = action . unsafeGetCellPointer
+
+-- | Copy the contents of one memory cell to another.
+copyCell :: Storable a => Dest (MemoryCell a) -> Src (MemoryCell a) -> IO ()
+copyCell dest src = memcpy (unsafeGetCellPointer <$> dest) (unsafeGetCellPointer <$> src) sz
+  where getProxy :: Dest (MemoryCell a) -> Proxy a
+        getProxy _ = Proxy
+        sz = sizeOf (getProxy dest)
+
+instance Storable a => Initialisable (MemoryCell a) a where
+  initialise a = flip pokeAligned a . unMemoryCell
+  {-# INLINE initialise #-}
+
+instance Storable a => Extractable (MemoryCell a) a where
+  extract = peekAligned . unMemoryCell
+  {-# INLINE extract #-}
+
+
+memCellToAccess :: EndianStore a => MemoryCell a -> [Access]
+memCellToAccess mem = [ Access { accessPtr  = castPtr $ unsafeGetCellPointer mem
+                               , accessSize = sizeOf  $ getProxy mem
+                               }
+                      ]
+  where getProxy   :: MemoryCell a -> Proxy a
+        getProxy _ =  Proxy
+
+instance EndianStore a => ReadAccessible (MemoryCell a) where
+  beforeReadAdjustment mem = adjustEndian (unsafeGetCellPointer mem) 1
+  readAccess               = memCellToAccess
+
+instance EndianStore a => WriteAccessible (MemoryCell a) where
+  writeAccess              = memCellToAccess
+  afterWriteAdjustment mem = adjustEndian (unsafeGetCellPointer mem) 1
diff --git a/core/Raaz/Core/MonoidalAction.hs b/core/Raaz/Core/MonoidalAction.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/MonoidalAction.hs
@@ -0,0 +1,238 @@
+{-# OPTIONS_HADDOCK hide                #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE FlexibleInstances          #-}
+-- | A module that abstracts out monoidal actions.
+module Raaz.Core.MonoidalAction
+       ( -- * Monoidal action
+         -- $basics$
+         LAction (..), Distributive, SemiR (..), semiRSpace, semiRMonoid
+         -- ** Monoidal action on functors
+       , LActionF(..), DistributiveF, TwistRF(..), twistFunctorValue, twistMonoidValue
+         -- * Fields
+         -- $fields$
+       , FieldA, FieldM, Field, computeField, runFieldM, liftToFieldM
+       ) where
+
+import Control.Arrow
+import Raaz.Core.Prelude
+import Raaz.Core.Types.Pointer
+
+------------------ Actions and Monoidal actions -----------------------
+
+-- $basics$
+--
+-- Consider any instance @l@ of a length unit as a monoid under
+-- addition. Length units acts on pointers by displacing them. It
+-- turns out that this action is crucial in abstracting out many
+-- pointer manipulations in our library. In particular, Applicative
+-- parsers, memory allocators and data serialisers can be abstractly
+-- captured using this action.
+--
+-- We start with setting up some terminology.  Our setting here is a
+-- space of points (captured by the type @space@) on which a monoid
+-- (captured by the type @m@) acts. The space which we are most
+-- interested in is the space of pointers and the monoid that act on
+-- it can be any instance of `LengthUnit` as described above.
+--
+-- In this module, we consider /left/ actions of monoids, although
+-- right actions can be analogously defined as well. For applications
+-- we have in mind, namely for parsers etc, it is sufficient to
+-- restrict our attention to left actions.  The left action will be
+-- written in multiplicative notation with the operator `<.>` being the
+-- multiplication.
+
+-- | A monoid @m@ acting on the left of a space. Think of a left
+-- action as a multiplication with the monoid. It should satisfy the
+-- law:
+--
+-- > 1 <.> p = p                         -- identity
+-- > a <> b <.> p  = a <.> b <.> p   -- successive displacements
+--
+class Monoid m => LAction m space where
+  (<.>) :: m -> space -> space
+
+
+infixr 5 <.>
+
+
+-- | Uniform action of a monoid on a functor. The laws that should
+-- be satisfied are:
+--
+-- > 1 <<.>> fx  = fx
+-- > (a <> b) <<.>> fx  = a . (b <<.>> fx)
+-- > m <<.>> fmap f u = fmap f (m <<.>> u)   -- acts uniformly
+class (Monoid m, Functor f) => LActionF m f where
+  (<<.>>) :: m -> f a -> f a
+
+infixr 5 <<.>>
+
+---------------------- The semi-direct products ------------------------
+
+-- | A left-monoid action on a monoidal-space, i.e. the space on which
+-- the monoid acts is itself a monoid, is /distributive/ if it
+-- satisfies the law:
+--
+-- > a <.> p <> q  = (a <.> p) <> (a <.> q).
+--
+-- The above law implies that every element @m@ is a monoid
+-- homomorphism.
+class (LAction m space, Monoid space) => Distributive m space
+
+-- | The semidirect product Space ⋊ Monoid. For monoids acting on
+-- monoidal spaces distributively the semi-direct product is itself a
+-- monoid. It turns out that data serialisers can essentially seen as
+-- a semidirect product.
+data SemiR space m = SemiR space !m
+
+
+instance Distributive m space => Semigroup (SemiR space m) where
+  (<>) (SemiR x a) (SemiR y b) = SemiR (x `mappend`  (a <.> y))  (a `mappend` b)
+
+instance Distributive m space => Monoid (SemiR space m) where
+
+  mempty = SemiR mempty mempty
+  {-# INLINE mempty #-}
+
+  mappend = (<>)
+  {-# INLINE mappend #-}
+
+  mconcat = foldr mappend mempty
+  {-# INLINE mconcat #-}
+
+-- | From the an element of semi-direct product Space ⋊ Monoid return
+-- the point.
+semiRSpace :: SemiR space m -> space
+{-# INLINE semiRSpace #-}
+semiRSpace (SemiR space _) = space
+
+-- | From the an element of semi-direct product Space ⋊ Monoid return
+-- the monoid element.
+semiRMonoid :: SemiR space m -> m
+{-# INLINE semiRMonoid #-}
+semiRMonoid (SemiR _ m) =  m
+
+--------------------------- Twisted functors ----------------------------
+
+
+
+-- | The generalisation of distributivity to applicative
+-- functors. This generalisation is what allows us to capture
+-- applicative functors like parsers. For an applicative functor, and
+-- a monoid acting uniformly on it, we say that the action is
+-- distributive if the following laws are satisfied:
+--
+-- > m <<.>> (pure a) = pure a            -- pure values are stoic
+-- > m <<.>> (a <*> b) = (m <<.>> a) <*> (m <<.>> b)  -- dist
+class (Applicative f, LActionF m f) => DistributiveF m f
+
+-- | The twisted functor is essentially a generalisation of
+-- semi-direct product to applicative functors.
+data TwistRF f m a = TwistRF (f a) !m
+
+-- | Get the underlying functor value.
+twistFunctorValue :: TwistRF f m a -> f a
+twistFunctorValue (TwistRF fa _) = fa
+{-# INLINE twistFunctorValue #-}
+
+-- | Get the underlying monoid value.
+twistMonoidValue :: TwistRF f m a -> m
+twistMonoidValue (TwistRF _ m) =  m
+{-# INLINE twistMonoidValue #-}
+
+instance Functor f => Functor (TwistRF f m) where
+  fmap f (TwistRF x m) = TwistRF (fmap f x) m
+
+-- Proof of functor laws.
+--
+-- fmap id (TwistRF (x, m)) = TwistRF (fmap id x, m)
+--                          = TwistRF (x, m)
+--
+-- fmap (f . g)  (TwistRF fx m) = TwistRF (fmap (f . g) x, m)
+--                              = TwistRF (fmap f . fmap g $ x, m)
+--                              = TwistRF (fmap f (fmap g x), m)
+--                              = fmap f   $ TwistRF (fmap g x,  m)
+--                              = (fmap f . fmap g) (TwistRF fx) m)
+--
+
+instance DistributiveF m f => Applicative (TwistRF f m) where
+  pure a = TwistRF (pure a) mempty
+  {-# INLINE pure #-}
+
+  (TwistRF f mf)  <*> (TwistRF val mval)  = TwistRF res mres
+    where res  = f <*> mf <<.>> val
+          mres = mf `mappend` mval
+
+-- Consider an expression @u = u1 <*> u2 <*> ... <ur>@ where
+-- ui = TwistRF fi mi
+--
+-- u = TwistRF f m where m = m1 <> m2 <> .. <> mr
+-- f = f1 <*> m1 f2 <*> (m1 m2) f3 ...    <*> (m1 m2 .. mr-1) fr.
+--
+-- We will separately verify the functor part and the monoid
+-- part of the  ofNow we can verify the laws of applicative
+--
+--
+
+
+------------------------- A generic field -----------------------------------
+
+-- $fields$
+--
+-- The main goal behind looking at monoidal actions are to captures
+-- concrete objects of interest to us like parsers, serialisers and
+-- memory allocators. These are essentially functions with domain
+-- `Ptr`. For example, a parser is a function that takes a `Ptr`,
+-- reads @n@ bytes say and produces a result a. To sequence the next
+-- parse we need to essentially keep track of this @n@. If we abstract
+-- this out to the general setting we need to consider functions whose
+-- domain is the space of points. We use the physicist's terminology
+-- and call them fields. The action of the monoid on a space of points
+-- naturally extends to fields on them
+--
+-- @F^g   = λ x -> F (x^g) @
+--
+-- For our applications, we need to define generalised fields
+-- associated with arrows. This is because we often have to deal with
+-- functions that have side effects (i.e. `Kleisli` arrows). However,
+-- for conceptual understanding, it is sufficient to stick to ordinary
+-- functions. In fact, the informal proofs that we have scattered in
+-- the source all have been written only for the arrow @->@.
+
+-- | A field on the space is a function from the points in the space
+-- to some value. Here we define it for a general arrow.
+
+type FieldA arrow = WrappedArrow arrow
+
+
+-- | A field where the underlying arrow is the (->). This is normally
+-- what we call a field.
+type Field = FieldA (->)
+
+-- | Compute the value of a field at a given point in the space.
+computeField :: Field space b -> space -> b
+computeField = unwrapArrow
+{-# INLINE computeField #-}
+
+-- | A monadic arrow field.
+type FieldM monad = FieldA (Kleisli monad)
+
+-- | Lift a monadic action to FieldM.
+liftToFieldM :: (a -> m b) -> FieldM m a b
+liftToFieldM = WrapArrow . Kleisli
+{-# INLINE liftToFieldM #-}
+-- | Runs a monadic field at a given point in the space.
+runFieldM :: FieldM monad space b -> space -> monad b
+runFieldM = runKleisli . unwrapArrow
+{-# INLINE runFieldM #-}
+
+-- | The action on the space translates to the action on field.
+instance (Arrow arrow, LAction m space) => LActionF m (WrappedArrow arrow space) where
+  m <<.>> field =   WrapArrow $ unwrapArrow field <<^ (m<.>)
+  {-# INLINE (<<.>>) #-}
+
+instance (Arrow arrow, LAction m space) => DistributiveF m (WrappedArrow arrow space)
+
+-- | The most interesting monoidal action for us.
+instance LengthUnit u => LAction u (Ptr a) where
+  a <.> ptr  = movePtr ptr a
+  {-# INLINE (<.>) #-}
diff --git a/core/Raaz/Core/Parse.hs b/core/Raaz/Core/Parse.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Parse.hs
@@ -0,0 +1,84 @@
+-- |
+--
+-- Module      : Raaz.Core.Parse
+-- Description : Applicative parsing from buffers.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Core.Parse
+       ( Parser, parseWidth, parseError, runParser
+       , parse, parseStorable
+       , parseVector, parseStorableVector
+       , parseByteString
+       , skip
+       ) where
+
+import           Data.ByteString           (ByteString)
+import           Data.Vector.Generic       (Vector)
+import           Foreign.Storable          (Storable, peek)
+import           System.IO.Unsafe          (unsafePerformIO)
+
+import           Raaz.Core.Parse.Unsafe
+import           Raaz.Core.Prelude
+import           Raaz.Core.Types.Endian
+import           Raaz.Core.Types.Pointer
+import           Raaz.Core.Util.ByteString (createFrom, length, withByteString)
+
+-- | Skip over some data.
+skip :: LengthUnit u => u -> Parser ()
+skip = flip unsafeMakeParser doNothing
+  where doNothing = const $ return ()
+
+-- | A parser that fails with a given error message.
+parseError  :: String -> Parser a
+parseError msg = unsafeMakeParser (0 :: BYTES Int) $ \ _ -> fail msg
+
+-- | Runs a parser on a byte string. It returns `Nothing` if the byte string is smaller than
+-- what the parser would consume.
+runParser :: Parser a -> ByteString -> Maybe a
+runParser pr bs
+  | length bs < parseWidth pr = Nothing
+  | otherwise                 = Just $ unsafePerformIO $ withByteString bs $ unsafeRunParser pr
+
+-- | The primary purpose of this function is to satisfy type checkers.
+parserToProxy   :: Parser a -> Proxy a
+parserToProxy _ = Proxy
+
+-- | Parses a value which is an instance of Storable. Beware that this
+-- parser expects that the value is stored in machine endian. Mostly
+-- it is useful in defining the `peek` function in a complicated
+-- `Storable` instance.
+parseStorable :: Storable a => Parser a
+parseStorable = pa
+  where pa = unsafeMakeParser (sizeOf $ parserToProxy pa) (peek . castPointer)
+
+-- | Parse a crypto value. Endian safety is take into account
+-- here. This is what you would need when you parse packets from an
+-- external source. You can also use this to define the `load`
+-- function in a complicated `EndianStore` instance.
+parse :: EndianStore a => Parser a
+parse = pa
+  where pa = unsafeMakeParser (sizeOf $ parserToProxy pa) (load . castPointer)
+
+-- | Parses a strict bytestring of a given length.
+parseByteString :: LengthUnit l => l -> Parser ByteString
+parseByteString l = unsafeMakeParser l $ createFrom l
+
+-- | Similar to `parseVector` but parses according to the host
+-- endian. This function is essentially used to define storable
+-- instances of complicated data. It is unlikely to be of use when
+-- parsing externally serialised data as one would want to keep track
+-- of the endianness of the data.
+parseStorableVector :: (Storable a, Vector v a) => Int -> Parser (v a)
+parseStorableVector n | n < 0      = parseError $ "parseStorableVector on " ++ show n
+                      | otherwise  = unsafeParseStorableVector n
+
+-- | Parses a vector of elements. It takes care of the correct endian
+-- conversion. This is the function to use while parsing external
+-- data.
+parseVector :: (EndianStore a, Vector v a) => Int -> Parser (v a)
+parseVector n | n < 0      = parseError $ "parseVector on " ++ show n
+              | otherwise  = unsafeParseVector n
diff --git a/core/Raaz/Core/Parse/Unsafe.hs b/core/Raaz/Core/Parse/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Parse/Unsafe.hs
@@ -0,0 +1,67 @@
+-- |
+--
+-- Module      : Raaz.Core.Parse.Unsafe
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Core.Parse.Unsafe
+       ( Parser, parseWidth
+       , unsafeMakeParser
+       , unsafeRunParser
+       , unsafeParseVector, unsafeParseStorableVector
+       ) where
+
+import           Data.Vector.Generic       (Vector, generateM)
+import           Foreign.Storable          (Storable, peekElemOff)
+import           Raaz.Core.Prelude
+import           Raaz.Core.MonoidalAction
+import           Raaz.Core.Types.Endian
+import           Raaz.Core.Types.Pointer
+
+
+type BytesMonoid   = BYTES Int
+type ParseAction   = FieldM IO (Ptr Word8)
+
+-- | An applicative parser type for reading data from a pointer.
+type Parser = TwistRF ParseAction BytesMonoid
+
+-- | Run the parser without checking the length constraints.
+unsafeRunParser :: Pointer ptr
+                => Parser a
+                -> ptr b
+                -> IO a
+unsafeRunParser prsr = unsafeWithPointerCast $ runIt prsr
+  where runIt = runFieldM . twistFunctorValue
+
+-- | Return the bytes that this parser will read.
+parseWidth :: Parser a -> BYTES Int
+parseWidth =  twistMonoidValue
+
+-- | Make an parser out of its action and the length of the buffer
+-- that it acts on.
+unsafeMakeParser :: LengthUnit l => l -> (Ptr Word8 -> IO a) -> Parser a
+unsafeMakeParser l action = TwistRF (liftToFieldM action) $ inBytes l
+
+-- | Similar to @unsafeParseVector@ but assumes the elements are
+-- encoded in host endian
+unsafeParseStorableVector :: (Storable a, Vector v a) => Int -> Parser (v a)
+unsafeParseStorableVector n = pvec
+  where pvec      = unsafeMakeParser  width $ \ cptr -> generateM n (getA cptr)
+        width     = fromIntegral n * sizeOf (thisProxy pvec)
+        getA      = peekElemOff . castPointer
+        thisProxy    :: Storable a => Parser (v a) -> Proxy a
+        thisProxy _ = Proxy
+
+-- | Parse a vector of elements making sure the proper endian
+-- conversion is done. It does not check whether the length parameter
+-- is non-negative and hence is unsafe. Use it only if you can prove
+-- that the length parameter is non-negative.
+unsafeParseVector :: (EndianStore a, Vector v a) => Int -> Parser (v a)
+unsafeParseVector n = pvec
+  where pvec     = unsafeMakeParser  width $ \ cptr -> generateM n (loadFromIndex (castPointer cptr))
+        width    = fromIntegral n * sizeOf (thisProxy pvec)
+        thisProxy    :: Storable a => Parser (v a) -> Proxy a
+        thisProxy _ = Proxy
diff --git a/core/Raaz/Core/Prelude.hs b/core/Raaz/Core/Prelude.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Prelude.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE CPP #-}
+-- |
+--
+-- Module      : Raaz.Core.Prelude
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Core.Prelude ( module X
+                         , module Prelude
+                         ) where
+
+import Control.Applicative          as X
+import Control.Monad                as X
+import Data.Bits                    as X
+import Data.ByteString.Char8           ()
+import Data.ByteString.Lazy.Char8      ()
+import Data.Kind                    as X
+import Data.Maybe                   as X
+import Data.Proxy                   as X
+
+import Data.String             as X
+import Data.Word               as X
+import Prelude hiding (length, replicate, zipWith)
+import System.IO               as X
diff --git a/core/Raaz/Core/Primitive.hs b/core/Raaz/Core/Primitive.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Primitive.hs
@@ -0,0 +1,107 @@
+-- |
+--
+-- Module      : Raaz.Core.Primitive
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE FlexibleContexts            #-}
+{-# LANGUAGE DataKinds                   #-}
+
+module Raaz.Core.Primitive
+       ( -- * Cryptographic Primtives
+         Primitive(..), Key, Nounce, Block, BlockPtr, AlignedBlockPtr
+       , BlockCount(..), blocksOf
+       ) where
+
+import Data.Vector.Unboxed (Unbox)
+import GHC.TypeLits
+import Foreign.Storable ( Storable )
+import Raaz.Core.Prelude
+import Raaz.Core.Types.Endian
+import Raaz.Core.Types.Pointer
+import Raaz.Core.Types.Tuple
+
+----------------------- A primitive ------------------------------------
+
+
+-- | Cryptographic primitives that process bulk data (like ciphers,
+-- cryptographic hashes) process data in blocks. For data that is not
+-- a multiple of the block size they may have some padding
+-- strategy. The type class that captures an abstract block
+-- cryptographic primitive.
+--
+
+class ( Unbox (WordType p)
+      , EndianStore (WordType p)
+      , KnownNat (WordsPerBlock p)
+      ) => Primitive p where
+
+  -- | The block which is the smallest unit of data that the primitive
+  -- processes, is typically considered as an array of a particular
+  -- word which is captured by the following associated type.
+  type WordType p :: Type
+
+  -- | The size of the array that forms the block. In particular, the
+  -- block can be seen as an array of size `BlockArraySize p` of type
+  -- `WORD p`.
+  type WordsPerBlock p :: Nat
+
+-- | The type family that captures the key of a keyed primitive.
+data family Key p :: Type
+
+-- | In addition to keys, certain primitives require nounces that can
+-- be public but needs to be distinct across different uses when
+-- sharing the key. The type family that captures the nounce for a
+-- primitive (if it requires one).
+data family Nounce p :: Type
+
+-- | A block of the primitive.
+type Block p   = Tuple (WordsPerBlock p) (WordType p)
+
+-- | Pointer to a block of the primitive.
+type BlockPtr p = Ptr (Block p)
+
+-- | Aligned version of block pointers.
+
+type AlignedBlockPtr n p = AlignedPtr n (Block p)
+
+
+------------------- Type safe lengths in units of block ----------------
+
+-- | Type safe message length in units of blocks of the primitive.
+-- When dealing with buffer lengths for a primitive, it is often
+-- better to use the type safe units `BlockCount`. Functions in the raaz
+-- package that take lengths usually allow any type safe length as
+-- long as they can be converted to bytes. This can avoid a lot of
+-- tedious and error prone length calculations.
+newtype BlockCount p = BlockCount {unBlockCount :: Int}
+                     deriving (Show, Eq, Ord, Enum, Storable)
+
+instance Semigroup (BlockCount p) where
+  (<>) x y = BlockCount $ unBlockCount x + unBlockCount y
+instance Monoid (BlockCount p) where
+  mempty   = BlockCount 0
+  mappend  = (<>)
+
+
+instance Primitive p => LengthUnit (BlockCount p) where
+  inBytes p@(BlockCount x) = toEnum x * nWords p * wordSize p
+    where wordSize = sizeOf . proxyWT
+          nWords   = toEnum . fromEnum . natVal . proxyWPB
+          proxyWT :: Primitive p => BlockCount p -> Proxy (WordType p)
+          proxyWT  = const Proxy
+          proxyWPB   :: Primitive p => BlockCount p -> Proxy (WordsPerBlock p)
+          proxyWPB = const Proxy
+
+
+-- | The expression @n `blocksOf` primProxy@ specifies the message
+-- lengths in units of the block length of the primitive whose proxy
+-- is @primProxy@. This expression is sometimes required to make the
+-- type checker happy.
+blocksOf :: Int -> Proxy p -> BlockCount p
+blocksOf n _ = BlockCount n
diff --git a/core/Raaz/Core/Transfer.hs b/core/Raaz/Core/Transfer.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Transfer.hs
@@ -0,0 +1,165 @@
+{-# LANGUAGE FlexibleContexts           #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE KindSignatures             #-}
+-- |
+--
+-- Module      : Raaz.Core.Transfer
+-- Description : Type safe transfer of bytes.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Core.Transfer
+       ( -- * Transfer actions.
+         -- $transfer$
+         Transfer, ReadFrom, WriteTo
+       , consume, consumeStorable, consumeParse
+       , writeEncodable
+       , write, writeStorable, writeVector, writeStorableVector
+       , writeBytes
+       , padWrite, prependWrite, glueWrites
+       , writeByteString
+       , transferSize
+       , skip
+       ) where
+
+
+import qualified Data.Vector.Generic       as G
+import           Foreign.Storable          ( Storable, poke )
+
+import           Raaz.Core.Transfer.Unsafe
+import           Raaz.Core.Prelude
+import           Raaz.Core.Parse.Unsafe
+import           Raaz.Core.Parse     hiding (skip)
+import           Raaz.Core.Types.Endian
+import           Raaz.Core.Types.Pointer
+import           Raaz.Core.Encode
+
+
+-- | The transfer @skip l@ skip ahead by an offset @l@. If it is a
+-- read, it does not read the next @l@ positions. If it is a write it
+-- does not mutate the next @l@ positions.
+skip :: LengthUnit l => l -> Transfer t
+skip = flip unsafeMakeTransfer doNothing
+       where doNothing = const $ return ()
+
+
+-------------------------- Monoids for consuming stuff ------------------------------------
+
+-- | Given a parser @p :: Parser a@ for parsing @a@ and @act :: a -> m
+-- b@ consuming a, @consumeParse p act@, gives a reader that parses a
+-- from the input buffer passing it to the action act.
+consumeParse ::  Parser a -> (a -> IO b) -> ReadFrom
+consumeParse p action = unsafeMakeTransfer (parseWidth p) $
+                        unsafeRunParser p >=> void . action
+
+-- | Reads @a@ from the buffer and supplies it to the action. The
+-- value read is independent of the endianness of the underlying.
+consume :: EndianStore a
+        => (a -> IO b)
+        -> ReadFrom
+consume = consumeParse parse
+
+-- | Similar to @consume@ but does not take care of adjusting for
+-- endianness. Use therefore limited to internal buffers.
+consumeStorable :: Storable a
+                => (a -> IO b)
+                -> ReadFrom
+consumeStorable = consumeParse parseStorable
+
+-------------------------- Monoid for writing stuff --------------------------------------
+
+-- | The expression @`writeStorable` a@ gives a write action that
+-- stores a value @a@ in machine endian. The type of the value @a@ has
+-- to be an instance of `Storable`. This should be used when we want
+-- to talk with C functions and not when talking to the outside world
+-- (otherwise this could lead to endian confusion). To take care of
+-- endianness use the `write` combinator.
+writeStorable :: Storable a => a -> WriteTo
+writeStorable a = unsafeMakeTransfer (sizeOf $ pure a) pokeIt
+  where pokeIt = flip poke a . castPointer
+-- | The expression @`write` a@ gives a write action that stores a
+-- value @a@. One needs the type of the value @a@ to be an instance of
+-- `EndianStore`. Proper endian conversion is done irrespective of
+-- what the machine endianness is. The man use of this write is to
+-- serialize data for the consumption of the outside world.
+write :: EndianStore a => a -> WriteTo
+write a = unsafeMakeTransfer (sizeOf $ pure a) $ flip (store . castPointer) a
+
+
+-- | Write any encodable elements
+writeEncodable :: Encodable a => a -> WriteTo
+writeEncodable = writeByteString . toByteString
+
+-- | The vector version of `writeStorable`.
+writeStorableVector :: (Storable a, G.Vector v a) => v a -> WriteTo
+{-# INLINE writeStorableVector #-}
+writeStorableVector = G.foldl' foldFunc mempty
+  where foldFunc w a =  w <> writeStorable a
+
+{-
+
+TODO: This function can be slow due to the fact that each time we use
+the semi-direct product, we incur a cost due to the lambda being not
+lifted.
+
+-}
+
+-- | The vector version of `write`.
+writeVector :: (EndianStore a, G.Vector v a) => v a -> WriteTo
+{-# INLINE writeVector #-}
+{- TODO: improve this using the fact that the size is known -}
+writeVector = G.foldl' foldFunc mempty
+  where foldFunc w a =  w <> write a
+{- TODO: Same as in writeStorableVector -}
+
+
+-- | The combinator @writeBytes b n@ writes @b@ as the next @n@
+-- consecutive bytes.
+writeBytes :: LengthUnit n
+           => Word8   -- ^ Byte to write
+           -> n       -- ^ How much to write
+           -> WriteTo
+writeBytes w8 n = unsafeMakeTransfer n memsetIt
+  where memsetIt cptr = memset cptr w8 n
+
+-- | The combinator @glueWrites w n hdr ftr@ is equivalent to @hdr <>
+-- glue <> ftr@ where the write @glue@ writes just enough bytes @w@ so
+-- that the total length is aligned to the boundary @n@.
+glueWrites :: LengthUnit n
+           => Word8    -- ^ The bytes to use in the glue
+           -> n        -- ^ The length boundary to align to.
+           -> WriteTo  -- ^ The header write
+           -> WriteTo  -- ^ The footer write
+           -> WriteTo
+glueWrites w8 n hdr ftr = hdr <> writeBytes w8 lglue <> ftr
+  where lhead   = transferSize hdr
+        lfoot   = transferSize ftr
+        lexceed = (lhead + lfoot) `rem` nBytes  -- bytes exceeding the boundary.
+        lglue   = if lexceed > 0 then nBytes - lexceed else 0
+        nBytes  = inBytes n
+
+-- | The write action @prependWrite w n wr@ is wr pre-pended with the byte @w@ so that the total length
+-- ends at a multiple of @n@.
+prependWrite  :: LengthUnit n
+              => Word8     -- ^ the byte to pre-pend with.
+              -> n         -- ^ the length to align the message to
+              -> WriteTo  -- ^ the message that needs pre-pending
+              -> WriteTo
+prependWrite w8 n = glueWrites w8 n mempty
+
+-- | The write action @padWrite w n wr@ is wr padded with the byte @w@ so that the total length
+-- ends at a multiple of @n@.
+padWrite :: LengthUnit n
+         => Word8     -- ^ the padding byte to use
+         -> n         -- ^ the length to align message to
+         -> WriteTo   -- ^ the message that needs padding
+         -> WriteTo
+padWrite w8 n = flip (glueWrites w8 n) mempty
+
+
+-------------  Reading stuff  -----------------------------------
diff --git a/core/Raaz/Core/Transfer/Unsafe.hs b/core/Raaz/Core/Transfer/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Transfer/Unsafe.hs
@@ -0,0 +1,227 @@
+{-# LANGUAGE FlexibleContexts           #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE KindSignatures             #-}
+
+-- |
+--
+-- Module      : Raaz.Core.Transfer.Unsafe
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Core.Transfer.Unsafe
+       ( -- * Transfer actions.
+         -- $transfer$
+         Transfer, ReadFrom, WriteTo
+       , unsafeMakeTransfer
+       , unsafeTransfer
+       , unsafeInterleave
+       , unsafeReadIntoPtr, unsafeReadInto
+       , unsafeWriteFrom
+       , unsafeWriteFromPtr
+       , writeByteString
+       , transferSize
+       ) where
+
+import           Data.ByteString          (ByteString)
+import           Data.ByteString.Internal (unsafeCreate)
+
+import           Raaz.Core.Prelude
+import           Raaz.Core.MonoidalAction
+import           Raaz.Core.Types.Copying
+import           Raaz.Core.Types.Endian
+import           Raaz.Core.Types.Pointer
+import           Raaz.Core.Encode
+import           Raaz.Core.Util.ByteString as BU
+
+-- $transfer$
+--
+-- Low level buffer operations are problematic portions of any
+-- crypto-library. Buffers are usually represented by the starting
+-- pointer and one needs to keep track of the buffer sizes
+-- carefully. An operation that writes into a buffer, if it writes
+-- beyond the actual size of the buffer, can lead to a possible remote
+-- code execution. On the other hand, when reading from a buffer, if
+-- we read beyond the buffer it can leak private data to the attacker
+-- (as in the case of Heart bleed bug). This module is indented to
+-- give a relatively high level interface to this problem. We expose
+-- two types, the `ReadM` and the `Write` type which deals with these
+-- two aspects. Both these actions keep track of the number of bytes
+-- that they transfer.
+
+-- Complex reads and writes can be constructed using the monoid
+-- instance of these types.
+
+data Mode = ReadFromBuffer
+          | WriteToBuffer
+
+
+-- | This monoid captures a transfer action.
+newtype TransferM (t :: Mode) = TransferM { unTransferM :: IO () }
+
+instance Semigroup (TransferM t) where
+  (<>) wa wb = TransferM $ unTransferM wa >> unTransferM wb
+  {-# INLINE (<>) #-}
+
+instance Monoid (TransferM t) where
+  mempty        = TransferM $ return ()
+  {-# INLINE mempty #-}
+
+  mappend = (<>)
+  {-# INLINE mappend #-}
+
+  mconcat = TransferM . mapM_ unTransferM
+  {-# INLINE mconcat #-}
+
+-- | A action that transfers bytes from its input pointer. Transfer
+-- could either be writing or reading.
+type TransferAction t = Ptr Word8 -> TransferM t
+
+instance LAction (BYTES Int) (TransferAction t) where
+  offset <.> action = action . (offset<.>)
+  {-# INLINE (<.>) #-}
+
+instance Distributive (BYTES Int) (TransferAction t)
+
+-- | An element of type `Tranfer t m` is an action which when executed
+-- transfers bytes /into/ or out of its input buffer.  The type
+-- @`Transfer` t m@ forms a monoid and hence can be concatenated using
+-- the `<>` operator.
+
+type Transfer t = SemiR (TransferAction t) (BYTES Int)
+
+-- | Returns the bytes that will be written when the write action is performed.
+transferSize :: Transfer t -> BYTES Int
+transferSize = semiRMonoid
+
+
+-- | Make an explicit transfer action.
+unsafeMakeTransfer :: LengthUnit u
+                   => u                    -- ^ length of pointer accessed
+                   -> (Ptr Word8 -> IO ()) -- ^ Pointer action to run
+                   -> Transfer t
+{-# INLINE unsafeMakeTransfer #-}
+unsafeMakeTransfer sz action = SemiR (TransferM . action) $ inBytes sz
+
+
+-- | This combinator runs an IO action which does not read/write any
+-- bytes form the input buffer. This can be used to interleave some
+-- side action in between the transfer.
+unsafeInterleave :: IO a       -- ^
+                 -> Transfer t
+unsafeInterleave = unsafeMakeTransfer (0 :: BYTES Int) . const . void
+
+-- | Perform the transfer without checking the bounds.
+unsafeTransfer :: Pointer ptr
+               => Transfer t
+               -> ptr a       -- ^ The pointer to the buffer to/from which transfer occurs.
+               -> IO ()
+unsafeTransfer tr = unsafeWithPointerCast transferIt
+  where transferIt = unTransferM . semiRSpace tr
+
+
+------------------------  Read action ----------------------------
+
+-- | The `ReadFrom` is the type that captures the act of reading from a
+-- buffer and possibly doing some action on the bytes read. Although
+-- inaccurate, it is helpful to think of elements of `ReadFromM` as action
+-- that on an input buffer transfers data from it to some unspecified
+-- source.
+--
+-- ReadFrom actions form a monoid with the following semantics: if @r1@
+-- and @r2@ are two read actions then @r1 `<>` r2@ first reads the the
+-- data associated with @r1@ and then reads the data associated with
+-- @r2@.
+type ReadFrom     = Transfer 'ReadFromBuffer
+
+
+
+-- | The action @unsafeReadIntoPtr sz dptr@ gives a read action, which
+-- if run on an input buffer, will transfers @sz@ bytes to the
+-- destination pointer @dptr@. This action is unsafe because no checks
+-- are done (or is it possible) to see if the destination pointer has
+-- enough space to accommodate the bytes read.
+unsafeReadIntoPtr :: (Pointer ptr, LengthUnit sz)
+                  => sz               -- ^ how much to read.
+                  -> Dest (ptr Word8) -- ^ buffer to read the bytes into
+                  -> ReadFrom
+unsafeReadIntoPtr sz dest = unsafeMakeTransfer sz
+                            $ \ ptr -> memcpy dest (source ptr) sz
+
+-- | The action @unsafeReadInto n dptr@ gives a read action which if
+-- run on an input buffer, will transfers @n@ elements of type @a@
+-- into the buffer pointed by @dptr@. Like @unsafeReadIntoPtr@ this
+-- function does no checks on the destination pointer and hence is
+-- unsafe.
+unsafeReadInto :: EndianStore a
+               => Int             -- ^ how many elements to read.
+               -> Dest (Ptr a)    -- ^ buffer to read the elements into
+               -> ReadFrom
+unsafeReadInto n dest = unsafeMakeTransfer (sz dest)
+                  $ \ ptr -> copyFromBytes dest (source ptr) n
+  where sz  = (*) (toEnum n) . sizeOf . proxy
+        proxy :: Dest (Ptr a) -> Proxy a
+        proxy = const Proxy
+
+
+-- | The `Write` is the type that captures the act of writing to a
+-- buffer. Although inaccurate, it is helpful to think of elements of
+-- `Write` as source of bytes of a fixed size.
+--
+-- Write actions form a monoid with the following semantics: if @w1@
+-- and @w2@ are two write actions then @w1 `<>` w2@ first writes the
+-- data associated from @w1@ and then the writes the data associated
+-- with  @w2@.
+type WriteTo     = Transfer 'WriteToBuffer
+
+
+
+-- | Write many elements from the given buffer
+unsafeWriteFrom :: EndianStore a => Int -> Src (Ptr a) -> WriteTo
+unsafeWriteFrom n src = unsafeMakeTransfer (sz src)
+                  $ \ ptr -> copyToBytes (destination ptr) src n
+  where sz = (*) (toEnum n) . sizeOf . proxy
+        proxy :: Src (Ptr a) -> Proxy a
+        proxy = const Proxy
+
+
+
+-- | The action @writeFromPtr sz sptr@ gives a write action, which if
+-- run on an input buffer @buf@, will transfers @sz@ bytes from the
+-- source pointer @sptr@ to the given buffer. Note that it is the
+-- responsibility of the user to make sure that the input buffer @buf@
+-- has enough space to receive @sz@ units of data if and when the read
+-- action is executed.
+--
+unsafeWriteFromPtr ::(Pointer ptr, LengthUnit sz)
+                   => sz
+                   -> Src (ptr Word8)
+                   -> WriteTo
+unsafeWriteFromPtr sz src = unsafeMakeTransfer sz
+                            $ \ ptr -> memcpy (destination ptr) src sz
+
+
+
+instance IsString WriteTo where
+  fromString = writeByteString . fromString
+
+instance Encodable WriteTo where
+  {-# INLINE toByteString #-}
+  toByteString w  = unsafeCreate n $ unsafeTransfer w
+    where BYTES n = transferSize w
+
+  {-# INLINE unsafeFromByteString #-}
+  unsafeFromByteString = writeByteString
+
+  {-# INLINE fromByteString #-}
+  fromByteString       = Just . writeByteString
+
+
+
+-- | Writes a strict bytestring.
+writeByteString :: ByteString -> WriteTo
+writeByteString bs = unsafeMakeTransfer (BU.length bs) $ BU.unsafeCopyToPointer bs
diff --git a/core/Raaz/Core/Types.hs b/core/Raaz/Core/Types.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Types.hs
@@ -0,0 +1,78 @@
+-- |
+--
+-- Module      : Raaz.Core.Types
+-- Description : The core types of raaz
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Core.Types
+       ( -- * Overview.
+         -- $overview$
+         module Raaz.Core.Primitive
+       , module Raaz.Core.Types.Equality
+       , module Raaz.Core.Types.Endian
+       , module Raaz.Core.Types.Pointer
+       , module Raaz.Core.Types.Tuple
+       , module Raaz.Core.Types.Copying
+       ) where
+
+import Raaz.Core.Types.Equality
+
+import Raaz.Core.Primitive            ( BlockCount                  )
+
+-- Developer note: We want to expose LE and BE without its
+-- constructors. This is a ugly hack for it.
+import Raaz.Core.Types.Endian  hiding (LE, BE)
+import Raaz.Core.Types.Endian         (LE, BE)
+
+import Raaz.Core.Types.Pointer hiding ( AlignedPtr, BYTES)
+import Raaz.Core.Types.Pointer        ( AlignedPtr, BYTES)
+import Raaz.Core.Types.Tuple   hiding ( map                     )
+import Raaz.Core.Types.Copying( Src, Dest, source, destination)
+
+
+-- $overview$
+--
+-- __WARNING:__ If you are just a user of this library, it is unlikely
+-- that you will need to import this module. It is only required if
+-- you are a developer and want to define a new cryptographic data
+-- type.
+--
+-- A lot of cryptographic code is low level and involves quite a bit
+-- of boilerplate and are therefore fertile grounds for bugs. This
+-- module describes types specific to raaz that are designed to catch
+-- bugs in such low level code. The three principles that we follow
+-- in the design are:
+--
+-- 1. Define distinct types for semantically different objects. For
+--    example, distinguish between buffer length/pointer offset in
+--    bytes versus other units (see `LengthUnit`) or make endian aware
+--    variants of standard word types (see `BE` and `LE`) etc.
+--
+-- 2. Make sure that the low level functions are sensitive to these
+--    types. For example, the function `sizeOf` exposed here returns
+--    @`BYTES` `Int`@ instead of just `Int` and functions like
+--    `allocaBuffer` are generic enough to work with any length units.
+--
+-- 3. Provide obvious instances for some basic type and have and
+--    idiom/design pattern to build such interfaces for user defined
+--    types. For example, we have a very specific way to build timing
+--    safe equality functions for arbitrary types. Most of the time,
+--    in our case it just amounts to handling product types.
+--
+-- == Role of Monoids.
+--
+-- Monoids play an important role in facilitating the top down
+-- approach to type safety that we mentioned above. Some types
+-- described here have a natural monoid semantics. For example, when
+-- dealing with pointer offsets and buffer sizes, we use type safe
+-- length units like `BYTES`. These length units are instances of
+-- monoids where the underlying operation is addition. On the other
+-- hand, when it comes to pointer alignment which is captured by the
+-- type `Alignment`, the monoid operation is taking the lowest common
+-- multiple.
+--
+{-# ANN module "HLint: ignore Use import/export shortcut" #-}
diff --git a/core/Raaz/Core/Types/Copying.hs b/core/Raaz/Core/Types/Copying.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Types/Copying.hs
@@ -0,0 +1,50 @@
+{-# OPTIONS_HADDOCK hide #-}
+-- |
+--
+-- Module      : Raaz.Core.Types.Copying
+-- Description : Avoid confusion between source and destination while copying.
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.Core.Types.Copying
+       ( Src(..), Dest(..), source, destination
+       ) where
+
+import Raaz.Core.Prelude
+
+-- | The source of a copy operation. Besides the `source` smart
+-- constructor, the functor instance allows to transform the internal
+-- type using the `fmap` (e.g. given an @sptr :: Src (Ptr Word8)@
+-- shift it by an offset).
+--
+-- For FFI use: One can use this type directly in FFI interface by
+-- importing "Raaz.Core.Types.Internal" to get access to the
+-- constructor.
+newtype Src  a = Src { unSrc :: a }
+
+-- | Smart constructor for `Src`. Copying functions
+source :: a -> Src a
+source = Src
+
+instance Functor Src where
+  fmap f = Src . f . unSrc
+
+-- | The destination of a copy operation. Besides the `destination`
+-- smart constructor, the functor instance allows to transform the
+-- internal type using the `fmap` (e.g. given an @dptr :: Dest (Ptr
+-- Word8)@ shift it by an offset).
+--
+-- For FFI use: One can use this type directly in FFI interface by
+-- importing "Raaz.Core.Types.Internal" to get access to the
+-- constructor.
+
+newtype Dest a = Dest { unDest :: a }
+
+-- | Smart constructor for `Dest`.
+destination :: a -> Dest a
+destination = Dest
+
+instance Functor Dest where
+  fmap f = Dest . f . unDest
diff --git a/core/Raaz/Core/Types/Endian.hs b/core/Raaz/Core/Types/Endian.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Types/Endian.hs
@@ -0,0 +1,436 @@
+{-# OPTIONS_HADDOCK hide                #-}
+{-# LANGUAGE CPP                        #-}
+{-# LANGUAGE ForeignFunctionInterface   #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE DeriveDataTypeable         #-}
+{-# LANGUAGE TypeFamilies               #-}
+
+-- | Endian safe types.
+module Raaz.Core.Types.Endian
+       ( -- * Endianess aware types.
+         -- $endianness$
+         EndianStore(..), copyFromBytes, copyToBytes
+       -- ** Endian explicit word types.
+       , LE(..), BE(..), littleEndian, bigEndian
+       -- ** Helper functions for endian aware storing and loading.
+       , storeAt, storeAtIndex
+       , loadFrom, loadFromIndex
+       ) where
+
+
+import           Control.DeepSeq             ( NFData)
+import           Data.Typeable
+import           Data.Vector.Unboxed         ( MVector(..), Vector, Unbox )
+import           Foreign.Ptr                 ( castPtr )
+import           Foreign.Storable            ( Storable, peek, poke )
+
+import qualified Data.Vector.Generic         as GV
+import qualified Data.Vector.Generic.Mutable as GVM
+
+import           Raaz.Core.Prelude
+import           Raaz.Core.Types.Copying
+import           Raaz.Core.Types.Pointer
+import           Raaz.Core.Types.Equality
+
+#ifndef __HLINT__
+#include "MachDeps.h"
+#endif
+
+-- $endianness$
+--
+-- Cryptographic primitives often consider their input as an array of
+-- words of a particular endianness. Endianness is only relevant when
+-- serialising to (or de-serialising from) their encoding to the
+-- outside world. Raaz strives to use types to provide an endian
+-- agnostic interface to all data that is relevant to the outside
+-- world.
+--
+-- The starting point of an endian agnostic interface is the class
+-- `EndianStore`. Instances of this class support an endian agnostic
+-- `load` and `store`. Endian adjusted copying is also provided for
+-- these types through the helper functions `copyFromBytes` and
+-- `copyToBytes`.
+--
+-- It is tedious to think about endianness for each new type one might
+-- encounter. As before, we have a top down approach to defining such
+-- an interface. To start with, the library exposes endian aware
+-- variants of `Word32` and `Word64` and functions @littleEndian@ and
+-- @bigEndian@ for conversions. The `Tuple` type inherits the
+-- endianness of its element type, i.e for example @Tuple 10 (LE
+-- Word32)@ when loded (or stored) will load (or store) 10 32-bit
+-- words assuming that the words are expressed in little endian. Other
+-- types are then built out of these endian aware types. For example,
+-- cryptographic type `SHA512` is defined as.
+--
+-- >
+-- > newtype SHA512 = SHA512 (Tuple 8 (BE Word64))
+-- >                      deriving (Equality, Eq, Storable, EndianStore)
+-- >
+--
+
+-- | This class captures types which provides an endian agnostic way
+-- of loading from and storing to data buffers. Any multi-byte type
+-- that is meant to be serialised to the outside world should be an
+-- instance of this class. When defining the `load`, `store`,
+-- `adjustEndian` member functions, care should be taken to ensure
+-- proper endian conversion.
+--
+class Storable w => EndianStore w where
+
+  -- | The action @store ptr w@ stores @w@ at the location pointed by
+  -- @ptr@.  Endianness of the type @w@ is taken care of when storing.
+  -- For example, irrespective of the endianness of the machine,
+  -- @store ptr (0x01020304 :: BE Word32)@ will store the bytes
+  -- @0x01@, @0x02@, @0x03@, @0x04@ respectively at locations @ptr@,
+  -- @ptr +1@, @ptr+2@ and @ptr+3@. On the other hand @store ptr
+  -- (0x01020304 :: LE Word32)@ would store @0x04@, @0x03@, @0x02@,
+  -- @0x01@ at the above locations.
+
+  store :: Ptr w   -- ^ the location.
+        -> w       -- ^ value to store
+        -> IO ()
+
+  -- | The action @load ptr@ loads the value stored at the @ptr@. Like
+  -- store, it takes care of the endianness of the data type.  For
+  -- example, if @ptr@ points to a buffer containing the bytes @0x01@,
+  -- @0x02@, @0x03@, @0x04@, irrespective of the endianness of the
+  -- machine, @load ptr :: IO (BE Word32)@ will load the vale
+  -- @0x01020304@ of type @BE Word32@ and @load ptr :: IO (LE Word32)@
+  -- will load @0x04030201@ of type @LE Word32@.
+  load  :: Ptr w -> IO w
+
+  -- | The action @adjustEndian ptr n@ adjusts the encoding of bytes
+  -- stored at the location @ptr@ to conform with the endianness of
+  -- the underlying data type. For example, assume that @ptr@ points
+  -- to a buffer containing the bytes @0x01 0x02 0x03 0x04@, and we
+  -- are on a big endian machine, then @adjustEndian (ptr :: Ptr (LE
+  -- Word32)) 1@ will result in @ptr@ pointing to the sequence @0x04
+  -- 0x03 0x02 0x01@. On the other hand if we were on a little endian
+  -- machine, the sequence should remain the same.  In particular, the
+  -- following equalities should hold.
+  --
+  -- >
+  -- > store ptr w          = poke ptr w >> adjustEndian ptr 1
+  -- >
+  --
+  -- Similarly the value loaded by @load ptr@ should be same as the
+  -- value returned by @adjustEndian ptr 1 >> peak ptr@, although the
+  -- former does not change the contents stored at @ptr@ where as the
+  -- latter might does modify the contents pointed by @ptr@ if the
+  -- endianness of the machine and the time do not agree.
+  --
+  -- The action @adjustEndian ptr n >> adjustEndian ptr n @ should be
+  -- equivalent to @return ()@.
+  --
+  adjustEndian :: Ptr w  -- ^ buffer pointers,
+               -> Int    -- ^ how many w's are present,
+               -> IO ()
+
+
+instance EndianStore () where
+  store            = poke
+  load             = peek
+  adjustEndian _ _ = return ()
+
+instance EndianStore Word8 where
+  store                  = poke
+  load                   = peek
+  adjustEndian  _ _      = return ()
+
+instance EndianStore w => EndianStore (BYTES w) where
+  store ptr (BYTES w)  = store (castPtr ptr) w
+  load                 = fmap BYTES . load . castPtr
+  adjustEndian         = adjustEndian . castToPtrW
+    where castToPtrW :: Ptr (BYTES w) -> Ptr w
+          castToPtrW = castPtr
+
+-- | Store the given value at an offset from the crypto pointer. The
+-- offset is given in type safe units.
+storeAt :: ( EndianStore w
+           , LengthUnit offset
+           )
+        => Ptr w     -- ^ the pointer
+        -> offset    -- ^ the absolute offset in type safe length units.
+        -> w         -- ^ value to store
+        -> IO ()
+{-# INLINE storeAt #-}
+storeAt ptr = store . movePtr ptr
+
+-- | Store the given value as the @n@-th element of the array
+-- pointed by the crypto pointer.
+storeAtIndex :: EndianStore w
+             => Ptr w          -- ^ the pointer to the first element of the
+                               -- array
+             -> Int            -- ^ the index of the array
+             -> w              -- ^ the value to store
+             -> IO ()
+{-# INLINE storeAtIndex #-}
+storeAtIndex cptr index w = storeAt cptr offset w
+  where offset  = toEnum index * sizeOf (pure w)
+
+
+-- | Load the @n@-th value of an array pointed by the crypto pointer.
+loadFromIndex :: EndianStore w
+              => Ptr w   -- ^ the pointer to the first element of
+                         -- the array
+              -> Int     -- ^ the index of the array
+              -> IO w
+{-# INLINE loadFromIndex #-}
+loadFromIndex cptr index = load $ shiftPtr cptr
+  where shiftPtr :: Storable w => Ptr w -> Ptr w
+        shiftPtr ptr = movePtr ptr (toEnum index * sizeOf (getProxy ptr))
+        getProxy    :: Ptr w -> Proxy w
+        getProxy    = const Proxy
+-- | Load from a given offset. The offset is given in type safe units.
+loadFrom :: ( EndianStore w
+            , LengthUnit offset
+            )
+         => Ptr w    -- ^ the pointer
+         -> offset   -- ^ the offset
+         -> IO w
+{-# INLINE loadFrom #-}
+loadFrom ptr = load . movePtr ptr
+
+-- | For the type @w@, the action @copyFromBytes dest src n@ copies @n@-elements from
+-- @src@ to @dest@. Copy performed by this combinator accounts for the
+-- endianness of the data in @dest@ and is therefore /not/ a mere copy
+-- of @n * sizeOf(w)@ bytes. This action does not modify the @src@
+-- pointer in any way.
+
+copyFromBytes :: EndianStore w
+              => Dest (Ptr w)
+              -> Src  (Ptr Word8)
+              -> Int          -- ^ How many items.
+              -> IO ()
+copyFromBytes dest@(Dest ptr) src n =  memcpy (castPtr <$> dest) src (sz dest Proxy)
+                                       >> adjustEndian ptr n
+  where sz          :: Storable w => Dest (Ptr w) -> Proxy w -> BYTES Int
+        sz _ wProxy =  sizeOf wProxy * toEnum n
+
+-- | Similar to @copyFromBytes@ but the transfer is done in the other direction. The copy takes
+-- care of performing the appropriate endian encoding.
+copyToBytes :: EndianStore w
+            => Dest (Ptr Word8)
+            -> Src  (Ptr w)
+            -> Int
+            -> IO ()
+copyToBytes dest@(Dest dptr) src n =  memcpy dest  (castPtr <$> src) (sz src undefined)
+                                     >> adjust src (castPtr dptr)
+  where adjust :: EndianStore w => Src (Ptr w) -> Ptr w -> IO ()
+        adjust _ ptr = adjustEndian ptr n
+
+        sz     :: Storable w => Src (Ptr w) -> Proxy w -> BYTES Int
+        sz _ w =  sizeOf w * toEnum n
+
+
+{-
+Developers notes:
+-----------------
+
+Make sure that the endian encoded version does not have any
+performance penalty. We may have to stare at the core code generated
+by ghc.
+
+-}
+
+-- | Little endian version of the word type @w@
+newtype LE w = LE { unLE :: w }
+    deriving ( Bounded, Enum, Read, Show
+             , Integral, Num, Real, Eq, Equality, Ord
+             , Bits, Storable, Typeable, NFData
+             )
+
+instance Functor LE where
+  fmap f = LE . f . unLE
+
+-- | Big endian version of the word type @w@
+newtype BE w = BE { unBE :: w }
+    deriving ( Bounded, Enum, Read, Show
+             , Integral, Num, Real, Eq, Equality, Ord
+             , Bits, Storable, Typeable, NFData
+             )
+
+instance Functor BE where
+  fmap f = BE . f . unBE
+
+-- | Convert to the little endian variant.
+littleEndian :: w -> LE w
+{-# INLINE littleEndian #-}
+littleEndian = LE
+
+-- | Convert to the big endian variants.
+bigEndian :: w -> BE w
+{-# INLINE bigEndian #-}
+bigEndian = BE
+
+---------------- The foreign function calls ----------------------
+
+foreign import ccall unsafe "raaz/core/endian.h raazSwap32Array"
+  c_Swap32Array :: Ptr Word32 -> Int -> IO ()
+foreign import ccall unsafe "raaz/core/endian.h raazSwap64Array"
+  c_Swap64Array :: Ptr Word64 -> Int -> IO ()
+
+#ifdef WORDS_BIGENDIAN
+
+unLEPtr :: Ptr (LE w) -> Ptr w
+unLEPtr = castPtr
+
+instance EndianStore (LE Word32) where
+  load  ptr    = fmap byteSwap32 <$>  peek ptr
+  store ptr    = poke ptr  . fmap byteSwap32
+  adjustEndian = c_Swap32Array . unLEPtr
+
+
+instance EndianStore (LE Word64) where
+  load  ptr     = fmap byteSwap64    <$> peek ptr
+  store ptr     = poke ptr  . fmap byteSwap64
+  adjustEndian  = c_Swap64Array . unLEPtr
+
+
+instance EndianStore (BE Word32) where
+  load             = peek
+  store            = poke
+  adjustEndian _ _ = return ()
+
+instance EndianStore (BE Word64) where
+  load             = peek
+  store            = poke
+  adjustEndian _ _ = return ()
+
+# else
+
+unBEPtr :: Ptr (BE w) -> Ptr w
+unBEPtr = castPtr
+
+--- We are in a little endian machine.
+
+instance EndianStore (BE Word32) where
+  load  ptr    = fmap byteSwap32 <$> peek ptr
+  store ptr    = poke ptr . fmap byteSwap32
+  adjustEndian = c_Swap32Array . unBEPtr
+
+
+instance EndianStore (BE Word64) where
+  load  ptr    = fmap byteSwap64 <$> peek ptr
+  store ptr    = poke ptr . fmap byteSwap64
+  adjustEndian = c_Swap64Array . unBEPtr
+
+
+instance EndianStore (LE Word32) where
+  load             = peek
+  store            = poke
+  adjustEndian _ _ = return ()
+
+instance EndianStore (LE Word64) where
+  load              = peek
+  store             = poke
+  adjustEndian _ _  = return ()
+
+
+#endif
+
+------------------- Unboxed vector of Endian word types ---------------
+
+instance Unbox w => Unbox (LE w)
+instance Unbox w => Unbox (BE w)
+
+------------------- Defining the vector types --------------------------
+
+newtype instance MVector s (LE w) = MV_LE (MVector s w)
+newtype instance Vector    (LE w) = V_LE  (Vector w)
+
+newtype instance MVector s (BE w) = MV_BE (MVector s w)
+newtype instance Vector    (BE w) = V_BE  (Vector w)
+
+instance Unbox w => GVM.MVector MVector (LE w) where
+  {-# INLINE basicLength #-}
+  {-# INLINE basicUnsafeSlice #-}
+  {-# INLINE basicOverlaps #-}
+  {-# INLINE basicUnsafeNew #-}
+  {-# INLINE basicUnsafeReplicate #-}
+  {-# INLINE basicUnsafeRead #-}
+  {-# INLINE basicUnsafeWrite #-}
+  {-# INLINE basicClear #-}
+  {-# INLINE basicSet #-}
+  {-# INLINE basicUnsafeCopy #-}
+  {-# INLINE basicUnsafeGrow #-}
+  basicLength          (MV_LE v)        = GVM.basicLength v
+  basicUnsafeSlice i n (MV_LE v)        = MV_LE $ GVM.basicUnsafeSlice i n v
+  basicOverlaps (MV_LE v1) (MV_LE v2)   = GVM.basicOverlaps v1 v2
+
+  basicUnsafeRead  (MV_LE v) i          = LE <$> GVM.basicUnsafeRead v i
+  basicUnsafeWrite (MV_LE v) i (LE x)   = GVM.basicUnsafeWrite v i x
+
+  basicClear (MV_LE v)                  = GVM.basicClear v
+  basicSet   (MV_LE v)         (LE x)   = GVM.basicSet v x
+
+  basicUnsafeNew n                      = MV_LE <$> GVM.basicUnsafeNew n
+  basicUnsafeReplicate n     (LE x)     = MV_LE <$> GVM.basicUnsafeReplicate n x
+  basicUnsafeCopy (MV_LE v1) (MV_LE v2) = GVM.basicUnsafeCopy v1 v2
+  basicUnsafeGrow (MV_LE v)   n         = MV_LE <$> GVM.basicUnsafeGrow v n
+  basicInitialize (MV_LE v)           = GVM.basicInitialize v
+
+instance Unbox w => GV.Vector Vector (LE w) where
+  {-# INLINE basicUnsafeFreeze #-}
+  {-# INLINE basicUnsafeThaw #-}
+  {-# INLINE basicLength #-}
+  {-# INLINE basicUnsafeSlice #-}
+  {-# INLINE basicUnsafeIndexM #-}
+  {-# INLINE elemseq #-}
+  basicUnsafeFreeze (MV_LE v)   = V_LE  <$> GV.basicUnsafeFreeze v
+  basicUnsafeThaw (V_LE v)      = MV_LE <$> GV.basicUnsafeThaw v
+  basicLength (V_LE v)          = GV.basicLength v
+  basicUnsafeSlice i n (V_LE v) = V_LE $ GV.basicUnsafeSlice i n v
+  basicUnsafeIndexM (V_LE v) i  = LE   <$>  GV.basicUnsafeIndexM v i
+
+  basicUnsafeCopy (MV_LE mv) (V_LE v) = GV.basicUnsafeCopy mv v
+  elemseq _ (LE x)                    = GV.elemseq (undefined :: Vector a) x
+
+
+instance Unbox w => GVM.MVector MVector (BE w) where
+  {-# INLINE basicLength #-}
+  {-# INLINE basicUnsafeSlice #-}
+  {-# INLINE basicOverlaps #-}
+  {-# INLINE basicUnsafeNew #-}
+  {-# INLINE basicUnsafeReplicate #-}
+  {-# INLINE basicUnsafeRead #-}
+  {-# INLINE basicUnsafeWrite #-}
+  {-# INLINE basicClear #-}
+  {-# INLINE basicSet #-}
+  {-# INLINE basicUnsafeCopy #-}
+  {-# INLINE basicUnsafeGrow #-}
+  basicLength          (MV_BE v)        = GVM.basicLength v
+  basicUnsafeSlice i n (MV_BE v)        = MV_BE $ GVM.basicUnsafeSlice i n v
+  basicOverlaps (MV_BE v1) (MV_BE v2)   = GVM.basicOverlaps v1 v2
+
+  basicUnsafeRead  (MV_BE v) i          = BE <$> GVM.basicUnsafeRead v i
+  basicUnsafeWrite (MV_BE v) i (BE x)   = GVM.basicUnsafeWrite v i x
+
+  basicClear (MV_BE v)                  = GVM.basicClear v
+  basicSet   (MV_BE v)         (BE x)   = GVM.basicSet v x
+
+  basicUnsafeNew n                      = MV_BE <$> GVM.basicUnsafeNew n
+  basicUnsafeReplicate n     (BE x)     = MV_BE <$> GVM.basicUnsafeReplicate n x
+  basicUnsafeCopy (MV_BE v1) (MV_BE v2) = GVM.basicUnsafeCopy v1 v2
+  basicUnsafeGrow (MV_BE v)   n         = MV_BE <$> GVM.basicUnsafeGrow v n
+  basicInitialize (MV_BE v)           = GVM.basicInitialize v
+
+
+
+instance Unbox w => GV.Vector Vector (BE w) where
+  {-# INLINE basicUnsafeFreeze #-}
+  {-# INLINE basicUnsafeThaw #-}
+  {-# INLINE basicLength #-}
+  {-# INLINE basicUnsafeSlice #-}
+  {-# INLINE basicUnsafeIndexM #-}
+  {-# INLINE elemseq #-}
+  basicUnsafeFreeze (MV_BE v)   = V_BE  <$> GV.basicUnsafeFreeze v
+  basicUnsafeThaw (V_BE v)      = MV_BE <$> GV.basicUnsafeThaw v
+  basicLength (V_BE v)          = GV.basicLength v
+  basicUnsafeSlice i n (V_BE v) = V_BE $ GV.basicUnsafeSlice i n v
+  basicUnsafeIndexM (V_BE v) i  = BE   <$>  GV.basicUnsafeIndexM v i
+
+  basicUnsafeCopy (MV_BE mv) (V_BE v) = GV.basicUnsafeCopy mv v
+  elemseq _ (BE x)                    = GV.elemseq (undefined :: Vector a) x
diff --git a/core/Raaz/Core/Types/Equality.hs b/core/Raaz/Core/Types/Equality.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Types/Equality.hs
@@ -0,0 +1,324 @@
+{-# OPTIONS_HADDOCK hide           #-}
+{-# LANGUAGE CPP                   #-}
+{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FlexibleContexts      #-}
+
+-- | This module defines combinators, types and instances for defining
+-- timing safe equality checks.
+module Raaz.Core.Types.Equality
+       ( -- * Timing safe equality checking.
+         -- $timingSafeEquality$
+         Equality(..), (===)
+       , Result
+       ) where
+
+import qualified Data.Vector.Generic         as G
+import qualified Data.Vector.Generic.Mutable as GM
+import           Data.Vector.Unboxed         ( MVector(..), Vector, Unbox )
+import           Raaz.Core.Prelude
+
+
+
+-- $timingSafeEquality$
+--
+-- Many cryptographic setting require comparing two secrets and such
+-- comparisons should be timing safe, i.e. the time taken to make the
+-- comparison should not depend on the actual values that are
+-- compared. Unfortunately, the equality comparison of may Haskell
+-- types like `ByteString`, provided via the class `Eq` is /not/
+-- timing safe. In raaz we take special care in defining the `Eq`
+-- instance of all cryptographically sensitive types which make them
+-- timing safe . For example, if we compare two digests @dgst1 ==
+-- dgst2@, the `Eq` instance is defined in such a way that the time
+-- taken is constant irrespective of the actual values. We also give a
+-- mechanism to build timing safe equality for more complicated types
+-- that user might need to define in her use cases as we now describe.
+--
+-- The starting point of defining such timing safe equality is the
+-- class `Equality` which plays the role `Eq`. The member function
+-- `eq` playing the role of (`==`) with an important difference.  The
+-- comparison function `eq` returns the type type `Result` instead of
+-- `Bool` and it is timing safe. The `Eq` instance is then defined by
+-- making use of the operator (`===`). Thus a user of the library can
+-- stick to the familiar `Eq` class and get the benefits of timing
+-- safe comparison
+--
+-- == Building timing safe equality for Custom types.
+--
+-- For basic types like `Word32`, `Word64` this module defines
+-- instances of `Equality`. The `Tuple` type inherits the `Equality`
+-- instance from its base type. As a developer, new crypto-primitives
+-- or protocols often need to define timing safe equality for types
+-- other than those exported here. This is done in two stages.
+--
+-- 1. Define an instance of `Equality`.
+--
+-- 2. Make use of the above instance to define `Eq` instance as follows.
+--
+-- > data SomeSensitiveType = ...
+-- >
+-- > instance Equality SomeSensitiveType where
+-- >          eq a b = ...
+-- >
+-- > instance Eq SomeSensitiveType where
+-- >      (==) a b = a === b
+--
+-- === Combining multiple comparisons using Monoid operations
+--
+-- The `Result` type is an opaque type and does not allow inspection
+-- via a pattern match or conversion to `Bool`. However, while
+-- defining the `Equality` instance, we often need to perform an AND
+-- of multiple comparison (think of comparing a tuple). This is where
+-- the monoid instance of `Result` is useful. If @r1@ and @r2@ are the
+-- results of two comparisons then @r1 `mappend` r2@ essentially takes
+-- the AND of these results. However, unlike in the case of AND-ing in
+-- `Bool`, `mappend` on the `Result` type does not short-circuit.  In
+-- fact, the whole point of using `Result` type instead of `Bool` is
+-- to avoid this short circuiting.
+--
+-- To illustrate, we have the following code fragment
+--
+-- > data Foo = Foo Word32 Word64
+-- >
+-- > instance Equality Foo where
+-- >    eq (Foo a b) (Foo c d) = eq a c `mapped` eq b d
+-- >
+-- > instance Eq Foo where
+-- >    (=) = (===)
+--
+-- == Automatic deriving of `Equality` instances.
+--
+-- We often find ourselves wrapping existing types in new types
+-- keeping in line with the philosophy of distinguishing sematically
+-- distinct data with their types. It would be tedious to repeat the
+-- above process for each such type. Often, we can get away by just
+-- deriving these instances thereby saving a lot of boilerplate. For
+-- example, consider a data type that needs to keep a 128-byte
+-- secret. A simple deriving class would work in such cases.
+--
+-- >
+-- > newtype Secret = Secret (Tuple 128 Word8) deriving (Equality, Eq)
+-- >
+--
+-- The `Eq` instance here would be timing safe because it is
+-- essentially the `Eq` instance of tuples. The deriving `Equality` is
+-- not strictly required here. However, we suggest keeping it so that
+-- on can define timing safe equality for other types that contain a
+-- component of type `Secret`.
+--
+-- === Beware: deriving clause can be dangerous
+--
+-- The deriving clause that we defined above while convenient, hides a
+-- danger when not used properly. For example, consider the following
+-- definitions.
+--
+-- > data    Bad      = Bad Bar Biz deriving Eq
+-- > newtype BadAgain = BadAgain (Bar, Biz) deriving (Eq, Equality)
+-- >
+--
+-- The comparison for the elements of the type `Bad` would leak some
+-- timing information /even/ when `Bar` and `Biz` are instances of
+-- `Equality` and thus have timing safe equalities themselves. This is
+-- because the automatic derivation of `Eq` instances in the above two
+-- cases performs a component by component comparison and combines the
+-- result using @`and`@. Due to boolean short circuiting, this
+-- will lead to timing information being leaked.
+--
+-- For product types, we can safely derive the `Equality` instance and use
+-- it to define the @Eq@ instance as follows
+--
+-- >
+-- > newtype Okey2 = Okey (Foo, Bar) deriving Equality
+-- >
+-- > instance Eq Okey2 where
+-- >    (=) = (===)
+-- >
+--
+--
+
+
+
+-- | All types that support timing safe equality are instances of this class.
+class Equality a where
+  eq :: a -> a -> Result
+
+-- | Check whether two values are equal using the timing safe `eq`
+-- function. Use this function when defining the `Eq` instance for a
+-- Sensitive data type.
+(===) :: Equality a => a -> a -> Bool
+(===) a b = isSuccessful $ eq a b
+
+instance Equality Word where
+  eq a b = Result $ a `xor` b
+
+instance Equality Word8 where
+  eq w1 w2 = Result $ fromIntegral $ xor w1 w2
+
+instance Equality Word16 where
+  eq w1 w2 = Result $ fromIntegral $ xor w1 w2
+
+instance Equality Word32 where
+  eq w1 w2 = Result $ fromIntegral $ xor w1 w2
+
+#ifndef __HLINT__
+#include "MachDeps.h"
+#endif
+instance Equality Word64 where
+-- It assumes that Word size is atleast 32 Bits
+#if WORD_SIZE_IN_BITS < 64
+  eq w1 w2 = eq w11 w21 `mappend` eq w12 w22
+    where
+      w11 :: Word
+      w12 :: Word
+      w21 :: Word
+      w22 :: Word
+      w11 = fromIntegral $ w1 `shiftR` 32
+      w12 = fromIntegral w1
+      w21 = fromIntegral $ w2 `shiftR` 32
+      w22 = fromIntegral w2
+#else
+  eq w1 w2 = Result $ fromIntegral $ xor w1 w2
+#endif
+
+-- Now comes the boring instances for tuples.
+
+instance ( Equality a
+         , Equality b
+         ) => Equality (a , b) where
+  eq (a1,a2) (b1,b2) = eq a1 b1 `mappend` eq a2 b2
+
+
+instance ( Equality a
+         , Equality b
+         , Equality c
+         ) => Equality (a , b, c) where
+  eq (a1,a2,a3) (b1,b2,b3) = eq a1 b1 `mappend`
+                             eq a2 b2 `mappend`
+                             eq a3 b3
+
+
+instance ( Equality a
+         , Equality b
+         , Equality c
+         , Equality d
+         ) => Equality (a , b, c, d) where
+  eq (a1,a2,a3,a4) (b1,b2,b3,b4) = eq a1 b1 `mappend`
+                                   eq a2 b2 `mappend`
+                                   eq a3 b3 `mappend`
+                                   eq a4 b4
+
+instance ( Equality a
+         , Equality b
+         , Equality c
+         , Equality d
+         , Equality e
+         ) => Equality (a , b, c, d, e) where
+  eq (a1,a2,a3,a4,a5) (b1,b2,b3,b4,b5) = eq a1 b1 `mappend`
+                                         eq a2 b2 `mappend`
+                                         eq a3 b3 `mappend`
+                                         eq a4 b4 `mappend`
+                                         eq a5 b5
+
+
+instance ( Equality a
+         , Equality b
+         , Equality c
+         , Equality d
+         , Equality e
+         , Equality f
+         ) => Equality (a , b, c, d, e, f) where
+  eq (a1,a2,a3,a4,a5,a6) (b1,b2,b3,b4,b5,b6) = eq a1 b1 `mappend`
+                                               eq a2 b2 `mappend`
+                                               eq a3 b3 `mappend`
+                                               eq a4 b4 `mappend`
+                                               eq a5 b5 `mappend`
+                                               eq a6 b6
+
+instance ( Equality a
+         , Equality b
+         , Equality c
+         , Equality d
+         , Equality e
+         , Equality f
+         , Equality g
+         ) => Equality (a , b, c, d, e, f, g) where
+  eq (a1,a2,a3,a4,a5,a6,a7) (b1,b2,b3,b4,b5,b6,b7) = eq a1 b1 `mappend`
+                                                     eq a2 b2 `mappend`
+                                                     eq a3 b3 `mappend`
+                                                     eq a4 b4 `mappend`
+                                                     eq a5 b5 `mappend`
+                                                     eq a6 b6 `mappend`
+                                                     eq a7 b7
+
+
+-- | The result of a comparison. This is an opaque type and the monoid instance essentially takes
+-- AND of two comparisons in a timing safe way.
+newtype Result =  Result { unResult :: Word }
+
+instance Semigroup Result where
+  (<>) a b = Result (unResult a .|. unResult b)
+
+instance Monoid Result where
+  mempty  = Result 0
+  mappend = (<>)
+  {-# INLINE mempty  #-}
+  {-# INLINE mappend #-}
+
+-- | Checks whether a given equality comparison is successful.
+isSuccessful :: Result -> Bool
+{-# INLINE isSuccessful #-}
+isSuccessful = (==0) . unResult
+
+-- | MVector for Results.
+newtype instance MVector s Result = MV_Result (MVector s Word)
+-- | Vector of Results.
+newtype instance Vector    Result = V_Result  (Vector Word)
+
+instance Unbox Result
+
+instance GM.MVector MVector Result where
+  {-# INLINE basicLength #-}
+  {-# INLINE basicUnsafeSlice #-}
+  {-# INLINE basicOverlaps #-}
+  {-# INLINE basicUnsafeNew #-}
+  {-# INLINE basicUnsafeReplicate #-}
+  {-# INLINE basicUnsafeRead #-}
+  {-# INLINE basicUnsafeWrite #-}
+  {-# INLINE basicClear #-}
+  {-# INLINE basicSet #-}
+  {-# INLINE basicUnsafeCopy #-}
+  {-# INLINE basicUnsafeGrow #-}
+  basicLength          (MV_Result v)            = GM.basicLength v
+  basicUnsafeSlice i n (MV_Result v)            = MV_Result $ GM.basicUnsafeSlice i n v
+  basicOverlaps (MV_Result v1) (MV_Result v2)   = GM.basicOverlaps v1 v2
+
+  basicUnsafeRead  (MV_Result v) i              = Result <$> GM.basicUnsafeRead v i
+  basicUnsafeWrite (MV_Result v) i (Result x)   = GM.basicUnsafeWrite v i x
+
+  basicClear (MV_Result v)                      = GM.basicClear v
+  basicSet   (MV_Result v)         (Result x)   = GM.basicSet v x
+
+  basicUnsafeNew n                              = MV_Result <$> GM.basicUnsafeNew n
+  basicUnsafeReplicate n     (Result x)         = MV_Result <$> GM.basicUnsafeReplicate n x
+  basicUnsafeCopy (MV_Result v1) (MV_Result v2) = GM.basicUnsafeCopy v1 v2
+  basicUnsafeGrow (MV_Result v)   n             = MV_Result <$> GM.basicUnsafeGrow v n
+  basicInitialize (MV_Result v)               = GM.basicInitialize v
+
+
+
+instance G.Vector Vector Result where
+  {-# INLINE basicUnsafeFreeze #-}
+  {-# INLINE basicUnsafeThaw #-}
+  {-# INLINE basicLength #-}
+  {-# INLINE basicUnsafeSlice #-}
+  {-# INLINE basicUnsafeIndexM #-}
+  {-# INLINE elemseq #-}
+  basicUnsafeFreeze (MV_Result v)             = V_Result  <$> G.basicUnsafeFreeze v
+  basicUnsafeThaw (V_Result v)                = MV_Result <$> G.basicUnsafeThaw v
+  basicLength (V_Result v)                    = G.basicLength v
+  basicUnsafeSlice i n (V_Result v)           = V_Result $ G.basicUnsafeSlice i n v
+  basicUnsafeIndexM (V_Result v) i            = Result   <$>  G.basicUnsafeIndexM v i
+
+  basicUnsafeCopy (MV_Result mv) (V_Result v) = G.basicUnsafeCopy mv v
+  elemseq _ (Result x)                        = G.elemseq (undefined :: Vector a) x
diff --git a/core/Raaz/Core/Types/Internal.hs b/core/Raaz/Core/Types/Internal.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Types/Internal.hs
@@ -0,0 +1,40 @@
+{-# OPTIONS_HADDOCK show-extensions #-}
+-- |
+--
+-- Module      : Raaz.Core.Types.Internal
+-- Copyright   : (c) Piyush P Kurur, 2018
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+--
+-- __WARNING:__ There is very little reason for importing this
+-- module even if you are a developer of raaz let alone a user. The one
+-- place where you enhance type safety by importing this module is where
+-- you define FFI calls --- consider this FFI call to memcpy
+--
+-- >
+-- > foreign import ccall unsafe "string.h memcpy" c_memcpy
+-- >    :: Dest Pointer -> Src Pointer -> BYTES Int -> IO Pointer
+--
+-- instead of this
+--
+-- >
+-- > foreign import ccall unsafe "string.h memcpy" c_memcpy
+-- >    :: Pointer -> Pointer -> Int -> IO Pointer
+
+module Raaz.Core.Types.Internal
+       ( module Raaz.Core.Primitive
+       , module Raaz.Core.Types.Endian
+       , module Raaz.Core.Types.Pointer
+       , module Raaz.Core.Types.Copying
+       , module Raaz.Core.Types.Tuple
+       ) where
+
+import Raaz.Core.Primitive     ( BlockCount (..) )
+import Raaz.Core.Types.Endian  ( LE(..), BE(..)          )
+import Raaz.Core.Types.Pointer ( AlignedPtr (..)
+                               , BYTES(..)
+                               )
+import Raaz.Core.Types.Copying ( Src(..), Dest(..)       )
+import Raaz.Core.Types.Tuple
diff --git a/core/Raaz/Core/Types/Pointer.hs b/core/Raaz/Core/Types/Pointer.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Types/Pointer.hs
@@ -0,0 +1,465 @@
+{-# OPTIONS_HADDOCK hide                #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE ForeignFunctionInterface   #-}
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE ConstraintKinds            #-}
+{-# LANGUAGE TypeFamilies               #-}
+{-# LANGUAGE CPP                        #-}
+
+
+-- | This module exposes types that builds in type safety into some of
+-- the low level pointer operations. The functions here are pretty low
+-- level and will be required only by developers of the core of the
+-- library.
+module Raaz.Core.Types.Pointer
+       ( -- * Pointers, offsets, and alignment
+         -- $basics$
+         -- ** Type safe length units.
+         LengthUnit(..)
+       , BYTES(..)
+         -- *** Some length functions.
+       , atLeast, atLeastAligned, atMost
+       --  ** Type safe functions on Ptr
+       , Ptr
+       , sizeOf, alignment, alignedSizeOf
+       , movePtr, alignPtr, nextLocation
+       , peekAligned, pokeAligned
+
+         -- ** The class of pointer types.
+       , Pointer(..), unsafeWithPointer, unsafeWithPointerCast
+       , AlignedPtr (..) , ptrAlignment, nextAlignedPtr
+       , allocaBuffer, allocaSecure
+         -- ** Some low level pointer actions
+       , wipeMemory
+       , memset
+       , memcpy
+       , hFillBuf
+       ) where
+
+
+
+import           Control.Exception     ( bracket_ )
+
+import           Data.Vector.Unboxed         ( MVector(..), Vector, Unbox )
+import           Foreign.Marshal.Alloc
+import           Foreign.Ptr           ( Ptr, castPtr         )
+import qualified Foreign.Ptr           as FP
+import           Foreign.Storable      ( Storable, peek, poke )
+import qualified Foreign.Storable      as FS
+import           GHC.TypeLits
+
+import qualified Data.Vector.Generic         as GV
+import qualified Data.Vector.Generic.Mutable as GVM
+
+import Raaz.Core.Prelude
+import Raaz.Core.Types.Equality
+import Raaz.Core.Types.Copying
+
+-- $basics$
+--
+-- The main concepts introduced here are the following
+--
+-- [`Pointer`:] The generic pointer type that is used through the
+-- library.
+--
+-- [`LengthUnit`:] This class captures types units of length.
+--
+-- [`Alignment`:] A dedicated type that is used to keep track of
+-- alignment constraints.  offsets in We have the generic pointer type
+-- `Pointer` and distinguish between different length units at the
+-- type level. This helps in to avoid a lot of length conversion
+-- errors.
+
+-------------------------- Length Units --------- -------------------
+
+-- | In cryptographic settings, we need to measure pointer offsets and
+-- buffer sizes. The smallest of length/offset that we have is bytes
+-- measured using the type `BYTES`. In various other circumstances, it
+-- would be more natural to measure these in multiples of bytes. For
+-- example, when allocating buffer to use encrypt using a block cipher
+-- it makes sense to measure the buffer size in multiples of block of
+-- the cipher. Explicit conversion between these length units, while
+-- allocating or moving pointers, involves a lot of low level scaling
+-- that is also error prone. To avoid these errors due to unit
+-- conversions, we distinguish between different length units at the
+-- type level. This type class capturing all such types, i.e. types
+-- that stand of length units. Allocation functions and pointer
+-- arithmetic are generalised to these length units.
+--
+-- All instances of a `LengthUnit` are required to be instances of
+-- `Monoid` where the monoid operation gives these types the natural
+-- size/offset addition semantics: i.e. shifting a pointer by offset
+-- @a `mappend` b@ is same as shifting it by @a@ and then by @b@.
+class (Enum u, Monoid u) => LengthUnit u where
+  -- | Express the length units in bytes.
+  inBytes :: u -> BYTES Int
+
+-- | Type safe lengths/offsets in units of bytes.
+newtype BYTES a  = BYTES a
+        deriving ( Show, Eq, Equality, Ord, Enum, Integral
+                 , Real, Num, Storable, Bounded, Bits
+                 )
+
+instance Functor BYTES where
+   fmap f (BYTES x) = BYTES (f x)
+
+instance Num a => Semigroup (BYTES a) where
+  (<>) = (+)
+
+instance Num a => Monoid (BYTES a) where
+  mempty  = 0
+  mappend = (<>)
+
+------------------------ Alignment --------------------------------
+
+-- | Types to measure alignment in units of bytes.
+newtype Alignment = Alignment { unAlignment :: Int }
+        deriving ( Show, Eq, Ord, Enum)
+
+instance Semigroup Alignment where
+  (<>) a b = Alignment $ lcm (unAlignment a) (unAlignment b)
+
+instance Monoid Alignment where
+  mempty  = Alignment 1
+  mappend = (<>)
+
+---------- Type safe versions of some pointer functions -----------------
+
+-- | Compute the size of a storable element.
+sizeOf :: Storable a => Proxy a -> BYTES Int
+sizeOf = BYTES . FS.sizeOf . asProxyTypeOf undefined
+
+-- | Compute the alignment for a storable object.
+alignment :: Storable a => Proxy a -> Alignment
+alignment =  Alignment . FS.alignment . asProxyTypeOf undefined
+
+-- | Move the given pointer with a specific offset.
+movePtr :: LengthUnit l => Ptr a -> l -> Ptr a
+movePtr ptr l = FP.plusPtr ptr offset
+  where BYTES offset = inBytes l
+
+-- | Align pointer to the next alignment
+alignPtr :: Storable a => Ptr a -> Alignment -> Ptr a
+alignPtr ptr = FP.alignPtr ptr . unAlignment
+
+-- | Size of the buffer to be allocated to store an element of type
+-- @a@ so as to guarantee that there exist enough space to store the
+-- element after aligning the pointer.
+alignedSizeOf  :: Storable a => Proxy a -> BYTES Int
+alignedSizeOf aproxy =  atLeastAligned (sizeOf aproxy) $ alignment aproxy
+
+-- | Compute the next aligned pointer starting from the given pointer
+-- location.
+nextLocation :: Storable a => Ptr a -> Ptr a
+nextLocation ptr = alignPtr ptr $ alignment $ getProxy ptr
+  where getProxy :: Ptr b -> Proxy b
+        getProxy  = const Proxy
+
+-- | Peek the element from the next aligned location.
+peekAligned :: Storable a => Ptr a -> IO a
+peekAligned = peek . nextLocation
+
+-- | Poke the element from the next aligned location.
+pokeAligned     :: Storable a => Ptr a -> a -> IO ()
+pokeAligned ptr =  poke $ nextLocation ptr
+
+instance LengthUnit (BYTES Int) where
+  inBytes = id
+  {-# INLINE inBytes #-}
+
+-- | Express length unit @src@ in terms of length unit @dest@ rounding
+-- upwards.
+atLeast :: ( LengthUnit src
+           , LengthUnit dest
+           )
+        => src
+        -> dest
+atLeast src | r == 0    = u
+            | otherwise = succ u
+    where (u , r) = bytesQuotRem $ inBytes src
+
+
+-- | Often we want to allocate a buffer of size @l@. We also want to
+-- make sure that the buffer starts at an alignment boundary
+-- @a@. However, the standard word allocation functions might return a
+-- pointer that is not aligned as desired. The @atLeastAligned l a@
+-- returns a length @n@ such the length @n@ is big enough to ensure
+-- that there is at least @l@ length of valid buffer starting at the
+-- next pointer aligned at boundary @a@. If the alignment required in
+-- @a@ then allocating @l + a@ should do the trick.
+--
+-- NOTE: Let us say that the next allocation happens at a pointer ptr
+-- whose address is r mod a. Then if we allocate a buffer of size s,
+-- the buffer will be spanning the address ptr, ptr + 1, ... ptr + s
+-- -1.  Assume that r ≠ 0, then the next address at which our buffer
+-- can start is at ptr + a - r. Therefore the size of the buffer
+-- available at this location is (ptr + s - 1) - (ptr + a - r ) + 1 =
+-- s - a + r, which should at least l. Therefore, we have s - a - r =
+-- l, which means s >= l + a - r. This is maximised when r = 1.  This
+-- analysis means that we need to allocate only l + a - 1 bytes but
+-- that seems to be creating problems for our copy. May be it is a
+-- memcpy vs memmove problem.
+atLeastAligned :: LengthUnit l => l -> Alignment -> BYTES Int
+atLeastAligned l a = n <> pad
+  where n    = atLeast l
+        pad  = BYTES $ unAlignment a
+
+-- | Express length unit @src@ in terms of length unit @dest@ rounding
+-- downwards.
+atMost :: ( LengthUnit src
+          , LengthUnit dest
+          )
+       => src
+       -> dest
+atMost = fst . bytesQuotRem . inBytes
+
+-- | A length unit @u@ is usually a multiple of bytes. The function
+-- `bytesQuotRem` is like `quotRem`: the value @byteQuotRem bytes@ is
+-- a tuple @(x,r)@, where @x@ is @bytes@ expressed in the unit @u@
+-- with @r@ being the reminder.
+bytesQuotRem :: LengthUnit u
+             => BYTES Int
+             -> (u , BYTES Int)
+bytesQuotRem bytes = (u , r)
+  where divisor       = inBytes (toEnum 1 `asTypeOf` u)
+        (BYTES q, r)  = bytes `quotRem` divisor
+        u             = toEnum q
+
+-- | Depending on the constraints of various pointers, raaz expose a
+-- variety of pointer types. This type class capturing such types. The
+-- main operation of interest to use is casting and allocation. All of
+-- these types have an underlying pointer which you can also be
+-- accessed.
+class Pointer (ptr :: Type -> Type) where
+
+  -- | Convert pointers of one type to another.
+  castPointer  :: ptr a -> ptr b
+
+
+  -- | The `alloca` variant for this pointer type. The action
+  -- @allocaPointer l action@ allocates a buffer of size @l@ and
+  -- passes it on to @action@. No explicit de-allocation is required
+  -- just like in the case of `alloca`
+  allocaPointer :: BYTES Int        -- size to allocate
+                -> (ptr a  -> IO b) -- action to run
+                -> IO b
+  --
+  -- | Recover the underlying raw pointer.
+  unsafeRawPtr :: ptr a -> Ptr a
+
+instance Pointer Ptr where
+  unsafeRawPtr             = id
+  {-# INLINE  unsafeRawPtr #-}
+  castPointer              = castPtr
+  {-# INLINE castPointer   #-}
+  allocaPointer (BYTES sz) = allocaBytes sz
+
+-- | Lifts raw pointer actions to the given pointer type.
+unsafeWithPointer :: Pointer ptr => (Ptr a -> b) -> ptr a -> b
+unsafeWithPointer action = action . unsafeRawPtr
+
+-- | Lifts raw pointer actions to a pointer action of a different type.
+unsafeWithPointerCast :: Pointer ptr => (Ptr a -> b) -> ptr something -> b
+unsafeWithPointerCast action = unsafeWithPointer action . castPointer
+
+-- | Allocate a buffer for an action that expects a generic
+-- pointer. Length can be specified in any length units.
+allocaBuffer :: ( LengthUnit l, Pointer ptr)
+             => l                        -- ^ buffer length
+             -> (ptr something -> IO b)  -- ^ the action to run
+             -> IO b
+allocaBuffer = allocaPointer . inBytes
+
+
+----------------- Secure allocation ---------------------------------
+
+-- | Variant of `allocaBuffer` that allocates a locked buffer of a
+-- given size and runs the action. The associated memory (1) exists
+-- for the duration of the action (2) will not be swapped during the
+-- action as guaranteed by the memlock function of the operating
+-- system and (3) will be wiped clean and deallocated when the action
+-- terminates either directly or indirectly via errors. While this is
+-- mostly secure, there are still edge cases in multi-threaded
+-- applications where the memory will not be cleaned. For example, if
+-- you run a crypto-sensitive action inside a child thread and the
+-- main thread gets exists, then the child thread is killed (due to
+-- the demonic nature of threads in GHC haskell) immediately and might
+-- not give it chance to wipe the memory clean. See
+-- <https://ghc.haskell.org/trac/ghc/ticket/13891> on this problem and
+-- possible workarounds.
+--
+allocaSecure :: ( LengthUnit l, Pointer ptr)
+             => l
+             -> (ptr a -> IO b)
+             -> IO b
+allocaSecure l action = allocaBuffer l actual
+    where actual ptr    = bracket_ (lockIt ptr) (releaseIt ptr) $ action ptr
+          lockIt ptr    = do c <- memlock ptr l
+                             when (c /= 0) $ fail "secure memory: unable to lock memory"
+                             -- TODO: Is this the best way to fail
+                             -- when no secure memory is available ?
+          releaseIt ptr = wipeMemory ptr l >>  memunlock ptr l
+
+foreign import ccall unsafe "raaz/core/memory.h raazMemorylock"
+  c_mlock :: Ptr a -> BYTES Int -> IO Int
+
+foreign import ccall unsafe "raaz/core/memory.h raazMemoryunlock"
+  c_munlock :: Ptr a -> BYTES Int -> IO ()
+
+foreign import ccall unsafe "raazWipeMemory" c_wipe_memory
+    :: Ptr a -> BYTES Int -> IO ()
+
+memlock :: (LengthUnit l, Pointer ptr)
+        => ptr a
+        -> l
+        -> IO Int
+memlock   ptr = unsafeWithPointer c_mlock ptr . inBytes
+
+memunlock :: (LengthUnit l, Pointer ptr)
+          => ptr a
+          -> l
+          -> IO ()
+memunlock ptr = unsafeWithPointer c_munlock ptr . inBytes
+
+-- | Cleanup the given pointer of any sensitive data. This is a tricky
+-- function to write as compilers are known to optimise this away. In
+-- our case we try to use the platform specific one if it exists.
+wipeMemory :: (LengthUnit l, Pointer ptr)
+            => ptr a   -- ^ buffer to wipe
+            -> l       -- ^ buffer length
+            -> IO ()
+wipeMemory p = void . unsafeWithPointer c_wipe_memory p . inBytes
+
+{-# SPECIALIZE memlock    :: Ptr a -> BYTES Int -> IO Int  #-}
+{-# SPECIALIZE memunlock  :: Ptr a -> BYTES Int -> IO ()   #-}
+{-# SPECIALISE wipeMemory :: Ptr a -> BYTES Int -> IO ()   #-}
+
+
+
+-------------------- Low level pointer operations ------------------
+
+-- | A version of `hGetBuf` which works for any type safe length units.
+hFillBuf :: (LengthUnit bufSize, Pointer ptr)
+         => Handle
+         -> ptr a
+         -> bufSize
+         -> IO (BYTES Int)
+{-# INLINE hFillBuf #-}
+hFillBuf handle ptr bufSize = BYTES <$> hGetBuf handle (unsafeRawPtr ptr) bytes
+  where BYTES bytes = inBytes bufSize
+
+------------------- Copy move and set contents ----------------------------
+
+-- | Some common PTR functions abstracted over type safe length.
+foreign import ccall unsafe "string.h memcpy" c_memcpy
+    :: Dest (Ptr dest) -> Src (Ptr src) -> BYTES Int -> IO (Ptr ())
+
+-- | Copy between pointers.
+memcpy :: (LengthUnit l, Pointer ptrS, Pointer ptrD)
+       => Dest (ptrD dest) -- ^ destination
+       -> Src  (ptrS src)  -- ^ src
+       -> l               -- ^ Number of Bytes to copy
+       -> IO ()
+memcpy dest src = void . c_memcpy destRaw srcRaw . inBytes
+  where destRaw = unsafeRawPtr <$> dest
+        srcRaw  = unsafeRawPtr <$> src
+
+{-# SPECIALIZE memcpy :: Dest (Ptr dest) -> Src (Ptr src) -> BYTES Int -> IO () #-}
+
+foreign import ccall unsafe "string.h memset" c_memset
+    :: Ptr buf -> Word8 -> BYTES Int -> IO (Ptr ())
+
+-- | Sets the given number of Bytes to the specified value.
+memset :: (LengthUnit l, Pointer ptr)
+       => ptr a     -- ^ Target
+       -> Word8     -- ^ Value byte to set
+       -> l         -- ^ Number of bytes to set
+       -> IO ()
+memset p w = void . unsafeWithPointer c_memset p w . inBytes
+{-# SPECIALIZE memset :: Ptr a -> Word8 -> BYTES Int -> IO () #-}
+
+-- | The type @AlignedPtr n@ that captures pointers that are aligned
+-- to @n@ byte boundary.
+newtype AlignedPtr (n :: Nat) a = AlignedPtr { forgetAlignment :: Ptr a}
+
+instance KnownNat n => Pointer (AlignedPtr n) where
+  unsafeRawPtr  = forgetAlignment
+  {-# INLINE unsafeRawPtr #-}
+  castPointer   = AlignedPtr . castPtr . forgetAlignment
+  {-# INLINE castPointer #-}
+
+  allocaPointer (BYTES sz) action =
+    allocaBytesAligned sz algn (action . AlignedPtr)
+    where algn  = fromEnum $ natVal $ getProxy action
+          getProxy :: (AlignedPtr n a -> IO b) -> Proxy n
+          getProxy _ = Proxy
+
+-- | Given a raw pointer (i.e. element of type `Ptr`), returns the
+-- next pointer aligned to @n@-bytes boundary.
+nextAlignedPtr :: (Storable a, KnownNat n) => Ptr a -> AlignedPtr n a
+nextAlignedPtr = alignIt
+  where alignIt ptr = AlignedPtr
+                      $ alignPtr ptr
+                      $ ptrAlignment
+                      $ getProxy alignIt
+        getProxy :: (Ptr a -> AlignedPtr n a) -> Proxy (AlignedPtr n a)
+        getProxy _  = Proxy
+
+-- | Compute the alignment restriction.
+ptrAlignment :: KnownNat n => Proxy (AlignedPtr n a) -> Alignment
+ptrAlignment = Alignment . fromEnum . natVal . coerce
+  where coerce :: Proxy (AlignedPtr n a) -> Proxy n
+        coerce = const Proxy
+--------------------------
+
+instance Unbox w => Unbox (BYTES w)
+newtype instance MVector s (BYTES w) = MV_BYTES (MVector s w)
+newtype instance Vector    (BYTES w) = V_BYTES  (Vector w)
+
+instance Unbox w => GVM.MVector MVector (BYTES w) where
+  {-# INLINE basicLength #-}
+  {-# INLINE basicUnsafeSlice #-}
+  {-# INLINE basicOverlaps #-}
+  {-# INLINE basicUnsafeNew #-}
+  {-# INLINE basicUnsafeReplicate #-}
+  {-# INLINE basicUnsafeRead #-}
+  {-# INLINE basicUnsafeWrite #-}
+  {-# INLINE basicClear #-}
+  {-# INLINE basicSet #-}
+  {-# INLINE basicUnsafeCopy #-}
+  {-# INLINE basicUnsafeGrow #-}
+  basicLength          (MV_BYTES v)           = GVM.basicLength v
+  basicUnsafeSlice i n (MV_BYTES v)           = MV_BYTES $ GVM.basicUnsafeSlice i n v
+  basicOverlaps (MV_BYTES v1) (MV_BYTES v2)   = GVM.basicOverlaps v1 v2
+
+  basicUnsafeRead  (MV_BYTES v) i             = BYTES <$> GVM.basicUnsafeRead v i
+  basicUnsafeWrite (MV_BYTES v) i (BYTES x)   = GVM.basicUnsafeWrite v i x
+
+  basicClear (MV_BYTES v)                     = GVM.basicClear v
+  basicSet   (MV_BYTES v)         (BYTES x)   = GVM.basicSet v x
+
+  basicUnsafeNew n                            = MV_BYTES <$> GVM.basicUnsafeNew n
+  basicUnsafeReplicate n     (BYTES x)        = MV_BYTES <$> GVM.basicUnsafeReplicate n x
+  basicUnsafeCopy (MV_BYTES v1) (MV_BYTES v2) = GVM.basicUnsafeCopy v1 v2
+  basicUnsafeGrow (MV_BYTES v)   n            = MV_BYTES <$> GVM.basicUnsafeGrow v n
+  basicInitialize (MV_BYTES v)                = GVM.basicInitialize v
+
+
+
+instance Unbox w => GV.Vector Vector (BYTES w) where
+  {-# INLINE basicUnsafeFreeze #-}
+  {-# INLINE basicUnsafeThaw #-}
+  {-# INLINE basicLength #-}
+  {-# INLINE basicUnsafeSlice #-}
+  {-# INLINE basicUnsafeIndexM #-}
+  {-# INLINE elemseq #-}
+  basicUnsafeFreeze (MV_BYTES v)            = V_BYTES  <$> GV.basicUnsafeFreeze v
+  basicUnsafeThaw (V_BYTES v)               = MV_BYTES <$> GV.basicUnsafeThaw v
+  basicLength (V_BYTES v)                   = GV.basicLength v
+  basicUnsafeSlice i n (V_BYTES v)          = V_BYTES $ GV.basicUnsafeSlice i n v
+  basicUnsafeIndexM (V_BYTES v) i           = BYTES   <$>  GV.basicUnsafeIndexM v i
+
+  basicUnsafeCopy (MV_BYTES mv) (V_BYTES v) = GV.basicUnsafeCopy mv v
+  elemseq _ (BYTES x)                       = GV.elemseq (undefined :: Vector a) x
diff --git a/core/Raaz/Core/Types/Tuple.hs b/core/Raaz/Core/Types/Tuple.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Types/Tuple.hs
@@ -0,0 +1,194 @@
+{-# OPTIONS_HADDOCK hide           #-}
+{-# LANGUAGE DataKinds             #-}
+{-# LANGUAGE ConstraintKinds       #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE TypeFamilies          #-}
+{-# LANGUAGE RankNTypes            #-}
+{-# LANGUAGE ScopedTypeVariables   #-}
+
+-- | Tuples of unboxed values with type level length encoding.
+module Raaz.Core.Types.Tuple
+       ( -- * Length encoded tuples
+         Tuple, Dimension, dimension, dimension', initial, diagonal
+       , repeatM, zipWith, map, generateIO
+         -- ** Unsafe operations
+       , unsafeFromList, unsafeFromVector, unsafeToVector
+       ) where
+
+import qualified Data.List           as L
+import qualified Data.Vector.Unboxed as V
+import           GHC.TypeLits
+import           Foreign.Ptr                 ( castPtr, Ptr )
+import           Foreign.Storable            ( Storable(..) )
+
+import Raaz.Core.Prelude          hiding     ( map          )
+import Raaz.Core.Types.Equality
+import Raaz.Core.Types.Endian
+import Raaz.Core.Transfer
+import Raaz.Core.Transfer.Unsafe
+import Raaz.Core.Parse.Unsafe
+
+
+-- | Tuples that encode their length in their types. For tuples, we call
+-- the length its dimension.
+newtype Tuple (dim :: Nat) a = Tuple { unTuple :: V.Vector a }
+                             deriving Show
+
+-- | Map function for tuples.
+map :: (V.Unbox a, V.Unbox b)
+    => (a -> b)
+    -> Tuple dim a -> Tuple dim b
+map f = Tuple . V.map f . unTuple
+
+-- | Convert the tuple to vector.
+unsafeToVector :: Tuple dim a -> V.Vector a
+unsafeToVector = unTuple
+
+-- | Convert vector to tuple. This function is unsafe because it does
+-- not check whether length of the vector matches with the tuple
+-- dimension.
+unsafeFromVector :: V.Vector a -> Tuple dim a
+unsafeFromVector = Tuple
+
+
+instance (V.Unbox a, Equality a) => Equality (Tuple dim a) where
+  eq (Tuple u) (Tuple v) = V.foldl' mappend mempty $ V.zipWith eq u v
+
+-- | Equality checking is timing safe.
+instance (V.Unbox a, Equality a) => Eq (Tuple dim a) where
+  (==) = (===)
+
+-- | Function to make the type checker happy
+getA :: Tuple dim a -> a
+getA _ = undefined
+
+
+-- | The constaint on the dimension of the tuple (since base 4.7.0)
+type Dimension (dim :: Nat) = KnownNat dim
+
+{-@ assume natValInt :: Dimension dim => proxy dim -> { v : Int | v == dim } @-}
+natValInt :: Dimension dim => proxy dim -> Int
+natValInt = fromEnum . natVal
+
+-- | Function that returns the dimension of the tuple. The dimension
+-- is calculated without inspecting the tuple and hence the term
+-- @`dimension` (undefined :: Tuple 5 Int)@ will evaluate to 5.
+{-@ dimension :: Dimension dim  => Raaz.Core.Types.Tuple.Tuple dim a -> {n: Int | n == dim } @-}
+dimension  :: Dimension dim => Tuple dim a -> Int
+dimensionP :: Dimension dim
+           => Proxy dim
+           -> Proxy (Tuple dim a)
+           -> Int
+dimensionP sz _ = natValInt sz
+dimension = dimensionP Proxy . pure
+
+-- | Function that returns the dimension from the proxy of the
+-- tuple. This is useful when we only have a proxy of the tuple at
+-- hand. This is clearly possible because the dimension calculation
+-- works at the type level and does not require looking at the value
+-- of the tuple.
+dimension' :: Dimension dim => Proxy (Tuple dim a) -> Int
+dimension' = dimensionP Proxy
+
+-- | Get the dimension to parser
+getParseDimension :: Dimension dim => Parser (Tuple dim a) -> Int
+getParseDimension = dimension' . getProxy
+  where getProxy :: Parser (Tuple dim a) -> Proxy (Tuple dim a)
+        getProxy = const Proxy
+
+
+instance (V.Unbox a, Storable a, Dimension dim)
+         => Storable (Tuple dim a) where
+
+  sizeOf tup = dimension tup * sizeOf (getA tup)
+  alignment  = alignment . getA
+
+  peek  = unsafeRunParser tupParser . castPtr
+    where len = getParseDimension tupParser
+          tupParser = Tuple <$> unsafeParseStorableVector len
+
+  poke ptr tup = unsafeTransfer writeTup cptr
+    where writeTup = writeStorableVector $ unTuple tup
+          cptr     = castPtr ptr
+
+
+instance (V.Unbox a, EndianStore a, Dimension dim)
+         => EndianStore (Tuple dim a) where
+
+  load = unsafeRunParser tupParser . castPtr
+     where tupParser = Tuple <$> unsafeParseVector len
+           len       = getParseDimension tupParser
+
+  store ptr tup = unsafeTransfer writeTup cptr
+     where writeTup = writeVector $ unTuple tup
+           cptr     = castPtr ptr
+
+  adjustEndian ptr n = adjustEndian (unTupPtr ptr) $ nos ptr Proxy
+       where nos     :: Ptr (Tuple dim a) -> Proxy (Tuple dim a) -> Int
+             nos _ w = dimension' w * n
+             unTupPtr   :: Ptr (Tuple dim a) -> Ptr a
+             unTupPtr   = castPtr
+
+
+-- | Construct a tuple by repeating a monadic action.
+repeatM :: ( Monad m, V.Unbox a, Dimension dim) => m a -> m (Tuple dim a)
+repeatM = mkTupM Proxy
+  where mkTupM :: (Monad m, V.Unbox a, Dimension dim)
+               => Proxy (Tuple dim a)
+               -> m a
+               -> m (Tuple dim a)
+        mkTupM uTupProxy action = Tuple <$> V.replicateM (dimension' uTupProxy) action
+
+
+-- | Construct a tuple out of the list. This function is unsafe and
+-- will result in run time error if the list is not of the correct
+-- dimension.
+{-@ unsafeFromList :: (V.Unbox a, Dimension dim)
+                   => { xs:[a] | len xs = dim }
+                   -> Raaz.Core.Types.Tuple.Tuple dim a
+
+@-}
+unsafeFromList :: (V.Unbox a, Dimension dim) => [a] -> Tuple dim a
+unsafeFromList xs
+  | dimension tup == L.length xs = tup
+  | otherwise                    = wrongLengthMesg
+  where tup = Tuple $ V.fromList xs
+        wrongLengthMesg = error "tuple: unsafeFromList: wrong length"
+
+-- | Computes the initial fragment of a tuple. No length needs to be given
+-- as it is infered from the types.
+{-@ lazy initial @-}
+initial ::  (V.Unbox a, Dimension dim0)
+         => Tuple dim1 a
+         -> Tuple dim0 a
+initial = mkTuple Proxy
+  where mkTuple :: (V.Unbox a, Dimension dim0)
+                => Proxy (Tuple dim0 a)
+                -> Tuple dim1 a
+                -> Tuple dim0 a
+        mkTuple uTupProxy tup = Tuple $ V.take (dimension' uTupProxy) $ unTuple tup
+
+-- TODO: Put a constraint that dim0 <= dim1
+
+-- | The @diagonal a@ gives a tuple, all of whose entries is @a@.
+diagonal :: (V.Unbox a, Dimension dim) => a -> Tuple dim a
+diagonal = mkTup Proxy
+  where mkTup :: (V.Unbox a, Dimension dim) => Proxy (Tuple dim a) -> a -> Tuple dim a
+        mkTup uTupProxy a = Tuple $ V.replicate (dimension' uTupProxy) a
+
+
+-- | A zipwith function for tuples
+
+zipWith :: (V.Unbox a, V.Unbox b, V.Unbox c)
+        => (a -> b -> c)
+        -> Tuple dim a
+        -> Tuple dim b
+        -> Tuple dim c
+zipWith f (Tuple at) (Tuple bt)= Tuple $ V.zipWith f at bt
+
+-- | Generate using the given action.
+generateIO :: (Dimension dim, V.Unbox a) => IO a -> IO (Tuple dim a)
+generateIO action = gen action Proxy
+  where gen :: (Dimension dim, V.Unbox a) => IO a -> Proxy (Tuple dim a) -> IO (Tuple dim a)
+        gen act pxy  = Tuple <$> V.generateM (dimension' pxy) (const act)
diff --git a/core/Raaz/Core/Util/ByteString.hs b/core/Raaz/Core/Util/ByteString.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Core/Util/ByteString.hs
@@ -0,0 +1,84 @@
+-- |
+--
+-- Module      : Raaz.Core.Util.ByteString
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+{-# LANGUAGE FlexibleContexts #-}
+module Raaz.Core.Util.ByteString
+       ( length, replicate
+       , create, createFrom
+       , withByteString
+       , unsafeCopyToPointer
+       , unsafeNCopyToPointer
+       ) where
+
+import           Prelude            hiding (length, replicate)
+import qualified Data.ByteString    as B
+import           Data.ByteString    (ByteString)
+import qualified Data.ByteString.Internal as BI
+import           Data.Word
+import           Foreign.ForeignPtr (withForeignPtr)
+import           Foreign.Ptr        (castPtr, plusPtr)
+
+import           Raaz.Core.Types.Pointer
+import           Raaz.Core.Types.Copying
+
+-- | A typesafe length for Bytestring
+length :: ByteString -> BYTES Int
+length = BYTES . B.length
+
+-- | A type safe version of replicate
+replicate :: LengthUnit l => l -> Word8 -> ByteString
+replicate l = B.replicate sz
+  where BYTES sz = inBytes l
+
+-- | Copy the bytestring to the crypto buffer. This operation leads to
+-- undefined behaviour if the crypto pointer points to an area smaller
+-- than the size of the byte string.
+unsafeCopyToPointer :: Pointer ptr
+                    => ByteString   -- ^ The source.
+                    -> ptr a        -- ^ The destination.
+                    -> IO ()
+unsafeCopyToPointer bs cptr =  withForeignPtr fptr $
+           \ p -> memcpy (destination cptr) (source $ p `plusPtr` offset) (BYTES n)
+    where (fptr, offset,n) = BI.toForeignPtr bs
+
+
+-- | Similar to `unsafeCopyToPointer` but takes an additional input
+-- @n@ which is the number of bytes (expressed in type safe length
+-- units) to transfer. This operation leads to undefined behaviour if
+-- either the bytestring is shorter than @n@ or the crypto pointer
+-- points to an area smaller than @n@.
+unsafeNCopyToPointer :: LengthUnit n
+                     => n              -- ^ length of data to be copied
+                     -> ByteString     -- ^ The source byte string
+                     -> Ptr a         -- ^ The buffer
+                     -> IO ()
+unsafeNCopyToPointer n bs cptr = withForeignPtr fptr $
+           \ p -> memcpy (destination cptr) (source $ p `plusPtr` offset) n
+    where (fptr, offset,_) = BI.toForeignPtr bs
+
+-- | Works directly on the pointer associated with the
+-- `ByteString`. This function should only read and not modify the
+-- contents of the pointer.
+withByteString :: ByteString -> (Ptr something -> IO a) -> IO a
+withByteString bs f = withForeignPtr fptr (f . flip plusPtr off)
+  where (fptr, off, _) = BI.toForeignPtr bs
+
+-- | The action @create l act@ creates a length @l@ bytestring where
+-- the contents are filled using the the @act@ to fill the buffer.
+create :: LengthUnit l => l -> (Ptr a -> IO ()) -> IO ByteString
+create l act = myCreate (act . castPtr)
+  where myCreate =  BI.create $ fromIntegral $ inBytes l
+
+-- | The IO action @createFrom n cptr@ creates a bytestring by copying
+-- @n@ bytes from the pointer @cptr@.
+createFrom :: LengthUnit l => l -> Ptr a -> IO ByteString
+createFrom l cptr = create l filler
+  where filler dptr = memcpy (destination dptr) (source cptr) l
+
+----------------------  Hexadecimal encoding. -----------------------------------
diff --git a/core/Raaz/Primitive/AEAD/Internal.hs b/core/Raaz/Primitive/AEAD/Internal.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Primitive/AEAD/Internal.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE DataKinds                  #-}
+-- |
+--
+-- Module      : Raaz.Primitive.AEAD.Internal
+-- Description : Generic interface to authenticated encryption.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+
+module Raaz.Primitive.AEAD.Internal
+       ( AEAD(..), unsafeAEAD
+       ) where
+
+
+import           Data.ByteString
+import           Raaz.Core
+
+-- | An authenticated encrypted packet containing a payload of type
+-- @plain@ and additional authenticated data of type @aad@.
+data AEAD c t = AEAD
+     { unsafeToNounce      :: Nounce c
+                           -- ^ The nounce use to compute this packet.
+
+     , unsafeToCipherText  :: ByteString
+                           -- ^ The associated cipher text.
+
+     , unsafeToAuthTag     :: t
+                           -- ^ The associated authentication tag.
+
+     }
+
+-- | Create an AEAD packet from the underlying authentication tag and
+-- cipher text.
+unsafeAEAD :: Nounce c
+           -> ByteString
+           -> t             -- ^ the authentication tag
+           -> AEAD c t
+unsafeAEAD = AEAD
diff --git a/core/Raaz/Primitive/Blake2/Internal.hs b/core/Raaz/Primitive/Blake2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Primitive/Blake2/Internal.hs
@@ -0,0 +1,117 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TypeFamilies               #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE FlexibleContexts           #-}
+{-# CFILES raaz/hash/sha1/portable.c    #-}
+
+-- |
+--
+-- Module      : Raaz.Primitive.Blake2.Internal
+-- Description : Internal modules for Blake2 hashes.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.Primitive.Blake2.Internal
+       ( -- * The blake2 types
+         Blake2b, Blake2s
+       , Blake2bMem, Blake2sMem
+       , blake2Pad
+       ) where
+
+import           Data.Vector.Unboxed        ( Unbox )
+import           Foreign.Storable           ( Storable       )
+
+import           Raaz.Core
+import           Raaz.Primitive.HashMemory
+import           Raaz.Primitive.Keyed.Internal
+
+----------------------------- The blake2 type ---------------------------------
+
+-- | The Blake2 type.
+newtype Blake2 w = Blake2 (Tuple 8 w)
+               deriving (Eq, Equality, Storable, EndianStore)
+
+instance ( Unbox w
+         , EndianStore w
+         ) => Primitive (Blake2 w) where
+  type WordType      (Blake2 w) = w
+  type WordsPerBlock (Blake2 w) = 16
+
+instance (Unbox w, EndianStore w) => Encodable (Blake2 w)
+
+instance (EndianStore w, Unbox w) => IsString (Blake2 w) where
+  fromString = fromBase16
+
+instance (EndianStore w, Unbox w) => Show (Blake2 w) where
+  show =  showBase16
+
+-- | The Blake2b hash type.
+type Blake2b = Blake2 (LE Word64)
+
+-- | The Blake2s hash type.
+type Blake2s = Blake2 (LE Word32)
+
+keyLength :: (Storable prim, Num b) => Proxy prim -> BYTES Int -> b
+keyLength proxy len
+  | len > tLen = fromIntegral tLen
+  | otherwise  = fromIntegral len
+  where tLen = sizeOf proxy
+
+instance KeyedHash Blake2b where
+  hashInit len = Blake2 $ unsafeFromList [ 0x6a09e667f3bcc908 `xor` iv0
+                                         , 0xbb67ae8584caa73b
+                                         , 0x3c6ef372fe94f82b
+                                         , 0xa54ff53a5f1d36f1
+                                         , 0x510e527fade682d1
+                                         , 0x9b05688c2b3e6c1f
+                                         , 0x1f83d9abfb41bd6b
+                                         , 0x5be0cd19137e2179
+                                         ]
+    where len8 = keyLength (Proxy :: Proxy Blake2b) len
+          iv0  = 0x01010040 .|. shiftL len8 8
+
+instance KeyedHash Blake2s where
+  hashInit len =  Blake2 $ unsafeFromList [ 0x6a09e667 `xor` iv0
+                                          , 0xbb67ae85
+                                          , 0x3c6ef372
+                                          , 0xa54ff53a
+                                          , 0x510e527f
+                                          , 0x9b05688c
+                                          , 0x1f83d9ab
+                                          , 0x5be0cd19
+                                          ]
+    where len8 = keyLength (Proxy :: Proxy Blake2s) len
+          iv0  = 0x01010020  .|. shiftL len8 8
+
+
+---------------------------------- Memory element for Blake2b -----------------------
+-- | The memory element for blake2b hash.
+type Blake2bMem = HashMemory128 Blake2b
+
+-- | The memory element for blake2s hash.
+type Blake2sMem = HashMemory64 Blake2s
+
+instance Initialisable Blake2bMem () where
+  initialise _ = initialise (hashInit 0 :: Blake2b)
+
+instance Initialisable Blake2sMem () where
+  initialise _ = initialise (hashInit 0 :: Blake2s)
+
+----------------------- Padding for Blake code ------------------------------
+
+-- | The generic blake2 padding algorithm. We pad the message with
+-- just enough zero's to make it a multiple of the block size. The
+-- exception is the empty message which should generate a single block
+-- of zeros.
+--
+blake2Pad :: Primitive prim
+          => Proxy prim  -- ^ the primitive (Blake2b or Blake2s).
+          -> BYTES Int   -- ^ length of the message
+          -> WriteTo
+blake2Pad primProxy m
+  | m == 0    = writeBytes 0 $ blocksOf 1 primProxy -- empty message
+  | otherwise = padWrite 0 (blocksOf 1 primProxy) $ skip m
diff --git a/core/Raaz/Primitive/ChaCha20/Internal.hs b/core/Raaz/Primitive/ChaCha20/Internal.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Primitive/ChaCha20/Internal.hs
@@ -0,0 +1,151 @@
+{-# LANGUAGE DataKinds                        #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving       #-}
+{-# LANGUAGE FlexibleInstances                #-}
+{-# LANGUAGE MultiParamTypeClasses            #-}
+{-# LANGUAGE TypeFamilies                     #-}
+
+{- HLINT ignore "Unused LANGUAGE pragma" -}
+
+
+-- |
+--
+-- Module      : Raaz.Primitive.ChaCha20.Internal
+-- Description : Internal module for ChaCha20 cipher.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Primitive.ChaCha20.Internal
+       ( -- * ChaCha20 cipher
+         -- $chacha20$
+         ChaCha20(..), XChaCha20(..)
+       , Key(..), Nounce(..)
+       , ChaCha20Mem(..)
+       , keyCellPtr, ivCellPtr, counterCellPtr
+       ) where
+
+import Foreign.Storable
+import Raaz.Core
+
+-- $chacha20$
+--
+-- This module defines the ChaCha20 ciphers and the memory element
+-- used by a typical implementation. The variant of Chacha20 that we
+-- support is the IETF version described in RFC 7538 with 32-bit
+-- (4-byte) counter and 96-bit (12-byte) IV.
+
+-- | The type associated with the ChaCha20 cipher.
+data ChaCha20 = ChaCha20
+
+-- | The type associated with the XChaCha20 variant.
+data XChaCha20 = XChaCha20
+
+type WORD     = LE Word32
+type KEY      = Tuple 8 WORD
+
+instance Primitive ChaCha20 where
+  type WordType      ChaCha20 = WORD
+  type WordsPerBlock ChaCha20 = 16
+
+instance Primitive XChaCha20 where
+  type WordType      XChaCha20  = WORD
+  type WordsPerBlock XChaCha20  = 16
+
+
+newtype instance Key     ChaCha20 = Key KEY
+  deriving (Storable, EndianStore, Equality, Eq)
+
+newtype instance Nounce  ChaCha20 = Nounce  (Tuple 3 WORD)
+  deriving (Storable, EndianStore, Equality, Eq)
+
+instance Encodable (Key     ChaCha20)
+instance Encodable (Nounce  ChaCha20)
+
+instance Show (Key ChaCha20) where
+  show = showBase16
+
+instance Show (Nounce ChaCha20) where
+  show = showBase16
+
+
+instance IsString (Key ChaCha20) where
+  fromString = fromBase16
+
+
+instance IsString (Nounce ChaCha20) where
+  fromString = fromBase16
+
+
+newtype instance Key     XChaCha20 = XKey KEY
+  deriving (Storable, EndianStore)
+newtype instance Nounce  XChaCha20 = XNounce  (Tuple 6 WORD)
+  deriving (Storable, EndianStore)
+
+instance Encodable (Key     XChaCha20)
+instance Encodable (Nounce  XChaCha20)
+
+instance Show (Key XChaCha20) where
+  show = showBase16
+
+instance Show (Nounce XChaCha20) where
+  show = showBase16
+
+
+instance IsString (Key XChaCha20) where
+  fromString = fromBase16
+
+
+instance IsString (Nounce XChaCha20) where
+  fromString = fromBase16
+
+---------- Memory for ChaCha20 implementations  ------------------
+-- | The memory element used by chacha20. This memory is an instance
+-- of `WriteAccessible` where the key portion of the memory can be
+-- written into.
+data ChaCha20Mem = ChaCha20Mem { keyCell      :: MemoryCell (Key     ChaCha20)
+                               , ivCell       :: MemoryCell (Nounce  ChaCha20)
+                               , counterCell  :: MemoryCell WORD
+                               }
+
+-- | The pointer into the chacha memory where the key is stored.
+keyCellPtr :: ChaCha20Mem -> Ptr (Key ChaCha20)
+keyCellPtr = unsafeGetCellPointer . keyCell
+
+-- | The pointer into the chacha memory where the iv is stored.
+ivCellPtr :: ChaCha20Mem -> Ptr (Nounce ChaCha20)
+ivCellPtr = unsafeGetCellPointer . ivCell
+
+-- | The pointer in the chacha memory where the counter is stored.
+counterCellPtr :: ChaCha20Mem -> Ptr WORD
+counterCellPtr = unsafeGetCellPointer . counterCell
+
+instance Initialisable  (MemoryCell (Key ChaCha20)) (Key XChaCha20) where
+  initialise = initialise . coerce
+    where coerce (XKey k) = Key k
+
+instance Memory ChaCha20Mem where
+  memoryAlloc     = ChaCha20Mem <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . keyCell
+
+instance Initialisable ChaCha20Mem (Key ChaCha20) where
+  initialise key = initialise key . keyCell
+
+instance Initialisable ChaCha20Mem (Nounce ChaCha20)  where
+  initialise nounce = initialise nounce . ivCell
+
+instance Initialisable ChaCha20Mem (BlockCount ChaCha20) where
+  initialise bcount = initialise (conv bcount) . counterCell
+    where conv :: BlockCount ChaCha20 -> WORD
+          conv = toEnum . fromEnum
+
+instance Extractable ChaCha20Mem (BlockCount ChaCha20) where
+  extract = fmap conv . extract  . counterCell
+    where conv :: WORD -> BlockCount ChaCha20
+          conv = toEnum . fromEnum
+
+-- | Writes into the key portion.
+instance WriteAccessible ChaCha20Mem where
+  writeAccess = writeAccess . keyCell
+  afterWriteAdjustment = afterWriteAdjustment . keyCell
diff --git a/core/Raaz/Primitive/HashMemory.hs b/core/Raaz/Primitive/HashMemory.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Primitive/HashMemory.hs
@@ -0,0 +1,130 @@
+{-# LANGUAGE DataKinds         #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+
+-- |
+--
+-- Module      : Raaz.Primitive.HashMemory
+-- Description : Memory elements for typical hashes.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.Primitive.HashMemory
+       ( HashMemory128, HashMemory64
+       , hashCellPointer, hashCell128Pointer
+       , lengthCellPointer, uLengthCellPointer, lLengthCellPointer
+       , getLength, getULength, getLLength
+       , updateLength, updateLength128
+       ) where
+
+
+import Foreign.Storable           ( Storable(..)  )
+import Raaz.Core
+
+-- | Similar to `HashMemory128` but keeps track of length as a 64-bit quantity.
+data HashMemory64 h = HashMemory64 { hashCell    :: MemoryCell h
+                                   , lengthCell  :: MemoryCell (BYTES Word64)
+                                   }
+
+-- | Memory element that keeps track of a hash and the total bytes
+-- processed (as a 128 bit quantity). Such a memory element is useful
+-- for building the memory element for cryptographic hashes.
+
+data HashMemory128 h = HashMemory128 { hashCell128 :: MemoryCell h
+                                     , uLengthCell :: MemoryCell (BYTES Word64)
+                                     , lLengthCell :: MemoryCell (BYTES Word64)
+                                     }
+
+
+
+-- | Get the length.
+getLength :: HashMemory64 h -> IO (BYTES Word64)
+getLength = extract . lengthCell
+
+-- | Get the higher order 64-bits.
+getULength :: HashMemory128 h -> IO (BYTES Word64)
+getULength = extract . uLengthCell
+
+-- | Get the lower order 64-bits
+getLLength :: HashMemory128 h -> IO (BYTES Word64)
+getLLength =  extract . lLengthCell
+
+
+-- | Get the pointer to the hash.
+hashCellPointer :: Storable h
+                => HashMemory64 h
+                -> Ptr h
+hashCellPointer = unsafeGetCellPointer . hashCell
+-- | Get the pointer to the array which stores the digest
+hashCell128Pointer :: Storable h
+                  => HashMemory128 h
+                  -> Ptr h
+hashCell128Pointer = unsafeGetCellPointer . hashCell128
+
+
+
+-- | Get the pointer to upper half of the length bytes.
+lengthCellPointer :: Storable h
+                   => HashMemory64 h
+                   -> Ptr (BYTES Word64)
+lengthCellPointer = unsafeGetCellPointer . lengthCell
+
+-- | Get the pointer to upper half of the length bytes.
+uLengthCellPointer :: Storable h
+                   => HashMemory128 h
+                   -> Ptr (BYTES Word64)
+uLengthCellPointer = unsafeGetCellPointer . uLengthCell
+
+-- | Get the pointer to the lower half of the length bytes.
+lLengthCellPointer :: Storable h
+                   => HashMemory128 h
+                   -> Ptr (BYTES Word64)
+lLengthCellPointer = unsafeGetCellPointer . lLengthCell
+
+
+-- | Update the 128 bit length stored in the hash memory.
+updateLength128 :: LengthUnit len
+                => len
+                -> HashMemory128 h
+                -> IO ()
+updateLength128 len hmem =
+  do l <- getLLength hmem
+     initialise (l + lenBytes) $ lLengthCell hmem
+     when (l > maxBound - lenBytes) $
+       modifyMem (+(1 :: BYTES Word64)) $ uLengthCell hmem
+  where lenBytes = fromIntegral $ inBytes len
+
+-- | Update the 64-bit length stored in the hash memory.
+updateLength :: LengthUnit len
+             => len
+             -> HashMemory64 h
+             -> IO ()
+updateLength len = modifyMem (+lenBytes) . lengthCell
+  where lenBytes = fromIntegral $ inBytes len :: BYTES Word64
+
+instance Storable h  => Memory (HashMemory128 h) where
+  memoryAlloc     = HashMemory128 <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . hashCell128
+
+instance Storable h  => Memory (HashMemory64 h) where
+  memoryAlloc     = HashMemory64 <$> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . hashCell
+
+instance Storable h => Initialisable (HashMemory128 h) h where
+  initialise h hmem = do initialise h $ hashCell128 hmem
+                         initialise (0 :: BYTES Word64) $ uLengthCell hmem
+                         initialise (0 :: BYTES Word64) $ lLengthCell hmem
+
+
+instance Storable h => Initialisable (HashMemory64 h) h where
+  initialise h hmem = do initialise h $ hashCell hmem
+                         initialise (0 :: BYTES Word64) $ lengthCell hmem
+
+
+instance Storable h => Extractable (HashMemory128 h) h where
+  extract = extract . hashCell128
+
+instance Storable h => Extractable (HashMemory64 h) h where
+  extract = extract . hashCell
diff --git a/core/Raaz/Primitive/Keyed/Internal.hs b/core/Raaz/Primitive/Keyed/Internal.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Primitive/Keyed/Internal.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TypeFamilies               #-}
+{-# LANGUAGE FlexibleInstances          #-}
+
+-- |
+--
+-- Module      : Raaz.Primitive.Keyed.Internal
+-- Description : Keyed hashing primitives.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Primitive.Keyed.Internal
+       ( -- * Keyed Hashing.
+         -- $keyedhash$
+         --
+         Keyed(..), KeyedHash(..), Key(..), unsafeToKeyed, unsafeToPrim
+       ) where
+
+import Data.ByteString  as BS
+import Foreign.Storable ( Storable )
+
+import Raaz.Core
+
+-- $keyedhash$
+--
+-- The keyed version of a cryptographic hash. Certain hashes like
+-- blake2 can be used for message authentication where the message is
+-- essentially appended to the key and hashed. This module is meant to
+-- handle such keyed primitives.  Note that this naive message
+-- authentication is vulnerable to length extension attack when
+-- combined with a Merkel-Damgrad like hash like the sha2 family of
+-- hashes; they require a more complicated HMAC construction.
+
+-- | Class of primitives, typically cryptographic hashes, that when
+-- used as a keyed hash gives a safe MAC.
+class KeyedHash prim where
+  -- The initialisation used by the hash can depend on the length of
+  -- the key used.
+  hashInit :: BYTES Int -> prim
+
+-- | The message authentication code associated with the hashes.
+newtype Keyed prim = Keyed prim
+                 deriving (Eq, Equality, Storable, EndianStore, Encodable)
+
+instance IsString prim => IsString (Keyed prim) where
+  fromString = unsafeToKeyed . fromString
+
+instance Show prim => Show (Keyed prim) where
+  show = show . unsafeToPrim
+
+instance Primitive prim => Primitive (Keyed prim) where
+  type WordType      (Keyed prim)  = WordType prim
+  type WordsPerBlock (Keyed prim)  = WordsPerBlock prim
+
+--------------- Key used by the keyed prim -----------------------------
+
+newtype instance Key (Keyed prim) = Key ByteString
+
+instance IsString (Key (Keyed prim)) where
+  fromString = Key . fromBase16
+
+instance Show (Key (Keyed prim)) where
+  show (Key hkey) = showBase16 hkey
+
+instance Encodable (Key (Keyed prim)) where
+  toByteString   (Key bs) = bs
+  fromByteString          = Just . Key
+  unsafeFromByteString    = Key
+
+-- | Converts a Keyed value to the corresponding hash value. This
+-- function violates the principle that semantically distinct values
+-- should be of distinct types and hence should be considered unsafe
+unsafeToPrim :: Keyed prim -> prim
+unsafeToPrim (Keyed p) = p
+
+
+-- | Converts the hash value to the corresponding @`Keyed`@
+-- value. This function violates the principle that semantically
+-- distinct values should be of distinct types and hence should be
+-- considered unsafe.
+unsafeToKeyed :: prim -> Keyed prim
+unsafeToKeyed = Keyed
diff --git a/core/Raaz/Primitive/Poly1305/Internal.hs b/core/Raaz/Primitive/Poly1305/Internal.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Primitive/Poly1305/Internal.hs
@@ -0,0 +1,88 @@
+
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TypeFamilies               #-}
+
+-- |
+--
+-- Module      : Raaz.Primitive.Poly1305.Internal
+-- Description : Internals of the poly1305 message authenticator.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Primitive.Poly1305.Internal
+       ( -- * The Poly1305 MAC
+         -- $poly1305$
+         Poly1305(..), R(..), S(..), WORD, Key(..)
+       ) where
+
+import Foreign.Storable( Storable )
+import Raaz.Core
+
+-- $poly1305$
+--
+-- This module exposes the types required to implement the the
+-- poly1305 message authenticator. The poly1305 is a function that
+-- takes two parameters `r` and `s` and for an input message `m`
+-- computes the function.
+--
+-- Poly1305(m, r,s) = (M(r) mod 2^130 - 5) + s mod 2^128
+--
+--  In the original publication, `r` is selected pseudo-randomly and
+-- `s` is generated by encrypting (using AES) a nonce `n` with a
+-- secret key k, i.e. r = random; s = AES(k,n).  The secret that needs
+-- to be shared by the two parties is `r` and the key `k`. Actual
+-- protocols should never repeat the nonce `n` for otherwise there
+-- will be compromise in the security.  The RFC7539 uses a variant
+-- that uses the chacha20 cipher instead of AES.
+--
+-- As can be seen from the above discussion the actual mechanism for
+-- selecting the `r` and `s` differs depending on the
+-- situation. Hence, this module only provide the "raw" Poly1305
+-- implementation leaving out the details of the selection of `r` and
+-- `s` for some latter stage. Thus this module is not of direct use
+-- but is used by actual protocols to implement message
+-- authentication.
+
+-- | A Poly1305 word is a 128-bit numbers in little-endian.
+type WORD = Tuple 2 (LE Word64)
+
+-- | The datatype that captures the Poly1305 authenticator tag.
+newtype Poly1305 = Poly1305 WORD deriving (Storable, EndianStore, Equality, Eq)
+
+-- | The `r` component of the secret.
+newtype R        = R WORD deriving (Storable, EndianStore, Equality, Eq)
+
+-- | The `s` component of the secret.
+newtype S        = S WORD deriving (Storable, EndianStore, Equality, Eq)
+
+instance Encodable Poly1305
+instance Encodable R
+instance Encodable S
+
+instance IsString Poly1305 where
+  fromString = fromBase16
+
+instance IsString R where
+  fromString = fromBase16
+
+instance IsString S where
+  fromString = fromBase16
+
+instance Show Poly1305 where
+  show = showBase16
+
+instance Show R where
+  show = showBase16
+
+instance Show S where
+  show = showBase16
+
+instance Primitive Poly1305 where
+  type WordType      Poly1305  = Word8
+  type WordsPerBlock Poly1305  = 16
+
+data instance Key Poly1305  = Key R S deriving Show
diff --git a/core/Raaz/Primitive/Sha2/Internal.hs b/core/Raaz/Primitive/Sha2/Internal.hs
new file mode 100644
--- /dev/null
+++ b/core/Raaz/Primitive/Sha2/Internal.hs
@@ -0,0 +1,168 @@
+{-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE TypeFamilies               #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE FlexibleContexts           #-}
+{-# CFILES raaz/hash/sha1/portable.c    #-}
+
+-- |
+--
+-- Module      : Raaz.Primitive.Sha2.Internal
+-- Description : Internal modules for sha2 family of hashes.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.Primitive.Sha2.Internal
+       ( -- * The sha2 types
+         Sha512, Sha256
+       , Sha512Mem, Sha256Mem
+       , process512Last
+       , process256Last
+       ) where
+
+import           Data.Vector.Unboxed        ( Unbox )
+import           Foreign.Storable           ( Storable(..) )
+import           GHC.TypeLits
+
+
+import           Raaz.Core
+import           Raaz.Core.Transfer.Unsafe
+import           Raaz.Primitive.HashMemory
+
+----------------------------- The blake2 type ---------------------------------
+
+-- | The Sha2 type.
+newtype Sha2 w = Sha2 (Tuple 8 w)
+               deriving (Eq, Equality, Storable, EndianStore)
+
+instance ( Unbox w
+         , EndianStore w
+         ) => Primitive (Sha2 w) where
+  type WordType      (Sha2 w) = w
+  type WordsPerBlock (Sha2 w) = 16
+
+
+instance (Unbox w, EndianStore w) => Encodable (Sha2 w)
+
+instance (EndianStore w, Unbox w) => IsString (Sha2 w) where
+  fromString = fromBase16
+
+instance (EndianStore w, Unbox w) => Show (Sha2 w) where
+  show =  showBase16
+
+
+-- | The Sha512 cryptographic hash.
+type Sha512 = Sha2 (BE Word64)
+
+-- | The Sha256 cryptographic hash.
+type Sha256 = Sha2 (BE Word32)
+
+-- | The initial value to start the blake2b hashing. This is equal to
+-- the iv `xor` the parameter block.
+sha512Init :: Sha512
+sha512Init = Sha2 $ unsafeFromList [ 0x6a09e667f3bcc908
+                                   , 0xbb67ae8584caa73b
+                                   , 0x3c6ef372fe94f82b
+                                   , 0xa54ff53a5f1d36f1
+                                   , 0x510e527fade682d1
+                                   , 0x9b05688c2b3e6c1f
+                                   , 0x1f83d9abfb41bd6b
+                                   , 0x5be0cd19137e2179
+                                   ]
+
+-- | The initial value to start the blake2b hashing. This is equal to
+-- the iv `xor` the parameter block.
+sha256Init :: Sha256
+sha256Init = Sha2 $ unsafeFromList [ 0x6a09e667
+                                   , 0xbb67ae85
+                                   , 0x3c6ef372
+                                   , 0xa54ff53a
+                                   , 0x510e527f
+                                   , 0x9b05688c
+                                   , 0x1f83d9ab
+                                   , 0x5be0cd19
+                                   ]
+
+---------------------------------- Memory element for Sha512 -----------------------
+
+-- | The memory used by sha512 implementations.
+type Sha512Mem = HashMemory128 Sha512
+
+-- | The memory used bha sha256 implementations.
+type Sha256Mem = HashMemory64 Sha256
+
+instance Initialisable Sha256Mem () where
+  initialise _ = initialise sha256Init
+
+instance Initialisable Sha512Mem () where
+  initialise _ = initialise sha512Init
+
+
+-- | The block compressor for sha256.
+type Compressor256 n =  AlignedBlockPtr n Sha256
+                     -> BlockCount Sha256
+                     -> Sha256Mem -> IO ()
+-- | The block compressor for sha512
+type Compressor512 n =  AlignedBlockPtr n Sha512
+                     -> BlockCount Sha512
+                     -> Sha512Mem -> IO ()
+
+-- | Takes a block processing function for sha256 and gives a last
+-- bytes processor.
+process256Last :: KnownNat n
+               => Compressor256 n    -- ^ block compressor
+               -> AlignedBlockPtr n Sha256
+               -> BYTES Int
+               -> Sha256Mem
+               -> IO ()
+process256Last comp buf nbytes sha256mem = do
+  updateLength nbytes sha256mem
+  totalBytes  <- fmap bigEndian <$> getLength sha256mem
+  let pad      = padding256 nbytes totalBytes
+      blocks   = atMost $ transferSize pad
+    in unsafeTransfer pad buf >> comp buf blocks sha256mem
+
+-- | Takes a block processing function for sha512 and gives a last
+-- bytes processor.
+process512Last :: KnownNat n
+               => Compressor512 n
+               -> AlignedBlockPtr n Sha512
+               -> BYTES Int
+               -> Sha512Mem
+               -> IO ()
+process512Last comp buf nbytes sha512mem = do
+  updateLength128 nbytes sha512mem
+  uLen  <- fmap bigEndian <$> getULength sha512mem
+  lLen  <- fmap bigEndian <$> getLLength sha512mem
+  let pad      = padding512 nbytes uLen lLen
+      blocks   = atMost $ transferSize pad
+      in unsafeTransfer pad buf >> comp buf blocks sha512mem
+
+-- | The padding for sha256 as a writer.
+padding256 :: BYTES Int         -- Data in buffer.
+           -> BYTES (BE Word64) -- Message length
+           -> WriteTo
+padding256 bufSize msgLen  =
+  glueWrites 0 boundary (padBit1 bufSize) lengthWrite
+  where boundary    = blocksOf 1 (Proxy :: Proxy Sha256)
+        lengthWrite = write $ shiftL msgLen 3
+
+-- | The padding for sha512 as a writer.
+padding512 :: BYTES Int         -- Data in buffer.
+           -> BYTES (BE Word64) -- Message length higher
+           -> BYTES (BE Word64) -- Message length lower
+           -> WriteTo
+padding512 bufSize uLen lLen  = glueWrites 0 boundary (padBit1 bufSize) lengthWrite
+  where boundary    = blocksOf 1 (Proxy :: Proxy Sha512)
+        lengthWrite = write up `mappend` write lp
+        up          = shiftL uLen 3 .|. shiftR lLen 61
+        lp          = shiftL lLen 3
+
+
+-- | Pad the message with a 1-bit.
+padBit1 :: BYTES Int -- ^ message length
+        -> WriteTo
+padBit1  sz = skip sz <> writeStorable (0x80 :: Word8)
diff --git a/core/cbits/raaz/core/cpusupports.c b/core/cbits/raaz/core/cpusupports.c
new file mode 100644
--- /dev/null
+++ b/core/cbits/raaz/core/cpusupports.c
@@ -0,0 +1,42 @@
+/*
+
+This module exposes runtime checks for cpu flags. Works only with GCC.
+
+ */
+
+
+# define GCC_VERSION (__GNUC__ * 10 + __GNUC_MINOR__)
+
+/* Check an x86_64 feature */
+
+# ifdef ARCH_X86_64
+#     define X86_64_SUPPORTS(x) { __builtin_cpu_init(); return __builtin_cpu_supports((x)); }
+# else
+#     define X86_64_SUPPORTS(x) { return 0; }
+# endif
+
+# if GCC_VERSION >= 48 && !defined(__clang__)
+# pragma GCC push_options
+# pragma GCC optimize ("O0")
+
+int raaz_supports_sse()   { X86_64_SUPPORTS("sse");     }
+int raaz_supports_sse2()  { X86_64_SUPPORTS("sse2");    }
+int raaz_supports_sse3()  { X86_64_SUPPORTS("sse3");    }
+int raaz_supports_sse4_1(){ X86_64_SUPPORTS("sse4.1");  }
+int raaz_supports_sse4_2(){ X86_64_SUPPORTS("sse4.2");  }
+int raaz_supports_avx()   { X86_64_SUPPORTS("avx");     }
+int raaz_supports_avx2()  { X86_64_SUPPORTS("avx2");    }
+
+# pragma GCC pop_options
+
+# else
+
+int raaz_supports_sse()   { return 0;}
+int raaz_supports_sse2()  { return 0;}
+int raaz_supports_sse3()  { return 0;}
+int raaz_supports_sse4_1(){ return 0;}
+int raaz_supports_sse4_2(){ return 0;}
+int raaz_supports_avx()   { return 0;}
+int raaz_supports_avx2()  { return 0;}
+
+#endif
diff --git a/core/cbits/raaz/core/endian.c b/core/cbits/raaz/core/endian.c
new file mode 100644
--- /dev/null
+++ b/core/cbits/raaz/core/endian.c
@@ -0,0 +1,89 @@
+#include <raaz/core/endian.h>
+
+/*
+ *  These are declared as macros because they will work for both
+ *  32-bit as well as 64-bit cases.
+ */
+
+# define MASK(i)       (0xFFULL << (8*(i))) /* mask to select the ith byte              */
+# define SEL(a,i)      ((a) & MASK(i))      /* select the ith byte                      */
+# define MOVL(a,i)      ((a) << (8*(i)))    /* shift the bytes i positions to the left  */
+# define MOVR(a,i)      ((a) >> (8*(i)))    /* shift the bytes i positions to the right */
+# define SWAP(a,i,j)   (MOVL(SEL(a,i),(j-i)) | MOVR(SEL(a,j), (j - i)))
+                       /* This function swaps the ith and jth bytes and sets other bytes to 0 */
+
+
+
+# define TO32(x)     ((uint32_t)(x))
+# define TO64(x)     ((uint64_t)(x))
+
+# define B32(ptr,i) (TO32(ptr[i]))
+# define B64(ptr,i) (TO64(ptr[i]))
+
+/* Make a 32-bit quantity out of the 4 bytes given in MSB first order */
+# define MK32(a,b,c,d) ( (a) << 24 | (b) << 16 | (c) << 8 | (d) )
+
+/* Similar to MK32 but for 64-bit quantities */
+# define MK64(a,b,c,d,e,f,g,h)  \
+    ((a) <<  56  | (b) << 48   | (c) << 40 | (d) << 32	| (e) << 24   | (f) << 16   | (g) << 8  | (h))
+
+
+#ifdef __RAAZ_REQUIRE_PORTABLE_SWAP__
+
+uint32_t raaz_bswap32(uint32_t a){ return (SWAP(a,0,3) | SWAP(a,1,2)); }
+uint64_t raaz_bswap64(uint64_t a){ return (SWAP(a,0,7) | SWAP(a,1,6)  | SWAP(a,2,5) | SWAP(a,3,4)); }
+
+#endif
+
+
+#ifdef __RAAZ_REQUIRE_PORTABLE_ENDIAN__
+
+uint32_t raaz_tobe32(uint32_t x)
+{
+    uint8_t *ptr = (uint8_t *) &x;
+    return MK32(B32(ptr,0), B32(ptr,1), B32(ptr,2), B32(ptr,3));
+}
+
+
+uint32_t raaz_tole32(uint32_t x)
+{
+    uint8_t *ptr = (uint8_t *) &x;
+    return MK32(B32(ptr,3), B32(ptr,2), B32(ptr,1), B32(ptr,0));
+
+}
+
+uint64_t raaz_tobe64(uint64_t x)
+{
+    uint8_t *ptr = (uint8_t *) &x;
+    return MK64(B64(ptr,0), B64(ptr,1), B64(ptr,2), B64(ptr,3),
+		B64(ptr,4), B64(ptr,5), B64(ptr,6), B64(ptr,7));
+}
+
+
+uint64_t raaz_tole64(uint64_t x)
+{
+    uint8_t *ptr = (uint8_t *) &x;
+    return MK64(B64(ptr,7), B64(ptr,6), B64(ptr,5), B64(ptr,4),
+		B64(ptr,3), B64(ptr,2), B64(ptr,1), B64(ptr,0));
+}
+
+#endif
+
+
+/* Finally we define the functions that are called by Haskell as FFI
+ * routines for their endian store instances. These should not be
+ * declared static inline.
+ */
+
+uint32_t raazSwap32(uint32_t a){ return raaz_bswap32(a);}
+uint64_t raazSwap64(uint64_t a){ return raaz_bswap64(a);}
+
+void raazSwap32Array(uint32_t *ptr, int n)
+{
+    for(;n > 0; ++ptr, --n){*ptr = raaz_bswap32(*ptr);}
+}
+
+void raazSwap64Array(uint64_t *ptr, int n)
+{
+    for(;n > 0; ++ptr, --n){*ptr = raaz_bswap64(*ptr);}
+}
diff --git a/core/cbits/raaz/core/endian.h b/core/cbits/raaz/core/endian.h
new file mode 100644
--- /dev/null
+++ b/core/cbits/raaz/core/endian.h
@@ -0,0 +1,100 @@
+# pragma once
+# include <stdint.h>
+
+/* This header file does the following
+
+1. Declarations of raazSwap* and RaazSwap*Array functions that are the
+   C functions for call from Haskell.
+
+2. Endian conversion functions that are used by implementations of
+   primitives.
+
+Note that on the Haskell side endian conversion happens by calling the
+swap if required and we do not need the endian functions
+here. Therefore, they are declared as static inline whenever possible.
+
+
+We first define functions for byte swapping falling back to portable C
+implementation (indicated by defining __RAAZ_REQUIRE_PORTABLE_SWAP__)
+available in raaz/core/endian.c. The C-ffi stub functions make use of
+these functions. The endian conversions functions also use them if we
+can detect the byte order. Otherwise they too have a portable c
+implementation (indicated by defining
+__RAAZ_REQUIRE_PORTABLE_ENDIAN__)
+
+*/
+
+/*
+ *         Byte swapping. Use platform specific ones when we know it.
+ */
+
+#ifdef PLATFORM_OSX
+#  include <libkern/OSByteOrder.h> /* For PLATFORM OSX */
+
+   static inline uint32_t raaz_bswap32(uint32_t x){ return OSSwapInt32(x); }
+   static inline uint64_t raaz_bswap64(uint64_t x){ return OSSwapInt64(x); }
+
+#elif defined(PLATFORM_WINDOWS)
+#  include<stdlib.h>
+   static inline uint32_t raaz_bswap32(uint32_t x){ return _byteswap_ulong(x); }
+   static inline uint64_t raaz_bswap64(uint64_t x){ return _byteswap_uint64(x); }
+
+#elif defined(PLATFORM_OPENBSD)
+#  include <endian.h>
+   static inline uint32_t raaz_bswap32(uint32_t x){ return swap32(x); }
+   static inline uint64_t raaz_bswap64(uint64_t x){ return swap64(x); }
+
+#elif defined(PLATFORM_LINUX) /* All other platforms */
+#  include <byteswap.h>
+   static inline uint32_t raaz_bswap32(uint32_t x){ return bswap_32(x); }
+   static inline uint64_t raaz_bswap64(uint64_t x){ return bswap_64(x); }
+#else
+  /* We do not have platform specific byte swap */
+# define __RAAZ_REQUIRE_PORTABLE_SWAP__
+
+  extern uint32_t raaz_bswap32(uint32_t x);
+  extern uint64_t raaz_bswap64(uint64_t x);
+
+#endif
+
+
+#ifdef __GNUC__
+
+/* For GNUC compiler use byte order checks to define efficient endian
+ * conversion */
+
+#  if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+
+   static inline uint32_t raaz_tobe32(uint32_t x){ return raaz_bswap32(x); }
+   static inline uint64_t raaz_tobe64(uint64_t x){ return raaz_bswap64(x); }
+
+   static inline uint32_t raaz_tole32(uint32_t x){ return x; }
+   static inline uint64_t raaz_tole64(uint64_t x){ return x; }
+
+#  else
+   static inline uint32_t raaz_tobe32(uint32_t x){ return x; }
+   static inline uint64_t raaz_tobe64(uint64_t x){ return x; }
+
+   static inline uint32_t raaz_tole32(uint32_t x){ return raaz_bswap32(x); }
+   static inline uint64_t raaz_tole64(uint64_t x){ return raaz_bswap64(x); }
+
+#  endif /* Byte order */
+
+#else  /* Not __GNUC__ use portable implementations */
+#  define __RAAZ_REQUIRE_PORTABLE_ENDIAN__
+
+   extern uint32_t raaz_tobe32(uint32_t x);
+   extern uint64_t raaz_tobe64(uint64_t x);
+   extern uint32_t raaz_tole32(uint32_t x);
+   extern uint64_t raaz_tole64(uint64_t x);
+
+#endif
+
+/* These are the C functions that are exported for FFI calls to
+ * Haskell. Their definitions are available in endian.c
+ */
+
+extern uint32_t raazSwap32      (uint32_t a);
+extern uint64_t raazSwap64      (uint64_t a);
+extern void     raazSwap32Array (uint32_t *ptr, int n);
+extern void     raazSwap64Array (uint64_t *ptr, int n);
diff --git a/core/cbits/raaz/core/memory.c b/core/cbits/raaz/core/memory.c
new file mode 100644
--- /dev/null
+++ b/core/cbits/raaz/core/memory.c
@@ -0,0 +1,54 @@
+
+# ifdef PLATFORM_WINDOWS
+# include <windows.h>
+# include <wincrypt.h>
+   typedef BOOL WINAPI (*VirtualFunction)(LPVOID, SIZE_T);
+
+#else /* we assume posix system */
+
+#  include <sys/mman.h>
+
+#endif
+
+/* Locks and Unlocks Memory */
+int raazMemorylock(void* ptr, size_t size){
+#ifdef PLATFORM_WINDOWS
+  VirtualFunction func =
+     (VirtualFunction)GetProcAddress(GetModuleHandle(TEXT("kernel32")),
+				     "VirtualLock");
+  return !func(ptr, size);
+#else
+    return mlock(ptr,size);
+#endif
+
+}
+
+void raazMemoryunlock(void* ptr, size_t size){
+#ifdef PLATFORM_WINDOWS
+  VirtualFunction func =
+     (VirtualFunction)GetProcAddress(GetModuleHandle (TEXT("kernel32")),
+				     "VirtualUnlock");
+  func(ptr, size);
+#else  /* posix */
+    munlock(ptr,size);
+#endif
+}
+
+
+#include <string.h>
+
+
+void raazWipeMemory(void * ptr, size_t size)
+{
+
+#ifdef HAVE_EXPLICIT_BZERO
+    explicit_bzero(ptr,size);
+#elif  HAVE_EXPLICIT_MEMSET
+    explicit_memset(ptr,0,size);
+#elif HAVE_SECURE_ZERO_MEMORY
+    SecureZeroMemory(ptr, size);
+#else
+#warning memset: The compiler might optimise it away.
+    memset(ptr,0,size);
+#endif
+}
diff --git a/entropy/arc4random/Raaz/Entropy.hs b/entropy/arc4random/Raaz/Entropy.hs
deleted file mode 100644
--- a/entropy/arc4random/Raaz/Entropy.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface         #-}
-
--- | Entropy based on arc4random_buf (OpenBSD/NetBSD etc).
-module Raaz.Entropy( getEntropy ) where
-
-import Control.Monad.IO.Class(MonadIO, liftIO)
-import Raaz.Core.Types
-
-
--- | The getrandom system call.
-foreign import ccall unsafe
-  "arc4random_buf"
-  c_arc4random :: Pointer      -- Message
-               -> BYTES Int    -- number of bytes
-               -> IO (BYTES Int)
-
--- | Get random bytes from using the @getrandom@ system call on
--- linux. This is only used to seed the PRG and not intended for call
--- by others.
-getEntropy :: (MonadIO m, LengthUnit l) => l -> Pointer -> m (BYTES Int)
-getEntropy l ptr = liftIO $ c_arc4random ptr lenBytes >> return lenBytes
-  where lenBytes = inBytes l
diff --git a/entropy/getrandom/Raaz/Entropy.hs b/entropy/getrandom/Raaz/Entropy.hs
deleted file mode 100644
--- a/entropy/getrandom/Raaz/Entropy.hs
+++ /dev/null
@@ -1,21 +0,0 @@
-{-# LANGUAGE ForeignFunctionInterface         #-}
--- | Entropy based on the getrandom system call on Linux.
-module Raaz.Entropy( getEntropy ) where
-
-import Control.Monad.IO.Class(MonadIO, liftIO)
-import Raaz.Core.Types
-
--- | The getrandom system call.
-foreign import ccall unsafe
-  "getrandom"
-  c_getrandom :: Pointer      -- Message
-              -> BYTES Int    -- number of bytes to be read.
-              -> Int          -- flags
-              -> IO (BYTES Int)
-
--- | Get random bytes from using the @getrandom@ system call on
--- linux. This is only used to seed the PRG and not intended for call
--- by others.
-getEntropy :: (MonadIO m, LengthUnit l) => l -> Pointer -> m (BYTES Int)
-getEntropy l ptr = liftIO $ c_getrandom ptr lenBytes 0
-  where lenBytes = inBytes l
diff --git a/entropy/urandom/Raaz/Entropy.hs b/entropy/urandom/Raaz/Entropy.hs
deleted file mode 100644
--- a/entropy/urandom/Raaz/Entropy.hs
+++ /dev/null
@@ -1,13 +0,0 @@
--- | Entropy based on `/dev/urandom`.
-module Raaz.Entropy( getEntropy ) where
-
-import Control.Monad.IO.Class( MonadIO, liftIO)
-import System.IO
-import Raaz.Core
-
-
--- | Get random bytes from the system. Do not over use this function
--- as it is meant to be used by a PRG. This function reads bytes from
--- '/dev/urandom'.
-getEntropy :: (MonadIO m, LengthUnit l) => l -> Pointer -> m (BYTES Int)
-getEntropy l ptr = liftIO $ withBinaryFile "/dev/urandom" ReadMode $ \ hand -> hFillBuf hand ptr l
diff --git a/entropy/windows/Raaz/Entropy.hsc b/entropy/windows/Raaz/Entropy.hsc
deleted file mode 100644
--- a/entropy/windows/Raaz/Entropy.hsc
+++ /dev/null
@@ -1,51 +0,0 @@
-{-# LANGUAGE CPP #-}
-module Raaz.Entropy( getEntropy ) where
-
-#include <Windows.h>
-#include <Wincrypt.h>
-
-##if defined(i386_HOST_ARCH)
-## define WINDOWS_CCONV stdcall
-##elif defined(x86_64_HOST_ARCH)
-## define WINDOWS_CCONV ccall
-##else
-## error Unknown mingw32 arch
-##endif
-
-import Control.Monad.IO.Class( MonadIO, liftIO)
-import Control.Monad (when)
-import Data.Bits ((.|.))
-import Data.Word (Word8(), Word32())
-import Foreign.Ptr (Ptr(), nullPtr, castPtr)
-import Foreign.Storable (peek)
-import Foreign.C.String (CWString())
-import Raaz.Core
-
-type HCRYPTPROV = Ptr ()
-
-foreign import WINDOWS_CCONV unsafe "Wincrypt.h CryptGenRandom"
-    c_CryptGenRandom :: HCRYPTPROV -> Word32 -> Ptr Word8 -> IO Bool
-
-foreign import WINDOWS_CCONV unsafe "Wincrypt.h CryptAcquireContextW"
-    c_CryptAcquireContext :: Ptr HCRYPTPROV -> CWString -> CWString
-                          -> Word32 -> Word32 -> IO Bool
-
-foreign import WINDOWS_CCONV unsafe "Wincrypt.h CryptReleaseContext"
-    c_CryptReleaseContext :: HCRYPTPROV -> Word32 -> IO Bool
-
--- | Get cryptographically random bytes from the system.
-getEntropy :: (MonadIO m, LengthUnit l) => l -> Pointer -> m (BYTES Int)
-getEntropy l ptr = liftIO $ allocaBuffer ptrSize $ \ctx ->
-    do let addr = castPtr ctx
-       ctx_ok <- c_CryptAcquireContext addr nullPtr nullPtr
-                       (#const PROV_RSA_FULL)
-                       ((#const CRYPT_VERIFYCONTEXT) .|. (#const CRYPT_SILENT))
-       when (not ctx_ok) $ fail "Call to CryptAcquireContext failed."
-       ctx'    <- peek addr
-       success <- c_CryptGenRandom ctx' (fromIntegral bytes) (castPtr ptr)
-       _ <- c_CryptReleaseContext ctx' 0
-       if success
-          then return $ BYTES bytes
-          else fail "Unable to generate entropy. Call to CryptGenRandom failed."
-  where BYTES bytes = inBytes l
-        ptrSize = BYTES ((#size HCRYPTPROV) :: Int)
diff --git a/implementation/Blake2b/CHandWritten.hs b/implementation/Blake2b/CHandWritten.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Blake2b/CHandWritten.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE ForeignFunctionInterface   #-}
+{-# LANGUAGE DataKinds                  #-}
+
+
+-- | The portable C-implementation of Blake2b.
+module Blake2b.CHandWritten where
+
+import Raaz.Core
+import Raaz.Core.Transfer.Unsafe
+import Raaz.Core.Types.Internal
+import Raaz.Primitive.HashMemory
+import Raaz.Primitive.Blake2.Internal
+
+
+name :: String
+name = "blake2b-c-handwritten"
+
+description :: String
+description = "Hand written Blake2b Implementation in portable C and Haskell FFI"
+
+type Prim                    = Blake2b
+type Internals               = Blake2bMem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount Blake2b
+additionalBlocks = blocksOf 1 Proxy
+
+
+------------------------ The foreign function calls  ---------------------
+
+foreign import ccall unsafe
+  "raaz/hash/blake2/common.h raazHashBlake2bPortableBlockCompress"
+  c_blake2b_compress  :: BufferPtr
+                      -> BlockCount Prim
+                      -> Ptr (BYTES Word64)
+                      -> Ptr (BYTES Word64)
+                      -> Ptr Blake2b
+                      -> IO ()
+
+foreign import ccall unsafe
+  "raaz/hash/blake2/common.h raazHashBlake2bPortableLastBlock"
+  c_blake2b_last   :: BlockPtr Prim
+                   -> BYTES Int
+                   -> BYTES Word64
+                   -> BYTES Word64
+                   -> Word64
+                   -> Word64
+                   -> Ptr Blake2b
+                   -> IO ()
+
+--
+processBlocks :: BufferPtr
+              -> BlockCount Blake2b
+              -> Blake2bMem
+              -> IO ()
+
+processBlocks buf blks b2bmem =
+  let uPtr = uLengthCellPointer b2bmem
+      lPtr = lLengthCellPointer b2bmem
+      hshPtr = hashCell128Pointer b2bmem
+  in c_blake2b_compress buf blks uPtr lPtr hshPtr
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Blake2bMem
+            -> IO ()
+processLast buf nbytes b2bmem  = do
+  unsafeTransfer padding buf         -- pad the message
+  processBlocks buf nBlocks b2bmem   -- process all but the last block
+  --
+  -- Handle the last block
+  --
+  let
+      hshPtr = hashCell128Pointer b2bmem
+    in  do u <- getULength b2bmem
+           l <- getLLength b2bmem
+           c_blake2b_last lastBlockPtr remBytes u l f0 f1 hshPtr
+
+  where padding      = blake2Pad (Proxy :: Proxy Blake2b) nbytes
+        nBlocks      = atMost (transferSize padding) `mappend` toEnum (-1)
+                                           -- all but the last block
+        remBytes     = nbytes - inBytes nBlocks
+                                           -- Actual bytes in the last block.
+        lastBlockPtr = forgetAlignment buf `movePtr` nBlocks
+        --
+        -- Finalisation FLAGS
+        --
+        f0 = complement 0
+        f1 = 0
diff --git a/implementation/Blake2b/CPortable.hs b/implementation/Blake2b/CPortable.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Blake2b/CPortable.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE DataKinds                  #-}
+
+-- | The portable C-implementation of Blake2b.
+module Blake2b.CPortable where
+
+
+import Foreign.Ptr                ( castPtr      )
+
+import Raaz.Core
+import Raaz.Core.Transfer.Unsafe
+import Raaz.Core.Types.Internal
+import Raaz.Primitive.HashMemory
+import Raaz.Primitive.Blake2.Internal
+import Raaz.Verse.Blake2b.C.Portable
+
+name :: String
+name = "blake2b-libverse-c"
+
+description :: String
+description = "Blake2b Implementation in C exposed by libverse"
+
+type Prim                    = Blake2b
+type Internals               = Blake2bMem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount Blake2b
+additionalBlocks = blocksOf 1 Proxy
+
+
+processBlocks :: BufferPtr
+              -> BlockCount Blake2b
+              -> Blake2bMem
+              -> IO ()
+
+processBlocks buf blks b2bmem =
+  let uPtr   = castPtr $ uLengthCellPointer b2bmem
+      lPtr   = castPtr $ lLengthCellPointer b2bmem
+      hshPtr = castPtr $ hashCell128Pointer b2bmem
+      --
+      -- Type coersions to the appropriate type.
+      --
+      wblks  = toEnum  $ fromEnum blks
+      blkPtr = castPtr $ forgetAlignment buf
+  in verse_blake2b_c_portable_iter blkPtr wblks uPtr lPtr hshPtr
+
+
+-- | Process the last bytes. The last block of the message (whether it
+-- is padded or not) should necessarily be processed by the
+-- processLast function as one needs to set the finalisation flag for
+-- it.
+--
+-- Let us consider two cases.
+--
+-- 1. The message is empty. In which case the padding is 1-block
+--    size. This needs to be processed as the last block
+--
+-- 2. If the message is non-empty then the padded message is the least
+--    multiple @n@ of block size that is greater than or equal to the
+--    input and hence is at least 1 block in size. Therefore, we
+--    should be compressing a total @n-1@ blocks using the block
+--    compression function at the last block using the finalisation
+--    flags.
+--
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Blake2bMem
+            -> IO ()
+processLast buf nbytes b2bmem = do
+  unsafeTransfer padding $ forgetAlignment buf  -- pad the message
+  processBlocks buf nBlocks b2bmem              -- process all but the last block
+  --
+  -- Handle the last block
+  --
+  BYTES u  <- getULength b2bmem
+  BYTES l  <- getLLength b2bmem
+  let hshPtr = castPtr $ hashCell128Pointer b2bmem
+    in verse_blake2b_c_portable_last lastBlockPtr remBytes u l f0 f1 hshPtr
+
+  where padding      = blake2Pad (Proxy :: Proxy Blake2b) nbytes
+        nBlocks      = atMost (transferSize padding) `mappend` toEnum (-1)
+                                           -- all but the last block
+        remBytes     = toEnum $ fromEnum $ nbytes - inBytes nBlocks
+                                           -- Actual bytes in the last block.
+        lastBlockPtr = castPtr (forgetAlignment buf `movePtr` nBlocks)
+        --
+        -- Finalisation FLAGS
+        --
+        f0 = complement 0
+        f1 = 0
diff --git a/implementation/Blake2s/CHandWritten.hs b/implementation/Blake2s/CHandWritten.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Blake2s/CHandWritten.hs
@@ -0,0 +1,85 @@
+{-# LANGUAGE ForeignFunctionInterface   #-}
+{-# LANGUAGE DataKinds                  #-}
+
+
+-- | The portable C-implementation of Blake2s.
+module Blake2s.CHandWritten where
+
+import Raaz.Core
+import Raaz.Core.Transfer.Unsafe
+import Raaz.Core.Types.Internal
+import Raaz.Primitive.HashMemory
+import Raaz.Primitive.Blake2.Internal
+
+
+name :: String
+name = "blake2s-c-handwritten"
+
+description :: String
+description = "Hand written Blake2s Implementation using portable C and Haskell FFI"
+
+type Prim                    = Blake2s
+type Internals               = Blake2sMem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount Prim
+additionalBlocks = blocksOf 1 Proxy
+
+------------------------- FFI For Blake2s -------------------------------------
+
+
+foreign import ccall unsafe
+  "raaz/hash/blake2/common.h raazHashBlake2sPortableBlockCompress"
+  c_blake2s_compress  :: BufferPtr
+                      -> BlockCount Blake2s
+                      -> BYTES Word64
+                      -> Ptr Prim
+                      -> IO ()
+
+foreign import ccall unsafe
+  "raaz/hash/blake2/common.h raazHashBlake2sPortableLastBlock"
+  c_blake2s_last   :: BlockPtr Prim
+                   -> BYTES Int
+                   -> BYTES Word64
+                   -> Word32
+                   -> Word32
+                   -> Ptr Prim
+                   -> IO ()
+--
+processBlocks :: BufferPtr
+              -> BlockCount Prim
+              -> Internals
+              -> IO ()
+
+processBlocks buf blks b2smem =
+  let hshPtr = hashCellPointer b2smem
+  in do l      <- getLength b2smem
+        c_blake2s_compress buf blks l hshPtr
+        updateLength blks b2smem
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast buf nbytes  b2smem = do
+  unsafeTransfer padding $ forgetAlignment buf  -- pad the message
+  processBlocks buf nBlocks b2smem              -- process all but the last block
+  --
+  -- Handle the last block
+  --
+  l      <- getLength b2smem
+  c_blake2s_last lastBlockPtr remBytes l f0 f1 hshPtr
+  where hshPtr = hashCellPointer b2smem
+        padding      = blake2Pad (Proxy :: Proxy Prim) nbytes
+        nBlocks      = atMost (transferSize padding) `mappend` toEnum (-1)
+                       -- all but the last block
+        remBytes     = nbytes - inBytes nBlocks
+                       -- Actual bytes in the last block.
+        lastBlockPtr = forgetAlignment buf `movePtr` nBlocks
+        --
+        -- Finalisation FLAGS
+        --
+        f0 = complement 0
+        f1 = 0
diff --git a/implementation/ChaCha20/CHandWritten.hs b/implementation/ChaCha20/CHandWritten.hs
new file mode 100644
--- /dev/null
+++ b/implementation/ChaCha20/CHandWritten.hs
@@ -0,0 +1,72 @@
+{-# LANGUAGE ForeignFunctionInterface   #-}
+{-# LANGUAGE DataKinds                  #-}
+
+
+-- | The portable C-implementation of Blake2b.
+module ChaCha20.CHandWritten where
+
+import Raaz.Core
+import Raaz.Core.Types.Internal
+import Raaz.Primitive.ChaCha20.Internal
+
+
+name :: String
+name = "chacha20-c-handwritten"
+
+description :: String
+description = "Hand written ChaCha20 Implementation using portable C"
+
+type Prim                    = ChaCha20
+type Internals               = ChaCha20Mem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount ChaCha20
+additionalBlocks = blocksOf 1 Proxy
+
+
+------------------------ The foreign function calls  ---------------------
+
+-- | Chacha20 block transformation.
+foreign import ccall unsafe
+  "raaz/cipher/chacha20/cportable.h raazChaCha20Block"
+  c_chacha20_block :: BufferPtr -- message
+                   -> BlockCount ChaCha20                -- number of blocks
+                   -> Ptr (Key ChaCha20)             -- key
+                   -> Ptr (Nounce ChaCha20)          -- iv
+                   -> Ptr (WordType ChaCha20)
+                   -> IO ()
+
+processBlocks :: BufferPtr
+              -> BlockCount Prim
+              -> Internals
+              -> IO ()
+
+processBlocks buf blks mem =
+  let keyPtr     = keyCellPtr mem
+      ivPtr      = ivCellPtr mem
+      counterPtr = counterCellPtr mem
+  in c_chacha20_block buf blks keyPtr ivPtr counterPtr
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast buf = processBlocks buf . atLeast
+
+-- | The number of blocks of the cipher that is generated in one go
+-- encoded as a type level nat.
+type RandomBufferSize = 16
+
+
+-- | How many blocks of the primitive to generated before re-seeding.
+reseedAfter :: BlockCount Prim
+reseedAfter = blocksOf (1024 * 1024 * 1024) (Proxy :: Proxy Prim)
+
+randomBlocks :: BufferPtr
+             -> BlockCount Prim
+             -> Internals
+             -> IO ()
+
+randomBlocks  = processBlocks
diff --git a/implementation/ChaCha20/CPortable.hs b/implementation/ChaCha20/CPortable.hs
new file mode 100644
--- /dev/null
+++ b/implementation/ChaCha20/CPortable.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE DataKinds                  #-}
+
+-- | The portable C-implementation of Blake2b.
+module ChaCha20.CPortable where
+
+import           Foreign.Ptr                ( castPtr )
+import qualified Data.Vector.Unboxed as V
+
+import           Raaz.Core
+import           Raaz.Core.Types.Internal
+import           Raaz.Primitive.ChaCha20.Internal
+import           Raaz.Verse.ChaCha20.C.Portable
+
+name :: String
+name = "chacha20-libverse-c"
+
+description :: String
+description = "ChaCha20 Implementation in C exposed by libverse"
+
+type Prim                    = ChaCha20
+type Internals               = ChaCha20Mem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount ChaCha20
+additionalBlocks = blocksOf 1 Proxy
+
+processBlocks :: BufferPtr
+              -> BlockCount Prim
+              -> Internals
+              -> IO ()
+
+processBlocks = runBlockProcess verse_chacha20_c_portable
+
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast buf = processBlocks buf . atLeast
+
+
+-- | The xchacha20Setup  does the following to the internal state
+--
+-- 1. Replaces the key stored in the keyCell using the hchacah20 hashing function
+--
+-- 2. Initialises the ivcell with the last two words in the xiv value.
+--
+-- As a result the internal state is ready to start encrypting using
+-- the xchacha20 variant.
+--
+xchacha20Setup :: Nounce XChaCha20 -> Internals -> IO ()
+xchacha20Setup (XNounce tup) mem = do
+  verse_hchacha20_c_portable keyPtr h0 h1 h2 h3
+  -- In the above step, the key gets replaced by the subkey obtained
+  -- from the hchacha20 hash. We also set the ivcell appropriately
+  initialise iv $ ivCell mem
+  where keyPtr = castPtr $ keyCellPtr mem
+        [LE h0,LE h1,LE h2, LE h3, h4, h5] = V.toList $ unsafeToVector tup
+        iv  = Nounce $ unsafeFromList [0, h4, h5] :: Nounce ChaCha20
+
+
+-- | Copy the key from the memory cell chacha20Mem.
+copyKey :: Dest ChaCha20Mem -> Src (MemoryCell (Key ChaCha20)) -> IO ()
+copyKey = copyCell . fmap keyCell
+
+-------------- Helper function for running an iterator -----------
+runBlockProcess :: ( Ptr buf ->
+                     Word64  ->
+                     Ptr a   ->
+                     Ptr b   ->
+                     Ptr c   ->
+                     IO ()
+                   )
+                -> BufferPtr
+                -> BlockCount Prim
+                -> Internals
+                -> IO ()
+runBlockProcess func buf blks mem =
+  let keyPtr     = castPtr $ keyCellPtr mem
+      ivPtr      = castPtr $ ivCellPtr mem
+      counterPtr = castPtr $ counterCellPtr mem
+      blkPtr     = castPtr $ forgetAlignment buf
+      wBlks      = toEnum  $ fromEnum blks
+  in func blkPtr wBlks keyPtr ivPtr counterPtr
diff --git a/implementation/ChaCha20/Random/CPortable.hs b/implementation/ChaCha20/Random/CPortable.hs
new file mode 100644
--- /dev/null
+++ b/implementation/ChaCha20/Random/CPortable.hs
@@ -0,0 +1,35 @@
+{-# LANGUAGE DataKinds #-}
+module ChaCha20.Random.CPortable
+  ( name, description, RandomBufferSize, reseedAfter, randomBlocks
+  , module ChaCha20.CPortable
+  ) where
+
+import           Raaz.Core
+import qualified ChaCha20.CPortable as Base
+import           ChaCha20.CPortable (Prim, Internals, BufferAlignment, BufferPtr, additionalBlocks)
+import           Raaz.Verse.ChaCha20.C.Portable
+
+name :: String
+name = "chacha20-libverse-csprg"
+
+description :: String
+description = "ChaCha20 based CSPRG written in C exposed by libverse"
+
+
+-------------------- CSPRG related stuff -------------------------------
+-- | The number of blocks of the cipher that is generated in one go
+-- encoded as a type level nat.
+type RandomBufferSize = 16
+
+
+-- | How many blocks of the primitive to generated before re-seeding.
+reseedAfter :: BlockCount Prim
+reseedAfter = blocksOf (1024 * 1024 * 1024) (Proxy :: Proxy Prim)
+
+
+
+randomBlocks :: BufferPtr
+             -> BlockCount Prim
+             -> Internals
+             -> IO ()
+randomBlocks = Base.runBlockProcess verse_chacha20csprg_c_portable
diff --git a/implementation/Poly1305/CPortable.hs b/implementation/Poly1305/CPortable.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Poly1305/CPortable.hs
@@ -0,0 +1,109 @@
+{-# LANGUAGE DataKinds                  #-}
+
+-- | The portable C-implementation of Poly1305.
+module Poly1305.CPortable
+       ( name, description
+       , Prim, Internals, BufferAlignment
+       , BufferPtr
+       , additionalBlocks
+       , processBlocks
+       , processLast
+       , Key(..)
+       ) where
+
+import Raaz.Core
+import Raaz.Core.Transfer.Unsafe
+import Raaz.Primitive.Poly1305.Internal
+import Poly1305.Memory
+
+import Raaz.Verse.Poly1305.C.Portable
+
+name :: String
+name = "poly1305-libverse-c"
+
+description :: String
+description = "Poly1305 Implementation in C exposed by libverse"
+
+type Prim                    = Poly1305
+type Internals               = Mem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount Poly1305
+additionalBlocks = blocksOf 1 Proxy
+
+
+-- | Incrementally process poly1305 blocks.
+processBlocks :: BufferPtr
+              -> BlockCount Poly1305
+              -> Internals
+              -> IO ()
+processBlocks buf blks = withAccumR $ runWithBlocks verse_poly1305_c_portable_incremental buf blks
+
+-- | Process a message that is exactly a multiple of the blocks.
+blocksMac :: BufferPtr
+          -> BlockCount Poly1305
+          -> Internals
+          -> IO ()
+blocksMac buf blks = withAccumRS $ runWithBlocks verse_poly1305_c_portable_blockmac buf blks
+
+-- | Run an IO action with the pointers to the element, r and s cells.
+withAccumRS :: ( Ptr Element ->
+                 Ptr (Tuple 2 Word64) ->
+                 Ptr (Tuple 2 Word64) ->
+                 a
+               )
+            -> Internals
+            -> a
+withAccumRS func mem = withAccumR func mem $ sKeyPtr mem
+
+withAccumR :: ( Ptr Element ->
+                Ptr (Tuple 2 Word64) ->
+                a
+              )
+           -> Internals
+           -> a
+withAccumR func mem = func (accumPtr mem) $ rKeyPtr mem
+
+runWithBlocks :: ( Ptr a ->
+                   Word64 ->
+                   b
+                 )
+              -> BufferPtr
+              -> BlockCount Poly1305
+              -> b
+runWithBlocks func buf = unsafeWithPointerCast func buf . toEnum . fromEnum
+
+-- | Process a message that has its last block incomplete. The total
+-- blocks argument here is the greatest multiple of the block that is
+-- less that the message length.
+partialBlockMac :: BufferPtr
+                -> BlockCount Poly1305
+                -> Internals
+                -> IO ()
+partialBlockMac buf blks mem = do
+  processBlocks buf blks mem
+  withAccumRS (unsafeWithPointerCast partialMac buf) mem
+  where partialMac bufPtr = verse_poly1305_c_portable_partialmac (bufPtr `movePtr` blks)
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast buf nBytes mem
+  | blksC == blksF = blocksMac buf blksC mem
+  | otherwise      = do
+      unsafeTransfer pad (forgetAlignment buf)
+      partialBlockMac buf blksF mem
+  where blksC = atLeast nBytes :: BlockCount Poly1305
+        blksF = atMost  nBytes :: BlockCount Poly1305
+        pad   = padding nBytes
+
+-- | Poly1305 padding. Call this padding function if and only if the
+-- message is not a multiple of the block length.
+padding :: BYTES Int    -- Data in buffer.
+        -> WriteTo
+padding mLen = padWrite 0 boundary $ skip mLen `mappend` one
+  where one         = writeStorable (1::Word8)
+        boundary    = blocksOf 1 (Proxy :: Proxy Poly1305)
diff --git a/implementation/Poly1305/Memory.hs b/implementation/Poly1305/Memory.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Poly1305/Memory.hs
@@ -0,0 +1,91 @@
+{-# LANGUAGE DataKinds                  #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE FlexibleInstances          #-}
+-- | This module implements memory elements used for Poly1305
+-- implementations.
+module Poly1305.Memory
+       ( Mem(..)
+       , Element
+       , elementToInteger
+       , rKeyPtr
+       , sKeyPtr
+       , accumPtr
+       ) where
+
+import qualified Data.Vector.Unboxed as V
+import           Foreign.Ptr                        ( castPtr )
+import           Raaz.Core
+import qualified Raaz.Core.Types.Internal        as TI
+import           Raaz.Primitive.Poly1305.Internal
+
+import           Raaz.Verse.Poly1305.C.Portable (verse_poly1305_c_portable_clamp)
+
+-- | An element in the finite field GF(2¹³⁰ - 5) requires 130 bits
+-- which is stored as three 64-bit word where the last word has only
+-- 2-bits.
+type Element = Tuple 3 Word64
+
+
+-- | Convert the element to an integer.
+elementToInteger :: Element -> Integer
+elementToInteger = V.foldr fld 0 . unsafeToVector
+  where fld :: Word64 -> Integer -> Integer
+        fld w i = toInteger w + i `shiftL` 32
+
+
+-- | The memory associated with Poly1305 stores the
+data Mem = Mem { accCell :: MemoryCell Element
+               , rCell   :: MemoryCell R
+               , sCell   :: MemoryCell S
+               }
+
+-- | Clearing the accumulator.
+clearAcc :: Mem -> IO ()
+clearAcc = initialise zero . accCell
+  where zero :: Element
+        zero = unsafeFromList [0,0,0]
+
+instance Memory Mem where
+  memoryAlloc     = Mem <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . accCell
+
+
+-- | Get the pointer to the array holding the key fragment r.
+rKeyPtr  :: Mem  -> Ptr (Tuple 2 Word64)
+rKeyPtr  = castPtr . unsafeGetCellPointer . rCell
+
+-- | Get the pointer to the array holding the key fragment s.
+sKeyPtr  :: Mem -> Ptr (Tuple 2 Word64)
+sKeyPtr  = castPtr . unsafeGetCellPointer . sCell
+
+-- | Get the pointer to the accumulator array.
+accumPtr :: Mem -> Ptr Element
+accumPtr = castPtr . unsafeGetCellPointer .  accCell
+
+-- |  The clamping function on pointer
+clampPtr :: Ptr (Tuple 2 Word64) -> IO ()
+clampPtr = flip verse_poly1305_c_portable_clamp 1
+
+-- | The clamping operation
+clamp :: Mem -> IO ()
+clamp =  clampPtr . rKeyPtr
+
+instance Initialisable Mem (Key Poly1305) where
+  initialise (Key r s) mem = do clearAcc mem
+                                initialise r $ rCell mem
+                                initialise s $ sCell mem
+                                clamp mem
+
+instance Extractable Mem Poly1305 where
+    extract = fmap toPoly1305 . extract . accCell
+      where toPoly1305 = Poly1305 . TI.map littleEndian . project
+            project :: Tuple 3 Word64 -> Tuple 2 Word64
+            project = initial
+
+instance WriteAccessible Mem where
+  writeAccess mem          = writeAccess (rCell mem) ++ writeAccess (sCell mem)
+  afterWriteAdjustment mem = do
+    clearAcc mem
+    afterWriteAdjustment $ rCell mem
+    afterWriteAdjustment $ sCell mem
+    clamp mem
diff --git a/implementation/Sha256/CHandWritten.hs b/implementation/Sha256/CHandWritten.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Sha256/CHandWritten.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE ForeignFunctionInterface   #-}
+{-# LANGUAGE DataKinds                  #-}
+
+-- | The portable C-implementation of Sha256.
+module Sha256.CHandWritten
+       ( name, description
+       , Prim, Internals, BufferAlignment
+       , BufferPtr
+       , additionalBlocks
+       , processBlocks
+       , processLast
+       ) where
+
+import Raaz.Core
+import Raaz.Core.Types.Internal
+import Raaz.Primitive.HashMemory
+import Raaz.Primitive.Sha2.Internal (Sha256, Sha256Mem, process256Last)
+
+name :: String
+name = "sha256-c-handwritten"
+
+description :: String
+description = "Hand written Sha256 Implementation using portable C and Haskell FFI"
+
+type Prim                    = Sha256
+type Internals               = Sha256Mem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount Sha256
+additionalBlocks = blocksOf 1 Proxy
+
+------------------------ The foreign function calls  ---------------------
+
+foreign import ccall unsafe
+  "raaz/hash/sha256/portable.h raazHashSha256PortableCompress"
+   c_sha256_compress  :: BufferPtr
+                      -> BlockCount Sha256
+                      -> Ptr Sha256
+                      -> IO ()
+
+
+compressBlocks :: BufferPtr
+               -> BlockCount Sha256
+               -> Internals
+               -> IO ()
+compressBlocks buf blks = c_sha256_compress buf blks . hashCellPointer
+
+
+processBlocks :: BufferPtr
+              -> BlockCount Sha256
+              -> Internals
+              -> IO ()
+processBlocks buf blks mem = compressBlocks buf blks mem >> updateLength blks mem
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast = process256Last processBlocks
diff --git a/implementation/Sha256/CPortable.hs b/implementation/Sha256/CPortable.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Sha256/CPortable.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE DataKinds                  #-}
+
+-- | The portable C-implementation of Sha256.
+module Sha256.CPortable
+       ( name, description
+       , Prim, Internals, BufferAlignment
+       , BufferPtr
+       , additionalBlocks
+       , processBlocks
+       , processLast
+       ) where
+
+import Foreign.Ptr                ( castPtr      )
+
+import Raaz.Core
+import Raaz.Primitive.HashMemory
+import Raaz.Primitive.Sha2.Internal (Sha256, Sha256Mem, process256Last)
+
+import Raaz.Verse.Sha256.C.Portable
+
+name :: String
+name = "sha256-libverse-c"
+
+description :: String
+description = "Sha256 Implementation in C exposed by libverse"
+
+type Prim                    = Sha256
+type Internals               = Sha256Mem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount Sha256
+additionalBlocks = blocksOf 1 Proxy
+
+-- | The compression algorithm.
+compressBlocks :: BufferPtr
+               -> BlockCount Sha256
+               -> Internals
+               -> IO ()
+compressBlocks buf blks mem = let hPtr = castPtr $ hashCellPointer mem
+                                  blkPtr = castPtr $ forgetAlignment buf
+                                  wBlks  = toEnum $ fromEnum blks
+                              in verse_sha256_c_portable blkPtr wBlks hPtr
+
+
+processBlocks :: BufferPtr
+              -> BlockCount Sha256
+              -> Internals
+              -> IO ()
+processBlocks buf blks mem = compressBlocks buf blks mem >> updateLength blks mem
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast = process256Last processBlocks
diff --git a/implementation/Sha512/CHandWritten.hs b/implementation/Sha512/CHandWritten.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Sha512/CHandWritten.hs
@@ -0,0 +1,61 @@
+{-# LANGUAGE ForeignFunctionInterface   #-}
+{-# LANGUAGE DataKinds                  #-}
+
+-- | The portable C-implementation of Sha512.
+module Sha512.CHandWritten
+       ( name, description
+       , Prim, Internals, BufferAlignment
+       , BufferPtr
+       , additionalBlocks
+       , processBlocks
+       , processLast
+       ) where
+
+import Raaz.Core
+import Raaz.Core.Types.Internal
+import Raaz.Primitive.HashMemory
+import Raaz.Primitive.Sha2.Internal (Sha512, Sha512Mem, process512Last)
+
+name :: String
+name = "sha512-c-handwritten"
+
+description :: String
+description = "Hand written Sha512 Implementation using portable C and Haskell FFI"
+
+type Prim                    = Sha512
+type Internals               = Sha512Mem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount Sha512
+additionalBlocks = blocksOf 1 Proxy
+
+------------------------ The foreign function calls  ---------------------
+
+foreign import ccall unsafe
+  "raaz/hash/sha512/portable.h raazHashSha512PortableCompress"
+  c_sha512_compress  :: BufferPtr
+                     -> BlockCount Sha512
+                     -> Ptr Sha512
+                     -> IO ()
+
+
+compressBlocks :: BufferPtr
+               -> BlockCount Sha512
+               -> Internals
+               -> IO ()
+compressBlocks buf blks = c_sha512_compress buf blks . hashCell128Pointer
+
+
+processBlocks :: BufferPtr
+              -> BlockCount Sha512
+              -> Internals
+              -> IO ()
+processBlocks buf blks mem = compressBlocks buf blks mem >> updateLength128 blks mem
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast = process512Last processBlocks
diff --git a/implementation/Sha512/CPortable.hs b/implementation/Sha512/CPortable.hs
new file mode 100644
--- /dev/null
+++ b/implementation/Sha512/CPortable.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE DataKinds                  #-}
+
+-- | The portable C-implementation of Sha512.
+module Sha512.CPortable
+       ( name, description
+       , Prim, Internals, BufferAlignment
+       , BufferPtr
+       , additionalBlocks
+       , processBlocks
+       , processLast
+       ) where
+
+import Foreign.Ptr                ( castPtr      )
+
+import Raaz.Core
+import Raaz.Primitive.HashMemory
+import Raaz.Primitive.Sha2.Internal (Sha512, Sha512Mem, process512Last)
+
+import Raaz.Verse.Sha512.C.Portable
+
+
+name :: String
+name = "sha512-libverse-c"
+
+description :: String
+description = "Sha512 Implementation in C exposed by libverse"
+
+type Prim                    = Sha512
+type Internals               = Sha512Mem
+type BufferAlignment         = 32
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+additionalBlocks :: BlockCount Sha512
+additionalBlocks = blocksOf 1 Proxy
+
+compressBlocks :: BufferPtr
+               -> BlockCount Sha512
+               -> Internals
+               -> IO ()
+compressBlocks buf blks mem = let hPtr = castPtr $ hashCell128Pointer mem
+                                  blkPtr = castPtr $ forgetAlignment buf
+                                  wBlks  = toEnum $ fromEnum blks
+                               in verse_sha512_c_portable blkPtr wBlks hPtr
+
+processBlocks :: BufferPtr
+              -> BlockCount Sha512
+              -> Internals
+              -> IO ()
+processBlocks buf blks mem = compressBlocks buf blks mem >> updateLength128 blks mem
+
+
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast = process512Last processBlocks
diff --git a/implementation/cbits/raaz/cipher/chacha20/cportable.c b/implementation/cbits/raaz/cipher/chacha20/cportable.c
new file mode 100644
--- /dev/null
+++ b/implementation/cbits/raaz/cipher/chacha20/cportable.c
@@ -0,0 +1,119 @@
+#include "common.h"
+
+/* The main chacha20 block transform for a complete block of data.
+ *
+ * Maximum bytes that should be encoded is 2^32 * 64 = 256GB.  The
+ * counter repeats after that.
+ *
+ */
+
+
+
+/* Warnings all macros are unprotected use with care */
+
+# define R(x,i) ((x << i) | (x >> (32 - i)))
+
+# define QROUND(a,b,c,d)			\
+    {						\
+	a += b; d ^= a; d = R(d,16);		\
+	c += d; b ^= c; b = R(b,12);		\
+	a += b; d ^= a; d = R(d,8);		\
+	c += d; b ^= c; b = R(b,7);		\
+    }						\
+
+
+
+# define ROUND			  \
+    {				  \
+	QROUND(x0, x4, x8,  x12); \
+	QROUND(x1, x5, x9,  x13); \
+	QROUND(x2, x6, x10, x14); \
+	QROUND(x3, x7, x11, x15); \
+	QROUND(x0, x5, x10, x15); \
+	QROUND(x1, x6, x11, x12); \
+	QROUND(x2, x7, x8,  x13); \
+	QROUND(x3, x4, x9,  x14); \
+    }
+
+
+# define XOR(i,a)    (*msg)[i] ^= raaz_tole32(a)
+# define EMIT(i,a)   (*msg)[i]  = a
+
+/*
+
+Some function for debugging.
+
+# define PR(i)        printf("%8x  ", x##i)
+# define PRM(i)       printf("%8x  ", (*msg)[i])
+# define NEWLINE      printf("\n")
+# define PRINTSTATE				\
+    {						\
+    PR(0); PR(1);   PR(2);    PR(3); NEWLINE;	\
+    PR(4); PR(5);   PR(6);    PR(7); NEWLINE;	\
+    PR(8); PR(9);   PR(10);   PR(11); NEWLINE;	\
+    PR(12); PR(13); PR(14); PR(15); NEWLINE;	\
+    }
+
+# define PRINTMESG				\
+    {						\
+    PRM(0); PRM(1);   PRM(2);    PRM(3); NEWLINE;	\
+    PRM(4); PRM(5);   PRM(6);    PRM(7); NEWLINE;	\
+    PRM(8); PRM(9);   PRM(10);   PRM(11); NEWLINE;	\
+    PRM(12); PRM(13); PRM(14); PRM(15); NEWLINE;	\
+    }
+
+*/
+
+
+
+# pragma GCC optimize "tree-vectorize"
+
+void raazChaCha20Block(Block * msg, int nblocks, const Key key, const IV iv, Counter  *ctr)
+{
+    register Word x0,  x1,  x2, x3;
+    register Word x4,  x5,  x6, x7;
+    register Word x8,  x9,  x10, x11;
+    register Word x12, x13, x14, x15;
+    register Word valCtr; /* value of the ctr */
+
+    valCtr = *ctr;
+    while( nblocks > 0){
+
+
+	x0  = C0     ; x1  = C1     ; x2  = C2     ; x3  = C3     ;
+	x4  = key[0] ; x5  = key[1] ; x6  = key[2] ; x7  = key[3] ;
+	x8  = key[4] ; x9  = key[5] ; x10 = key[6] ; x11 = key[7] ;
+	x12 = valCtr ; x13 = iv[0]  ; x14 = iv[1]  ; x15 = iv[2]  ;
+
+
+	ROUND; /* 0,1   */
+	ROUND; /* 2,3   */
+	ROUND; /* 4,5   */
+	ROUND; /* 6,7   */
+	ROUND; /* 8,9   */
+	ROUND; /* 10,11 */
+	ROUND; /* 12,13 */
+	ROUND; /* 14,15 */
+	ROUND; /* 16,17 */
+	ROUND; /* 18,19 */
+
+
+
+	x0  += C0     ; x1  += C1     ; x2  += C2     ; x3  += C3     ;
+	x4  += key[0] ; x5  += key[1] ; x6  += key[2] ; x7  += key[3] ;
+	x8  += key[4] ; x9  += key[5] ; x10 += key[6] ; x11 += key[7] ;
+	x12 += valCtr ; x13 += iv[0]  ; x14 += iv[1]  ; x15 += iv[2]  ;
+
+
+	XOR(0,x0)   ; XOR(1, x1) ; XOR(2, x2)   ; XOR(3,  x3)  ;
+	XOR(4,x4)   ; XOR(5, x5) ; XOR(6, x6)   ; XOR(7,  x7)  ;
+	XOR(8,x8)   ; XOR(9, x9) ; XOR(10, x10) ; XOR(11, x11) ;
+	XOR(12,x12) ; XOR(13,x13); XOR(14, x14) ; XOR(15, x15) ;
+
+
+	++ valCtr;
+	--nblocks; ++msg; /* move to the next block */
+    }
+    *ctr = valCtr;         /* increment counter      */
+    return;
+}
diff --git a/implementation/cbits/raaz/hash/blake2/blake2b/portable.c b/implementation/cbits/raaz/hash/blake2/blake2b/portable.c
new file mode 100644
--- /dev/null
+++ b/implementation/cbits/raaz/hash/blake2/blake2b/portable.c
@@ -0,0 +1,290 @@
+#include <raaz/hash/blake2/common.h>
+#include <raaz/hash/blake2/blake2b/constants.h>
+
+static inline Word2b R(Word2b x, int i)
+{
+    return (x << (64 - i)) | (x >> i);
+}
+
+
+
+
+
+# define G(a,b,c,d,m0,m1)		      \
+    {					      \
+	a += b + m0  ; d ^= a; d = R(d,32);   \
+	c += d       ; b ^= c; b = R(b,24);   \
+	a += b + m1  ; d ^= a; d = R(d,16);   \
+	c += d       ; b ^= c; b = R(b,63);   \
+    }
+
+
+
+/* Definitions for Blake2b */
+
+# define G0(i,j) G(x0, x4, x8,  x12, w##i, w##j);
+# define G1(i,j) G(x1, x5, x9,  x13, w##i, w##j);
+# define G2(i,j) G(x2, x6, x10, x14, w##i, w##j);
+# define G3(i,j) G(x3, x7, x11, x15, w##i, w##j);
+
+# define G4(i,j) G(x0, x5, x10, x15, w##i, w##j);
+# define G5(i,j) G(x1, x6, x11, x12, w##i, w##j);
+# define G6(i,j) G(x2, x7, x8,  x13, w##i, w##j);
+# define G7(i,j) G(x3, x4, x9,  x14, w##i, w##j);
+
+# define ROUND(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) \
+	{							      \
+	    G0( i0,i1 ); G1( i2 ,i3  ); G2( i4 ,i5  ); G3( i6 ,i7  ); \
+	    G4( i8,i9 ); G5( i10,i11 ); G6( i12,i13 ); G7( i14,i15 ); \
+	}
+
+
+/*
+
+This is the block compression algorithm for blake2b. Besides teh usual
+suspects there are the following additional parameters.
+
+1. upper  -- The upper 64 bits of the counter
+2. lower  -- The lower 64 bits of the counter
+3. f0, f1 -- the finalisation flag
+
+*/
+
+
+#define LOAD(i) (raaz_tole64((*mesg)[(i)]))
+
+# pragma GCC optimize "tree-vectorize"
+
+void raazHashBlake2bPortableBlockCompress( Block2b *mesg, int nblocks,
+					   Word2b *Upper, Word2b *Lower,
+					   Blake2b h)
+{
+    register Word2b x0,  x1,  x2,  x3;  /* row 0  */
+    register Word2b x4,  x5,  x6,  x7;  /* row 1  */
+    register Word2b x8,  x9,  x10, x11;  /* row 2  */
+    register Word2b x12, x13, x14, x15;  /* row 3  */
+
+    /* Input block */
+    register Word2b w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
+
+    /* Variable that contains the hash */
+    Word2b  h0, h1, h2, h3, h4, h5, h6, h7;
+
+
+    register Word2b upper, lower;
+    upper = *Upper;
+    lower = *Lower;
+
+    /* Initialisation hash */
+    h0 = h[0];
+    h1 = h[1];
+    h2 = h[2];
+    h3 = h[3];
+    h4 = h[4];
+    h5 = h[5];
+    h6 = h[6];
+    h7 = h[7];
+
+    while( nblocks > 0)
+    {
+
+	/* Initialisation hashes
+
+
+	   Normally, we would like to put the length increment at the
+	   end of the body; somewhere close to the place where we move
+	   to the next block. However, when hashing the i-th block of
+	   input, we need to set upto the initial value with the total
+	   size of data including the i-th block. So we start with an
+	   increment the length counter.
+
+	*/
+
+
+	if (lower > UINT64_MAX - sizeof(Block2b)) { ++upper; } /* Increment the counter */
+	lower += sizeof(Block2b);
+
+
+	x0 = h0;
+	x1 = h1;
+	x2 = h2;
+	x3 = h3;
+	x4 = h4;
+	x5 = h5;
+	x6 = h6;
+	x7 = h7;
+
+	/* Initialisation iv  */
+
+	x8  = iv2b0;
+	x9  = iv2b1;
+	x10 = iv2b2;
+	x11 = iv2b3;
+	x12 = iv2b4 ^ lower;
+	x13 = iv2b5 ^ upper;
+	x14 = iv2b6;
+	x15 = iv2b7;
+
+	/* Load the block */
+
+	w0  = LOAD(0);
+	w1  = LOAD(1);
+	w2  = LOAD(2);
+	w3  = LOAD(3);
+	w4  = LOAD(4);
+	w5  = LOAD(5);
+	w6  = LOAD(6);
+	w7  = LOAD(7);
+	w8  = LOAD(8);
+	w9  = LOAD(9);
+	w10 = LOAD(10);
+	w11 = LOAD(11);
+	w12 = LOAD(12);
+	w13 = LOAD(13);
+	w14 = LOAD(14);
+	w15 = LOAD(15);
+
+
+	ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 0 */
+	ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 1 */
+	ROUND( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4); /* 2 */
+	ROUND(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8); /* 3 */
+	ROUND(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13); /* 4 */
+	ROUND(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9); /* 5 */
+	ROUND( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11); /* 6 */
+	ROUND( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10); /* 7 */
+	ROUND(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5); /* 8 */
+	ROUND( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0); /* 9 */
+
+
+	ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 10 */
+	ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 11 */
+
+	/* Update the hash */
+
+	h0 ^= x0 ^ x8;
+	h1 ^= x1 ^ x9;
+	h2 ^= x2 ^ x10;
+	h3 ^= x3 ^ x11;
+	h4 ^= x4 ^ x12;
+	h5 ^= x5 ^ x13;
+	h6 ^= x6 ^ x14;
+	h7 ^= x7 ^ x15;
+
+	/* Move to the next block */
+	--nblocks; ++mesg;
+
+    }
+
+    h[0] = h0;
+    h[1] = h1;
+    h[2] = h2;
+    h[3] = h3;
+    h[4] = h4;
+    h[5] = h5;
+    h[6] = h6;
+    h[7] = h7;
+    *Upper = upper;
+    *Lower = lower;
+}
+
+/* This is the function for compressing the last block. The nbytes should be <= block size */
+
+#undef  LOAD
+#define LOAD(i) (raaz_tole64(mesg[(i)]))
+void raazHashBlake2bPortableLastBlock( Block2b mesg, int nbytes,
+				       Word2b upper, Word2b lower,
+				       Word2b f0 , Word2b f1,
+				       Blake2b h)
+{
+
+    register Word2b x0,  x1,  x2,  x3;  /* row 0  */
+    register Word2b x4,  x5,  x6,  x7;  /* row 1  */
+    register Word2b x8,  x9,  x10, x11;  /* row 2  */
+    register Word2b x12, x13, x14, x15;  /* row 3  */
+
+    /* Input block */
+    register Word2b w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
+
+    /* Variable that contains the hash */
+    Word2b  h0, h1, h2, h3, h4, h5, h6, h7;
+
+    /* Initialisation hashes
+
+       The increment is here for the same reason as in the block
+       compression function.
+
+    */
+
+
+    if (lower > UINT64_MAX - ((Word2b)nbytes)) { ++upper; } /* Increment the counter */
+    lower += nbytes;
+
+
+    x0 = h[0];
+    x1 = h[1];
+    x2 = h[2];
+    x3 = h[3];
+    x4 = h[4];
+    x5 = h[5];
+    x6 = h[6];
+    x7 = h[7];
+
+    /* Initialisation iv  */
+
+    x8  = iv2b0;
+    x9  = iv2b1;
+    x10 = iv2b2;
+    x11 = iv2b3;
+    x12 = iv2b4 ^ lower;
+    x13 = iv2b5 ^ upper;
+    x14 = iv2b6 ^ f0;
+    x15 = iv2b7 ^ f1;
+
+    /* Load the block */
+
+    w0  = LOAD(0);
+    w1  = LOAD(1);
+    w2  = LOAD(2);
+    w3  = LOAD(3);
+    w4  = LOAD(4);
+    w5  = LOAD(5);
+    w6  = LOAD(6);
+    w7  = LOAD(7);
+    w8  = LOAD(8);
+    w9  = LOAD(9);
+    w10 = LOAD(10);
+    w11 = LOAD(11);
+    w12 = LOAD(12);
+    w13 = LOAD(13);
+    w14 = LOAD(14);
+    w15 = LOAD(15);
+
+
+    ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 0 */
+    ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 1 */
+    ROUND( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4); /* 2 */
+    ROUND(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8); /* 3 */
+    ROUND(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13); /* 4 */
+    ROUND(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9); /* 5 */
+    ROUND( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11); /* 6 */
+    ROUND( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10); /* 7 */
+    ROUND(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5); /* 8 */
+    ROUND( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0); /* 9 */
+
+
+    ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 10 */
+    ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 11 */
+
+    /* Update the hash */
+
+    h[0] ^= x0 ^ x8;
+    h[1] ^= x1 ^ x9;
+    h[2] ^= x2 ^ x10;
+    h[3] ^= x3 ^ x11;
+    h[4] ^= x4 ^ x12;
+    h[5] ^= x5 ^ x13;
+    h[6] ^= x6 ^ x14;
+    h[7] ^= x7 ^ x15;
+
+}
diff --git a/implementation/cbits/raaz/hash/blake2/blake2s/portable.c b/implementation/cbits/raaz/hash/blake2/blake2s/portable.c
new file mode 100644
--- /dev/null
+++ b/implementation/cbits/raaz/hash/blake2/blake2s/portable.c
@@ -0,0 +1,284 @@
+#include <raaz/hash/blake2/common.h>
+#include <raaz/hash/blake2/blake2s/constants.h>
+
+
+static inline Word2s R(Word2s x, int i)
+{
+    return (x << (32 - i)) | (x >> i);
+}
+
+static inline Word2s  low32(Word2b x)
+{
+    return ((Word2s) x);
+}
+
+
+static inline Word2s  high32(Word2b x)
+{
+    return ((Word2s) (x >> 32));
+}
+
+# define G(a,b,c,d,m0,m1)		      \
+    {					      \
+	a += b + m0 ; d ^= a; d = R(d,16);    \
+	c += d      ; b ^= c; b = R(b,12);    \
+	a += b + m1 ; d ^= a; d = R(d,8);     \
+	c += d      ; b ^= c; b = R(b,7);     \
+    }
+
+
+/* Definitions for Blake2b */
+
+# define G0(i,j) G(x0, x4, x8,  x12, w##i, w##j);
+# define G1(i,j) G(x1, x5, x9,  x13, w##i, w##j);
+# define G2(i,j) G(x2, x6, x10, x14, w##i, w##j);
+# define G3(i,j) G(x3, x7, x11, x15, w##i, w##j);
+
+# define G4(i,j) G(x0, x5, x10, x15, w##i, w##j);
+# define G5(i,j) G(x1, x6, x11, x12, w##i, w##j);
+# define G6(i,j) G(x2, x7, x8,  x13, w##i, w##j);
+# define G7(i,j) G(x3, x4, x9,  x14, w##i, w##j);
+
+# define ROUND(i0,i1,i2,i3,i4,i5,i6,i7,i8,i9,i10,i11,i12,i13,i14,i15) \
+    {								      \
+	G0( i0,i1 ); G1( i2 ,i3  ); G2( i4 ,i5  ); G3( i6 ,i7  );     \
+	G4( i8,i9 ); G5( i10,i11 ); G6( i12,i13 ); G7( i14,i15 );     \
+    }
+
+
+/*
+
+This is the block compression algorithm for blake2b. Besides teh usual
+suspects there are the following additional parameters.
+
+1. upper  -- The upper 64 bits of the counter
+2. lower  -- The lower 64 bits of the counter
+3. f0, f1 -- the finalisation flag
+
+*/
+
+
+#define LOAD(i) (raaz_tole32((*mesg)[(i)]))
+
+# pragma GCC optimize "tree-vectorize"
+
+void raazHashBlake2sPortableBlockCompress( Block2s *mesg, int nblocks, Word2b length, Blake2s h)
+{
+    register Word2s x0,  x1,  x2,  x3;   /* row 0  */
+    register Word2s x4,  x5,  x6,  x7;   /* row 1  */
+    register Word2s x8,  x9,  x10, x11;  /* row 2  */
+    register Word2s x12, x13, x14, x15;  /* row 3  */
+
+    /* Input block */
+    register Word2s w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
+
+    /* Variable that contains the hash */
+    Word2s  h0, h1, h2, h3, h4, h5, h6, h7;
+
+    /* Initialisation hash */
+    h0 = h[0];
+    h1 = h[1];
+    h2 = h[2];
+    h3 = h[3];
+    h4 = h[4];
+    h5 = h[5];
+    h6 = h[6];
+    h7 = h[7];
+
+    while( nblocks > 0)
+    {
+
+	/* Initialisation hashes
+
+
+	   Normally, we would like to put the length increment at the
+	   end of the body; somewhere close to the place where we move
+	   to the next block. However, when hashing the i-th block of
+	   input, we need to set upto the initial value with the total
+	   size of data including the i-th block. So we start with an
+	   increment the length counter.
+
+	*/
+
+	length += sizeof(Block2s);
+
+
+
+	x0 = h0;
+	x1 = h1;
+	x2 = h2;
+	x3 = h3;
+	x4 = h4;
+	x5 = h5;
+	x6 = h6;
+	x7 = h7;
+
+	/* Initialisation iv  */
+
+	x8  = iv2s0;
+	x9  = iv2s1;
+	x10 = iv2s2;
+	x11 = iv2s3;
+	x12 = iv2s4 ^ low32(length);
+	x13 = iv2s5 ^ high32(length);
+	x14 = iv2s6;
+	x15 = iv2s7;
+
+	/* Load the block */
+
+	w0  = LOAD(0);
+	w1  = LOAD(1);
+	w2  = LOAD(2);
+	w3  = LOAD(3);
+	w4  = LOAD(4);
+	w5  = LOAD(5);
+	w6  = LOAD(6);
+	w7  = LOAD(7);
+	w8  = LOAD(8);
+	w9  = LOAD(9);
+	w10 = LOAD(10);
+	w11 = LOAD(11);
+	w12 = LOAD(12);
+	w13 = LOAD(13);
+	w14 = LOAD(14);
+	w15 = LOAD(15);
+
+
+	ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 0 */
+	ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 1 */
+	ROUND( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4); /* 2 */
+	ROUND(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8); /* 3 */
+	ROUND(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13); /* 4 */
+	ROUND(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9); /* 5 */
+	ROUND( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11); /* 6 */
+	ROUND( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10); /* 7 */
+	ROUND(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5); /* 8 */
+	ROUND( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0); /* 9 */
+
+
+	/* Update the hash */
+
+	h0 ^= x0 ^ x8;
+	h1 ^= x1 ^ x9;
+	h2 ^= x2 ^ x10;
+	h3 ^= x3 ^ x11;
+	h4 ^= x4 ^ x12;
+	h5 ^= x5 ^ x13;
+	h6 ^= x6 ^ x14;
+	h7 ^= x7 ^ x15;
+
+	/* Move to the next block */
+	--nblocks; ++mesg;
+
+    }
+
+    h[0] = h0;
+    h[1] = h1;
+    h[2] = h2;
+    h[3] = h3;
+    h[4] = h4;
+    h[5] = h5;
+    h[6] = h6;
+    h[7] = h7;
+
+}
+
+
+/* This is the function for compressing the last block. The nbytes should be <= block size */
+
+#undef LOAD
+#define LOAD(i) (raaz_tole32(mesg[(i)]))
+
+void raazHashBlake2sPortableLastBlock( Block2s mesg, int nbytes,
+				       Word2b length,
+				       Word2s f0 , Word2s f1,
+				       Blake2s h)
+{
+
+    register Word2s x0,  x1,  x2,  x3;  /* row 0  */
+    register Word2s x4,  x5,  x6,  x7;  /* row 1  */
+    register Word2s x8,  x9,  x10, x11;  /* row 2  */
+    register Word2s x12, x13, x14, x15;  /* row 3  */
+
+    /* Input block */
+    register Word2s w0, w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15;
+
+    /* Variable that contains the hash */
+    Word2s  h0, h1, h2, h3, h4, h5, h6, h7;
+
+    /* Initialisation hashes
+
+       The increment is here for the same reason as in the block
+       compression function.
+
+    */
+
+
+    length += nbytes;
+
+
+    x0 = h[0];
+    x1 = h[1];
+    x2 = h[2];
+    x3 = h[3];
+    x4 = h[4];
+    x5 = h[5];
+    x6 = h[6];
+    x7 = h[7];
+
+    /* Initialisation iv  */
+
+    x8  = iv2s0;
+    x9  = iv2s1;
+    x10 = iv2s2;
+    x11 = iv2s3;
+    x12 = iv2s4 ^ low32(length);
+    x13 = iv2s5 ^ high32(length);
+    x14 = iv2s6 ^ f0;
+    x15 = iv2s7 ^ f1;
+
+    /* Load the block */
+
+    w0  = LOAD(0);
+    w1  = LOAD(1);
+    w2  = LOAD(2);
+    w3  = LOAD(3);
+    w4  = LOAD(4);
+    w5  = LOAD(5);
+    w6  = LOAD(6);
+    w7  = LOAD(7);
+    w8  = LOAD(8);
+    w9  = LOAD(9);
+    w10 = LOAD(10);
+    w11 = LOAD(11);
+    w12 = LOAD(12);
+    w13 = LOAD(13);
+    w14 = LOAD(14);
+    w15 = LOAD(15);
+
+
+    ROUND(  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15); /* 0 */
+    ROUND( 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3); /* 1 */
+    ROUND( 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4); /* 2 */
+    ROUND(  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8); /* 3 */
+    ROUND(  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13); /* 4 */
+    ROUND(  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9); /* 5 */
+    ROUND( 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11); /* 6 */
+    ROUND( 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10); /* 7 */
+    ROUND(  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5); /* 8 */
+    ROUND( 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0); /* 9 */
+
+
+
+    /* Update the hash */
+
+    h[0] ^= x0 ^ x8;
+    h[1] ^= x1 ^ x9;
+    h[2] ^= x2 ^ x10;
+    h[3] ^= x3 ^ x11;
+    h[4] ^= x4 ^ x12;
+    h[5] ^= x5 ^ x13;
+    h[6] ^= x6 ^ x14;
+    h[7] ^= x7 ^ x15;
+
+}
diff --git a/implementation/cbits/raaz/hash/sha1/portable.c b/implementation/cbits/raaz/hash/sha1/portable.c
new file mode 100644
--- /dev/null
+++ b/implementation/cbits/raaz/hash/sha1/portable.c
@@ -0,0 +1,336 @@
+/*
+
+Portable C implementation of SHA1 hashing. The implementation is part
+of the raaz cryptographic network library and is not meant to be used
+as a standalone sha1 function.
+
+Copyright (c) 2012, Piyush P Kurur
+
+All rights reserved.
+
+This software is distributed under the terms and conditions of the
+BSD3 license. See the accompanying file LICENSE for exact terms and
+condition.
+
+*/
+
+#include <raaz/core/endian.h>
+#include <stdint.h>
+
+typedef uint32_t   Word;  /* basic unit of sha1 hash    */
+#define HASH_SIZE  5      /* Number of words in a Hash  */
+#define BLOCK_SIZE 16     /* Number of words in a block */
+
+
+typedef Word Hash [ HASH_SIZE  ];
+typedef Word Block[ BLOCK_SIZE ];
+
+void raazHashSha1PortableCompress(Block *mesg, int nblocks, Hash hash);
+
+/* WARNING: Macro variables not protected use only simple
+ * expressions.
+ *
+ * Notes to Developers: Lot of the code is just repetative loop
+ * unrollings.  The comment after these blocks contain elisp macros
+ * that generate them (with some tweaks). Preserve these of ease of
+ * updating the code.
+ *
+*/
+
+#define RotateL(x,n)  ((x << n)  | (x >> (32 - (n))))
+#define RotL30(x)    ((x << 30) | (x >> 2))
+#define RotL1(x)     ((x << 1)  | (x >> 31))
+#define RotL5(x)     ((x << 5)  | (x >> 27))
+
+/* The round constants */
+#define K0  0x5a827999
+#define K20 0x6ed9eba1
+#define K40 0x8f1bbcdc
+#define K60 0xca62c1d6
+
+/* The round functions */
+#define F0(x,y,z)  CH(x,y,z)
+#define F20(x,y,z) PARITY(x,y,z)
+#define F40(x,y,z) MAJ(x,y,z)
+#define F60(x,y,z) PARITY(x,y,z)
+
+#define CH(x,y,z)     ((x & y) ^ (~x & z))
+#define PARITY(x,y,z) (x^y^z)
+#define MAJ(x,y,z)    ((x & (y | z)) | (y & z))
+
+/* One step in the hash function
+
+   a'  = (rotateL a 5 + (f t) b c d + e + k t + w0)
+   b'  = a
+   c'  = rotateL b 30
+   d'  = c
+   e'  = d
+
+Notice the values of a,c,d are carried over but b and e gets updated.
+
+*/
+
+
+#define Step(a,b,c,d,e,w)                       \
+    {                                           \
+        e += RotL5(a) + F(b,c,d) + K + w;       \
+        b =  RotL30(b);                         \
+    }                                           \
+
+/* Message scheduling is done as
+
+   w16 = rotateL (w13 `xor` w8 `xor` w2 `xor` w0) 1
+
+*/
+
+/* Message scheduling */
+#define SCHEDULE                                        \
+    {                                                   \
+        w0 ^= w13 ^ w8 ^ w2; w0  = RotL1(w0);           \
+        w1 ^= w14 ^ w9 ^ w3; w1  = RotL1(w1);           \
+        w2 ^= w15 ^ w10 ^ w4; w2  = RotL1(w2);          \
+        w3 ^= w0 ^ w11 ^ w5; w3  = RotL1(w3);           \
+        w4 ^= w1 ^ w12 ^ w6; w4  = RotL1(w4);           \
+        w5 ^= w2 ^ w13 ^ w7; w5  = RotL1(w5);           \
+        w6 ^= w3 ^ w14 ^ w8; w6  = RotL1(w6);           \
+        w7 ^= w4 ^ w15 ^ w9; w7  = RotL1(w7);           \
+        w8 ^= w5 ^ w0 ^ w10; w8  = RotL1(w8);           \
+        w9 ^= w6 ^ w1 ^ w11; w9  = RotL1(w9);           \
+        w10 ^= w7 ^ w2 ^ w12; w10  = RotL1(w10);        \
+        w11 ^= w8 ^ w3 ^ w13; w11  = RotL1(w11);        \
+        w12 ^= w9 ^ w4 ^ w14; w12  = RotL1(w12);        \
+        w13 ^= w10 ^ w5 ^ w15; w13  = RotL1(w13);       \
+        w14 ^= w11 ^ w6 ^ w0; w14  = RotL1(w14);        \
+        w15 ^= w12 ^ w7 ^ w1; w15  = RotL1(w15);        \
+    }
+
+/*
+  (dotimes (i 16)
+    (setq j (% (+ i 13) 16))
+    (setq k (% (+ i 8)  16))
+    (setq l (% (+ i 2)  16))
+    (insert (format "w%d ^= w%d ^ w%d ^ w%d; " i j k l))
+    (insert (format "w%d  = RotL1(w%d);\\\n" i i)))
+*/
+
+
+/*
+
+   This is the compress routine of sha1. It is safe in the sense that
+   it does not overwrite the message. However, it does overwrite the
+   hash array.
+
+*/
+
+void raazHashSha1PortableCompress(Block *mesg, int nblocks, Hash hash)
+{
+
+    register Word a,b,c,d,e; /* Stores the hash state  */
+
+    /*
+      The message variables:
+
+      (dotimes (i 16)(insert (format "Word w%d;\n" i)))
+
+      Why not an array? Memory wise these two will be more or less
+      same as local arrays will be allocated on stack. However in
+      machines with a large number of general purpose registers the
+      compiler has a chance of allocating all of them to registers
+      making them faster. It might also improve cache hits.
+
+    */
+
+    Word w0;
+    Word w1;
+    Word w2;
+    Word w3;
+    Word w4;
+    Word w5;
+    Word w6;
+    Word w7;
+    Word w8;
+    Word w9;
+    Word w10;
+    Word w11;
+    Word w12;
+    Word w13;
+    Word w14;
+    Word w15;
+
+    while (nblocks > 0)
+    {
+        /* initialisation of the hash state */
+        a = hash[0]; b = hash[1]; c = hash[2]; d = hash[3]; e = hash[4];
+
+        /* Reading in the message
+
+           (dotimes (i 16)
+             (insert (format "w%d = raazLoad32BE( (Word *) mesg, %d);\n" i i)))
+
+        */
+# define      LOAD(i) raaz_tobe32((*mesg)[i])
+        w0  = LOAD(0);
+        w1  = LOAD(1);
+        w2  = LOAD(2);
+        w3  = LOAD(3);
+        w4  = LOAD(4);
+        w5  = LOAD(5);
+        w6  = LOAD(6);
+        w7  = LOAD(7);
+        w8  = LOAD(8);
+        w9  = LOAD(9);
+        w10 = LOAD(10);
+        w11 = LOAD(11);
+        w12 = LOAD(12);
+        w13 = LOAD(13);
+        w14 = LOAD(14);
+        w15 = LOAD(15);
+
+#undef LOAD
+        /* End of reading the message */
+
+#undef K
+#undef F
+#define K K0
+#define F F0
+
+        /* 0-4 */
+        Step(a,b,c,d,e,w0 );
+        Step(e,a,b,c,d,w1 );
+        Step(d,e,a,b,c,w2 );
+        Step(c,d,e,a,b,w3 );
+        Step(b,c,d,e,a,w4 );
+
+        /* 5-9 */
+        Step(a,b,c,d,e,w5 );
+        Step(e,a,b,c,d,w6 );
+        Step(d,e,a,b,c,w7 );
+        Step(c,d,e,a,b,w8 );
+        Step(b,c,d,e,a,w9 );
+
+        /* 10-14 */
+        Step(a,b,c,d,e,w10);
+        Step(e,a,b,c,d,w11);
+        Step(d,e,a,b,c,w12);
+        Step(c,d,e,a,b,w13);
+        Step(b,c,d,e,a,w14);
+
+        /* 15-19 */
+        Step(a,b,c,d,e,w15); SCHEDULE;
+        Step(e,a,b,c,d,w0 );
+        Step(d,e,a,b,c,w1 );
+        Step(c,d,e,a,b,w2 );
+        Step(b,c,d,e,a,w3 );
+
+#undef K
+#undef F
+#define K K20
+#define F F20
+
+        /* 20-24 */
+        Step(a,b,c,d,e,w4 );
+        Step(e,a,b,c,d,w5 );
+        Step(d,e,a,b,c,w6 );
+        Step(c,d,e,a,b,w7 );
+        Step(b,c,d,e,a,w8 );
+
+        /* 25-29 */
+        Step(a,b,c,d,e,w9 );
+        Step(e,a,b,c,d,w10);
+        Step(d,e,a,b,c,w11);
+        Step(c,d,e,a,b,w12);
+        Step(b,c,d,e,a,w13);
+
+        /* 30-34 */
+        Step(a,b,c,d,e,w14);
+        Step(e,a,b,c,d,w15); SCHEDULE;
+        Step(d,e,a,b,c,w0 );
+        Step(c,d,e,a,b,w1 );
+        Step(b,c,d,e,a,w2 );
+
+        /* 35-39 */
+        Step(a,b,c,d,e,w3 );
+        Step(e,a,b,c,d,w4 );
+        Step(d,e,a,b,c,w5 );
+        Step(c,d,e,a,b,w6 );
+        Step(b,c,d,e,a,w7 );
+
+#undef K
+#undef F
+#define K K40
+#define F F40
+
+        /* 40-44 */
+
+        Step(a,b,c,d,e,w8 );
+        Step(e,a,b,c,d,w9 );
+        Step(d,e,a,b,c,w10);
+        Step(c,d,e,a,b,w11);
+        Step(b,c,d,e,a,w12);
+
+        /* 45-49 */
+        Step(a,b,c,d,e,w13);
+        Step(e,a,b,c,d,w14);
+        Step(d,e,a,b,c,w15); SCHEDULE;
+        Step(c,d,e,a,b,w0 );
+        Step(b,c,d,e,a,w1 );
+
+        /* 50-54 */
+        Step(a,b,c,d,e,w2 );
+        Step(e,a,b,c,d,w3 );
+        Step(d,e,a,b,c,w4 );
+        Step(c,d,e,a,b,w5 );
+        Step(b,c,d,e,a,w6 );
+
+        /* 55-59 */
+        Step(a,b,c,d,e,w7 );
+        Step(e,a,b,c,d,w8 );
+        Step(d,e,a,b,c,w9 );
+        Step(c,d,e,a,b,w10);
+        Step(b,c,d,e,a,w11);
+
+#undef K
+#undef F
+#define K K60
+#define F F60
+
+        /* 60-64 */
+        Step(a,b,c,d,e,w12);
+        Step(e,a,b,c,d,w13);
+        Step(d,e,a,b,c,w14);
+        Step(c,d,e,a,b,w15); SCHEDULE;
+        Step(b,c,d,e,a,w0 );
+
+        /* 65-69 */
+        Step(a,b,c,d,e,w1 );
+        Step(e,a,b,c,d,w2 );
+        Step(d,e,a,b,c,w3 );
+        Step(c,d,e,a,b,w4 );
+        Step(b,c,d,e,a,w5 );
+
+        /* 70-74 */
+        Step(a,b,c,d,e,w6 );
+        Step(e,a,b,c,d,w7 );
+        Step(d,e,a,b,c,w8 );
+        Step(c,d,e,a,b,w9 );
+        Step(b,c,d,e,a,w10);
+
+        /* 75-79 */
+        Step(a,b,c,d,e,w11);
+        Step(e,a,b,c,d,w12);
+        Step(d,e,a,b,c,w13);
+        Step(c,d,e,a,b,w14);
+        Step(b,c,d,e,a,w15);
+
+        /* Update the hash */
+        hash[0] += a;
+        hash[1] += b;
+        hash[2] += c;
+        hash[3] += d;
+        hash[4] += e;
+
+        /* Move to next block */
+        --nblocks; ++mesg;
+    }
+    return;
+}
diff --git a/implementation/cbits/raaz/hash/sha256/portable.c b/implementation/cbits/raaz/hash/sha256/portable.c
new file mode 100644
--- /dev/null
+++ b/implementation/cbits/raaz/hash/sha256/portable.c
@@ -0,0 +1,337 @@
+/*
+
+Portable C implementation of SHA256 hashing. The implementation is
+part of the raaz cryptographic network library and is not meant to be
+used as a standalone sha256 function.
+
+Copyright (c) 2012, Piyush P Kurur and Satvik Chauhan
+
+All rights reserved.
+
+This software is distributed under the terms and conditions of the
+BSD3 license. See the accompanying file LICENSE for exact terms and
+condition.
+
+*/
+
+#include <raaz/core/endian.h>
+#include <stdint.h>
+
+typedef uint32_t   Word;  /* basic unit of sha256 hash  */
+#define HASH_SIZE  8      /* Number of words in a Hash  */
+#define BLOCK_SIZE 16     /* Number of words in a block */
+
+typedef Word Hash [ HASH_SIZE  ];
+typedef Word Block[ BLOCK_SIZE ];
+
+void raazHashSha256PortableCompress(Block *mesg, int nblocks, Hash h);
+
+/* WARNING: Macro variables not protected use only simple
+ * expressions.
+ *
+ * Notes to Developers: Lot of the code is just repetative loop
+ * unrollings.  The comment after these blocks contain elisp macros
+ * that generate them (with some tweaks). Preserve these of ease of
+ * updating the code.
+ *
+*/
+
+#define RotateL(x,n)  ((x << n)  | (x >> (32 - (n))))
+#define RotateR(x,n)  ((x >> n)  | (x << (32 - (n))))
+#define ShiftR(x,n)   (x >> n)
+
+/* The round constants */
+
+#define K0 0x428a2f98
+#define K1 0x71374491
+#define K2 0xb5c0fbcf
+#define K3 0xe9b5dba5
+#define K4 0x3956c25b
+#define K5 0x59f111f1
+#define K6 0x923f82a4
+#define K7 0xab1c5ed5
+#define K8 0xd807aa98
+#define K9 0x12835b01
+#define K10 0x243185be
+#define K11 0x550c7dc3
+#define K12 0x72be5d74
+#define K13 0x80deb1fe
+#define K14 0x9bdc06a7
+#define K15 0xc19bf174
+#define K16 0xe49b69c1
+#define K17 0xefbe4786
+#define K18 0x0fc19dc6
+#define K19 0x240ca1cc
+#define K20 0x2de92c6f
+#define K21 0x4a7484aa
+#define K22 0x5cb0a9dc
+#define K23 0x76f988da
+#define K24 0x983e5152
+#define K25 0xa831c66d
+#define K26 0xb00327c8
+#define K27 0xbf597fc7
+#define K28 0xc6e00bf3
+#define K29 0xd5a79147
+#define K30 0x06ca6351
+#define K31 0x14292967
+#define K32 0x27b70a85
+#define K33 0x2e1b2138
+#define K34 0x4d2c6dfc
+#define K35 0x53380d13
+#define K36 0x650a7354
+#define K37 0x766a0abb
+#define K38 0x81c2c92e
+#define K39 0x92722c85
+#define K40 0xa2bfe8a1
+#define K41 0xa81a664b
+#define K42 0xc24b8b70
+#define K43 0xc76c51a3
+#define K44 0xd192e819
+#define K45 0xd6990624
+#define K46 0xf40e3585
+#define K47 0x106aa070
+#define K48 0x19a4c116
+#define K49 0x1e376c08
+#define K50 0x2748774c
+#define K51 0x34b0bcb5
+#define K52 0x391c0cb3
+#define K53 0x4ed8aa4a
+#define K54 0x5b9cca4f
+#define K55 0x682e6ff3
+#define K56 0x748f82ee
+#define K57 0x78a5636f
+#define K58 0x84c87814
+#define K59 0x8cc70208
+#define K60 0x90befffa
+#define K61 0xa4506ceb
+#define K62 0xbef9a3f7
+#define K63 0xc67178f2
+
+/* The round functions */
+#define CH(x,y,z)     ((x & y) ^ (~x & z))
+#define MAJ(x,y,z)    ((x & (y | z)) | (y & z))
+
+#define SIGB0(x)     (RotateR(x,2) ^ RotateR(x,13) ^ RotateR(x,22))
+#define SIGB1(x)     (RotateR(x,6) ^ RotateR(x,11) ^ RotateR(x,25))
+#define SIGS0(x)     (RotateR(x,7) ^ RotateR(x,18) ^ ShiftR(x,3))
+#define SIGS1(x)     (RotateR(x,17) ^ RotateR(x,19) ^ ShiftR(x,10))
+
+/* One step in the hash function
+
+    t1 = h + SIGB1 e + CH e f g + k t + w t
+    t2 = SIGB0 a + MAJ a b c
+    a' = t1 + t2
+    b' = a
+    c' = b
+    d' = c
+    e' = d + t1
+    f' = e
+    g' = f
+    h' = g
+
+Notice the values of a,b,c,e,f,g are carried over but d and h gets updated.
+
+*/
+
+#define Step(a,b,c,d,e,f,g,h,w,k)                 \
+    {                                             \
+        temp = h + SIGB1(e) + CH(e,f,g) + k + w;  \
+        d   += temp;                              \
+        h    = temp + SIGB0(a) + MAJ(a,b,c);      \
+    }
+
+/* Message scheduling is done as
+
+   w16 = SIGS1(w14) + w9 + SIGS0(w1) + w0
+
+*/
+
+/* Message scheduling
+
+  (dotimes (i 16)
+    (setq j (% (+ i 14) 16))
+    (setq k (% (+ i 9)  16))
+    (setq l (% (+ i 1)  16))
+    (insert (format "\t\t\tw%d += SIGS1(w%d) + w%d + SIGS0(w%d); \\\n" i j k l)))
+
+*/
+
+#define SCHEDULE                                        \
+    {                                                   \
+      w0 += SIGS1(w14) + w9 + SIGS0(w1);                \
+      w1 += SIGS1(w15) + w10 + SIGS0(w2);               \
+      w2 += SIGS1(w0) + w11 + SIGS0(w3);                \
+      w3 += SIGS1(w1) + w12 + SIGS0(w4);                \
+      w4 += SIGS1(w2) + w13 + SIGS0(w5);                \
+      w5 += SIGS1(w3) + w14 + SIGS0(w6);                \
+      w6 += SIGS1(w4) + w15 + SIGS0(w7);                \
+      w7 += SIGS1(w5) + w0 + SIGS0(w8);                 \
+      w8 += SIGS1(w6) + w1 + SIGS0(w9);                 \
+      w9 += SIGS1(w7) + w2 + SIGS0(w10);                \
+      w10 += SIGS1(w8) + w3 + SIGS0(w11);               \
+      w11 += SIGS1(w9) + w4 + SIGS0(w12);               \
+      w12 += SIGS1(w10) + w5 + SIGS0(w13);              \
+      w13 += SIGS1(w11) + w6 + SIGS0(w14);              \
+      w14 += SIGS1(w12) + w7 + SIGS0(w15);              \
+      w15 += SIGS1(w13) + w8 + SIGS0(w0);               \
+    }
+
+/*
+
+   This is the compress routine of sha256. It is safe in the sense
+   that it does not overwrite the message. However, it does overwrite
+   the hash array.
+
+*/
+
+void raazHashSha256PortableCompress(Block *mesg, int nblocks, Hash hash)
+{
+
+    register Word a,b,c,d,e,f,g,h; /* Stores the hash state  */
+
+    register Word temp;            /* A temproray variable   */
+    /*
+      The message variables:
+
+      (dotimes (i 16)(insert (format "\t\tWord w%d;\n" i)))
+
+      Why not an array? Memory wise these two will be more or less
+      same as local arrays will be allocated on stack. However in
+      machines with a large number of general purpose registers the
+      compiler has a chance of allocating all of them to registers
+      making them faster. It might also improve cache hits.
+
+    */
+
+    Word w0;
+    Word w1;
+    Word w2;
+    Word w3;
+    Word w4;
+    Word w5;
+    Word w6;
+    Word w7;
+    Word w8;
+    Word w9;
+    Word w10;
+    Word w11;
+    Word w12;
+    Word w13;
+    Word w14;
+    Word w15;
+
+    /* Looping over all the blocks */
+    while (nblocks > 0)
+    {
+        /* initialisation of the hash state */
+        a = hash[0]; b = hash[1]; c = hash[2]; d = hash[3]; e = hash[4];
+        f = hash[5]; g = hash[6]; h = hash[7];
+
+        /* Reading in the message
+
+           (dotimes (i 16)
+             (insert (format "\t\t\t\tw%d = raazLoad32BE( (Word *) mesg, %d);\n" i i)))
+
+        */
+# define      LOAD(i) raaz_tobe32((*mesg)[i])
+        w0  = LOAD(0);
+        w1  = LOAD(1);
+        w2  = LOAD(2);
+        w3  = LOAD(3);
+        w4  = LOAD(4);
+        w5  = LOAD(5);
+        w6  = LOAD(6);
+        w7  = LOAD(7);
+        w8  = LOAD(8);
+        w9  = LOAD(9);
+        w10 = LOAD(10);
+        w11 = LOAD(11);
+        w12 = LOAD(12);
+        w13 = LOAD(13);
+        w14 = LOAD(14);
+        w15 = LOAD(15);
+
+# undef LOAD
+        /* End of reading the message */
+
+        /* 0-63 */
+        Step(a,b,c,d,e,f,g,h,w0,K0);
+        Step(h,a,b,c,d,e,f,g,w1,K1);
+        Step(g,h,a,b,c,d,e,f,w2,K2);
+        Step(f,g,h,a,b,c,d,e,w3,K3);
+        Step(e,f,g,h,a,b,c,d,w4,K4);
+        Step(d,e,f,g,h,a,b,c,w5,K5);
+        Step(c,d,e,f,g,h,a,b,w6,K6);
+        Step(b,c,d,e,f,g,h,a,w7,K7);
+        Step(a,b,c,d,e,f,g,h,w8,K8);
+        Step(h,a,b,c,d,e,f,g,w9,K9);
+        Step(g,h,a,b,c,d,e,f,w10,K10);
+        Step(f,g,h,a,b,c,d,e,w11,K11);
+        Step(e,f,g,h,a,b,c,d,w12,K12);
+        Step(d,e,f,g,h,a,b,c,w13,K13);
+        Step(c,d,e,f,g,h,a,b,w14,K14);
+        Step(b,c,d,e,f,g,h,a,w15,K15); SCHEDULE;
+        Step(a,b,c,d,e,f,g,h,w0,K16);
+        Step(h,a,b,c,d,e,f,g,w1,K17);
+        Step(g,h,a,b,c,d,e,f,w2,K18);
+        Step(f,g,h,a,b,c,d,e,w3,K19);
+        Step(e,f,g,h,a,b,c,d,w4,K20);
+        Step(d,e,f,g,h,a,b,c,w5,K21);
+        Step(c,d,e,f,g,h,a,b,w6,K22);
+        Step(b,c,d,e,f,g,h,a,w7,K23);
+        Step(a,b,c,d,e,f,g,h,w8,K24);
+        Step(h,a,b,c,d,e,f,g,w9,K25);
+        Step(g,h,a,b,c,d,e,f,w10,K26);
+        Step(f,g,h,a,b,c,d,e,w11,K27);
+        Step(e,f,g,h,a,b,c,d,w12,K28);
+        Step(d,e,f,g,h,a,b,c,w13,K29);
+        Step(c,d,e,f,g,h,a,b,w14,K30);
+        Step(b,c,d,e,f,g,h,a,w15,K31); SCHEDULE;
+        Step(a,b,c,d,e,f,g,h,w0,K32);
+        Step(h,a,b,c,d,e,f,g,w1,K33);
+        Step(g,h,a,b,c,d,e,f,w2,K34);
+        Step(f,g,h,a,b,c,d,e,w3,K35);
+        Step(e,f,g,h,a,b,c,d,w4,K36);
+        Step(d,e,f,g,h,a,b,c,w5,K37);
+        Step(c,d,e,f,g,h,a,b,w6,K38);
+        Step(b,c,d,e,f,g,h,a,w7,K39);
+        Step(a,b,c,d,e,f,g,h,w8,K40);
+        Step(h,a,b,c,d,e,f,g,w9,K41);
+        Step(g,h,a,b,c,d,e,f,w10,K42);
+        Step(f,g,h,a,b,c,d,e,w11,K43);
+        Step(e,f,g,h,a,b,c,d,w12,K44);
+        Step(d,e,f,g,h,a,b,c,w13,K45);
+        Step(c,d,e,f,g,h,a,b,w14,K46);
+        Step(b,c,d,e,f,g,h,a,w15,K47); SCHEDULE;
+        Step(a,b,c,d,e,f,g,h,w0,K48);
+        Step(h,a,b,c,d,e,f,g,w1,K49);
+        Step(g,h,a,b,c,d,e,f,w2,K50);
+        Step(f,g,h,a,b,c,d,e,w3,K51);
+        Step(e,f,g,h,a,b,c,d,w4,K52);
+        Step(d,e,f,g,h,a,b,c,w5,K53);
+        Step(c,d,e,f,g,h,a,b,w6,K54);
+        Step(b,c,d,e,f,g,h,a,w7,K55);
+        Step(a,b,c,d,e,f,g,h,w8,K56);
+        Step(h,a,b,c,d,e,f,g,w9,K57);
+        Step(g,h,a,b,c,d,e,f,w10,K58);
+        Step(f,g,h,a,b,c,d,e,w11,K59);
+        Step(e,f,g,h,a,b,c,d,w12,K60);
+        Step(d,e,f,g,h,a,b,c,w13,K61);
+        Step(c,d,e,f,g,h,a,b,w14,K62);
+        Step(b,c,d,e,f,g,h,a,w15,K63);
+
+        /* Update the hash */
+        hash[0] += a;
+        hash[1] += b;
+        hash[2] += c;
+        hash[3] += d;
+        hash[4] += e;
+        hash[5] += f;
+        hash[6] += g;
+        hash[7] += h;
+
+        /* Move to next block */
+        --nblocks; ++mesg;
+    }
+    return;
+}
diff --git a/implementation/cbits/raaz/hash/sha512/portable.c b/implementation/cbits/raaz/hash/sha512/portable.c
new file mode 100644
--- /dev/null
+++ b/implementation/cbits/raaz/hash/sha512/portable.c
@@ -0,0 +1,372 @@
+/*
+
+Portable C implementation of SHA512 hashing. The implementation is
+part of the raaz cryptographic network library and is not meant to be
+used as a standalone sha512 function.
+
+Copyright (c) 2012, Piyush P Kurur and Satvik Chauhan
+
+All rights reserved.
+
+This software is distributed under the terms and conditions of the
+BSD3 license. See the accompanying file LICENSE for exact terms and
+condition.
+
+*/
+
+#include <raaz/core/endian.h>
+#include <stdint.h>
+
+typedef uint64_t   Word;  /* basic unit of sha512 hash  */
+#define HASH_SIZE  8      /* Number of words in a Hash  */
+#define BLOCK_SIZE 16     /* Number of words in a block */
+
+typedef Word Hash [ HASH_SIZE  ];
+typedef Word Block[ BLOCK_SIZE ];
+
+void raazHashSha512PortableCompress(Block *mesg, int nblocks, Hash hash);
+
+/* WARNING: Macro variables not protected use only simple
+ * expressions.
+ *
+ * Notes to Developers: Lot of the code is just repetative loop
+ * unrollings.  The comment after these blocks contain elisp macros
+ * that generate them (with some tweaks). Preserve these of ease of
+ * updating the code.
+ *
+*/
+
+#define RotateL(x,n)  ((x << n)  | (x >> (64 - (n))))
+#define RotateR(x,n)  ((x >> n)  | (x << (64 - (n))))
+#define ShiftR(x,n)   ( x >> n )
+
+/* The round constants */
+
+#define K0 0x428a2f98d728ae22
+#define K1 0x7137449123ef65cd
+#define K2 0xb5c0fbcfec4d3b2f
+#define K3 0xe9b5dba58189dbbc
+#define K4 0x3956c25bf348b538
+#define K5 0x59f111f1b605d019
+#define K6 0x923f82a4af194f9b
+#define K7 0xab1c5ed5da6d8118
+#define K8 0xd807aa98a3030242
+#define K9 0x12835b0145706fbe
+#define K10 0x243185be4ee4b28c
+#define K11 0x550c7dc3d5ffb4e2
+#define K12 0x72be5d74f27b896f
+#define K13 0x80deb1fe3b1696b1
+#define K14 0x9bdc06a725c71235
+#define K15 0xc19bf174cf692694
+#define K16 0xe49b69c19ef14ad2
+#define K17 0xefbe4786384f25e3
+#define K18 0x0fc19dc68b8cd5b5
+#define K19 0x240ca1cc77ac9c65
+#define K20 0x2de92c6f592b0275
+#define K21 0x4a7484aa6ea6e483
+#define K22 0x5cb0a9dcbd41fbd4
+#define K23 0x76f988da831153b5
+#define K24 0x983e5152ee66dfab
+#define K25 0xa831c66d2db43210
+#define K26 0xb00327c898fb213f
+#define K27 0xbf597fc7beef0ee4
+#define K28 0xc6e00bf33da88fc2
+#define K29 0xd5a79147930aa725
+#define K30 0x06ca6351e003826f
+#define K31 0x142929670a0e6e70
+#define K32 0x27b70a8546d22ffc
+#define K33 0x2e1b21385c26c926
+#define K34 0x4d2c6dfc5ac42aed
+#define K35 0x53380d139d95b3df
+#define K36 0x650a73548baf63de
+#define K37 0x766a0abb3c77b2a8
+#define K38 0x81c2c92e47edaee6
+#define K39 0x92722c851482353b
+#define K40 0xa2bfe8a14cf10364
+#define K41 0xa81a664bbc423001
+#define K42 0xc24b8b70d0f89791
+#define K43 0xc76c51a30654be30
+#define K44 0xd192e819d6ef5218
+#define K45 0xd69906245565a910
+#define K46 0xf40e35855771202a
+#define K47 0x106aa07032bbd1b8
+#define K48 0x19a4c116b8d2d0c8
+#define K49 0x1e376c085141ab53
+#define K50 0x2748774cdf8eeb99
+#define K51 0x34b0bcb5e19b48a8
+#define K52 0x391c0cb3c5c95a63
+#define K53 0x4ed8aa4ae3418acb
+#define K54 0x5b9cca4f7763e373
+#define K55 0x682e6ff3d6b2b8a3
+#define K56 0x748f82ee5defb2fc
+#define K57 0x78a5636f43172f60
+#define K58 0x84c87814a1f0ab72
+#define K59 0x8cc702081a6439ec
+#define K60 0x90befffa23631e28
+#define K61 0xa4506cebde82bde9
+#define K62 0xbef9a3f7b2c67915
+#define K63 0xc67178f2e372532b
+#define K64 0xca273eceea26619c
+#define K65 0xd186b8c721c0c207
+#define K66 0xeada7dd6cde0eb1e
+#define K67 0xf57d4f7fee6ed178
+#define K68 0x06f067aa72176fba
+#define K69 0x0a637dc5a2c898a6
+#define K70 0x113f9804bef90dae
+#define K71 0x1b710b35131c471b
+#define K72 0x28db77f523047d84
+#define K73 0x32caab7b40c72493
+#define K74 0x3c9ebe0a15c9bebc
+#define K75 0x431d67c49c100d4c
+#define K76 0x4cc5d4becb3e42b6
+#define K77 0x597f299cfc657e2a
+#define K78 0x5fcb6fab3ad6faec
+#define K79 0x6c44198c4a475817
+
+/* The round functions */
+#define CH(x,y,z)     ((x & y) ^ (~x & z))
+#define MAJ(x,y,z)    ((x & (y | z)) | (y & z))
+
+#define SIGB0(x)     (RotateR(x,28) ^ RotateR(x,34) ^ RotateR(x,39))
+#define SIGB1(x)     (RotateR(x,14) ^ RotateR(x,18) ^ RotateR(x,41))
+#define SIGS0(x)     (RotateR(x,1) ^ RotateR(x,8) ^ ShiftR(x,7))
+#define SIGS1(x)     (RotateR(x,19) ^ RotateR(x,61) ^ ShiftR(x,6))
+
+/* One step in the hash function
+
+    t1 = h + SIGB1 e + CH e f g + k t + w t
+    t2 = SIGB0 a + MAJ a b c
+    a' = t1 + t2
+    b' = a
+    c' = b
+    d' = c
+    e' = d + t1
+    f' = e
+    g' = f
+    h' = g
+
+Notice the values of a,b,c,e,f,g are carried over but d and h gets updated.
+
+*/
+
+#define Step(a,b,c,d,e,f,g,h,w,k)                 \
+    {                                             \
+        temp = h + SIGB1(e) + CH(e,f,g) + k + w;  \
+        d   += temp;                              \
+        h    = temp + SIGB0(a) + MAJ(a,b,c);      \
+    }
+
+/* Message scheduling is done as
+
+   w16 = SIGS1(w14) + w9 + SIGS0(w1) + w0
+
+*/
+
+/* Message scheduling
+
+  (dotimes (i 16)
+    (setq j (% (+ i 14) 16))
+    (setq k (% (+ i 9)  16))
+    (setq l (% (+ i 1)  16))
+    (insert (format "\t\t\tw%d += SIGS1(w%d) + w%d + SIGS0(w%d);\\\n" i j k l)))
+
+*/
+
+#define SCHEDULE                                        \
+    {                                                   \
+      w0 += SIGS1(w14) + w9 + SIGS0(w1);                \
+      w1 += SIGS1(w15) + w10 + SIGS0(w2);               \
+      w2 += SIGS1(w0) + w11 + SIGS0(w3);                \
+      w3 += SIGS1(w1) + w12 + SIGS0(w4);                \
+      w4 += SIGS1(w2) + w13 + SIGS0(w5);                \
+      w5 += SIGS1(w3) + w14 + SIGS0(w6);                \
+      w6 += SIGS1(w4) + w15 + SIGS0(w7);                \
+      w7 += SIGS1(w5) + w0 + SIGS0(w8);                 \
+      w8 += SIGS1(w6) + w1 + SIGS0(w9);                 \
+      w9 += SIGS1(w7) + w2 + SIGS0(w10);                \
+      w10 += SIGS1(w8) + w3 + SIGS0(w11);               \
+      w11 += SIGS1(w9) + w4 + SIGS0(w12);               \
+      w12 += SIGS1(w10) + w5 + SIGS0(w13);              \
+      w13 += SIGS1(w11) + w6 + SIGS0(w14);              \
+      w14 += SIGS1(w12) + w7 + SIGS0(w15);              \
+      w15 += SIGS1(w13) + w8 + SIGS0(w0);              \
+    }
+
+
+
+/*
+
+   This is the compress routine of sha512. It is safe in the sense
+   that it does not overwrite the message. However, it does overwrite
+   the hash array.
+
+*/
+
+void raazHashSha512PortableCompress(Block *mesg, int nblocks, Hash hash)
+{
+
+    register Word a,b,c,d,e,f,g,h; /* Stores the hash state  */
+
+    register Word temp;
+
+    /*
+      The message variables:
+
+      (dotimes (i 16)(insert (format "\t\tWord w%d;\n" i)))
+
+      Why not an array? Memory wise these two will be more or less
+      same as local arrays will be allocated on stack. However in
+      machines with a large number of general purpose registers the
+      compiler has a chance of allocating all of them to registers
+      making them faster. It might also improve cache hits.
+
+    */
+
+    Word w0;
+    Word w1;
+    Word w2;
+    Word w3;
+    Word w4;
+    Word w5;
+    Word w6;
+    Word w7;
+    Word w8;
+    Word w9;
+    Word w10;
+    Word w11;
+    Word w12;
+    Word w13;
+    Word w14;
+    Word w15;
+
+    /* Looping over the blocks */
+    while (nblocks > 0)
+    {
+        /* initialisation of the hash state */
+        a = hash[0]; b = hash[1]; c = hash[2]; d = hash[3]; e = hash[4];
+        f = hash[5]; g = hash[6]; h = hash[7];
+
+        /* Reading in the message
+
+           (dotimes (i 16)
+             (insert (format "\t\t\t\tw%d = raazLoad64BE( (Word *) mesg, %d);\n" i i)))
+
+        */
+
+#define LOAD(i) raaz_tobe64((*mesg)[i])
+	w0  = LOAD(0);
+	w1  = LOAD(1);
+	w2  = LOAD(2);
+	w3  = LOAD(3);
+	w4  = LOAD(4);
+	w5  = LOAD(5);
+	w6  = LOAD(6);
+	w7  = LOAD(7);
+	w8  = LOAD(8);
+	w9  = LOAD(9);
+	w10 = LOAD(10);
+	w11 = LOAD(11);
+	w12 = LOAD(12);
+	w13 = LOAD(13);
+	w14 = LOAD(14);
+	w15 = LOAD(15);
+#undef LOAD
+
+        /* End of reading the message */
+
+        /* 0-79 */
+        Step(a,b,c,d,e,f,g,h,w0,K0);
+        Step(h,a,b,c,d,e,f,g,w1,K1);
+        Step(g,h,a,b,c,d,e,f,w2,K2);
+        Step(f,g,h,a,b,c,d,e,w3,K3);
+        Step(e,f,g,h,a,b,c,d,w4,K4);
+        Step(d,e,f,g,h,a,b,c,w5,K5);
+        Step(c,d,e,f,g,h,a,b,w6,K6);
+        Step(b,c,d,e,f,g,h,a,w7,K7);
+        Step(a,b,c,d,e,f,g,h,w8,K8);
+        Step(h,a,b,c,d,e,f,g,w9,K9);
+        Step(g,h,a,b,c,d,e,f,w10,K10);
+        Step(f,g,h,a,b,c,d,e,w11,K11);
+        Step(e,f,g,h,a,b,c,d,w12,K12);
+        Step(d,e,f,g,h,a,b,c,w13,K13);
+        Step(c,d,e,f,g,h,a,b,w14,K14);
+        Step(b,c,d,e,f,g,h,a,w15,K15); SCHEDULE;
+        Step(a,b,c,d,e,f,g,h,w0,K16);
+        Step(h,a,b,c,d,e,f,g,w1,K17);
+        Step(g,h,a,b,c,d,e,f,w2,K18);
+        Step(f,g,h,a,b,c,d,e,w3,K19);
+        Step(e,f,g,h,a,b,c,d,w4,K20);
+        Step(d,e,f,g,h,a,b,c,w5,K21);
+        Step(c,d,e,f,g,h,a,b,w6,K22);
+        Step(b,c,d,e,f,g,h,a,w7,K23);
+        Step(a,b,c,d,e,f,g,h,w8,K24);
+        Step(h,a,b,c,d,e,f,g,w9,K25);
+        Step(g,h,a,b,c,d,e,f,w10,K26);
+        Step(f,g,h,a,b,c,d,e,w11,K27);
+        Step(e,f,g,h,a,b,c,d,w12,K28);
+        Step(d,e,f,g,h,a,b,c,w13,K29);
+        Step(c,d,e,f,g,h,a,b,w14,K30);
+        Step(b,c,d,e,f,g,h,a,w15,K31); SCHEDULE;
+        Step(a,b,c,d,e,f,g,h,w0,K32);
+        Step(h,a,b,c,d,e,f,g,w1,K33);
+        Step(g,h,a,b,c,d,e,f,w2,K34);
+        Step(f,g,h,a,b,c,d,e,w3,K35);
+        Step(e,f,g,h,a,b,c,d,w4,K36);
+        Step(d,e,f,g,h,a,b,c,w5,K37);
+        Step(c,d,e,f,g,h,a,b,w6,K38);
+        Step(b,c,d,e,f,g,h,a,w7,K39);
+        Step(a,b,c,d,e,f,g,h,w8,K40);
+        Step(h,a,b,c,d,e,f,g,w9,K41);
+        Step(g,h,a,b,c,d,e,f,w10,K42);
+        Step(f,g,h,a,b,c,d,e,w11,K43);
+        Step(e,f,g,h,a,b,c,d,w12,K44);
+        Step(d,e,f,g,h,a,b,c,w13,K45);
+        Step(c,d,e,f,g,h,a,b,w14,K46);
+        Step(b,c,d,e,f,g,h,a,w15,K47); SCHEDULE;
+        Step(a,b,c,d,e,f,g,h,w0,K48);
+        Step(h,a,b,c,d,e,f,g,w1,K49);
+        Step(g,h,a,b,c,d,e,f,w2,K50);
+        Step(f,g,h,a,b,c,d,e,w3,K51);
+        Step(e,f,g,h,a,b,c,d,w4,K52);
+        Step(d,e,f,g,h,a,b,c,w5,K53);
+        Step(c,d,e,f,g,h,a,b,w6,K54);
+        Step(b,c,d,e,f,g,h,a,w7,K55);
+        Step(a,b,c,d,e,f,g,h,w8,K56);
+        Step(h,a,b,c,d,e,f,g,w9,K57);
+        Step(g,h,a,b,c,d,e,f,w10,K58);
+        Step(f,g,h,a,b,c,d,e,w11,K59);
+        Step(e,f,g,h,a,b,c,d,w12,K60);
+        Step(d,e,f,g,h,a,b,c,w13,K61);
+        Step(c,d,e,f,g,h,a,b,w14,K62);
+        Step(b,c,d,e,f,g,h,a,w15,K63); SCHEDULE;
+        Step(a,b,c,d,e,f,g,h,w0,K64);
+        Step(h,a,b,c,d,e,f,g,w1,K65);
+        Step(g,h,a,b,c,d,e,f,w2,K66);
+        Step(f,g,h,a,b,c,d,e,w3,K67);
+        Step(e,f,g,h,a,b,c,d,w4,K68);
+        Step(d,e,f,g,h,a,b,c,w5,K69);
+        Step(c,d,e,f,g,h,a,b,w6,K70);
+        Step(b,c,d,e,f,g,h,a,w7,K71);
+        Step(a,b,c,d,e,f,g,h,w8,K72);
+        Step(h,a,b,c,d,e,f,g,w9,K73);
+        Step(g,h,a,b,c,d,e,f,w10,K74);
+        Step(f,g,h,a,b,c,d,e,w11,K75);
+        Step(e,f,g,h,a,b,c,d,w12,K76);
+        Step(d,e,f,g,h,a,b,c,w13,K77);
+        Step(c,d,e,f,g,h,a,b,w14,K78);
+        Step(b,c,d,e,f,g,h,a,w15,K79);
+
+        /* Update the hash */
+        hash[0] += a;
+        hash[1] += b;
+        hash[2] += c;
+        hash[3] += d;
+        hash[4] += e;
+        hash[5] += f;
+        hash[6] += g;
+        hash[7] += h;
+        /* Move to next block */
+        --nblocks; ++mesg;
+    }
+    return;
+}
diff --git a/implementation/entropy/arc4random/Entropy.hs b/implementation/entropy/arc4random/Entropy.hs
new file mode 100644
--- /dev/null
+++ b/implementation/entropy/arc4random/Entropy.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE ForeignFunctionInterface         #-}
+
+-- | Entropy based on arc4random_buf (OpenBSD/NetBSD etc).
+module Entropy( getEntropy, entropySource ) where
+
+import Raaz.Core
+import Raaz.Core.Types.Internal
+
+-- | The name of the source from which entropy is gathered. For
+-- information purposes only.
+entropySource :: String
+entropySource = "arc4random_buf"
+
+-- | The arc4random function.
+foreign import ccall unsafe
+  "arc4random_buf"
+  c_arc4random :: Ptr Word8      -- Message
+               -> BYTES Int    -- number of bytes
+               -> IO (BYTES Int)
+
+-- | Get random bytes from using the @arc4random@ on OpenBSD/NetBSD
+-- This is only used to seed the PRG and not intended for call by
+-- others.
+getEntropy :: BYTES Int -> Ptr Word8 -> IO (BYTES Int)
+getEntropy l ptr = c_arc4random ptr l
diff --git a/implementation/entropy/getrandom/Entropy.hsc b/implementation/entropy/getrandom/Entropy.hsc
new file mode 100644
--- /dev/null
+++ b/implementation/entropy/getrandom/Entropy.hsc
@@ -0,0 +1,36 @@
+{-# LANGUAGE ForeignFunctionInterface         #-}
+-- | Entropy based on the getrandom system call on Linux.
+module Entropy( getEntropy, entropySource ) where
+
+import Foreign.C             ( CLong(..) )
+
+import Raaz.Core.Prelude
+import Raaz.Core.Types
+import Raaz.Core.Types.Internal
+
+# include <unistd.h>
+# include <sys/syscall.h>
+
+
+-- | The name of the source from which entropy is gathered. For
+-- information purposes only.
+entropySource :: String
+entropySource = "getrandom(linux)"
+
+-- | The getrandom system call.
+foreign import ccall unsafe
+  "syscall"
+  c_syscall :: CLong
+            -> Ptr Word8    -- Message
+            -> BYTES Int    -- number of bytes to be read.
+            -> Int          -- flags
+            -> IO (BYTES Int)
+
+sysGETRANDOM :: CLong
+sysGETRANDOM = #const SYS_getrandom
+
+-- | Get random bytes from using the @getrandom@ system call on
+-- linux. This is only used to seed the PRG and not intended for call
+-- by others.
+getEntropy :: BYTES Int -> Ptr Word8 -> IO (BYTES Int)
+getEntropy l ptr = c_syscall sysGETRANDOM ptr l 0
diff --git a/implementation/entropy/urandom/Entropy.hs b/implementation/entropy/urandom/Entropy.hs
new file mode 100644
--- /dev/null
+++ b/implementation/entropy/urandom/Entropy.hs
@@ -0,0 +1,19 @@
+-- | Entropy based on `/dev/urandom`.
+module Entropy( getEntropy, entropySource ) where
+
+import System.IO
+import Raaz.Core
+
+
+
+-- | The name of the source from which entropy is gathered. For
+-- information purposes only.
+entropySource :: String
+entropySource = "/dev/urandom(generic posix)"
+
+-- | Get random bytes from the system. Do not over use this function
+-- as it is meant to be used by a PRG. This function reads bytes from
+-- '/dev/urandom'.
+getEntropy ::  BYTES Int -> Ptr Word8 -> IO (BYTES Int)
+getEntropy l ptr = withBinaryFile "/dev/urandom" ReadMode
+                   $ \ hand -> hFillBuf hand ptr l
diff --git a/implementation/entropy/windows/Entropy.hsc b/implementation/entropy/windows/Entropy.hsc
new file mode 100644
--- /dev/null
+++ b/implementation/entropy/windows/Entropy.hsc
@@ -0,0 +1,53 @@
+{-# LANGUAGE CPP #-}
+module Entropy( getEntropy, entropySource ) where
+
+#include <Windows.h>
+#include <Wincrypt.h>
+
+##if defined(i386_HOST_ARCH)
+## define WINDOWS_CCONV stdcall
+##elif defined(x86_64_HOST_ARCH)
+## define WINDOWS_CCONV ccall
+##else
+## error Unknown mingw32 arch
+##endif
+
+import Foreign.Ptr (Ptr(), nullPtr, castPtr)
+import Foreign.Storable (peek)
+import Foreign.C.String (CWString())
+import Raaz.Core.Prelude
+import Raaz.Core
+import Raaz.Core.Types.Internal
+
+type HCRYPTPROV = Ptr ()
+
+-- | The name of the source from which entropy is gathered. For
+-- information purposes only.
+entropySource :: String
+entropySource = "CryptGenRandom(windows)"
+
+foreign import WINDOWS_CCONV unsafe "Wincrypt.h CryptGenRandom"
+    c_CryptGenRandom :: HCRYPTPROV -> Word32 -> Ptr Word8 -> IO Bool
+
+foreign import WINDOWS_CCONV unsafe "Wincrypt.h CryptAcquireContextW"
+    c_CryptAcquireContext :: Ptr HCRYPTPROV -> CWString -> CWString
+                          -> Word32 -> Word32 -> IO Bool
+
+foreign import WINDOWS_CCONV unsafe "Wincrypt.h CryptReleaseContext"
+    c_CryptReleaseContext :: HCRYPTPROV -> Word32 -> IO Bool
+
+-- | Get cryptographically random bytes from the system.
+getEntropy :: BYTES Int -> Ptr Word8 -> IO (BYTES Int)
+getEntropy l ptr = allocaBuffer ptrSize $ \ctx ->
+    do let addr = castPtr ctx
+       ctx_ok <- c_CryptAcquireContext addr nullPtr nullPtr
+                       (#const PROV_RSA_FULL)
+                       ((#const CRYPT_VERIFYCONTEXT) .|. (#const CRYPT_SILENT))
+       when (not ctx_ok) $ fail "Call to CryptAcquireContext failed."
+       ctx'    <- peek addr
+       success <- c_CryptGenRandom ctx' (fromIntegral l) (castPtr ptr)
+       _ <- c_CryptReleaseContext ctx' 0
+       if success
+          then return $ l
+          else fail "Unable to generate entropy. Call to CryptGenRandom failed."
+  where ptrSize = BYTES ((#size HCRYPTPROV) :: Int)
diff --git a/indef/Implementation.hsig b/indef/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/indef/Implementation.hsig
@@ -0,0 +1,90 @@
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE KindSignatures              #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE CPP                         #-}
+
+-- |
+--
+-- Module      : indef:Implementation
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+-- This signature give the interface through which a cryptographic
+-- bulk primitive, like cryptographic hash or a cipher is
+-- implemented. The main interface is through the `processBlocks`
+-- which gives the method to process data that is multiples of its
+-- block size. The last chuck of data might not be a full multiple of
+-- blocks in which case the `processLast` takes care of handling
+-- it. Fast implementations involve other details like the alignment
+-- restriction on the input buffer and all that. We package all this
+-- in the following signature.
+signature Implementation where
+
+import Raaz.Core
+
+# if MIN_VERSION_base(4,13,0)
+
+import GHC.TypeLits
+
+# endif
+
+
+-- | Name of the implementation.
+name :: String
+
+-- | Description of the implementation.
+description :: String
+
+-- | The primitive for which the implementation is given
+data Prim
+
+-- | The internal memory used by the implementation.
+data Internals
+
+instance Primitive Prim
+instance Memory Internals
+
+
+# if MIN_VERSION_base(4,13,0)
+
+-- | The alignment requirements on the buffer.
+data BufferAlignment :: Nat
+instance KnownNat BufferAlignment
+
+# else
+-- | The alignment required for buffer (hack around bug
+-- https://ghc.haskell.org/trac/ghc/ticket/15138)
+type BufferAlignment = 32
+#endif
+
+-- | The pointer type associated with the buffer used by the
+-- implementation.
+type BufferPtr = AlignedBlockPtr BufferAlignment Prim
+
+-- | The additional space other than the payload that required in the
+-- buffer for processing the data. There are multiple reasons for
+-- having this additional space. The most important case is for
+-- handling padding when processing the last block. Some fast
+-- implementations, particularly those which use SIMD instructions,
+-- handle data that is often a multiple of the block size. In such
+-- cases, it make sense to have additional blocks in such cases to
+-- make the overall implementation simple.
+additionalBlocks :: BlockCount Prim
+
+-- | The function that process bytes in multiples of the block size of
+-- the primitive.
+processBlocks :: BufferPtr
+              -> BlockCount Prim
+              -> Internals
+              -> IO ()
+
+-- | Process the last bytes of the stream.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
diff --git a/indef/Utils.hs b/indef/Utils.hs
new file mode 100644
--- /dev/null
+++ b/indef/Utils.hs
@@ -0,0 +1,86 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE DataKinds        #-}
+{-# LANGUAGE MonoLocalBinds   #-}
+{-# LANGUAGE CPP              #-}
+
+-- |
+--
+-- Module      : Utils
+-- Description : A utility module for primitives.
+-- Copyright   : (c) Piyush P Kurur, 2019
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Utils
+       ( processByteSource
+       , processBuffer
+       , updateCxt
+       , finaliseCxt
+       , transform
+       ) where
+
+import Data.ByteString          as B
+import Data.ByteString.Internal as IB
+import GHC.TypeLits
+
+import Raaz.Core
+
+import Implementation
+import Buffer
+import Context
+
+-- Warning: Not to be exposed Internal function for allocation.
+allocaFor :: BlockCount Prim -> (BufferPtr -> IO a) -> IO a
+allocaFor blks = allocaBuffer totalSize
+  where totalSize = blks `mappend` additionalBlocks
+
+-- | Process the complete byte source using the internals of the
+-- primitive.
+processByteSource :: ByteSource src => src -> Internals -> IO ()
+processByteSource src imem
+  = allocaFor blks $
+    \ ptr -> processChunks (processBlocks ptr blks imem)
+             (\ sz -> processLast ptr sz imem)
+             src ptr blks
+  where blks       = atLeast l1Cache :: BlockCount Prim
+
+-- | Process the contents of the given buffer using the processBlocks action.
+processBuffer :: KnownNat n
+              => Buffer n
+              -> Internals
+              -> IO ()
+processBuffer = withBufferPtr processBlocks
+
+-- | Update the context with the data from the source. This will process
+-- any complete blocks on the way so that
+updateCxt :: (KnownNat n, ByteSource src)
+          => src
+          -> Cxt n
+          -> IO ()
+updateCxt  = unsafeUpdate processBlocks
+
+
+-- | Finalise the computation by making use of what ever data is left
+-- in the buffer.
+finaliseCxt :: KnownNat n
+            => Cxt n
+            -> IO ()
+finaliseCxt = unsafeFinalise processLast
+
+-- | Transform the given bytestring. Hint: use this very rearely.
+transform :: ByteString -> Internals -> IO ByteString
+transform bs imem
+  = allocaFor bufSz $
+    \ buf -> do unsafeCopyToPointer bs buf -- Copy the input to buffer.
+                processLast buf strSz imem
+                IB.create sbytes $
+                  \ ptr -> Raaz.Core.memcpy (destination ptr) (source buf) strSz
+  where strSz           = Raaz.Core.length bs
+        sbytes  :: Int
+        sbytes  = fromEnum strSz
+        --
+        -- Buffer size is at least the size of the input.
+        --
+        bufSz           = atLeast strSz
diff --git a/indef/buffer/Buffer.hs b/indef/buffer/Buffer.hs
new file mode 100644
--- /dev/null
+++ b/indef/buffer/Buffer.hs
@@ -0,0 +1,95 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE KindSignatures   #-}
+{-# LANGUAGE DataKinds        #-}
+{-# LANGUAGE MonoLocalBinds   #-}
+module Buffer
+       ( BufferPtr
+       , Buffer
+       , withBufferPtr
+       , unsafeWithBufferPtr
+       , memsetBuffer
+       -- ** Some unsafe functions
+       , unsafeGetBufferPointer
+       , bufferSize
+       ) where
+
+import GHC.TypeLits
+
+import Raaz.Core
+import Raaz.Core.Memory (Access(..))
+import Implementation
+
+-- | A buffer @buf :: Buffer n@ is a memory element that has enough
+-- space for the @n@ blocks of the primitive and, if required by the
+-- implementation, any additional blocks that might be used for
+-- padding of the last chunk of message.
+newtype Buffer (n :: Nat) = Buffer { unBuffer :: Ptr Word8 }
+
+
+-- | This takes a buffer pointer action and runs it with the underlying pointer associated with
+-- the buffer. The action is supposed to use
+unsafeWithBufferPtr :: KnownNat n
+                    => (BufferPtr -> a)
+                    -> Buffer n
+                    -> a
+unsafeWithBufferPtr action = action . unsafeGetBufferPointer
+
+-- | Run the action on the buffer pointer.
+withBufferPtr :: KnownNat n
+              => (BufferPtr -> BlockCount Prim -> a)
+              -> Buffer n
+              -> a
+withBufferPtr action buf = unsafeWithBufferPtr act buf
+  where act = flip action $ bufferSize $ pure buf
+
+-- | Memset the given buffer.
+memsetBuffer :: KnownNat n => Word8 -> Buffer n -> IO ()
+memsetBuffer = withBufferPtr . flip memset
+
+
+-- WARNING: Not to be exposed else can be confusing with
+-- `bufferSize`. Internal function used by allocation.
+actualBufferSize :: KnownNat n => Proxy (Buffer n) -> BlockCount Prim
+actualBufferSize bproxy = bufferSize bproxy <> additionalBlocks
+
+{-# INLINE bufferSize #-}
+-- | The size of data (measured in blocks) that can be safely
+-- processed inside this buffer.
+bufferSize :: KnownNat n => Proxy (Buffer n) -> BlockCount Prim
+bufferSize = flip blocksOf Proxy . fromIntegral . natVal . nProxy
+  where nProxy :: Proxy (Buffer n) -> Proxy n
+        nProxy  _ = Proxy
+
+-- | Get the underlying pointer for the buffer.
+unsafeGetBufferPointer :: Buffer n -> BufferPtr
+unsafeGetBufferPointer = castPointer . nextAlignedPtr . unBuffer
+
+
+instance KnownNat n => Memory (Buffer n) where
+  memoryAlloc = allocThisBuffer
+    where allocThisBuffer = Buffer <$> pointerAlloc sz
+          bufferProxy     :: Alloc (Buffer n) -> Proxy (Buffer n)
+          bufferProxy _   = Proxy
+          algn            = ptrAlignment (Proxy :: Proxy BufferPtr)
+          sz              = atLeastAligned (actualBufferSize $ bufferProxy allocThisBuffer) algn
+
+  unsafeToPointer = unBuffer
+
+
+instance KnownNat n => ReadAccessible (Buffer n) where
+  readAccess buf = unsafeWithPointerCast makeAccess $ unsafeGetBufferPointer buf
+    where makeAccess bptr = [ Access bptr $ inBytes $ bufferSize $ pure buf ]
+
+
+  beforeReadAdjustment buf = unsafeWithPointer (adjust (Proxy :: Proxy Prim) nelems)
+                                 $ unsafeGetBufferPointer buf
+    where getProxy :: Buffer n -> Proxy n
+          getProxy _ = Proxy
+          nelems     = fromEnum $ natVal $ getProxy buf
+          adjust     :: Primitive prim => Proxy prim -> Int -> BlockPtr prim  -> IO ()
+          adjust _ n ptr  = adjustEndian ptr n
+
+
+instance KnownNat n => WriteAccessible (Buffer n) where
+  writeAccess = readAccess
+  afterWriteAdjustment = beforeReadAdjustment
diff --git a/indef/buffer/Context.hs b/indef/buffer/Context.hs
new file mode 100644
--- /dev/null
+++ b/indef/buffer/Context.hs
@@ -0,0 +1,275 @@
+{-# LANGUAGE FlexibleContexts      #-}
+{-# LANGUAGE KindSignatures        #-}
+{-# LANGUAGE DataKinds             #-}
+{-# LANGUAGE MonoLocalBinds        #-}
+{-# LANGUAGE RecordWildCards       #-}
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-|
+
+Contexts are useful when computing message digests of streaming input,
+i.e needs incremental processing. It consists of the internal state of the
+primitive, a buffer for intermediate data, and a memory cell for keeping
+track of the total number of data that is remaining.
+
+-}
+
+module Context ( Cxt(..)
+               , cxtSize
+               , cxtBlockCount
+               , unsafeSetCxtEmpty
+               , unsafeSetCxtFull
+               , unsafeGenerateBlocks
+               , unsafeConsumeBlocks
+               , unsafeWriteTo
+               , unsafeFillFrom
+               , unsafeUpdate
+               , unsafeFinalise
+               ) where
+
+import GHC.TypeLits
+
+import Raaz.Core
+import Implementation
+import Buffer
+
+----------------- Contexts ------------------------------
+-- | There are two cases where incremental processing of bytes are
+--   desired.
+--
+-- 1. For incremental message digest or message auth computation. We call this
+--    the hashing mode.
+--
+-- 2. For CSPRG. We call this the csprg mode.
+--
+-- In both cases, we need a buffer, the internal memory state and a
+-- count of how much data is remaining in the context. This is
+-- captured by the Cxt type.
+
+data Cxt n = Cxt { cxtInternals       :: Internals
+                 , cxtBuf             :: Buffer n
+                 , cxtAvailableBytes  :: MemoryCell (BYTES Int)
+                 }
+
+instance KnownNat n => Memory (Cxt n) where
+  memoryAlloc     = Cxt <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . cxtBuf
+
+{--
+
+-- Unfortunately this require UndecidableInstances so we suppress
+-- these instances.
+
+instance (KnownNat n, Initialisable Internals v) =>
+  Initialisable (Cxt n) v where
+  initialise v cxt@Cxt{..} = initialise v cxtInternals
+                             >> unsafeSetCxtEmpty cxt
+
+instance (KnownNat n, Extractable Internals v) =>
+  Extractable (Cxt n) v where
+  extract = extract . cxtInternals
+
+--}
+-- | Gives the number of blocks that can fit in the context.
+cxtBlockCount :: KnownNat n => Proxy (Cxt n) -> BlockCount Prim
+cxtBlockCount = bufferSize . fmap cxtBuf
+
+-- | Gives the size of the context buffer
+cxtSize :: KnownNat n => Proxy (Cxt n) -> BYTES Int
+cxtSize = inBytes . cxtBlockCount
+
+-- | Total valid bytes (either generated or read) that is available at
+-- the front of the buffer.
+getCxtBytes :: KnownNat n => Cxt n -> IO (BYTES Int)
+getCxtBytes = extract . cxtAvailableBytes
+
+-- | Set the current number of bytes.
+setBytes :: BYTES Int -> Cxt n -> IO ()
+setBytes nbytes = initialise nbytes . cxtAvailableBytes
+
+-- | Set the context to the empty state.
+unsafeSetCxtEmpty :: Cxt n -> IO ()
+unsafeSetCxtEmpty Cxt{..} = initialise (0 :: BYTES Int) cxtAvailableBytes
+
+-- | Set the context to the full state.
+unsafeSetCxtFull :: KnownNat n => Cxt n -> IO ()
+unsafeSetCxtFull cxt@Cxt{..} = initialise (cxtSize $ pure cxt) cxtAvailableBytes
+
+------------------ NOTES ----------------------------------------------
+--
+-- There is a nice duality between the usage of context in the hashing
+-- mode as opposed to csprg mode.
+--
+-- [Hashing mode:] Bytes are consumed by the block processor. For this
+-- bytes needs to be supplied from the outside world.
+--
+-- [CSPRG mode:] Bytes are generated by the block processor. The
+-- context supplies these bytes to the out side world.
+--
+-- You can see this duality reflected in the functions that exists in
+-- both the case.
+
+------------------  Generating/Consuming blocks ------------------------
+--
+-- The first visible duality in the two modes is in the way the two
+-- primitives process blocks.
+--
+-- [HASH mode:] Block compressor should be called when the context
+-- buffer is full and, as a result, should leave the context buffer
+-- empty.
+--
+-- [CSPRG mode:] Block generator should be called when the context
+-- buffer is empty and, as a result, should leave the context buffer full
+
+
+-- | Process the entire buffer of the context using the given action.
+unsafeProcessBlocks :: KnownNat n
+                    => (BufferPtr -> BlockCount Prim -> Internals -> IO ())
+                    -> Cxt n
+                    -> IO ()
+unsafeProcessBlocks action Cxt{..} = withBufferPtr action cxtBuf cxtInternals
+
+-- | Typically used in CSPRG mode, this combinator generates blocks to
+-- fill the context buffer. All the current bytes in the context gets
+-- overwritten and hence is an unsafe operation. The result of this
+-- combinator is a context that is filled with generated bytes ready
+-- to be given out.
+unsafeGenerateBlocks :: KnownNat n
+                     => (BufferPtr -> BlockCount Prim -> Internals -> IO ())
+                     -- ^ Blocks generator
+                     -> Cxt n
+                     -> IO ()
+unsafeGenerateBlocks genBlocks cxt = unsafeProcessBlocks genBlocks cxt >> unsafeSetCxtFull cxt
+
+
+-- | Typically used in the Hashing mode, this combinator assumes that
+-- the context is full and consumes these blocks. This action does not
+-- check whether the context is full and hence is unsafe. The result
+-- of this action is an empty context ready to receive further bytes.
+unsafeConsumeBlocks :: KnownNat n
+                    => (BufferPtr -> BlockCount Prim -> Internals -> IO ())
+                    -> Cxt n
+                    -> IO ()
+unsafeConsumeBlocks action cxt = unsafeProcessBlocks action cxt >> unsafeSetCxtEmpty cxt
+
+--------------------------- DANGEROUS CODE ---------------------------------------
+--
+-- The picture below summarises the state of the buffer.
+--
+--
+-- >  sptr                endPtr
+-- >   |                  |
+-- >   |<----available--->|<----remaining ----------------->|
+--     V                  V                                 V
+-- >   +----------------------------------------------------+
+-- >   |                  |                                 |
+-- >   +----------------------------------------------------+
+-- >   ^                                                    ^
+-- >   |<------------ buffer length (l)  ------------------>|
+--
+--
+
+-- | Starting pointer of the context buffer.
+startPtr :: Cxt n -> Ptr Word8
+startPtr = unsafeWithPointerCast  id . unsafeGetBufferPointer . cxtBuf
+
+
+-- > startPtr             srcPtr
+-- >   |<------------------- available -------------------->|
+-- >   |                  |                                 |
+-- >   |<----leftover --->|<---- satisfy  ----------------->|
+-- >   V                  V                                 V
+-- >   +----------------------------------------------------+
+-- >   |                  |                                 |
+-- >   +----------------------------------------------------+
+-- >   ^                                                    ^
+-- >   |<------------ buffer length (l)  ------------------>|
+--
+--
+
+
+-- | This action writes out to the given pointer buffer, bytes from
+-- the context. The copy of the bytes written in the context buffer is
+-- wiped so that looking at the context it is impossible to predict
+-- what was written out. The return value is the actual number of
+-- bytes written out which may be less than the amount demanded.
+unsafeWriteTo :: KnownNat n
+              => BYTES Int         -- ^ How many bytes to send to destination.
+              -> Dest (Ptr Word8)  -- ^ destination pointer
+              -> Cxt n
+              -> IO (BYTES Int)
+unsafeWriteTo req dbuf cxt = do
+  ava <- getCxtBytes cxt           -- bytes available in the context
+  let satisfy  = min req ava    -- how much of the demand can be satisfied.
+      leftover = ava - satisfy  -- the leftover bytes.
+      srcPtr   = startPtr cxt `movePtr` leftover
+    in do memcpy dbuf (source srcPtr) satisfy -- transfer the actual bytes
+          wipeMemory srcPtr satisfy           -- wipe the copy
+          setBytes leftover cxt
+          return satisfy
+
+
+
+-- > startPtr             destPtr
+-- >   |<------------------- bufSize   -------------------->|
+-- >   |                  |                                 |
+-- >   |<----available--->|<---- vacant   ----------------->|
+-- >   V                  V                                 V
+-- >   +----------------------------------------------------+
+-- >   |                  |                                 |
+-- >   +----------------------------------------------------+
+-- >   ^                                                    ^
+-- >   |<------------ buffer length (l)  ------------------>|
+--
+--
+
+unsafeFillFrom :: (KnownNat n, ByteSource src)
+               => src
+               -> Cxt n
+               -> IO (FillResult src)
+unsafeFillFrom src cxt = do
+  ava <- getCxtBytes cxt           -- bytes available in the context
+  let vacant  = cxtSize (pure cxt) - ava
+      destPtr = startPtr cxt `movePtr` ava
+      srcExhausted trfed = setBytes (ava + trfed) cxt >> return (Exhausted trfed)
+      srcRemaining remSrc = unsafeSetCxtFull cxt >> return (Remaining remSrc)
+    in fillBytes vacant src destPtr >>= withFillResult srcRemaining srcExhausted
+
+
+-- | Starting with an empty context, run the given action on the src
+-- reading a full buffer at a time. Ends when the src is
+-- exhausted. The last chunk of bytes that is read is not processed
+-- and is left in the buffer for later processing when more bytes are
+-- added or when finalising the context.
+unsafeContinue :: (KnownNat n, ByteSource src)
+               => (BufferPtr -> BlockCount Prim -> Internals -> IO ())
+               -> src
+               -> Cxt n
+               -> IO ()
+unsafeContinue action src cxt = processChunks actFilled lastChunk src bufPtr bufSize
+  where actFilled = unsafeProcessBlocks action cxt
+        lastChunk nbytes = setBytes nbytes cxt
+        bufPtr           = startPtr cxt
+        bufSize          = cxtSize $ pure cxt
+
+
+-- | Update the context with data coming from the byte source. Used
+-- typically in the digest mode.
+unsafeUpdate :: (KnownNat n, ByteSource src)
+             => (BufferPtr -> BlockCount Prim -> Internals -> IO ())
+             -> src
+             -> Cxt n
+             -> IO ()
+unsafeUpdate action src cxt =
+  unsafeFillFrom src cxt >>= withFillResult process doNothing
+  where doNothing      = const $ return ()
+        process remSrc = unsafeConsumeBlocks action cxt >> unsafeContinue action remSrc cxt
+
+
+unsafeFinalise :: KnownNat n
+               => (BufferPtr -> BYTES Int -> Internals -> IO ())
+               -> Cxt n
+               -> IO ()
+unsafeFinalise action cxt@Cxt{..} = do
+  ava <- getCxtBytes cxt
+  unsafeWithBufferPtr action cxtBuf ava cxtInternals
diff --git a/indef/chacha20/Implementation.hsig b/indef/chacha20/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/indef/chacha20/Implementation.hsig
@@ -0,0 +1,57 @@
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE KindSignatures              #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE CPP                         #-}
+
+-- | An implementation for chacha20 together with hchacha20 hash
+-- implementation.
+signature Implementation where
+
+
+import Raaz.Core
+import Raaz.Primitive.ChaCha20.Internal
+
+-- NOTE:
+--
+-- With https://gitlab.haskell.org/ghc/ghc/issues/15138 and
+-- https://gitlab.haskell.org/ghc/ghc/issues/15379 fixed I (ppk) had
+-- expected that one can differ the assignment of Buffer
+-- alignment. While this is indeed the case for other implementations,
+-- for some reason it, does not seem to work for the Mac
+-- implementation, probably because of being an indirect constraint;
+-- Mac.Implementation -> Implementation but then is mixed as
+-- Implementation in the auth case. Therefore, I am setting an
+-- artificially large base number here.
+--
+# if MIN_VERSION_base(100,100,0)
+-- # if MIN_VERSION_base(4,13,0)
+import GHC.TypeLits
+
+-- | The alignment requirements on the buffer.
+data BufferAlignment :: Nat
+instance KnownNat BufferAlignment
+
+# else
+-- | The alignment required for buffer (hack around bug
+-- https://ghc.haskell.org/trac/ghc/ticket/15138)
+type BufferAlignment = 32
+#endif
+
+-- | The primitive for which the implementation is given
+
+type Prim = ChaCha20
+data Internals
+instance Memory Internals
+
+instance Initialisable Internals (BlockCount ChaCha20)
+instance Extractable   Internals (BlockCount ChaCha20)
+
+-- | The function that sets the internal state for the xchacha
+-- variant.
+xchacha20Setup :: Nounce XChaCha20 -> Internals -> IO ()
+
+-- | Allows copying key from a Memory cell to internal.
+copyKey :: Dest Internals-> Src (MemoryCell (Key ChaCha20)) -> IO ()
diff --git a/indef/chacha20/XChaCha20/Implementation.hs b/indef/chacha20/XChaCha20/Implementation.hs
new file mode 100644
--- /dev/null
+++ b/indef/chacha20/XChaCha20/Implementation.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE MultiParamTypeClasses      #-}
+
+module XChaCha20.Implementation where
+
+import           Raaz.Core
+import           Raaz.Primitive.ChaCha20.Internal
+
+
+import qualified Implementation as Base
+
+name :: String
+name = "x" ++ Base.name
+
+description :: String
+description = Base.description ++ " This is the XChaCha variant."
+
+type Prim                    = XChaCha20
+data Internals               = XChaCha20Mem
+  { copyOfKey         :: MemoryCell (Key ChaCha20)
+  , chacha20Internals :: Base.Internals
+  }
+
+type BufferAlignment         = Base.BufferAlignment
+type BufferPtr               = AlignedBlockPtr BufferAlignment Prim
+
+instance Memory Internals where
+  memoryAlloc     = XChaCha20Mem <$> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . copyOfKey
+
+
+instance Initialisable Internals (Key XChaCha20) where
+  initialise xkey = initialise xkey . copyOfKey
+
+instance WriteAccessible Internals where
+  writeAccess = writeAccess . copyOfKey
+  afterWriteAdjustment = afterWriteAdjustment . copyOfKey
+
+instance Initialisable Internals (Nounce XChaCha20) where
+  initialise xnounce imem = do
+    let dest = destination $ chacha20Internals imem
+        src  = source $ copyOfKey imem
+      in Base.copyKey dest src
+    Base.xchacha20Setup xnounce $ chacha20Internals imem
+
+instance Initialisable Internals (BlockCount XChaCha20) where
+  initialise bcount = initialise bcountP . chacha20Internals
+    where bcountP :: BlockCount ChaCha20
+          bcountP = toEnum $ fromEnum bcount
+
+instance Extractable Internals (BlockCount XChaCha20) where
+  extract = fmap coerce . extract . chacha20Internals
+    where coerce :: BlockCount ChaCha20 -> BlockCount XChaCha20
+          coerce = toEnum . fromEnum
+
+additionalBlocks :: BlockCount XChaCha20
+additionalBlocks = coerce Base.additionalBlocks
+    where coerce :: BlockCount Base.Prim -> BlockCount XChaCha20
+          coerce = toEnum . fromEnum
+
+
+processBlocks :: BufferPtr
+              -> BlockCount Prim
+              -> Internals
+              -> IO ()
+processBlocks buf bcount =
+  Base.processBlocks (castPointer buf) (coerce bcount) . chacha20Internals
+  where coerce :: BlockCount XChaCha20 -> BlockCount Base.Prim
+        coerce = toEnum . fromEnum
+
+-- | Process the last bytes.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast buf nbytes = Base.processLast (castPointer buf) nbytes . chacha20Internals
diff --git a/indef/keyed/hash/Implementation.hsig b/indef/keyed/hash/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/indef/keyed/hash/Implementation.hsig
@@ -0,0 +1,59 @@
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE CPP                         #-}
+-- | A keyed primitive is something that expects a key for it to
+-- function. Examples include, encryption, encrypted-authentication
+-- etc. This signature add additional constraints to an implementation
+-- to make it a keyed cryptographic primitive.
+signature Implementation
+          ( Prim
+          , Internals
+          , BufferAlignment
+          ) where
+
+
+import Foreign.Storable              (Storable)
+import Raaz.Core
+import Raaz.Primitive.Keyed.Internal (KeyedHash)
+
+-- NOTE:
+--
+-- With https://gitlab.haskell.org/ghc/ghc/issues/15138 and
+-- https://gitlab.haskell.org/ghc/ghc/issues/15379 fixed I (ppk) had
+-- expected that one can differ the assignment of Buffer
+-- alignment. While this is indeed the case for other implementations,
+-- for some reason it, does not seem to work for the Mac
+-- implementation, probably because of being an indirect constraint;
+-- Mac.Implementation -> Implementation but then is mixed as
+-- Implementation in the auth case. Therefore, I am setting an
+-- artificially large base number here.
+--
+# if MIN_VERSION_base(100,100,0)
+-- # if MIN_VERSION_base(4,13,0)
+import GHC.TypeLits
+
+-- | The alignment requirements on the buffer.
+data BufferAlignment :: Nat
+instance KnownNat BufferAlignment
+
+# else
+-- | The alignment required for buffer (hack around bug
+-- https://ghc.haskell.org/trac/ghc/ticket/15138)
+type BufferAlignment = 32
+#endif
+
+-- | The primitive for which the implementation is given
+data Prim
+instance Primitive Prim
+instance Storable  Prim
+instance KeyedHash Prim
+
+
+-- | The internal memory used by the implementation.
+data Internals
+instance Memory Internals
+instance Initialisable Internals Prim
+instance Extractable   Internals Prim
diff --git a/indef/keyed/hash/Mac/Implementation.hs b/indef/keyed/hash/Mac/Implementation.hs
new file mode 100644
--- /dev/null
+++ b/indef/keyed/hash/Mac/Implementation.hs
@@ -0,0 +1,147 @@
+{-# LANGUAGE ConstraintKinds             #-}
+{-# LANGUAGE MultiParamTypeClasses       #-}
+{-# LANGUAGE FlexibleInstances           #-}
+{-# LANGUAGE TypeFamilies                #-}
+{-# LANGUAGE DataKinds                   #-}
+{-# LANGUAGE FlexibleContexts            #-}
+{-# LANGUAGE RecordWildCards             #-}
+-- | An implementation for simple MAC which is based on a
+-- cryptographic hash. This construction is safe only for certain
+-- hashes like blake2 and therefore should not be used
+-- indiscriminately. In particular, sha2 hashes should not be used in
+-- this mode as they are prone to length extension attack.
+--
+-- If you want to use sha2 hashs for message authentication, you
+-- should make use of the more complicated HMAC construction.
+--
+module Mac.Implementation
+          ( Prim
+          , name
+          , description
+          , Internals
+          , BufferAlignment
+          , BufferPtr
+          , processBlocks
+          , processLast
+          , additionalBlocks
+          , Key (..)
+          ) where
+
+import           Data.ByteString       as BS
+import           Raaz.Core
+import           Raaz.Core.Transfer.Unsafe
+import           Raaz.Primitive.Keyed.Internal
+import qualified Implementation        as Base
+import qualified Utils                 as U
+import qualified Buffer                as B
+
+type Prim = Keyed Base.Prim
+
+-- | Name of the implementation.
+name :: String
+name = Base.name ++ "-keyed-hash"
+
+-- | Description of the implementation.
+description :: String
+description = "Implementation of a MAC based on simple keyed hashing that makes use of "
+              ++ Base.name
+              ++ " implementation."
+
+type BufferAlignment = Base.BufferAlignment
+type BufferPtr       = AlignedBlockPtr BufferAlignment Prim
+
+toKeyedBlocks :: BlockCount Base.Prim -> BlockCount Prim
+toKeyedBlocks = toEnum . fromEnum
+
+fromKeyedBlocks :: BlockCount Prim -> BlockCount Base.Prim
+fromKeyedBlocks = toEnum . fromEnum
+
+-- | The additional space required in the buffer for processing the data.
+additionalBlocks :: BlockCount Prim
+additionalBlocks = toKeyedBlocks Base.additionalBlocks
+
+trim ::  Key (Keyed Base.Prim) -> BS.ByteString
+trim (Key hKey) = BS.take sz hKey
+  where sz = fromEnum $ sizeOf (Proxy :: Proxy Base.Prim)
+
+
+-- | The internal memory used by the implementation.
+data Internals = MACInternals { hashInternals    :: Base.Internals
+                              , keyBuffer        :: B.Buffer 1
+                              , atStart          :: MemoryCell Bool
+                                -- Flag to check whether the key has been processed or not.
+                                -- see the note on Delayed key processing
+                              }
+
+-- | Process the key inside the buffer with the process Buffer
+-- function.
+processKey :: Internals -> IO ()
+processKey MACInternals{..} = U.processBuffer keyBuffer hashInternals
+
+
+-- | Process the key in the buffer with the processLast function.
+processKeyLast :: Internals -> IO ()
+processKeyLast MACInternals{..} = Base.processLast bufPtr bufsz hashInternals
+  where bufPtr = B.unsafeGetBufferPointer keyBuffer
+        bufsz  = inBytes $ blocksOf 1 (Proxy :: Proxy Base.Prim)
+
+
+instance Memory Internals where
+  memoryAlloc = MACInternals <$> memoryAlloc <*> memoryAlloc <*> memoryAlloc
+  unsafeToPointer = unsafeToPointer . hashInternals
+
+-- * Delayed key processing ::
+--
+-- It would look like the initialisation step is pretty straight
+-- forward. Write the padded key to the buffer and then run process
+-- blocks on it. This will work as long as the message that needs to
+-- be authenticated is at-least 1 byte long.
+--
+-- For null bytes the padded key block is the last block and hashes
+-- like blake2 pass a different finalisation flag for the last
+-- block. At initialisation we cannot predict whether the message we
+-- are about to see is empty or not. So we keep everything ready
+-- (i.e. write the key into the keybuffer) and mark a flag that says
+-- we are at the start of the message processing. The first time we
+-- call processBlocks or processLast, will have to do the appropriate
+-- initialisation and then proceed from there on.
+
+instance Initialisable Internals (Key (Keyed Base.Prim)) where
+  initialise hKey imem
+    = do initialise hash0 $ hashInternals imem
+         writeKeyIntoBuffer $ keyBuffer imem
+         initialise True $ atStart imem
+           where kbs        = trim hKey
+                 hash0      :: Base.Prim
+                 hash0      = hashInit $ Raaz.Core.length kbs
+                 keyWrite   = padWrite 0 (blocksOf 1 proxyPrim) $ writeByteString kbs
+
+                 writeKeyIntoBuffer = unsafeTransfer keyWrite . B.unsafeGetBufferPointer
+                 proxyPrim = Proxy :: Proxy Base.Prim
+
+instance Extractable Internals Prim where
+  extract = fmap unsafeToKeyed . extract . hashInternals
+
+
+-- | The function that process bytes in multiples of the block size of
+-- the primitive.
+processBlocks :: BufferPtr
+              -> BlockCount Prim
+              -> Internals
+              -> IO ()
+processBlocks aptr blks imem@MACInternals{..} = do
+  start <- extract atStart
+  when start $ do processKey imem
+                  initialise False atStart
+  Base.processBlocks (castPointer aptr) (fromKeyedBlocks blks) hashInternals
+
+-- | Process the last bytes of the stream.
+processLast :: BufferPtr
+            -> BYTES Int
+            -> Internals
+            -> IO ()
+processLast aptr sz imem@MACInternals{..} = do
+  start <- extract atStart
+  if start && sz == 0 then processKeyLast imem
+    else do when start $ processKey imem
+            Base.processLast (castPointer aptr) sz hashInternals
diff --git a/libverse/Raaz/Verse/Blake2b/C/Portable.hs b/libverse/Raaz/Verse/Blake2b/C/Portable.hs
new file mode 100644
--- /dev/null
+++ b/libverse/Raaz/Verse/Blake2b/C/Portable.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Raaz.Verse.Blake2b.C.Portable where
+import Raaz.Core
+foreign import ccall unsafe verse_blake2b_c_portable_iter
+        :: Ptr (Tuple 16 (LE Word64))
+        -> Word64
+        -> Ptr Word64
+        -> Ptr Word64
+        -> Ptr (Tuple 8 Word64)
+        -> IO ()
+foreign import ccall unsafe verse_blake2b_c_portable_last
+        :: Ptr (Tuple 16 (LE Word64))
+        -> Word64
+        -> Word64
+        -> Word64
+        -> Word64
+        -> Word64
+        -> Ptr (Tuple 8 Word64)
+        -> IO ()
diff --git a/libverse/Raaz/Verse/ChaCha20/C/Portable.hs b/libverse/Raaz/Verse/ChaCha20/C/Portable.hs
new file mode 100644
--- /dev/null
+++ b/libverse/Raaz/Verse/ChaCha20/C/Portable.hs
@@ -0,0 +1,25 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Raaz.Verse.ChaCha20.C.Portable where
+import Raaz.Core
+foreign import ccall unsafe verse_chacha20_c_portable
+        :: Ptr (Tuple 16 (LE Word32))
+        -> Word64
+        -> Ptr (Tuple 8 Word32)
+        -> Ptr (Tuple 3 Word32)
+        -> Ptr Word32
+        -> IO ()
+foreign import ccall unsafe verse_hchacha20_c_portable
+        :: Ptr (Tuple 8 Word32)
+        -> Word32
+        -> Word32
+        -> Word32
+        -> Word32
+        -> IO ()
+foreign import ccall unsafe verse_chacha20csprg_c_portable
+        :: Ptr (Tuple 16 Word32)
+        -> Word64
+        -> Ptr (Tuple 8 Word32)
+        -> Ptr (Tuple 3 Word32)
+        -> Ptr Word32
+        -> IO ()
diff --git a/libverse/Raaz/Verse/Poly1305/C/Portable.hs b/libverse/Raaz/Verse/Poly1305/C/Portable.hs
new file mode 100644
--- /dev/null
+++ b/libverse/Raaz/Verse/Poly1305/C/Portable.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Raaz.Verse.Poly1305.C.Portable where
+import Raaz.Core
+foreign import ccall unsafe verse_poly1305_c_portable_incremental
+        :: Ptr (Tuple 2 (LE Word64))
+        -> Word64
+        -> Ptr (Tuple 3 Word64)
+        -> Ptr (Tuple 2 Word64)
+        -> IO ()
+foreign import ccall unsafe verse_poly1305_c_portable_blockmac
+        :: Ptr (Tuple 2 (LE Word64))
+        -> Word64
+        -> Ptr (Tuple 3 Word64)
+        -> Ptr (Tuple 2 Word64)
+        -> Ptr (Tuple 2 Word64)
+        -> IO ()
+foreign import ccall unsafe verse_poly1305_c_portable_clamp
+        :: Ptr (Tuple 2 Word64)
+        -> Word64
+        -> IO ()
+foreign import ccall unsafe verse_poly1305_c_portable_partialmac
+        :: Ptr (Tuple 2 (LE Word64))
+        -> Ptr (Tuple 3 Word64)
+        -> Ptr (Tuple 2 Word64)
+        -> Ptr (Tuple 2 Word64)
+        -> IO ()
diff --git a/libverse/Raaz/Verse/Sha256/C/Portable.hs b/libverse/Raaz/Verse/Sha256/C/Portable.hs
new file mode 100644
--- /dev/null
+++ b/libverse/Raaz/Verse/Sha256/C/Portable.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Raaz.Verse.Sha256.C.Portable where
+import Raaz.Core
+foreign import ccall unsafe verse_sha256_c_portable
+        :: Ptr (Tuple 16 (BE Word32))
+        -> Word64
+        -> Ptr (Tuple 8 Word32)
+        -> IO ()
diff --git a/libverse/Raaz/Verse/Sha512/C/Portable.hs b/libverse/Raaz/Verse/Sha512/C/Portable.hs
new file mode 100644
--- /dev/null
+++ b/libverse/Raaz/Verse/Sha512/C/Portable.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE DataKinds #-}
+{-# LANGUAGE ForeignFunctionInterface #-}
+module Raaz.Verse.Sha512.C.Portable where
+import Raaz.Core
+foreign import ccall unsafe verse_sha512_c_portable
+        :: Ptr (Tuple 16 (BE Word64))
+        -> Word64
+        -> Ptr (Tuple 8 Word64)
+        -> IO ()
diff --git a/libverse/blake2b/c/portable.c b/libverse/blake2b/c/portable.c
new file mode 100644
--- /dev/null
+++ b/libverse/blake2b/c/portable.c
@@ -0,0 +1,2943 @@
+#include <stdint.h>
+#include <verse.h>
+#define XOR ^
+void verse_blake2b_c_portable_iter(uint64_t(*bPtr)[16],
+				   uint64_t cTr, uint64_t(*v0),
+				   uint64_t(*v1), uint64_t v2[8])
+{
+	auto uint64_t v3;
+	auto uint64_t v4;
+	auto uint64_t v5;
+	auto uint64_t v6;
+	auto uint64_t v7;
+	auto uint64_t v8;
+	auto uint64_t v9;
+	auto uint64_t v10;
+	auto uint64_t v11;
+	auto uint64_t v12;
+	auto uint64_t v13;
+	auto uint64_t v14;
+	auto uint64_t v15;
+	auto uint64_t v16;
+	auto uint64_t v17;
+	auto uint64_t v18;
+	auto uint64_t v19;
+	auto uint64_t v20;
+	auto uint64_t v21;
+	auto uint64_t v22;
+	auto uint64_t v23;
+	auto uint64_t v24;
+	auto uint64_t v25;
+	auto uint64_t v26;
+	auto uint64_t v27;
+	auto uint64_t v28;
+	auto uint64_t v29;
+	auto uint64_t v30;
+	auto uint64_t v31;
+	auto uint64_t v32;
+	auto uint64_t v33;
+	auto uint64_t v34;
+	auto uint64_t v35;
+	auto uint64_t v36;
+	auto uint64_t v37;
+	auto uint64_t v38;
+	auto uint64_t v39;
+	auto uint64_t v40;
+	auto uint64_t v41;
+	auto uint64_t v42;
+	auto uint64_t v43;
+	auto uint64_t v44;
+	auto uint64_t v45;
+	auto uint64_t v46;
+	v45 = *v0;
+	v46 = *v1;
+	v3 = v2[0];
+	v4 = v2[1];
+	v5 = v2[2];
+	v6 = v2[3];
+	v7 = v2[4];
+	v8 = v2[5];
+	v9 = v2[6];
+	v10 = v2[7];
+	while (cTr > 0) {
+		v44 = v46;
+		v44 >>= 63;
+		v43 = v46 & 0x7fffffffffffffffULL;
+		v43 += 0x0000000000000080ULL;
+		v43 >>= 63;
+		v43 += v44;
+		v43 >>= 1;
+		v45 += v43;
+		v46 += 0x0000000000000080ULL;
+		v27 = v3;
+		v31 = v4;
+		v35 = v5;
+		v39 = v6;
+		v28 = v7;
+		v32 = v8;
+		v36 = v9;
+		v40 = v10;
+		v29 = 0x6a09e667f3bcc908ULL;
+		v33 = 0xbb67ae8584caa73bULL;
+		v37 = 0x3c6ef372fe94f82bULL;
+		v41 = 0xa54ff53a5f1d36f1ULL;
+		v30 = 0x510e527fade682d1ULL XOR v46;
+		v34 = 0x9b05688c2b3e6c1fULL XOR v45;
+		v38 = 0x1f83d9abfb41bd6bULL;
+		v42 = 0x5be0cd19137e2179ULL;
+		v11 = verse_from_le64((*bPtr)[0]);
+		v12 = verse_from_le64((*bPtr)[1]);
+		v13 = verse_from_le64((*bPtr)[2]);
+		v14 = verse_from_le64((*bPtr)[3]);
+		v15 = verse_from_le64((*bPtr)[4]);
+		v16 = verse_from_le64((*bPtr)[5]);
+		v17 = verse_from_le64((*bPtr)[6]);
+		v18 = verse_from_le64((*bPtr)[7]);
+		v19 = verse_from_le64((*bPtr)[8]);
+		v20 = verse_from_le64((*bPtr)[9]);
+		v21 = verse_from_le64((*bPtr)[10]);
+		v22 = verse_from_le64((*bPtr)[11]);
+		v23 = verse_from_le64((*bPtr)[12]);
+		v24 = verse_from_le64((*bPtr)[13]);
+		v25 = verse_from_le64((*bPtr)[14]);
+		v26 = verse_from_le64((*bPtr)[15]);
+		v27 += v28;
+		v27 += v11;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v12;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v13;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v14;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v15;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v16;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v17;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v18;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v19;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v20;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v21;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v22;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v23;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v24;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v25;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v26;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v25;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v21;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v15;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v19;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v20;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v26;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v24;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v17;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v12;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v23;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v11;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v13;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v22;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v18;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v16;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v14;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v22;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v19;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v23;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v11;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v16;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v13;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v26;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v24;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v21;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v25;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v14;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v17;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v18;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v12;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v20;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v15;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v18;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v20;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v14;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v12;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v24;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v23;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v22;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v25;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v13;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v17;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v16;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v21;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v15;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v11;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v26;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v19;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v20;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v11;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v16;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v18;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v13;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v15;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v21;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v26;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v25;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v12;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v22;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v23;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v17;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v19;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v14;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v24;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v13;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v23;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v17;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v21;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v11;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v22;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v19;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v14;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v15;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v24;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v18;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v16;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v26;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v25;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v12;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v20;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v23;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v16;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v12;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v26;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v25;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v24;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v15;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v21;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v11;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v18;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v17;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v14;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v20;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v13;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v19;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v22;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v24;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v22;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v18;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v25;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v23;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v12;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v14;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v20;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v16;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v11;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v26;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v15;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v19;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v17;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v13;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v21;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v17;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v26;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v25;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v20;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v22;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v14;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v11;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v19;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v23;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v13;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v24;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v18;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v12;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v15;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v21;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v16;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v21;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v13;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v19;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v15;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v18;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v17;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v12;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v16;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v26;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v22;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v20;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v25;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v14;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v23;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v24;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v11;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v11;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v12;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v13;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v14;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v15;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v16;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v17;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v18;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v19;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v20;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v21;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v22;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v23;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v24;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v25;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v26;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v27 += v28;
+		v27 += v25;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 32);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 24);
+		v27 += v28;
+		v27 += v21;
+		v30 ^= v27;
+		v30 = verse_rotR64(v30, 16);
+		v29 += v30;
+		v28 ^= v29;
+		v28 = verse_rotR64(v28, 63);
+		v31 += v32;
+		v31 += v15;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 32);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 24);
+		v31 += v32;
+		v31 += v19;
+		v34 ^= v31;
+		v34 = verse_rotR64(v34, 16);
+		v33 += v34;
+		v32 ^= v33;
+		v32 = verse_rotR64(v32, 63);
+		v35 += v36;
+		v35 += v20;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 32);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 24);
+		v35 += v36;
+		v35 += v26;
+		v38 ^= v35;
+		v38 = verse_rotR64(v38, 16);
+		v37 += v38;
+		v36 ^= v37;
+		v36 = verse_rotR64(v36, 63);
+		v39 += v40;
+		v39 += v24;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 32);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 24);
+		v39 += v40;
+		v39 += v17;
+		v42 ^= v39;
+		v42 = verse_rotR64(v42, 16);
+		v41 += v42;
+		v40 ^= v41;
+		v40 = verse_rotR64(v40, 63);
+		v27 += v32;
+		v27 += v12;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 32);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 24);
+		v27 += v32;
+		v27 += v23;
+		v42 ^= v27;
+		v42 = verse_rotR64(v42, 16);
+		v37 += v42;
+		v32 ^= v37;
+		v32 = verse_rotR64(v32, 63);
+		v31 += v36;
+		v31 += v11;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 32);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 24);
+		v31 += v36;
+		v31 += v13;
+		v30 ^= v31;
+		v30 = verse_rotR64(v30, 16);
+		v41 += v30;
+		v36 ^= v41;
+		v36 = verse_rotR64(v36, 63);
+		v35 += v40;
+		v35 += v22;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 32);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 24);
+		v35 += v40;
+		v35 += v18;
+		v34 ^= v35;
+		v34 = verse_rotR64(v34, 16);
+		v29 += v34;
+		v40 ^= v29;
+		v40 = verse_rotR64(v40, 63);
+		v39 += v28;
+		v39 += v16;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 32);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 24);
+		v39 += v28;
+		v39 += v14;
+		v38 ^= v39;
+		v38 = verse_rotR64(v38, 16);
+		v33 += v38;
+		v28 ^= v33;
+		v28 = verse_rotR64(v28, 63);
+		v3 ^= v27;
+		v3 ^= v29;
+		v4 ^= v31;
+		v4 ^= v33;
+		v5 ^= v35;
+		v5 ^= v37;
+		v6 ^= v39;
+		v6 ^= v41;
+		v7 ^= v28;
+		v7 ^= v30;
+		v8 ^= v32;
+		v8 ^= v34;
+		v9 ^= v36;
+		v9 ^= v38;
+		v10 ^= v40;
+		v10 ^= v42;
+		++bPtr;
+		--cTr;
+	};
+	v0[0] = v45;
+	v1[0] = v46;
+	v2[0] = v3;
+	v2[1] = v4;
+	v2[2] = v5;
+	v2[3] = v6;
+	v2[4] = v7;
+	v2[5] = v8;
+	v2[6] = v9;
+	v2[7] = v10;
+}
+
+void verse_blake2b_c_portable_last(uint64_t v0[16],
+				   uint64_t v1, uint64_t v2,
+				   uint64_t v3, uint64_t v4,
+				   uint64_t v5, uint64_t v6[8])
+{
+	auto uint64_t v7;
+	auto uint64_t v8;
+	auto uint64_t v9;
+	auto uint64_t v10;
+	auto uint64_t v11;
+	auto uint64_t v12;
+	auto uint64_t v13;
+	auto uint64_t v14;
+	auto uint64_t v15;
+	auto uint64_t v16;
+	auto uint64_t v17;
+	auto uint64_t v18;
+	auto uint64_t v19;
+	auto uint64_t v20;
+	auto uint64_t v21;
+	auto uint64_t v22;
+	auto uint64_t v23;
+	auto uint64_t v24;
+	auto uint64_t v25;
+	auto uint64_t v26;
+	auto uint64_t v27;
+	auto uint64_t v28;
+	auto uint64_t v29;
+	auto uint64_t v30;
+	auto uint64_t v31;
+	auto uint64_t v32;
+	auto uint64_t v33;
+	auto uint64_t v34;
+	auto uint64_t v35;
+	auto uint64_t v36;
+	auto uint64_t v37;
+	auto uint64_t v38;
+	auto uint64_t v39;
+	auto uint64_t v40;
+	auto uint64_t v41;
+	auto uint64_t v42;
+	auto uint64_t v43;
+	auto uint64_t v44;
+	auto uint64_t v45;
+	auto uint64_t v46;
+	auto uint64_t v47;
+	auto uint64_t v48;
+	v7 = v6[0];
+	v8 = v6[1];
+	v9 = v6[2];
+	v10 = v6[3];
+	v11 = v6[4];
+	v12 = v6[5];
+	v13 = v6[6];
+	v14 = v6[7];
+	v48 = v3;
+	v48 >>= 63;
+	v47 = v3 & 0x7fffffffffffffffULL;
+	v47 += v1;
+	v47 >>= 63;
+	v47 += v48;
+	v47 >>= 1;
+	v2 += v47;
+	v3 += v1;
+	v31 = v7;
+	v35 = v8;
+	v39 = v9;
+	v43 = v10;
+	v32 = v11;
+	v36 = v12;
+	v40 = v13;
+	v44 = v14;
+	v33 = 0x6a09e667f3bcc908ULL;
+	v37 = 0xbb67ae8584caa73bULL;
+	v41 = 0x3c6ef372fe94f82bULL;
+	v45 = 0xa54ff53a5f1d36f1ULL;
+	v34 = 0x510e527fade682d1ULL XOR v3;
+	v38 = 0x9b05688c2b3e6c1fULL XOR v2;
+	v42 = 0x1f83d9abfb41bd6bULL XOR v4;
+	v46 = 0x5be0cd19137e2179ULL XOR v5;
+	v15 = verse_from_le64(v0[0]);
+	v16 = verse_from_le64(v0[1]);
+	v17 = verse_from_le64(v0[2]);
+	v18 = verse_from_le64(v0[3]);
+	v19 = verse_from_le64(v0[4]);
+	v20 = verse_from_le64(v0[5]);
+	v21 = verse_from_le64(v0[6]);
+	v22 = verse_from_le64(v0[7]);
+	v23 = verse_from_le64(v0[8]);
+	v24 = verse_from_le64(v0[9]);
+	v25 = verse_from_le64(v0[10]);
+	v26 = verse_from_le64(v0[11]);
+	v27 = verse_from_le64(v0[12]);
+	v28 = verse_from_le64(v0[13]);
+	v29 = verse_from_le64(v0[14]);
+	v30 = verse_from_le64(v0[15]);
+	v31 += v32;
+	v31 += v15;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v16;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v17;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v18;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v19;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v20;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v21;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v22;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v23;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v24;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v25;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v26;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v27;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v28;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v29;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v30;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v29;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v25;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v19;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v23;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v24;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v30;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v28;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v21;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v16;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v27;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v15;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v17;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v26;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v22;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v20;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v18;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v26;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v23;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v27;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v15;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v20;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v17;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v30;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v28;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v25;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v29;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v18;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v21;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v22;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v16;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v24;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v19;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v22;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v24;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v18;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v16;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v28;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v27;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v26;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v29;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v17;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v21;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v20;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v25;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v19;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v15;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v30;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v23;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v24;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v15;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v20;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v22;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v17;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v19;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v25;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v30;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v29;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v16;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v26;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v27;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v21;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v23;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v18;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v28;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v17;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v27;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v21;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v25;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v15;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v26;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v23;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v18;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v19;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v28;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v22;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v20;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v30;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v29;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v16;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v24;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v27;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v20;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v16;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v30;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v29;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v28;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v19;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v25;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v15;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v22;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v21;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v18;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v24;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v17;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v23;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v26;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v28;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v26;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v22;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v29;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v27;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v16;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v18;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v24;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v20;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v15;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v30;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v19;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v23;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v21;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v17;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v25;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v21;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v30;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v29;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v24;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v26;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v18;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v15;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v23;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v27;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v17;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v28;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v22;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v16;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v19;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v25;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v20;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v25;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v17;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v23;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v19;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v22;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v21;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v16;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v20;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v30;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v26;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v24;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v29;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v18;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v27;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v28;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v15;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v15;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v16;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v17;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v18;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v19;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v20;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v21;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v22;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v23;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v24;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v25;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v26;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v27;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v28;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v29;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v30;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v31 += v32;
+	v31 += v29;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 32);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 24);
+	v31 += v32;
+	v31 += v25;
+	v34 ^= v31;
+	v34 = verse_rotR64(v34, 16);
+	v33 += v34;
+	v32 ^= v33;
+	v32 = verse_rotR64(v32, 63);
+	v35 += v36;
+	v35 += v19;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 32);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 24);
+	v35 += v36;
+	v35 += v23;
+	v38 ^= v35;
+	v38 = verse_rotR64(v38, 16);
+	v37 += v38;
+	v36 ^= v37;
+	v36 = verse_rotR64(v36, 63);
+	v39 += v40;
+	v39 += v24;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 32);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 24);
+	v39 += v40;
+	v39 += v30;
+	v42 ^= v39;
+	v42 = verse_rotR64(v42, 16);
+	v41 += v42;
+	v40 ^= v41;
+	v40 = verse_rotR64(v40, 63);
+	v43 += v44;
+	v43 += v28;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 32);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 24);
+	v43 += v44;
+	v43 += v21;
+	v46 ^= v43;
+	v46 = verse_rotR64(v46, 16);
+	v45 += v46;
+	v44 ^= v45;
+	v44 = verse_rotR64(v44, 63);
+	v31 += v36;
+	v31 += v16;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 32);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 24);
+	v31 += v36;
+	v31 += v27;
+	v46 ^= v31;
+	v46 = verse_rotR64(v46, 16);
+	v41 += v46;
+	v36 ^= v41;
+	v36 = verse_rotR64(v36, 63);
+	v35 += v40;
+	v35 += v15;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 32);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 24);
+	v35 += v40;
+	v35 += v17;
+	v34 ^= v35;
+	v34 = verse_rotR64(v34, 16);
+	v45 += v34;
+	v40 ^= v45;
+	v40 = verse_rotR64(v40, 63);
+	v39 += v44;
+	v39 += v26;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 32);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 24);
+	v39 += v44;
+	v39 += v22;
+	v38 ^= v39;
+	v38 = verse_rotR64(v38, 16);
+	v33 += v38;
+	v44 ^= v33;
+	v44 = verse_rotR64(v44, 63);
+	v43 += v32;
+	v43 += v20;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 32);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 24);
+	v43 += v32;
+	v43 += v18;
+	v42 ^= v43;
+	v42 = verse_rotR64(v42, 16);
+	v37 += v42;
+	v32 ^= v37;
+	v32 = verse_rotR64(v32, 63);
+	v7 ^= v31;
+	v7 ^= v33;
+	v8 ^= v35;
+	v8 ^= v37;
+	v9 ^= v39;
+	v9 ^= v41;
+	v10 ^= v43;
+	v10 ^= v45;
+	v11 ^= v32;
+	v11 ^= v34;
+	v12 ^= v36;
+	v12 ^= v38;
+	v13 ^= v40;
+	v13 ^= v42;
+	v14 ^= v44;
+	v14 ^= v46;
+	v6[0] = v7;
+	v6[1] = v8;
+	v6[2] = v9;
+	v6[3] = v10;
+	v6[4] = v11;
+	v6[5] = v12;
+	v6[6] = v13;
+	v6[7] = v14;
+}
diff --git a/libverse/chacha20/c/portable.c b/libverse/chacha20/c/portable.c
new file mode 100644
--- /dev/null
+++ b/libverse/chacha20/c/portable.c
@@ -0,0 +1,3116 @@
+#include <stdint.h>
+#include <verse.h>
+#define XOR ^
+void verse_chacha20_c_portable(uint32_t(*bPtr)[16],
+			       uint64_t cTr, uint32_t v0[8], uint32_t v1[3],
+			       uint32_t(*v2))
+{
+	auto uint32_t v3;
+	auto uint32_t v4;
+	auto uint32_t v5;
+	auto uint32_t v6;
+	auto uint32_t v7;
+	auto uint32_t v8;
+	auto uint32_t v9;
+	auto uint32_t v10;
+	auto uint32_t v11;
+	auto uint32_t v12;
+	auto uint32_t v13;
+	auto uint32_t v14;
+	auto uint32_t v15;
+	auto uint32_t v16;
+	auto uint32_t v17;
+	auto uint32_t v18;
+	auto uint32_t v19;
+	auto uint32_t v20;
+	v4 = *v2;
+	while (cTr > 0) {
+		v5 = 0x61707865UL;
+		v6 = 0x3320646eUL;
+		v7 = 0x79622d32UL;
+		v8 = 0x6b206574UL;
+		v9 = v0[0];
+		v10 = v0[1];
+		v11 = v0[2];
+		v12 = v0[3];
+		v13 = v0[4];
+		v14 = v0[5];
+		v15 = v0[6];
+		v16 = v0[7];
+		v17 = v4;
+		v18 = v1[0];
+		v19 = v1[1];
+		v20 = v1[2];
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 16);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 12);
+		v8 += v12;
+		v20 ^= v8;
+		v20 = verse_rotL32(v20, 8);
+		v16 += v20;
+		v12 ^= v16;
+		v12 = verse_rotL32(v12, 7);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 16);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v20 ^= v5;
+		v20 = verse_rotL32(v20, 8);
+		v15 += v20;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v16 += v17;
+		v11 ^= v16;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 12);
+		v7 += v12;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v12 ^= v13;
+		v12 = verse_rotL32(v12, 7);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v8 += v9;
+		v19 ^= v8;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += 0x61707865UL;
+		v6 += 0x3320646eUL;
+		v7 += 0x79622d32UL;
+		v8 += 0x6b206574UL;
+		v9 += v0[0];
+		v10 += v0[1];
+		v11 += v0[2];
+		v12 += v0[3];
+		v13 += v0[4];
+		v14 += v0[5];
+		v15 += v0[6];
+		v16 += v0[7];
+		v17 += v4;
+		v18 += v1[0];
+		v19 += v1[1];
+		v20 += v1[2];
+		v3 = verse_from_le32((*bPtr)[0]);
+		v3 ^= v5;
+		(*bPtr)[0] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[1]);
+		v3 ^= v6;
+		(*bPtr)[1] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[2]);
+		v3 ^= v7;
+		(*bPtr)[2] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[3]);
+		v3 ^= v8;
+		(*bPtr)[3] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[4]);
+		v3 ^= v9;
+		(*bPtr)[4] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[5]);
+		v3 ^= v10;
+		(*bPtr)[5] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[6]);
+		v3 ^= v11;
+		(*bPtr)[6] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[7]);
+		v3 ^= v12;
+		(*bPtr)[7] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[8]);
+		v3 ^= v13;
+		(*bPtr)[8] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[9]);
+		v3 ^= v14;
+		(*bPtr)[9] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[10]);
+		v3 ^= v15;
+		(*bPtr)[10] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[11]);
+		v3 ^= v16;
+		(*bPtr)[11] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[12]);
+		v3 ^= v17;
+		(*bPtr)[12] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[13]);
+		v3 ^= v18;
+		(*bPtr)[13] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[14]);
+		v3 ^= v19;
+		(*bPtr)[14] = verse_to_le32(v3);
+		v3 = verse_from_le32((*bPtr)[15]);
+		v3 ^= v20;
+		(*bPtr)[15] = verse_to_le32(v3);
+		v4 += 0x00000001UL;
+		++bPtr;
+		--cTr;
+	};
+	v2[0] = v4;
+}
+
+void verse_hchacha20_c_portable(uint32_t v0[8], uint32_t v1,
+				uint32_t v2, uint32_t v3, uint32_t v4)
+{
+	auto uint32_t v5;
+	auto uint32_t v6;
+	auto uint32_t v7;
+	auto uint32_t v8;
+	auto uint32_t v9;
+	auto uint32_t v10;
+	auto uint32_t v11;
+	auto uint32_t v12;
+	auto uint32_t v13;
+	auto uint32_t v14;
+	auto uint32_t v15;
+	auto uint32_t v16;
+	auto uint32_t v17;
+	auto uint32_t v18;
+	auto uint32_t v19;
+	auto uint32_t v20;
+	v5 = 0x61707865UL;
+	v6 = 0x3320646eUL;
+	v7 = 0x79622d32UL;
+	v8 = 0x6b206574UL;
+	v9 = v0[0];
+	v10 = v0[1];
+	v11 = v0[2];
+	v12 = v0[3];
+	v13 = v0[4];
+	v14 = v0[5];
+	v15 = v0[6];
+	v16 = v0[7];
+	v17 = v1;
+	v18 = v2;
+	v19 = v3;
+	v20 = v4;
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 16);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 12);
+	v5 += v9;
+	v17 ^= v5;
+	v17 = verse_rotL32(v17, 8);
+	v13 += v17;
+	v9 ^= v13;
+	v9 = verse_rotL32(v9, 7);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 16);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 12);
+	v6 += v10;
+	v18 ^= v6;
+	v18 = verse_rotL32(v18, 8);
+	v14 += v18;
+	v10 ^= v14;
+	v10 = verse_rotL32(v10, 7);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 16);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 12);
+	v7 += v11;
+	v19 ^= v7;
+	v19 = verse_rotL32(v19, 8);
+	v15 += v19;
+	v11 ^= v15;
+	v11 = verse_rotL32(v11, 7);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 16);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 12);
+	v8 += v12;
+	v20 ^= v8;
+	v20 = verse_rotL32(v20, 8);
+	v16 += v20;
+	v12 ^= v16;
+	v12 = verse_rotL32(v12, 7);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 16);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 12);
+	v5 += v10;
+	v20 ^= v5;
+	v20 = verse_rotL32(v20, 8);
+	v15 += v20;
+	v10 ^= v15;
+	v10 = verse_rotL32(v10, 7);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 16);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 12);
+	v6 += v11;
+	v17 ^= v6;
+	v17 = verse_rotL32(v17, 8);
+	v16 += v17;
+	v11 ^= v16;
+	v11 = verse_rotL32(v11, 7);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 16);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 12);
+	v7 += v12;
+	v18 ^= v7;
+	v18 = verse_rotL32(v18, 8);
+	v13 += v18;
+	v12 ^= v13;
+	v12 = verse_rotL32(v12, 7);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 16);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 12);
+	v8 += v9;
+	v19 ^= v8;
+	v19 = verse_rotL32(v19, 8);
+	v14 += v19;
+	v9 ^= v14;
+	v9 = verse_rotL32(v9, 7);
+	v0[0] = v5;
+	v0[1] = v6;
+	v0[2] = v7;
+	v0[3] = v8;
+	v0[4] = v17;
+	v0[5] = v18;
+	v0[6] = v19;
+	v0[7] = v20;
+}
+
+void verse_chacha20csprg_c_portable(uint32_t(*bPtr)[16],
+				    uint64_t cTr, uint32_t v0[8],
+				    uint32_t v1[3], uint32_t(*v2))
+{
+	auto uint32_t v3;
+	auto uint32_t v4;
+	auto uint32_t v5;
+	auto uint32_t v6;
+	auto uint32_t v7;
+	auto uint32_t v8;
+	auto uint32_t v9;
+	auto uint32_t v10;
+	auto uint32_t v11;
+	auto uint32_t v12;
+	auto uint32_t v13;
+	auto uint32_t v14;
+	auto uint32_t v15;
+	auto uint32_t v16;
+	auto uint32_t v17;
+	auto uint32_t v18;
+	auto uint32_t v19;
+	v3 = *v2;
+	while (cTr > 0) {
+		v4 = 0x61707865UL;
+		v5 = 0x3320646eUL;
+		v6 = 0x79622d32UL;
+		v7 = 0x6b206574UL;
+		v8 = v0[0];
+		v9 = v0[1];
+		v10 = v0[2];
+		v11 = v0[3];
+		v12 = v0[4];
+		v13 = v0[5];
+		v14 = v0[6];
+		v15 = v0[7];
+		v16 = v3;
+		v17 = v1[0];
+		v18 = v1[1];
+		v19 = v1[2];
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 16);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 12);
+		v4 += v8;
+		v16 ^= v4;
+		v16 = verse_rotL32(v16, 8);
+		v12 += v16;
+		v8 ^= v12;
+		v8 = verse_rotL32(v8, 7);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 16);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 12);
+		v5 += v9;
+		v17 ^= v5;
+		v17 = verse_rotL32(v17, 8);
+		v13 += v17;
+		v9 ^= v13;
+		v9 = verse_rotL32(v9, 7);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 16);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 12);
+		v6 += v10;
+		v18 ^= v6;
+		v18 = verse_rotL32(v18, 8);
+		v14 += v18;
+		v10 ^= v14;
+		v10 = verse_rotL32(v10, 7);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 16);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 12);
+		v7 += v11;
+		v19 ^= v7;
+		v19 = verse_rotL32(v19, 8);
+		v15 += v19;
+		v11 ^= v15;
+		v11 = verse_rotL32(v11, 7);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 16);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 12);
+		v4 += v9;
+		v19 ^= v4;
+		v19 = verse_rotL32(v19, 8);
+		v14 += v19;
+		v9 ^= v14;
+		v9 = verse_rotL32(v9, 7);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 16);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 12);
+		v5 += v10;
+		v16 ^= v5;
+		v16 = verse_rotL32(v16, 8);
+		v15 += v16;
+		v10 ^= v15;
+		v10 = verse_rotL32(v10, 7);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 16);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 12);
+		v6 += v11;
+		v17 ^= v6;
+		v17 = verse_rotL32(v17, 8);
+		v12 += v17;
+		v11 ^= v12;
+		v11 = verse_rotL32(v11, 7);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 16);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 12);
+		v7 += v8;
+		v18 ^= v7;
+		v18 = verse_rotL32(v18, 8);
+		v13 += v18;
+		v8 ^= v13;
+		v8 = verse_rotL32(v8, 7);
+		v4 += 0x61707865UL;
+		v5 += 0x3320646eUL;
+		v6 += 0x79622d32UL;
+		v7 += 0x6b206574UL;
+		v8 += v0[0];
+		v9 += v0[1];
+		v10 += v0[2];
+		v11 += v0[3];
+		v12 += v0[4];
+		v13 += v0[5];
+		v14 += v0[6];
+		v15 += v0[7];
+		v16 += v3;
+		v17 += v1[0];
+		v18 += v1[1];
+		v19 += v1[2];
+		(*bPtr)[0] = v4;
+		(*bPtr)[1] = v5;
+		(*bPtr)[2] = v6;
+		(*bPtr)[3] = v7;
+		(*bPtr)[4] = v8;
+		(*bPtr)[5] = v9;
+		(*bPtr)[6] = v10;
+		(*bPtr)[7] = v11;
+		(*bPtr)[8] = v12;
+		(*bPtr)[9] = v13;
+		(*bPtr)[10] = v14;
+		(*bPtr)[11] = v15;
+		(*bPtr)[12] = v16;
+		(*bPtr)[13] = v17;
+		(*bPtr)[14] = v18;
+		(*bPtr)[15] = v19;
+		v3 += 0x00000001UL;
+		++bPtr;
+		--cTr;
+	};
+	v2[0] = v3;
+}
diff --git a/libverse/poly1305/c/portable.c b/libverse/poly1305/c/portable.c
new file mode 100644
--- /dev/null
+++ b/libverse/poly1305/c/portable.c
@@ -0,0 +1,477 @@
+#include <stdint.h>
+#include <verse.h>
+#define XOR ^
+void verse_poly1305_c_portable_incremental(uint64_t(*bPtr)[2],
+					   uint64_t cTr, uint64_t v0[3],
+					   uint64_t v1[2])
+{
+	auto uint64_t v2;
+	auto uint64_t v3;
+	auto uint64_t v4;
+	auto uint64_t v5;
+	auto uint64_t v6;
+	auto uint64_t v7;
+	auto uint64_t v8;
+	auto uint64_t v9;
+	auto uint64_t v10;
+	auto uint64_t v11;
+	auto uint64_t v12;
+	auto uint64_t v13;
+	auto uint64_t v14;
+	auto uint64_t v15;
+	auto uint64_t v16;
+	v3 = v0[0];
+	v2 = v3 & 0x00000000ffffffffULL;
+	v3 >>= 32;
+	v5 = v0[1];
+	v4 = v5 & 0x00000000ffffffffULL;
+	v5 >>= 32;
+	v6 = v0[2];
+	v8 = v1[0];
+	v7 = v8 & 0x00000000ffffffffULL;
+	v8 >>= 32;
+	v10 = v1[1];
+	v9 = v10 & 0x00000000ffffffffULL;
+	v10 >>= 32;
+	while (cTr > 0) {
+		v16 = verse_from_le64((*bPtr)[0]);
+		v15 = v16 & 0x00000000ffffffffULL;
+		v16 >>= 32;
+		v2 += v15;
+		v3 += v16;
+		v16 = verse_from_le64((*bPtr)[1]);
+		v15 = v16 & 0x00000000ffffffffULL;
+		v16 >>= 32;
+		v4 += v15;
+		v5 += v16;
+		v6 += 0x0000000000000001ULL;
+		v13 = v2 * v10;
+		v15 = v3 * v9;
+		v13 += v15;
+		v15 = v4 * v8;
+		v13 += v15;
+		v15 = v5 * v7;
+		v13 += v15;
+		v12 = v2 * v9;
+		v15 = v3 * v8;
+		v12 += v15;
+		v15 = v4 * v7;
+		v12 += v15;
+		v11 = v2 * v8;
+		v15 = v3 * v7;
+		v11 += v15;
+		v2 *= v7;
+		v15 = v10 >> 2;
+		v15 += v10;
+		v16 = v3 * v15;
+		v2 += v16;
+		v16 = v4 * v15;
+		v3 = v11 + v16;
+		v16 = v5 * v15;
+		v12 += v16;
+		v16 = v6 * v15;
+		v13 += v16;
+		v15 = v9 >> 2;
+		v15 += v9;
+		v16 = v4 * v15;
+		v2 += v16;
+		v16 = v5 * v15;
+		v3 += v16;
+		v16 = v6 * v15;
+		v4 = v12 + v16;
+		v15 = v8 >> 2;
+		v15 += v8;
+		v16 = v5 * v15;
+		v2 += v16;
+		v16 = v6 * v15;
+		v3 += v16;
+		v15 = v7 >> 2;
+		v15 *= 0x0000000000000005ULL;
+		v16 = v6 * v15;
+		v2 += v16;
+		v5 = v13;
+		v14 = v7 & 0x0000000000000003ULL;
+		v6 *= v14;
+		v15 = v5 >> 32;
+		v5 &= 0x00000000ffffffffULL;
+		v6 += v15;
+		v15 = v6 >> 2;
+		v6 &= 0x0000000000000003ULL;
+		v15 *= 0x0000000000000005ULL;
+		v2 += v15;
+		v15 = v2 >> 32;
+		v2 &= 0x00000000ffffffffULL;
+		v3 += v15;
+		v15 = v3 >> 32;
+		v3 &= 0x00000000ffffffffULL;
+		v4 += v15;
+		v15 = v4 >> 32;
+		v4 &= 0x00000000ffffffffULL;
+		v5 += v15;
+		v15 = v5 >> 32;
+		v5 &= 0x00000000ffffffffULL;
+		v6 += v15;
+		++bPtr;
+		--cTr;
+	};
+	v3 <<= 32;
+	v3 |= v2;
+	v0[0] = v3;
+	v5 <<= 32;
+	v5 |= v4;
+	v0[1] = v5;
+	v0[2] = v6;
+}
+
+void verse_poly1305_c_portable_blockmac(uint64_t(*bPtr)[2],
+					uint64_t cTr, uint64_t v0[3],
+					uint64_t v1[2], uint64_t v2[2])
+{
+	auto uint64_t v3;
+	auto uint64_t v4;
+	auto uint64_t v5;
+	auto uint64_t v6;
+	auto uint64_t v7;
+	auto uint64_t v8;
+	auto uint64_t v9;
+	auto uint64_t v10;
+	auto uint64_t v11;
+	auto uint64_t v12;
+	auto uint64_t v13;
+	auto uint64_t v14;
+	auto uint64_t v15;
+	auto uint64_t v16;
+	auto uint64_t v17;
+	v4 = v0[0];
+	v3 = v4 & 0x00000000ffffffffULL;
+	v4 >>= 32;
+	v6 = v0[1];
+	v5 = v6 & 0x00000000ffffffffULL;
+	v6 >>= 32;
+	v7 = v0[2];
+	v9 = v1[0];
+	v8 = v9 & 0x00000000ffffffffULL;
+	v9 >>= 32;
+	v11 = v1[1];
+	v10 = v11 & 0x00000000ffffffffULL;
+	v11 >>= 32;
+	while (cTr > 0) {
+		v17 = verse_from_le64((*bPtr)[0]);
+		v16 = v17 & 0x00000000ffffffffULL;
+		v17 >>= 32;
+		v3 += v16;
+		v4 += v17;
+		v17 = verse_from_le64((*bPtr)[1]);
+		v16 = v17 & 0x00000000ffffffffULL;
+		v17 >>= 32;
+		v5 += v16;
+		v6 += v17;
+		v7 += 0x0000000000000001ULL;
+		v14 = v3 * v11;
+		v16 = v4 * v10;
+		v14 += v16;
+		v16 = v5 * v9;
+		v14 += v16;
+		v16 = v6 * v8;
+		v14 += v16;
+		v13 = v3 * v10;
+		v16 = v4 * v9;
+		v13 += v16;
+		v16 = v5 * v8;
+		v13 += v16;
+		v12 = v3 * v9;
+		v16 = v4 * v8;
+		v12 += v16;
+		v3 *= v8;
+		v16 = v11 >> 2;
+		v16 += v11;
+		v17 = v4 * v16;
+		v3 += v17;
+		v17 = v5 * v16;
+		v4 = v12 + v17;
+		v17 = v6 * v16;
+		v13 += v17;
+		v17 = v7 * v16;
+		v14 += v17;
+		v16 = v10 >> 2;
+		v16 += v10;
+		v17 = v5 * v16;
+		v3 += v17;
+		v17 = v6 * v16;
+		v4 += v17;
+		v17 = v7 * v16;
+		v5 = v13 + v17;
+		v16 = v9 >> 2;
+		v16 += v9;
+		v17 = v6 * v16;
+		v3 += v17;
+		v17 = v7 * v16;
+		v4 += v17;
+		v16 = v8 >> 2;
+		v16 *= 0x0000000000000005ULL;
+		v17 = v7 * v16;
+		v3 += v17;
+		v6 = v14;
+		v15 = v8 & 0x0000000000000003ULL;
+		v7 *= v15;
+		v16 = v6 >> 32;
+		v6 &= 0x00000000ffffffffULL;
+		v7 += v16;
+		v16 = v7 >> 2;
+		v7 &= 0x0000000000000003ULL;
+		v16 *= 0x0000000000000005ULL;
+		v3 += v16;
+		v16 = v3 >> 32;
+		v3 &= 0x00000000ffffffffULL;
+		v4 += v16;
+		v16 = v4 >> 32;
+		v4 &= 0x00000000ffffffffULL;
+		v5 += v16;
+		v16 = v5 >> 32;
+		v5 &= 0x00000000ffffffffULL;
+		v6 += v16;
+		v16 = v6 >> 32;
+		v6 &= 0x00000000ffffffffULL;
+		v7 += v16;
+		++bPtr;
+		--cTr;
+	};
+	v16 = v7 >> 2;
+	v7 &= 0x0000000000000003ULL;
+	v16 *= 0x0000000000000005ULL;
+	v3 += v16;
+	v16 = v3 + 0x0000000000000005ULL;
+	v16 >>= 32;
+	v16 += v4;
+	v16 >>= 32;
+	v16 += v5;
+	v16 >>= 32;
+	v16 += v6;
+	v16 >>= 32;
+	v16 += v7;
+	v16 >>= 2;
+	v16 = v16 * 0x0000000000000005ULL;
+	v3 += v16;
+	v16 = v3 >> 32;
+	v3 &= 0x00000000ffffffffULL;
+	v4 += v16;
+	v16 = v4 >> 32;
+	v4 &= 0x00000000ffffffffULL;
+	v5 += v16;
+	v16 = v5 >> 32;
+	v5 &= 0x00000000ffffffffULL;
+	v6 += v16;
+	v16 = v6 >> 32;
+	v6 &= 0x00000000ffffffffULL;
+	v7 += v16;
+	v17 = v2[0];
+	v16 = v17 & 0x00000000ffffffffULL;
+	v17 >>= 32;
+	v3 += v16;
+	v4 += v17;
+	v17 = v2[1];
+	v16 = v17 & 0x00000000ffffffffULL;
+	v17 >>= 32;
+	v5 += v16;
+	v6 += v17;
+	v16 = v3 >> 32;
+	v3 &= 0x00000000ffffffffULL;
+	v4 += v16;
+	v16 = v4 >> 32;
+	v4 &= 0x00000000ffffffffULL;
+	v5 += v16;
+	v16 = v5 >> 32;
+	v5 &= 0x00000000ffffffffULL;
+	v6 += v16;
+	v16 = v6 >> 32;
+	v6 &= 0x00000000ffffffffULL;
+	v7 += v16;
+	v4 <<= 32;
+	v4 |= v3;
+	v0[0] = v4;
+	v6 <<= 32;
+	v6 |= v5;
+	v0[1] = v6;
+	v0[2] = v7;
+}
+
+void verse_poly1305_c_portable_partialmac(uint64_t v0[2], uint64_t v1[3],
+					  uint64_t v2[2], uint64_t v3[2])
+{
+	auto uint64_t v4;
+	auto uint64_t v5;
+	auto uint64_t v6;
+	auto uint64_t v7;
+	auto uint64_t v8;
+	auto uint64_t v9;
+	auto uint64_t v10;
+	auto uint64_t v11;
+	auto uint64_t v12;
+	auto uint64_t v13;
+	auto uint64_t v14;
+	auto uint64_t v15;
+	auto uint64_t v16;
+	auto uint64_t v17;
+	auto uint64_t v18;
+	v5 = v1[0];
+	v4 = v5 & 0x00000000ffffffffULL;
+	v5 >>= 32;
+	v7 = v1[1];
+	v6 = v7 & 0x00000000ffffffffULL;
+	v7 >>= 32;
+	v8 = v1[2];
+	v10 = v2[0];
+	v9 = v10 & 0x00000000ffffffffULL;
+	v10 >>= 32;
+	v12 = v2[1];
+	v11 = v12 & 0x00000000ffffffffULL;
+	v12 >>= 32;
+	v18 = verse_from_le64(v0[0]);
+	v17 = v18 & 0x00000000ffffffffULL;
+	v18 >>= 32;
+	v4 += v17;
+	v5 += v18;
+	v18 = verse_from_le64(v0[1]);
+	v17 = v18 & 0x00000000ffffffffULL;
+	v18 >>= 32;
+	v6 += v17;
+	v7 += v18;
+	v15 = v4 * v12;
+	v17 = v5 * v11;
+	v15 += v17;
+	v17 = v6 * v10;
+	v15 += v17;
+	v17 = v7 * v9;
+	v15 += v17;
+	v14 = v4 * v11;
+	v17 = v5 * v10;
+	v14 += v17;
+	v17 = v6 * v9;
+	v14 += v17;
+	v13 = v4 * v10;
+	v17 = v5 * v9;
+	v13 += v17;
+	v4 *= v9;
+	v17 = v12 >> 2;
+	v17 += v12;
+	v18 = v5 * v17;
+	v4 += v18;
+	v18 = v6 * v17;
+	v5 = v13 + v18;
+	v18 = v7 * v17;
+	v14 += v18;
+	v18 = v8 * v17;
+	v15 += v18;
+	v17 = v11 >> 2;
+	v17 += v11;
+	v18 = v6 * v17;
+	v4 += v18;
+	v18 = v7 * v17;
+	v5 += v18;
+	v18 = v8 * v17;
+	v6 = v14 + v18;
+	v17 = v10 >> 2;
+	v17 += v10;
+	v18 = v7 * v17;
+	v4 += v18;
+	v18 = v8 * v17;
+	v5 += v18;
+	v17 = v9 >> 2;
+	v17 *= 0x0000000000000005ULL;
+	v18 = v8 * v17;
+	v4 += v18;
+	v7 = v15;
+	v16 = v9 & 0x0000000000000003ULL;
+	v8 *= v16;
+	v17 = v7 >> 32;
+	v7 &= 0x00000000ffffffffULL;
+	v8 += v17;
+	v17 = v8 >> 2;
+	v8 &= 0x0000000000000003ULL;
+	v17 *= 0x0000000000000005ULL;
+	v4 += v17;
+	v17 = v4 >> 32;
+	v4 &= 0x00000000ffffffffULL;
+	v5 += v17;
+	v17 = v5 >> 32;
+	v5 &= 0x00000000ffffffffULL;
+	v6 += v17;
+	v17 = v6 >> 32;
+	v6 &= 0x00000000ffffffffULL;
+	v7 += v17;
+	v17 = v7 >> 32;
+	v7 &= 0x00000000ffffffffULL;
+	v8 += v17;
+	v17 = v8 >> 2;
+	v8 &= 0x0000000000000003ULL;
+	v17 *= 0x0000000000000005ULL;
+	v4 += v17;
+	v17 = v4 + 0x0000000000000005ULL;
+	v17 >>= 32;
+	v17 += v5;
+	v17 >>= 32;
+	v17 += v6;
+	v17 >>= 32;
+	v17 += v7;
+	v17 >>= 32;
+	v17 += v8;
+	v17 >>= 2;
+	v17 = v17 * 0x0000000000000005ULL;
+	v4 += v17;
+	v17 = v4 >> 32;
+	v4 &= 0x00000000ffffffffULL;
+	v5 += v17;
+	v17 = v5 >> 32;
+	v5 &= 0x00000000ffffffffULL;
+	v6 += v17;
+	v17 = v6 >> 32;
+	v6 &= 0x00000000ffffffffULL;
+	v7 += v17;
+	v17 = v7 >> 32;
+	v7 &= 0x00000000ffffffffULL;
+	v8 += v17;
+	v18 = v3[0];
+	v17 = v18 & 0x00000000ffffffffULL;
+	v18 >>= 32;
+	v4 += v17;
+	v5 += v18;
+	v18 = v3[1];
+	v17 = v18 & 0x00000000ffffffffULL;
+	v18 >>= 32;
+	v6 += v17;
+	v7 += v18;
+	v17 = v4 >> 32;
+	v4 &= 0x00000000ffffffffULL;
+	v5 += v17;
+	v17 = v5 >> 32;
+	v5 &= 0x00000000ffffffffULL;
+	v6 += v17;
+	v17 = v6 >> 32;
+	v6 &= 0x00000000ffffffffULL;
+	v7 += v17;
+	v17 = v7 >> 32;
+	v7 &= 0x00000000ffffffffULL;
+	v8 += v17;
+	v5 <<= 32;
+	v5 |= v4;
+	v1[0] = v5;
+	v7 <<= 32;
+	v7 |= v6;
+	v1[1] = v7;
+	v1[2] = v8;
+}
+
+void verse_poly1305_c_portable_clamp(uint64_t(*bPtr)[2], uint64_t cTr)
+{
+	auto uint64_t v0;
+	while (cTr > 0) {
+		v0 = (*bPtr)[0];
+		v0 &= 0x0ffffffc0fffffffULL;
+		(*bPtr)[0] = v0;
+		v0 = (*bPtr)[1];
+		v0 &= 0x0ffffffc0ffffffcULL;
+		(*bPtr)[1] = v0;
+		++bPtr;
+		--cTr;
+	};
+}
diff --git a/libverse/sha256/c/portable.c b/libverse/sha256/c/portable.c
new file mode 100644
--- /dev/null
+++ b/libverse/sha256/c/portable.c
@@ -0,0 +1,912 @@
+#include <stdint.h>
+#include <verse.h>
+#define XOR ^
+void verse_sha256_c_portable(uint32_t(*bPtr)[16], uint64_t cTr, uint32_t v0[8])
+{
+	auto uint32_t v1;
+	auto uint32_t v2;
+	auto uint32_t v3;
+	auto uint32_t v4;
+	auto uint32_t v5;
+	auto uint32_t v6;
+	auto uint32_t v7;
+	auto uint32_t v8;
+	auto uint32_t v9;
+	auto uint32_t v10;
+	auto uint32_t v11;
+	auto uint32_t v12;
+	auto uint32_t v13;
+	auto uint32_t v14;
+	auto uint32_t v15;
+	auto uint32_t v16;
+	auto uint32_t v17;
+	auto uint32_t v18;
+	auto uint32_t v19;
+	auto uint32_t v20;
+	auto uint32_t v21;
+	auto uint32_t v22;
+	auto uint32_t v23;
+	auto uint32_t v24;
+	auto uint32_t v25;
+	v17 = v0[0];
+	v18 = v0[1];
+	v19 = v0[2];
+	v20 = v0[3];
+	v21 = v0[4];
+	v22 = v0[5];
+	v23 = v0[6];
+	v24 = v0[7];
+	while (cTr > 0) {
+		v1 = verse_from_be32((*bPtr)[0]);
+		v2 = verse_from_be32((*bPtr)[1]);
+		v3 = verse_from_be32((*bPtr)[2]);
+		v4 = verse_from_be32((*bPtr)[3]);
+		v5 = verse_from_be32((*bPtr)[4]);
+		v6 = verse_from_be32((*bPtr)[5]);
+		v7 = verse_from_be32((*bPtr)[6]);
+		v8 = verse_from_be32((*bPtr)[7]);
+		v9 = verse_from_be32((*bPtr)[8]);
+		v10 = verse_from_be32((*bPtr)[9]);
+		v11 = verse_from_be32((*bPtr)[10]);
+		v12 = verse_from_be32((*bPtr)[11]);
+		v13 = verse_from_be32((*bPtr)[12]);
+		v14 = verse_from_be32((*bPtr)[13]);
+		v15 = verse_from_be32((*bPtr)[14]);
+		v16 = verse_from_be32((*bPtr)[15]);
+		v25 =
+		    v24 + 0x428a2f98UL + v1 + (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR32(v21, 25) XOR verse_rotR32(v21, 11)
+		     XOR verse_rotR32(v21, 6));
+		v20 += v25;
+		v24 = v25 + (verse_rotR32(v17, 22) XOR verse_rotR32(v17, 13)
+			     XOR verse_rotR32(v17,
+					      2)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v1 +=
+		    v10 +
+		    (verse_rotR32(v2, 18) XOR verse_rotR32(v2, 7) XOR v2 >> 3) +
+		    (verse_rotR32(v15, 19) XOR verse_rotR32(v15, 17) XOR v15 >>
+		     10);
+		v25 =
+		    v23 + 0x71374491UL + v2 + (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR32(v20, 25) XOR verse_rotR32(v20, 11)
+		     XOR verse_rotR32(v20, 6));
+		v19 += v25;
+		v23 = v25 + (verse_rotR32(v24, 22) XOR verse_rotR32(v24, 13)
+			     XOR verse_rotR32(v24,
+					      2)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v2 +=
+		    v11 +
+		    (verse_rotR32(v3, 18) XOR verse_rotR32(v3, 7) XOR v3 >> 3) +
+		    (verse_rotR32(v16, 19) XOR verse_rotR32(v16, 17) XOR v16 >>
+		     10);
+		v25 =
+		    v22 + 0xb5c0fbcfUL + v3 + (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR32(v19, 25) XOR verse_rotR32(v19, 11)
+		     XOR verse_rotR32(v19, 6));
+		v18 += v25;
+		v22 = v25 + (verse_rotR32(v23, 22) XOR verse_rotR32(v23, 13)
+			     XOR verse_rotR32(v23,
+					      2)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v3 +=
+		    v12 +
+		    (verse_rotR32(v4, 18) XOR verse_rotR32(v4, 7) XOR v4 >> 3) +
+		    (verse_rotR32(v1, 19) XOR verse_rotR32(v1, 17) XOR v1 >>
+		     10);
+		v25 =
+		    v21 + 0xe9b5dba5UL + v4 + (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR32(v18, 25) XOR verse_rotR32(v18, 11)
+		     XOR verse_rotR32(v18, 6));
+		v17 += v25;
+		v21 = v25 + (verse_rotR32(v22, 22) XOR verse_rotR32(v22, 13)
+			     XOR verse_rotR32(v22,
+					      2)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v4 +=
+		    v13 +
+		    (verse_rotR32(v5, 18) XOR verse_rotR32(v5, 7) XOR v5 >> 3) +
+		    (verse_rotR32(v2, 19) XOR verse_rotR32(v2, 17) XOR v2 >>
+		     10);
+		v25 =
+		    v20 + 0x3956c25bUL + v5 + (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR32(v17, 25) XOR verse_rotR32(v17, 11)
+		     XOR verse_rotR32(v17, 6));
+		v24 += v25;
+		v20 = v25 + (verse_rotR32(v21, 22) XOR verse_rotR32(v21, 13)
+			     XOR verse_rotR32(v21,
+					      2)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v5 +=
+		    v14 +
+		    (verse_rotR32(v6, 18) XOR verse_rotR32(v6, 7) XOR v6 >> 3) +
+		    (verse_rotR32(v3, 19) XOR verse_rotR32(v3, 17) XOR v3 >>
+		     10);
+		v25 =
+		    v19 + 0x59f111f1UL + v6 + (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR32(v24, 25) XOR verse_rotR32(v24, 11)
+		     XOR verse_rotR32(v24, 6));
+		v23 += v25;
+		v19 = v25 + (verse_rotR32(v20, 22) XOR verse_rotR32(v20, 13)
+			     XOR verse_rotR32(v20,
+					      2)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v6 +=
+		    v15 +
+		    (verse_rotR32(v7, 18) XOR verse_rotR32(v7, 7) XOR v7 >> 3) +
+		    (verse_rotR32(v4, 19) XOR verse_rotR32(v4, 17) XOR v4 >>
+		     10);
+		v25 =
+		    v18 + 0x923f82a4UL + v7 + (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR32(v23, 25) XOR verse_rotR32(v23, 11)
+		     XOR verse_rotR32(v23, 6));
+		v22 += v25;
+		v18 = v25 + (verse_rotR32(v19, 22) XOR verse_rotR32(v19, 13)
+			     XOR verse_rotR32(v19,
+					      2)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v7 +=
+		    v16 +
+		    (verse_rotR32(v8, 18) XOR verse_rotR32(v8, 7) XOR v8 >> 3) +
+		    (verse_rotR32(v5, 19) XOR verse_rotR32(v5, 17) XOR v5 >>
+		     10);
+		v25 =
+		    v17 + 0xab1c5ed5UL + v8 + (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR32(v22, 25) XOR verse_rotR32(v22, 11)
+		     XOR verse_rotR32(v22, 6));
+		v21 += v25;
+		v17 = v25 + (verse_rotR32(v18, 22) XOR verse_rotR32(v18, 13)
+			     XOR verse_rotR32(v18,
+					      2)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v8 +=
+		    v1 +
+		    (verse_rotR32(v9, 18) XOR verse_rotR32(v9, 7) XOR v9 >> 3) +
+		    (verse_rotR32(v6, 19) XOR verse_rotR32(v6, 17) XOR v6 >>
+		     10);
+		v25 =
+		    v24 + 0xd807aa98UL + v9 + (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR32(v21, 25) XOR verse_rotR32(v21, 11)
+		     XOR verse_rotR32(v21, 6));
+		v20 += v25;
+		v24 = v25 + (verse_rotR32(v17, 22) XOR verse_rotR32(v17, 13)
+			     XOR verse_rotR32(v17,
+					      2)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v9 +=
+		    v2 +
+		    (verse_rotR32(v10, 18) XOR verse_rotR32(v10, 7) XOR v10 >>
+		     3) + (verse_rotR32(v7, 19) XOR verse_rotR32(v7,
+								 17) XOR v7 >>
+			   10);
+		v25 =
+		    v23 + 0x12835b01UL + v10 + (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR32(v20, 25) XOR verse_rotR32(v20, 11)
+		     XOR verse_rotR32(v20, 6));
+		v19 += v25;
+		v23 = v25 + (verse_rotR32(v24, 22) XOR verse_rotR32(v24, 13)
+			     XOR verse_rotR32(v24,
+					      2)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v10 +=
+		    v3 +
+		    (verse_rotR32(v11, 18) XOR verse_rotR32(v11, 7) XOR v11 >>
+		     3) + (verse_rotR32(v8, 19) XOR verse_rotR32(v8,
+								 17) XOR v8 >>
+			   10);
+		v25 =
+		    v22 + 0x243185beUL + v11 + (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR32(v19, 25) XOR verse_rotR32(v19, 11)
+		     XOR verse_rotR32(v19, 6));
+		v18 += v25;
+		v22 = v25 + (verse_rotR32(v23, 22) XOR verse_rotR32(v23, 13)
+			     XOR verse_rotR32(v23,
+					      2)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v11 +=
+		    v4 +
+		    (verse_rotR32(v12, 18) XOR verse_rotR32(v12, 7) XOR v12 >>
+		     3) + (verse_rotR32(v9, 19) XOR verse_rotR32(v9,
+								 17) XOR v9 >>
+			   10);
+		v25 =
+		    v21 + 0x550c7dc3UL + v12 + (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR32(v18, 25) XOR verse_rotR32(v18, 11)
+		     XOR verse_rotR32(v18, 6));
+		v17 += v25;
+		v21 = v25 + (verse_rotR32(v22, 22) XOR verse_rotR32(v22, 13)
+			     XOR verse_rotR32(v22,
+					      2)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v12 +=
+		    v5 +
+		    (verse_rotR32(v13, 18) XOR verse_rotR32(v13, 7) XOR v13 >>
+		     3) + (verse_rotR32(v10, 19) XOR verse_rotR32(v10,
+								  17) XOR v10 >>
+			   10);
+		v25 =
+		    v20 + 0x72be5d74UL + v13 + (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR32(v17, 25) XOR verse_rotR32(v17, 11)
+		     XOR verse_rotR32(v17, 6));
+		v24 += v25;
+		v20 = v25 + (verse_rotR32(v21, 22) XOR verse_rotR32(v21, 13)
+			     XOR verse_rotR32(v21,
+					      2)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v13 +=
+		    v6 +
+		    (verse_rotR32(v14, 18) XOR verse_rotR32(v14, 7) XOR v14 >>
+		     3) + (verse_rotR32(v11, 19) XOR verse_rotR32(v11,
+								  17) XOR v11 >>
+			   10);
+		v25 =
+		    v19 + 0x80deb1feUL + v14 + (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR32(v24, 25) XOR verse_rotR32(v24, 11)
+		     XOR verse_rotR32(v24, 6));
+		v23 += v25;
+		v19 = v25 + (verse_rotR32(v20, 22) XOR verse_rotR32(v20, 13)
+			     XOR verse_rotR32(v20,
+					      2)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v14 +=
+		    v7 +
+		    (verse_rotR32(v15, 18) XOR verse_rotR32(v15, 7) XOR v15 >>
+		     3) + (verse_rotR32(v12, 19) XOR verse_rotR32(v12,
+								  17) XOR v12 >>
+			   10);
+		v25 =
+		    v18 + 0x9bdc06a7UL + v15 + (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR32(v23, 25) XOR verse_rotR32(v23, 11)
+		     XOR verse_rotR32(v23, 6));
+		v22 += v25;
+		v18 = v25 + (verse_rotR32(v19, 22) XOR verse_rotR32(v19, 13)
+			     XOR verse_rotR32(v19,
+					      2)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v15 +=
+		    v8 +
+		    (verse_rotR32(v16, 18) XOR verse_rotR32(v16, 7) XOR v16 >>
+		     3) + (verse_rotR32(v13, 19) XOR verse_rotR32(v13,
+								  17) XOR v13 >>
+			   10);
+		v25 =
+		    v17 + 0xc19bf174UL + v16 + (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR32(v22, 25) XOR verse_rotR32(v22, 11)
+		     XOR verse_rotR32(v22, 6));
+		v21 += v25;
+		v17 = v25 + (verse_rotR32(v18, 22) XOR verse_rotR32(v18, 13)
+			     XOR verse_rotR32(v18,
+					      2)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v16 +=
+		    v9 +
+		    (verse_rotR32(v1, 18) XOR verse_rotR32(v1, 7) XOR v1 >> 3) +
+		    (verse_rotR32(v14, 19) XOR verse_rotR32(v14, 17) XOR v14 >>
+		     10);
+		v25 =
+		    v24 + 0xe49b69c1UL + v1 + (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR32(v21, 25) XOR verse_rotR32(v21, 11)
+		     XOR verse_rotR32(v21, 6));
+		v20 += v25;
+		v24 = v25 + (verse_rotR32(v17, 22) XOR verse_rotR32(v17, 13)
+			     XOR verse_rotR32(v17,
+					      2)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v1 +=
+		    v10 +
+		    (verse_rotR32(v2, 18) XOR verse_rotR32(v2, 7) XOR v2 >> 3) +
+		    (verse_rotR32(v15, 19) XOR verse_rotR32(v15, 17) XOR v15 >>
+		     10);
+		v25 =
+		    v23 + 0xefbe4786UL + v2 + (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR32(v20, 25) XOR verse_rotR32(v20, 11)
+		     XOR verse_rotR32(v20, 6));
+		v19 += v25;
+		v23 = v25 + (verse_rotR32(v24, 22) XOR verse_rotR32(v24, 13)
+			     XOR verse_rotR32(v24,
+					      2)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v2 +=
+		    v11 +
+		    (verse_rotR32(v3, 18) XOR verse_rotR32(v3, 7) XOR v3 >> 3) +
+		    (verse_rotR32(v16, 19) XOR verse_rotR32(v16, 17) XOR v16 >>
+		     10);
+		v25 =
+		    v22 + 0x0fc19dc6UL + v3 + (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR32(v19, 25) XOR verse_rotR32(v19, 11)
+		     XOR verse_rotR32(v19, 6));
+		v18 += v25;
+		v22 = v25 + (verse_rotR32(v23, 22) XOR verse_rotR32(v23, 13)
+			     XOR verse_rotR32(v23,
+					      2)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v3 +=
+		    v12 +
+		    (verse_rotR32(v4, 18) XOR verse_rotR32(v4, 7) XOR v4 >> 3) +
+		    (verse_rotR32(v1, 19) XOR verse_rotR32(v1, 17) XOR v1 >>
+		     10);
+		v25 =
+		    v21 + 0x240ca1ccUL + v4 + (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR32(v18, 25) XOR verse_rotR32(v18, 11)
+		     XOR verse_rotR32(v18, 6));
+		v17 += v25;
+		v21 = v25 + (verse_rotR32(v22, 22) XOR verse_rotR32(v22, 13)
+			     XOR verse_rotR32(v22,
+					      2)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v4 +=
+		    v13 +
+		    (verse_rotR32(v5, 18) XOR verse_rotR32(v5, 7) XOR v5 >> 3) +
+		    (verse_rotR32(v2, 19) XOR verse_rotR32(v2, 17) XOR v2 >>
+		     10);
+		v25 =
+		    v20 + 0x2de92c6fUL + v5 + (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR32(v17, 25) XOR verse_rotR32(v17, 11)
+		     XOR verse_rotR32(v17, 6));
+		v24 += v25;
+		v20 = v25 + (verse_rotR32(v21, 22) XOR verse_rotR32(v21, 13)
+			     XOR verse_rotR32(v21,
+					      2)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v5 +=
+		    v14 +
+		    (verse_rotR32(v6, 18) XOR verse_rotR32(v6, 7) XOR v6 >> 3) +
+		    (verse_rotR32(v3, 19) XOR verse_rotR32(v3, 17) XOR v3 >>
+		     10);
+		v25 =
+		    v19 + 0x4a7484aaUL + v6 + (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR32(v24, 25) XOR verse_rotR32(v24, 11)
+		     XOR verse_rotR32(v24, 6));
+		v23 += v25;
+		v19 = v25 + (verse_rotR32(v20, 22) XOR verse_rotR32(v20, 13)
+			     XOR verse_rotR32(v20,
+					      2)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v6 +=
+		    v15 +
+		    (verse_rotR32(v7, 18) XOR verse_rotR32(v7, 7) XOR v7 >> 3) +
+		    (verse_rotR32(v4, 19) XOR verse_rotR32(v4, 17) XOR v4 >>
+		     10);
+		v25 =
+		    v18 + 0x5cb0a9dcUL + v7 + (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR32(v23, 25) XOR verse_rotR32(v23, 11)
+		     XOR verse_rotR32(v23, 6));
+		v22 += v25;
+		v18 = v25 + (verse_rotR32(v19, 22) XOR verse_rotR32(v19, 13)
+			     XOR verse_rotR32(v19,
+					      2)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v7 +=
+		    v16 +
+		    (verse_rotR32(v8, 18) XOR verse_rotR32(v8, 7) XOR v8 >> 3) +
+		    (verse_rotR32(v5, 19) XOR verse_rotR32(v5, 17) XOR v5 >>
+		     10);
+		v25 =
+		    v17 + 0x76f988daUL + v8 + (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR32(v22, 25) XOR verse_rotR32(v22, 11)
+		     XOR verse_rotR32(v22, 6));
+		v21 += v25;
+		v17 = v25 + (verse_rotR32(v18, 22) XOR verse_rotR32(v18, 13)
+			     XOR verse_rotR32(v18,
+					      2)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v8 +=
+		    v1 +
+		    (verse_rotR32(v9, 18) XOR verse_rotR32(v9, 7) XOR v9 >> 3) +
+		    (verse_rotR32(v6, 19) XOR verse_rotR32(v6, 17) XOR v6 >>
+		     10);
+		v25 =
+		    v24 + 0x983e5152UL + v9 + (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR32(v21, 25) XOR verse_rotR32(v21, 11)
+		     XOR verse_rotR32(v21, 6));
+		v20 += v25;
+		v24 = v25 + (verse_rotR32(v17, 22) XOR verse_rotR32(v17, 13)
+			     XOR verse_rotR32(v17,
+					      2)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v9 +=
+		    v2 +
+		    (verse_rotR32(v10, 18) XOR verse_rotR32(v10, 7) XOR v10 >>
+		     3) + (verse_rotR32(v7, 19) XOR verse_rotR32(v7,
+								 17) XOR v7 >>
+			   10);
+		v25 =
+		    v23 + 0xa831c66dUL + v10 + (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR32(v20, 25) XOR verse_rotR32(v20, 11)
+		     XOR verse_rotR32(v20, 6));
+		v19 += v25;
+		v23 = v25 + (verse_rotR32(v24, 22) XOR verse_rotR32(v24, 13)
+			     XOR verse_rotR32(v24,
+					      2)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v10 +=
+		    v3 +
+		    (verse_rotR32(v11, 18) XOR verse_rotR32(v11, 7) XOR v11 >>
+		     3) + (verse_rotR32(v8, 19) XOR verse_rotR32(v8,
+								 17) XOR v8 >>
+			   10);
+		v25 =
+		    v22 + 0xb00327c8UL + v11 + (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR32(v19, 25) XOR verse_rotR32(v19, 11)
+		     XOR verse_rotR32(v19, 6));
+		v18 += v25;
+		v22 = v25 + (verse_rotR32(v23, 22) XOR verse_rotR32(v23, 13)
+			     XOR verse_rotR32(v23,
+					      2)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v11 +=
+		    v4 +
+		    (verse_rotR32(v12, 18) XOR verse_rotR32(v12, 7) XOR v12 >>
+		     3) + (verse_rotR32(v9, 19) XOR verse_rotR32(v9,
+								 17) XOR v9 >>
+			   10);
+		v25 =
+		    v21 + 0xbf597fc7UL + v12 + (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR32(v18, 25) XOR verse_rotR32(v18, 11)
+		     XOR verse_rotR32(v18, 6));
+		v17 += v25;
+		v21 = v25 + (verse_rotR32(v22, 22) XOR verse_rotR32(v22, 13)
+			     XOR verse_rotR32(v22,
+					      2)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v12 +=
+		    v5 +
+		    (verse_rotR32(v13, 18) XOR verse_rotR32(v13, 7) XOR v13 >>
+		     3) + (verse_rotR32(v10, 19) XOR verse_rotR32(v10,
+								  17) XOR v10 >>
+			   10);
+		v25 =
+		    v20 + 0xc6e00bf3UL + v13 + (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR32(v17, 25) XOR verse_rotR32(v17, 11)
+		     XOR verse_rotR32(v17, 6));
+		v24 += v25;
+		v20 = v25 + (verse_rotR32(v21, 22) XOR verse_rotR32(v21, 13)
+			     XOR verse_rotR32(v21,
+					      2)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v13 +=
+		    v6 +
+		    (verse_rotR32(v14, 18) XOR verse_rotR32(v14, 7) XOR v14 >>
+		     3) + (verse_rotR32(v11, 19) XOR verse_rotR32(v11,
+								  17) XOR v11 >>
+			   10);
+		v25 =
+		    v19 + 0xd5a79147UL + v14 + (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR32(v24, 25) XOR verse_rotR32(v24, 11)
+		     XOR verse_rotR32(v24, 6));
+		v23 += v25;
+		v19 = v25 + (verse_rotR32(v20, 22) XOR verse_rotR32(v20, 13)
+			     XOR verse_rotR32(v20,
+					      2)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v14 +=
+		    v7 +
+		    (verse_rotR32(v15, 18) XOR verse_rotR32(v15, 7) XOR v15 >>
+		     3) + (verse_rotR32(v12, 19) XOR verse_rotR32(v12,
+								  17) XOR v12 >>
+			   10);
+		v25 =
+		    v18 + 0x06ca6351UL + v15 + (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR32(v23, 25) XOR verse_rotR32(v23, 11)
+		     XOR verse_rotR32(v23, 6));
+		v22 += v25;
+		v18 = v25 + (verse_rotR32(v19, 22) XOR verse_rotR32(v19, 13)
+			     XOR verse_rotR32(v19,
+					      2)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v15 +=
+		    v8 +
+		    (verse_rotR32(v16, 18) XOR verse_rotR32(v16, 7) XOR v16 >>
+		     3) + (verse_rotR32(v13, 19) XOR verse_rotR32(v13,
+								  17) XOR v13 >>
+			   10);
+		v25 =
+		    v17 + 0x14292967UL + v16 + (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR32(v22, 25) XOR verse_rotR32(v22, 11)
+		     XOR verse_rotR32(v22, 6));
+		v21 += v25;
+		v17 = v25 + (verse_rotR32(v18, 22) XOR verse_rotR32(v18, 13)
+			     XOR verse_rotR32(v18,
+					      2)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v16 +=
+		    v9 +
+		    (verse_rotR32(v1, 18) XOR verse_rotR32(v1, 7) XOR v1 >> 3) +
+		    (verse_rotR32(v14, 19) XOR verse_rotR32(v14, 17) XOR v14 >>
+		     10);
+		v25 =
+		    v24 + 0x27b70a85UL + v1 + (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR32(v21, 25) XOR verse_rotR32(v21, 11)
+		     XOR verse_rotR32(v21, 6));
+		v20 += v25;
+		v24 = v25 + (verse_rotR32(v17, 22) XOR verse_rotR32(v17, 13)
+			     XOR verse_rotR32(v17,
+					      2)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v1 +=
+		    v10 +
+		    (verse_rotR32(v2, 18) XOR verse_rotR32(v2, 7) XOR v2 >> 3) +
+		    (verse_rotR32(v15, 19) XOR verse_rotR32(v15, 17) XOR v15 >>
+		     10);
+		v25 =
+		    v23 + 0x2e1b2138UL + v2 + (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR32(v20, 25) XOR verse_rotR32(v20, 11)
+		     XOR verse_rotR32(v20, 6));
+		v19 += v25;
+		v23 = v25 + (verse_rotR32(v24, 22) XOR verse_rotR32(v24, 13)
+			     XOR verse_rotR32(v24,
+					      2)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v2 +=
+		    v11 +
+		    (verse_rotR32(v3, 18) XOR verse_rotR32(v3, 7) XOR v3 >> 3) +
+		    (verse_rotR32(v16, 19) XOR verse_rotR32(v16, 17) XOR v16 >>
+		     10);
+		v25 =
+		    v22 + 0x4d2c6dfcUL + v3 + (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR32(v19, 25) XOR verse_rotR32(v19, 11)
+		     XOR verse_rotR32(v19, 6));
+		v18 += v25;
+		v22 = v25 + (verse_rotR32(v23, 22) XOR verse_rotR32(v23, 13)
+			     XOR verse_rotR32(v23,
+					      2)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v3 +=
+		    v12 +
+		    (verse_rotR32(v4, 18) XOR verse_rotR32(v4, 7) XOR v4 >> 3) +
+		    (verse_rotR32(v1, 19) XOR verse_rotR32(v1, 17) XOR v1 >>
+		     10);
+		v25 =
+		    v21 + 0x53380d13UL + v4 + (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR32(v18, 25) XOR verse_rotR32(v18, 11)
+		     XOR verse_rotR32(v18, 6));
+		v17 += v25;
+		v21 = v25 + (verse_rotR32(v22, 22) XOR verse_rotR32(v22, 13)
+			     XOR verse_rotR32(v22,
+					      2)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v4 +=
+		    v13 +
+		    (verse_rotR32(v5, 18) XOR verse_rotR32(v5, 7) XOR v5 >> 3) +
+		    (verse_rotR32(v2, 19) XOR verse_rotR32(v2, 17) XOR v2 >>
+		     10);
+		v25 =
+		    v20 + 0x650a7354UL + v5 + (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR32(v17, 25) XOR verse_rotR32(v17, 11)
+		     XOR verse_rotR32(v17, 6));
+		v24 += v25;
+		v20 = v25 + (verse_rotR32(v21, 22) XOR verse_rotR32(v21, 13)
+			     XOR verse_rotR32(v21,
+					      2)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v5 +=
+		    v14 +
+		    (verse_rotR32(v6, 18) XOR verse_rotR32(v6, 7) XOR v6 >> 3) +
+		    (verse_rotR32(v3, 19) XOR verse_rotR32(v3, 17) XOR v3 >>
+		     10);
+		v25 =
+		    v19 + 0x766a0abbUL + v6 + (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR32(v24, 25) XOR verse_rotR32(v24, 11)
+		     XOR verse_rotR32(v24, 6));
+		v23 += v25;
+		v19 = v25 + (verse_rotR32(v20, 22) XOR verse_rotR32(v20, 13)
+			     XOR verse_rotR32(v20,
+					      2)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v6 +=
+		    v15 +
+		    (verse_rotR32(v7, 18) XOR verse_rotR32(v7, 7) XOR v7 >> 3) +
+		    (verse_rotR32(v4, 19) XOR verse_rotR32(v4, 17) XOR v4 >>
+		     10);
+		v25 =
+		    v18 + 0x81c2c92eUL + v7 + (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR32(v23, 25) XOR verse_rotR32(v23, 11)
+		     XOR verse_rotR32(v23, 6));
+		v22 += v25;
+		v18 = v25 + (verse_rotR32(v19, 22) XOR verse_rotR32(v19, 13)
+			     XOR verse_rotR32(v19,
+					      2)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v7 +=
+		    v16 +
+		    (verse_rotR32(v8, 18) XOR verse_rotR32(v8, 7) XOR v8 >> 3) +
+		    (verse_rotR32(v5, 19) XOR verse_rotR32(v5, 17) XOR v5 >>
+		     10);
+		v25 =
+		    v17 + 0x92722c85UL + v8 + (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR32(v22, 25) XOR verse_rotR32(v22, 11)
+		     XOR verse_rotR32(v22, 6));
+		v21 += v25;
+		v17 = v25 + (verse_rotR32(v18, 22) XOR verse_rotR32(v18, 13)
+			     XOR verse_rotR32(v18,
+					      2)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v8 +=
+		    v1 +
+		    (verse_rotR32(v9, 18) XOR verse_rotR32(v9, 7) XOR v9 >> 3) +
+		    (verse_rotR32(v6, 19) XOR verse_rotR32(v6, 17) XOR v6 >>
+		     10);
+		v25 =
+		    v24 + 0xa2bfe8a1UL + v9 + (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR32(v21, 25) XOR verse_rotR32(v21, 11)
+		     XOR verse_rotR32(v21, 6));
+		v20 += v25;
+		v24 = v25 + (verse_rotR32(v17, 22) XOR verse_rotR32(v17, 13)
+			     XOR verse_rotR32(v17,
+					      2)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v9 +=
+		    v2 +
+		    (verse_rotR32(v10, 18) XOR verse_rotR32(v10, 7) XOR v10 >>
+		     3) + (verse_rotR32(v7, 19) XOR verse_rotR32(v7,
+								 17) XOR v7 >>
+			   10);
+		v25 =
+		    v23 + 0xa81a664bUL + v10 + (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR32(v20, 25) XOR verse_rotR32(v20, 11)
+		     XOR verse_rotR32(v20, 6));
+		v19 += v25;
+		v23 = v25 + (verse_rotR32(v24, 22) XOR verse_rotR32(v24, 13)
+			     XOR verse_rotR32(v24,
+					      2)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v10 +=
+		    v3 +
+		    (verse_rotR32(v11, 18) XOR verse_rotR32(v11, 7) XOR v11 >>
+		     3) + (verse_rotR32(v8, 19) XOR verse_rotR32(v8,
+								 17) XOR v8 >>
+			   10);
+		v25 =
+		    v22 + 0xc24b8b70UL + v11 + (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR32(v19, 25) XOR verse_rotR32(v19, 11)
+		     XOR verse_rotR32(v19, 6));
+		v18 += v25;
+		v22 = v25 + (verse_rotR32(v23, 22) XOR verse_rotR32(v23, 13)
+			     XOR verse_rotR32(v23,
+					      2)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v11 +=
+		    v4 +
+		    (verse_rotR32(v12, 18) XOR verse_rotR32(v12, 7) XOR v12 >>
+		     3) + (verse_rotR32(v9, 19) XOR verse_rotR32(v9,
+								 17) XOR v9 >>
+			   10);
+		v25 =
+		    v21 + 0xc76c51a3UL + v12 + (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR32(v18, 25) XOR verse_rotR32(v18, 11)
+		     XOR verse_rotR32(v18, 6));
+		v17 += v25;
+		v21 = v25 + (verse_rotR32(v22, 22) XOR verse_rotR32(v22, 13)
+			     XOR verse_rotR32(v22,
+					      2)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v12 +=
+		    v5 +
+		    (verse_rotR32(v13, 18) XOR verse_rotR32(v13, 7) XOR v13 >>
+		     3) + (verse_rotR32(v10, 19) XOR verse_rotR32(v10,
+								  17) XOR v10 >>
+			   10);
+		v25 =
+		    v20 + 0xd192e819UL + v13 + (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR32(v17, 25) XOR verse_rotR32(v17, 11)
+		     XOR verse_rotR32(v17, 6));
+		v24 += v25;
+		v20 = v25 + (verse_rotR32(v21, 22) XOR verse_rotR32(v21, 13)
+			     XOR verse_rotR32(v21,
+					      2)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v13 +=
+		    v6 +
+		    (verse_rotR32(v14, 18) XOR verse_rotR32(v14, 7) XOR v14 >>
+		     3) + (verse_rotR32(v11, 19) XOR verse_rotR32(v11,
+								  17) XOR v11 >>
+			   10);
+		v25 =
+		    v19 + 0xd6990624UL + v14 + (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR32(v24, 25) XOR verse_rotR32(v24, 11)
+		     XOR verse_rotR32(v24, 6));
+		v23 += v25;
+		v19 = v25 + (verse_rotR32(v20, 22) XOR verse_rotR32(v20, 13)
+			     XOR verse_rotR32(v20,
+					      2)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v14 +=
+		    v7 +
+		    (verse_rotR32(v15, 18) XOR verse_rotR32(v15, 7) XOR v15 >>
+		     3) + (verse_rotR32(v12, 19) XOR verse_rotR32(v12,
+								  17) XOR v12 >>
+			   10);
+		v25 =
+		    v18 + 0xf40e3585UL + v15 + (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR32(v23, 25) XOR verse_rotR32(v23, 11)
+		     XOR verse_rotR32(v23, 6));
+		v22 += v25;
+		v18 = v25 + (verse_rotR32(v19, 22) XOR verse_rotR32(v19, 13)
+			     XOR verse_rotR32(v19,
+					      2)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v15 +=
+		    v8 +
+		    (verse_rotR32(v16, 18) XOR verse_rotR32(v16, 7) XOR v16 >>
+		     3) + (verse_rotR32(v13, 19) XOR verse_rotR32(v13,
+								  17) XOR v13 >>
+			   10);
+		v25 =
+		    v17 + 0x106aa070UL + v16 + (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR32(v22, 25) XOR verse_rotR32(v22, 11)
+		     XOR verse_rotR32(v22, 6));
+		v21 += v25;
+		v17 = v25 + (verse_rotR32(v18, 22) XOR verse_rotR32(v18, 13)
+			     XOR verse_rotR32(v18,
+					      2)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v16 +=
+		    v9 +
+		    (verse_rotR32(v1, 18) XOR verse_rotR32(v1, 7) XOR v1 >> 3) +
+		    (verse_rotR32(v14, 19) XOR verse_rotR32(v14, 17) XOR v14 >>
+		     10);
+		v25 =
+		    v24 + 0x19a4c116UL + v1 + (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR32(v21, 25) XOR verse_rotR32(v21, 11)
+		     XOR verse_rotR32(v21, 6));
+		v20 += v25;
+		v24 = v25 + (verse_rotR32(v17, 22) XOR verse_rotR32(v17, 13)
+			     XOR verse_rotR32(v17,
+					      2)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v25 =
+		    v23 + 0x1e376c08UL + v2 + (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR32(v20, 25) XOR verse_rotR32(v20, 11)
+		     XOR verse_rotR32(v20, 6));
+		v19 += v25;
+		v23 = v25 + (verse_rotR32(v24, 22) XOR verse_rotR32(v24, 13)
+			     XOR verse_rotR32(v24,
+					      2)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v25 =
+		    v22 + 0x2748774cUL + v3 + (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR32(v19, 25) XOR verse_rotR32(v19, 11)
+		     XOR verse_rotR32(v19, 6));
+		v18 += v25;
+		v22 = v25 + (verse_rotR32(v23, 22) XOR verse_rotR32(v23, 13)
+			     XOR verse_rotR32(v23,
+					      2)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v25 =
+		    v21 + 0x34b0bcb5UL + v4 + (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR32(v18, 25) XOR verse_rotR32(v18, 11)
+		     XOR verse_rotR32(v18, 6));
+		v17 += v25;
+		v21 = v25 + (verse_rotR32(v22, 22) XOR verse_rotR32(v22, 13)
+			     XOR verse_rotR32(v22,
+					      2)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v25 =
+		    v20 + 0x391c0cb3UL + v5 + (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR32(v17, 25) XOR verse_rotR32(v17, 11)
+		     XOR verse_rotR32(v17, 6));
+		v24 += v25;
+		v20 = v25 + (verse_rotR32(v21, 22) XOR verse_rotR32(v21, 13)
+			     XOR verse_rotR32(v21,
+					      2)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v25 =
+		    v19 + 0x4ed8aa4aUL + v6 + (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR32(v24, 25) XOR verse_rotR32(v24, 11)
+		     XOR verse_rotR32(v24, 6));
+		v23 += v25;
+		v19 = v25 + (verse_rotR32(v20, 22) XOR verse_rotR32(v20, 13)
+			     XOR verse_rotR32(v20,
+					      2)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v25 =
+		    v18 + 0x5b9cca4fUL + v7 + (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR32(v23, 25) XOR verse_rotR32(v23, 11)
+		     XOR verse_rotR32(v23, 6));
+		v22 += v25;
+		v18 = v25 + (verse_rotR32(v19, 22) XOR verse_rotR32(v19, 13)
+			     XOR verse_rotR32(v19,
+					      2)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v25 =
+		    v17 + 0x682e6ff3UL + v8 + (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR32(v22, 25) XOR verse_rotR32(v22, 11)
+		     XOR verse_rotR32(v22, 6));
+		v21 += v25;
+		v17 = v25 + (verse_rotR32(v18, 22) XOR verse_rotR32(v18, 13)
+			     XOR verse_rotR32(v18,
+					      2)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v25 =
+		    v24 + 0x748f82eeUL + v9 + (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR32(v21, 25) XOR verse_rotR32(v21, 11)
+		     XOR verse_rotR32(v21, 6));
+		v20 += v25;
+		v24 = v25 + (verse_rotR32(v17, 22) XOR verse_rotR32(v17, 13)
+			     XOR verse_rotR32(v17,
+					      2)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v25 =
+		    v23 + 0x78a5636fUL + v10 + (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR32(v20, 25) XOR verse_rotR32(v20, 11)
+		     XOR verse_rotR32(v20, 6));
+		v19 += v25;
+		v23 = v25 + (verse_rotR32(v24, 22) XOR verse_rotR32(v24, 13)
+			     XOR verse_rotR32(v24,
+					      2)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v25 =
+		    v22 + 0x84c87814UL + v11 + (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR32(v19, 25) XOR verse_rotR32(v19, 11)
+		     XOR verse_rotR32(v19, 6));
+		v18 += v25;
+		v22 = v25 + (verse_rotR32(v23, 22) XOR verse_rotR32(v23, 13)
+			     XOR verse_rotR32(v23,
+					      2)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v25 =
+		    v21 + 0x8cc70208UL + v12 + (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR32(v18, 25) XOR verse_rotR32(v18, 11)
+		     XOR verse_rotR32(v18, 6));
+		v17 += v25;
+		v21 = v25 + (verse_rotR32(v22, 22) XOR verse_rotR32(v22, 13)
+			     XOR verse_rotR32(v22,
+					      2)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v25 =
+		    v20 + 0x90befffaUL + v13 + (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR32(v17, 25) XOR verse_rotR32(v17, 11)
+		     XOR verse_rotR32(v17, 6));
+		v24 += v25;
+		v20 = v25 + (verse_rotR32(v21, 22) XOR verse_rotR32(v21, 13)
+			     XOR verse_rotR32(v21,
+					      2)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v25 =
+		    v19 + 0xa4506cebUL + v14 + (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR32(v24, 25) XOR verse_rotR32(v24, 11)
+		     XOR verse_rotR32(v24, 6));
+		v23 += v25;
+		v19 = v25 + (verse_rotR32(v20, 22) XOR verse_rotR32(v20, 13)
+			     XOR verse_rotR32(v20,
+					      2)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v25 =
+		    v18 + 0xbef9a3f7UL + v15 + (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR32(v23, 25) XOR verse_rotR32(v23, 11)
+		     XOR verse_rotR32(v23, 6));
+		v22 += v25;
+		v18 = v25 + (verse_rotR32(v19, 22) XOR verse_rotR32(v19, 13)
+			     XOR verse_rotR32(v19,
+					      2)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v25 =
+		    v17 + 0xc67178f2UL + v16 + (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR32(v22, 25) XOR verse_rotR32(v22, 11)
+		     XOR verse_rotR32(v22, 6));
+		v21 += v25;
+		v17 = v25 + (verse_rotR32(v18, 22) XOR verse_rotR32(v18, 13)
+			     XOR verse_rotR32(v18,
+					      2)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v17 += v0[0];
+		v18 += v0[1];
+		v19 += v0[2];
+		v20 += v0[3];
+		v21 += v0[4];
+		v22 += v0[5];
+		v23 += v0[6];
+		v24 += v0[7];
+		v0[0] = v17;
+		v0[1] = v18;
+		v0[2] = v19;
+		v0[3] = v20;
+		v0[4] = v21;
+		v0[5] = v22;
+		v0[6] = v23;
+		v0[7] = v24;
+		++bPtr;
+		--cTr;
+	};
+}
diff --git a/libverse/sha512/c/portable.c b/libverse/sha512/c/portable.c
new file mode 100644
--- /dev/null
+++ b/libverse/sha512/c/portable.c
@@ -0,0 +1,1187 @@
+#include <stdint.h>
+#include <verse.h>
+#define XOR ^
+void verse_sha512_c_portable(uint64_t(*bPtr)[16], uint64_t cTr, uint64_t v0[8])
+{
+	auto uint64_t v1;
+	auto uint64_t v2;
+	auto uint64_t v3;
+	auto uint64_t v4;
+	auto uint64_t v5;
+	auto uint64_t v6;
+	auto uint64_t v7;
+	auto uint64_t v8;
+	auto uint64_t v9;
+	auto uint64_t v10;
+	auto uint64_t v11;
+	auto uint64_t v12;
+	auto uint64_t v13;
+	auto uint64_t v14;
+	auto uint64_t v15;
+	auto uint64_t v16;
+	auto uint64_t v17;
+	auto uint64_t v18;
+	auto uint64_t v19;
+	auto uint64_t v20;
+	auto uint64_t v21;
+	auto uint64_t v22;
+	auto uint64_t v23;
+	auto uint64_t v24;
+	auto uint64_t v25;
+	v17 = v0[0];
+	v18 = v0[1];
+	v19 = v0[2];
+	v20 = v0[3];
+	v21 = v0[4];
+	v22 = v0[5];
+	v23 = v0[6];
+	v24 = v0[7];
+	while (cTr > 0) {
+		v1 = verse_from_be64((*bPtr)[0]);
+		v2 = verse_from_be64((*bPtr)[1]);
+		v3 = verse_from_be64((*bPtr)[2]);
+		v4 = verse_from_be64((*bPtr)[3]);
+		v5 = verse_from_be64((*bPtr)[4]);
+		v6 = verse_from_be64((*bPtr)[5]);
+		v7 = verse_from_be64((*bPtr)[6]);
+		v8 = verse_from_be64((*bPtr)[7]);
+		v9 = verse_from_be64((*bPtr)[8]);
+		v10 = verse_from_be64((*bPtr)[9]);
+		v11 = verse_from_be64((*bPtr)[10]);
+		v12 = verse_from_be64((*bPtr)[11]);
+		v13 = verse_from_be64((*bPtr)[12]);
+		v14 = verse_from_be64((*bPtr)[13]);
+		v15 = verse_from_be64((*bPtr)[14]);
+		v16 = verse_from_be64((*bPtr)[15]);
+		v25 =
+		    v24 + 0x428a2f98d728ae22ULL + v1 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v1 +=
+		    v10 +
+		    (verse_rotR64(v2, 8) XOR verse_rotR64(v2, 1) XOR v2 >> 7) +
+		    (verse_rotR64(v15, 61) XOR verse_rotR64(v15, 19) XOR v15 >>
+		     6);
+		v25 =
+		    v23 + 0x7137449123ef65cdULL + v2 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v2 +=
+		    v11 +
+		    (verse_rotR64(v3, 8) XOR verse_rotR64(v3, 1) XOR v3 >> 7) +
+		    (verse_rotR64(v16, 61) XOR verse_rotR64(v16, 19) XOR v16 >>
+		     6);
+		v25 =
+		    v22 + 0xb5c0fbcfec4d3b2fULL + v3 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v3 +=
+		    v12 +
+		    (verse_rotR64(v4, 8) XOR verse_rotR64(v4, 1) XOR v4 >> 7) +
+		    (verse_rotR64(v1, 61) XOR verse_rotR64(v1, 19) XOR v1 >> 6);
+		v25 =
+		    v21 + 0xe9b5dba58189dbbcULL + v4 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v4 +=
+		    v13 +
+		    (verse_rotR64(v5, 8) XOR verse_rotR64(v5, 1) XOR v5 >> 7) +
+		    (verse_rotR64(v2, 61) XOR verse_rotR64(v2, 19) XOR v2 >> 6);
+		v25 =
+		    v20 + 0x3956c25bf348b538ULL + v5 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v5 +=
+		    v14 +
+		    (verse_rotR64(v6, 8) XOR verse_rotR64(v6, 1) XOR v6 >> 7) +
+		    (verse_rotR64(v3, 61) XOR verse_rotR64(v3, 19) XOR v3 >> 6);
+		v25 =
+		    v19 + 0x59f111f1b605d019ULL + v6 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v6 +=
+		    v15 +
+		    (verse_rotR64(v7, 8) XOR verse_rotR64(v7, 1) XOR v7 >> 7) +
+		    (verse_rotR64(v4, 61) XOR verse_rotR64(v4, 19) XOR v4 >> 6);
+		v25 =
+		    v18 + 0x923f82a4af194f9bULL + v7 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v7 +=
+		    v16 +
+		    (verse_rotR64(v8, 8) XOR verse_rotR64(v8, 1) XOR v8 >> 7) +
+		    (verse_rotR64(v5, 61) XOR verse_rotR64(v5, 19) XOR v5 >> 6);
+		v25 =
+		    v17 + 0xab1c5ed5da6d8118ULL + v8 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v8 +=
+		    v1 +
+		    (verse_rotR64(v9, 8) XOR verse_rotR64(v9, 1) XOR v9 >> 7) +
+		    (verse_rotR64(v6, 61) XOR verse_rotR64(v6, 19) XOR v6 >> 6);
+		v25 =
+		    v24 + 0xd807aa98a3030242ULL + v9 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v9 +=
+		    v2 +
+		    (verse_rotR64(v10, 8) XOR verse_rotR64(v10, 1) XOR v10 >> 7)
+		    +
+		    (verse_rotR64(v7, 61) XOR verse_rotR64(v7, 19) XOR v7 >> 6);
+		v25 =
+		    v23 + 0x12835b0145706fbeULL + v10 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v10 +=
+		    v3 +
+		    (verse_rotR64(v11, 8) XOR verse_rotR64(v11, 1) XOR v11 >> 7)
+		    +
+		    (verse_rotR64(v8, 61) XOR verse_rotR64(v8, 19) XOR v8 >> 6);
+		v25 =
+		    v22 + 0x243185be4ee4b28cULL + v11 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v11 +=
+		    v4 +
+		    (verse_rotR64(v12, 8) XOR verse_rotR64(v12, 1) XOR v12 >> 7)
+		    +
+		    (verse_rotR64(v9, 61) XOR verse_rotR64(v9, 19) XOR v9 >> 6);
+		v25 =
+		    v21 + 0x550c7dc3d5ffb4e2ULL + v12 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v12 +=
+		    v5 +
+		    (verse_rotR64(v13, 8) XOR verse_rotR64(v13, 1) XOR v13 >> 7)
+		    +
+		    (verse_rotR64(v10, 61) XOR verse_rotR64(v10, 19) XOR v10 >>
+		     6);
+		v25 =
+		    v20 + 0x72be5d74f27b896fULL + v13 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v13 +=
+		    v6 +
+		    (verse_rotR64(v14, 8) XOR verse_rotR64(v14, 1) XOR v14 >> 7)
+		    +
+		    (verse_rotR64(v11, 61) XOR verse_rotR64(v11, 19) XOR v11 >>
+		     6);
+		v25 =
+		    v19 + 0x80deb1fe3b1696b1ULL + v14 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v14 +=
+		    v7 +
+		    (verse_rotR64(v15, 8) XOR verse_rotR64(v15, 1) XOR v15 >> 7)
+		    +
+		    (verse_rotR64(v12, 61) XOR verse_rotR64(v12, 19) XOR v12 >>
+		     6);
+		v25 =
+		    v18 + 0x9bdc06a725c71235ULL + v15 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v15 +=
+		    v8 +
+		    (verse_rotR64(v16, 8) XOR verse_rotR64(v16, 1) XOR v16 >> 7)
+		    +
+		    (verse_rotR64(v13, 61) XOR verse_rotR64(v13, 19) XOR v13 >>
+		     6);
+		v25 =
+		    v17 + 0xc19bf174cf692694ULL + v16 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v16 +=
+		    v9 +
+		    (verse_rotR64(v1, 8) XOR verse_rotR64(v1, 1) XOR v1 >> 7) +
+		    (verse_rotR64(v14, 61) XOR verse_rotR64(v14, 19) XOR v14 >>
+		     6);
+		v25 =
+		    v24 + 0xe49b69c19ef14ad2ULL + v1 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v1 +=
+		    v10 +
+		    (verse_rotR64(v2, 8) XOR verse_rotR64(v2, 1) XOR v2 >> 7) +
+		    (verse_rotR64(v15, 61) XOR verse_rotR64(v15, 19) XOR v15 >>
+		     6);
+		v25 =
+		    v23 + 0xefbe4786384f25e3ULL + v2 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v2 +=
+		    v11 +
+		    (verse_rotR64(v3, 8) XOR verse_rotR64(v3, 1) XOR v3 >> 7) +
+		    (verse_rotR64(v16, 61) XOR verse_rotR64(v16, 19) XOR v16 >>
+		     6);
+		v25 =
+		    v22 + 0x0fc19dc68b8cd5b5ULL + v3 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v3 +=
+		    v12 +
+		    (verse_rotR64(v4, 8) XOR verse_rotR64(v4, 1) XOR v4 >> 7) +
+		    (verse_rotR64(v1, 61) XOR verse_rotR64(v1, 19) XOR v1 >> 6);
+		v25 =
+		    v21 + 0x240ca1cc77ac9c65ULL + v4 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v4 +=
+		    v13 +
+		    (verse_rotR64(v5, 8) XOR verse_rotR64(v5, 1) XOR v5 >> 7) +
+		    (verse_rotR64(v2, 61) XOR verse_rotR64(v2, 19) XOR v2 >> 6);
+		v25 =
+		    v20 + 0x2de92c6f592b0275ULL + v5 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v5 +=
+		    v14 +
+		    (verse_rotR64(v6, 8) XOR verse_rotR64(v6, 1) XOR v6 >> 7) +
+		    (verse_rotR64(v3, 61) XOR verse_rotR64(v3, 19) XOR v3 >> 6);
+		v25 =
+		    v19 + 0x4a7484aa6ea6e483ULL + v6 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v6 +=
+		    v15 +
+		    (verse_rotR64(v7, 8) XOR verse_rotR64(v7, 1) XOR v7 >> 7) +
+		    (verse_rotR64(v4, 61) XOR verse_rotR64(v4, 19) XOR v4 >> 6);
+		v25 =
+		    v18 + 0x5cb0a9dcbd41fbd4ULL + v7 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v7 +=
+		    v16 +
+		    (verse_rotR64(v8, 8) XOR verse_rotR64(v8, 1) XOR v8 >> 7) +
+		    (verse_rotR64(v5, 61) XOR verse_rotR64(v5, 19) XOR v5 >> 6);
+		v25 =
+		    v17 + 0x76f988da831153b5ULL + v8 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v8 +=
+		    v1 +
+		    (verse_rotR64(v9, 8) XOR verse_rotR64(v9, 1) XOR v9 >> 7) +
+		    (verse_rotR64(v6, 61) XOR verse_rotR64(v6, 19) XOR v6 >> 6);
+		v25 =
+		    v24 + 0x983e5152ee66dfabULL + v9 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v9 +=
+		    v2 +
+		    (verse_rotR64(v10, 8) XOR verse_rotR64(v10, 1) XOR v10 >> 7)
+		    +
+		    (verse_rotR64(v7, 61) XOR verse_rotR64(v7, 19) XOR v7 >> 6);
+		v25 =
+		    v23 + 0xa831c66d2db43210ULL + v10 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v10 +=
+		    v3 +
+		    (verse_rotR64(v11, 8) XOR verse_rotR64(v11, 1) XOR v11 >> 7)
+		    +
+		    (verse_rotR64(v8, 61) XOR verse_rotR64(v8, 19) XOR v8 >> 6);
+		v25 =
+		    v22 + 0xb00327c898fb213fULL + v11 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v11 +=
+		    v4 +
+		    (verse_rotR64(v12, 8) XOR verse_rotR64(v12, 1) XOR v12 >> 7)
+		    +
+		    (verse_rotR64(v9, 61) XOR verse_rotR64(v9, 19) XOR v9 >> 6);
+		v25 =
+		    v21 + 0xbf597fc7beef0ee4ULL + v12 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v12 +=
+		    v5 +
+		    (verse_rotR64(v13, 8) XOR verse_rotR64(v13, 1) XOR v13 >> 7)
+		    +
+		    (verse_rotR64(v10, 61) XOR verse_rotR64(v10, 19) XOR v10 >>
+		     6);
+		v25 =
+		    v20 + 0xc6e00bf33da88fc2ULL + v13 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v13 +=
+		    v6 +
+		    (verse_rotR64(v14, 8) XOR verse_rotR64(v14, 1) XOR v14 >> 7)
+		    +
+		    (verse_rotR64(v11, 61) XOR verse_rotR64(v11, 19) XOR v11 >>
+		     6);
+		v25 =
+		    v19 + 0xd5a79147930aa725ULL + v14 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v14 +=
+		    v7 +
+		    (verse_rotR64(v15, 8) XOR verse_rotR64(v15, 1) XOR v15 >> 7)
+		    +
+		    (verse_rotR64(v12, 61) XOR verse_rotR64(v12, 19) XOR v12 >>
+		     6);
+		v25 =
+		    v18 + 0x06ca6351e003826fULL + v15 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v15 +=
+		    v8 +
+		    (verse_rotR64(v16, 8) XOR verse_rotR64(v16, 1) XOR v16 >> 7)
+		    +
+		    (verse_rotR64(v13, 61) XOR verse_rotR64(v13, 19) XOR v13 >>
+		     6);
+		v25 =
+		    v17 + 0x142929670a0e6e70ULL + v16 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v16 +=
+		    v9 +
+		    (verse_rotR64(v1, 8) XOR verse_rotR64(v1, 1) XOR v1 >> 7) +
+		    (verse_rotR64(v14, 61) XOR verse_rotR64(v14, 19) XOR v14 >>
+		     6);
+		v25 =
+		    v24 + 0x27b70a8546d22ffcULL + v1 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v1 +=
+		    v10 +
+		    (verse_rotR64(v2, 8) XOR verse_rotR64(v2, 1) XOR v2 >> 7) +
+		    (verse_rotR64(v15, 61) XOR verse_rotR64(v15, 19) XOR v15 >>
+		     6);
+		v25 =
+		    v23 + 0x2e1b21385c26c926ULL + v2 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v2 +=
+		    v11 +
+		    (verse_rotR64(v3, 8) XOR verse_rotR64(v3, 1) XOR v3 >> 7) +
+		    (verse_rotR64(v16, 61) XOR verse_rotR64(v16, 19) XOR v16 >>
+		     6);
+		v25 =
+		    v22 + 0x4d2c6dfc5ac42aedULL + v3 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v3 +=
+		    v12 +
+		    (verse_rotR64(v4, 8) XOR verse_rotR64(v4, 1) XOR v4 >> 7) +
+		    (verse_rotR64(v1, 61) XOR verse_rotR64(v1, 19) XOR v1 >> 6);
+		v25 =
+		    v21 + 0x53380d139d95b3dfULL + v4 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v4 +=
+		    v13 +
+		    (verse_rotR64(v5, 8) XOR verse_rotR64(v5, 1) XOR v5 >> 7) +
+		    (verse_rotR64(v2, 61) XOR verse_rotR64(v2, 19) XOR v2 >> 6);
+		v25 =
+		    v20 + 0x650a73548baf63deULL + v5 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v5 +=
+		    v14 +
+		    (verse_rotR64(v6, 8) XOR verse_rotR64(v6, 1) XOR v6 >> 7) +
+		    (verse_rotR64(v3, 61) XOR verse_rotR64(v3, 19) XOR v3 >> 6);
+		v25 =
+		    v19 + 0x766a0abb3c77b2a8ULL + v6 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v6 +=
+		    v15 +
+		    (verse_rotR64(v7, 8) XOR verse_rotR64(v7, 1) XOR v7 >> 7) +
+		    (verse_rotR64(v4, 61) XOR verse_rotR64(v4, 19) XOR v4 >> 6);
+		v25 =
+		    v18 + 0x81c2c92e47edaee6ULL + v7 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v7 +=
+		    v16 +
+		    (verse_rotR64(v8, 8) XOR verse_rotR64(v8, 1) XOR v8 >> 7) +
+		    (verse_rotR64(v5, 61) XOR verse_rotR64(v5, 19) XOR v5 >> 6);
+		v25 =
+		    v17 + 0x92722c851482353bULL + v8 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v8 +=
+		    v1 +
+		    (verse_rotR64(v9, 8) XOR verse_rotR64(v9, 1) XOR v9 >> 7) +
+		    (verse_rotR64(v6, 61) XOR verse_rotR64(v6, 19) XOR v6 >> 6);
+		v25 =
+		    v24 + 0xa2bfe8a14cf10364ULL + v9 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v9 +=
+		    v2 +
+		    (verse_rotR64(v10, 8) XOR verse_rotR64(v10, 1) XOR v10 >> 7)
+		    +
+		    (verse_rotR64(v7, 61) XOR verse_rotR64(v7, 19) XOR v7 >> 6);
+		v25 =
+		    v23 + 0xa81a664bbc423001ULL + v10 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v10 +=
+		    v3 +
+		    (verse_rotR64(v11, 8) XOR verse_rotR64(v11, 1) XOR v11 >> 7)
+		    +
+		    (verse_rotR64(v8, 61) XOR verse_rotR64(v8, 19) XOR v8 >> 6);
+		v25 =
+		    v22 + 0xc24b8b70d0f89791ULL + v11 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v11 +=
+		    v4 +
+		    (verse_rotR64(v12, 8) XOR verse_rotR64(v12, 1) XOR v12 >> 7)
+		    +
+		    (verse_rotR64(v9, 61) XOR verse_rotR64(v9, 19) XOR v9 >> 6);
+		v25 =
+		    v21 + 0xc76c51a30654be30ULL + v12 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v12 +=
+		    v5 +
+		    (verse_rotR64(v13, 8) XOR verse_rotR64(v13, 1) XOR v13 >> 7)
+		    +
+		    (verse_rotR64(v10, 61) XOR verse_rotR64(v10, 19) XOR v10 >>
+		     6);
+		v25 =
+		    v20 + 0xd192e819d6ef5218ULL + v13 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v13 +=
+		    v6 +
+		    (verse_rotR64(v14, 8) XOR verse_rotR64(v14, 1) XOR v14 >> 7)
+		    +
+		    (verse_rotR64(v11, 61) XOR verse_rotR64(v11, 19) XOR v11 >>
+		     6);
+		v25 =
+		    v19 + 0xd69906245565a910ULL + v14 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v14 +=
+		    v7 +
+		    (verse_rotR64(v15, 8) XOR verse_rotR64(v15, 1) XOR v15 >> 7)
+		    +
+		    (verse_rotR64(v12, 61) XOR verse_rotR64(v12, 19) XOR v12 >>
+		     6);
+		v25 =
+		    v18 + 0xf40e35855771202aULL + v15 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v15 +=
+		    v8 +
+		    (verse_rotR64(v16, 8) XOR verse_rotR64(v16, 1) XOR v16 >> 7)
+		    +
+		    (verse_rotR64(v13, 61) XOR verse_rotR64(v13, 19) XOR v13 >>
+		     6);
+		v25 =
+		    v17 + 0x106aa07032bbd1b8ULL + v16 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v16 +=
+		    v9 +
+		    (verse_rotR64(v1, 8) XOR verse_rotR64(v1, 1) XOR v1 >> 7) +
+		    (verse_rotR64(v14, 61) XOR verse_rotR64(v14, 19) XOR v14 >>
+		     6);
+		v25 =
+		    v24 + 0x19a4c116b8d2d0c8ULL + v1 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v1 +=
+		    v10 +
+		    (verse_rotR64(v2, 8) XOR verse_rotR64(v2, 1) XOR v2 >> 7) +
+		    (verse_rotR64(v15, 61) XOR verse_rotR64(v15, 19) XOR v15 >>
+		     6);
+		v25 =
+		    v23 + 0x1e376c085141ab53ULL + v2 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v2 +=
+		    v11 +
+		    (verse_rotR64(v3, 8) XOR verse_rotR64(v3, 1) XOR v3 >> 7) +
+		    (verse_rotR64(v16, 61) XOR verse_rotR64(v16, 19) XOR v16 >>
+		     6);
+		v25 =
+		    v22 + 0x2748774cdf8eeb99ULL + v3 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v3 +=
+		    v12 +
+		    (verse_rotR64(v4, 8) XOR verse_rotR64(v4, 1) XOR v4 >> 7) +
+		    (verse_rotR64(v1, 61) XOR verse_rotR64(v1, 19) XOR v1 >> 6);
+		v25 =
+		    v21 + 0x34b0bcb5e19b48a8ULL + v4 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v4 +=
+		    v13 +
+		    (verse_rotR64(v5, 8) XOR verse_rotR64(v5, 1) XOR v5 >> 7) +
+		    (verse_rotR64(v2, 61) XOR verse_rotR64(v2, 19) XOR v2 >> 6);
+		v25 =
+		    v20 + 0x391c0cb3c5c95a63ULL + v5 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v5 +=
+		    v14 +
+		    (verse_rotR64(v6, 8) XOR verse_rotR64(v6, 1) XOR v6 >> 7) +
+		    (verse_rotR64(v3, 61) XOR verse_rotR64(v3, 19) XOR v3 >> 6);
+		v25 =
+		    v19 + 0x4ed8aa4ae3418acbULL + v6 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v6 +=
+		    v15 +
+		    (verse_rotR64(v7, 8) XOR verse_rotR64(v7, 1) XOR v7 >> 7) +
+		    (verse_rotR64(v4, 61) XOR verse_rotR64(v4, 19) XOR v4 >> 6);
+		v25 =
+		    v18 + 0x5b9cca4f7763e373ULL + v7 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v7 +=
+		    v16 +
+		    (verse_rotR64(v8, 8) XOR verse_rotR64(v8, 1) XOR v8 >> 7) +
+		    (verse_rotR64(v5, 61) XOR verse_rotR64(v5, 19) XOR v5 >> 6);
+		v25 =
+		    v17 + 0x682e6ff3d6b2b8a3ULL + v8 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v8 +=
+		    v1 +
+		    (verse_rotR64(v9, 8) XOR verse_rotR64(v9, 1) XOR v9 >> 7) +
+		    (verse_rotR64(v6, 61) XOR verse_rotR64(v6, 19) XOR v6 >> 6);
+		v25 =
+		    v24 + 0x748f82ee5defb2fcULL + v9 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v9 +=
+		    v2 +
+		    (verse_rotR64(v10, 8) XOR verse_rotR64(v10, 1) XOR v10 >> 7)
+		    +
+		    (verse_rotR64(v7, 61) XOR verse_rotR64(v7, 19) XOR v7 >> 6);
+		v25 =
+		    v23 + 0x78a5636f43172f60ULL + v10 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v10 +=
+		    v3 +
+		    (verse_rotR64(v11, 8) XOR verse_rotR64(v11, 1) XOR v11 >> 7)
+		    +
+		    (verse_rotR64(v8, 61) XOR verse_rotR64(v8, 19) XOR v8 >> 6);
+		v25 =
+		    v22 + 0x84c87814a1f0ab72ULL + v11 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v11 +=
+		    v4 +
+		    (verse_rotR64(v12, 8) XOR verse_rotR64(v12, 1) XOR v12 >> 7)
+		    +
+		    (verse_rotR64(v9, 61) XOR verse_rotR64(v9, 19) XOR v9 >> 6);
+		v25 =
+		    v21 + 0x8cc702081a6439ecULL + v12 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v12 +=
+		    v5 +
+		    (verse_rotR64(v13, 8) XOR verse_rotR64(v13, 1) XOR v13 >> 7)
+		    +
+		    (verse_rotR64(v10, 61) XOR verse_rotR64(v10, 19) XOR v10 >>
+		     6);
+		v25 =
+		    v20 + 0x90befffa23631e28ULL + v13 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v13 +=
+		    v6 +
+		    (verse_rotR64(v14, 8) XOR verse_rotR64(v14, 1) XOR v14 >> 7)
+		    +
+		    (verse_rotR64(v11, 61) XOR verse_rotR64(v11, 19) XOR v11 >>
+		     6);
+		v25 =
+		    v19 + 0xa4506cebde82bde9ULL + v14 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v14 +=
+		    v7 +
+		    (verse_rotR64(v15, 8) XOR verse_rotR64(v15, 1) XOR v15 >> 7)
+		    +
+		    (verse_rotR64(v12, 61) XOR verse_rotR64(v12, 19) XOR v12 >>
+		     6);
+		v25 =
+		    v18 + 0xbef9a3f7b2c67915ULL + v15 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v15 +=
+		    v8 +
+		    (verse_rotR64(v16, 8) XOR verse_rotR64(v16, 1) XOR v16 >> 7)
+		    +
+		    (verse_rotR64(v13, 61) XOR verse_rotR64(v13, 19) XOR v13 >>
+		     6);
+		v25 =
+		    v17 + 0xc67178f2e372532bULL + v16 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v16 +=
+		    v9 +
+		    (verse_rotR64(v1, 8) XOR verse_rotR64(v1, 1) XOR v1 >> 7) +
+		    (verse_rotR64(v14, 61) XOR verse_rotR64(v14, 19) XOR v14 >>
+		     6);
+		v25 =
+		    v24 + 0xca273eceea26619cULL + v1 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v25 =
+		    v23 + 0xd186b8c721c0c207ULL + v2 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v25 =
+		    v22 + 0xeada7dd6cde0eb1eULL + v3 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v25 =
+		    v21 + 0xf57d4f7fee6ed178ULL + v4 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v25 =
+		    v20 + 0x06f067aa72176fbaULL + v5 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v25 =
+		    v19 + 0x0a637dc5a2c898a6ULL + v6 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v25 =
+		    v18 + 0x113f9804bef90daeULL + v7 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v25 =
+		    v17 + 0x1b710b35131c471bULL + v8 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v25 =
+		    v24 + 0x28db77f523047d84ULL + v9 +
+		    (v23 XOR v21 & (v22 XOR v23)) +
+		    (verse_rotR64(v21, 41) XOR verse_rotR64(v21, 18)
+		     XOR verse_rotR64(v21, 14));
+		v20 += v25;
+		v24 = v25 + (verse_rotR64(v17, 39) XOR verse_rotR64(v17, 34)
+			     XOR verse_rotR64(v17,
+					      28)) +
+		    (v17 & v18 | v19 & (v18 | v17));
+		v25 =
+		    v23 + 0x32caab7b40c72493ULL + v10 +
+		    (v22 XOR v20 & (v21 XOR v22)) +
+		    (verse_rotR64(v20, 41) XOR verse_rotR64(v20, 18)
+		     XOR verse_rotR64(v20, 14));
+		v19 += v25;
+		v23 = v25 + (verse_rotR64(v24, 39) XOR verse_rotR64(v24, 34)
+			     XOR verse_rotR64(v24,
+					      28)) +
+		    (v24 & v17 | v18 & (v17 | v24));
+		v25 =
+		    v22 + 0x3c9ebe0a15c9bebcULL + v11 +
+		    (v21 XOR v19 & (v20 XOR v21)) +
+		    (verse_rotR64(v19, 41) XOR verse_rotR64(v19, 18)
+		     XOR verse_rotR64(v19, 14));
+		v18 += v25;
+		v22 = v25 + (verse_rotR64(v23, 39) XOR verse_rotR64(v23, 34)
+			     XOR verse_rotR64(v23,
+					      28)) +
+		    (v23 & v24 | v17 & (v24 | v23));
+		v25 =
+		    v21 + 0x431d67c49c100d4cULL + v12 +
+		    (v20 XOR v18 & (v19 XOR v20)) +
+		    (verse_rotR64(v18, 41) XOR verse_rotR64(v18, 18)
+		     XOR verse_rotR64(v18, 14));
+		v17 += v25;
+		v21 = v25 + (verse_rotR64(v22, 39) XOR verse_rotR64(v22, 34)
+			     XOR verse_rotR64(v22,
+					      28)) +
+		    (v22 & v23 | v24 & (v23 | v22));
+		v25 =
+		    v20 + 0x4cc5d4becb3e42b6ULL + v13 +
+		    (v19 XOR v17 & (v18 XOR v19)) +
+		    (verse_rotR64(v17, 41) XOR verse_rotR64(v17, 18)
+		     XOR verse_rotR64(v17, 14));
+		v24 += v25;
+		v20 = v25 + (verse_rotR64(v21, 39) XOR verse_rotR64(v21, 34)
+			     XOR verse_rotR64(v21,
+					      28)) +
+		    (v21 & v22 | v23 & (v22 | v21));
+		v25 =
+		    v19 + 0x597f299cfc657e2aULL + v14 +
+		    (v18 XOR v24 & (v17 XOR v18)) +
+		    (verse_rotR64(v24, 41) XOR verse_rotR64(v24, 18)
+		     XOR verse_rotR64(v24, 14));
+		v23 += v25;
+		v19 = v25 + (verse_rotR64(v20, 39) XOR verse_rotR64(v20, 34)
+			     XOR verse_rotR64(v20,
+					      28)) +
+		    (v20 & v21 | v22 & (v21 | v20));
+		v25 =
+		    v18 + 0x5fcb6fab3ad6faecULL + v15 +
+		    (v17 XOR v23 & (v24 XOR v17)) +
+		    (verse_rotR64(v23, 41) XOR verse_rotR64(v23, 18)
+		     XOR verse_rotR64(v23, 14));
+		v22 += v25;
+		v18 = v25 + (verse_rotR64(v19, 39) XOR verse_rotR64(v19, 34)
+			     XOR verse_rotR64(v19,
+					      28)) +
+		    (v19 & v20 | v21 & (v20 | v19));
+		v25 =
+		    v17 + 0x6c44198c4a475817ULL + v16 +
+		    (v24 XOR v22 & (v23 XOR v24)) +
+		    (verse_rotR64(v22, 41) XOR verse_rotR64(v22, 18)
+		     XOR verse_rotR64(v22, 14));
+		v21 += v25;
+		v17 = v25 + (verse_rotR64(v18, 39) XOR verse_rotR64(v18, 34)
+			     XOR verse_rotR64(v18,
+					      28)) +
+		    (v18 & v19 | v20 & (v19 | v18));
+		v17 += v0[0];
+		v18 += v0[1];
+		v19 += v0[2];
+		v20 += v0[3];
+		v21 += v0[4];
+		v22 += v0[5];
+		v23 += v0[6];
+		v24 += v0[7];
+		v0[0] = v17;
+		v0[1] = v18;
+		v0[2] = v19;
+		v0[3] = v20;
+		v0[4] = v21;
+		v0[5] = v22;
+		v0[6] = v23;
+		v0[7] = v24;
+		++bPtr;
+		--cTr;
+	};
+}
diff --git a/libverse/verse.c b/libverse/verse.c
new file mode 100644
--- /dev/null
+++ b/libverse/verse.c
@@ -0,0 +1,90 @@
+#include "verse.h"
+
+/*
+ *  These are declared as macros because they will work for both
+ *  32-bit as well as 64-bit cases.
+ */
+
+#define MASK(i)                                                                \
+	(0xFFULL << (8 * (i))) /* mask to select the ith byte              */
+
+#define SEL(a, i) ((a)&MASK(i)) /* select the ith byte                      */
+
+#define MOVL(a, i)                                                             \
+	((a) << (8 * (i))) /* shift the bytes i positions to the left  */
+
+#define MOVR(a, i)                                                             \
+	((a) >> (8 * (i))) /* shift the bytes i positions to the right */
+
+#define SWAP(a, i, j) (MOVL(SEL(a, i), (j - i)) | MOVR(SEL(a, j), (j - i)))
+/* This function swaps the ith and jth bytes and sets other bytes to 0 */
+
+#define TO16(x) ((uint16_t)(x))
+#define TO32(x) ((uint32_t)(x))
+#define TO64(x) ((uint64_t)(x))
+
+#define B16(ptr, i) (TO16(ptr[i]))
+#define B32(ptr, i) (TO32(ptr[i]))
+#define B64(ptr, i) (TO64(ptr[i]))
+
+/* Make a 16-bit quantity out of the 4 bytes given in MSB first order */
+#define MK16(a, b) ((a) << 8 | (b))
+/* Similar to MK16 but for 32-bit quantities */
+#define MK32(a, b, c, d) ((a) << 24 | (b) << 16 | (c) << 8 | (d))
+/* Similar to MK32 but for 64-bit quantities */
+#define MK64(a, b, c, d, e, f, g, h)                                           \
+	((a) << 56 | (b) << 48 | (c) << 40 | (d) << 32 | (e) << 24 | (f) << 16 |   \
+	 (g) << 8 | (h))
+
+#ifdef __VERSE_REQUIRE_PORTABLE_SWAP__
+
+uint16_t verse_bswap16(uint16_t a) { return (SWAP(a, 0, 1)); }
+uint32_t verse_bswap32(uint32_t a) { return (SWAP(a, 0, 3) | SWAP(a, 1, 2)); }
+uint64_t verse_bswap64(uint64_t a) {
+	return (SWAP(a, 0, 7) | SWAP(a, 1, 6) | SWAP(a, 2, 5) | SWAP(a, 3, 4));
+}
+
+#endif
+
+#ifdef __VERSE_REQUIRE_PORTABLE_ENDIAN__
+
+uint16_t verse_to_be16(uint16_t x) {
+	uint8_t *ptr = (uint8_t *)&x;
+	return MK16(B32(ptr, 0), B32(ptr, 1));
+}
+
+uint16_t verse_to_le32(uint16_t x) {
+	uint8_t *ptr = (uint8_t *)&x;
+	return MK32(B32(ptr, 1), B32(ptr, 0));
+}
+
+uint32_t verse_to_be32(uint32_t x) {
+	uint8_t *ptr = (uint8_t *)&x;
+	return MK32(B32(ptr, 0), B32(ptr, 1), B32(ptr, 2), B32(ptr, 3));
+}
+
+uint32_t verse_to_le32(uint32_t x) {
+	uint8_t *ptr = (uint8_t *)&x;
+	return MK32(B32(ptr, 3), B32(ptr, 2), B32(ptr, 1), B32(ptr, 0));
+}
+
+uint64_t verse_to_be64(uint64_t x) {
+	uint8_t *ptr = (uint8_t *)&x;
+	return MK64(B64(ptr, 0), B64(ptr, 1), B64(ptr, 2), B64(ptr, 3), B64(ptr, 4),
+	            B64(ptr, 5), B64(ptr, 6), B64(ptr, 7));
+}
+
+uint64_t verse_to_le64(uint64_t x) {
+	uint8_t *ptr = (uint8_t *)&x;
+	return MK64(B64(ptr, 7), B64(ptr, 6), B64(ptr, 5), B64(ptr, 4), B64(ptr, 3),
+	            B64(ptr, 2), B64(ptr, 1), B64(ptr, 0));
+}
+
+uint16_t verse_from_be16(uint16_t x) { return verse_to_be16(x); }
+uint32_t verse_from_be32(uint32_t x) { return verse_to_be32(x); }
+uint64_t verse_from_be64(uint64_t x) { return verse_to_be64(x); }
+uint16_t verse_from_le16(uint16_t x) { return verse_to_le16(x); }
+uint32_t verse_from_le32(uint32_t x) { return verse_to_le32(x); }
+uint64_t verse_from_le64(uint64_t x) { return verse_to_le64(x); }
+
+#endif
diff --git a/liquid/LiquidSpec.hs b/liquid/LiquidSpec.hs
deleted file mode 100644
--- a/liquid/LiquidSpec.hs
+++ /dev/null
@@ -1,41 +0,0 @@
-import Control.Monad
-import Language.Haskell.Liquid.Liquid
-import System.Exit
-import System.Directory
-import System.FilePath
-
--- | Liquid haskell is run on these files/directors. If the given name
--- is a directory we recurse on all .hs/.lhs files in that directory.
-toCheck :: [FilePath]
-toCheck = [ "Raaz/Core/Encode"
-          , "Raaz/Core/Types/Tuple.hs"
-          , "Raaz/Hash/Sha1"
-          , "Raaz/Hash/Sha224"
-          , "Raaz/Hash/Sha256"
-          , "Raaz/Hash/Sha384"
-          , "Raaz/Hash/Sha512"
-          ]
-
-main :: IO ()
-main = do allHsFiles toCheck >>= liquid
-
-
-allHsFiles :: [FilePath] -> IO [FilePath]
-allHsFiles = fmap concat . mapM allHsFile
-
-allHsFile :: FilePath -> IO [FilePath]
-allHsFile fp = doesFileExist fp >>= handleFile
-
-  where handleFile cond
-           | cond && checkHs fp = return [fp]
-           | cond               = return []
-           | otherwise          = doesDirectoryExist fp >>= handleDir
-
-        handleDir cond
-           | cond       = recurse
-           | otherwise  = return []
-
-        recurse = listDirectory fp >>= allHsFiles . map (fp</>)
-
-        checkHs fp = ext == ".hs" || ext == ".lhs"
-          where ext = takeExtension fp
diff --git a/mans/Makefile b/mans/Makefile
deleted file mode 100644
--- a/mans/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-MAN_PAGES=raaz.1  # Which man pages to generate.
-MAN_PAGES_GZ= $(addsuffix .gz, ${MAN_PAGES})
-MAN_SOURCES= $(addsuffix .md, ${MAN_PAGES})
-
-.PHONY: all clean
-
-all: ${MAN_PAGES_GZ}
-clean:
-	rm -f ${MAN_PAGES} ${MAN_PAGES_GZ}
-
-${MAN_PAGES_GZ}:%.gz:%
-	gzip $<
-${MAN_PAGES}:%:%.md
-	pandoc -s  $< -t man -o $@
diff --git a/mans/raaz.1.md b/mans/raaz.1.md
deleted file mode 100644
--- a/mans/raaz.1.md
+++ /dev/null
@@ -1,104 +0,0 @@
----
-title: RAAZ(1) The Raaz Cryptographic Library | Version 0.2
-author: Piyush P Kurur
-date: June 22, 2017
----
-
-# NAME
-
-raaz - Command line tool for the Raaz cryptographic library.
-
-# SYNOPSIS
-
-**raaz** **[-v|--version]**
-
-**raaz** **[COMMAND]** **[COMMAND_OPTIONS]** **[ARGUMENTS]**
-
-
-# DESCRIPTION
-
-Raaz is a cryptographic library for the Haskell programming
-language. One of the important design goal is to use the type system
-of Haskell to catch various bugs like buffer overflows and timing
-attacks at compile time. Thus, Raaz is meant to be used as
-cryptographic library for applications written in Haskell.
-Nonetheless, we expose some of the implemented primitives using the
-program **raaz** for use in shell scripts.
-
-# OPTIONS AND SUB-COMMANDS
-
-
-The program **raaz** exposes the cryptographic primitives as
-sub-commands. With no sub-commands **raaz** understands the following
-options
-
-**-h**, **--help**
-:    Display help message. This option is supported by sub-commands as well
-     in which case it displays the brief help of that sub-command.
-
-**-v**, **--version**
-:    Display the version of the underlying raaz library
-
-The sub-commands of raaz falls in the following categories.
-
-## Randomness
-
-**raaz** **rand** [BYTES_TO_GENERATE]
-
-
-With no arguments this command generates a never ending stream of
-cryptographically secure random bytes. For a non-negative integral
-argument **N**, this command generates exactly **N** bytes of random
-data.
-
-
-## File checksums
-
-**raaz** **blake2bsum** [OPTIONS] *FILE1* *FILE2* ...
-
-**raaz** **blake2ssum** [OPTIONS] *FILE1* *FILE2* ...
-
-**raaz** **sha512sum** [OPTIONS] *FILE1* *FILE2* ...
-
-**raaz** **sha256sum** [OPTIONS] *FILE1* *FILE2* ...
-
-Use the above checksum commands to compute/verify file checksums.  All
-these commands take the same set of options. One can use these
-checksum commands to compute as well as verify the integrity of
-files. In *compute mode*, the command prints one line in the format
-(DIGEST 2*SPACE FILE) for each input file. The DIGEST is the base16
-encoding of the cryptographic hash of the contents of the file. For
-example,
-
-```
-$ raaz sha256sum /dev/null
-e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  /dev/null
-
-$ raaz blake2ssum /dev/null
-69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9  /dev/null
-```
-
-In *computation mode*, a non-zero exist status indicates some error in
-opening one of the input file.  In *verification mode*, **raaz**
-returns a non-zero status if the checksum of a file does not match
-with its associated input checksum. Thus, these commands can be used
-to check the integrity of a set of files.
-
-
-These commands provide an alternative to the common unix commands
-sha512sum and sha256sum. Therefore, checksums computed by one of these
-programs can be verified by **raaz** with the appropriate sub-command
-(and vice-versa).
-
-
-**Common options for all checksum commands**
-
-**-c**, **--check**
-:    *Verify* the checksums present in the input file instead of compute
-     the checksum of the arguments.
-
-**-q**, **--quiet**
-:    While verifying do not print OK for successful checks. Only print failures.
-
-**-s**, **--status**
-:    While verifying do not print anything. Only return the appropriate exit status.
diff --git a/monocypher/monocypher-3.0.0/monocypher.c b/monocypher/monocypher-3.0.0/monocypher.c
new file mode 100644
--- /dev/null
+++ b/monocypher/monocypher-3.0.0/monocypher.c
@@ -0,0 +1,2246 @@
+// Monocypher version 3.0.0
+//
+// This file is dual-licensed.  Choose whichever licence you want from
+// the two licences listed below.
+//
+// The first licence is a regular 2-clause BSD licence.  The second licence
+// is the CC-0 from Creative Commons. It is intended to release Monocypher
+// to the public domain.  The BSD licence serves as a fallback option.
+//
+// SPDX-License-Identifier: BSD-2-Clause OR CC0-1.0
+//
+// ------------------------------------------------------------------------
+//
+// Copyright (c) 2017-2020, Loup Vaillant
+// All rights reserved.
+//
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// 1. Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// ------------------------------------------------------------------------
+//
+// Written in 2017-2020 by Loup Vaillant
+//
+// To the extent possible under law, the author(s) have dedicated all copyright
+// and related neighboring rights to this software to the public domain
+// worldwide.  This software is distributed without any warranty.
+//
+// You should have received a copy of the CC0 Public Domain Dedication along
+// with this software.  If not, see
+// <https://creativecommons.org/publicdomain/zero/1.0/>
+
+#include "monocypher.h"
+
+/////////////////
+/// Utilities ///
+/////////////////
+#define FOR_T(type, i, start, end) for (type i = (start); i < (end); i++)
+#define FOR(i, start, end)         FOR_T(size_t, i, start, end)
+#define WIPE_CTX(ctx)              crypto_wipe(ctx   , sizeof(*(ctx)))
+#define WIPE_BUFFER(buffer)        crypto_wipe(buffer, sizeof(buffer))
+#define MIN(a, b)                  ((a) <= (b) ? (a) : (b))
+#define MAX(a, b)                  ((a) >= (b) ? (a) : (b))
+#define ALIGN(x, block_size)       ((~(x) + 1) & ((block_size) - 1))
+typedef int8_t   i8;
+typedef uint8_t  u8;
+typedef int16_t  i16;
+typedef uint32_t u32;
+typedef int32_t  i32;
+typedef int64_t  i64;
+typedef uint64_t u64;
+
+static const u8 zero[128] = {0};
+
+static u32 load24_le(const u8 s[3])
+{
+    return (u32)s[0]
+        | ((u32)s[1] <<  8)
+        | ((u32)s[2] << 16);
+}
+
+static u32 load32_le(const u8 s[4])
+{
+    return (u32)s[0]
+        | ((u32)s[1] <<  8)
+        | ((u32)s[2] << 16)
+        | ((u32)s[3] << 24);
+}
+
+static u64 load64_le(const u8 s[8])
+{
+    return load32_le(s) | ((u64)load32_le(s+4) << 32);
+}
+
+static void store32_le(u8 out[4], u32 in)
+{
+    out[0] =  in        & 0xff;
+    out[1] = (in >>  8) & 0xff;
+    out[2] = (in >> 16) & 0xff;
+    out[3] = (in >> 24) & 0xff;
+}
+
+static void store64_le(u8 out[8], u64 in)
+{
+    store32_le(out    , (u32)in );
+    store32_le(out + 4, in >> 32);
+}
+
+static u64 rotr64(u64 x, u64 n) { return (x >> n) ^ (x << (64 - n)); }
+static u32 rotl32(u32 x, u32 n) { return (x << n) ^ (x >> (32 - n)); }
+
+static int neq0(u64 diff)
+{   // constant time comparison to zero
+    // return diff != 0 ? -1 : 0
+    u64 half = (diff >> 32) | ((u32)diff);
+    return (1 & ((half - 1) >> 32)) - 1;
+}
+
+static u64 x16(const u8 a[16], const u8 b[16])
+{
+    return (load64_le(a + 0) ^ load64_le(b + 0))
+        |  (load64_le(a + 8) ^ load64_le(b + 8));
+}
+static u64 x32(const u8 a[32],const u8 b[32]){return x16(a,b)| x16(a+16, b+16);}
+static u64 x64(const u8 a[64],const u8 b[64]){return x32(a,b)| x32(a+32, b+32);}
+int crypto_verify16(const u8 a[16], const u8 b[16]){ return neq0(x16(a, b)); }
+int crypto_verify32(const u8 a[32], const u8 b[32]){ return neq0(x32(a, b)); }
+int crypto_verify64(const u8 a[64], const u8 b[64]){ return neq0(x64(a, b)); }
+
+static int zerocmp32(const u8 p[32])
+{
+    return crypto_verify32(p, zero);
+}
+
+void crypto_wipe(void *secret, size_t size)
+{
+    volatile u8 *v_secret = (u8*)secret;
+    FOR (i, 0, size) {
+        v_secret[i] = 0;
+    }
+}
+
+/////////////////
+/// Chacha 20 ///
+/////////////////
+#define QUARTERROUND(a, b, c, d)     \
+    a += b;  d = rotl32(d ^ a, 16);  \
+    c += d;  b = rotl32(b ^ c, 12);  \
+    a += b;  d = rotl32(d ^ a,  8);  \
+    c += d;  b = rotl32(b ^ c,  7)
+
+static void chacha20_rounds(u32 out[16], const u32 in[16])
+{
+    // The temporary variables make Chacha20 10% faster.
+    u32 t0  = in[ 0];  u32 t1  = in[ 1];  u32 t2  = in[ 2];  u32 t3  = in[ 3];
+    u32 t4  = in[ 4];  u32 t5  = in[ 5];  u32 t6  = in[ 6];  u32 t7  = in[ 7];
+    u32 t8  = in[ 8];  u32 t9  = in[ 9];  u32 t10 = in[10];  u32 t11 = in[11];
+    u32 t12 = in[12];  u32 t13 = in[13];  u32 t14 = in[14];  u32 t15 = in[15];
+
+    FOR (i, 0, 10) { // 20 rounds, 2 rounds per loop.
+        QUARTERROUND(t0, t4, t8 , t12); // column 0
+        QUARTERROUND(t1, t5, t9 , t13); // column 1
+        QUARTERROUND(t2, t6, t10, t14); // column 2
+        QUARTERROUND(t3, t7, t11, t15); // column 3
+        QUARTERROUND(t0, t5, t10, t15); // diagonal 0
+        QUARTERROUND(t1, t6, t11, t12); // diagonal 1
+        QUARTERROUND(t2, t7, t8 , t13); // diagonal 2
+        QUARTERROUND(t3, t4, t9 , t14); // diagonal 3
+    }
+    out[ 0] = t0;   out[ 1] = t1;   out[ 2] = t2;   out[ 3] = t3;
+    out[ 4] = t4;   out[ 5] = t5;   out[ 6] = t6;   out[ 7] = t7;
+    out[ 8] = t8;   out[ 9] = t9;   out[10] = t10;  out[11] = t11;
+    out[12] = t12;  out[13] = t13;  out[14] = t14;  out[15] = t15;
+}
+
+static void chacha20_init_key(u32 block[16], const u8 key[32])
+{
+    // constant
+    block[0] = load32_le((const u8*)"expa");
+    block[1] = load32_le((const u8*)"nd 3");
+    block[2] = load32_le((const u8*)"2-by");
+    block[3] = load32_le((const u8*)"te k");
+    // key
+    FOR (i, 0, 8) {
+        block[i+4] = load32_le(key + i*4);
+    }
+}
+
+static u64 chacha20_core(u32 input[16], u8 *cipher_text, const u8 *plain_text,
+                         size_t text_size)
+{
+    // Whole blocks
+    u32    pool[16];
+    size_t nb_blocks = text_size >> 6;
+    FOR (i, 0, nb_blocks) {
+        chacha20_rounds(pool, input);
+        if (plain_text != 0) {
+            FOR (j, 0, 16) {
+                u32 p = pool[j] + input[j];
+                store32_le(cipher_text, p ^ load32_le(plain_text));
+                cipher_text += 4;
+                plain_text  += 4;
+            }
+        } else {
+            FOR (j, 0, 16) {
+                u32 p = pool[j] + input[j];
+                store32_le(cipher_text, p);
+                cipher_text += 4;
+            }
+        }
+        input[12]++;
+        if (input[12] == 0) {
+            input[13]++;
+        }
+    }
+    text_size &= 63;
+
+    // Last (incomplete) block
+    if (text_size > 0) {
+        if (plain_text == 0) {
+            plain_text = zero;
+        }
+        chacha20_rounds(pool, input);
+        u8 tmp[64];
+        FOR (i, 0, 16) {
+            store32_le(tmp + i*4, pool[i] + input[i]);
+        }
+        FOR (i, 0, text_size) {
+            cipher_text[i] = tmp[i] ^ plain_text[i];
+        }
+        WIPE_BUFFER(tmp);
+    }
+    WIPE_BUFFER(pool);
+    return input[12] + ((u64)input[13] << 32) + (text_size > 0);
+}
+
+void crypto_hchacha20(u8 out[32], const u8 key[32], const u8 in [16])
+{
+    u32 block[16];
+    chacha20_init_key(block, key);
+    // input
+    FOR (i, 0, 4) {
+        block[i+12] = load32_le(in + i*4);
+    }
+    chacha20_rounds(block, block);
+    // prevents reversal of the rounds by revealing only half of the buffer.
+    FOR (i, 0, 4) {
+        store32_le(out      + i*4, block[i     ]); // constant
+        store32_le(out + 16 + i*4, block[i + 12]); // counter and nonce
+    }
+    WIPE_BUFFER(block);
+}
+
+u64 crypto_chacha20_ctr(u8 *cipher_text, const u8 *plain_text,
+                        size_t text_size, const u8 key[32], const u8 nonce[8],
+                        u64 ctr)
+{
+    u32 input[16];
+    chacha20_init_key(input, key);
+    input[12] = (u32) ctr;
+    input[13] = (u32)(ctr >> 32);
+    input[14] = load32_le(nonce);
+    input[15] = load32_le(nonce + 4);
+    ctr = chacha20_core(input, cipher_text, plain_text, text_size);
+    WIPE_BUFFER(input);
+    return ctr;
+}
+
+u32 crypto_ietf_chacha20_ctr(u8 *cipher_text, const u8 *plain_text,
+                             size_t text_size,
+                             const u8 key[32], const u8 nonce[12], u32 ctr)
+{
+    u32 input[16];
+    chacha20_init_key(input, key);
+    input[12] = (u32) ctr;
+    input[13] = load32_le(nonce);
+    input[14] = load32_le(nonce + 4);
+    input[15] = load32_le(nonce + 8);
+    ctr = (u32)chacha20_core(input, cipher_text, plain_text, text_size);
+    WIPE_BUFFER(input);
+    return ctr;
+}
+
+u64 crypto_xchacha20_ctr(u8 *cipher_text, const u8 *plain_text,
+                         size_t text_size,
+                         const u8 key[32], const u8 nonce[24], u64 ctr)
+{
+    u8 sub_key[32];
+    crypto_hchacha20(sub_key, key, nonce);
+    ctr = crypto_chacha20_ctr(cipher_text, plain_text, text_size,
+                              sub_key, nonce+16, ctr);
+    WIPE_BUFFER(sub_key);
+    return ctr;
+}
+
+void crypto_chacha20(u8 *cipher_text, const u8 *plain_text, size_t text_size,
+                     const u8 key[32], const u8 nonce[8])
+{
+    crypto_chacha20_ctr(cipher_text, plain_text, text_size, key, nonce, 0);
+
+}
+void crypto_ietf_chacha20(u8 *cipher_text, const u8 *plain_text,
+                          size_t text_size,
+                          const u8 key[32], const u8 nonce[12])
+{
+    crypto_ietf_chacha20_ctr(cipher_text, plain_text, text_size, key, nonce, 0);
+}
+
+void crypto_xchacha20(u8 *cipher_text, const u8 *plain_text, size_t text_size,
+                      const u8 key[32], const u8 nonce[24])
+{
+    crypto_xchacha20_ctr(cipher_text, plain_text, text_size, key, nonce, 0);
+}
+
+/////////////////
+/// Poly 1305 ///
+/////////////////
+
+// h = (h + c) * r
+// preconditions:
+//   ctx->h <= 4_ffffffff_ffffffff_ffffffff_ffffffff
+//   ctx->c <= 1_ffffffff_ffffffff_ffffffff_ffffffff
+//   ctx->r <=   0ffffffc_0ffffffc_0ffffffc_0fffffff
+// Postcondition:
+//   ctx->h <= 4_ffffffff_ffffffff_ffffffff_ffffffff
+static void poly_block(crypto_poly1305_ctx *ctx)
+{
+    // s = h + c, without carry propagation
+    const u64 s0 = ctx->h[0] + (u64)ctx->c[0]; // s0 <= 1_fffffffe
+    const u64 s1 = ctx->h[1] + (u64)ctx->c[1]; // s1 <= 1_fffffffe
+    const u64 s2 = ctx->h[2] + (u64)ctx->c[2]; // s2 <= 1_fffffffe
+    const u64 s3 = ctx->h[3] + (u64)ctx->c[3]; // s3 <= 1_fffffffe
+    const u32 s4 = ctx->h[4] +      ctx->c[4]; // s4 <=          5
+
+    // Local all the things!
+    const u32 r0 = ctx->r[0];       // r0  <= 0fffffff
+    const u32 r1 = ctx->r[1];       // r1  <= 0ffffffc
+    const u32 r2 = ctx->r[2];       // r2  <= 0ffffffc
+    const u32 r3 = ctx->r[3];       // r3  <= 0ffffffc
+    const u32 rr0 = (r0 >> 2) * 5;  // rr0 <= 13fffffb // lose 2 bits...
+    const u32 rr1 = (r1 >> 2) + r1; // rr1 <= 13fffffb // rr1 == (r1 >> 2) * 5
+    const u32 rr2 = (r2 >> 2) + r2; // rr2 <= 13fffffb // rr1 == (r2 >> 2) * 5
+    const u32 rr3 = (r3 >> 2) + r3; // rr3 <= 13fffffb // rr1 == (r3 >> 2) * 5
+
+    // (h + c) * r, without carry propagation
+    const u64 x0 = s0*r0+ s1*rr3+ s2*rr2+ s3*rr1+ s4*rr0; // <= 97ffffe007fffff8
+    const u64 x1 = s0*r1+ s1*r0 + s2*rr3+ s3*rr2+ s4*rr1; // <= 8fffffe20ffffff6
+    const u64 x2 = s0*r2+ s1*r1 + s2*r0 + s3*rr3+ s4*rr2; // <= 87ffffe417fffff4
+    const u64 x3 = s0*r3+ s1*r2 + s2*r1 + s3*r0 + s4*rr3; // <= 7fffffe61ffffff2
+    const u32 x4 = s4 * (r0 & 3); // ...recover 2 bits    // <=                f
+
+    // partial reduction modulo 2^130 - 5
+    const u32 u5 = x4 + (x3 >> 32); // u5 <= 7ffffff5
+    const u64 u0 = (u5 >>  2) * 5 + (x0 & 0xffffffff);
+    const u64 u1 = (u0 >> 32)     + (x1 & 0xffffffff) + (x0 >> 32);
+    const u64 u2 = (u1 >> 32)     + (x2 & 0xffffffff) + (x1 >> 32);
+    const u64 u3 = (u2 >> 32)     + (x3 & 0xffffffff) + (x2 >> 32);
+    const u64 u4 = (u3 >> 32)     + (u5 & 3);
+
+    // Update the hash
+    ctx->h[0] = (u32)u0; // u0 <= 1_9ffffff0
+    ctx->h[1] = (u32)u1; // u1 <= 1_97ffffe0
+    ctx->h[2] = (u32)u2; // u2 <= 1_8fffffe2
+    ctx->h[3] = (u32)u3; // u3 <= 1_87ffffe4
+    ctx->h[4] = (u32)u4; // u4 <=          4
+}
+
+// (re-)initialises the input counter and input buffer
+static void poly_clear_c(crypto_poly1305_ctx *ctx)
+{
+    FOR (i, 0, 4) {
+        ctx->c[i] = 0;
+    }
+    ctx->c_idx = 0;
+}
+
+static void poly_take_input(crypto_poly1305_ctx *ctx, u8 input)
+{
+    size_t word = ctx->c_idx >> 2;
+    size_t byte = ctx->c_idx & 3;
+    ctx->c[word] |= (u32)input << (byte * 8);
+    ctx->c_idx++;
+}
+
+static void poly_update(crypto_poly1305_ctx *ctx,
+                        const u8 *message, size_t message_size)
+{
+    FOR (i, 0, message_size) {
+        poly_take_input(ctx, message[i]);
+        if (ctx->c_idx == 16) {
+            poly_block(ctx);
+            poly_clear_c(ctx);
+        }
+    }
+}
+
+void crypto_poly1305_init(crypto_poly1305_ctx *ctx, const u8 key[32])
+{
+    // Initial hash is zero
+    FOR (i, 0, 5) {
+        ctx->h[i] = 0;
+    }
+    // add 2^130 to every input block
+    ctx->c[4] = 1;
+    poly_clear_c(ctx);
+    // load r and pad (r has some of its bits cleared)
+    FOR (i, 0, 1) { ctx->r  [0] = load32_le(key           ) & 0x0fffffff; }
+    FOR (i, 1, 4) { ctx->r  [i] = load32_le(key + i*4     ) & 0x0ffffffc; }
+    FOR (i, 0, 4) { ctx->pad[i] = load32_le(key + i*4 + 16);              }
+}
+
+void crypto_poly1305_update(crypto_poly1305_ctx *ctx,
+                            const u8 *message, size_t message_size)
+{
+    // Align ourselves with block boundaries
+    size_t align = MIN(ALIGN(ctx->c_idx, 16), message_size);
+    poly_update(ctx, message, align);
+    message      += align;
+    message_size -= align;
+
+    // Process the message block by block
+    size_t nb_blocks = message_size >> 4;
+    FOR (i, 0, nb_blocks) {
+        FOR (j, 0, 4) {
+            ctx->c[j] = load32_le(message +  j*4);
+        }
+        poly_block(ctx);
+        message += 16;
+    }
+    if (nb_blocks > 0) {
+        poly_clear_c(ctx);
+    }
+    message_size &= 15;
+
+    // remaining bytes
+    poly_update(ctx, message, message_size);
+}
+
+void crypto_poly1305_final(crypto_poly1305_ctx *ctx, u8 mac[16])
+{
+    // Process the last block (if any)
+    if (ctx->c_idx != 0) {
+        // move the final 1 according to remaining input length
+        // (We may add less than 2^130 to the last input block)
+        ctx->c[4] = 0;
+        poly_take_input(ctx, 1);
+        // one last hash update
+        poly_block(ctx);
+    }
+
+    // check if we should subtract 2^130-5 by performing the
+    // corresponding carry propagation.
+    const u64 u0 = (u64)5     + ctx->h[0]; // <= 1_00000004
+    const u64 u1 = (u0 >> 32) + ctx->h[1]; // <= 1_00000000
+    const u64 u2 = (u1 >> 32) + ctx->h[2]; // <= 1_00000000
+    const u64 u3 = (u2 >> 32) + ctx->h[3]; // <= 1_00000000
+    const u64 u4 = (u3 >> 32) + ctx->h[4]; // <=          5
+    // u4 indicates how many times we should subtract 2^130-5 (0 or 1)
+
+    // h + pad, minus 2^130-5 if u4 exceeds 3
+    const u64 uu0 = (u4 >> 2) * 5 + ctx->h[0] + ctx->pad[0]; // <= 2_00000003
+    const u64 uu1 = (uu0 >> 32)   + ctx->h[1] + ctx->pad[1]; // <= 2_00000000
+    const u64 uu2 = (uu1 >> 32)   + ctx->h[2] + ctx->pad[2]; // <= 2_00000000
+    const u64 uu3 = (uu2 >> 32)   + ctx->h[3] + ctx->pad[3]; // <= 2_00000000
+
+    store32_le(mac     , (u32)uu0);
+    store32_le(mac +  4, (u32)uu1);
+    store32_le(mac +  8, (u32)uu2);
+    store32_le(mac + 12, (u32)uu3);
+
+    WIPE_CTX(ctx);
+}
+
+void crypto_poly1305(u8     mac[16],  const u8 *message,
+                     size_t message_size, const u8  key[32])
+{
+    crypto_poly1305_ctx ctx;
+    crypto_poly1305_init  (&ctx, key);
+    crypto_poly1305_update(&ctx, message, message_size);
+    crypto_poly1305_final (&ctx, mac);
+}
+
+////////////////
+/// Blake2 b ///
+////////////////
+static const u64 iv[8] = {
+    0x6a09e667f3bcc908, 0xbb67ae8584caa73b,
+    0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1,
+    0x510e527fade682d1, 0x9b05688c2b3e6c1f,
+    0x1f83d9abfb41bd6b, 0x5be0cd19137e2179,
+};
+
+// increment the input offset
+static void blake2b_incr(crypto_blake2b_ctx *ctx)
+{
+    u64   *x = ctx->input_offset;
+    size_t y = ctx->input_idx;
+    x[0] += y;
+    if (x[0] < y) {
+        x[1]++;
+    }
+}
+
+static void blake2b_compress(crypto_blake2b_ctx *ctx, int is_last_block)
+{
+    static const u8 sigma[12][16] = {
+        {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 },
+        { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 },
+        { 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4 },
+        {  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8 },
+        {  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13 },
+        {  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9 },
+        { 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11 },
+        { 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10 },
+        {  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5 },
+        { 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13,  0 },
+        {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 },
+        { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 },
+    };
+
+    // init work vector
+    u64 v0 = ctx->hash[0];  u64 v8  = iv[0];
+    u64 v1 = ctx->hash[1];  u64 v9  = iv[1];
+    u64 v2 = ctx->hash[2];  u64 v10 = iv[2];
+    u64 v3 = ctx->hash[3];  u64 v11 = iv[3];
+    u64 v4 = ctx->hash[4];  u64 v12 = iv[4] ^ ctx->input_offset[0];
+    u64 v5 = ctx->hash[5];  u64 v13 = iv[5] ^ ctx->input_offset[1];
+    u64 v6 = ctx->hash[6];  u64 v14 = iv[6] ^ (u64)~(is_last_block - 1);
+    u64 v7 = ctx->hash[7];  u64 v15 = iv[7];
+
+    // mangle work vector
+    u64 *input = ctx->input;
+#define BLAKE2_G(v, a, b, c, d, x, y)                  \
+    v##a += v##b + x;  v##d = rotr64(v##d ^ v##a, 32); \
+    v##c += v##d;      v##b = rotr64(v##b ^ v##c, 24); \
+    v##a += v##b + y;  v##d = rotr64(v##d ^ v##a, 16); \
+    v##c += v##d;      v##b = rotr64(v##b ^ v##c, 63)
+#define BLAKE2_ROUND(i)                                                 \
+    BLAKE2_G(v, 0, 4,  8, 12, input[sigma[i][ 0]], input[sigma[i][ 1]]);\
+    BLAKE2_G(v, 1, 5,  9, 13, input[sigma[i][ 2]], input[sigma[i][ 3]]);\
+    BLAKE2_G(v, 2, 6, 10, 14, input[sigma[i][ 4]], input[sigma[i][ 5]]);\
+    BLAKE2_G(v, 3, 7, 11, 15, input[sigma[i][ 6]], input[sigma[i][ 7]]);\
+    BLAKE2_G(v, 0, 5, 10, 15, input[sigma[i][ 8]], input[sigma[i][ 9]]);\
+    BLAKE2_G(v, 1, 6, 11, 12, input[sigma[i][10]], input[sigma[i][11]]);\
+    BLAKE2_G(v, 2, 7,  8, 13, input[sigma[i][12]], input[sigma[i][13]]);\
+    BLAKE2_G(v, 3, 4,  9, 14, input[sigma[i][14]], input[sigma[i][15]])
+
+#ifdef BLAKE2_NO_UNROLLING
+    FOR (i, 0, 12) {
+        BLAKE2_ROUND(i);
+    }
+#else
+    BLAKE2_ROUND(0);  BLAKE2_ROUND(1);  BLAKE2_ROUND(2);  BLAKE2_ROUND(3);
+    BLAKE2_ROUND(4);  BLAKE2_ROUND(5);  BLAKE2_ROUND(6);  BLAKE2_ROUND(7);
+    BLAKE2_ROUND(8);  BLAKE2_ROUND(9);  BLAKE2_ROUND(0);  BLAKE2_ROUND(1);
+#endif
+
+    // update hash
+    ctx->hash[0] ^= v0 ^ v8;
+    ctx->hash[1] ^= v1 ^ v9;
+    ctx->hash[2] ^= v2 ^ v10;
+    ctx->hash[3] ^= v3 ^ v11;
+    ctx->hash[4] ^= v4 ^ v12;
+    ctx->hash[5] ^= v5 ^ v13;
+    ctx->hash[6] ^= v6 ^ v14;
+    ctx->hash[7] ^= v7 ^ v15;
+}
+
+static void blake2b_set_input(crypto_blake2b_ctx *ctx, u8 input, size_t index)
+{
+    if (index == 0) {
+        FOR (i, 0, 16) {
+            ctx->input[i] = 0;
+        }
+    }
+    size_t word = index >> 3;
+    size_t byte = index & 7;
+    ctx->input[word] |= (u64)input << (byte << 3);
+
+}
+
+static void blake2b_end_block(crypto_blake2b_ctx *ctx)
+{
+    if (ctx->input_idx == 128) {  // If buffer is full,
+        blake2b_incr(ctx);        // update the input offset
+        blake2b_compress(ctx, 0); // and compress the (not last) block
+        ctx->input_idx = 0;
+    }
+}
+
+static void blake2b_update(crypto_blake2b_ctx *ctx,
+                           const u8 *message, size_t message_size)
+{
+    FOR (i, 0, message_size) {
+        blake2b_end_block(ctx);
+        blake2b_set_input(ctx, message[i], ctx->input_idx);
+        ctx->input_idx++;
+    }
+}
+
+void crypto_blake2b_general_init(crypto_blake2b_ctx *ctx, size_t hash_size,
+                                 const u8           *key, size_t key_size)
+{
+    // initial hash
+    FOR (i, 0, 8) {
+        ctx->hash[i] = iv[i];
+    }
+    ctx->hash[0] ^= 0x01010000 ^ (key_size << 8) ^ hash_size;
+
+    ctx->input_offset[0] = 0;         // beginning of the input, no offset
+    ctx->input_offset[1] = 0;         // beginning of the input, no offset
+    ctx->hash_size       = hash_size; // remember the hash size we want
+    ctx->input_idx       = 0;
+
+    // if there is a key, the first block is that key (padded with zeroes)
+    if (key_size > 0) {
+        crypto_blake2b_update(ctx, key ,       key_size);
+        crypto_blake2b_update(ctx, zero, 128 - key_size);
+    }
+}
+
+void crypto_blake2b_init(crypto_blake2b_ctx *ctx)
+{
+    crypto_blake2b_general_init(ctx, 64, 0, 0);
+}
+
+void crypto_blake2b_update(crypto_blake2b_ctx *ctx,
+                           const u8 *message, size_t message_size)
+{
+    // Align ourselves with block boundaries
+    size_t align = MIN(ALIGN(ctx->input_idx, 128), message_size);
+    blake2b_update(ctx, message, align);
+    message      += align;
+    message_size -= align;
+
+    // Process the message block by block
+    FOR (i, 0, message_size >> 7) { // number of blocks
+        blake2b_end_block(ctx);
+        FOR (j, 0, 16) {
+            ctx->input[j] = load64_le(message + j*8);
+        }
+        message += 128;
+        ctx->input_idx = 128;
+    }
+    message_size &= 127;
+
+    // remaining bytes
+    blake2b_update(ctx, message, message_size);
+}
+
+void crypto_blake2b_final(crypto_blake2b_ctx *ctx, u8 *hash)
+{
+    // Pad the end of the block with zeroes
+    FOR (i, ctx->input_idx, 128) {
+        blake2b_set_input(ctx, 0, i);
+    }
+    blake2b_incr(ctx);        // update the input offset
+    blake2b_compress(ctx, 1); // compress the last block
+    size_t nb_words = ctx->hash_size >> 3;
+    FOR (i, 0, nb_words) {
+        store64_le(hash + i*8, ctx->hash[i]);
+    }
+    FOR (i, nb_words << 3, ctx->hash_size) {
+        hash[i] = (ctx->hash[i >> 3] >> (8 * (i & 7))) & 0xff;
+    }
+    WIPE_CTX(ctx);
+}
+
+void crypto_blake2b_general(u8       *hash   , size_t hash_size,
+                            const u8 *key    , size_t key_size,
+                            const u8 *message, size_t message_size)
+{
+    crypto_blake2b_ctx ctx;
+    crypto_blake2b_general_init(&ctx, hash_size, key, key_size);
+    crypto_blake2b_update(&ctx, message, message_size);
+    crypto_blake2b_final(&ctx, hash);
+}
+
+void crypto_blake2b(u8 hash[64], const u8 *message, size_t message_size)
+{
+    crypto_blake2b_general(hash, 64, 0, 0, message, message_size);
+}
+
+static void blake2b_vtable_init(void *ctx)
+{
+    crypto_blake2b_init(&((crypto_sign_ctx*)ctx)->hash);
+}
+
+static void blake2b_vtable_update(void *ctx, const u8 *m, size_t s)
+{
+    crypto_blake2b_update(&((crypto_sign_ctx*)ctx)->hash, m, s);
+}
+
+static void blake2b_vtable_final(void *ctx, u8 *h)
+{
+    crypto_blake2b_final(&((crypto_sign_ctx*)ctx)->hash, h);
+}
+
+const crypto_sign_vtable crypto_blake2b_vtable = {
+    crypto_blake2b,
+    blake2b_vtable_init,
+    blake2b_vtable_update,
+    blake2b_vtable_final,
+    sizeof(crypto_sign_ctx),
+};
+
+////////////////
+/// Argon2 i ///
+////////////////
+// references to R, Z, Q etc. come from the spec
+
+// Argon2 operates on 1024 byte blocks.
+typedef struct { u64 a[128]; } block;
+
+static void wipe_block(block *b)
+{
+    volatile u64* a = b->a;
+    FOR (i, 0, 128) {
+        a[i] = 0;
+    }
+}
+
+// updates a Blake2 hash with a 32 bit word, little endian.
+static void blake_update_32(crypto_blake2b_ctx *ctx, u32 input)
+{
+    u8 buf[4];
+    store32_le(buf, input);
+    crypto_blake2b_update(ctx, buf, 4);
+    WIPE_BUFFER(buf);
+}
+
+static void load_block(block *b, const u8 bytes[1024])
+{
+    FOR (i, 0, 128) {
+        b->a[i] = load64_le(bytes + i*8);
+    }
+}
+
+static void store_block(u8 bytes[1024], const block *b)
+{
+    FOR (i, 0, 128) {
+        store64_le(bytes + i*8, b->a[i]);
+    }
+}
+
+static void copy_block(block *o,const block*in){FOR(i,0,128)o->a[i] = in->a[i];}
+static void  xor_block(block *o,const block*in){FOR(i,0,128)o->a[i]^= in->a[i];}
+
+// Hash with a virtually unlimited digest size.
+// Doesn't extract more entropy than the base hash function.
+// Mainly used for filling a whole kilobyte block with pseudo-random bytes.
+// (One could use a stream cipher with a seed hash as the key, but
+//  this would introduce another dependency —and point of failure.)
+static void extended_hash(u8       *digest, u32 digest_size,
+                          const u8 *input , u32 input_size)
+{
+    crypto_blake2b_ctx ctx;
+    crypto_blake2b_general_init(&ctx, MIN(digest_size, 64), 0, 0);
+    blake_update_32            (&ctx, digest_size);
+    crypto_blake2b_update      (&ctx, input, input_size);
+    crypto_blake2b_final       (&ctx, digest);
+
+    if (digest_size > 64) {
+        // the conversion to u64 avoids integer overflow on
+        // ludicrously big hash sizes.
+        u32 r   = (u32)(((u64)digest_size + 31) >> 5) - 2;
+        u32 i   =  1;
+        u32 in  =  0;
+        u32 out = 32;
+        while (i < r) {
+            // Input and output overlap. This is intentional
+            crypto_blake2b(digest + out, digest + in, 64);
+            i   +=  1;
+            in  += 32;
+            out += 32;
+        }
+        crypto_blake2b_general(digest + out, digest_size - (32 * r),
+                               0, 0, // no key
+                               digest + in , 64);
+    }
+}
+
+#define LSB(x) ((x) & 0xffffffff)
+#define G(a, b, c, d)                                            \
+    a += b + 2 * LSB(a) * LSB(b);  d ^= a;  d = rotr64(d, 32);   \
+    c += d + 2 * LSB(c) * LSB(d);  b ^= c;  b = rotr64(b, 24);   \
+    a += b + 2 * LSB(a) * LSB(b);  d ^= a;  d = rotr64(d, 16);   \
+    c += d + 2 * LSB(c) * LSB(d);  b ^= c;  b = rotr64(b, 63)
+#define ROUND(v0,  v1,  v2,  v3,  v4,  v5,  v6,  v7,    \
+              v8,  v9, v10, v11, v12, v13, v14, v15)    \
+    G(v0, v4,  v8, v12);  G(v1, v5,  v9, v13);          \
+    G(v2, v6, v10, v14);  G(v3, v7, v11, v15);          \
+    G(v0, v5, v10, v15);  G(v1, v6, v11, v12);          \
+    G(v2, v7,  v8, v13);  G(v3, v4,  v9, v14)
+
+// Core of the compression function G.  Computes Z from R in place.
+static void g_rounds(block *work_block)
+{
+    // column rounds (work_block = Q)
+    for (int i = 0; i < 128; i += 16) {
+        ROUND(work_block->a[i     ], work_block->a[i +  1],
+              work_block->a[i +  2], work_block->a[i +  3],
+              work_block->a[i +  4], work_block->a[i +  5],
+              work_block->a[i +  6], work_block->a[i +  7],
+              work_block->a[i +  8], work_block->a[i +  9],
+              work_block->a[i + 10], work_block->a[i + 11],
+              work_block->a[i + 12], work_block->a[i + 13],
+              work_block->a[i + 14], work_block->a[i + 15]);
+    }
+    // row rounds (work_block = Z)
+    for (int i = 0; i < 16; i += 2) {
+        ROUND(work_block->a[i      ], work_block->a[i +   1],
+              work_block->a[i +  16], work_block->a[i +  17],
+              work_block->a[i +  32], work_block->a[i +  33],
+              work_block->a[i +  48], work_block->a[i +  49],
+              work_block->a[i +  64], work_block->a[i +  65],
+              work_block->a[i +  80], work_block->a[i +  81],
+              work_block->a[i +  96], work_block->a[i +  97],
+              work_block->a[i + 112], work_block->a[i + 113]);
+    }
+}
+
+// The compression function G (copy version for the first pass)
+static void g_copy(block *result, const block *x, const block *y, block* tmp)
+{
+    copy_block(tmp   , x  ); // tmp    = X
+    xor_block (tmp   , y  ); // tmp    = X ^ Y = R
+    copy_block(result, tmp); // result = R         (only difference with g_xor)
+    g_rounds  (tmp);         // tmp    = Z
+    xor_block (result, tmp); // result = R ^ Z
+}
+
+// The compression function G (xor version for subsequent passes)
+static void g_xor(block *result, const block *x, const block *y, block *tmp)
+{
+    copy_block(tmp   , x  ); // tmp    = X
+    xor_block (tmp   , y  ); // tmp    = X ^ Y = R
+    xor_block (result, tmp); // result = R ^ old   (only difference with g_copy)
+    g_rounds  (tmp);         // tmp    = Z
+    xor_block (result, tmp); // result = R ^ old ^ Z
+}
+
+// Unary version of the compression function.
+// The missing argument is implied zero.
+// Does the transformation in place.
+static void unary_g(block *work_block, block *tmp)
+{
+    // work_block == R
+    copy_block(tmp, work_block); // tmp        = R
+    g_rounds  (work_block);      // work_block = Z
+    xor_block (work_block, tmp); // work_block = Z ^ R
+}
+
+// Argon2i uses a kind of stream cipher to determine which reference
+// block it will take to synthesise the next block.  This context hold
+// that stream's state.  (It's very similar to Chacha20.  The block b
+// is analogous to Chacha's own pool)
+typedef struct {
+    block b;
+    u32 pass_number;
+    u32 slice_number;
+    u32 nb_blocks;
+    u32 nb_iterations;
+    u32 ctr;
+    u32 offset;
+} gidx_ctx;
+
+// The block in the context will determine array indices. To avoid
+// timing attacks, it only depends on public information.  No looking
+// at a previous block to seed the next.  This makes offline attacks
+// easier, but timing attacks are the bigger threat in many settings.
+static void gidx_refresh(gidx_ctx *ctx)
+{
+    // seed the beginning of the block...
+    ctx->b.a[0] = ctx->pass_number;
+    ctx->b.a[1] = 0;  // lane number (we have only one)
+    ctx->b.a[2] = ctx->slice_number;
+    ctx->b.a[3] = ctx->nb_blocks;
+    ctx->b.a[4] = ctx->nb_iterations;
+    ctx->b.a[5] = 1;  // type: Argon2i
+    ctx->b.a[6] = ctx->ctr;
+    FOR (i, 7, 128) { ctx->b.a[i] = 0; } // ...then zero the rest out
+
+    // Shuffle the block thus: ctx->b = G((G(ctx->b, zero)), zero)
+    // (G "square" function), to get cheap pseudo-random numbers.
+    block tmp;
+    unary_g(&ctx->b, &tmp);
+    unary_g(&ctx->b, &tmp);
+    wipe_block(&tmp);
+}
+
+static void gidx_init(gidx_ctx *ctx,
+                      u32 pass_number, u32 slice_number,
+                      u32 nb_blocks,   u32 nb_iterations)
+{
+    ctx->pass_number   = pass_number;
+    ctx->slice_number  = slice_number;
+    ctx->nb_blocks     = nb_blocks;
+    ctx->nb_iterations = nb_iterations;
+    ctx->ctr           = 0;
+
+    // Offset from the beginning of the segment.  For the first slice
+    // of the first pass, we start at the *third* block, so the offset
+    // starts at 2, not 0.
+    if (pass_number != 0 || slice_number != 0) {
+        ctx->offset = 0;
+    } else {
+        ctx->offset = 2;
+        ctx->ctr++;         // Compensates for missed lazy creation
+        gidx_refresh(ctx);  // at the start of gidx_next()
+    }
+}
+
+static u32 gidx_next(gidx_ctx *ctx)
+{
+    // lazily creates the offset block we need
+    if ((ctx->offset & 127) == 0) {
+        ctx->ctr++;
+        gidx_refresh(ctx);
+    }
+    u32 index  = ctx->offset & 127; // save index  for current call
+    u32 offset = ctx->offset;       // save offset for current call
+    ctx->offset++;                  // update offset for next call
+
+    // Computes the area size.
+    // Pass 0 : all already finished segments plus already constructed
+    //          blocks in this segment
+    // Pass 1+: 3 last segments plus already constructed
+    //          blocks in this segment.  THE SPEC SUGGESTS OTHERWISE.
+    //          I CONFORM TO THE REFERENCE IMPLEMENTATION.
+    int first_pass  = ctx->pass_number == 0;
+    u32 slice_size  = ctx->nb_blocks >> 2;
+    u32 nb_segments = first_pass ? ctx->slice_number : 3;
+    u32 area_size   = nb_segments * slice_size + offset - 1;
+
+    // Computes the starting position of the reference area.
+    // CONTRARY TO WHAT THE SPEC SUGGESTS, IT STARTS AT THE
+    // NEXT SEGMENT, NOT THE NEXT BLOCK.
+    u32 next_slice = ((ctx->slice_number + 1) & 3) * slice_size;
+    u32 start_pos  = first_pass ? 0 : next_slice;
+
+    // Generate offset from J1 (no need for J2, there's only one lane)
+    u64 j1         = ctx->b.a[index] & 0xffffffff; // pseudo-random number
+    u64 x          = (j1 * j1)       >> 32;
+    u64 y          = (area_size * x) >> 32;
+    u64 z          = (area_size - 1) - y;
+    return (start_pos + z) % ctx->nb_blocks;
+}
+
+// Main algorithm
+void crypto_argon2i_general(u8       *hash,      u32 hash_size,
+                            void     *work_area, u32 nb_blocks,
+                            u32 nb_iterations,
+                            const u8 *password,  u32 password_size,
+                            const u8 *salt,      u32 salt_size,
+                            const u8 *key,       u32 key_size,
+                            const u8 *ad,        u32 ad_size)
+{
+    // work area seen as blocks (must be suitably aligned)
+    block *blocks = (block*)work_area;
+    {
+        crypto_blake2b_ctx ctx;
+        crypto_blake2b_init(&ctx);
+
+        blake_update_32      (&ctx, 1            ); // p: number of threads
+        blake_update_32      (&ctx, hash_size    );
+        blake_update_32      (&ctx, nb_blocks    );
+        blake_update_32      (&ctx, nb_iterations);
+        blake_update_32      (&ctx, 0x13         ); // v: version number
+        blake_update_32      (&ctx, 1            ); // y: Argon2i
+        blake_update_32      (&ctx,           password_size);
+        crypto_blake2b_update(&ctx, password, password_size);
+        blake_update_32      (&ctx,           salt_size);
+        crypto_blake2b_update(&ctx, salt,     salt_size);
+        blake_update_32      (&ctx,           key_size);
+        crypto_blake2b_update(&ctx, key,      key_size);
+        blake_update_32      (&ctx,           ad_size);
+        crypto_blake2b_update(&ctx, ad,       ad_size);
+
+        u8 initial_hash[72]; // 64 bytes plus 2 words for future hashes
+        crypto_blake2b_final(&ctx, initial_hash);
+
+        // fill first 2 blocks
+        block tmp_block;
+        u8    hash_area[1024];
+        store32_le(initial_hash + 64, 0); // first  additional word
+        store32_le(initial_hash + 68, 0); // second additional word
+        extended_hash(hash_area, 1024, initial_hash, 72);
+        load_block(&tmp_block, hash_area);
+        copy_block(blocks, &tmp_block);
+
+        store32_le(initial_hash + 64, 1); // slight modification
+        extended_hash(hash_area, 1024, initial_hash, 72);
+        load_block(&tmp_block, hash_area);
+        copy_block(blocks + 1, &tmp_block);
+
+        WIPE_BUFFER(initial_hash);
+        WIPE_BUFFER(hash_area);
+        wipe_block(&tmp_block);
+    }
+
+    // Actual number of blocks
+    nb_blocks -= nb_blocks & 3; // round down to 4 p (p == 1 thread)
+    const u32 segment_size = nb_blocks >> 2;
+
+    // fill (then re-fill) the rest of the blocks
+    block tmp;
+    gidx_ctx ctx; // public information, no need to wipe
+    FOR_T (u32, pass_number, 0, nb_iterations) {
+        int first_pass = pass_number == 0;
+
+        FOR_T (u32, segment, 0, 4) {
+            gidx_init(&ctx, pass_number, segment, nb_blocks, nb_iterations);
+
+            // On the first segment of the first pass,
+            // blocks 0 and 1 are already filled.
+            // We use the offset to skip them.
+            u32 start_offset  = first_pass && segment == 0 ? 2 : 0;
+            u32 segment_start = segment * segment_size + start_offset;
+            u32 segment_end   = (segment + 1) * segment_size;
+            FOR_T (u32, current_block, segment_start, segment_end) {
+                u32 reference_block = gidx_next(&ctx);
+                u32 previous_block  = current_block == 0
+                                    ? nb_blocks - 1
+                                    : current_block - 1;
+                block *c = blocks + current_block;
+                block *p = blocks + previous_block;
+                block *r = blocks + reference_block;
+                if (first_pass) { g_copy(c, p, r, &tmp); }
+                else            { g_xor (c, p, r, &tmp); }
+            }
+        }
+    }
+    wipe_block(&tmp);
+    // hash the very last block with H' into the output hash
+    u8 final_block[1024];
+    store_block(final_block, blocks + (nb_blocks - 1));
+    extended_hash(hash, hash_size, final_block, 1024);
+    WIPE_BUFFER(final_block);
+
+    // wipe work area
+    volatile u64 *p = (u64*)work_area;
+    FOR (i, 0, 128 * nb_blocks) {
+        p[i] = 0;
+    }
+}
+
+void crypto_argon2i(u8       *hash,      u32 hash_size,
+                    void     *work_area, u32 nb_blocks,
+                    u32 nb_iterations,
+                    const u8 *password,  u32 password_size,
+                    const u8 *salt,      u32 salt_size)
+{
+    crypto_argon2i_general(hash, hash_size,
+                           work_area, nb_blocks, nb_iterations,
+                           password, password_size,
+                           salt    , salt_size,
+                           0, 0, 0, 0);
+}
+
+
+
+////////////////////////////////////
+/// Arithmetic modulo 2^255 - 19 ///
+////////////////////////////////////
+//  Taken from SUPERCOP's ref10 implementation.
+//  A bit bigger than TweetNaCl, over 4 times faster.
+
+// field element
+typedef i32 fe[10];
+
+static void fe_0(fe h) {            FOR(i, 0, 10) h[i] = 0; }
+static void fe_1(fe h) { h[0] = 1;  FOR(i, 1, 10) h[i] = 0; }
+
+static void fe_copy(fe h,const fe f           ){FOR(i,0,10) h[i] =  f[i];      }
+static void fe_neg (fe h,const fe f           ){FOR(i,0,10) h[i] = -f[i];      }
+static void fe_add (fe h,const fe f,const fe g){FOR(i,0,10) h[i] = f[i] + g[i];}
+static void fe_sub (fe h,const fe f,const fe g){FOR(i,0,10) h[i] = f[i] - g[i];}
+
+static void fe_cswap(fe f, fe g, int b)
+{
+    i32 mask = -b; // -1 = 0xffffffff
+    FOR (i, 0, 10) {
+        i32 x = (f[i] ^ g[i]) & mask;
+        f[i] = f[i] ^ x;
+        g[i] = g[i] ^ x;
+    }
+}
+
+static void fe_ccopy(fe f, const fe g, int b)
+{
+    i32 mask = -b; // -1 = 0xffffffff
+    FOR (i, 0, 10) {
+        i32 x = (f[i] ^ g[i]) & mask;
+        f[i] = f[i] ^ x;
+    }
+}
+
+#define FE_CARRY                                                        \
+    i64 c0, c1, c2, c3, c4, c5, c6, c7, c8, c9;                         \
+    c9 = (t9 + (i64)(1<<24)) >> 25; t0 += c9 * 19; t9 -= c9 * (1 << 25); \
+    c1 = (t1 + (i64)(1<<24)) >> 25; t2 += c1;      t1 -= c1 * (1 << 25); \
+    c3 = (t3 + (i64)(1<<24)) >> 25; t4 += c3;      t3 -= c3 * (1 << 25); \
+    c5 = (t5 + (i64)(1<<24)) >> 25; t6 += c5;      t5 -= c5 * (1 << 25); \
+    c7 = (t7 + (i64)(1<<24)) >> 25; t8 += c7;      t7 -= c7 * (1 << 25); \
+    c0 = (t0 + (i64)(1<<25)) >> 26; t1 += c0;      t0 -= c0 * (1 << 26); \
+    c2 = (t2 + (i64)(1<<25)) >> 26; t3 += c2;      t2 -= c2 * (1 << 26); \
+    c4 = (t4 + (i64)(1<<25)) >> 26; t5 += c4;      t4 -= c4 * (1 << 26); \
+    c6 = (t6 + (i64)(1<<25)) >> 26; t7 += c6;      t6 -= c6 * (1 << 26); \
+    c8 = (t8 + (i64)(1<<25)) >> 26; t9 += c8;      t8 -= c8 * (1 << 26); \
+    h[0]=(i32)t0;  h[1]=(i32)t1;  h[2]=(i32)t2;  h[3]=(i32)t3;  h[4]=(i32)t4; \
+    h[5]=(i32)t5;  h[6]=(i32)t6;  h[7]=(i32)t7;  h[8]=(i32)t8;  h[9]=(i32)t9
+
+static void fe_frombytes(fe h, const u8 s[32])
+{
+    i64 t0 =  load32_le(s);
+    i64 t1 =  load24_le(s +  4) << 6;
+    i64 t2 =  load24_le(s +  7) << 5;
+    i64 t3 =  load24_le(s + 10) << 3;
+    i64 t4 =  load24_le(s + 13) << 2;
+    i64 t5 =  load32_le(s + 16);
+    i64 t6 =  load24_le(s + 20) << 7;
+    i64 t7 =  load24_le(s + 23) << 5;
+    i64 t8 =  load24_le(s + 26) << 4;
+    i64 t9 = (load24_le(s + 29) & 0x7fffff) << 2;
+    FE_CARRY;
+}
+
+// multiply a field element by a signed 32-bit integer
+static void fe_mul_small(fe h, const fe f, i32 g)
+{
+    i64 t0 = f[0] * (i64) g;  i64 t1 = f[1] * (i64) g;
+    i64 t2 = f[2] * (i64) g;  i64 t3 = f[3] * (i64) g;
+    i64 t4 = f[4] * (i64) g;  i64 t5 = f[5] * (i64) g;
+    i64 t6 = f[6] * (i64) g;  i64 t7 = f[7] * (i64) g;
+    i64 t8 = f[8] * (i64) g;  i64 t9 = f[9] * (i64) g;
+    FE_CARRY;
+}
+static void fe_mul121666(fe h, const fe f) { fe_mul_small(h, f, 121666); }
+
+static void fe_mul(fe h, const fe f, const fe g)
+{
+    // Everything is unrolled and put in temporary variables.
+    // We could roll the loop, but that would make curve25519 twice as slow.
+    i32 f0 = f[0]; i32 f1 = f[1]; i32 f2 = f[2]; i32 f3 = f[3]; i32 f4 = f[4];
+    i32 f5 = f[5]; i32 f6 = f[6]; i32 f7 = f[7]; i32 f8 = f[8]; i32 f9 = f[9];
+    i32 g0 = g[0]; i32 g1 = g[1]; i32 g2 = g[2]; i32 g3 = g[3]; i32 g4 = g[4];
+    i32 g5 = g[5]; i32 g6 = g[6]; i32 g7 = g[7]; i32 g8 = g[8]; i32 g9 = g[9];
+    i32 F1 = f1*2; i32 F3 = f3*2; i32 F5 = f5*2; i32 F7 = f7*2; i32 F9 = f9*2;
+    i32 G1 = g1*19;  i32 G2 = g2*19;  i32 G3 = g3*19;
+    i32 G4 = g4*19;  i32 G5 = g5*19;  i32 G6 = g6*19;
+    i32 G7 = g7*19;  i32 G8 = g8*19;  i32 G9 = g9*19;
+
+    i64 h0 = f0*(i64)g0 + F1*(i64)G9 + f2*(i64)G8 + F3*(i64)G7 + f4*(i64)G6
+        +    F5*(i64)G5 + f6*(i64)G4 + F7*(i64)G3 + f8*(i64)G2 + F9*(i64)G1;
+    i64 h1 = f0*(i64)g1 + f1*(i64)g0 + f2*(i64)G9 + f3*(i64)G8 + f4*(i64)G7
+        +    f5*(i64)G6 + f6*(i64)G5 + f7*(i64)G4 + f8*(i64)G3 + f9*(i64)G2;
+    i64 h2 = f0*(i64)g2 + F1*(i64)g1 + f2*(i64)g0 + F3*(i64)G9 + f4*(i64)G8
+        +    F5*(i64)G7 + f6*(i64)G6 + F7*(i64)G5 + f8*(i64)G4 + F9*(i64)G3;
+    i64 h3 = f0*(i64)g3 + f1*(i64)g2 + f2*(i64)g1 + f3*(i64)g0 + f4*(i64)G9
+        +    f5*(i64)G8 + f6*(i64)G7 + f7*(i64)G6 + f8*(i64)G5 + f9*(i64)G4;
+    i64 h4 = f0*(i64)g4 + F1*(i64)g3 + f2*(i64)g2 + F3*(i64)g1 + f4*(i64)g0
+        +    F5*(i64)G9 + f6*(i64)G8 + F7*(i64)G7 + f8*(i64)G6 + F9*(i64)G5;
+    i64 h5 = f0*(i64)g5 + f1*(i64)g4 + f2*(i64)g3 + f3*(i64)g2 + f4*(i64)g1
+        +    f5*(i64)g0 + f6*(i64)G9 + f7*(i64)G8 + f8*(i64)G7 + f9*(i64)G6;
+    i64 h6 = f0*(i64)g6 + F1*(i64)g5 + f2*(i64)g4 + F3*(i64)g3 + f4*(i64)g2
+        +    F5*(i64)g1 + f6*(i64)g0 + F7*(i64)G9 + f8*(i64)G8 + F9*(i64)G7;
+    i64 h7 = f0*(i64)g7 + f1*(i64)g6 + f2*(i64)g5 + f3*(i64)g4 + f4*(i64)g3
+        +    f5*(i64)g2 + f6*(i64)g1 + f7*(i64)g0 + f8*(i64)G9 + f9*(i64)G8;
+    i64 h8 = f0*(i64)g8 + F1*(i64)g7 + f2*(i64)g6 + F3*(i64)g5 + f4*(i64)g4
+        +    F5*(i64)g3 + f6*(i64)g2 + F7*(i64)g1 + f8*(i64)g0 + F9*(i64)G9;
+    i64 h9 = f0*(i64)g9 + f1*(i64)g8 + f2*(i64)g7 + f3*(i64)g6 + f4*(i64)g5
+        +    f5*(i64)g4 + f6*(i64)g3 + f7*(i64)g2 + f8*(i64)g1 + f9*(i64)g0;
+
+#define CARRY                                                             \
+    i64 c0, c1, c2, c3, c4, c5, c6, c7, c8, c9;                           \
+    c0 = (h0 + (i64) (1<<25)) >> 26; h1 += c0;      h0 -= c0 * (1 << 26); \
+    c4 = (h4 + (i64) (1<<25)) >> 26; h5 += c4;      h4 -= c4 * (1 << 26); \
+    c1 = (h1 + (i64) (1<<24)) >> 25; h2 += c1;      h1 -= c1 * (1 << 25); \
+    c5 = (h5 + (i64) (1<<24)) >> 25; h6 += c5;      h5 -= c5 * (1 << 25); \
+    c2 = (h2 + (i64) (1<<25)) >> 26; h3 += c2;      h2 -= c2 * (1 << 26); \
+    c6 = (h6 + (i64) (1<<25)) >> 26; h7 += c6;      h6 -= c6 * (1 << 26); \
+    c3 = (h3 + (i64) (1<<24)) >> 25; h4 += c3;      h3 -= c3 * (1 << 25); \
+    c7 = (h7 + (i64) (1<<24)) >> 25; h8 += c7;      h7 -= c7 * (1 << 25); \
+    c4 = (h4 + (i64) (1<<25)) >> 26; h5 += c4;      h4 -= c4 * (1 << 26); \
+    c8 = (h8 + (i64) (1<<25)) >> 26; h9 += c8;      h8 -= c8 * (1 << 26); \
+    c9 = (h9 + (i64) (1<<24)) >> 25; h0 += c9 * 19; h9 -= c9 * (1 << 25); \
+    c0 = (h0 + (i64) (1<<25)) >> 26; h1 += c0;      h0 -= c0 * (1 << 26); \
+    h[0]=(i32)h0;  h[1]=(i32)h1;  h[2]=(i32)h2;  h[3]=(i32)h3;  h[4]=(i32)h4; \
+    h[5]=(i32)h5;  h[6]=(i32)h6;  h[7]=(i32)h7;  h[8]=(i32)h8;  h[9]=(i32)h9
+
+    CARRY;
+}
+
+// we could use fe_mul() for this, but this is significantly faster
+static void fe_sq(fe h, const fe f)
+{
+    i32 f0 = f[0]; i32 f1 = f[1]; i32 f2 = f[2]; i32 f3 = f[3]; i32 f4 = f[4];
+    i32 f5 = f[5]; i32 f6 = f[6]; i32 f7 = f[7]; i32 f8 = f[8]; i32 f9 = f[9];
+    i32 f0_2  = f0*2;   i32 f1_2  = f1*2;   i32 f2_2  = f2*2;   i32 f3_2 = f3*2;
+    i32 f4_2  = f4*2;   i32 f5_2  = f5*2;   i32 f6_2  = f6*2;   i32 f7_2 = f7*2;
+    i32 f5_38 = f5*38;  i32 f6_19 = f6*19;  i32 f7_38 = f7*38;
+    i32 f8_19 = f8*19;  i32 f9_38 = f9*38;
+
+    i64 h0 = f0  *(i64)f0    + f1_2*(i64)f9_38 + f2_2*(i64)f8_19
+        +    f3_2*(i64)f7_38 + f4_2*(i64)f6_19 + f5  *(i64)f5_38;
+    i64 h1 = f0_2*(i64)f1    + f2  *(i64)f9_38 + f3_2*(i64)f8_19
+        +    f4  *(i64)f7_38 + f5_2*(i64)f6_19;
+    i64 h2 = f0_2*(i64)f2    + f1_2*(i64)f1    + f3_2*(i64)f9_38
+        +    f4_2*(i64)f8_19 + f5_2*(i64)f7_38 + f6  *(i64)f6_19;
+    i64 h3 = f0_2*(i64)f3    + f1_2*(i64)f2    + f4  *(i64)f9_38
+        +    f5_2*(i64)f8_19 + f6  *(i64)f7_38;
+    i64 h4 = f0_2*(i64)f4    + f1_2*(i64)f3_2  + f2  *(i64)f2
+        +    f5_2*(i64)f9_38 + f6_2*(i64)f8_19 + f7  *(i64)f7_38;
+    i64 h5 = f0_2*(i64)f5    + f1_2*(i64)f4    + f2_2*(i64)f3
+        +    f6  *(i64)f9_38 + f7_2*(i64)f8_19;
+    i64 h6 = f0_2*(i64)f6    + f1_2*(i64)f5_2  + f2_2*(i64)f4
+        +    f3_2*(i64)f3    + f7_2*(i64)f9_38 + f8  *(i64)f8_19;
+    i64 h7 = f0_2*(i64)f7    + f1_2*(i64)f6    + f2_2*(i64)f5
+        +    f3_2*(i64)f4    + f8  *(i64)f9_38;
+    i64 h8 = f0_2*(i64)f8    + f1_2*(i64)f7_2  + f2_2*(i64)f6
+        +    f3_2*(i64)f5_2  + f4  *(i64)f4    + f9  *(i64)f9_38;
+    i64 h9 = f0_2*(i64)f9    + f1_2*(i64)f8    + f2_2*(i64)f7
+        +    f3_2*(i64)f6    + f4  *(i64)f5_2;
+
+    CARRY;
+}
+
+// h = 2 * (f^2)
+static void fe_sq2(fe h, const fe f)
+{
+    fe_sq(h, f);
+    fe_mul_small(h, h, 2);
+}
+
+// This could be simplified, but it would be slower
+static void fe_pow22523(fe out, const fe z)
+{
+    fe t0, t1, t2;
+    fe_sq(t0, z);
+    fe_sq(t1,t0);                   fe_sq(t1, t1);  fe_mul(t1, z, t1);
+    fe_mul(t0, t0, t1);
+    fe_sq(t0, t0);                                  fe_mul(t0, t1, t0);
+    fe_sq(t1, t0);  FOR (i, 1,   5) fe_sq(t1, t1);  fe_mul(t0, t1, t0);
+    fe_sq(t1, t0);  FOR (i, 1,  10) fe_sq(t1, t1);  fe_mul(t1, t1, t0);
+    fe_sq(t2, t1);  FOR (i, 1,  20) fe_sq(t2, t2);  fe_mul(t1, t2, t1);
+    fe_sq(t1, t1);  FOR (i, 1,  10) fe_sq(t1, t1);  fe_mul(t0, t1, t0);
+    fe_sq(t1, t0);  FOR (i, 1,  50) fe_sq(t1, t1);  fe_mul(t1, t1, t0);
+    fe_sq(t2, t1);  FOR (i, 1, 100) fe_sq(t2, t2);  fe_mul(t1, t2, t1);
+    fe_sq(t1, t1);  FOR (i, 1,  50) fe_sq(t1, t1);  fe_mul(t0, t1, t0);
+    fe_sq(t0, t0);  FOR (i, 1,   2) fe_sq(t0, t0);  fe_mul(out, t0, z);
+    WIPE_BUFFER(t0);
+    WIPE_BUFFER(t1);
+    WIPE_BUFFER(t2);
+}
+
+// Inverting means multiplying by 2^255 - 21
+// 2^255 - 21 = (2^252 - 3) * 8 + 3
+// So we reuse the multiplication chain of fe_pow22523
+static void fe_invert(fe out, const fe z)
+{
+    fe tmp;
+    fe_pow22523(tmp, z);
+    // tmp2^8 * z^3
+    fe_sq(tmp, tmp);                        // 0
+    fe_sq(tmp, tmp);  fe_mul(tmp, tmp, z);  // 1
+    fe_sq(tmp, tmp);  fe_mul(out, tmp, z);  // 1
+    WIPE_BUFFER(tmp);
+}
+
+static void fe_tobytes(u8 s[32], const fe h)
+{
+    i32 t[10];
+    FOR (i, 0, 10) {
+        t[i] = h[i];
+    }
+    i32 q = (19 * t[9] + (((i32) 1) << 24)) >> 25;
+    FOR (i, 0, 5) {
+        q += t[2*i  ]; q >>= 26;
+        q += t[2*i+1]; q >>= 25;
+    }
+    t[0] += 19 * q;
+
+    i32 c0 = t[0] >> 26; t[1] += c0; t[0] -= c0 * (1 << 26);
+    i32 c1 = t[1] >> 25; t[2] += c1; t[1] -= c1 * (1 << 25);
+    i32 c2 = t[2] >> 26; t[3] += c2; t[2] -= c2 * (1 << 26);
+    i32 c3 = t[3] >> 25; t[4] += c3; t[3] -= c3 * (1 << 25);
+    i32 c4 = t[4] >> 26; t[5] += c4; t[4] -= c4 * (1 << 26);
+    i32 c5 = t[5] >> 25; t[6] += c5; t[5] -= c5 * (1 << 25);
+    i32 c6 = t[6] >> 26; t[7] += c6; t[6] -= c6 * (1 << 26);
+    i32 c7 = t[7] >> 25; t[8] += c7; t[7] -= c7 * (1 << 25);
+    i32 c8 = t[8] >> 26; t[9] += c8; t[8] -= c8 * (1 << 26);
+    i32 c9 = t[9] >> 25;             t[9] -= c9 * (1 << 25);
+
+    store32_le(s +  0, ((u32)t[0] >>  0) | ((u32)t[1] << 26));
+    store32_le(s +  4, ((u32)t[1] >>  6) | ((u32)t[2] << 19));
+    store32_le(s +  8, ((u32)t[2] >> 13) | ((u32)t[3] << 13));
+    store32_le(s + 12, ((u32)t[3] >> 19) | ((u32)t[4] <<  6));
+    store32_le(s + 16, ((u32)t[5] >>  0) | ((u32)t[6] << 25));
+    store32_le(s + 20, ((u32)t[6] >>  7) | ((u32)t[7] << 19));
+    store32_le(s + 24, ((u32)t[7] >> 13) | ((u32)t[8] << 12));
+    store32_le(s + 28, ((u32)t[8] >> 20) | ((u32)t[9] <<  6));
+
+    WIPE_BUFFER(t);
+}
+
+//  Parity check.  Returns 0 if even, 1 if odd
+static int fe_isnegative(const fe f)
+{
+    u8 s[32];
+    fe_tobytes(s, f);
+    u8 isneg = s[0] & 1;
+    WIPE_BUFFER(s);
+    return isneg;
+}
+
+static int fe_isnonzero(const fe f)
+{
+    u8 s[32];
+    fe_tobytes(s, f);
+    int isnonzero = zerocmp32(s);
+    WIPE_BUFFER(s);
+    return isnonzero;
+}
+
+// trim a scalar for scalar multiplication
+static void trim_scalar(u8 s[32])
+{
+    s[ 0] &= 248;
+    s[31] &= 127;
+    s[31] |= 64;
+}
+
+// get bit from scalar at position i
+static int scalar_bit(const u8 s[32], int i) {
+    if (i < 0) { return 0; } // handle -1 for sliding windows
+    return (s[i>>3] >> (i&7)) & 1;
+}
+
+///////////////
+/// X-25519 /// Taken from SUPERCOP's ref10 implementation.
+///////////////
+
+void crypto_x25519(u8       raw_shared_secret[32],
+                   const u8 your_secret_key  [32],
+                   const u8 their_public_key [32])
+{
+    // computes the scalar product
+    fe x1;
+    fe_frombytes(x1, their_public_key);
+
+    // restrict the possible scalar values
+    u8 e[32];
+    FOR (i, 0, 32) {
+        e[i] = your_secret_key[i];
+    }
+    trim_scalar(e);
+
+    // computes the actual scalar product (the result is in x2 and z2)
+    fe x2, z2, x3, z3, t0, t1;
+    // Montgomery ladder
+    // In projective coordinates, to avoid divisions: x = X / Z
+    // We don't care about the y coordinate, it's only 1 bit of information
+    fe_1(x2);        fe_0(z2); // "zero" point
+    fe_copy(x3, x1); fe_1(z3); // "one"  point
+    int swap = 0;
+    for (int pos = 254; pos >= 0; --pos) {
+        // constant time conditional swap before ladder step
+        int b = scalar_bit(e, pos);
+        swap ^= b; // xor trick avoids swapping at the end of the loop
+        fe_cswap(x2, x3, swap);
+        fe_cswap(z2, z3, swap);
+        swap = b;  // anticipates one last swap after the loop
+
+        // Montgomery ladder step: replaces (P2, P3) by (P2*2, P2+P3)
+        // with differential addition
+        fe_sub(t0, x3, z3);  fe_sub(t1, x2, z2);    fe_add(x2, x2, z2);
+        fe_add(z2, x3, z3);  fe_mul(z3, t0, x2);    fe_mul(z2, z2, t1);
+        fe_sq (t0, t1    );  fe_sq (t1, x2    );    fe_add(x3, z3, z2);
+        fe_sub(z2, z3, z2);  fe_mul(x2, t1, t0);    fe_sub(t1, t1, t0);
+        fe_sq (z2, z2    );  fe_mul121666(z3, t1);  fe_sq (x3, x3    );
+        fe_add(t0, t0, z3);  fe_mul(z3, x1, z2);    fe_mul(z2, t1, t0);
+    }
+    // last swap is necessary to compensate for the xor trick
+    // Note: after this swap, P3 == P2 + P1.
+    fe_cswap(x2, x3, swap);
+    fe_cswap(z2, z3, swap);
+
+    // normalises the coordinates: x == X / Z
+    fe_invert(z2, z2);
+    fe_mul(x2, x2, z2);
+    fe_tobytes(raw_shared_secret, x2);
+
+    WIPE_BUFFER(x1);  WIPE_BUFFER(e );
+    WIPE_BUFFER(x2);  WIPE_BUFFER(z2);
+    WIPE_BUFFER(x3);  WIPE_BUFFER(z3);
+    WIPE_BUFFER(t0);  WIPE_BUFFER(t1);
+}
+
+void crypto_x25519_public_key(u8       public_key[32],
+                              const u8 secret_key[32])
+{
+    static const u8 base_point[32] = {9};
+    crypto_x25519(public_key, secret_key, base_point);
+}
+
+///////////////
+/// Ed25519 ///
+///////////////
+
+static const  i64 L[32] = { 0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58,
+                            0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14,
+                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10};
+
+// r = x mod L (little-endian)
+static void modL(u8 *r, i64 x[64])
+{
+    for (unsigned i = 63; i >= 32; i--) {
+        i64 carry = 0;
+        FOR (j, i-32, i-12) {
+            x[j] += carry - 16 * x[i] * L[j - (i - 32)];
+            carry = (x[j] + 128) >> 8;
+            x[j] -= carry * (1 << 8);
+        }
+        x[i-12] += carry;
+        x[i] = 0;
+    }
+    i64 carry = 0;
+    FOR (i, 0, 32) {
+        x[i] += carry - (x[31] >> 4) * L[i];
+        carry = x[i] >> 8;
+        x[i] &= 255;
+    }
+    FOR (i, 0, 32) {
+        x[i] -= carry * L[i];
+    }
+    FOR (i, 0, 32) {
+        x[i+1] += x[i] >> 8;
+        r[i  ]  = x[i] & 255;
+    }
+}
+
+// Reduces a 64-byte hash modulo L (little endian)
+static void reduce(u8 r[64])
+{
+    i64 x[64];
+    FOR (i, 0, 64) {
+        x[i] = (i64)(u64)r[i]; // preserve unsigned
+        r[i] = 0;
+    }
+    modL(r, x);
+    WIPE_BUFFER(x);
+}
+
+// r = (a * b) + c
+static void mul_add(u8 r[32], const u8 a[32], const u8 b[32], const u8 c[32])
+{
+    i64 s[64];
+    FOR (i,  0, 32) { s[i] = (i64)(u64)c[i]; } // preserve unsigned
+    FOR (i, 32, 64) { s[i] = 0;              }
+    FOR (i,  0, 32) {
+        FOR (j, 0, 32) {
+            s[i+j] += a[i] * (u64)b[j];
+        }
+    }
+    modL(r, s);
+    WIPE_BUFFER(s);
+}
+
+// Variable time! a must not be secret!
+static int is_above_L(const u8 a[32])
+{
+    for (int i = 31; i >= 0; i--) {
+        if (a[i] > L[i]) { return 1; }
+        if (a[i] < L[i]) { return 0; }
+    }
+    return 1;
+}
+
+// Point (group element, ge) in a twisted Edwards curve,
+// in extended projective coordinates.
+// x = X/Z, y = Y/Z, T = XY/Z
+typedef struct { fe X;  fe Y;  fe Z; fe T;  } ge;
+typedef struct { fe Yp; fe Ym; fe Z; fe T2; } ge_cached;
+
+static void ge_zero(ge *p)
+{
+    fe_0(p->X);
+    fe_1(p->Y);
+    fe_1(p->Z);
+    fe_0(p->T);
+}
+
+static void ge_tobytes(u8 s[32], const ge *h)
+{
+    fe recip, x, y;
+    fe_invert(recip, h->Z);
+    fe_mul(x, h->X, recip);
+    fe_mul(y, h->Y, recip);
+    fe_tobytes(s, y);
+    s[31] ^= fe_isnegative(x) << 7;
+
+    WIPE_BUFFER(recip);
+    WIPE_BUFFER(x);
+    WIPE_BUFFER(y);
+}
+
+// h = -s, where s is a point encoded in 32 bytes
+// ge_double_scalarmult_vartime() performs addition, but the algorithm it is
+// used for requires subtraction; thus we negate s on load so that we can do
+// addition in ge_double_scalarmult_vartime() later.
+//
+// Variable time! Inputs must not be secret!
+// => Use only to *check* signatures.
+static int ge_frombytes_neg_vartime(ge *h, const u8 s[32])
+{
+    static const fe d = {
+        -10913610, 13857413, -15372611, 6949391, 114729,
+        -8787816, -6275908, -3247719, -18696448, -12055116
+    };
+    static const fe sqrtm1 = {
+        -32595792, -7943725, 9377950, 3500415, 12389472,
+        -272473, -25146209, -2005654, 326686, 11406482
+    };
+    fe u, v, v3; // no secret, no wipe
+    fe_frombytes(h->Y, s);
+    fe_1(h->Z);
+    fe_sq(u, h->Y);            // y^2
+    fe_mul(v, u, d);
+    fe_sub(u, u, h->Z);        // u = y^2-1
+    fe_add(v, v, h->Z);        // v = dy^2+1
+
+    fe_sq(v3, v);
+    fe_mul(v3, v3, v);         // v3 = v^3
+    fe_sq(h->X, v3);
+    fe_mul(h->X, h->X, v);
+    fe_mul(h->X, h->X, u);     // x = uv^7
+
+    fe_pow22523(h->X, h->X);   // x = (uv^7)^((q-5)/8)
+    fe_mul(h->X, h->X, v3);
+    fe_mul(h->X, h->X, u);     // x = uv^3(uv^7)^((q-5)/8)
+
+    fe vxx, check; // no secret, no wipe
+    fe_sq(vxx, h->X);
+    fe_mul(vxx, vxx, v);
+    fe_sub(check, vxx, u);     // vx^2-u
+    if (fe_isnonzero(check)) {
+        fe_add(check, vxx, u); // vx^2+u
+        if (fe_isnonzero(check)) {
+            return -1;
+        }
+        fe_mul(h->X, h->X, sqrtm1);
+    }
+    if (fe_isnegative(h->X) == (s[31] >> 7)) {
+        fe_neg(h->X, h->X);
+    }
+    fe_mul(h->T, h->X, h->Y);
+    return 0;
+}
+
+static void ge_cache(ge_cached *c, const ge *p)
+{
+    static const fe D2 = { // - 2 * 121665 / 121666
+        -21827239, -5839606, -30745221, 13898782, 229458,
+        15978800, -12551817, -6495438, 29715968, 9444199
+    };
+    fe_add (c->Yp, p->Y, p->X);
+    fe_sub (c->Ym, p->Y, p->X);
+    fe_copy(c->Z , p->Z      );
+    fe_mul (c->T2, p->T, D2  );
+}
+
+// Internal buffers are not wiped! Inputs must not be secret!
+// => Use only to *check* signatures.
+static void ge_add(ge *s, const ge *p, const ge_cached *q)
+{
+    fe a, b;
+    fe_add(a   , p->Y, p->X );
+    fe_sub(b   , p->Y, p->X );
+    fe_mul(a   , a   , q->Yp);
+    fe_mul(b   , b   , q->Ym);
+    fe_add(s->Y, a   , b    );
+    fe_sub(s->X, a   , b    );
+
+    fe_add(s->Z, p->Z, p->Z );
+    fe_mul(s->Z, s->Z, q->Z );
+    fe_mul(s->T, p->T, q->T2);
+    fe_add(a   , s->Z, s->T );
+    fe_sub(b   , s->Z, s->T );
+
+    fe_mul(s->T, s->X, s->Y);
+    fe_mul(s->X, s->X, b   );
+    fe_mul(s->Y, s->Y, a   );
+    fe_mul(s->Z, a   , b   );
+}
+
+// Internal buffers are not wiped! Inputs must not be secret!
+// => Use only to *check* signatures.
+static void ge_sub(ge *s, const ge *p, const ge_cached *q)
+{
+    ge_cached neg;
+    fe_copy(neg.Ym, q->Yp);
+    fe_copy(neg.Yp, q->Ym);
+    fe_copy(neg.Z , q->Z );
+    fe_neg (neg.T2, q->T2);
+    ge_add(s, p, &neg);
+}
+
+static void ge_madd(ge *s, const ge *p, const fe yp, const fe ym, const fe t2,
+                    fe a, fe b)
+{
+    fe_add(a   , p->Y, p->X );
+    fe_sub(b   , p->Y, p->X );
+    fe_mul(a   , a   , yp   );
+    fe_mul(b   , b   , ym   );
+    fe_add(s->Y, a   , b    );
+    fe_sub(s->X, a   , b    );
+
+    fe_add(s->Z, p->Z, p->Z );
+    fe_mul(s->T, p->T, t2   );
+    fe_add(a   , s->Z, s->T );
+    fe_sub(b   , s->Z, s->T );
+
+    fe_mul(s->T, s->X, s->Y);
+    fe_mul(s->X, s->X, b   );
+    fe_mul(s->Y, s->Y, a   );
+    fe_mul(s->Z, a   , b   );
+}
+
+// Internal buffers are not wiped! Inputs must not be secret!
+// => Use only to *check* signatures.
+static void ge_msub(ge *s, const ge *p, const fe yp, const fe ym, const fe t2,
+                    fe a, fe b)
+{
+    fe n2;
+    fe_neg(n2, t2);
+    ge_madd(s, p, ym, yp, n2, a, b);
+}
+
+static void ge_double(ge *s, const ge *p, ge *q)
+{
+    fe_sq (q->X, p->X);
+    fe_sq (q->Y, p->Y);
+    fe_sq2(q->Z, p->Z);
+    fe_add(q->T, p->X, p->Y);
+    fe_sq (s->T, q->T);
+    fe_add(q->T, q->Y, q->X);
+    fe_sub(q->Y, q->Y, q->X);
+    fe_sub(q->X, s->T, q->T);
+    fe_sub(q->Z, q->Z, q->Y);
+
+    fe_mul(s->X, q->X , q->Z);
+    fe_mul(s->Y, q->T , q->Y);
+    fe_mul(s->Z, q->Y , q->Z);
+    fe_mul(s->T, q->X , q->T);
+}
+
+static const fe window_Yp[8] = {
+    {25967493, -14356035, 29566456, 3660896, -12694345,
+     4014787, 27544626, -11754271, -6079156, 2047605},
+    {15636291, -9688557, 24204773, -7912398, 616977,
+     -16685262, 27787600, -14772189, 28944400, -1550024},
+    {10861363, 11473154, 27284546, 1981175, -30064349,
+     12577861, 32867885, 14515107, -15438304, 10819380},
+    {5153746, 9909285, 1723747, -2777874, 30523605,
+     5516873, 19480852, 5230134, -23952439, -15175766},
+    {-22518993, -6692182, 14201702, -8745502, -23510406,
+     8844726, 18474211, -1361450, -13062696, 13821877},
+    {-25154831, -4185821, 29681144, 7868801, -6854661,
+     -9423865, -12437364, -663000, -31111463, -16132436},
+    {-33521811, 3180713, -2394130, 14003687, -16903474,
+     -16270840, 17238398, 4729455, -18074513, 9256800},
+    {-3151181, -5046075, 9282714, 6866145, -31907062,
+     -863023, -18940575, 15033784, 25105118, -7894876},
+};
+static const fe window_Ym[8] = {
+    {-12545711, 934262, -2722910, 3049990, -727428,
+     9406986, 12720692, 5043384, 19500929, -15469378},
+    {16568933, 4717097, -11556148, -1102322, 15682896,
+     -11807043, 16354577, -11775962, 7689662, 11199574},
+    {4708026, 6336745, 20377586, 9066809, -11272109,
+     6594696, -25653668, 12483688, -12668491, 5581306},
+    {-30269007, -3463509, 7665486, 10083793, 28475525,
+     1649722, 20654025, 16520125, 30598449, 7715701},
+    {-6455177, -7839871, 3374702, -4740862, -27098617,
+     -10571707, 31655028, -7212327, 18853322, -14220951},
+    {25576264, -2703214, 7349804, -11814844, 16472782,
+     9300885, 3844789, 15725684, 171356, 6466918},
+    {-25182317, -4174131, 32336398, 5036987, -21236817,
+     11360617, 22616405, 9761698, -19827198, 630305},
+    {-24326370, 15950226, -31801215, -14592823, -11662737,
+     -5090925, 1573892, -2625887, 2198790, -15804619},
+};
+static const fe window_T2[8] = {
+    {-8738181, 4489570, 9688441, -14785194, 10184609,
+     -12363380, 29287919, 11864899, -24514362, -4438546},
+    {30464156, -5976125, -11779434, -15670865, 23220365,
+     15915852, 7512774, 10017326, -17749093, -9920357},
+    {19563160, 16186464, -29386857, 4097519, 10237984,
+     -4348115, 28542350, 13850243, -23678021, -15815942},
+    {28881845, 14381568, 9657904, 3680757, -20181635,
+     7843316, -31400660, 1370708, 29794553, -1409300},
+    {4566830, -12963868, -28974889, -12240689, -7602672,
+     -2830569, -8514358, -10431137, 2207753, -3209784},
+    {23103977, 13316479, 9739013, -16149481, 817875,
+     -15038942, 8965339, -14088058, -30714912, 16193877},
+    {-13720693, 2639453, -24237460, -7406481, 9494427,
+     -5774029, -6554551, -15960994, -2449256, -14291300},
+    {-3099351, 10324967, -2241613, 7453183, -5446979,
+     -2735503, -13812022, -16236442, -32461234, -12290683},
+};
+
+// Incremental sliding windows (left to right)
+// Based on Roberto Maria Avanzi[2005]
+typedef struct {
+    i16 next_index; // position of the next signed digit
+    i8  next_digit; // next signed digit (odd number below 2^window_width)
+    u8  next_check; // point at which we must check for a new window
+} slide_ctx;
+
+static void slide_init(slide_ctx *ctx, const u8 scalar[32])
+{
+    // scalar is guaranteed to be below L, either because we checked (s),
+    // or because we reduced it modulo L (h_ram). L is under 2^253, so
+    // so bits 253 to 255 are guaranteed to be zero. No need to test them.
+    //
+    // Note however that L is very close to 2^252, so bit 252 is almost
+    // always zero.  If we were to start at bit 251, the tests wouldn't
+    // catch the off-by-one error (constructing one that does would be
+    // prohibitively expensive).
+    //
+    // We should still check bit 252, though.
+    int i = 252;
+    while (i > 0 && scalar_bit(scalar, i) == 0) {
+        i--;
+    }
+    ctx->next_check = (u8)(i + 1);
+    ctx->next_index = -1;
+    ctx->next_digit = -1;
+}
+
+static int slide_step(slide_ctx *ctx, int width, int i, const u8 scalar[32])
+{
+    if (i == ctx->next_check) {
+        if (scalar_bit(scalar, i) == scalar_bit(scalar, i - 1)) {
+            ctx->next_check--;
+        } else {
+            // compute digit of next window
+            int w = MIN(width, i + 1);
+            int v = -(scalar_bit(scalar, i) << (w-1));
+            FOR_T (int, j, 0, w-1) {
+                v += scalar_bit(scalar, i-(w-1)+j) << j;
+            }
+            v += scalar_bit(scalar, i-w);
+            int lsb = v & (~v + 1);            // smallest bit of v
+            int s   = (   ((lsb & 0xAA) != 0)  // log2(lsb)
+                       | (((lsb & 0xCC) != 0) << 1)
+                       | (((lsb & 0xF0) != 0) << 2));
+            ctx->next_index  = (i16)(i-(w-1)+s);
+            ctx->next_digit  = (i8) (v >> s   );
+            ctx->next_check -= w;
+        }
+    }
+    return i == ctx->next_index ? ctx->next_digit: 0;
+}
+
+#define P_W_WIDTH 3 // Affects the size of the stack
+#define B_W_WIDTH 5 // Affects the size of the binary
+#define P_W_SIZE  (1<<(P_W_WIDTH-2))
+
+// P = [b]B + [p]P, where B is the base point
+//
+// Variable time! Internal buffers are not wiped! Inputs must not be secret!
+// => Use only to *check* signatures.
+static void ge_double_scalarmult_vartime(ge *P, const u8 p[32], const u8 b[32])
+{
+    // cache P window for addition
+    ge_cached cP[P_W_SIZE];
+    {
+        ge P2, tmp;
+        ge_double(&P2, P, &tmp);
+        ge_cache(&cP[0], P);
+        FOR (i, 0, (P_W_SIZE)-1) {
+            ge_add(&tmp, &P2, &cP[i]);
+            ge_cache(&cP[i+1], &tmp);
+        }
+    }
+
+    // Merged double and add ladder, fused with sliding
+    slide_ctx p_slide;  slide_init(&p_slide, p);
+    slide_ctx b_slide;  slide_init(&b_slide, b);
+    int i = MAX(p_slide.next_check, b_slide.next_check);
+    ge *sum = P;
+    ge_zero(sum);
+    while (i >= 0) {
+        ge tmp;
+        ge_double(sum, sum, &tmp);
+        int p_digit = slide_step(&p_slide, P_W_WIDTH, i, p);
+        int b_digit = slide_step(&b_slide, B_W_WIDTH, i, b);
+        if (p_digit > 0) { ge_add(sum, sum, &cP[ p_digit / 2]); }
+        if (p_digit < 0) { ge_sub(sum, sum, &cP[-p_digit / 2]); }
+        fe t1, t2;
+        if (b_digit > 0) { ge_madd(sum, sum,
+                                   window_Yp[ b_digit / 2],
+                                   window_Ym[ b_digit / 2],
+                                   window_T2[ b_digit / 2], t1, t2); }
+        if (b_digit < 0) { ge_msub(sum, sum,
+                                   window_Yp[-b_digit / 2],
+                                   window_Ym[-b_digit / 2],
+                                   window_T2[-b_digit / 2], t1, t2); }
+        i--;
+    }
+}
+
+// 5-bit signed comb in cached format (Niels coordinates, Z=1)
+static const fe comb_Yp[16] = {
+    {2615675, 9989699, 17617367, -13953520, -8802803,
+     1447286, -8909978, -270892, -12199203, -11617247},
+    {-1271192, 4785266, -29856067, -6036322, -10435381,
+     15493337, 20321440, -6036064, 15902131, 13420909},
+    {-26170888, -12891603, 9568996, -6197816, 26424622,
+     16308973, -4518568, -3771275, -15522557, 3991142},
+    {-25875044, 1958396, 19442242, -9809943, -26099408,
+     -18589, -30794750, -14100910, 4971028, -10535388},
+    {-13896937, -7357727, -12131124, 617289, -33188817,
+     10080542, 6402555, 10779157, 1176712, 2472642},
+    {71503, 12662254, -17008072, -8370006, 23408384,
+     -12897959, 32287612, 11241906, -16724175, 15336924},
+    {27397666, 4059848, 23573959, 8868915, -10602416,
+     -10456346, -22812831, -9666299, 31810345, -2695469},
+    {-3418193, -694531, 2320482, -11850408, -1981947,
+     -9606132, 23743894, 3933038, -25004889, -4478918},
+    {-4448372, 5537982, -4805580, 14016777, 15544316,
+     16039459, -7143453, -8003716, -21904564, 8443777},
+    {32495180, 15749868, 2195406, -15542321, -3213890,
+     -4030779, -2915317, 12751449, -1872493, 11926798},
+    {26779741, 12553580, -24344000, -4071926, -19447556,
+     -13464636, 21989468, 7826656, -17344881, 10055954},
+    {5848288, -1639207, -10452929, -11760637, 6484174,
+     -5895268, -11561603, 587105, -19220796, 14378222},
+    {32050187, 12536702, 9206308, -10016828, -13333241,
+     -4276403, -24225594, 14562479, -31803624, -9967812},
+    {23536033, -6219361, 199701, 4574817, 30045793,
+     7163081, -2244033, 883497, 10960746, -14779481},
+    {-8143354, -11558749, 15772067, 14293390, 5914956,
+     -16702904, -7410985, 7536196, 6155087, 16571424},
+    {6211591, -11166015, 24568352, 2768318, -10822221,
+     11922793, 33211827, 3852290, -13160369, -8855385},
+};
+static const fe comb_Ym[16] = {
+    {8873912, 14981221, 13714139, 6923085, 25481101,
+     4243739, 4646647, -203847, 9015725, -16205935},
+    {-1827892, 15407265, 2351140, -11810728, 28403158,
+     -1487103, -15057287, -4656433, -3780118, -1145998},
+    {-30623162, -11845055, -11327147, -16008347, 17564978,
+     -1449578, -20580262, 14113978, 29643661, 15580734},
+    {-15109423, 13348938, -14756006, 14132355, 30481360,
+     1830723, -240510, 9371801, -13907882, 8024264},
+    {25119567, 5628696, 10185251, -9279452, 683770,
+     -14523112, -7982879, -16450545, 1431333, -13253541},
+    {-8390493, 1276691, 19008763, -12736675, -9249429,
+     -12526388, 17434195, -13761261, 18962694, -1227728},
+    {26361856, -12366343, 8941415, 15163068, 7069802,
+     -7240693, -18656349, 8167008, 31106064, -1670658},
+    {-5677136, -11012483, -1246680, -6422709, 14772010,
+     1829629, -11724154, -15914279, -18177362, 1301444},
+    {937094, 12383516, -22597284, 7580462, -18767748,
+     13813292, -2323566, 13503298, 11510849, -10561992},
+    {28028043, 14715827, -6558532, -1773240, 27563607,
+     -9374554, 3201863, 8865591, -16953001, 7659464},
+    {13628467, 5701368, 4674031, 11935670, 11461401,
+     10699118, 31846435, -114971, -8269924, -14777505},
+    {-22124018, -12859127, 11966893, 1617732, 30972446,
+     -14350095, -21822286, 8369862, -29443219, -15378798},
+    {290131, -471434, 8840522, -2654851, 25963762,
+     -11578288, -7227978, 13847103, 30641797, 6003514},
+    {-23547482, -11475166, -11913550, 9374455, 22813401,
+     -5707910, 26635288, 9199956, 20574690, 2061147},
+    {9715324, 7036821, -17981446, -11505533, 26555178,
+     -3571571, 5697062, -14128022, 2795223, 9694380},
+    {14864569, -6319076, -3080, -8151104, 4994948,
+     -1572144, -41927, 9269803, 13881712, -13439497},
+};
+static const fe comb_T2[16] = {
+    {-18494317, 2686822, 18449263, -13905325, 5966562,
+     -3368714, 2738304, -8583315, 15987143, 12180258},
+    {-33336513, -13705917, -18473364, -5039204, -4268481,
+     -4136039, -8192211, -2935105, -19354402, 5995895},
+    {-19753139, -1729018, 21880604, 13471713, 28315373,
+     -8530159, -17492688, 11730577, -8790216, 3942124},
+    {17278020, 3905045, 29577748, 11151940, 18451761,
+     -6801382, 31480073, -13819665, 26308905, 10868496},
+    {26937294, 3313561, 28601532, -3497112, -22814130,
+     11073654, 8956359, -16757370, 13465868, 16623983},
+    {-5468054, 6059101, -31275300, 2469124, 26532937,
+     8152142, 6423741, -11427054, -15537747, -10938247},
+    {-11303505, -9659620, -12354748, -9331434, 19501116,
+     -9146390, -841918, -5315657, 8903828, 8839982},
+    {16603354, -215859, 1591180, 3775832, -705596,
+     -13913449, 26574704, 14963118, 19649719, 6562441},
+    {33188866, -12232360, -24929148, -6133828, 21818432,
+     11040754, -3041582, -3524558, -29364727, -10264096},
+    {-20704194, -12560423, -1235774, -785473, 13240395,
+     4831780, -472624, -3796899, 25480903, -15422283},
+    {-2204347, -16313180, -21388048, 7520851, -8697745,
+     -14460961, 20894017, 12210317, -475249, -2319102},
+    {-16407882, 4940236, -21194947, 10781753, 22248400,
+     14425368, 14866511, -7552907, 12148703, -7885797},
+    {16376744, 15908865, -30663553, 4663134, -30882819,
+     -10105163, 19294784, -10800440, -33259252, 2563437},
+    {30208741, 11594088, -15145888, 15073872, 5279309,
+     -9651774, 8273234, 4796404, -31270809, -13316433},
+    {-17802574, 14455251, 27149077, -7832700, -29163160,
+     -7246767, 17498491, -4216079, 31788733, -14027536},
+    {-25233439, -9389070, -6618212, -3268087, -521386,
+     -7350198, 21035059, -14970947, 25910190, 11122681},
+};
+
+// p = [scalar]B, where B is the base point
+static void ge_scalarmult_base(ge *p, const u8 scalar[32])
+{
+    // 5-bits signed comb, from Mike Hamburg's
+    // Fast and compact elliptic-curve cryptography (2012)
+    static const u8 half_mod_L[32] = { // 1 / 2 modulo L
+        0xf7, 0xe9, 0x7a, 0x2e, 0x8d, 0x31, 0x09, 0x2c,
+        0x6b, 0xce, 0x7b, 0x51, 0xef, 0x7c, 0x6f, 0x0a,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
+    };
+    static const u8 half_ones[32] = { // (2^255 - 1) / 2 modulo L
+        0x42, 0x9a, 0xa3, 0xba, 0x23, 0xa5, 0xbf, 0xcb,
+        0x11, 0x5b, 0x9d, 0xc5, 0x74, 0x95, 0xf3, 0xb6,
+        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07,
+    };
+    // All bits set form: 1 means 1, 0 means -1
+    u8 s_scalar[32];
+    mul_add(s_scalar, scalar, half_mod_L, half_ones);
+
+    // Double and add ladder
+    fe yp, ym, t2, n2, a; // temporaries for addition
+    ge dbl;               // temporary for doubling
+    ge_zero(p);
+    for (int i = 50; i >= 0; i--) {
+        if (i < 50) {
+            ge_double(p, p, &dbl);
+        }
+        fe_1(yp);
+        fe_1(ym);
+        fe_0(t2);
+        u8 teeth = (u8)((scalar_bit(s_scalar, i)           ) +
+                        (scalar_bit(s_scalar, i +  51) << 1) +
+                        (scalar_bit(s_scalar, i + 102) << 2) +
+                        (scalar_bit(s_scalar, i + 153) << 3) +
+                        (scalar_bit(s_scalar, i + 204) << 4));
+        u8 high  = teeth >> 4;
+        u8 index = (teeth ^ (high - 1)) & 15;
+        FOR (j, 0, 16) {
+            i32 select = 1 & (((j ^ index) - 1) >> 8);
+            fe_ccopy(yp, comb_Yp[j], select);
+            fe_ccopy(ym, comb_Ym[j], select);
+            fe_ccopy(t2, comb_T2[j], select);
+        }
+
+        fe_neg(n2, t2);
+        fe_cswap(t2, n2, high);
+        fe_cswap(yp, ym, high);
+        ge_madd(p, p, ym, yp, n2, a, t2); // reuse t2 as temporary
+    }
+    WIPE_CTX(&dbl);
+    WIPE_BUFFER(yp);  WIPE_BUFFER(t2);  WIPE_BUFFER(a);
+    WIPE_BUFFER(ym);  WIPE_BUFFER(n2);
+    WIPE_BUFFER(s_scalar);
+}
+
+void crypto_sign_public_key_custom_hash(u8       public_key[32],
+                                        const u8 secret_key[32],
+                                        const crypto_sign_vtable *hash)
+{
+    u8 a[64];
+    hash->hash(a, secret_key, 32);
+    trim_scalar(a);
+    ge A;
+    ge_scalarmult_base(&A, a);
+    ge_tobytes(public_key, &A);
+    WIPE_BUFFER(a);
+    WIPE_CTX(&A);
+}
+
+void crypto_sign_public_key(u8 public_key[32], const u8 secret_key[32])
+{
+    crypto_sign_public_key_custom_hash(public_key, secret_key,
+                                       &crypto_blake2b_vtable);
+}
+
+void crypto_sign_init_first_pass_custom_hash(crypto_sign_ctx_abstract *ctx,
+                                             const u8 secret_key[32],
+                                             const u8 public_key[32],
+                                             const crypto_sign_vtable *hash)
+{
+    ctx->hash  = hash; // set vtable
+    u8 *a      = ctx->buf;
+    u8 *prefix = ctx->buf + 32;
+    ctx->hash->hash(a, secret_key, 32);
+    trim_scalar(a);
+
+    if (public_key == 0) {
+        crypto_sign_public_key_custom_hash(ctx->pk, secret_key, ctx->hash);
+    } else {
+        FOR (i, 0, 32) {
+            ctx->pk[i] = public_key[i];
+        }
+    }
+
+    // Deterministic part of EdDSA: Construct a nonce by hashing the message
+    // instead of generating a random number.
+    // An actual random number would work just fine, and would save us
+    // the trouble of hashing the message twice.  If we did that
+    // however, the user could fuck it up and reuse the nonce.
+    ctx->hash->init  (ctx);
+    ctx->hash->update(ctx, prefix , 32);
+}
+
+void crypto_sign_init_first_pass(crypto_sign_ctx_abstract *ctx,
+                                 const u8 secret_key[32],
+                                 const u8 public_key[32])
+{
+    crypto_sign_init_first_pass_custom_hash(ctx, secret_key, public_key,
+                                            &crypto_blake2b_vtable);
+}
+
+void crypto_sign_update(crypto_sign_ctx_abstract *ctx,
+                        const u8 *msg, size_t msg_size)
+{
+    ctx->hash->update(ctx, msg, msg_size);
+}
+
+void crypto_sign_init_second_pass(crypto_sign_ctx_abstract *ctx)
+{
+    u8 *r        = ctx->buf + 32;
+    u8 *half_sig = ctx->buf + 64;
+    ctx->hash->final(ctx, r);
+    reduce(r);
+
+    // first half of the signature = "random" nonce times the base point
+    ge R;
+    ge_scalarmult_base(&R, r);
+    ge_tobytes(half_sig, &R);
+    WIPE_CTX(&R);
+
+    // Hash R, the public key, and the message together.
+    // It cannot be done in parallel with the first hash.
+    ctx->hash->init  (ctx);
+    ctx->hash->update(ctx, half_sig, 32);
+    ctx->hash->update(ctx, ctx->pk , 32);
+}
+
+void crypto_sign_final(crypto_sign_ctx_abstract *ctx, u8 signature[64])
+{
+    u8 *a        = ctx->buf;
+    u8 *r        = ctx->buf + 32;
+    u8 *half_sig = ctx->buf + 64;
+    u8  h_ram[64];
+    ctx->hash->final(ctx, h_ram);
+    reduce(h_ram);
+    FOR (i, 0, 32) {
+        signature[i] = half_sig[i];
+    }
+    mul_add(signature + 32, h_ram, a, r); // s = h_ram * a + r
+    WIPE_BUFFER(h_ram);
+    crypto_wipe(ctx, ctx->hash->ctx_size);
+}
+
+void crypto_sign(u8        signature[64],
+                 const u8  secret_key[32],
+                 const u8  public_key[32],
+                 const u8 *message, size_t message_size)
+{
+    crypto_sign_ctx ctx;
+    crypto_sign_ctx_abstract *actx = (crypto_sign_ctx_abstract*)&ctx;
+    crypto_sign_init_first_pass (actx, secret_key, public_key);
+    crypto_sign_update          (actx, message, message_size);
+    crypto_sign_init_second_pass(actx);
+    crypto_sign_update          (actx, message, message_size);
+    crypto_sign_final           (actx, signature);
+}
+
+void crypto_check_init_custom_hash(crypto_check_ctx_abstract *ctx,
+                                   const u8 signature[64],
+                                   const u8 public_key[32],
+                                   const crypto_sign_vtable *hash)
+{
+    ctx->hash = hash; // set vtable
+    FOR (i, 0, 64) { ctx->buf[i] = signature [i]; }
+    FOR (i, 0, 32) { ctx->pk [i] = public_key[i]; }
+    ctx->hash->init  (ctx);
+    ctx->hash->update(ctx, signature , 32);
+    ctx->hash->update(ctx, public_key, 32);
+}
+
+void crypto_check_init(crypto_check_ctx_abstract *ctx,
+                       const u8 signature[64],
+                       const u8 public_key[32])
+{
+    crypto_check_init_custom_hash(ctx, signature, public_key,
+                                  &crypto_blake2b_vtable);
+}
+
+void crypto_check_update(crypto_check_ctx_abstract *ctx,
+                         const u8 *msg, size_t msg_size)
+{
+    ctx->hash->update(ctx, msg, msg_size);
+}
+
+int crypto_check_final(crypto_check_ctx_abstract *ctx)
+{
+    ge  A;
+    u8 *h_ram   = ctx->pk; // save stack space
+    u8 *R_check = ctx->pk; // save stack space
+    u8 *R       = ctx->buf;                      // R
+    u8 *s       = ctx->buf + 32;                 // s
+    ge *diff    = &A;                            // -A is overwritten...
+    if (ge_frombytes_neg_vartime(&A, ctx->pk) ||
+        is_above_L(s)) { // prevent s malleability
+        return -1;
+    }
+    {
+        u8 tmp[64];
+        ctx->hash->final(ctx, tmp);
+        reduce(tmp);
+        FOR (i, 0, 32) { // the extra copy saves 32 bytes of stack
+            h_ram[i] = tmp[i];
+        }
+    }
+    ge_double_scalarmult_vartime(&A, h_ram, s);  // ...here
+    ge_tobytes(R_check, diff);                   // R_check = s*B - h_ram*A
+    return crypto_verify32(R, R_check);          // R == R_check ? OK : fail
+    // No secret, no wipe
+}
+
+int crypto_check(const u8  signature[64],
+                 const u8  public_key[32],
+                 const u8 *message, size_t message_size)
+{
+    crypto_check_ctx ctx;
+    crypto_check_ctx_abstract *actx = (crypto_check_ctx_abstract*)&ctx;
+    crypto_check_init  (actx, signature, public_key);
+    crypto_check_update(actx, message, message_size);
+    return crypto_check_final(actx);
+}
+
+////////////////////
+/// Key exchange ///
+////////////////////
+void crypto_key_exchange(u8       shared_key[32],
+                         const u8 your_secret_key [32],
+                         const u8 their_public_key[32])
+{
+    crypto_x25519(shared_key, your_secret_key, their_public_key);
+    crypto_hchacha20(shared_key, shared_key, zero);
+}
+
+////////////////////////////////
+/// Authenticated encryption ///
+////////////////////////////////
+static void lock_auth(u8 mac[16], const u8  auth_key[32],
+                      const u8 *ad         , size_t ad_size,
+                      const u8 *cipher_text, size_t text_size)
+{
+    u8 sizes[16]; // Not secret, not wiped
+    store64_le(sizes + 0, ad_size);
+    store64_le(sizes + 8, text_size);
+    crypto_poly1305_ctx poly_ctx;           // auto wiped...
+    crypto_poly1305_init  (&poly_ctx, auth_key);
+    crypto_poly1305_update(&poly_ctx, ad         , ad_size);
+    crypto_poly1305_update(&poly_ctx, zero       , ALIGN(ad_size, 16));
+    crypto_poly1305_update(&poly_ctx, cipher_text, text_size);
+    crypto_poly1305_update(&poly_ctx, zero       , ALIGN(text_size, 16));
+    crypto_poly1305_update(&poly_ctx, sizes      , 16);
+    crypto_poly1305_final (&poly_ctx, mac); // ...here
+}
+
+void crypto_lock_aead(u8        mac[16],
+                      u8       *cipher_text,
+                      const u8  key[32],
+                      const u8  nonce[24],
+                      const u8 *ad        , size_t ad_size,
+                      const u8 *plain_text, size_t text_size)
+{
+    u8 sub_key[32];
+    u8 auth_key[64]; // "Wasting" the whole Chacha block is faster
+    crypto_hchacha20(sub_key, key, nonce);
+    crypto_chacha20(auth_key, 0, 64, sub_key, nonce + 16);
+    crypto_chacha20_ctr(cipher_text, plain_text, text_size,
+                        sub_key, nonce + 16, 1);
+    lock_auth(mac, auth_key, ad, ad_size, cipher_text, text_size);
+    WIPE_BUFFER(sub_key);
+    WIPE_BUFFER(auth_key);
+}
+
+int crypto_unlock_aead(u8       *plain_text,
+                       const u8  key[32],
+                       const u8  nonce[24],
+                       const u8  mac[16],
+                       const u8 *ad         , size_t ad_size,
+                       const u8 *cipher_text, size_t text_size)
+{
+    u8 sub_key[32];
+    u8 auth_key[64]; // "Wasting" the whole Chacha block is faster
+    crypto_hchacha20(sub_key, key, nonce);
+    crypto_chacha20(auth_key, 0, 64, sub_key, nonce + 16);
+    u8 real_mac[16];
+    lock_auth(real_mac, auth_key, ad, ad_size, cipher_text, text_size);
+    WIPE_BUFFER(auth_key);
+    if (crypto_verify16(mac, real_mac)) {
+        WIPE_BUFFER(sub_key);
+        WIPE_BUFFER(real_mac);
+        return -1;
+    }
+    crypto_chacha20_ctr(plain_text, cipher_text, text_size,
+                        sub_key, nonce + 16, 1);
+    WIPE_BUFFER(sub_key);
+    WIPE_BUFFER(real_mac);
+    return 0;
+}
+
+void crypto_lock(u8        mac[16],
+                 u8       *cipher_text,
+                 const u8  key[32],
+                 const u8  nonce[24],
+                 const u8 *plain_text, size_t text_size)
+{
+    crypto_lock_aead(mac, cipher_text, key, nonce, 0, 0, plain_text, text_size);
+}
+
+int crypto_unlock(u8       *plain_text,
+                  const u8  key[32],
+                  const u8  nonce[24],
+                  const u8  mac[16],
+                  const u8 *cipher_text, size_t text_size)
+{
+    return crypto_unlock_aead(plain_text, key, nonce, mac, 0, 0,
+                              cipher_text, text_size);
+}
diff --git a/monocypher/monocypher-3.0.0/optional/monocypher-ed25519.c b/monocypher/monocypher-3.0.0/optional/monocypher-ed25519.c
new file mode 100644
--- /dev/null
+++ b/monocypher/monocypher-3.0.0/optional/monocypher-ed25519.c
@@ -0,0 +1,396 @@
+// Monocypher version 3.0.0
+//
+// This file is dual-licensed.  Choose whichever licence you want from
+// the two licences listed below.
+//
+// The first licence is a regular 2-clause BSD licence.  The second licence
+// is the CC-0 from Creative Commons. It is intended to release Monocypher
+// to the public domain.  The BSD licence serves as a fallback option.
+//
+// SPDX-License-Identifier: BSD-2-Clause OR CC0-1.0
+//
+// ------------------------------------------------------------------------
+//
+// Copyright (c) 2017-2019, Loup Vaillant
+// All rights reserved.
+//
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// 1. Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright
+//    notice, this list of conditions and the following disclaimer in the
+//    documentation and/or other materials provided with the
+//    distribution.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// ------------------------------------------------------------------------
+//
+// Written in 2017-2019 by Loup Vaillant
+//
+// To the extent possible under law, the author(s) have dedicated all copyright
+// and related neighboring rights to this software to the public domain
+// worldwide.  This software is distributed without any warranty.
+//
+// You should have received a copy of the CC0 Public Domain Dedication along
+// with this software.  If not, see
+// <https://creativecommons.org/publicdomain/zero/1.0/>
+
+#include "monocypher-ed25519.h"
+
+/////////////////
+/// Utilities ///
+/////////////////
+#define FOR(i, min, max)     for (size_t i = min; i < max; i++)
+#define WIPE_CTX(ctx)        crypto_wipe(ctx   , sizeof(*(ctx)))
+#define MIN(a, b)            ((a) <= (b) ? (a) : (b))
+#define ALIGN(x, block_size) ((~(x) + 1) & ((block_size) - 1))
+typedef uint8_t u8;
+typedef uint64_t u64;
+
+static u64 load64_be(const u8 s[8])
+{
+    return((u64)s[0] << 56)
+        | ((u64)s[1] << 48)
+        | ((u64)s[2] << 40)
+        | ((u64)s[3] << 32)
+        | ((u64)s[4] << 24)
+        | ((u64)s[5] << 16)
+        | ((u64)s[6] <<  8)
+        |  (u64)s[7];
+}
+
+static void store64_be(u8 out[8], u64 in)
+{
+    out[0] = (in >> 56) & 0xff;
+    out[1] = (in >> 48) & 0xff;
+    out[2] = (in >> 40) & 0xff;
+    out[3] = (in >> 32) & 0xff;
+    out[4] = (in >> 24) & 0xff;
+    out[5] = (in >> 16) & 0xff;
+    out[6] = (in >>  8) & 0xff;
+    out[7] =  in        & 0xff;
+}
+
+///////////////
+/// SHA 512 ///
+///////////////
+static u64 rot(u64 x, int c       ) { return (x >> c) | (x << (64 - c));   }
+static u64 ch (u64 x, u64 y, u64 z) { return (x & y) ^ (~x & z);           }
+static u64 maj(u64 x, u64 y, u64 z) { return (x & y) ^ ( x & z) ^ (y & z); }
+static u64 big_sigma0(u64 x) { return rot(x, 28) ^ rot(x, 34) ^ rot(x, 39); }
+static u64 big_sigma1(u64 x) { return rot(x, 14) ^ rot(x, 18) ^ rot(x, 41); }
+static u64 lit_sigma0(u64 x) { return rot(x,  1) ^ rot(x,  8) ^ (x >> 7);   }
+static u64 lit_sigma1(u64 x) { return rot(x, 19) ^ rot(x, 61) ^ (x >> 6);   }
+
+static const u64 K[80] = {
+    0x428a2f98d728ae22,0x7137449123ef65cd,0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc,
+    0x3956c25bf348b538,0x59f111f1b605d019,0x923f82a4af194f9b,0xab1c5ed5da6d8118,
+    0xd807aa98a3030242,0x12835b0145706fbe,0x243185be4ee4b28c,0x550c7dc3d5ffb4e2,
+    0x72be5d74f27b896f,0x80deb1fe3b1696b1,0x9bdc06a725c71235,0xc19bf174cf692694,
+    0xe49b69c19ef14ad2,0xefbe4786384f25e3,0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65,
+    0x2de92c6f592b0275,0x4a7484aa6ea6e483,0x5cb0a9dcbd41fbd4,0x76f988da831153b5,
+    0x983e5152ee66dfab,0xa831c66d2db43210,0xb00327c898fb213f,0xbf597fc7beef0ee4,
+    0xc6e00bf33da88fc2,0xd5a79147930aa725,0x06ca6351e003826f,0x142929670a0e6e70,
+    0x27b70a8546d22ffc,0x2e1b21385c26c926,0x4d2c6dfc5ac42aed,0x53380d139d95b3df,
+    0x650a73548baf63de,0x766a0abb3c77b2a8,0x81c2c92e47edaee6,0x92722c851482353b,
+    0xa2bfe8a14cf10364,0xa81a664bbc423001,0xc24b8b70d0f89791,0xc76c51a30654be30,
+    0xd192e819d6ef5218,0xd69906245565a910,0xf40e35855771202a,0x106aa07032bbd1b8,
+    0x19a4c116b8d2d0c8,0x1e376c085141ab53,0x2748774cdf8eeb99,0x34b0bcb5e19b48a8,
+    0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb,0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3,
+    0x748f82ee5defb2fc,0x78a5636f43172f60,0x84c87814a1f0ab72,0x8cc702081a6439ec,
+    0x90befffa23631e28,0xa4506cebde82bde9,0xbef9a3f7b2c67915,0xc67178f2e372532b,
+    0xca273eceea26619c,0xd186b8c721c0c207,0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178,
+    0x06f067aa72176fba,0x0a637dc5a2c898a6,0x113f9804bef90dae,0x1b710b35131c471b,
+    0x28db77f523047d84,0x32caab7b40c72493,0x3c9ebe0a15c9bebc,0x431d67c49c100d4c,
+    0x4cc5d4becb3e42b6,0x597f299cfc657e2a,0x5fcb6fab3ad6faec,0x6c44198c4a475817
+};
+
+static void sha512_compress(crypto_sha512_ctx *ctx)
+{
+    u64 a = ctx->hash[0];    u64 b = ctx->hash[1];
+    u64 c = ctx->hash[2];    u64 d = ctx->hash[3];
+    u64 e = ctx->hash[4];    u64 f = ctx->hash[5];
+    u64 g = ctx->hash[6];    u64 h = ctx->hash[7];
+
+    FOR (j, 0, 16) {
+        u64 in = K[j] + ctx->input[j];
+        u64 t1 = big_sigma1(e) + ch (e, f, g) + h + in;
+        u64 t2 = big_sigma0(a) + maj(a, b, c);
+        h = g;  g = f;  f = e;  e = d  + t1;
+        d = c;  c = b;  b = a;  a = t1 + t2;
+    }
+    size_t i16 = 0;
+    FOR(i, 1, 5) {
+        i16 += 16;
+        FOR (j, 0, 16) {
+            ctx->input[j] += lit_sigma1(ctx->input[(j- 2) & 15]);
+            ctx->input[j] += lit_sigma0(ctx->input[(j-15) & 15]);
+            ctx->input[j] +=            ctx->input[(j- 7) & 15];
+            u64 in = K[i16 + j] + ctx->input[j];
+            u64 t1 = big_sigma1(e) + ch (e, f, g) + h + in;
+            u64 t2 = big_sigma0(a) + maj(a, b, c);
+            h = g;  g = f;  f = e;  e = d  + t1;
+            d = c;  c = b;  b = a;  a = t1 + t2;
+        }
+    }
+
+    ctx->hash[0] += a;    ctx->hash[1] += b;
+    ctx->hash[2] += c;    ctx->hash[3] += d;
+    ctx->hash[4] += e;    ctx->hash[5] += f;
+    ctx->hash[6] += g;    ctx->hash[7] += h;
+}
+
+static void sha512_set_input(crypto_sha512_ctx *ctx, u8 input)
+{
+    if (ctx->input_idx == 0) {
+        FOR (i, 0, 16) {
+            ctx->input[i] = 0;
+        }
+    }
+    size_t word = ctx->input_idx / 8;
+    size_t byte = ctx->input_idx % 8;
+    ctx->input[word] |= (u64)input << (8 * (7 - byte));
+}
+
+// increment a 128-bit "word".
+static void sha512_incr(u64 x[2], u64 y)
+{
+    x[1] += y;
+    if (x[1] < y) {
+        x[0]++;
+    }
+}
+
+static void sha512_end_block(crypto_sha512_ctx *ctx)
+{
+    if (ctx->input_idx == 128) {
+        sha512_incr(ctx->input_size, 1024); // size is in bits
+        sha512_compress(ctx);
+        ctx->input_idx = 0;
+    }
+}
+
+static void sha512_update(crypto_sha512_ctx *ctx,
+                          const u8 *message, size_t message_size)
+{
+    FOR (i, 0, message_size) {
+        sha512_set_input(ctx, message[i]);
+        ctx->input_idx++;
+        sha512_end_block(ctx);
+    }
+}
+
+void crypto_sha512_init(crypto_sha512_ctx *ctx)
+{
+    ctx->hash[0] = 0x6a09e667f3bcc908;
+    ctx->hash[1] = 0xbb67ae8584caa73b;
+    ctx->hash[2] = 0x3c6ef372fe94f82b;
+    ctx->hash[3] = 0xa54ff53a5f1d36f1;
+    ctx->hash[4] = 0x510e527fade682d1;
+    ctx->hash[5] = 0x9b05688c2b3e6c1f;
+    ctx->hash[6] = 0x1f83d9abfb41bd6b;
+    ctx->hash[7] = 0x5be0cd19137e2179;
+    ctx->input_size[0] = 0;
+    ctx->input_size[1] = 0;
+    ctx->input_idx = 0;
+}
+
+void crypto_sha512_update(crypto_sha512_ctx *ctx,
+                          const u8 *message, size_t message_size)
+{
+    // Align ourselves with block boundaries
+    size_t align = MIN(ALIGN(ctx->input_idx, 128), message_size);
+    sha512_update(ctx, message, align);
+    message      += align;
+    message_size -= align;
+
+    // Process the message block by block
+    FOR (i, 0, message_size / 128) { // number of blocks
+        FOR (j, 0, 16) {
+            ctx->input[j] = load64_be(message + j*8);
+        }
+        message        += 128;
+        ctx->input_idx += 128;
+        sha512_end_block(ctx);
+    }
+    message_size &= 127;
+
+    // remaining bytes
+    sha512_update(ctx, message, message_size);
+}
+
+void crypto_sha512_final(crypto_sha512_ctx *ctx, u8 hash[64])
+{
+    sha512_incr(ctx->input_size, ctx->input_idx * 8); // size is in bits
+    sha512_set_input(ctx, 128);                       // padding
+
+    // compress penultimate block (if any)
+    if (ctx->input_idx > 111) {
+        sha512_compress(ctx);
+        FOR(i, 0, 14) {
+            ctx->input[i] = 0;
+        }
+    }
+    // compress last block
+    ctx->input[14] = ctx->input_size[0];
+    ctx->input[15] = ctx->input_size[1];
+    sha512_compress(ctx);
+
+    // copy hash to output (big endian)
+    FOR (i, 0, 8) {
+        store64_be(hash + i*8, ctx->hash[i]);
+    }
+
+    WIPE_CTX(ctx);
+}
+
+void crypto_sha512(u8 hash[64], const u8 *message, size_t message_size)
+{
+    crypto_sha512_ctx ctx;
+    crypto_sha512_init  (&ctx);
+    crypto_sha512_update(&ctx, message, message_size);
+    crypto_sha512_final (&ctx, hash);
+}
+
+static void sha512_vtable_init(void *ctx)
+{
+    crypto_sha512_init(&((crypto_sign_ed25519_ctx*)ctx)->hash);
+}
+
+static void sha512_vtable_update(void *ctx, const u8 *m, size_t s)
+{
+    crypto_sha512_update(&((crypto_sign_ed25519_ctx*)ctx)->hash, m, s);
+}
+
+static void sha512_vtable_final(void *ctx, u8 *h)
+{
+    crypto_sha512_final(&((crypto_sign_ed25519_ctx*)ctx)->hash, h);
+}
+
+const crypto_sign_vtable crypto_sha512_vtable = {
+    crypto_sha512,
+    sha512_vtable_init,
+    sha512_vtable_update,
+    sha512_vtable_final,
+    sizeof(crypto_sign_ed25519_ctx),
+};
+
+////////////////////
+/// HMAC SHA 512 ///
+////////////////////
+void crypto_hmac_sha512_init(crypto_hmac_sha512_ctx *ctx,
+                             const u8 *key, size_t key_size)
+{
+    // hash key if it is too long
+    if (key_size > 128) {
+        crypto_sha512(ctx->key, key, key_size);
+        key      = ctx->key;
+        key_size = 64;
+    }
+    // Compute inner key: padded key XOR 0x36
+    FOR (i, 0, key_size)   { ctx->key[i] = key[i] ^ 0x36; }
+    FOR (i, key_size, 128) { ctx->key[i] =          0x36; }
+    // Start computing inner hash
+    crypto_sha512_init  (&ctx->ctx);
+    crypto_sha512_update(&ctx->ctx, ctx->key, 128);
+}
+
+void crypto_hmac_sha512_update(crypto_hmac_sha512_ctx *ctx,
+                               const u8 *message, size_t message_size)
+{
+    crypto_sha512_update(&ctx->ctx, message, message_size);
+}
+
+void crypto_hmac_sha512_final(crypto_hmac_sha512_ctx *ctx, u8 hmac[64])
+{
+    // Finish computing inner hash
+    crypto_sha512_final(&ctx->ctx, hmac);
+    // Compute outer key: padded key XOR 0x5c
+    FOR (i, 0, 128) {
+        ctx->key[i] ^= 0x36 ^ 0x5c;
+    }
+    // Compute outer hash
+    crypto_sha512_init  (&ctx->ctx);
+    crypto_sha512_update(&ctx->ctx, ctx->key , 128);
+    crypto_sha512_update(&ctx->ctx, hmac, 64);
+    crypto_sha512_final (&ctx->ctx, hmac); // outer hash
+    WIPE_CTX(ctx);
+}
+
+void crypto_hmac_sha512(u8 hmac[64], const u8 *key, size_t key_size,
+                        const u8 *message, size_t message_size)
+{
+    crypto_hmac_sha512_ctx ctx;
+    crypto_hmac_sha512_init  (&ctx, key, key_size);
+    crypto_hmac_sha512_update(&ctx, message, message_size);
+    crypto_hmac_sha512_final (&ctx, hmac);
+}
+
+
+///////////////
+/// Ed25519 ///
+///////////////
+
+void crypto_ed25519_public_key(u8       public_key[32],
+                               const u8 secret_key[32])
+{
+    crypto_sign_public_key_custom_hash(public_key, secret_key,
+                                       &crypto_sha512_vtable);
+}
+
+void crypto_ed25519_sign_init_first_pass(crypto_sign_ctx_abstract *ctx,
+                                         const u8 secret_key[32],
+                                         const u8 public_key[32])
+{
+    crypto_sign_init_first_pass_custom_hash(ctx, secret_key, public_key,
+                                            &crypto_sha512_vtable);
+}
+
+void crypto_ed25519_check_init(crypto_check_ctx_abstract *ctx,
+                               const u8 signature[64],
+                               const u8 public_key[32])
+{
+    crypto_check_init_custom_hash(ctx, signature, public_key,
+                                  &crypto_sha512_vtable);
+}
+
+void crypto_ed25519_sign(u8        signature [64],
+                         const u8  secret_key[32],
+                         const u8  public_key[32],
+                         const u8 *message, size_t message_size)
+{
+    crypto_sign_ed25519_ctx ctx;
+    crypto_sign_ctx_abstract *actx = (crypto_sign_ctx_abstract*)&ctx;
+    crypto_ed25519_sign_init_first_pass (actx, secret_key, public_key);
+    crypto_ed25519_sign_update          (actx, message, message_size);
+    crypto_ed25519_sign_init_second_pass(actx);
+    crypto_ed25519_sign_update          (actx, message, message_size);
+    crypto_ed25519_sign_final           (actx, signature);
+}
+
+int crypto_ed25519_check(const u8  signature [64],
+                         const u8  public_key[32],
+                         const u8 *message, size_t message_size)
+{
+    crypto_check_ed25519_ctx ctx;
+    crypto_check_ctx_abstract *actx = (crypto_check_ctx_abstract*)&ctx;
+    crypto_ed25519_check_init  (actx, signature, public_key);
+    crypto_ed25519_check_update(actx, message, message_size);
+    return crypto_ed25519_check_final(actx);
+}
diff --git a/monocypher/tests/Monocypher.hs b/monocypher/tests/Monocypher.hs
new file mode 100644
--- /dev/null
+++ b/monocypher/tests/Monocypher.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
diff --git a/monocypher/tests/Monocypher/Blake2bSpec.hs b/monocypher/tests/Monocypher/Blake2bSpec.hs
new file mode 100644
--- /dev/null
+++ b/monocypher/tests/Monocypher/Blake2bSpec.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+
+module Monocypher.Blake2bSpec where
+
+
+import           Data.ByteString.Internal (unsafeCreate)
+import           Data.ByteString.Unsafe   (unsafeUseAsCStringLen)
+import qualified Foreign.Storable as Storable
+import           Foreign.Ptr
+import           Foreign.C.Types
+import           Foreign.C.String
+
+import           Tests.Core
+import qualified Raaz.Digest.Blake2b as Blake2b
+
+foreign import ccall unsafe
+    crypto_blake2b :: Ptr Word8  -- hash
+                   -> Ptr CChar  -- message
+                   -> CSize
+                   -> IO ()
+
+blake2bSize :: Int
+blake2bSize = Storable.sizeOf (undefined :: Blake2b)
+
+monocypher_blake2b_io :: Ptr Word8 -> CStringLen -> IO ()
+monocypher_blake2b_io hshPtr (ptr, l) = crypto_blake2b hshPtr ptr (toEnum l)
+
+
+monocypher_blake2b :: ByteString -> Blake2b
+monocypher_blake2b bs = unsafeFromByteString $ unsafeCreate blake2bSize creator
+  where creator ptr = unsafeUseAsCStringLen bs (monocypher_blake2b_io ptr)
+
+spec :: Spec
+spec = prop "monocypher vs raaz - blake2b" $
+       \ x ->
+         monocypher_blake2b x `shouldBe` Blake2b.digest x
diff --git a/monocypher/tests/Monocypher/ChaCha20Spec.hs b/monocypher/tests/Monocypher/ChaCha20Spec.hs
new file mode 100644
--- /dev/null
+++ b/monocypher/tests/Monocypher/ChaCha20Spec.hs
@@ -0,0 +1,211 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+{-# LANGUAGE ScopedTypeVariables      #-}
+{-# LANGUAGE FlexibleContexts         #-}
+
+{- HLINT ignore "Use camelCase" -}
+
+-- | These tests compare the implementation of chacha20 of raaz and
+-- that of monocypher. Raaz implements the ietf variants and hence
+-- should be tested against crypto_ietf_chacha and not crypto_chacha C
+-- function of Monocyper (>=3.0).
+module Monocypher.ChaCha20Spec where
+
+
+import qualified Data.ByteString as BS
+import           Data.ByteString.Internal (unsafeCreate, createAndTrim')
+import           Data.ByteString.Unsafe   (unsafeUseAsCStringLen)
+import qualified Foreign.Storable as Storable
+import           Foreign.Ptr
+import           Foreign.C.Types
+import           Foreign.C.String
+import           Foreign.Marshal.Alloc
+import           System.IO.Unsafe  (unsafePerformIO)
+
+import           Raaz.Core
+import qualified Raaz.Encrypt.ChaCha20  as ChaCha20
+import qualified Raaz.Encrypt.XChaCha20 as XChaCha20
+import qualified Raaz.AuthEncrypt.Unsafe.ChaCha20Poly1305  as CP
+import qualified Raaz.AuthEncrypt.Unsafe.XChaCha20Poly1305 as XP
+
+import           Tests.Core
+
+foreign import ccall unsafe
+      crypto_ietf_chacha20 :: Ptr Word8  -- cipher text
+                           -> Ptr CChar  -- plain text
+                           -> Int        -- Size
+                           -> Ptr Word8  -- key
+                           -> Ptr Word8  -- nounce
+                           -> IO ()
+
+foreign import ccall unsafe
+    crypto_xchacha20 :: Ptr Word8  -- cipher text
+                     -> Ptr CChar  -- plain text
+                     -> Int        -- Size
+                     -> Ptr Word8  -- key
+                     -> Ptr Word8  -- nounce
+                     -> IO ()
+
+foreign import ccall unsafe
+    crypto_unlock :: Ptr Word8 -- plain
+                  -> Ptr Word8 -- key
+                  -> Ptr Word8 -- nounce
+                  -> Ptr Word8 -- mac
+                  -> Ptr CChar -- cipher
+                  -> Int       -- size
+                  -> IO Int
+
+foreign import ccall unsafe
+   crypto_unlock_aead :: Ptr Word8 -- plain_text,
+                      -> Ptr Word8 -- key
+                      -> Ptr Word8 -- nounce
+                      -> Ptr Word8 -- mac
+                      -> Ptr CChar -- aad
+                      -> Int       -- aad size
+                      -> Ptr CChar -- cipher text
+                      -> Int       -- cipher text size
+                      -> IO Int
+----------------------------------------------------------------------------------
+call :: EndianStore a
+     => a
+     -> (Ptr b -> IO something)
+     -> IO something
+call a action =
+  allocaBytes aSize $ \ aptr -> do store (castPtr aptr) a; action aptr
+  where aSize = Storable.sizeOf (undefined `asTypeOf` a)
+
+call2 :: (EndianStore a,  EndianStore b)
+      => a
+      -> b
+      -> (Ptr a1 -> Ptr b1 -> IO something)
+      -> IO something
+call2 a b action = call a (call b . action)
+
+------------------- Monocypher encryption -----------------------------------------
+
+monocypher_chacha20_io :: Key ChaCha20
+                       -> Nounce ChaCha20
+                       -> Ptr Word8
+                       -> CStringLen     -- plain text
+                       -> IO ()
+monocypher_chacha20_io k n cPtr (pPtr, l)
+  = call k $ call n . crypto_ietf_chacha20 cPtr pPtr l
+
+monocypher_xchacha20_io :: Key XChaCha20
+                        -> Nounce XChaCha20
+                        -> Ptr Word8
+                        -> CStringLen     -- plain text
+                        -> IO ()
+monocypher_xchacha20_io k n cPtr (pPtr, l)
+  = call k $ call n . crypto_xchacha20 cPtr pPtr l
+
+
+monocypher_chacha20_encrypt :: Key ChaCha20
+                            -> Nounce ChaCha20
+                            -> ByteString
+                            -> ByteString
+monocypher_chacha20_encrypt k n bs = unsafeFromByteString $ unsafeCreate l creator
+  where l = BS.length bs
+        creator = unsafeUseAsCStringLen bs . monocypher_chacha20_io k n
+
+
+monocypher_xchacha20_encrypt :: Key XChaCha20
+                             -> Nounce XChaCha20
+                             -> ByteString
+                             -> ByteString
+monocypher_xchacha20_encrypt k n bs = unsafeFromByteString $ unsafeCreate l creator
+  where l = BS.length bs
+        creator = unsafeUseAsCStringLen bs . monocypher_xchacha20_io k n
+
+-------------------- Monocypher encrypted auth ----------------------------------------
+
+monocypher_unlock_aead_io :: ByteString    -- aad
+                          -> ByteString    -- cipher text
+                          -> Key XChaCha20
+                          -> Nounce XChaCha20
+                          -> Poly1305
+                          -> Ptr Word8  -- Place to write the result.
+                          -> IO (Int, Int, Bool)
+monocypher_unlock_aead_io aad cText k n mac outPtr
+  = let unlockAction kPtr nPtr mPtr
+          = unsafeUseAsCStringLen aad
+          $ \ (aadPtr, aadLen)     -> unsafeUseAsCStringLen cText
+          $ \ (cTextPtr, cTextLen) ->
+              do res <- crypto_unlock_aead outPtr kPtr nPtr mPtr aadPtr aadLen cTextPtr cTextLen
+                 return (0, cTextLen, res == 0)
+    in  call k $ call2 n mac . unlockAction
+
+
+monocypher_unlock_io :: ByteString    -- cipher text
+                     -> Key XChaCha20
+                     -> Nounce XChaCha20
+                     -> Poly1305
+                     -> Ptr Word8  -- Place to write the result.
+                     -> IO (Int, Int, Bool)
+monocypher_unlock_io cText k n mac outPtr
+  = let unlockAction kPtr nPtr mPtr
+          = unsafeUseAsCStringLen cText
+            $ \ (cTextPtr, cTextLen) ->
+                do res <- crypto_unlock outPtr kPtr nPtr mPtr cTextPtr cTextLen
+                   return (0, cTextLen, res == 0)
+    in  call k $ call2 n mac . unlockAction
+
+
+monocypher_unlock      :: Key XChaCha20
+                       -> Nounce XChaCha20
+                       -> XP.Locked
+                       -> Maybe ByteString
+monocypher_unlock k n locked =
+  let cText = XP.unsafeToCipherText locked
+      mac   = XP.unsafeToAuthTag locked
+      len   = BS.length cText
+  in unsafePerformIO $
+     do (s, status) <- createAndTrim' len
+                       $ monocypher_unlock_io cText k n mac
+        if status then return (Just s) else return Nothing
+
+monocypher_unlock_aead :: ByteString        -- aad
+                       -> Key XChaCha20
+                       -> Nounce XChaCha20
+                       -> XP.Locked
+                       -> Maybe ByteString
+monocypher_unlock_aead aad k n aead =
+  let cText = XP.unsafeToCipherText aead
+      mac   = XP.unsafeToAuthTag aead
+      len   = BS.length cText
+  in unsafePerformIO $
+     do (s, status) <- createAndTrim' len
+                       $ monocypher_unlock_aead_io aad cText k n mac
+        if status then return (Just s) else return Nothing
+
+spec :: Spec
+spec = do
+  describe "monocypher vs raaz" $ do
+
+    prop "chacha20 encryption" $
+      \ k n x ->  monocypher_chacha20_encrypt k n x `shouldBe` ChaCha20.encrypt k n x
+
+    prop "xchacha20 encryption" $
+      \ k n x -> monocypher_xchacha20_encrypt k n x `shouldBe` XChaCha20.encrypt k n x
+
+    prop "raaz lock and monocypher unlock are inverses" $
+      \ k n (x :: ByteString) -> monocypher_unlock k n (XP.unsafeLock k n x) `shouldBe` Just x
+
+    prop "raaz lockWith vs monocypher unlockAead are inverses" $
+      \ k n (aad :: ByteString) (x :: ByteString)
+      -> monocypher_unlock_aead aad k n (XP.unsafeLockWith aad k n x) `shouldBe` Just x
+
+  describe "raaz - lock/unlock are inverses" $ do
+
+    prop "chacha20poly1305 " $
+      \ k n (x :: ByteString) -> CP.unlock k (CP.unsafeLock k n x) `shouldBe` Just x
+
+    prop "xchacha20poly1305" $
+      \ k n (x :: ByteString) -> XP.unlock k (XP.unsafeLock k n x) `shouldBe` Just x
+
+    prop "chacha20poly1305-aead" $
+      \ k n (aad :: ByteString) (x :: ByteString)
+      -> CP.unlockWith aad k (CP.unsafeLockWith aad k n x) `shouldBe` Just x
+
+    prop "xchacha20poly1305-aead" $
+      \ k n (aad :: ByteString) (x :: ByteString)
+      -> XP.unlockWith aad  k (XP.unsafeLockWith aad k n x) `shouldBe` Just x
diff --git a/monocypher/tests/Monocypher/Sha512Spec.hs b/monocypher/tests/Monocypher/Sha512Spec.hs
new file mode 100644
--- /dev/null
+++ b/monocypher/tests/Monocypher/Sha512Spec.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+
+module Monocypher.Sha512Spec where
+
+
+import           Data.ByteString.Internal (unsafeCreate)
+import           Data.ByteString.Unsafe   (unsafeUseAsCStringLen)
+import qualified Foreign.Storable as Storable
+import           Foreign.Ptr
+import           Foreign.C.Types
+import           Foreign.C.String
+
+import           Tests.Core
+import qualified Raaz.Digest.Sha512 as Sha512
+
+foreign import ccall unsafe
+    crypto_sha512 :: Ptr Word8  -- hash
+                  -> Ptr CChar  -- message
+                  -> CSize
+                  -> IO ()
+
+sha512Size :: Int
+sha512Size = Storable.sizeOf (undefined :: Sha512)
+
+monocypher_sha512_io :: Ptr Word8 -> CStringLen -> IO ()
+monocypher_sha512_io hshPtr (ptr, l) = crypto_sha512 hshPtr ptr (toEnum l)
+
+
+monocypher_sha512 :: ByteString -> Sha512
+monocypher_sha512 bs = unsafeFromByteString $ unsafeCreate sha512Size creator
+  where creator ptr = unsafeUseAsCStringLen bs (monocypher_sha512_io ptr)
+
+spec :: Spec
+spec = prop "monocypher vs raaz sha512" $
+       \ x ->
+         monocypher_sha512 x `shouldBe` Sha512.digest x
diff --git a/raaz.cabal b/raaz.cabal
--- a/raaz.cabal
+++ b/raaz.cabal
@@ -1,414 +1,886 @@
-name:    raaz
-version: 0.2.3
-
-synopsis: The raaz cryptographic library.
-
-description: Raaz is a cryptographic library for Haskell. The library
-  is designed with a special emphasis on using the type system of
-  Haskell to eliminate a large set of vulnerabilities like buffer
-  overflows, timing attacks etc. It also strives to achieve this
-  safety with no compromise on performance.
-
-homepage: http://github.com/raaz-crypto/raaz
-
-license:      BSD3
-license-file: LICENSE
-author:       Piyush P Kurur
-maintainer:   ppk@cse.iitk.ac.in
-
-category:      Codec, Raaz
-build-type:    Simple
-cabal-version: >=1.10
-
-extra-source-files: CHANGELOG.md
-                  , README.md
-                  , Releasing.md
-                  , Reviewing.md
-
-bug-reports: https://github.com/raaz-crypto/raaz/issues
-
--- List of platform specific source files.
-extra-source-files: entropy/urandom/Raaz/Entropy.hs
-                    entropy/arc4random/Raaz/Entropy.hs
-                    entropy/getrandom/Raaz/Entropy.hs
-                    entropy/windows/Raaz/Entropy.hsc
-                    -- The man page in markdown and its
-                    -- makefile. Needs pandoc to build
-                    mans/raaz.1.md
-                    mans/Makefile
-source-repository head
-  type: git
-  location: https://github.com/raaz-crypto/raaz
-
-------------------------- Flags -------------------------------------------------------------
-
-flag opt-native
-     Description: Use optimisation for the platform on which it is being built. Do not enable this
-        when cross compiling as it can break the implementation. Also tested only with gcc.
-     Default: False
-     Manual: True
-
-flag vector128
-     Description: Make use of vector instructions with size being 128. Do not enable this unless you have reasons
-       to. It is better to use opt-native and opt-vectorise and let gcc have a go at the portable implementation
-     Default: False
-     Manual: True
-
-flag vector256
-     Description: Make use of gcc vector instructions with size being 256. Do not enable this unless you have reasons
-       to. It is better to use opt-native and opt-vectorise and let gcc have a go at the portable implementation.
-     Default: False
-     Manual: True
-
-flag vector512
-     Description: Make use of gcc vector instructions with size being 512.
-     Default: False
-     Manual: True
-flag avx2
-     Description: Support avx2 optimisations. Warning: enable only if you are sure of support.
-     Default: False
-     Manual: True
-
-flag linux-getrandom
-     Description: Use the getrandom for system entropy instead of /dev/urandom. Available only on linux kernel > 3.17.
-     Default: False
-     Manual: True
-
-flag liquidhaskell
-     Description: Use liquid haskell form verifying properties. Only for developers.
-     Default: False
-     Manual: True
-
------------------------------ The library -----------------------------------------------------
-
-library
-  default-language: Haskell2010
-  ghc-options: -Wall
-  hs-source-dirs: .
-  exposed-modules: Raaz
-                 , Raaz.Core
-                 , Raaz.Core.ByteSource
-                 , Raaz.Core.CpuSupports
-               --  , Raaz.Core.DH
-                 , Raaz.Core.Encode
-                 , Raaz.Core.Memory
-                 , Raaz.Core.MonoidalAction
-                 , Raaz.Core.Parse.Applicative
-                 , Raaz.Core.Primitives
-                 , Raaz.Core.Types
-                 , Raaz.Core.Util
-                 , Raaz.Core.Transfer
-                 --
-                 -- Cryptographic hashes
-                 --
-                 , Raaz.Hash
-                 , Raaz.Hash.Internal
-                 , Raaz.Hash.Blake2
-                 , Raaz.Hash.Blake2.Implementation.CPortable
-                 , Raaz.Hash.Sha1
-                 , Raaz.Hash.Sha1.Implementation.CPortable
-                 , Raaz.Hash.Sha224
-                 , Raaz.Hash.Sha224.Implementation.CPortable
-                 , Raaz.Hash.Sha256
-                 , Raaz.Hash.Sha256.Implementation.CPortable
-                 , Raaz.Hash.Sha384
-                 , Raaz.Hash.Sha384.Implementation.CPortable
-                 , Raaz.Hash.Sha512
-                 , Raaz.Hash.Sha512.Implementation.CPortable
-                 --
-                 -- Ciphers
-                 --
-                 , Raaz.Cipher
-                 , Raaz.Cipher.Internal
-                 , Raaz.Cipher.AES
-                 , Raaz.Cipher.AES.CBC.Implementation.CPortable
-                 , Raaz.Cipher.ChaCha20
-                 , Raaz.Cipher.ChaCha20.Implementation.CPortable
-		 --
-		 -- Randomness
-		 --
-                 , Raaz.Random
-  other-modules: Raaz.Core.Constants
-               , Raaz.Core.Encode.Internal
-               , Raaz.Core.Encode.Base16
-               , Raaz.Core.Encode.Base64
-               , Raaz.Core.Util.ByteString
-               , Raaz.Core.Types.Aligned
-               , Raaz.Core.Types.Pointer
-               , Raaz.Core.Types.Tuple
-               , Raaz.Core.Types.Equality
-               , Raaz.Core.Types.Endian
-               , Raaz.Core.Types.Describe
-               , Raaz.Core.Types.Copying
-               --
-               -- Hashes
-               --
-               , Raaz.Hash.Internal.HMAC
-               , Raaz.Hash.Blake2.Internal
-               , Raaz.Hash.Blake2.Recommendation
-               , Raaz.Hash.Sha.Util
-               , Raaz.Hash.Sha1.Internal
-               , Raaz.Hash.Sha1.Recommendation
-               , Raaz.Hash.Sha256.Recommendation
-               , Raaz.Hash.Sha256.Internal
-               , Raaz.Hash.Sha224.Recommendation
-               , Raaz.Hash.Sha224.Internal
-               , Raaz.Hash.Sha384.Recommendation
-               , Raaz.Hash.Sha384.Internal
-               , Raaz.Hash.Sha512.Recommendation
-               , Raaz.Hash.Sha512.Internal
-               --
-               -- Internal modules from cipher
-               --
-               , Raaz.Cipher.AES.Internal
-               , Raaz.Cipher.AES.Recommendation
-               , Raaz.Cipher.ChaCha20.Internal
-               , Raaz.Cipher.ChaCha20.Recommendation
-               --
-               -- Internal module for randomness
-               --
-               , Raaz.Random.ChaCha20PRG
-               , Raaz.Entropy
-               , Paths_raaz
-  build-depends: base                           >= 4.6  &&  < 4.16
-               , bytestring                     >= 0.9  &&  < 0.12
-               , deepseq                        >= 1.1  &&  < 1.5
-               , vector                         >= 0.7.1 && < 0.13
-  if impl(ghc < 8)
-    -- 'transformers' needed for "Control.Monad.IO.Class" only
-    -- starting with base-4.9 we don't need 'transformers' anymore
-    build-depends: transformers
-
-  c-sources: cbits/raaz/core/endian.c
-           -- hash implementations
-           , cbits/raaz/hash/blake2/blake2b/portable.c
-           , cbits/raaz/hash/blake2/blake2s/portable.c
-           , cbits/raaz/hash/sha1/portable.c
-           , cbits/raaz/hash/sha256/portable.c
-           , cbits/raaz/hash/sha512/portable.c
-           -- ciphers
-           , cbits/raaz/cipher/aes/common.c
-           , cbits/raaz/cipher/aes/cportable.c
-           -- chacha20
-           , cbits/raaz/cipher/chacha20/cportable.c
-           -- memory management
-           , cbits/raaz/core/memory.c
-           -- cpu support
-           , cbits/raaz/core/cpusupports.c
-  include-dirs: cbits
-  includes: raaz/core/endian.h
-  install-includes: cbits/raaz/core/endian.h
-                  , cbits/raaz/hash/blake2/common.h
-                  , cbits/raaz/hash/blake2/blake2b/constants.h
-                  , cbits/raaz/hash/blake2/blake2s/constants.h
-                  , cbits/raaz/cipher/aes/common.h
-                  , cbits/raaz/cipher/aes/cportable.h
-                  , cbits/raaz/cipher/chacha20/common.h
-
-  --------------------------- Options for vector instructions ---------------------------------
-  if flag(opt-native)
-    cc-options: -march=native
-
-  if arch(x86_64)
-    cc-options: -DARCH_X86_64
-
-  if flag(vector128)
-     cpp-options: -DHAVE_VECTOR_128
-     cc-options:  -DHAVE_VECTOR_128
-     exposed-modules: Raaz.Cipher.ChaCha20.Implementation.Vector128
-     c-sources: cbits/raaz/cipher/chacha20/vector128.c
-
-  if flag(vector256)
-     cpp-options: -DHAVE_VECTOR_256
-     cc-options:  -DHAVE_VECTOR_256
-     exposed-modules: Raaz.Cipher.ChaCha20.Implementation.Vector256
-     c-sources: cbits/raaz/cipher/chacha20/vector256.c
-
-  if flag(avx2)
-     cpp-options: -DHAVE_VECTOR_256
-     cc-options:  -DHAVE_AVX2  -DHAVE_VECTOR_256
-     if !flag(opt-native)
-        cc-options: -mavx2
-  if flag(vector512)
-     cpp-options: -DHAVE_VECTOR_512
-     cc-options:  -DHAVE_VECTOR_512
-
-  ----------------------- System specific configurations ----------------------------------
-
-
-  if os(linux)
-     cc-options: -DPLATFORM_LINUX
-  if os(osx)
-     cc-options: -DPLATFORM_OSX
-  if os(openbsd)
-     cc-options: -DPLATFORM_OPENBSD
-  if os(windows)
-     cc-options: -DPLATFORM_WINDOWS -DUNICODE
-     cpp-options: -DPLATFORM_WINDOWS
-     extra-libraries: Advapi32, Kernel32
-     build-tools: hsc2hs
-
-  --------------------- Entropy ----------------------------------------------
-
-  if os(openbsd) || os(netbsd)
-    -- Entropy for openbsd using arc4random
-    hs-source-dirs: entropy/arc4random
-  else
-    if os(linux) && flag(linux-getrandom)
-        -- Use getentropy on linux
-        hs-source-dirs: entropy/getrandom
-    if os(windows)
-        -- Use CryptGenRandom
-        hs-source-dirs: entropy/windows
-    else
-        -- Entropy for generic posix by reading /dev/urandom
-        hs-source-dirs: entropy/urandom
-
-
----------------------------- Executables -------------------------------------------------
-
-executable raaz
-  default-language: Haskell2010
-  hs-source-dirs: bin
-  main-is: Main.hs
-  other-modules: Command.Checksum
-               , Command.Rand
-               , Command.CpuInfo
-               , Usage
-  build-depends: base
-               , optparse-applicative >= 0.10.0 && < 0.17
-               , raaz
-  if impl(ghc < 8)
-    -- 'transformers' needed for "Control.Monad.IO.Class" only
-    -- starting with base-4.9 we don't need 'transformers' anymore
-    build-depends: transformers
-
----------------------------- Test suit -----------------------------------------------------
-
-test-Suite spec
-  default-language: Haskell2010
-  type: exitcode-stdio-1.0
-  hs-source-dirs: spec
-  main-is: Spec.hs
-
-  if flag(vector128)
-     cpp-options: -DHAVE_VECTOR_128
-
-  if flag(vector256)
-     cpp-options:  -DHAVE_VECTOR_256
-  if flag(vector512)
-     cpp-options: -DHAVE_VECTOR_512
-
-  if !os(windows)
-     cpp-options: -DHAVE_DEV_NULL
-
-  ghc-options: -Wall
-
-  other-modules: Common
-               , Common.Cipher
-               , Common.Hash
-               , Common.Imports
-               , Common.Instances
-               , Common.Utils
-               , Raaz.Cipher.AESSpec
-               , Raaz.Cipher.ChaCha20Spec
-               , Raaz.Core.ByteSourceSpec
-               , Raaz.Core.EncodeSpec
-               , Raaz.Core.MemorySpec
-               , Raaz.Core.Types.WordSpec
-               , Raaz.Core.Util.ByteStringSpec
-               , Raaz.RandomSpec
-               , Raaz.Hash.Sha1Spec
-               , Raaz.Hash.Sha224Spec
-               , Raaz.Hash.Sha256Spec
-               , Raaz.Hash.Sha384Spec
-               , Raaz.Hash.Sha512Spec
-               , Raaz.Hash.Blake2Spec
-
-
-  build-depends: base
-               , bytestring
-               , HUnit                          >= 1.2
-               , QuickCheck                     >= 2.4
-               , hspec
-               , hspec-discover
-               , transformers
-               , raaz
-               , vector
-  build-tool-depends: hspec-discover:hspec-discover
-
--------------------------- Liquid haskell verification -------------------------------------
-
-test-Suite liquidspec
-  hs-source-dirs: liquid
-  default-language: Haskell2010
-  main-is: LiquidSpec.hs
-  type: exitcode-stdio-1.0
-  build-depends: base
-
-
-  if flag(liquidhaskell)
-    build-depends: liquidhaskell                >=0.8
-                 , directory
-                 , filepath
-    buildable: True
-  else
-    buildable: False
-
----------------------------------------------- Bench marks -----------------------------------------
-
-benchmark blaze-vs-write
-  hs-source-dirs: benchmarks
-  default-language: Haskell2010
-  main-is: BlazeVsWrite.hs
-  type: exitcode-stdio-1.0
-  build-depends: base
-               , blaze-builder
-               , bytestring
-               , criterion >= 1.5.0.0
-               , criterion-measurement
-               , raaz
-
-
----------------------------------------------- Cipher implemntation benchmarks ----------------------
-
-benchmark bench-ciphers
-  hs-source-dirs: benchmarks
-  default-language: Haskell2010
-  if flag(vector128)
-     cpp-options: -DHAVE_VECTOR_128
-  if flag(vector256) || flag(avx2)
-     cpp-options: -DHAVE_VECTOR_256
-  if flag(vector512)
-     cpp-options: -DHAVE_VECTOR_512
-
-  main-is: Cipher.hs
-  type: exitcode-stdio-1.0
-  build-depends: base
-               , blaze-builder
-               , bytestring
-               , criterion >= 1.5.0.0
-               , criterion-measurement
-               , raaz
-
--------------------------------- Benchmarking all primitives --------------------------------
-
-benchmark primitives
-  hs-source-dirs: benchmarks
-  default-language: Haskell2010
-  if flag(vector128)
-     cpp-options: -DHAVE_VECTOR_128
-  if flag(vector256) || flag(avx2)
-     cpp-options: -DHAVE_VECTOR_256
-  if flag(vector512)
-     cpp-options: -DHAVE_VECTOR_512
-
-  main-is: BenchPrimitives.hs
-  type: exitcode-stdio-1.0
-  build-depends: base
-               , blaze-builder
-               , bytestring
-               , criterion >= 1.5.0.0
-               , criterion-measurement
-               , pretty
-               , raaz
+cabal-version: 3.0
+
+name:    raaz
+version: 0.3.0
+stability: experimental
+
+synopsis: Fast and type safe cryptography.
+
+description:
+
+  Raaz is a cryptographic library which provides the state of the art
+  cryptographic primitives via a high-level, type safe interface. The
+  default interface provided to the user is through the top level
+  module "Raaz". Rather than bothering the user with low-level details
+  like the selection of primitives or entropy sources, this top level
+  module only talks about the desired cryptographic operation (whether
+  it is message digest or message encryption etc). A standalone
+  application that needs cryptography should stick to using this top
+  level interface.
+
+  Sometimes the selection of primitives is not in our hands --- we may
+  need to interface with other programs written in other languages or
+  using other libraries. For such situation, raaz exposes a primitive
+  specific interface. As an example @raaz@ exposes the
+  @Raaz.Digest.Sha256@ module that gives the same interface as that of
+  "Raaz.Digest" but uses sha256 as the underlying cryptographic hash.
+
+
+  -- Uncomment this part of the doucmentation when the visibility field is
+  -- supported
+
+  -- == Tweaking Implementations (Only for advanced users)
+
+  -- Despite the high level interface, users who are willing to go down
+  -- the abstraction layers, can tweak the underlying low level
+  -- primitives used by @raaz@. For example, one might have a custom
+  -- hardware where a particular primitive can be made much more
+  -- performant, or maybe for the given platform (say in a virtualised
+  -- environment) you might have a better entropy source than the
+  -- default. Raaz uses backpack signatures and modules to make such
+  -- customisation relatively painless to integrate into your
+  -- application.
+
+  -- To exploit this facility, you need to have some idea on the internal
+  -- structure of the @raaz@ package which consists of a few components.
+  -- Each cryptographic operation is captured by an api component and it
+  -- expects a module satisfying the appropriate @Implementation@
+  -- signature. The api subcomponent in turn provide the @Interface@
+  -- module which is what the user of the @raaz@ library sees. So as far
+  -- as changing the implementation is concerned, one needs to change the
+  -- @Implementation@ provided to the api subcomponent.
+
+  -- The @raaz:implementation@ subcomponent, as the name suggests exposes
+  -- a set of implementations of each primitive supported. When there are
+  -- multiple implementations for a given primitive, it also has a
+  -- default implementation selected.  For example, there might be two
+  -- different implementation for chacha20 cipher say foo and bar.  The
+  -- implementation subcomponent in that case has the modules
+  -- @ChaCha20.Foo@ and @ChaCha20.Bar@. Furthermore, if the foo
+  -- implementation is the prefered one, @raaz:implementation@ also
+  -- reexport @ChaCha20.Foo@ as @ChaCha20.Implementation@. The raaz
+  -- library just mixes in the implementation subcomponent and hence the
+  -- requirement for chacha20 implementation is taken care of by
+  -- @ChaCha20.Implementation@ (which is actually @ChaCha20.Foo@ in the
+  -- above example).
+
+
+  -- >
+  -- >                           raaz
+  -- >                             |
+  -- >                             |       +---------------------+
+  -- >                             +<------| raaz:implementation |
+  -- >                             |       +---------------------+
+  -- >                           +---+
+  -- >                ---------->| + |<-------------
+  -- >               /           +---+              \
+  -- >              /              ^                 \
+  -- >             /               |                  \
+  -- >            /                |                   \
+  -- >           /                 |                    \
+  -- >       Interface          Interface            Interface
+  -- >          ^                  ^                     ^
+  -- >          |                  |                     |
+  -- >    +------------+    +--------------+       +--------------+
+  -- >    | digest-api |    |  entropy-api |       |   encryt-api |
+  -- >    |            |    |              |       |              |
+  -- >    |            |    |              |       |              |
+  -- >    +------------+    +--------------+       +--------------+
+  -- >    |  +digest   |    |  +entropy    |       |  +encrypt    |
+  -- >    |constraints |    |  constraints |       | constraints  |
+  -- >    +------------+    +--------------+       +--------------+
+  -- >              \            |                    /
+  -- >               \           |                   /
+  -- >                \          |                  /
+  -- >                 \         |                 /
+  -- >                +----------------------------+
+  -- >                | indef:Implementation.hsig  |
+  -- >                +----------------------------+
+  -- >
+
+  -- == Tweaking randomness.
+
+  -- There are two components of the CSPRG exposed by @raaz@ --- an
+  -- entropy source, and a seed stretcher. The entropy source needs to
+  -- satisfy the signature @raaz:random-api:Entropy@ where as the seed
+  -- stretcher needs to satisfy the signature
+  -- @raaz:random-api:Implementation@ which adds some member function to
+  -- the @indef:Implementation@ signature as well as thins it. The
+  -- @raaz:raaz-indef@ component expects its seed stretcher to come from
+  -- @Random.Implementation@ exposed by @raaz:implementation@ (currently
+  -- a chacha20 based keystream is used for this purpose). This can also
+  -- be overridden if one wants. See the documentation of
+  -- @raaz:random-api:Implementation@ for details.
+
+homepage: https://github.com/raaz-crypto/raaz
+
+copyright: (c) 2012 Piyush P Kurur
+license:      Apache-2.0 OR BSD-3-Clause
+license-files: LICENSE-BSD3
+               LICENSE-APACHE-2.0
+
+author:       Piyush P Kurur
+maintainer:   ppk@cse.iitk.ac.in
+
+category:      Codec, Raaz
+build-type:    Simple
+
+data-files: tests/standard-test-vectors/blake2/tests.json
+
+extra-source-files: CHANGELOG.md
+                  , README.md
+
+bug-reports: https://github.com/raaz-crypto/raaz/issues
+
+source-repository head
+  type: git
+  location: https://github.com/raaz-crypto/raaz
+
+
+
+------------------------- Flags -------------------------------------------------------------
+
+flag linux-getrandom
+
+     Description: Use the getrandom for system entropy instead of
+       /dev/urandom. Enabled by default but disable this when building
+       for kernel < 3.17.
+
+     Default: True
+     Manual: True
+
+flag native
+
+     Description: Compile for native architecture. Often this enables
+       a lot of platform specific optimisation which lead to better
+       performance. Do not enable this when packaging though. Also
+       tested only with gcc
+
+     Default: False
+     Manual: True
+
+flag wipe-memset
+
+     Description: Use plain memset for wiping memory. The problem with
+       its use is that agressive compilers often optimise it out. Raaz
+       uses platform specific functions designed specifically to avoid
+       this and hence enabling this flag is STRONGLY DISCOURAGED.  Use
+       it only if your platform does not support such a call.
+
+     Default: False
+     Manual: True
+
+---------------------------- The common clause ------------------------------------------------
+
+common defaults
+  default-language: Haskell2010
+  ghc-options: -Wall
+  default-extensions: NoImplicitPrelude
+  build-depends: base                    >= 4.11 &&  < 4.16
+               , bytestring              >= 0.10 &&  < 0.12
+               , deepseq                 >= 1.4  &&  < 1.5
+               , vector                  >= 0.12 &&  < 0.13
+
+  ------------------------ Compiler optimisation flags -------------------------------------
+  if flag(native) { cc-options: -march=native  }
+
+  ------------------------ Memory wiping calls  -------------------------------------------
+  if !flag(wipe-memset)
+     if   os(netbsd)  { cc-options: -DHAVE_EXPLICIT_MEMSET    }
+     elif os(windows) { cc-options: -DHAVE_SECURE_ZERO_MEMORY }
+     elif !os(osx)    { cc-options: -DHAVE_EXPLICIT_BZERO     }
+
+  ----------------------- System specific configurations ----------------------------------
+  if os(linux)   { cc-options: -DPLATFORM_LINUX   }
+  if os(osx)     { cc-options: -DPLATFORM_OSX     }
+  if os(openbsd) { cc-options: -DPLATFORM_OPENBSD }
+  if os(windows)
+     cc-options: -DPLATFORM_WINDOWS -DUNICODE
+     cpp-options: -DPLATFORM_WINDOWS
+     extra-libraries: Advapi32, Kernel32
+     build-tool-depends: hsc2hs:hsc2hs
+
+
+----------------------------- The core library ------------------------------------------------
+library core
+  import: defaults
+  -- visibility: public
+  hs-source-dirs: core
+  exposed-modules: Raaz.Core
+                 , Raaz.Core.CpuSupports
+                 , Raaz.Core.Encode
+                 , Raaz.Core.Memory
+                 , Raaz.Core.Prelude
+                 , Raaz.Core.Transfer
+                 , Raaz.Core.Transfer.Unsafe
+                 , Raaz.Core.Types
+                 , Raaz.Core.Types.Internal
+                 , Raaz.Primitive.AEAD.Internal
+                 , Raaz.Primitive.Blake2.Internal
+                 , Raaz.Primitive.Sha2.Internal
+                 , Raaz.Primitive.ChaCha20.Internal
+                 , Raaz.Primitive.Poly1305.Internal
+                 , Raaz.Primitive.HashMemory
+                 , Raaz.Primitive.Keyed.Internal
+
+  other-modules: Raaz.Core.ByteSource
+               , Raaz.Core.MonoidalAction
+               , Raaz.Core.Parse
+               , Raaz.Core.Parse.Unsafe
+               , Raaz.Core.Primitive
+               , Raaz.Core.Constants
+               , Raaz.Core.Encode.Internal
+               , Raaz.Core.Encode.Base16
+               , Raaz.Core.Encode.Base64
+               , Raaz.Core.Util.ByteString
+               , Raaz.Core.Types.Pointer
+               , Raaz.Core.Types.Tuple
+               , Raaz.Core.Types.Equality
+               , Raaz.Core.Types.Endian
+               , Raaz.Core.Types.Copying
+
+  c-sources: core/cbits/raaz/core/endian.c
+           , core/cbits/raaz/core/memory.c
+           , core/cbits/raaz/core/cpusupports.c
+  include-dirs: core/cbits
+  includes: core/cbits/raaz/core/endian.h
+  install-includes: core/cbits/raaz/core/endian.h
+
+----------------------------- Libverse as a sublibrary -----------------------------
+
+library libverse
+  import: defaults
+  build-depends: core
+  hs-source-dirs: libverse
+  exposed-modules: Raaz.Verse.ChaCha20.C.Portable
+                 , Raaz.Verse.Sha512.C.Portable
+                 , Raaz.Verse.Sha256.C.Portable
+                 , Raaz.Verse.Blake2b.C.Portable
+                 , Raaz.Verse.Poly1305.C.Portable
+  c-sources: libverse/chacha20/c/portable.c
+           , libverse/sha256/c/portable.c
+           , libverse/sha512/c/portable.c
+           , libverse/blake2b/c/portable.c
+           , libverse/poly1305/c/portable.c
+           , libverse/verse.c
+  include-dirs: libverse
+  includes: libverse/verse.h
+
+
+---------------------- Implementation signature packages -------------
+--
+-- The signature package that exposes an implementation of a
+-- primitive.
+---
+
+library indef
+  import: defaults
+  -- visibility: public
+  build-depends: core
+  hs-source-dirs: indef
+  signatures: Implementation
+
+
+-- Library exposing a buffer for cryptographic primitives. For a
+-- natural number n, a Buffer n is a pointer which has enough to
+-- process n blocks of the primitive at a time. It also takes care of
+-- the alignment requirements for the implementation. Not everything
+-- related to an Implementation is required here and hence it uses a
+-- thinned down version of the Implementation signature.
+
+library buffer
+  import: defaults
+  build-depends: core
+               , indef
+  hs-source-dirs: indef/buffer
+  exposed-modules: Buffer
+                 , Context
+
+-- The utility package that defines generic interface that is useful
+-- for all primitives.
+library utils
+  import: defaults
+  build-depends: core
+               , indef
+               , buffer
+  hs-source-dirs: indef
+  exposed-modules: Utils
+
+-------------------- Derived Implementations ----------------------------
+--
+-- Certain primitives are defined based on other primitive. Given
+-- below are indef packages for these.
+--
+-- mac-indef: Certain hashes like blake2 supports a simple keyed
+--   hashing algorithm that can be used as message authentication
+--   code. This module exposes the module `Mac.Implementation` which
+--   can be mixed into the auth-api module to satisfy its
+--   requirement of an `Implementation` module.
+--
+-- xchacha-indef: Implementation of the xchacha20 cipher based on an
+--   underlying implementation of chacha20 and hchacha20 hashing.
+
+library mac-indef
+  import: defaults
+  -- visibility: public
+  hs-source-dirs: indef/keyed/hash
+  signatures: Implementation
+  build-depends: buffer
+               , core
+               , indef
+               , utils
+  exposed-modules: Mac.Implementation
+
+library xchacha-indef
+  import: defaults
+  -- visibility: public
+  hs-source-dirs: indef/chacha20
+  signatures: Implementation
+  build-depends: core
+               , indef
+  exposed-modules: XChaCha20.Implementation
+
+-------- API packages ----------------------------------------------
+--
+-- An api package provides an `Interface` module for some common
+-- cryptographic operations. Typically they depend on one or more of
+-- the implementation modules.
+--
+
+-- API package for message digest.
+library digest-api
+  import: defaults
+  -- visibility: public
+  hs-source-dirs: api/digest/
+  signatures: Implementation
+  build-depends: core
+               , indef
+               , buffer
+               , utils
+  exposed-modules: Interface
+
+-- API package for message authenticator.
+library auth-api
+  import: defaults
+  -- visibility: public
+  hs-source-dirs: api/auth
+  signatures: Implementation
+  build-depends: core
+               , indef
+               , utils
+               , buffer
+  exposed-modules: Interface
+
+-- API package for random bytes generator. The Implementation
+-- signature captures the primitive that stretches the seed and the
+-- Entroy signature captures entropy sources.
+library random-api
+  import: defaults
+  -- visibility: public
+  hs-source-dirs: api/random
+  build-depends: core
+               , indef
+               , buffer
+  signatures: Implementation
+            , Entropy
+  exposed-modules: Internal
+                 , PRGenerator
+
+-- API package for encryption.
+library encrypt-api
+  import: defaults
+  -- visibility: public
+  hs-source-dirs: api/encrypt
+  signatures: Implementation
+  build-depends: core
+               , indef
+               , utils
+  exposed-modules: Interface
+
+-- API package for aead implementation.
+library aead-api
+  import: defaults
+  -- visibility: public
+  hs-source-dirs: api/aead
+  build-depends: core
+               , indef
+               , utils
+               , buffer
+  signatures: Cipher.Implementation
+            , Auth.Implementation
+  exposed-modules: Interface
+  mixins: indef requires (Implementation as Cipher.Implementation)
+        , indef requires (Implementation as Auth.Implementation)
+        , utils (Utils as Cipher.Utils) requires (Implementation as Cipher.Implementation)
+        , utils (Utils as Auth.Utils)   requires (Implementation as Auth.Implementation)
+        , buffer (Buffer as Cipher.Buffer) requires (Implementation as Cipher.Implementation)
+
+--------------------  The implementation modules ----------------------------------
+--
+-- This package exposes all the implementations provided by the raaz
+-- library. In addition, for all primitives Prim supported by raaz, it
+-- exposes a default Prim.Implementation module. Therefore, adding
+-- this package to the dependency of another package that needs an
+-- implementation of Prim (via the module hole Prim.Implementation)
+-- satisfies the requirement.
+--
+-- One can selectively override the implementation used by a primitive
+-- using the idiom
+--
+-- build-depends: raaz-indef
+--              , implementation
+-- mixins: raaz-indef requires (ChaCha20.Implementation as ChaCha20.CHandWritten)
+--
+--
+-- The above lines ensures that the interface provided by raaz-indef
+-- for ChaCha20, uses the the Hand Written implementation while all
+-- other primitives uses the default implementation (set in the
+-- implementation package).
+
+library implementation
+  import: defaults
+  -- visibility: public
+  build-depends: core
+               , libverse
+  hs-source-dirs: implementation
+
+  exposed-modules: Blake2b.CPortable
+                 , Sha256.CPortable
+                 , ChaCha20.CPortable
+                 , ChaCha20.Random.CPortable
+                 , Sha512.CPortable
+                 -- Implementation hand written in C
+                 , ChaCha20.CHandWritten
+                 , Blake2b.CHandWritten
+                 , Blake2s.CHandWritten
+                 , Poly1305.CPortable
+                 , Sha256.CHandWritten
+                 , Sha512.CHandWritten
+
+  -- By re-exporting the modules, we are giving a default selection
+  -- for implementations.
+  reexported-modules: Blake2b.CPortable as Blake2b.Implementation
+                    , Blake2s.CHandWritten as Blake2s.Implementation
+                    , ChaCha20.CPortable   as ChaCha20.Implementation
+                    , ChaCha20.Random.CPortable as Random.Implementation
+                    , Sha256.CPortable     as Sha256.Implementation
+                    , Poly1305.CPortable   as Poly1305.Implementation
+                    , Sha512.CPortable     as Sha512.Implementation
+  other-modules: Poly1305.Memory
+  c-sources: implementation/cbits/raaz/hash/blake2/blake2b/portable.c
+           , implementation/cbits/raaz/hash/blake2/blake2s/portable.c
+           , implementation/cbits/raaz/hash/sha1/portable.c
+           , implementation/cbits/raaz/hash/sha256/portable.c
+           , implementation/cbits/raaz/hash/sha512/portable.c
+           , implementation/cbits/raaz/cipher/chacha20/cportable.c
+  include-dirs: implementation/cbits/
+  includes: implementation/cbits/raaz/hash/blake2/common.h
+          , implementation/cbits/raaz/hash/blake2/blake2b/constants.h
+          , implementation/cbits/raaz/hash/blake2/blake2s/constants.h
+
+  -------------------------- Implementation of system entropy ----------------------------
+  --
+  -- The next conditionals perform the following configuration tasks.
+  --
+  -- 1. Expose *all* the available sources of entropy.
+  --
+  -- 2. Reexport the most desirable source as the module Entropy. This
+  -- way by mixing in the implementation component, the correct
+  -- entropy source is used (which can be overridden by the user if
+  -- they so wish -- do not try that unless you know what you are
+  -- doing)
+
+  if os(windows)
+     hs-source-dirs: implementation/entropy/windows/
+  else
+     if os(openbsd) || os(netbsd)
+        hs-source-dirs: implementation/entropy/arc4random/
+     elif os(linux)   && flag(linux-getrandom)
+        hs-source-dirs: implementation/entropy/getrandom/
+     else
+        hs-source-dirs: implementation/entropy/urandom/
+
+  exposed-modules: Entropy
+
+-------------------------------- The main raaz library -------------------------------------
+
+library
+  import: defaults
+  hs-source-dirs: raaz
+  build-depends: core
+               , mac-indef
+               , xchacha-indef
+               , aead-api
+               , auth-api
+               , digest-api
+               , libverse
+               , random-api
+               , implementation
+
+  exposed-modules: Raaz
+                 , Raaz.Auth
+                 , Raaz.AuthEncrypt
+                 , Raaz.AuthEncrypt.Unsafe
+                 , Raaz.Digest
+                 , Raaz.Random
+  reexported-modules: Raaz.Auth.Blake2b
+                    , Raaz.Auth.Blake2s
+                    , Raaz.AuthEncrypt.Unsafe.XChaCha20Poly1305
+                    , Raaz.AuthEncrypt.Unsafe.ChaCha20Poly1305
+                    , Raaz.Digest.Blake2b
+                    , Raaz.Digest.Blake2s
+                    , Raaz.Digest.Sha512
+                    , Raaz.Digest.Sha256
+                    , Raaz.Random.Internal
+
+  mixins:
+        --
+        -- Message digests
+        --
+          digest-api (Interface as Raaz.Digest.Blake2b)
+            requires (Implementation as Blake2b.Implementation)
+        , digest-api (Interface as Raaz.Digest.Blake2s)
+            requires (Implementation as Blake2s.Implementation)
+        , digest-api (Interface as Raaz.Digest.Sha512)
+            requires (Implementation as Sha512.Implementation)
+        , digest-api (Interface as Raaz.Digest.Sha256)
+            requires (Implementation as Sha256.Implementation)
+
+        --
+        -- Message Authentication
+        --
+        , mac-indef (Mac.Implementation as Blake2b.Mac.Implementation)
+            requires (Implementation as Blake2b.Implementation)
+        , mac-indef (Mac.Implementation as Blake2s.Mac.Implementation)
+            requires (Implementation as Blake2s.Implementation)
+
+        , auth-api (Interface as Raaz.Auth.Blake2b)
+             requires (Implementation as Blake2b.Mac.Implementation)
+        , auth-api (Interface as Raaz.Auth.Blake2s)
+             requires (Implementation as Blake2s.Mac.Implementation)
+
+
+        --
+        -- Encrypted authentication
+        --
+        , xchacha-indef requires (Implementation as ChaCha20.Implementation)
+        , aead-api (Interface as Raaz.AuthEncrypt.Unsafe.XChaCha20Poly1305)
+            requires ( Cipher.Implementation as XChaCha20.Implementation
+                     , Auth.Implementation as Poly1305.Implementation
+                     )
+
+        -- Using Chacha20
+        , aead-api (Interface as Raaz.AuthEncrypt.Unsafe.ChaCha20Poly1305)
+            requires ( Cipher.Implementation as ChaCha20.Implementation
+                     , Auth.Implementation as Poly1305.Implementation
+          )
+
+        --
+        -- Cryptographic randomness
+        --
+        , random-api (PRGenerator, Internal as Raaz.Random.Internal)
+             requires (Implementation as Random.Implementation)
+
+
+  reexported-modules: Raaz.Core
+                    , Raaz.Core.Types
+                    , Raaz.Core.Encode
+  autogen-modules: Paths_raaz
+  other-modules: Paths_raaz
+               -- Will be exposed when we hit V2.
+               --
+               , Raaz.V1.Auth
+               , Raaz.V1.Digest
+               , Raaz.V1.AuthEncrypt
+               , Raaz.V1.AuthEncrypt.Unsafe
+
+---------------------------- Executables -------------------------------------------------
+
+executable raaz
+  import: defaults
+  hs-source-dirs: raaz/bin
+  main-is: Main.hs
+  other-modules: Command.Rand
+               , Command.Info
+               , Command.Checksum
+               , Usage
+  build-depends: optparse-applicative >= 0.13.0.0
+               , core
+               , raaz
+  if impl(ghc < 8)
+    -- 'transformers' needed for "Control.Monad.IO.Class" only
+    -- starting with base-4.9 we don't need 'transformers' anymore
+    build-depends: transformers
+
+---------------------------------- Test suit -----------------------------------------------------
+common test-defaults
+  import: defaults
+  build-depends: core
+               , HUnit                          >= 1.2
+               , QuickCheck                     >= 2.4
+               , hspec
+
+library test-core
+  import: test-defaults
+  hs-source-dirs: tests/core
+  exposed-modules: Tests.Core
+                 , Tests.Core.Imports
+                 , Tests.Core.Instances
+                 , Tests.Core.Utils
+
+library test-cipher
+  import: test-defaults
+  hs-source-dirs: tests/cipher
+  build-depends: test-core
+               , encrypt-api
+  exposed-modules: Tests.Cipher
+
+library test-digest
+  import: test-defaults
+  hs-source-dirs: tests/message-digest
+  signatures: Implementation
+  build-depends: test-core
+               , indef
+               , digest-api
+  exposed-modules: Tests.Digest
+
+library test-auth
+  import: test-defaults
+  hs-source-dirs: tests/auth
+  signatures: Implementation
+  build-depends: test-core
+               , indef
+               , auth-api
+  exposed-modules: Tests.Auth
+
+
+library test-auth-implementation
+  import: test-defaults
+  hs-source-dirs: tests/auth/implementation
+  build-depends: test-core
+               , implementation
+               , mac-indef
+  mixins: mac-indef (Mac.Implementation as Blake2s.Mac.Implementation)
+            requires (Implementation as Blake2s.Implementation)
+        , mac-indef (Mac.Implementation as Blake2b.Mac.Implementation)
+            requires (Implementation as Blake2b.Implementation)
+
+  exposed-modules: Auth.Poly1305
+                 , Auth.Mac.Blake2s
+                 , Auth.Mac.Blake2b
+
+-------------------------- The test suits -------------------------
+
+test-suite tests
+  import: test-defaults
+  type: exitcode-stdio-1.0
+  hs-source-dirs: tests
+  main-is: Spec.hs
+  build-depends: hspec-discover
+               , attoparsec
+               , test-core
+               , test-cipher
+               , test-digest
+               , test-auth
+               , test-auth-implementation
+               , implementation
+               , xchacha-indef
+               , raaz
+  build-tool-depends: hspec-discover:hspec-discover
+  if !os(windows)
+    cpp-options: -DHAVE_DEV_NULL
+
+  other-modules: Raaz.Core.ByteSourceSpec
+               , Raaz.Core.EncodeSpec
+               , Raaz.Core.MemorySpec
+               , Raaz.Core.Types.WordSpec
+               , Raaz.Core.Util.ByteStringSpec
+               , Raaz.RandomSpec
+               , Raaz.Cipher.ChaCha20Spec
+               , Raaz.Cipher.XChaCha20Spec
+               , Raaz.Digest.Sha256Spec
+               , Raaz.Digest.Sha512Spec
+               , Raaz.Digest.Blake2Spec
+               , Raaz.Mac.Poly1305Spec
+               , Paths_raaz
+
+  mixins: test-cipher requires (Implementation as ChaCha20.Implementation)
+        , test-digest (Tests.Digest as Sha256.Digest)
+          requires (Implementation as Sha256.Implementation)
+
+        , test-digest (Tests.Digest as Sha512.Digest)
+          requires (Implementation as Sha512.Implementation)
+
+        , test-digest (Tests.Digest as Blake2b.Digest)
+          requires (Implementation as Blake2b.Implementation)
+
+        , test-digest (Tests.Digest as Blake2s.Digest)
+          requires (Implementation as Blake2s.Implementation)
+
+
+        , test-auth (Tests.Auth as Poly1305.Auth) requires (Implementation as Auth.Poly1305)
+
+        , test-auth (Tests.Auth as Blake2s.Auth)  requires (Implementation as Auth.Mac.Blake2s)
+        , test-auth (Tests.Auth as Blake2b.Auth)  requires (Implementation as Auth.Mac.Blake2b)
+
+        , xchacha-indef requires (Implementation as ChaCha20.Implementation)
+
+-- Testing Interfaces with all implementations.
+test-suite tests-comparative
+  import: test-defaults
+  type: exitcode-stdio-1.0
+  hs-source-dirs: tests/comparative
+  main-is: Main.hs
+  build-depends: implementation
+               , digest-api
+               , encrypt-api
+               , aead-api
+               , test-core
+
+  other-modules: Compare
+               , Digest
+               , Digest.Blake2bSpec
+               , Digest.Sha512Spec
+               , Digest.Sha256Spec
+               , Encrypt
+               , Encrypt.ChaCha20Spec
+               , AuthEncrypt
+               , AuthEncrypt.ChaCha20Poly1305Spec
+
+  mixins: digest-api (Interface as Digest.Blake2b.CHandWritten)
+            requires (Implementation as Blake2b.CHandWritten)
+        , digest-api (Interface as Digest.Blake2b.CPortable)
+            requires (Implementation as Blake2b.CPortable)
+
+        , digest-api (Interface as Digest.Sha512.CHandWritten)
+            requires (Implementation as Sha512.CHandWritten)
+        , digest-api (Interface as Digest.Sha512.CPortable)
+            requires (Implementation as Sha512.CPortable)
+
+        , digest-api (Interface as Digest.Sha256.CHandWritten)
+            requires (Implementation as Sha256.CHandWritten)
+        , digest-api (Interface as Digest.Sha256.CPortable)
+            requires (Implementation as Sha256.CPortable)
+
+        , encrypt-api (Interface as Encrypt.ChaCha20.CHandWritten)
+            requires (Implementation as ChaCha20.CHandWritten)
+        , encrypt-api (Interface as Encrypt.ChaCha20.CPortable)
+            requires (Implementation as ChaCha20.CPortable)
+
+        , aead-api (Interface as AuthEncrypt.ChaCha20Poly1305.CHandWritten)
+            requires ( Cipher.Implementation as ChaCha20.CHandWritten
+                     , Auth.Implementation as Poly1305.Implementation
+                     )
+
+        , aead-api (Interface as  AuthEncrypt.ChaCha20Poly1305.CPortable)
+            requires ( Cipher.Implementation as ChaCha20.CPortable
+                     , Auth.Implementation as Poly1305.Implementation
+                     )
+
+
+  build-tool-depends: hspec-discover:hspec-discover
+
+-- Test suits comparing with monocypher.
+test-suite monocypher
+  import: test-defaults
+  type: exitcode-stdio-1.0
+  main-is: Monocypher.hs
+  other-modules: Monocypher.Blake2bSpec
+               , Monocypher.Sha512Spec
+               , Monocypher.ChaCha20Spec
+  build-depends: raaz
+               , test-core
+               , xchacha-indef
+               , encrypt-api
+               , implementation
+  hs-source-dirs: monocypher/tests
+  c-sources: monocypher/monocypher-3.0.0/monocypher.c
+           , monocypher/monocypher-3.0.0/optional/monocypher-ed25519.c
+
+  include-dirs: monocypher/monocypher-3.0.0/
+              , monocypher/monocypher-3.0.0/optional
+
+  includes: monocypher/monocypher-3.0.0/optional/monocypher-ed25519.h
+          , monocypher/monocypher-3.0.0/monocypher.h
+  build-tool-depends: hspec-discover:hspec-discover
+  mixins: xchacha-indef requires (Implementation as ChaCha20.Implementation)
+        , encrypt-api (Interface as Raaz.Encrypt.ChaCha20)
+            requires (Implementation as ChaCha20.Implementation)
+
+        , encrypt-api (Interface as Raaz.Encrypt.XChaCha20)
+            requires (Implementation as XChaCha20.Implementation)
+
+
+--------------------------- Benchmarkings ---------------------------------------------
+common bench-defaults
+ import:defaults
+ hs-source-dirs: benchmarks/internal
+ build-depends:  criterion-measurement     >= 0.1
+               , pretty
+               , core
+
+library bench-types
+  import: bench-defaults
+  exposed-modules: Benchmark.Types
+
+library bench-prim
+  import: bench-defaults
+  build-depends: bench-types
+               , indef
+               , buffer
+  other-modules: Benchmark.Types
+  exposed-modules: Benchmark.Primitive
+
+library bench-csprg
+  import: bench-defaults
+  build-depends: bench-types
+               , buffer
+               , random-api
+  exposed-modules: Benchmark.CSPRG
+  other-modules: Benchmark.Types
+
+
+benchmark primitives
+  import: bench-defaults
+  hs-source-dirs: benchmarks
+  main-is: Main.hs
+  type: exitcode-stdio-1.0
+  build-depends: pretty
+               , core
+               , implementation
+               , bench-types
+               , bench-prim
+               , bench-csprg
+  other-modules: Benchmark.Types
+  mixins: bench-prim (Benchmark.Primitive as Benchmark.Blake2b.CPortable)
+          requires   (Implementation as Blake2b.CPortable)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.Blake2b.CHandWritten)
+          requires   (Implementation as Blake2b.CHandWritten)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.Blake2s.CHandWritten)
+          requires   (Implementation as Blake2s.CHandWritten)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.ChaCha20.CPortable)
+          requires   (Implementation as ChaCha20.CPortable)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.ChaCha20.CHandWritten)
+          requires   (Implementation as ChaCha20.CHandWritten)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.Poly1305.CPortable)
+          requires   (Implementation as Poly1305.CPortable)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.Sha256.CPortable)
+          requires   (Implementation as Sha256.CPortable)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.Sha256.CHandWritten)
+          requires   (Implementation as Sha256.CHandWritten)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.Sha512.CPortable)
+          requires (Implementation as Sha512.CPortable)
+
+        , bench-prim (Benchmark.Primitive as Benchmark.Sha512.CHandWritten)
+          requires (Implementation as Sha512.CHandWritten)
+
+        , bench-csprg (Benchmark.CSPRG as Benchmark.CSPRG.CPortable)
+          requires (Implementation as ChaCha20.Random.CPortable)
diff --git a/raaz/Raaz.hs b/raaz/Raaz.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz.hs
@@ -0,0 +1,147 @@
+-- |
+--
+-- Module      : Raaz
+-- Description : High level, type safe, cryptographic library
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz
+       (
+         -- * Getting started
+         -- $intro$
+
+
+         -- * Supported Cryptographic operations
+         -- $operations$
+         --
+         module Raaz.Digest
+       , module Raaz.Auth
+       , module Raaz.AuthEncrypt
+       , module Raaz.Random
+         -- ** Textual and Binary representation
+         -- $textual$
+       , module Raaz.Core.Encode
+         -- ** Core types and operations of raaz
+       , Key, Nounce, withMemory, withSecureMemory
+         -- * Library information.
+       , version
+       ) where
+
+import qualified Paths_raaz as P
+import           Data.Version  (Version)
+
+import Raaz.Core        ( Key, Nounce, withMemory, withSecureMemory)
+import Raaz.Core.Encode
+import Raaz.Digest
+import Raaz.Auth
+import Raaz.AuthEncrypt
+import Raaz.Random
+
+
+
+-- $intro$
+--
+-- Raaz is a cryptographic library that provides an easy to use, type
+-- safe interface for cryptographic applications. Applications can get
+-- their cryptography wrong and this can have disastrous consequences.
+-- This can be due to the wrong choices of the underlying
+-- cryptographic primitives, or due to ignoring certain implementation
+-- details (reusing the key, nounce pair). To prevent this kind of
+-- issues, raaz, like other modern libraries, give a very high level
+-- interface with the library taking the responsibility of selecting
+-- sane primitives and their correct usages. The recommended usage
+-- there is to import the top level module and get going.
+--
+-- > module Main where
+-- >
+-- > import Raaz
+-- >
+--
+-- In addition, raaz makes use of the type system of Haskell to give
+-- additional guarantees:
+--
+-- [Type safety:] Instead of representing cryptographic data as plain
+-- strings, raaz uses distinct types for semantically distinct
+-- cryptographic data. If the user inadvertently compares a
+-- 'Raaz.Sha512.Sha512' digest with a `Raaz.Blake2b.Blake2b` digest,
+-- the compiler will flag this as an error. Compare this with the
+-- situation in many libraries where both these are just 512-bit
+-- quantities.
+--
+-- [Timing safe equality:] All cryptographically sensitive data have
+-- timing safe equality operation `==`. The default comparison is
+-- therefore safe and we encourage its use. Compare this with many
+-- other libraries where one has to remember to use specific functions
+-- sanitised timing safe comparisons.
+--
+-- [Locked memory:] The interface to locked memory is provided through
+-- the combinators `withMemory` and `withSecureMemory`. These
+-- combinators take any IO action that expects a memory element
+-- (captured by the class `Memory`) and runs it by providing such an
+-- element. The underlying memory buffer is zeroed at the end of the
+-- action. In addition, `withSecureMeory` ensures that the memory
+-- allocated for the memory element is locked (and hence not swapped
+-- out). This gives a relatively higher level interface for locked
+-- memory. A word of caution though. Interfaces that directly deal
+-- with memory elements should be considered low-level code and should
+-- better be left to advanced users. Furthermore certain usages,
+-- particularly those that involve reading pure values out of the
+-- memory element, are problematic and a lot of caution needs to be
+-- employed when using this interface.
+--
+
+
+-- $operations$
+--
+-- The raaz library provides the following cryptographic operations.
+--
+-- [Message Digest:] Compute a short summary of a message that can act
+-- as an integrity check for the message. A computationally bound
+-- adversary cannot create two distinct messages with the same
+-- digest. It /does not/ ensure authentication.
+--
+-- [Message Authentication:] In addition to integrity, we often want
+-- to ensure that a particular message has indeed come from a know
+-- peer (with whom we share a secret). Message authentication is for
+-- this purpose. It however, does not ensure privacy
+--
+-- [Message Locking:] In addition to authentication, often we want to
+-- ensure that the message is private, i.e. no one other than the
+-- originator (with whom we share a secret) should be able to know the
+-- contents of our communication. Message lock (via authenticated encryption)
+-- is for this purpose.
+--
+-- [Cryptographically secure random data:] We also have an interface to
+-- provide cryptographically secure bytes/data.
+--
+-- For detailed information on the api supported, please consult the
+-- documentation of the individual modules.
+
+
+-- $textual$
+--
+-- Many cryptographic types exposed from this library like hashes,
+-- message authentication, keys and nounces can be converted from/to
+-- their textual representation (via the `Show`, `IsString` instances)
+-- as well as binary representation (via their `Encodable` instance).
+--
+-- == WARNING: textual/binary encoding are not type safe
+--
+-- A user of the raaz library should use the explicit data types
+-- instead of their encodings. There are a few security consequences
+-- of violating this principle
+--
+-- 1. The `IsString` instance means that we represent values as string
+--    within program source (via OverloadedStrings). Do not do this unless
+--    it is to write unit tests as this can result in runtime bugs.
+--
+-- 2. Timing safe comparison will get compromised if one compares the
+--    encodings (bytestring) instead of the types themselves
+
+
+
+-- | Raaz library version number.
+version :: Version
+version = P.version
diff --git a/raaz/Raaz/Auth.hs b/raaz/Raaz/Auth.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/Auth.hs
@@ -0,0 +1,135 @@
+-- |
+-- Module      : Raaz.Auth
+-- Description : Message authentication
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.Auth
+       ( -- ** Message authentication.
+         --
+         -- $messageauth$
+         --
+         Auth
+       , auth
+       , authFile
+       , authSource
+
+         -- ** Incremental processing.
+         -- $incremental$
+       , AuthCxt
+       , startAuth, updateAuth, finaliseAuth
+
+         --
+         -- *** Specific message authentication algorithms
+         -- $specific-auth$
+         --
+       ) where
+
+import GHC.TypeLits
+import Raaz.Core
+
+
+import qualified Raaz.V1.Auth as Auth
+
+-- $messageauth$
+--
+-- Given a message @M@ the message authenticator computed using the
+-- key @K@ is a short summary @S@ of @M@ with the additional property
+-- that it is cryptographically hard to compute @S@ if the key @K@ is
+-- unknown. In fact some thing stronger is true: Even when the
+-- adversary knows a set of messages @M₁,...,Mₙ@ and their
+-- authenticators @S₁,...Sₙ@, all of which was created using the key
+-- @K@, she cannot construct a message @M@ different from @M₁,...,Mₙ@
+-- and its authenticator @S@ without knowing the key @K@.
+--
+-- In addition to proving /integrity/, the authenticator @s@ proves
+-- the /authenticity/ of the message @m@ --- if one knows the secret
+-- @K@, on successful verification of the authenticator, one can be
+-- convinced that the message could only have originated from a peer
+-- who knows @K@.
+--
+-- == Warning
+--
+-- Message authentication __does not__ provide secrecy of the message,
+-- use encrypted authenticator instead "Raaz.AuthEncrypt".
+--
+
+
+-- | The type of authentication tag.
+type Auth  = Auth.Auth
+
+-- | Compute the authenticator of a pure byte source like,
+-- `B.ByteString`.
+auth :: PureByteSource src
+     => Key Auth
+     -> src  -- ^ Message
+     -> Auth
+auth = Auth.auth
+
+-- | Compute the authenticator for a file.
+authFile :: Key Auth
+         -> FilePath  -- ^ File to be authed
+         -> IO Auth
+authFile = Auth.authFile
+
+-- | Compute the authenticator of an arbitrary byte source.
+authSource :: ByteSource src
+           => Key Auth
+           -> src
+           -> IO Auth
+authSource = Auth.authSource
+
+-- $incremental$
+--
+-- Message authenticator can also be computed incrementally using a
+-- authenticator context captured by the `AuthCxt` data type. The
+-- three functions relevant for this style of operation are
+-- `startAuth`, `updateAuth`, and `finaliseAuth` which respectively
+-- prepares the context for a new incremental processing, updates the
+-- context with an additional chunk of data, and finalises the context
+-- to recover the digest. The type `AuthCxt` is an instance of the
+-- class `Memory` and hence any IO action that requires a `AuthCxt` as
+-- argument can be run using the `withMemory` combinator.
+--
+-- If the entire input is with you either as a file or a string, the
+-- `auth` and `authFile` is a much more high level interface and
+-- should be preferred.
+
+-- | The authentication context for incremental computation of auth
+-- tag.
+
+type AuthCxt = Auth.AuthCxt
+
+-- | Prepare the context to (re)start a session of incremental
+-- processing.
+startAuth :: KnownNat n
+          => Key Auth   -- ^ The key to be used
+          -> AuthCxt n
+          -> IO ()
+startAuth = Auth.startAuth
+
+-- | Add some more data into the context, in this case the entirety of
+-- the byte source src.
+updateAuth :: (KnownNat n, ByteSource src)
+           => src
+           -> AuthCxt n
+           -> IO ()
+updateAuth = Auth.updateAuth
+
+-- | Finalise the context to get hold of the digest.
+finaliseAuth :: KnownNat n
+             => AuthCxt n
+             -> IO Auth
+finaliseAuth = Auth.finaliseAuth
+
+
+-- $specific-auth$
+--
+-- If interoperability with other applications demands the use of a
+-- specific primitive for message authentication, you can use one of
+-- these more specific modules.
+--
+-- * Raaz.Auth.Blake2b
+-- * Raaz.Auth.Blake2s
diff --git a/raaz/Raaz/AuthEncrypt.hs b/raaz/Raaz/AuthEncrypt.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/AuthEncrypt.hs
@@ -0,0 +1,109 @@
+-- |
+-- Module      : Raaz.AuthEncrypt
+-- Description : Authenticated encryption
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.AuthEncrypt ( -- * Authenticated encryption
+                          --
+                          -- $locking$
+                          lock, unlock
+                          -- ** Locking with additional data
+                          -- $aead$
+                        , lockWith, unlockWith
+                        , Locked, Cipher
+                        ) where
+
+import Raaz.V1.AuthEncrypt
+
+-- $locking$
+--
+-- Suppose that Alice wants to send a private message to Bob that
+-- should not be seen by anyone else. Alice can use their shared
+-- secret key @K@ to encrypt the message, which Bob decrypts when he
+-- receives it. The secrecy of the key @K@ ensures that a third party
+-- Eve will not be able to read what Alice sends. However, it is
+-- possible for Eve to forge message and pretend that it has
+-- originated from Alice. Consider a string @R@ that Bob receives
+-- purportedly from Alice. Since stream ciphers encrypt message @M@ by
+-- xoring it with the keystream @KS@ generated using the key @K@, from
+-- Bob's point of view it is impossible to know whether it was some
+-- nonsense that Eve sent or whether it was from Alice who wanted to
+-- actually send the message @R ⊕ KS@. In many situations, Eve can
+-- exploit this ability to fake communication and breach the security
+-- of the protocol. Authenticated encryption is to solve this issue.
+--
+-- == Authenticated encryption via message locking
+--
+-- To send a message @m@ using a key @k@, Alice computes the locked
+-- variant using the function `lock`. At Bobs end, he can unlock this
+-- locked message using the function `unlock`. If there has been any
+-- tampering of message on the way from A to B, the unlocking will
+-- fail. It is computationally infeasible to decrypt or fake the
+-- authentication without knowing the key. Sometimes the protocol
+-- requires additional authenticated data. The `lockWith` and the
+-- `unlockWith` variants are used for this purpose.
+--
+-- == Key reuse.
+--
+-- Authenticated encryption needs, not just a key, but also a
+-- nounce. Under the hood, both `lock` and `lockWith` uses randomly
+-- generated nounce for each invocation (hence the result is an @IO@
+-- type). This ensures that the key-nounce pair is never reused. The
+-- nounce is packed together with the cipher text and tag so that at
+-- the receiving end, the packet can be unlocked. It is therefore safe
+-- to lock multiple messages with the same key.
+
+-- $aead$
+--
+-- Some protocols have additional data that needs to be factored in
+-- when sending the locked packet. In such situations one can use the
+-- `lockWith` and `unlockWith` variants.
+
+
+-- $security$
+--
+-- __WARNING:__ The security of the interface is compromised if
+--
+-- 1. The key gets revealed to the attacker or
+--
+-- 2. In the case of the unsafe versions (`unsafeLock` and
+--    `unsafeLockWith`) which uses explicit nounce, if the same
+--    key/nounce pair is used to lock two different messages.
+--
+-- Nounces need not be private and may be exposed to the attacker. In
+-- fact, we pack the nounce with the locked message to make recovery
+-- at the receiving end simple.
+
+-- $specific$
+--
+-- The library exposes the following two authenticated encryption algorithm
+--
+-- * Raaz.AuthEncrypt.ChaCha20Poly1305
+-- * Raaz.AuthEncrypt.XChaCha20Poly1305
+--
+-- of which the latter (XChaCha20Poly1305) is used by default. Both of
+-- these modules only provide the unsafe version. In the case of the
+-- former (ChaCha20Poly1305), the nounce is a bit too small (96-bits)
+-- and random generation has a nontrivial chance of collison. It is
+-- however, slightly faster and is safe to use when there is frequent
+-- key resets as in the case of network protocols. As with other cases
+-- we recommend the use of the default interface instead of the
+-- specific one when ever possible.
+
+
+
+-- $takingapart$
+--
+-- Values belonging to the `Locked` and `AEAD` types are meant to be
+-- used as opaque objects. While unlocking these types, we do not
+-- decrypt untill the tag is verified. This helps in quickly rejecting
+-- fake packets without wasting time on decryption and improves the
+-- security against DoS attacks. Taking apart the cipher text and the
+-- authentication token can lead to incorrect handling and hence is
+-- __not__ recommended in general. Nonetheless, when implementing
+-- protocols that use AEAD, we might want to build and take apart
+-- these types. We give now give functions for these unsafe operations
+-- on AEAD packets.
diff --git a/raaz/Raaz/AuthEncrypt/Unsafe.hs b/raaz/Raaz/AuthEncrypt/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/AuthEncrypt/Unsafe.hs
@@ -0,0 +1,51 @@
+-- |
+-- Module      : Raaz.AuthEncrypt.Unsafe
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.AuthEncrypt.Unsafe
+       ( -- * Auth Encryption with Explicit Nounce
+         -- $unsafe$
+         -- ** Specific variants
+         -- $specific$
+         module Raaz.V1.AuthEncrypt.Unsafe
+       ) where
+
+import Raaz.V1.AuthEncrypt.Unsafe
+
+-- $unsafe$
+--
+-- __WARNING:__ The security of the interface is compromised if
+--
+-- 1. The key gets revealed to the attacker or
+--
+-- 2. If the same key/nounce pair is used to lock two different
+--    messages.
+--
+-- 3. Taking apart the AEAD token also compromises the type safety.
+--
+-- Why then do we provide these functions ? As long as you are using
+-- the raaz library exclusively, you do not need to use this unsafe
+-- function. These are only needed when working with other libraries
+-- and protocols which have a different nonunce selection policy
+-- and/or a different encoding scheme for the AEAD token.
+--
+-- Nounces need not be private and may be exposed to the attacker. In
+-- fact, in the safe version of these locking function, we pick the
+-- nounce at random (using the csprg) and pack it into the AEAD token.
+
+-- $specific$
+--
+-- For specific algorithms, the unsafe version is also available
+--
+-- * Raaz.AuthEncrypt.Unsafe.ChaCha20Poly1305
+-- * Raaz.AuthEncrypt.Unsafe.XChaCha20Poly1305
+--
+-- The former has a smaller nounce (96-bits) than the latter
+-- (192-bits) and hence there is a slight risk in using it with
+-- randomly generated nounces. It is however, slightly faster and is
+-- safe to use when there is frequent key resets as in the case of
+-- network protocols. As with other cases we recommend the use of the
+-- default interface instead of the specific one when ever possible.
diff --git a/raaz/Raaz/Digest.hs b/raaz/Raaz/Digest.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/Digest.hs
@@ -0,0 +1,166 @@
+-- |
+-- Module      : Raaz.Digest
+-- Description : Message digest.
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+
+module Raaz.Digest
+       (
+         -- ** Message digest.
+         --
+         -- $messagedigest$
+
+         Digest, digest, digestFile, digestSource
+
+         -- ** Incremental processing.
+         -- $incremental$
+       , DigestCxt
+       , startDigest, updateDigest, finaliseDigest
+         --
+         -- *** Specific message digests.
+         -- $specific-digest$
+       ) where
+
+import GHC.TypeLits
+import Raaz.Core
+
+import qualified Raaz.V1.Digest as Digest
+
+-- $messagedigest$
+--
+-- A message digest is a short (fixed size) summary of a long message
+-- which is cryptographically secure against tampering. Use a message
+-- digest if all you care about is integrity: If @d@ is the digest of
+-- a message @m@, then a computationally bound adversary cannot
+-- produce another message @m'@ for which the digest is also
+-- @d@.
+--
+-- Here is a simple application for computing and verifying the digest
+-- of a file.
+--
+--
+-- > -- Program to compute the message digest of a file
+-- >
+-- > import Raaz
+-- > import System.Environment
+-- >
+-- > main = getArgs >>= digestFile . head >>= print
+-- >
+--
+-- > -- Program to verify the integrity of a file
+-- >
+-- > import Raaz
+-- > import System.Environment
+-- >
+-- > main = do [d,file] <- getArgs
+-- >           dp       <- digestFile file
+-- >           if fromString d == dp
+-- >              then putStrLn "OK"
+-- >              else putStrLn "FAILED"
+-- >
+--
+-- There are three variants for computing the digest of a
+-- message. `digest`, `digestFile` and `digestSource`.
+--
+-- == Warning
+--
+-- Message digests __DO NOT__ provide any authentication; any one
+-- could have compute the digest of a given message `m` and hence says
+-- nothing about the peer from whom the digest has been received. If
+-- you want some guarantee on who the digest came from consider using
+-- a message authenticator (see "Raaz.Auth"). In addition if you also
+-- want secrecy consider using encrypted authenticator (see
+-- "Raaz.AuthEncrypt")
+
+
+-- $incremental$
+--
+-- Message digest can also be computed incrementally using a digest
+-- context captured by the `DigestCxt` data type. The three functions
+-- relevant for this style of operation are `startDigest`,
+-- `updateDigest`, and `finaliseDigest` which respectively prepares
+-- the context for a new incremental processing, updates the context
+-- with an additional chunk of data, and finalises the context to
+-- recover the digest. The type `DigestCxt` is an instance of the
+-- class `Memory` and hence any IO action that requires a `DigestCxt`
+-- as argument can be run using `withMemory`.
+--
+-- If the entire input is with you either as a file or a string, the
+-- `digest` and `digestFile` is a much more high level interface and
+-- should be preferred.
+
+
+-- $specific-digest$
+--
+-- To inter-operate with other libraries and applications, one might
+-- want to compute the digest using specific cryptographic hash. In
+-- such a situation, import one of the more specific module instead of
+-- this one.
+--
+-- * Raaz.Digest.Blake2b
+-- * Raaz.Digest.Blake2s
+-- * Raaz.Digest.Sha512
+-- * Raaz.Digest.Sha256
+--
+-- Here is an example that uses sha512 to compute the digest.
+--
+-- > import Raaz.Digest.Sha512
+-- > import System.Environment
+-- >
+-- > main = getArgs >>= digestFile . head >>= print
+-- >
+
+-- | The digest type.
+type Digest = Digest.Digest
+
+-- | The context type used for incremental processing of
+-- input. Incremental processing first collects data into the context
+-- and when the context buffer is full, processes it in one go using
+-- the digest compression routine.  parameter @n@ measures how many
+-- blocks of data can be held in the context till the compression
+-- routine is invoked.
+type DigestCxt n  = Digest.DigestCxt n
+
+-- | Compute the digest of a pure byte source like `B.ByteString`.
+digest :: PureByteSource src
+       => src  -- ^ Message
+       -> Digest
+digest = Digest.digest
+
+-- | Compute the digest of file.
+digestFile :: FilePath  -- ^ File to be digested
+           -> IO Digest
+digestFile = Digest.digestFile
+
+
+-- | Compute the digest of an arbitrary byte source.
+digestSource :: ByteSource src
+             => src
+             -> IO Digest
+
+digestSource = Digest.digestSource
+
+-- | Prepare the context to (re)start a session of incremental
+-- processing.
+startDigest :: KnownNat n
+            => DigestCxt n
+            -> IO ()
+startDigest = Digest.startDigest
+
+
+-- | Add some more data into the context, in this case the entirety of
+-- the byte source src.
+updateDigest :: (KnownNat n, ByteSource src)
+             => src
+             -> DigestCxt n
+             -> IO ()
+updateDigest = Digest.updateDigest
+
+-- | Finalise the context to get hold of the digest.
+finaliseDigest :: KnownNat n
+               => DigestCxt n
+               -> IO Digest
+finaliseDigest = Digest.finaliseDigest
diff --git a/raaz/Raaz/Random.hs b/raaz/Raaz/Random.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/Random.hs
@@ -0,0 +1,372 @@
+{-# LANGUAGE MultiParamTypeClasses      #-}
+{-# LANGUAGE FlexibleInstances          #-}
+{-# LANGUAGE DefaultSignatures          #-}
+{-# LANGUAGE RecordWildCards            #-}
+
+-- |
+--
+-- Module      : Raaz.Random
+-- Description : Cryptographically secure pseudo random generator.
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.Random
+       ( -- * Cryptographically secure randomness.
+         -- $randomness$
+         RandomState
+       , withRandomState
+       , randomByteString
+       , Random(..)
+       -- ** Generating sensitive data
+       -- $securerandom$
+       , randomiseMemory
+       , withRandomisedMemory
+       , withSecureRandomisedMemory
+       , withSecureRandomState
+         -- ** Low level code
+       , fillRandomBytes
+       , RandomStorable(..)
+       , fillRandom
+       , unsafeFillRandomElements
+       , reseed
+       -- * Information
+       , entropySource
+       , csprgName, csprgDescription
+       ) where
+
+import Control.Applicative
+import Control.Monad
+import Data.ByteString             ( ByteString             )
+import Data.Int
+import Data.Vector.Unboxed         ( Unbox )
+import Data.Word
+
+import Foreign.Ptr      ( castPtr )
+import Foreign.Storable ( Storable         )
+import Prelude
+
+
+import           Raaz.Core
+import           Raaz.Core.Memory( Access(..) )
+import           PRGenerator ( entropySource, csprgName, csprgDescription, RandomState
+                             , fillRandomBytes
+                             , reseed
+                             )
+import qualified Raaz.Primitive.ChaCha20.Internal as ChaCha20
+import qualified Raaz.Primitive.Poly1305.Internal as Poly1305
+import           Raaz.Primitive.Keyed.Internal ( Keyed )
+import           Raaz.Verse.Poly1305.C.Portable   ( verse_poly1305_c_portable_clamp)
+
+-- $randomness$
+--
+-- This module provides cryptographically secure pseudo-random
+-- bytes. The state of the csprg is kept track in the memory element
+-- `RandomState` and /should/ be run using `withRandomState`.
+--
+
+-- $securerandom$
+--
+-- Sensitive data like long term asymmetric keys need to be handled
+-- with care as they may be inadvertently leaked into permanent
+-- storage when memory is swapped out. Most of the time such keys are
+-- generated using cryptographically pseudo-random bytes. However, a
+-- direct approach, namely using `random`, to generate them hides a
+-- subtle bug. For example the code below is unsafe.
+--
+-- >
+-- > -- WARNING: Not safe from swapping
+-- > main     :: withSecureRandomState myAction
+-- > myAction ::  MySecretMem -> RandomState -> IO ()
+-- > myAction mySecMem rstate = do secret <- random rstate
+-- >                                 -- the pure value secret is in
+-- >                                 -- the haskell heap and therefore
+-- >                                 -- escapes locking
+-- >                               initialise secret mysecmem
+-- >                               doSomething
+--
+-- The `random` interface gives a pure Haskell value and is stored in
+-- the Haskell heap. Although memory locking is often available on
+-- modern operating systems, it is impossible to lock this value as
+-- the garbage collector keeps moving values around.
+--
+-- How can we work around this problem ? The intention of the
+-- programmer when using the above code was to randomise the contents
+-- of the mySecMem memory element. We recommend converting the above
+-- code to the following
+--
+-- >
+-- > main = withSecureRandomisedMemory action
+-- > myAction ::  MySecretMem -> RandomState -> IO ()
+-- > myAction mySecMem rstate = do randomiseMemory mySecMem
+-- >                               doSomething
+--
+-- The above code, though correct, is fragile as missing out on the
+-- randomiseMemory call can jeopardise the safety of the code. Often
+-- the randomisation is required only at the beginning of the task and
+-- in this case it is better to use the safer alternative
+-- `withSecureRandomisedMemory`
+
+-- | Subclass of `Storable` which can be randomly generated. It might
+-- appear that all instances of the class `Storable` should be
+-- be instances of this class, after all we know the size of the
+-- element, why not write that many random bytes. In fact, this module
+-- provides an `unsafeFillRandomElements` which does that. However, we
+-- do not give a blanket definition for all storables because for
+-- certain refinements of a given type, like for example, Word8's
+-- modulo 10, `unsafeFillRandomElements` introduces unacceptable
+-- skews.
+class Storable a => RandomStorable a where
+  -- | Fill the buffer with so many random elements of type a.
+  fillRandomElements :: Int       -- ^ number of elements to fill
+                     -> Ptr a     -- ^ The buffer to fill
+                     -> RandomState
+                     -> IO ()
+
+-- | Fill the given generalised pointer buffer with random elements.
+fillRandom :: (RandomStorable a, Pointer ptr)
+           => Int
+           -> ptr a
+           -> RandomState
+           -> IO ()
+fillRandom n ptr rstate = unsafeWithPointer (\ rawPtr -> fillRandomElements n rawPtr rstate) ptr
+
+{-
+
+mem -> IO a
+
+randomiseMemory -> (mem,RandomState) -> IO ()
+
+withSecureMemory (randomiseMemory action)
+
+-}
+
+
+-- | Execute an action that takes the CSPRG state.
+withRandomState :: (RandomState -> IO a) -- ^ The action that requires csprg state.
+                -> IO a
+withRandomState action = withMemory actionP
+  where actionP rstate = do reseed rstate
+                            action rstate
+
+-- | Execute an action that takes a memory element and random state
+-- such that all the memory allocated for both of them is locked.
+withSecureRandomState :: Memory mem
+                      => (mem -> RandomState -> IO a) -- ^ The action that requires random state
+                      -> IO a
+withSecureRandomState action = withSecureMemory actionP
+  where actionP (mem,rstate) = do reseed rstate
+                                  action mem rstate
+
+-- | Randomise the contents of an accessible memory.
+randomiseMemory :: WriteAccessible mem => mem -> RandomState -> IO ()
+randomiseMemory mem rstate = mapM_ randomise $ writeAccess mem
+  where randomise Access{..} = fillRandomBytes accessSize (destination accessPtr) rstate
+
+-- | Run a memory action which is passed a memory cell whose contents
+-- are randomised with cryptographically secure pseudo-random bytes.
+withRandomisedMemory :: WriteAccessible mem
+                     => (mem -> IO a) -- ^ memory action
+                     -> IO a
+withRandomisedMemory action = withMemory actionP
+  where actionP (mem,rstate) = do
+          reseed rstate
+          randomiseMemory mem rstate
+          action mem
+
+-- | Similar to `withRandomisedMemory` but all memory allocation is
+-- locked. Use this when the randomised content is to be protected
+-- from swapping.
+withSecureRandomisedMemory :: WriteAccessible mem
+                           => (mem -> IO a) -- ^ memory action
+                           -> IO a
+withSecureRandomisedMemory action = withSecureRandomState actionP
+  where actionP mem rstate = do randomiseMemory mem rstate
+                                action mem
+
+
+-- TOTHINK:
+-- -------
+--
+-- Do we want to give a default definition like
+--
+-- > fillRandomElements = unsafeFillRandomElements
+--
+-- This will make the instance definitions easier for the Storables
+-- types that is spread over its entire range. However, it would lead
+-- to a lazy definition which will compromise the quality of the
+-- randomness.
+
+
+-- | This is a helper function that has been exported to simplify the
+-- definition of a `RandomStorable` instance for `Storable`
+-- types. However, there is a reason why we do not give a blanket
+-- instance for all instances of the `Storable` class and why this
+-- function is unsafe. This function generates a random element of
+-- type @a@ by generating @n@ random bytes where @n@ is the size of
+-- the elements of @a@. For instances that range the entire @n@ byte
+-- space this is fine. However, if the type is actually a refinement
+-- of such a type, (consider a @`Word8`@ modulo @10@ for example) this
+-- function might generate unacceptable skew in the
+-- distribution. Hence this function is prefixed unsafe.
+unsafeFillRandomElements :: Storable a  => Int -> Ptr a -> RandomState -> IO ()
+unsafeFillRandomElements n ptr = fillRandomBytes totalSz $ destination $ castPtr ptr
+  where totalSz = fromIntegral n * sizeOf (getProxy ptr)
+        getProxy :: Ptr a -> Proxy a
+        getProxy = const Proxy
+
+
+-- | Generate a random byteString.
+
+randomByteString ::LengthUnit l
+                 => l
+                 -> RandomState
+                 -> IO ByteString
+randomByteString l rstate = create l genBS
+  where genBS ptr = fillRandomBytes l (destination ptr) rstate
+
+------------------------------- Some instances of Random ------------------------
+
+instance RandomStorable Word8 where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Word16 where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Word32 where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Word64 where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Word where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Int8 where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Int16 where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Int32 where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Int64 where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable Int where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable (Key ChaCha20.ChaCha20) where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable (Nounce ChaCha20.ChaCha20) where
+  fillRandomElements = unsafeFillRandomElements
+
+
+instance RandomStorable (Key ChaCha20.XChaCha20) where
+  fillRandomElements = unsafeFillRandomElements
+
+instance RandomStorable (Nounce ChaCha20.XChaCha20) where
+  fillRandomElements = unsafeFillRandomElements
+
+
+instance RandomStorable Poly1305.R where
+  fillRandomElements n ptr state = unsafeFillRandomElements n ptr state >> clamp
+    where clamp = verse_poly1305_c_portable_clamp (castPtr ptr) (toEnum n)
+
+instance RandomStorable w => RandomStorable (LE w) where
+  fillRandomElements n = fillRandomElements n . lePtrToPtr
+    where lePtrToPtr :: Ptr (LE w) -> Ptr w
+          lePtrToPtr = castPtr
+
+instance RandomStorable w => RandomStorable (BE w) where
+  fillRandomElements n = fillRandomElements n . bePtrToPtr
+    where bePtrToPtr :: Ptr (BE w) -> Ptr w
+          bePtrToPtr = castPtr
+
+instance (Dimension d, Unbox w, RandomStorable w) => RandomStorable (Tuple d w) where
+  fillRandomElements n ptr = fillRandomElements (n * sz ptr) $ tupPtrToPtr ptr
+    where sz   :: Dimension d => Ptr (Tuple d w) -> Int
+          sz   = dimension' . getProxy
+          getProxy :: Ptr (Tuple d w) -> Proxy (Tuple d w)
+          getProxy = const Proxy
+          tupPtrToPtr ::  Ptr (Tuple d w) -> Ptr w
+          tupPtrToPtr = castPtr
+
+
+--------------------------------- Generating elements randomly ----------------------------
+
+-- | Elements that can be randomly generated.
+class Random a where
+  random :: RandomState -> IO a
+
+  default random :: RandomStorable a => RandomState -> IO a
+  random state = go
+    where go =   allocaBuffer (alignedSizeOf $ getProxy go) getIt
+          getIt ptr  = fillRandomElements 1 (nextLocation ptr) state >> peekAligned ptr
+          getProxy   :: IO a -> Proxy a
+          getProxy   = const Proxy
+
+
+instance (Random a, Random b) => Random (a,b) where
+  random state = (,)
+                 <$> random state
+                 <*> random state
+instance (Random a, Random b, Random c) => Random (a,b,c) where
+  random state = (,,)
+                 <$> random state
+                 <*> random state
+                 <*> random state
+
+
+instance (Random a, Random b, Random c, Random d) => Random (a,b,c,d) where
+  random state = (,,,)
+                 <$> random state
+                 <*> random state
+                 <*> random state
+                 <*> random state
+
+
+instance (Random a, Random b, Random c, Random d, Random e) => Random (a,b,c,d,e) where
+  random state = (,,,,)
+                 <$> random state
+                 <*> random state
+                 <*> random state
+                 <*> random state
+                 <*> random state
+
+instance Random Word8
+instance Random Word16
+instance Random Word32
+instance Random Word64
+instance Random Int8
+instance Random Int16
+instance Random Int32
+instance Random Int64
+
+instance Random (Key ChaCha20.ChaCha20) where
+instance Random (Nounce ChaCha20.ChaCha20) where
+
+instance Random (Key ChaCha20.XChaCha20) where
+instance Random (Nounce ChaCha20.XChaCha20) where
+
+instance Storable prim => Random (Key (Keyed prim))  where
+  random state = randKY
+    where randKY   = unsafeFromByteString <$> randomByteString sz state
+          sz         = sizeOf $ getProxy randKY
+          getProxy :: IO (Key (Keyed p)) -> Proxy p
+          getProxy _ = Proxy
+
+instance Random Poly1305.R where
+
+instance Random w => Random (LE w) where
+  random state = littleEndian <$> random state
+
+instance Random w => Random (BE w) where
+  random state = bigEndian <$> random state
+
+
+instance (Dimension d, Unbox w, Random w) => Random (Tuple d w) where
+  random state = generateIO (random state)
diff --git a/raaz/Raaz/V1/Auth.hs b/raaz/Raaz/V1/Auth.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/V1/Auth.hs
@@ -0,0 +1,10 @@
+-- | The interface is the same as that of "Raaz.Auth" but the
+-- primitive selection corresponds to the version 1 of the raaz
+-- library. Use this module if you want compatibility with Version 1
+-- of the library.
+--
+-- For documentation refer the module "Raaz.Auth".
+
+module Raaz.V1.Auth ( module Raaz.Auth.Blake2b
+                    ) where
+import Raaz.Auth.Blake2b
diff --git a/raaz/Raaz/V1/AuthEncrypt.hs b/raaz/Raaz/V1/AuthEncrypt.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/V1/AuthEncrypt.hs
@@ -0,0 +1,89 @@
+-- |
+-- Module      : Raaz.V1.AuthEncrypt
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.V1.AuthEncrypt
+  ( -- * Encrypted authentication from V1
+    --
+    -- The interface is the same as that of "Raaz.AuthEncrypt" but with the
+    -- primitive selection corresponding to the version 1 of the raaz
+    -- library. Use this module if you want compatibility with Version 1
+    -- of the library.
+    --
+    -- For documentation refer the module "Raaz.AuthEncrypt".
+    lock, unlock
+  , lockWith, unlockWith
+  , Locked, Cipher
+  ) where
+
+import           Raaz.Core
+import           Raaz.Random                        (random, withRandomState)
+import qualified Raaz.AuthEncrypt.Unsafe.XChaCha20Poly1305 as AE
+import           Raaz.V1.AuthEncrypt.Unsafe
+
+-- | This function locks a plain text message together with and
+-- additional authenticated data to produce an AEAD token. A peer
+-- who has the right @key@ and the additional authenticated data can
+-- recover the unencrypted object using the `unlockWith` function.
+--
+-- Unlike `unsafeLockWith`, this function does not require a nounce as
+-- internally a random nounce is generated and used each time. As a
+-- result we do not put any restriction on the key used; it is safe
+-- to use the same key multiple times.
+
+lockWith :: (Encodable plain, Encodable aad)
+         => aad              -- ^ the authenticated additional data.
+         -> Key Cipher       -- ^ The key
+         -> plain            -- ^ the unencrypted object
+         -> IO Locked
+lockWith aad key plain =
+  withRandomState $ \ rstate -> do
+  nounce <- random rstate
+  return $ unsafeLockWith aad key nounce plain
+
+-- | Unlock an encrypted authenticated version of the data given the
+-- additional data, key, and nounce. An attempt to unlock the element
+-- can result in `Nothing` if either of the following is true.
+--
+-- 1. The key/nounce used to encrypt the data is different
+--
+-- 2. The Authenticated additional data (@aad@) is incorrect
+--
+-- 3. The cipher text is of the wrong type and hence the
+--    `fromByteString` failed
+--
+-- 4. The Locked message has been tampered with by the adversary
+--
+-- The interface provided does not indicate which of the above
+-- failures had happened. This is a deliberate design as revealing the
+-- nature of the failure can leak information to a potential attacker.
+--
+unlockWith :: (Encodable plain, Encodable aad)
+           => aad              -- ^ the authenticated additional data.
+           -> Key Cipher       -- ^ The key for the stream cipher
+           -> Locked          -- ^ The message to unlock
+           -> Maybe plain
+unlockWith = AE.unlockWith
+
+
+-- | Generate a locked version of an unencrypted object. You will need
+-- the exact same key to `unlock` the object. Unlike `unsafelock`,
+-- this function does not require a nounce as internally a random
+-- nounce is generated and used each time. Because of this, it is safe
+-- to use the same key multiple times.
+lock :: Encodable plain
+     => Key Cipher        -- ^ The key
+     -> plain             -- ^ The object to be locked.
+     -> IO Locked
+lock = lockWith ()
+
+-- | Unlock the locked version of an object. You will need the exact
+-- same key that was used to lock the object.
+unlock :: Encodable plain
+       => Key Cipher   -- ^ The key
+       -> Locked       -- ^ Locked object that needs unlocking
+       -> Maybe plain
+unlock = AE.unlock
diff --git a/raaz/Raaz/V1/AuthEncrypt/Unsafe.hs b/raaz/Raaz/V1/AuthEncrypt/Unsafe.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/V1/AuthEncrypt/Unsafe.hs
@@ -0,0 +1,72 @@
+-- |
+-- Module      : Raaz.AuthEncrypt.Unsafe
+-- Copyright   : (c) Piyush P Kurur, 2016
+-- License     : Apache-2.0 OR BSD-3-Clause
+-- Maintainer  : Piyush P Kurur <ppk@iitpkd.ac.in>
+-- Stability   : experimental
+--
+module Raaz.V1.AuthEncrypt.Unsafe
+       ( Locked
+       , unsafeLock, unsafeLockWith
+       , Cipher, AuthTag
+       , unsafeToCipherText, unsafeToAuthTag
+       , unsafeLocked
+       ) where
+
+import           Data.ByteString
+import           Raaz.Core
+import qualified Raaz.AuthEncrypt.Unsafe.XChaCha20Poly1305 as AE
+import           Raaz.AuthEncrypt.Unsafe.XChaCha20Poly1305 ( Locked, Cipher, AuthTag
+                                                           )
+
+-- | Similar to `lockWith` but an explicit nounce is taken as
+-- input. Reusing the key-nounce pair will compromise the security and
+-- hence using this function is unsafe. The user needs to ensure the
+-- freshness of the key, nounce pair through some other means.
+--
+-- Some protocols have a predefined way to pick nounces and this is
+-- the reason, we provide such an interface. If that is not a concern,
+-- we recommend the use of `lockWith` instead.
+unsafeLockWith :: ( Encodable plain, Encodable aad)
+               => aad
+               -> Key Cipher
+               -> Nounce Cipher
+               -> plain
+               -> Locked
+unsafeLockWith = AE.unsafeLockWith
+
+-- | Locks a given message but needs an explicit nounce. Reusing the
+-- key-nounce pair will compromise the security and hence using this
+-- function is unsafe. The user needs to ensure the freshness of the
+-- key, nounce pair through some other means.
+--
+-- Some protocols have a predefined way to pick nounces and this is
+-- the reason we provide such an interface. If that is not a concern,
+-- we recommend the use of `lock` instead.
+unsafeLock :: Encodable plain
+           => Key Cipher        -- ^ The key
+           -> Nounce Cipher     -- ^ The nounce
+           -> plain             -- ^ The object to be locked.
+           -> Locked
+unsafeLock = AE.unsafeLock
+
+
+
+
+-- | Get the cipher text part of the Locked message.
+unsafeToCipherText :: Locked
+                   -> ByteString
+unsafeToCipherText = AE.unsafeToCipherText
+
+-- | Get the authentication token of the Locked message.
+unsafeToAuthTag :: Locked -> AE.AuthTag
+unsafeToAuthTag = AE.unsafeToAuthTag
+
+
+-- | Construct the locked message out of the nounce, cipher text, and the
+-- authentication tag.
+unsafeLocked :: Nounce Cipher  -- ^ The nounce used for locking this message
+             -> ByteString     -- ^ The cipher text
+             -> AE.AuthTag     -- ^ the Authentication tag
+             -> Locked
+unsafeLocked = AE.unsafeLocked
diff --git a/raaz/Raaz/V1/Digest.hs b/raaz/Raaz/V1/Digest.hs
new file mode 100644
--- /dev/null
+++ b/raaz/Raaz/V1/Digest.hs
@@ -0,0 +1,11 @@
+-- | The interface is the same as that of "Raaz.Digest" but the primitive
+-- selection corresponds to the version 1 of the raaz library. Use
+-- this module if you want compatibility with Version 1 of the
+-- library.
+--
+-- For documentation refer to the module "Raaz.Digest".
+
+module Raaz.V1.Digest (
+   module Raaz.Digest.Blake2b
+  ) where
+import Raaz.Digest.Blake2b
diff --git a/raaz/bin/Command/Checksum.hs b/raaz/bin/Command/Checksum.hs
new file mode 100644
--- /dev/null
+++ b/raaz/bin/Command/Checksum.hs
@@ -0,0 +1,149 @@
+{-# LANGUAGE RecordWildCards    #-}
+
+
+module Command.Checksum ( checksum )  where
+
+import Options.Applicative
+import Prelude
+import System.Exit
+import Raaz
+import Raaz.Core
+
+
+
+------------------------- Supported checksum algorithm -------------------------------
+
+-- You can add new hash algorithms by adding a constructor for the
+-- GADT, Algorithm h. You should also enable the command by adding a mkCmd line in the checksum
+
+
+checksum :: Parser (IO ())
+checksum = subparser $ mconcat [ commandGroup "File checksum"
+                               , metavar "DIGEST"
+                               , command "checksum" inf
+                               ]
+  where inf = info (helper <*> opts) $ mconcat [ fullDesc, desc]
+        opts     = run <$> optParse
+        desc     = progDesc "compute/verify file checksums using the message digest algorithm of raaz"
+
+
+------------------------ Types and constriants -------------------------------------
+
+
+
+
+data Option = Option { checkChecksum :: Bool -- ^ true if we need verification.
+                     , reportOkey    :: Bool -- ^ whether to print success
+                     , reportFailure :: Bool -- ^ whether to print failure
+                     , inputFiles    :: [FilePath]
+                     }
+
+--------------------- The checksum type ----------------------------------------
+
+data Checksum = Checksum {filePath :: FilePath, fileChecksum  :: Digest}
+
+
+instance Show Checksum where
+  show Checksum{..} = show fileChecksum ++ "  " ++ filePath
+
+parse :: String -> Checksum
+parse inp = Checksum { filePath   = drop 2 rest
+                     , fileChecksum = fromString dgst
+                     }
+  where (dgst, rest) = break (==' ') inp -- break at the space.
+
+-- | Parse the lines into checksum.
+parseMany :: String -> [Checksum]
+parseMany = map parse . lines
+
+---------- The main combinators that does the actual work -------------
+
+-- | The workhorse for this command.
+run :: Option -> IO ()
+run opt@Option{..}
+  | checkChecksum = runVerify opt
+  | otherwise     = runCompute inputFiles
+
+
+--------------------------- Compute mode ---------------------------------------
+
+runCompute :: [FilePath]     -- files for which checksums need to be computed.
+           -> IO ()
+runCompute files
+  | null files = computeStdin >>= print  -- No files means compute it for stdin.
+  | otherwise  = mapM_ printToken files  -- Print the token for each file.
+  where printToken = compute >=> print
+
+
+
+-- | Compute the checksum of a file.
+compute :: FilePath     -- ^ The file to compute the token for.
+        -> IO Checksum
+compute fp = Checksum fp <$> digestFile fp
+
+
+-- | Compute the checksum of standard input
+computeStdin :: IO Checksum
+computeStdin = Checksum "-" <$> digestSource stdin
+
+----------------------------------- Verify Mode ---------------------------------------
+
+runVerify :: Option -> IO ()
+runVerify opt@Option{..} = do
+  nFails <- if null inputFiles then getContents >>= verifyLines
+            else sum <$> mapM verifyFile inputFiles
+
+  when reportFailure $ putStrLn $ show nFails ++ " failures."
+  when (nFails > 0)  exitFailure
+  where
+    verifyLines     = verifyList opt . parseMany
+    verifyFile fp   = withFile fp ReadMode $ hGetContents  >=> verifyLines
+
+
+verify :: Option
+       -> Checksum
+       -> IO Bool
+verify Option{..} Checksum{..} = do
+  dgst <- digestFile filePath
+  let result = dgst == fileChecksum
+      okey   = when reportOkey    $ putStrLn $ filePath ++ ": OK"
+      failed = when reportFailure $ putStrLn $ filePath ++ ": FAILED"
+    in do if result then okey else failed
+          return result
+
+verifyList :: Option
+           -> [Checksum]
+           -> IO Int
+verifyList opt   = fmap countFailures . mapM (verify opt)
+  where countFailures = Prelude.length . filter not
+
+
+----------------------------- Option parsers ----------------------------------
+
+optParse   :: Parser Option
+optParse  =  verbosityOpt <*> (Option <$> checkOpt <*> pure True <*> pure True <*> files)
+
+  where checkOpt = switch
+                   $ mconcat [ long "check"
+                             , short 'c'
+                             , help "Verify the input checksums instead of compute"
+                             ]
+        files = many $ argument str $ metavar "FILE.."
+
+
+verbosityOpt :: Parser (Option -> Option)
+verbosityOpt = (.) <$> statusOpt <*> quietOpt
+  where statusOnly opt = opt { reportOkey = False, reportFailure = False }
+        quietMode  opt = opt { reportOkey = False }
+
+        statusOpt = flag id statusOnly
+                    $ mconcat [ short 's'
+                              , long  "status"
+                              , help "Do not print anything, only return the verification status"
+                              ]
+
+        quietOpt  = flag id quietMode
+                    $ mconcat [ short 'q'
+                              , long "quite"
+                              , help "Do not print OK, print only failures"
+                              ]
diff --git a/raaz/bin/Command/Info.hs b/raaz/bin/Command/Info.hs
new file mode 100644
--- /dev/null
+++ b/raaz/bin/Command/Info.hs
@@ -0,0 +1,78 @@
+module Command.Info where
+
+import           Data.Version (showVersion)
+import           Options.Applicative
+import           Prelude
+import           Raaz
+import qualified Raaz.Core.CpuSupports as CpuSupports
+import qualified Raaz.Auth.Blake2b
+import qualified Raaz.Auth.Blake2s
+import qualified Raaz.Digest.Blake2b
+import qualified Raaz.Digest.Blake2s
+import qualified Raaz.Digest.Sha512
+import qualified Raaz.Digest.Sha256
+
+
+
+information :: Parser (IO ())
+
+information = subparser $ mconcat [ commandGroup "Information"
+                                  , metavar "INFORMATION"
+                                  , infoCmd
+                                  ]
+
+  where infoCmd = command "info" $ info (helper <*> opts)
+                  $ mconcat [ fullDesc
+                            , header "raaz info - Print the library information"
+                            , progDesc "prints information about raaz library."
+                            ]
+
+        opts = pure $ sequence_ [ field "Library Version" $ showVersion version
+                                , field "Entropy" entropySource
+                                , field "CSPRG"  csprgName
+                                , implementationInfo
+                                , cpuCapabilities
+                                ]
+
+
+
+field   :: String -> String -> IO ()
+field title v = putStrLn $ title ++ ": " ++ v
+section :: String -> [String] -> IO ()
+section title lns = do
+  putStrLn $ title ++ ":"
+  mapM_ indent lns
+  where indent = putStrLn . (++) "    "
+
+implementationInfo :: IO ()
+implementationInfo = section "Implementation Info" $ map unwords
+  [ [ "auth (blake2b):", Raaz.Auth.Blake2b.name]
+  , [ "auth (blake2s):", Raaz.Auth.Blake2s.name]
+  , [ "blake2b:", Raaz.Digest.Blake2b.name ]
+  , [ "blake2s:", Raaz.Digest.Blake2s.name ]
+  , [ "sha512:", Raaz.Digest.Sha512.name ]
+  , [ "sha256:", Raaz.Digest.Sha256.name ]
+  ]
+
+
+cpuCapabilities :: IO ()
+cpuCapabilities = do sse    <- CpuSupports.sse
+                     sse2   <- CpuSupports.sse2
+                     sse3   <- CpuSupports.sse3
+                     sse4_1 <- CpuSupports.sse4_1
+                     sse4_2 <- CpuSupports.sse4_2
+                     avx    <- CpuSupports.avx
+                     avx2   <- CpuSupports.avx2
+                     let caps  = [ (sse, "sse")
+                                 , (sse2, "sse2")
+                                 , (sse3, "sse3")
+                                 , (sse4_1, "sse4.1")
+                                 , (sse4_2, "sse4.2")
+                                 , (avx,    "avx")
+                                 , (avx2,   "avx2")
+                                 ]
+                         w     = maximum $ map (length . snd) caps
+                         pad x = x ++ replicate (w - length x + 3) ' '
+                         display (True, c) = unwords [pad c, "- supported"]
+                         display (_,c)     = unwords [pad c, "- cannot detect"]
+                       in section "CPU capabilities" $  map display caps
diff --git a/raaz/bin/Command/Rand.hs b/raaz/bin/Command/Rand.hs
new file mode 100644
--- /dev/null
+++ b/raaz/bin/Command/Rand.hs
@@ -0,0 +1,105 @@
+-- This command spits out never ending stream of cryptographically
+-- secure bytes. Apart from replacing Yo-Yo Honey Singh (`raaz rand >
+-- /dev/audio), it is used to test the quality of the randomnes
+-- produced.
+
+module Command.Rand ( rand ) where
+
+
+import Options.Applicative
+import Raaz.Core
+import Raaz.Random
+import Raaz.Random.Internal
+
+
+-- So much bytes generated in one go before writing to stdout.
+
+bufSize :: BYTES Int
+bufSize = 32 * 1024
+
+
+rand :: Parser (IO ())
+rand = subparser $ mconcat [ commandGroup "Randomness"
+                           , metavar "RANDOMNESS"
+                           , randCmd
+                           , entropyCmd
+                           ]
+
+
+
+randCmd :: Mod CommandFields (IO ())
+randCmd = command "rand"
+          $ info (helper <*> randOpts)
+          $ mconcat [ fullDesc
+                    , header "raaz rand - Cryptographically secure pseudo random bytes."
+                    , progDesc "output cryptographically secure pseudo random bytes."
+                    ]
+  where randOpts = opts infiniteRand finiteRand
+
+entropyCmd :: Mod CommandFields (IO ())
+entropyCmd = command "entropy"
+             $ info (helper <*> entropyOpts)
+             $ mconcat [ fullDesc
+                       , header "raaz entropy - System entropy."
+                       , progDesc "emit data from the system entropy pool."
+                       ]
+  where entropyOpts = opts infiniteEntropy finiteEntropy
+
+opts :: (Ptr Word8 -> IO ())
+     -> (BYTES Int -> Ptr Word8 -> IO ())
+     -> Parser (IO ())
+opts inf fin  = nRandomBytes . toEnum <$> argument auto (metavar "NUMBER_OF_BYTES")
+                <|> pure infinteBytes
+  where nRandomBytes n = withBuffer (fin n)
+        infinteBytes   = withBuffer inf
+        withBuffer     = allocaBuffer bufSize
+
+
+
+------------- Rand functions ----------------------------------------------
+
+emitRand :: BYTES Int
+         -> Ptr Word8
+         -> RandomState
+         -> IO ()
+emitRand m ptr rstate = do
+  fillRandomBytes m (destination ptr) rstate
+  hPutBuf stdout ptr $ fromIntegral m
+
+infiniteRand :: Ptr Word8
+             -> IO ()
+infiniteRand buf = withRandomState goForEver
+  where goForEver rstate = go
+          where go = emitRand bufSize buf rstate >> go
+
+finiteRand :: BYTES Int
+           -> Ptr Word8
+           -> IO ()
+finiteRand n buf = withRandomState goFinite
+  where goFinite rstate = go n
+          where go m | m >= bufSize = do emitRand bufSize buf rstate ; go (m - bufSize)
+                     | otherwise    =    emitRand m buf rstate
+
+
+
+-----------------  Entropy functions ------------------------------------------
+
+emitEntropy :: BYTES Int
+            -> Ptr Word8
+            -> IO ()
+emitEntropy m ptr = do
+  void $ fillSystemEntropy m ptr
+  hPutBuf stdout ptr $ fromIntegral m
+
+
+infiniteEntropy ::  Ptr Word8
+                -> IO ()
+infiniteEntropy buf = go
+  where go = emitEntropy bufSize buf >> go
+
+finiteEntropy:: BYTES Int
+             -> Ptr Word8
+             -> IO ()
+finiteEntropy n buf = go n
+  where go m | m >= bufSize = do emitEntropy bufSize buf ; go (m - bufSize)
+             | otherwise    =    emitEntropy m buf
diff --git a/raaz/bin/Main.hs b/raaz/bin/Main.hs
new file mode 100644
--- /dev/null
+++ b/raaz/bin/Main.hs
@@ -0,0 +1,41 @@
+--
+-- The main function that drives other commands.
+--
+
+import Data.Version          (showVersion)
+import Options.Applicative
+import Prelude
+import Raaz                  (version)
+
+import           Command.Checksum
+import           Command.Info
+import           Command.Rand
+
+
+data Option = ShowVersion
+             | RunCommand (IO ())
+
+progOption  :: Parser Option
+progOption = flag ShowVersion ShowVersion versionMods
+             <|> RunCommand <$> rand
+             <|> RunCommand <$> checksum
+             <|> RunCommand <$> information
+
+  where versionMods = mconcat [ short 'v'
+                              , long "version"
+                              , help "Print the version of the raaz library used"
+                              ]
+
+---------------------- The main function and stuff ------------------------------
+run :: Option -> IO ()
+run ShowVersion      = putStrLn $ "raaz version " ++ showVersion version
+run (RunCommand cmd) = cmd
+
+
+main :: IO ()
+main = execParser opts >>= run
+  where opts = info (helper <*> progOption)
+               $ mconcat [ fullDesc
+                         , header "raaz - A command line interface to the raaz cryptographic library."
+                         , footer "Homepage: http://github.com/raaz-crypto"
+                         ]
diff --git a/raaz/bin/Usage.hs b/raaz/bin/Usage.hs
new file mode 100644
--- /dev/null
+++ b/raaz/bin/Usage.hs
@@ -0,0 +1,26 @@
+module Usage( usage, errorBailout ) where
+
+import Prelude
+import System.Console.GetOpt
+import System.IO
+import System.Exit
+
+-- | The usage message for the program.
+usage :: [OptDescr a]  -- ^ options
+      -> String        -- ^ Header
+      -> [String]      -- ^ errors
+      -> String
+usage options header errs
+  | null errs = usageInfo header options
+  | otherwise = "raaz: " ++ unlines errs ++ usageInfo header options
+
+
+
+-- | Bail out on error
+errorBailout :: [OptDescr a] -- ^ Options
+             -> String       -- ^ Header
+             -> [String]     -- ^ Errors
+             -> IO b
+errorBailout opts str errs = do
+  hPutStrLn stderr $ usage opts str errs
+  exitFailure
diff --git a/spec/Common.hs b/spec/Common.hs
deleted file mode 100644
--- a/spec/Common.hs
+++ /dev/null
@@ -1,6 +0,0 @@
--- Common stuff need by all test modules
-module Common (module E) where
-
-import Common.Imports        as E
-import Common.Instances      ()
-import Common.Utils          as E
diff --git a/spec/Common/Cipher.hs b/spec/Common/Cipher.hs
deleted file mode 100644
--- a/spec/Common/Cipher.hs
+++ /dev/null
@@ -1,111 +0,0 @@
-{-# LANGUAGE FlexibleContexts #-}
-module Common.Cipher where
-
-import Raaz.Core.Transfer
-import Common.Imports
-import Common.Utils
-
-
-encryptVsDecrypt :: ( Arbitrary (Key c)
-                    , Show (Key c)
-                    , Cipher c, Recommendation c
-                    )
-                 => c -> Spec
-encryptVsDecrypt c = encryptVsDecrypt' c $ recommended c
-
-encryptVsDecrypt' :: ( Arbitrary (Key c)
-                     , Show (Key c)
-                     , Cipher c
-                     )
-                     => c -> Implementation c -> Spec
-
-encryptVsDecrypt' c imp = describe "decrypt . encrypt" $ do
-  it "trivial on strings of a length that is a multiple of the block size"
-    $ property $ forAll genKeyStr prop_EvsD
-  where genKeyStr = (,) <$> arbitrary <*> blocks c
-        prop_EvsD (k,bs) = unsafeDecrypt' c imp k (unsafeEncrypt' c imp k bs) == bs
-
-encryptsTo :: (Cipher c, Recommendation c, Format fmt1, Format fmt2)
-           => c
-           -> fmt1
-           -> fmt2
-           -> Key c
-           -> Spec
-
-crossCheck :: ( Arbitrary (Key c)
-              , Show (Key c)
-              , Cipher c
-              , Recommendation c
-              )
-              => c -> Implementation c -> Spec
-crossCheck c impl = describe mesg $ do
-  it "encryption" $ property $ forAll genKeyStr prop_Enc
-  it "decryption" $ property $ forAll genKeyStr prop_Dec
-  where mesg      = unwords ["cross check with ", name reco , "(recommended implementation)" ]
-        reco      = recommended c
-        genKeyStr = (,) <$> arbitrary <*> blocks c
-        prop_Enc (k,bs) = unsafeEncrypt' c reco k bs == unsafeEncrypt' c impl k bs
-        prop_Dec (k,bs) = unsafeDecrypt' c reco k bs == unsafeDecrypt' c impl k bs
-
-
-encryptsTo c = encryptsTo' c $ recommended c
-
-encryptsTo' :: (Cipher c, Format fmt1, Format fmt2)
-            => c
-            -> Implementation c
-            -> fmt1
-            -> fmt2
-            -> Key c
-            -> Spec
-encryptsTo' c imp inp expected key
-  = it msg $ result `shouldBe` (decodeFormat expected)
-  where result = unsafeEncrypt' c imp key $ decodeFormat inp
-        msg   = unwords [ "encrypts"
-                        , shortened $ show inp
-                        , "to"
-                        , shortened $ show expected
-                        ]
-
-transformsTo :: (StreamCipher c, Recommendation c, Format fmt1, Format fmt2)
-              => c
-              -> fmt1
-              -> fmt2
-              -> Key c
-              -> Spec
-transformsTo c = transformsTo' c $ recommended c
-
-
-keyStreamIs' :: (StreamCipher c, Format fmt)
-             => c
-             -> Implementation c
-             -> fmt
-             -> Key c
-             -> Spec
-keyStreamIs' c impl expected key = it msg $ result `shouldBe` decodeFormat expected
-  where result = transform' c impl key $ zeros $ 1 `blocksOf` c
-        msg    = unwords ["with key"
-                         , "key stream is"
-                         , shortened $ show expected
-                         ]
-
-zeros :: Primitive prim => BLOCKS prim -> ByteString
-zeros = toByteString . writeZero
-  where writeZero :: LengthUnit u => u -> WriteIO
-        writeZero = writeBytes 0
-
-transformsTo' :: (StreamCipher c, Format fmt1, Format fmt2)
-              => c
-              -> Implementation c
-              -> fmt1
-              -> fmt2
-              -> Key c
-              -> Spec
-
-transformsTo' c impl inp expected key
-  = it msg $ result `shouldBe` (decodeFormat expected)
-  where result = transform' c impl key $ decodeFormat inp
-        msg   = unwords [ "encrypts"
-                        , shortened $ show inp
-                        , "to"
-                        , shortened $ show expected
-                        ]
diff --git a/spec/Common/Hash.hs b/spec/Common/Hash.hs
deleted file mode 100644
--- a/spec/Common/Hash.hs
+++ /dev/null
@@ -1,39 +0,0 @@
--- Generic tests for hash.
-
-module Common.Hash
-       ( hashesTo
-       , hmacsTo
-       ) where
-
-import Common.Imports  hiding (replicate)
-import Common.Utils
-
---
--- For unit tests for hash we have the following idiom
---
--- using sha1 [ hashing x1 shouldGive y1, hashing x2 shouldGive y2]
--- where y1 is the hexadecimal encoding of the hash of x2.
---
-
-hashesTo :: (Hash h, Recommendation h, Encodable h, Show h)
-         => ByteString
-         -> h
-         -> Spec
-hashesTo str h = it msg (hash str `shouldBe` h)
-  where msg   = unwords [ "hashes"
-                        , shortened $ show str
-                        , "to"
-                        , shortened $ show h
-                        ]
-
-hmacsTo :: ( Hash h, Recommendation h, Show h)
-        => ByteString
-        -> HMAC h
-        -> Key (HMAC h)
-        -> Spec
-hmacsTo str hm key = it mesg $ hmac key str `shouldBe` hm
-  where mesg       = unwords [ "with key", shortened $ show key
-                             ,  shortened $ show str
-                             ,  "hmacs to"
-                             ,  shortened $ show hm
-                             ]
diff --git a/spec/Common/Imports.hs b/spec/Common/Imports.hs
deleted file mode 100644
--- a/spec/Common/Imports.hs
+++ /dev/null
@@ -1,20 +0,0 @@
--- Common imports.
-module Common.Imports( module E ) where
-import Control.Applicative     as E
-import Data.ByteString         as E (ByteString, pack)
-import Data.ByteString.Char8        () -- import IsString instance for
-                                       -- byte string.
-import Data.String             as E
-import Data.Monoid             as E
-import Data.Word               as E
-import Foreign.Storable        as E (Storable, peek, poke)
-import Test.Hspec              as E
-import Test.Hspec.QuickCheck   as E
-import Test.QuickCheck         as E
-import Test.QuickCheck.Monadic as E
-
-import Raaz.Core               as E hiding ((===), Result)
-import Raaz.Hash               as E
-import Raaz.Hash.Sha1          as E
-import Raaz.Cipher             as E
-import Raaz.Cipher.Internal    as E ( unsafeEncrypt', unsafeDecrypt', transform' )
diff --git a/spec/Common/Instances.hs b/spec/Common/Instances.hs
deleted file mode 100644
--- a/spec/Common/Instances.hs
+++ /dev/null
@@ -1,92 +0,0 @@
-{-# LANGUAGE CPP                  #-}
-{-# LANGUAGE DataKinds            #-}
-{-# LANGUAGE TypeSynonymInstances #-}
-{-# LANGUAGE FlexibleInstances    #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-
--- | Some common instances that are required by the test cases.
-module Common.Instances where
-
-import Common.Imports
-import Common.Utils
-import Raaz.Cipher.AES as AES
-import Raaz.Cipher.ChaCha20 as ChaCha20
-
-
-instance Arbitrary w => Arbitrary (LE w) where
-  arbitrary = littleEndian <$> arbitrary
-
-instance Arbitrary w => Arbitrary (BE w) where
-  arbitrary = bigEndian <$> arbitrary
-
-instance Arbitrary w => Arbitrary (BYTES w) where
-  arbitrary = BYTES <$> arbitrary
-
-
-instance Arbitrary w => Arbitrary (BITS w) where
-  arbitrary = BITS <$> arbitrary
-
-instance Arbitrary ALIGN where
-  arbitrary = toEnum <$> arbitrary
-
-instance Arbitrary ByteString where
-  arbitrary = pack <$> arbitrary
-
-
----------------   Arbitrary instances for Hashes ----------------
-
-instance Arbitrary SHA1 where
-  arbitrary = genEncodable
-
-instance Arbitrary SHA224 where
-  arbitrary = genEncodable
-
-instance Arbitrary SHA256 where
-  arbitrary = genEncodable
-
-instance Arbitrary SHA512 where
-  arbitrary = genEncodable
-
-instance Arbitrary SHA384 where
-  arbitrary = genEncodable
-
-instance Arbitrary BLAKE2b where
-  arbitrary = genEncodable
-
-instance Arbitrary BLAKE2s where
-  arbitrary = genEncodable
-
----------------- Parameter block for Blake          -------------
-
----------------- Arbitrary instaces of encoded data --------------
-
-instance Arbitrary Base16 where
-  arbitrary =  (encodeByteString . pack) <$> listOf arbitrary
-
-instance Arbitrary Base64 where
-  arbitrary =  (encodeByteString . pack) <$> listOf arbitrary
-
------------------- Arbitrary instances for Keys ---------------
-
-instance Arbitrary AES.KEY128 where
-  arbitrary = genEncodable
-
-instance Arbitrary AES.KEY192 where
-  arbitrary = genEncodable
-
-instance Arbitrary AES.KEY256 where
-  arbitrary = genEncodable
-
-instance Arbitrary AES.IV where
-  arbitrary = genEncodable
-
-instance Arbitrary ChaCha20.KEY where
-  arbitrary = genEncodable
-
-instance Arbitrary ChaCha20.IV where
-  arbitrary = genEncodable
-
-instance Arbitrary ChaCha20.Counter where
-  arbitrary = le32ToCtr <$> arbitrary
-    where le32ToCtr :: LE Word32 -> Counter
-          le32ToCtr = fromIntegral
diff --git a/spec/Common/Utils.hs b/spec/Common/Utils.hs
deleted file mode 100644
--- a/spec/Common/Utils.hs
+++ /dev/null
@@ -1,85 +0,0 @@
-{-# LANGUAGE CPP #-}
-module Common.Utils where
-
-import Common.Imports hiding (length, replicate)
-
-import Foreign.Ptr           ( castPtr, Ptr    )
-import Data.ByteString as B  (concat)
-
--- | Run a spec with a give key.
-with :: key -> (key -> Spec) -> Spec
-with key hmsto = hmsto key
-
-
--- | Store and the load the given value.
-storeAndThenLoad :: EndianStore a
-                 => a -> IO a
-storeAndThenLoad a = allocaBuffer (sizeOf a) (runStoreLoad . castPtr)
-  where runStoreLoad ptr = store ptr a >> load ptr
-
-
-allocCast      :: BYTES Int -> (Ptr a -> IO c) -> IO c
-allocCast sz f = allocaBuffer sz $ f . castPtr
-
-storeAdjustAndPeek :: EndianStore a
-                   => a
-                   -> IO a
-storeAdjustAndPeek a
-  = allocCast sz $ \ ptr -> do store ptr a
-                               adjustEndian ptr 1
-                               peek ptr
-  where sz = sizeOf a
-
-pokeAdjustAndLoad :: EndianStore a
-                   => a
-                   -> IO a
-pokeAdjustAndLoad a
-  = allocCast sz $ \ ptr -> do poke ptr a
-                               adjustEndian ptr 1
-                               load ptr
-  where sz = sizeOf a
-
-
-
-basicEndianSpecs :: ( EndianStore a, Show a, Eq a, Arbitrary a)
-                  => a -> Spec
-basicEndianSpecs a = do
-  prop "store followed by load returns original value" $ \ x ->
-    storeAndThenLoad (x `asTypeOf` a) `shouldReturn` x
-
-  prop "store, adjust followed by peek should return the original value" $ \ x ->
-    storeAdjustAndPeek (x `asTypeOf` a) `shouldReturn` x
-
-  prop "poke, adjust followed by load should return the original value" $ \ x ->
-    pokeAdjustAndLoad (x `asTypeOf` a) `shouldReturn` x
-
-
-
--- | Shorten a string to make it readable in tests.
-shortened :: String -> String
-shortened x | l <= 11    = paddedx
-            | otherwise  = prefix ++ "..." ++ suffix
-  where l = length x
-        prefix = take  4 x
-        suffix = drop (l - 4) x
-        paddedx = x ++ replicate (11 - l) ' '
-
-genEncodable :: (Encodable a, Storable a) => Gen a
-genEncodable = go undefined
-  where go :: (Encodable a, Storable a) => a -> Gen a
-        go x = unsafeFromByteString . pack <$> vector (fromEnum $ sizeOf x)
-
--- | Generate bytestrings that are multiples of block size of a
--- primitive.
-blocks :: Primitive prim => prim -> Gen ByteString
-blocks prim = B.concat <$> listOf singleBlock
-  where singleBlock = pack <$> vector sz
-        BYTES sz    = blockSize prim
-
-
--- | Run a property with a given generator.
-feed :: (Testable pr, Show a) => Gen a -> (a -> IO pr) -> Property
-feed gen pr = monadicIO $ pick gen >>= (run . pr)
-
-repeated :: Monoid m => m -> Int -> m
-repeated m n = mconcat $ replicate n m
diff --git a/spec/Raaz/Cipher/AESSpec.hs b/spec/Raaz/Cipher/AESSpec.hs
deleted file mode 100644
--- a/spec/Raaz/Cipher/AESSpec.hs
+++ /dev/null
@@ -1,154 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE OverloadedStrings    #-}
-{-# LANGUAGE ScopedTypeVariables  #-}
-{-# LANGUAGE DataKinds            #-}
-
-module Raaz.Cipher.AESSpec where
-
-import           Common
-import qualified Common.Cipher as C
-import Raaz.Cipher.AES
-import Raaz.Cipher.Internal
-
-spec :: Spec
-spec =  do describe "128bit CBC" $ aes128cbcSpec
-           describe "192bit CBC" $ aes192cbcSpec
-           describe "256bit CBC" $ aes256cbcSpec
-
------------------ AES 128 CBC ------------------------------
-
-aes128cbcSpec :: Spec
-aes128cbcSpec = do
-  C.encryptVsDecrypt aes128cbc
-
-  with ( "06a9214036b8a15b512e03d534120006"
-       , "3dafba429d9eb430b422da802c9fac41")
-    $ ("Single block msg" :: ByteString)
-    `encryptsTo` ("e353779c1079aeb82708942dbe77181a" :: Base16)
-
-  with ( "c286696d887c9aa0611bbb3e2025a45a"
-       , "562e17996d093d28ddb3ba695a2e6f58")$
-       ( "000102030405060708090a0b0c0d0e0f" <>
-         "101112131415161718191a1b1c1d1e1f" :: Base16)
-       `encryptsTo`
-       ( "d296cd94c2cccf8a3a863028b5e1dc0a" <>
-         "7586602d253cfff91b8266bea6d61ab1" ::Base16)
-
-
-  with ( "6c3ea0477630ce21a2ce334aa746c2cd"
-       , "c782dc4c098c66cbd9cd27d825682c81" )$
-       ( "This is a 48-byte message (exactly 3 AES blocks)" :: ByteString)
-       `encryptsTo`
-       ( "d0a02b3836451753d493665d33f0e886" <>
-         "2dea54cdb293abc7506939276772f8d5" <>
-         "021c19216bad525c8579695d83ba2684" :: Base16
-       )
-
-  with ( "56e47a38c5598974bc46903dba290349"
-       , "8ce82eefbea0da3c44699ed7db51b7d9" ) $
-       ( "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf" <>
-         "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf" <>
-         "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf" <>
-         "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf" :: Base16 )
-       `encryptsTo`
-       ( "c30e32ffedc0774e6aff6af0869f71aa" <>
-         "0f3af07a9a31a9c684db207eb0ef8e4e" <>
-         "35907aa632c3ffdf868bb7b29d3d46ad" <>
-         "83ce9f9a102ee99d49a53e87f4c3da55" :: Base16
-       )
-
-  with ( "2b7e151628aed2a6abf7158809cf4f3c"
-       , "000102030405060708090a0b0c0d0e0f") $
-       ( "6bc1bee22e409f96e93d7e117393172a" :: Base16 )
-       `encryptsTo`
-       ( "7649abac8119b246cee98e9b12e9197d" :: Base16 )
-
-  with ( "2b7e151628aed2a6abf7158809cf4f3c"
-       , "7649abac8119b246cee98e9b12e9197d") $
-       ( "ae2d8a571e03ac9c9eb76fac45af8e51" :: Base16 )
-       `encryptsTo`
-       ( "5086cb9b507219ee95db113a917678b2" :: Base16 )
-
-  with ( "2b7e151628aed2a6abf7158809cf4f3c"
-       , "5086cb9b507219ee95db113a917678b2") $
-       ( "30c81c46a35ce411e5fbc1191a0a52ef" :: Base16 )
-       `encryptsTo`
-       ( "73bed6b8e3c1743b7116e69e22229516" :: Base16 )
-
-  with ( "2b7e151628aed2a6abf7158809cf4f3c"
-       , "73bed6b8e3c1743b7116e69e22229516") $
-       ( "f69f2445df4f9b17ad2b417be66c3710" :: Base16 )
-       `encryptsTo`
-       ( "3ff1caa1681fac09120eca307586e1a7"  :: Base16 )
-
-  where encryptsTo :: (Format fmt1, Format fmt2)
-                   => fmt1 -> fmt2 -> Key (AES 128 'CBC) -> Spec
-        encryptsTo = C.encryptsTo aes128cbc
-
------------------- AES 192 CBC ---------------------------
-
-aes192cbcSpec :: Spec
-aes192cbcSpec = do
-  C.encryptVsDecrypt aes192cbc
-
-  with ( "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
-       , "000102030405060708090a0b0c0d0e0f") $
-       ( "6bc1bee22e409f96e93d7e117393172a" :: Base16 )
-       `encryptsTo`
-       ( "4f021db243bc633d7178183a9fa071e8" :: Base16 )
-
-  with ( "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
-       , "4f021db243bc633d7178183a9fa071e8" ) $
-       ( "ae2d8a571e03ac9c9eb76fac45af8e51" :: Base16 )
-       `encryptsTo`
-       ( "b4d9ada9ad7dedf4e5e738763f69145a" :: Base16 )
-
-  with ( "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
-       , "b4d9ada9ad7dedf4e5e738763f69145a" ) $
-       ( "30c81c46a35ce411e5fbc1191a0a52ef" :: Base16 )
-       `encryptsTo`
-       ( "571b242012fb7ae07fa9baac3df102e0" :: Base16 )
-
-  with ( "8e73b0f7da0e6452c810f32b809079e562f8ead2522c6b7b"
-       , "571b242012fb7ae07fa9baac3df102e0") $
-       ( "f69f2445df4f9b17ad2b417be66c3710" :: Base16 )
-       `encryptsTo`
-       ( "08b0e27988598881d920a9e64f5615cd" :: Base16 )
-
-  where encryptsTo :: (Format fmt1, Format fmt2)
-                   => fmt1 -> fmt2 -> Key (AES 192 'CBC) -> Spec
-        encryptsTo = C.encryptsTo aes192cbc
-
------------------- AES 192 CBC ---------------------------
-
-aes256cbcSpec :: Spec
-aes256cbcSpec = do
-  C.encryptVsDecrypt aes256cbc
-
-  with ( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
-       , "000102030405060708090a0b0c0d0e0f" ) $
-       ( "6bc1bee22e409f96e93d7e117393172a" :: Base16)
-       `encryptsTo`
-       ( "f58c4c04d6e5f1ba779eabfb5f7bfbd6" :: Base16)
-
-  with ( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
-       , "f58c4c04d6e5f1ba779eabfb5f7bfbd6" ) $
-       ( "ae2d8a571e03ac9c9eb76fac45af8e51" :: Base16 )
-       `encryptsTo`
-       ( "9cfc4e967edb808d679f777bc6702c7d" :: Base16 )
-
-  with ( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
-       , "9cfc4e967edb808d679f777bc6702c7d") $
-       ( "30c81c46a35ce411e5fbc1191a0a52ef" :: Base16 )
-       `encryptsTo`
-       ( "39f23369a9d9bacfa530e26304231461" :: Base16 )
-
-  with ( "603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4"
-       , "39f23369a9d9bacfa530e26304231461" ) $
-       ( "f69f2445df4f9b17ad2b417be66c3710" :: Base16 )
-       `encryptsTo`
-       ( "b2eb05e2c39be9fcda6c19078c6a9d1b" :: Base16 )
-
-  where encryptsTo :: (Format fmt1, Format fmt2)
-                   => fmt1 -> fmt2 -> Key (AES 256 'CBC) -> Spec
-        encryptsTo = C.encryptsTo aes256cbc
diff --git a/spec/Raaz/Cipher/ChaCha20Spec.hs b/spec/Raaz/Cipher/ChaCha20Spec.hs
deleted file mode 100644
--- a/spec/Raaz/Cipher/ChaCha20Spec.hs
+++ /dev/null
@@ -1,118 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE OverloadedStrings    #-}
-{-# LANGUAGE ScopedTypeVariables  #-}
-{-# LANGUAGE DataKinds            #-}
-{-# LANGUAGE CPP                  #-}
-
-module Raaz.Cipher.ChaCha20Spec where
-
-import           Control.Monad
-import           Data.Monoid
-import           Common
-import qualified Common.Cipher as C
-
-import Raaz.Core.Transfer
-import Raaz.Cipher.ChaCha20
-import qualified Raaz.Cipher.ChaCha20.Implementation.CPortable as CP
-
-#ifdef HAVE_VECTOR_128
-import qualified Raaz.Cipher.ChaCha20.Implementation.Vector128 as Vector128
-#endif
-
-
-# ifdef HAVE_VECTOR_256
-import qualified Raaz.Cipher.ChaCha20.Implementation.Vector256 as Vector256
-# endif
-
-implementations :: [Implementation ChaCha20]
-implementations = [ CP.implementation
-#                   ifdef HAVE_VECTOR_128
-                  , Vector128.implementation
-#                   endif
-#                   ifdef HAVE_VECTOR_256
-                  , Vector256.implementation
-#                   endif
-                  ]
-
-writeZeros :: BYTES Int -> WriteIO
-writeZeros = writeBytes 0
-
-zeroIV :: IV
-zeroIV = unsafeDecode $ toByteString $ writeZeros 12
-
-zeroKey :: KEY
-zeroKey = unsafeDecode $ toByteString $ writeZeros 32
-
-oneKey :: KEY
-oneKey = unsafeDecode $ toByteString $ one <> writeZeros 31
-  where one = writeBytes 1 (1 :: BYTES Int)
-
-zeroBlocks :: Int -> ByteString
-zeroBlocks = C.zeros . (toEnum :: Int -> BLOCKS ChaCha20)
-
-spec :: Spec
-spec = forM_ implementations $ \ imp -> do
-  let transformsTo = C.transformsTo' chacha20 imp
-      cipherImpName = "chacha20 (" ++ name imp ++ ")"
-      keyStreamIs   = C.keyStreamIs' chacha20 imp
-    in do
-    describe cipherImpName $ do
-      C.encryptVsDecrypt' chacha20 imp
-      C.crossCheck chacha20 imp
-      -- Unit test from RFC7539
-      with ("00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f"
-           , "00:00:00:00 00:00:00:4a 00:00:00:00"
-           , 1
-           ) $ ("Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it."
-                :: ByteString)
-        `transformsTo` ( "6e 2e 35 9a 25 68 f9 80 41 ba 07 28 dd 0d 69 81" <>
-                         "e9 7e 7a ec 1d 43 60 c2 0a 27 af cc fd 9f ae 0b" <>
-                         "f9 1b 65 c5 52 47 33 ab 8f 59 3d ab cd 62 b3 57" <>
-                         "16 39 d6 24 e6 51 52 ab 8f 53 0c 35 9f 08 61 d8" <>
-                         "07 ca 0d bf 50 0d 6a 61 56 a3 8e 08 8a 22 b6 5e" <>
-                         "52 bc 51 4d 16 cc f8 06 81 8c e9 1a b7 79 37 36" <>
-                         "5a f9 0b bf 74 a3 5b e6 b4 0b 8e ed f2 78 5e 42" <>
-                         "87 4d" :: Base16)
-
-      with (zeroKey, zeroIV, 0) $ zeroBlocks 2
-        `transformsTo` ( "76 b8 e0 ad a0 f1 3d 90 40 5d 6a e5 53 86 bd 28" <>
-                         "bd d2 19 b8 a0 8d ed 1a a8 36 ef cc 8b 77 0d c7" <>
-                         "da 41 59 7c 51 57 48 8d 77 24 e0 3f b8 d8 4a 37" <>
-                         "6a 43 b8 f4 15 18 a1 1c c3 87 b6 69 b2 ee 65 86" <>
-                         "9f 07 e7 be 55 51 38 7a 98 ba 97 7c 73 2d 08 0d" <>
-                         "cb 0f 29 a0 48 e3 65 69 12 c6 53 3e 32 ee 7a ed" <>
-                         "29 b7 21 76 9c e6 4e 43 d5 71 33 b0 74 d8 39 d5" <>
-                         "31 ed 1f 28 51 0a fb 45 ac e1 0a 1f 4b 79 4d 6f" :: Base16)
-
-
-      with (oneKey, zeroIV, 0) $ zeroBlocks 2
-        `transformsTo` ( "c5 d3 0a 7c e1 ec 11 93 78 c8 4f 48 7d 77 5a 85" <>
-                         "42 f1 3e ce 23 8a 94 55 e8 22 9e 88 8d e8 5b bd" <>
-                         "29 eb 63 d0 a1 7a 5b 99 9b 52 da 22 be 40 23 eb" <>
-                         "07 62 0a 54 f6 fa 6a d8 73 7b 71 eb 04 64 da c0" <>
-                         "10 f6 56 e6 d1 fd 55 05 3e 50 c4 87 5c 99 30 a3" <>
-                         "3f 6d 02 63 bd 14 df d6 ab 8c 70 52 1c 19 33 8b" <>
-                         "23 08 b9 5c f8 d0 bb 7d 20 2d 21 02 78 0e a3 52" <>
-                         "8f 1c b4 85 60 f7 6b 20 f3 82 b9 42 50 0f ce ac" :: Base16)
-
-
-      with (zeroKey, zeroIV, 0) $ keyStreamIs ( "76 b8 e0 ad a0 f1 3d 90 40 5d 6a e5 53 86 bd 28" <>
-                                                "bd d2 19 b8 a0 8d ed 1a a8 36 ef cc 8b 77 0d c7" <>
-                                                "da 41 59 7c 51 57 48 8d 77 24 e0 3f b8 d8 4a 37" <>
-                                                "6a 43 b8 f4 15 18 a1 1c c3 87 b6 69 b2 ee 65 86" :: Base16)
-
-      with (zeroKey, zeroIV, 1) $ keyStreamIs ( "9f 07 e7 be 55 51 38 7a 98 ba 97 7c 73 2d 08 0d" <>
-                                                "cb 0f 29 a0 48 e3 65 69 12 c6 53 3e 32 ee 7a ed" <>
-                                                "29 b7 21 76 9c e6 4e 43 d5 71 33 b0 74 d8 39 d5" <>
-                                                "31 ed 1f 28 51 0a fb 45 ac e1 0a 1f 4b 79 4d 6f" :: Base16)
-
-
-      with (oneKey, zeroIV, 0)  $ keyStreamIs ( "c5 d3 0a 7c e1 ec 11 93 78 c8 4f 48 7d 77 5a 85" <>
-                                                "42 f1 3e ce 23 8a 94 55 e8 22 9e 88 8d e8 5b bd" <>
-                                                "29 eb 63 d0 a1 7a 5b 99 9b 52 da 22 be 40 23 eb" <>
-                                                "07 62 0a 54 f6 fa 6a d8 73 7b 71 eb 04 64 da c0" :: Base16)
-
-      with (oneKey, zeroIV, 1) $ keyStreamIs  ( "10 f6 56 e6 d1 fd 55 05 3e 50 c4 87 5c 99 30 a3" <>
-                                                "3f 6d 02 63 bd 14 df d6 ab 8c 70 52 1c 19 33 8b" <>
-                                                "23 08 b9 5c f8 d0 bb 7d 20 2d 21 02 78 0e a3 52" <>
-                                                "8f 1c b4 85 60 f7 6b 20 f3 82 b9 42 50 0f ce ac" :: Base16)
diff --git a/spec/Raaz/Core/ByteSourceSpec.hs b/spec/Raaz/Core/ByteSourceSpec.hs
deleted file mode 100644
--- a/spec/Raaz/Core/ByteSourceSpec.hs
+++ /dev/null
@@ -1,36 +0,0 @@
-{-# LANGUAGE CPP #-}
-module Raaz.Core.ByteSourceSpec where
-
-import qualified Data.ByteString as B
-import           System.IO
-import           System.IO.Unsafe
-
-import           Common
-
-
-readResult :: ByteSource src => BYTES Int -> src -> IO (FillResult src)
-readResult n src = allocaBuffer n $ fillBytes n src
-
-{-# NOINLINE readResultPure #-}
-readResultPure :: PureByteSource src => BYTES Int -> src -> FillResult src
-readResultPure n src = unsafePerformIO $ readResult n src
-
-devNullExpectation :: Expectation
-
-#ifdef HAVE_DEV_NULL
-devNullExpectation =  withBinaryFile "/dev/null" ReadMode (readResult 0) `shouldReturn` (Exhausted 0)
-#else
-devNullExpectation = pendingWith "Non-posix system needs an equivalent of /dev/null"
-#endif
-
-
-spec :: Spec
-spec = do
-  describe "/dev/null" $
-    it "should return Exhausted even for a read request of 0" devNullExpectation
-
-  let genL :: [ByteString] ->  Gen (BYTES Int)
-      genL bs =  fromIntegral <$> choose (0, sum $ map B.length bs)
-    in describe "concatenated source" $
-       prop "reading from a list is equivalent to reading from concatenation" $
-       \ bs -> forAll (genL bs) $ \ n -> (B.concat <$> readResultPure n bs) == readResultPure n (B.concat bs)
diff --git a/spec/Raaz/Core/EncodeSpec.hs b/spec/Raaz/Core/EncodeSpec.hs
deleted file mode 100644
--- a/spec/Raaz/Core/EncodeSpec.hs
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-{-# LANGUAGE OverloadedStrings   #-}
-module Raaz.Core.EncodeSpec where
-
-import           Common
-import qualified Data.ByteString as B
-
-shouldBeAMultipleOf :: Int -> Int -> Bool
-shouldBeAMultipleOf m x = m `rem` x == 0
-
-shouldEncodeTo :: (Format fmt, Eq fmt) => ByteString -> fmt -> Spec
-shouldEncodeTo bs e = it msg $ encodeByteString bs `shouldBe` e
-  where msg = show bs ++ " should encode to " ++ show e
-
-spec :: Spec
-spec = do
-  describe "Base16" $ do
-    prop "encoded string is always of even length" $ \ (x :: Base16) ->
-      B.length (toByteString x) `shouldBeAMultipleOf` 2
-
-    prop "unsafeFromByteString . toByteString = id" $ \ (x :: Base16) ->
-      unsafeFromByteString (toByteString x) `shouldBe` x
-
-    prop "correctly encodes a 64-bit big endian word." $ \ (w :: Word64) ->
-      (read $ "0x" ++ showBase16 (bigEndian w))  == w
-
-
-  describe "Base64" $ do
-    prop "encoded string is always divisible by 4" $ \ (x :: Base64) ->
-      B.length (toByteString x) `shouldBeAMultipleOf` 4
-
-    prop "unsafeFromByteString . toByteString = id" $ \ (x :: Base16) ->
-      unsafeFromByteString (toByteString x) `shouldBe` x
-
-    describe "examples" $ do
-      "pleasure." `shouldEncodeTo` ("cGxlYXN1cmUu" :: Base64)
-      "leasure."  `shouldEncodeTo` ("bGVhc3VyZS4=" :: Base64)
-      "easure."   `shouldEncodeTo` ("ZWFzdXJlLg==" :: Base64)
-      "asure."    `shouldEncodeTo` ("YXN1cmUu"     :: Base64)
-      "sure."     `shouldEncodeTo` ("c3VyZS4="     :: Base64)
diff --git a/spec/Raaz/Core/MemorySpec.hs b/spec/Raaz/Core/MemorySpec.hs
deleted file mode 100644
--- a/spec/Raaz/Core/MemorySpec.hs
+++ /dev/null
@@ -1,10 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-module Raaz.Core.MemorySpec where
-
-import Common
-
-spec :: Spec
-spec = do prop "store followed by read gives identical values"
-            $ \ (x :: Word) -> securely (storeAndRead x) `shouldReturn` x
-  where storeAndRead :: Word -> MT (MemoryCell Word) Word
-        storeAndRead x = initialise x >> extract
diff --git a/spec/Raaz/Core/Types/WordSpec.hs b/spec/Raaz/Core/Types/WordSpec.hs
deleted file mode 100644
--- a/spec/Raaz/Core/Types/WordSpec.hs
+++ /dev/null
@@ -1,77 +0,0 @@
-{-# LANGUAGE ScopedTypeVariables #-}
-module Raaz.Core.Types.WordSpec where
-
-import Common
-import Data.ByteString as B
-import Data.Bits
-
-
-msbFirst :: (Bits a, Integral a) => B.ByteString -> a
-msbFirst = B.foldl (\ x b -> shiftL x 8 + fromIntegral b) 0
-lsbFirst :: (Bits a, Integral a) => B.ByteString -> a
-lsbFirst = B.foldr (\ b x -> shiftL x 8 + fromIntegral b) 0
-
-
-spec :: Spec
-spec = do
-
-  describe "little and big endian encodings are opposites" $ do
-
-    prop "for 32-bit quantities" $ \ (x :: Word32) ->
-      toByteString (littleEndian x) `shouldBe` B.reverse (toByteString $ bigEndian x)
-
-    prop "for 64-bit quantities" $ \ (x :: Word64) ->
-      toByteString (littleEndian x) `shouldBe` B.reverse (toByteString $ bigEndian x)
-
-
-  describe "32-bit little endian" $ do
-
-    basicEndianSpecs (undefined :: LE Word32)
-
-    prop "size of encodings of is 4 bytes" $ \ (w :: LE Word32) ->
-      B.length (toByteString w) `shouldBe` 4
-
-    prop "toByteString in lsb first order" $ \ (x :: LE Word32) ->
-      lsbFirst (toByteString x) `shouldBe` x
-
-    prop "unsafeFromByteString . toByteString = id" $ \ (x :: LE Word32) ->
-      unsafeFromByteString (toByteString x) `shouldBe` x
-
-  describe "64-bit little endian" $ do
-
-    basicEndianSpecs (undefined :: LE Word64)
-
-    prop "size of encodings of is 8 bytes" $ \ (w :: LE Word64) ->
-      B.length (toByteString w) `shouldBe` 8
-
-    prop "toByteString in lsb first order" $ \ (x :: LE Word64) ->
-      lsbFirst (toByteString x) `shouldBe` x
-
-    prop "unsafeFromByteString . toByteString = id" $ \ (x :: LE Word64) ->
-      unsafeFromByteString (toByteString x) `shouldBe` x
-
-  describe "32-bit big endian" $ do
-
-    basicEndianSpecs (undefined :: BE Word32)
-
-    prop "size of encodings of is 4 bytes" $ \ (w :: BE Word32) ->
-      B.length (toByteString w) `shouldBe` 4
-
-    prop "toByteString in lsb first order" $ \ (x :: BE Word32) ->
-      msbFirst (toByteString x) `shouldBe` x
-
-    prop "unsafeFromByteString . toByteString = id" $ \ (x :: BE Word32) ->
-      unsafeFromByteString (toByteString x) `shouldBe` x
-
-  describe "64-bit big endian" $ do
-
-    basicEndianSpecs (undefined :: BE Word64)
-
-    prop "size of encodings of is 8 bytes" $ \ (w :: BE Word64) ->
-      B.length (toByteString w) `shouldBe` 8
-
-    prop "toByteString in lsb first order" $ \ (x :: BE Word64) ->
-      msbFirst (toByteString x) `shouldBe` x
-
-    prop "unsafeFromByteString . toByteString = id" $ \ (x :: BE Word64) ->
-      unsafeFromByteString (toByteString x) `shouldBe` x
diff --git a/spec/Raaz/Core/Util/ByteStringSpec.hs b/spec/Raaz/Core/Util/ByteStringSpec.hs
deleted file mode 100644
--- a/spec/Raaz/Core/Util/ByteStringSpec.hs
+++ /dev/null
@@ -1,36 +0,0 @@
-module Raaz.Core.Util.ByteStringSpec where
-
-import           Common
-import           Prelude hiding (length, take)
-import           Data.ByteString.Internal(createAndTrim)
-import qualified Data.ByteString as B
-import           Foreign.Ptr
-
-import           Raaz.Core as RC
-
-
-spec :: Spec
-spec = do context "unsafeCopyToPointer" $
-            it "creates the same copy at the input pointer"
-            $ feed arbitrary $ \ bs -> (== bs) <$> clone bs
-
-          let gen = do bs <- arbitrary
-                       l  <- choose (0, B.length bs)
-                       return (bs, l)
-              in context "unsafeNCopyToPointer"
-                 $ it "creates the same prefix of at the input pointer"
-                 $ feed gen $ \ (bs,n) -> (==) (B.take n bs)
-                                          <$> clonePrefix (bs,n)
-
-          context "createFrom"
-            $ it "reads exactly the same bytes from the byte string pointer"
-            $ feed arbitrary $ \ bs -> (==bs) <$> readFrom bs
-
-    where clone bs  = create (length bs) $ RC.unsafeCopyToPointer bs . castPtr
-          clonePrefix (bs,n)
-            = createAndTrim (B.length bs)
-              $ \ cptr -> do RC.unsafeNCopyToPointer (BYTES n) bs
-                               $ castPtr cptr
-                             return n
-          readFrom bs        = RC.withByteString bs
-                               $ RC.createFrom (RC.length bs)
diff --git a/spec/Raaz/Hash/Blake2Spec.hs b/spec/Raaz/Hash/Blake2Spec.hs
deleted file mode 100644
--- a/spec/Raaz/Hash/Blake2Spec.hs
+++ /dev/null
@@ -1,79 +0,0 @@
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE OverloadedStrings    #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Raaz.Hash.Blake2Spec where
-
-import           Prelude hiding (replicate)
-
-import           Common
-import qualified Common.Hash as CH
-
-{--
-hashesTo :: ByteString -> BLAKE2b -> Spec
-hashesTo = CH.hashesTo
-
-hmacsTo  :: ByteString -> HMAC BLAKE2b -> Key (HMAC BLAKE2b) -> Spec
-hmacsTo  = CH.hmacsTo
---}
-
-spec2b :: Spec
-spec2b = describe "blake2b" $ do
-  basicEndianSpecs (undefined :: BLAKE2b)
-
-  ------------- Unit tests -------------------------
-  "" `hashesTo`
-    "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce"
-  "abc" `hashesTo`
-    "ba80a53f981c4d0d6a2797b69f12f6e94c212f14685ac4b74b12bb6fdbffa2d17d87c5392aab792dc252d5de4533cc9518d38aa8dbf1925ab92386edd4009923"
-
-  where hashesTo :: ByteString -> BLAKE2b -> Spec
-        hashesTo = CH.hashesTo
-
-
-spec2s :: Spec
-spec2s = describe "blake2s" $ do
-  basicEndianSpecs (undefined :: BLAKE2s)
-
-  ------------- Unit tests -------------------------
-  "" `hashesTo` "69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9"
-
-  "abc" `hashesTo` "508c5e8c327c14e2e1a72ba34eeb452f37458b209ed63a294d999b4c86675982"
-
-
-  where hashesTo :: ByteString -> BLAKE2s -> Spec
-        hashesTo = CH.hashesTo
-
-
-spec :: Spec
-spec =  spec2b >> spec2s
-
-
-
-  {-
-  --
-  -- Some unit tests
-  --
-  "" `hashesTo`
-    "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
-
-  "abc" `hashesTo`
-    "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
-
-  "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" `hashesTo`
-    "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909"
-
-  "The quick brown fox jumps over the lazy dog" `hashesTo`
-    "07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6"
-
-  "The quick brown fox jumps over the lazy cog" `hashesTo`
-    "3eeee1d0e11733ef152a6c29503b3ae20c4f1f3cda4cb26f1bc1a41f91c7fe4ab3bd86494049e201c4bd5155f31ecb7a3c8606843c4cc8dfcab7da11c8ae5045"
-
-  "The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog" `hashesTo`
-    "e489dcc2e8867d0bbeb0a35e6b94951a11affd7041ef39fa21719eb01800c29a2c3522924443939a7848fde58fb1dbd9698fece092c0c2b412c51a47602cfd38"
-
-  -- Some hmac specs
-  hmacSpec
-
-
--}
diff --git a/spec/Raaz/Hash/Sha1Spec.hs b/spec/Raaz/Hash/Sha1Spec.hs
deleted file mode 100644
--- a/spec/Raaz/Hash/Sha1Spec.hs
+++ /dev/null
@@ -1,52 +0,0 @@
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE OverloadedStrings    #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Raaz.Hash.Sha1Spec where
-
-import           Prelude hiding (replicate)
-
-import           Common
-import qualified Common.Hash as CH
-
--- Particular case for SHA1
-hashesTo :: ByteString -> SHA1 -> Spec
-hashesTo = CH.hashesTo
-
-hmacsTo  :: ByteString -> HMAC SHA1 -> Key (HMAC SHA1) -> Spec
-hmacsTo  = CH.hmacsTo
-
-spec :: Spec
-spec =  do
-
-  basicEndianSpecs (undefined :: SHA1)
-
-  --
-  -- Some unit tests
-  --
-  ""    `hashesTo` "da39a3ee5e6b4b0d3255bfef95601890afd80709"
-  "abc" `hashesTo` "a9993e364706816aba3e25717850c26c9cd0d89d"
-  "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" `hashesTo` "84983e441c3bd26ebaae4aa1f95129e5e54670f1"
-  "The quick brown fox jumps over the lazy dog"              `hashesTo` "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12"
-  "The quick brown fox jumps over the lazy cog"              `hashesTo` "de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3"
-  "The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog"
-         `hashesTo` "5957a404e7e74dc746bea2d0d47645ddb387a7de"
-
-  -- Tests for HMAC SHA1
-  hmacSpecs
-
-hmacSpecs :: Spec
-hmacSpecs = do
-  with ("0b" `repeated` 20) $ "Hi There" `hmacsTo` "b617318655057264e28bc0b6fb378c8ef146be00"
-  with ("aa" `repeated` 20) $
-    replicate (50 :: BYTES Int) 0xdd `hmacsTo` "125d7342b9ac11cd91a39af48aa17b4f63f175d3"
-  with ("aa" `repeated` 80)
-    $ "Test Using Larger Than Block-Size Key - Hash Key First" `hmacsTo` "aa4ae5e15272d00e95705637ce8a3b55ed402112"
-  with ("aa" `repeated` 80) $
-    "Test Using Larger Than Block-Size Key and Larger Than One Block-Size Data" `hmacsTo` "e8e99d0f45237d786d6bbaa7965c7808bbff1a91"
-
-  let key = fromString
-            $ (show  :: Base16 -> String)
-            $ encodeByteString "Jefe"
-    in with key  $ "what do ya want for nothing?" `hmacsTo` "effcdf6ae5eb2fa2d27416d5f184df9c259a7c79"
diff --git a/spec/Raaz/Hash/Sha224Spec.hs b/spec/Raaz/Hash/Sha224Spec.hs
deleted file mode 100644
--- a/spec/Raaz/Hash/Sha224Spec.hs
+++ /dev/null
@@ -1,36 +0,0 @@
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE OverloadedStrings    #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Raaz.Hash.Sha224Spec where
-
-import           Common
-import qualified Common.Hash as CH
-
-hashesTo :: ByteString -> SHA224 -> Spec
-hashesTo = CH.hashesTo
-
-spec :: Spec
-spec =  do
-
-  basicEndianSpecs (undefined :: SHA224)
-
-  --
-  -- Some unit tests
-  --
-  "" `hashesTo` "d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f"
-
-  "abc" `hashesTo` "23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7"
-
-  "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" `hashesTo`
-    "75388b16512776cc5dba5da1fd890150b0c6455cb4f58b1952522525"
-
-  "The quick brown fox jumps over the lazy dog" `hashesTo`
-    "730e109bd7a8a32b1cb9d9a09aa2325d2430587ddbc0c38bad911525"
-
-  "The quick brown fox jumps over the lazy cog" `hashesTo`
-    "fee755f44a55f20fb3362cdc3c493615b3cb574ed95ce610ee5b1e9b"
-
-  "The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog" `hashesTo`
-    "72a1a34c088733e432fa2e61e93a3e69af178870aa6b5ce0864ca60b"
diff --git a/spec/Raaz/Hash/Sha256Spec.hs b/spec/Raaz/Hash/Sha256Spec.hs
deleted file mode 100644
--- a/spec/Raaz/Hash/Sha256Spec.hs
+++ /dev/null
@@ -1,57 +0,0 @@
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE OverloadedStrings    #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Raaz.Hash.Sha256Spec where
-
-import           Prelude hiding (replicate)
-
-import           Common
-import qualified Common.Hash as CH
-
-hashesTo :: ByteString -> SHA256 -> Spec
-hashesTo = CH.hashesTo
-
-hmacsTo  :: ByteString -> HMAC SHA256 -> Key (HMAC SHA256) -> Spec
-hmacsTo  = CH.hmacsTo
-
-spec :: Spec
-spec =  do
-
-  basicEndianSpecs (undefined :: SHA256)
-
-  --
-  -- Some unit tests
-  --
-  ""    `hashesTo` "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
-
-  "abc" `hashesTo` "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
-
-  "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" `hashesTo`
-    "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"
-
-  "The quick brown fox jumps over the lazy dog" `hashesTo`
-    "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
-
-  "The quick brown fox jumps over the lazy cog" `hashesTo`
-    "e4c4d8f3bf76b692de791a173e05321150f7a345b46484fe427f6acc7ecc81be"
-
-  "The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog" `hashesTo`
-    "86c55ba51d6b4aef51f4ae956077a0f661d0b876c5774fef3172c4f56092cbbd"
-
-  hmacSpec
-
-hmacSpec :: Spec
-hmacSpec = do
-  with ("0b" `repeated` 20)  $ "Hi There" `hmacsTo` "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7"
-
-  with ("aa" `repeated` 20)  $ (replicate (50 :: BYTES Int) 0xdd) `hmacsTo` "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe"
-
-  with ("aa" `repeated` 131) $ "Test Using Larger Than Block-Size Key - Hash Key First" `hmacsTo`
-    "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54"
-
-  with ("aa" `repeated` 131) $ "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm." `hmacsTo` "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2"
-
-  let key = fromString $ (show  :: Base16 -> String) $ encodeByteString "Jefe"
-      in with key  $ "what do ya want for nothing?" `hmacsTo` "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843"
diff --git a/spec/Raaz/Hash/Sha384Spec.hs b/spec/Raaz/Hash/Sha384Spec.hs
deleted file mode 100644
--- a/spec/Raaz/Hash/Sha384Spec.hs
+++ /dev/null
@@ -1,33 +0,0 @@
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE OverloadedStrings    #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Raaz.Hash.Sha384Spec where
-
-import           Common
-import qualified Common.Hash as CH
-
-hashesTo :: ByteString -> SHA384 -> Spec
-hashesTo = CH.hashesTo
-
-spec :: Spec
-spec =  do
-
-  basicEndianSpecs (undefined :: SHA384)
-
-  --
-  -- Some unit tests
-  --
-  "" `hashesTo` "38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b"
-
-  "abc" `hashesTo` "cb00753f45a35e8bb5a03d699ac65007272c32ab0eded1631a8b605a43ff5bed8086072ba1e7cc2358baeca134c825a7"
-
-  "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" `hashesTo`
-    "09330c33f71147e83d192fc782cd1b4753111b173b3b05d22fa08086e3b0f712fcc7c71a557e2db966c3e9fa91746039"
-  "The quick brown fox jumps over the lazy dog" `hashesTo`
-    "ca737f1014a48f4c0b6dd43cb177b0afd9e5169367544c494011e3317dbf9a509cb1e5dc1e85a941bbee3d7f2afbc9b1"
-  "The quick brown fox jumps over the lazy cog" `hashesTo`
-    "098cea620b0978caa5f0befba6ddcf22764bea977e1c70b3483edfdf1de25f4b40d6cea3cadf00f809d422feb1f0161b"
-  "The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog" `hashesTo`
-    "ef06b4ee875361dd5b9737c835c5fbb1d47fc59edb3430fec50341c627c4296e7e3f80b3a7b1295a6aaf14f0ef2418a9"
diff --git a/spec/Raaz/Hash/Sha512Spec.hs b/spec/Raaz/Hash/Sha512Spec.hs
deleted file mode 100644
--- a/spec/Raaz/Hash/Sha512Spec.hs
+++ /dev/null
@@ -1,67 +0,0 @@
-
-{-# OPTIONS_GHC -fno-warn-orphans #-}
-{-# LANGUAGE OverloadedStrings    #-}
-{-# LANGUAGE ScopedTypeVariables #-}
-
-module Raaz.Hash.Sha512Spec where
-
-import           Prelude hiding (replicate)
-
-import           Common
-import qualified Common.Hash as CH
-
-
-hashesTo :: ByteString -> SHA512 -> Spec
-hashesTo = CH.hashesTo
-
-hmacsTo  :: ByteString -> HMAC SHA512 -> Key (HMAC SHA512) -> Spec
-hmacsTo  = CH.hmacsTo
-
-spec :: Spec
-spec =  do
-
-  basicEndianSpecs (undefined :: SHA512)
-
-  --
-  -- Some unit tests
-  --
-  "" `hashesTo`
-    "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
-
-  "abc" `hashesTo`
-    "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
-
-  "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" `hashesTo`
-    "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909"
-
-  "The quick brown fox jumps over the lazy dog" `hashesTo`
-    "07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6"
-
-  "The quick brown fox jumps over the lazy cog" `hashesTo`
-    "3eeee1d0e11733ef152a6c29503b3ae20c4f1f3cda4cb26f1bc1a41f91c7fe4ab3bd86494049e201c4bd5155f31ecb7a3c8606843c4cc8dfcab7da11c8ae5045"
-
-  "The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog" `hashesTo`
-    "e489dcc2e8867d0bbeb0a35e6b94951a11affd7041ef39fa21719eb01800c29a2c3522924443939a7848fde58fb1dbd9698fece092c0c2b412c51a47602cfd38"
-
-  -- Some hmac specs
-  hmacSpec
-
-
-hmacSpec :: Spec
-hmacSpec = do
-  with ("0b" `repeated` 20) $ "Hi There" `hmacsTo`
-    "87aa7cdea5ef619d4ff0b4241a1d6cb02379f4e2ce4ec2787ad0b30545e17cdedaa833b7d6b8a702038b274eaea3f4e4be9d914eeb61f1702e696c203a126854"
-
-  with ("aa" `repeated` 20) $ (replicate (50 :: BYTES Int) 0xdd) `hmacsTo`
-    "fa73b0089d56a284efb0f0756c890be9b1b5dbdd8ee81a3655f83e33b2279d39bf3e848279a722c806b485a47e67c807b946a337bee8942674278859e13292fb"
-
-  with ("aa" `repeated` 131) $ "Test Using Larger Than Block-Size Key - Hash Key First" `hmacsTo`
-    "80b24263c7c1a3ebb71493c1dd7be8b49b46d1f41b4aeec1121b013783f8f3526b56d037e05f2598bd0fd2215d6a1e5295e64f73f63f0aec8b915a985d786598"
-
-  with ("aa" `repeated` 131) $
-    "This is a test using a larger than block-size key and a larger than block-size data. The key needs to be hashed before being used by the HMAC algorithm." `hmacsTo`
-    "e37b6a775dc87dbaa4dfa9f96e5e3ffddebd71f8867289865df5a32d20cdc944b6022cac3c4982b10d5eeb55c3e4de15134676fb6de0446065c97440fa8c6a58"
-
-  let key = fromString $ (show  :: Base16 -> String) $ encodeByteString "Jefe"
-      in with key  $ "what do ya want for nothing?" `hmacsTo`
-           "164b7a7bfcf819e2e395fbe73b56e0a387bd64222e831fd610270cd7ea2505549758bf75c05a994a6d034f65f8f0e6fdcaeab1a34d4a6b4b636e070a38bce737"
diff --git a/spec/Raaz/RandomSpec.hs b/spec/Raaz/RandomSpec.hs
deleted file mode 100644
--- a/spec/Raaz/RandomSpec.hs
+++ /dev/null
@@ -1,11 +0,0 @@
-module Raaz.RandomSpec where
-
-import Common
-import Raaz.Random
-
-spec :: Spec
-spec = it "system prg should return different words on distinct calls"
-       $ compareWords `shouldReturn` False
-  where r64                 :: RandM Word64
-        r64                 = random
-        compareWords        = insecurely $ (==) <$> r64 <*> r64
diff --git a/spec/Spec.hs b/spec/Spec.hs
deleted file mode 100644
--- a/spec/Spec.hs
+++ /dev/null
@@ -1,1 +0,0 @@
-{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
diff --git a/tests/Raaz/Cipher/ChaCha20Spec.hs b/tests/Raaz/Cipher/ChaCha20Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Cipher/ChaCha20Spec.hs
@@ -0,0 +1,94 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE OverloadedStrings    #-}
+{-# LANGUAGE ScopedTypeVariables  #-}
+{-# LANGUAGE DataKinds            #-}
+
+module Raaz.Cipher.ChaCha20Spec where
+
+import           Tests.Core
+import qualified Tests.Cipher as C
+
+writeZeros :: BYTES Int -> WriteTo
+writeZeros = writeBytes 0
+
+zeroIV :: Nounce ChaCha20
+zeroIV = unsafeDecode $ toByteString $ writeZeros 12
+
+zeroKey :: Key ChaCha20
+zeroKey = unsafeDecode $ toByteString $ writeZeros 32
+
+oneKey :: Key ChaCha20
+oneKey = unsafeDecode $ toByteString $ one <> writeZeros 31
+  where one = writeBytes 1 (1 :: BYTES Int)
+
+zeroBlocks :: Int -> ByteString
+zeroBlocks n = C.zeros $ inBytes $ blocksOf n (Proxy :: Proxy ChaCha20)
+
+transformsTo :: (Format fmt1, Format fmt2)
+             => fmt1
+             -> fmt2
+             -> (Key ChaCha20, Nounce ChaCha20, Int)
+             -> Spec
+transformsTo = C.transformsTo
+
+keyStreamIs  :: Format fmt => fmt -> (Key ChaCha20, Nounce ChaCha20, Int) -> Spec
+keyStreamIs  = C.keyStreamIs
+
+spec :: Spec
+spec = describe "ChaCha20" $ do
+  -- Unit test from RFC7539
+    with ("00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f"
+         , "00:00:00:00 00:00:00:4a 00:00:00:00"
+         , 1
+         ) $ ("Ladies and Gentlemen of the class of '99: If I could offer you only one tip for the future, sunscreen would be it." :: ByteString)
+      `transformsTo` ( "6e 2e 35 9a 25 68 f9 80 41 ba 07 28 dd 0d 69 81" <>
+                       "e9 7e 7a ec 1d 43 60 c2 0a 27 af cc fd 9f ae 0b" <>
+                       "f9 1b 65 c5 52 47 33 ab 8f 59 3d ab cd 62 b3 57" <>
+                       "16 39 d6 24 e6 51 52 ab 8f 53 0c 35 9f 08 61 d8" <>
+                       "07 ca 0d bf 50 0d 6a 61 56 a3 8e 08 8a 22 b6 5e" <>
+                       "52 bc 51 4d 16 cc f8 06 81 8c e9 1a b7 79 37 36" <>
+                       "5a f9 0b bf 74 a3 5b e6 b4 0b 8e ed f2 78 5e 42" <>
+                       "87 4d" :: Base16)
+
+    with (zeroKey, zeroIV, 0) $ zeroBlocks 2
+      `transformsTo` ( "76 b8 e0 ad a0 f1 3d 90 40 5d 6a e5 53 86 bd 28" <>
+                       "bd d2 19 b8 a0 8d ed 1a a8 36 ef cc 8b 77 0d c7" <>
+                       "da 41 59 7c 51 57 48 8d 77 24 e0 3f b8 d8 4a 37" <>
+                       "6a 43 b8 f4 15 18 a1 1c c3 87 b6 69 b2 ee 65 86" <>
+                       "9f 07 e7 be 55 51 38 7a 98 ba 97 7c 73 2d 08 0d" <>
+                       "cb 0f 29 a0 48 e3 65 69 12 c6 53 3e 32 ee 7a ed" <>
+                       "29 b7 21 76 9c e6 4e 43 d5 71 33 b0 74 d8 39 d5" <>
+                       "31 ed 1f 28 51 0a fb 45 ac e1 0a 1f 4b 79 4d 6f" :: Base16)
+
+
+    with (oneKey, zeroIV, 0) $ zeroBlocks 2
+      `transformsTo` ( "c5 d3 0a 7c e1 ec 11 93 78 c8 4f 48 7d 77 5a 85" <>
+                       "42 f1 3e ce 23 8a 94 55 e8 22 9e 88 8d e8 5b bd" <>
+                       "29 eb 63 d0 a1 7a 5b 99 9b 52 da 22 be 40 23 eb" <>
+                       "07 62 0a 54 f6 fa 6a d8 73 7b 71 eb 04 64 da c0" <>
+                       "10 f6 56 e6 d1 fd 55 05 3e 50 c4 87 5c 99 30 a3" <>
+                       "3f 6d 02 63 bd 14 df d6 ab 8c 70 52 1c 19 33 8b" <>
+                       "23 08 b9 5c f8 d0 bb 7d 20 2d 21 02 78 0e a3 52" <>
+                       "8f 1c b4 85 60 f7 6b 20 f3 82 b9 42 50 0f ce ac" :: Base16)
+
+
+    with (zeroKey, zeroIV, 0) $ keyStreamIs ( "76 b8 e0 ad a0 f1 3d 90 40 5d 6a e5 53 86 bd 28" <>
+                                              "bd d2 19 b8 a0 8d ed 1a a8 36 ef cc 8b 77 0d c7" <>
+                                              "da 41 59 7c 51 57 48 8d 77 24 e0 3f b8 d8 4a 37" <>
+                                              "6a 43 b8 f4 15 18 a1 1c c3 87 b6 69 b2 ee 65 86" :: Base16)
+
+    with (zeroKey, zeroIV, 1) $ keyStreamIs ( "9f 07 e7 be 55 51 38 7a 98 ba 97 7c 73 2d 08 0d" <>
+                                              "cb 0f 29 a0 48 e3 65 69 12 c6 53 3e 32 ee 7a ed" <>
+                                              "29 b7 21 76 9c e6 4e 43 d5 71 33 b0 74 d8 39 d5" <>
+                                              "31 ed 1f 28 51 0a fb 45 ac e1 0a 1f 4b 79 4d 6f" :: Base16)
+
+
+    with (oneKey, zeroIV, 0)  $ keyStreamIs ( "c5 d3 0a 7c e1 ec 11 93 78 c8 4f 48 7d 77 5a 85" <>
+                                              "42 f1 3e ce 23 8a 94 55 e8 22 9e 88 8d e8 5b bd" <>
+                                              "29 eb 63 d0 a1 7a 5b 99 9b 52 da 22 be 40 23 eb" <>
+                                              "07 62 0a 54 f6 fa 6a d8 73 7b 71 eb 04 64 da c0" :: Base16)
+
+    with (oneKey, zeroIV, 1) $ keyStreamIs  ( "10 f6 56 e6 d1 fd 55 05 3e 50 c4 87 5c 99 30 a3" <>
+                                              "3f 6d 02 63 bd 14 df d6 ab 8c 70 52 1c 19 33 8b" <>
+                                              "23 08 b9 5c f8 d0 bb 7d 20 2d 21 02 78 0e a3 52" <>
+                                              "8f 1c b4 85 60 f7 6b 20 f3 82 b9 42 50 0f ce ac" :: Base16)
diff --git a/tests/Raaz/Cipher/XChaCha20Spec.hs b/tests/Raaz/Cipher/XChaCha20Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Cipher/XChaCha20Spec.hs
@@ -0,0 +1,66 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE OverloadedStrings    #-}
+{-# LANGUAGE ScopedTypeVariables  #-}
+{-# LANGUAGE DataKinds            #-}
+
+module Raaz.Cipher.XChaCha20Spec where
+
+import           Tests.Core
+import qualified XChaCha20.Implementation as XI
+import qualified ChaCha20.CPortable as CP
+import           System.IO.Unsafe( unsafePerformIO )
+
+
+unsafeRun :: Memory mem => (mem -> IO a) -> a
+unsafeRun = unsafePerformIO . withMemory
+
+setup :: Key ChaCha20
+      -> Nounce XChaCha20
+      -> (Key ChaCha20, Nounce ChaCha20)
+setup k n = unsafeRun setupMem
+  where setupMem :: CP.Internals -> IO (Key ChaCha20, Nounce ChaCha20)
+        setupMem mem = do initialise k mem
+                          CP.xchacha20Setup n mem
+                          (,) <$> extract (keyCell mem)
+                              <*> extract (ivCell mem)
+xinit :: Key XChaCha20
+      -> Nounce XChaCha20
+      -> (Key ChaCha20, Nounce ChaCha20)
+xinit k n = unsafeRun xinitMem
+  where xinitMem :: XI.Internals -> IO (Key ChaCha20, Nounce ChaCha20)
+        xinitMem mem = do initialise k mem
+                          initialise n mem
+                          (,) <$> extract (keyCell $ XI.chacha20Internals mem)
+                              <*> extract (ivCell  $ XI.chacha20Internals mem)
+
+mesg :: (Show k, Show n, Show kp, Show iv)
+     => k -> n -> kp -> iv -> String
+mesg k n kp iv = unwords ["for key:"
+                         , shortened $ show k
+                         , "and nounce:"
+                         , shortened $ show n
+                         , "the key should be"
+                         , shortened $ show kp
+                         , "and the internal nounce should be"
+                         , show iv
+                         ]
+
+setupSpec :: Key ChaCha20  -> Nounce XChaCha20 -> (Key ChaCha20, Nounce ChaCha20) -> Spec
+setupSpec k n (kp,iv) = it msg $ setup k n `shouldBe` (kp,iv)
+  where msg = unwords ["setup:", mesg k n kp iv]
+
+xinitSpec :: Key XChaCha20 -> Nounce XChaCha20 -> (Key ChaCha20,Nounce ChaCha20) -> Spec
+xinitSpec k n (kp,iv)  = it msg $ xinit k n `shouldBe` (kp,iv)
+  where msg = unwords ["xinit:", mesg k n kp iv]
+
+spec :: Spec
+spec = do
+  setupSpec
+    "00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f"
+    "00:00:00:09:00:00:00:4a:00:00:00:00:31:41:59:27:00:01:02:03:04:05:06:07"
+    ("82413b42 27b27bfe d30e4250 8a877d73 a0f9e4d5 8a74a853 c12ec413 26d3ecdc", "00:00:00:00:00:01:02:03:04:05:06:07")
+
+  xinitSpec
+    "00:01:02:03:04:05:06:07:08:09:0a:0b:0c:0d:0e:0f:10:11:12:13:14:15:16:17:18:19:1a:1b:1c:1d:1e:1f"
+    "00:00:00:09:00:00:00:4a:00:00:00:00:31:41:59:27:00:01:02:03:04:05:06:07"
+    ("82413b42 27b27bfe d30e4250 8a877d73 a0f9e4d5 8a74a853 c12ec413 26d3ecdc", "00:00:00:00:00:01:02:03:04:05:06:07")
diff --git a/tests/Raaz/Core/ByteSourceSpec.hs b/tests/Raaz/Core/ByteSourceSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Core/ByteSourceSpec.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE CPP #-}
+module Raaz.Core.ByteSourceSpec where
+
+import qualified Data.ByteString as B
+import           System.IO
+import           System.IO.Unsafe
+
+import           Tests.Core
+
+
+readResult :: ByteSource src => BYTES Int -> src -> IO (FillResult src)
+readResult n src = allocaBuffer n $ fillBytes n src
+
+{-# NOINLINE readResultPure #-}
+readResultPure :: PureByteSource src => BYTES Int -> src -> FillResult src
+readResultPure n src = unsafePerformIO $ readResult n src
+
+devNullExpectation :: Expectation
+
+#ifdef HAVE_DEV_NULL
+devNullExpectation =  withBinaryFile "/dev/null" ReadMode (readResult 0) `shouldReturn` (Exhausted 0)
+#else
+devNullExpectation = pendingWith "Non-posix system needs an equivalent of /dev/null"
+#endif
+
+
+spec :: Spec
+spec = do
+  describe "/dev/null" $
+    it "should return Exhausted even for a read request of 0" devNullExpectation
+
+  let genL :: [ByteString] ->  Gen (BYTES Int)
+      genL bs =  fromIntegral <$> choose (0, sum $ map B.length bs)
+    in describe "concatenated source" $
+       prop "reading from a list is equivalent to reading from concatenation" $
+       \ bs -> forAll (genL bs) $ \ n -> (B.concat <$> readResultPure n bs) == readResultPure n (B.concat bs)
diff --git a/tests/Raaz/Core/EncodeSpec.hs b/tests/Raaz/Core/EncodeSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Core/EncodeSpec.hs
@@ -0,0 +1,41 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+{-# LANGUAGE OverloadedStrings   #-}
+module Raaz.Core.EncodeSpec where
+
+import           Tests.Core
+import qualified Data.ByteString as B
+
+shouldBeAMultipleOf :: Int -> Int -> Bool
+shouldBeAMultipleOf m x = m `rem` x == 0
+
+shouldEncodeTo :: (Format fmt, Eq fmt) => ByteString -> fmt -> Spec
+shouldEncodeTo bs e = it msg $ encodeByteString bs `shouldBe` e
+  where msg = show bs ++ " should encode to " ++ show e
+
+spec :: Spec
+spec = do
+  describe "Base16" $ do
+    prop "encoded string is always of even length" $ \ (x :: Base16) ->
+      B.length (toByteString x) `shouldBeAMultipleOf` 2
+
+    prop "unsafeFromByteString . toByteString = id" $ \ (x :: Base16) ->
+      unsafeFromByteString (toByteString x) `shouldBe` x
+
+    prop "correctly encodes a 64-bit big endian word." $ \ (w :: Word64) ->
+      read ("0x" ++ showBase16 (bigEndian w))  == w
+
+
+  describe "Base64" $ do
+    prop "encoded string is always divisible by 4" $ \ (x :: Base64) ->
+      B.length (toByteString x) `shouldBeAMultipleOf` 4
+
+    prop "unsafeFromByteString . toByteString = id" $ \ (x :: Base16) ->
+      unsafeFromByteString (toByteString x) `shouldBe` x
+
+    describe "examples" $ do
+      "pleasure." `shouldEncodeTo` ("cGxlYXN1cmUu" :: Base64)
+      "leasure."  `shouldEncodeTo` ("bGVhc3VyZS4=" :: Base64)
+      "easure."   `shouldEncodeTo` ("ZWFzdXJlLg==" :: Base64)
+      "asure."    `shouldEncodeTo` ("YXN1cmUu"     :: Base64)
+      "sure."     `shouldEncodeTo` ("c3VyZS4="     :: Base64)
diff --git a/tests/Raaz/Core/MemorySpec.hs b/tests/Raaz/Core/MemorySpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Core/MemorySpec.hs
@@ -0,0 +1,28 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+module Raaz.Core.MemorySpec where
+import Tests.Core
+
+spec :: Spec
+spec = do describe "store and read" $ do
+            prop "should return identical values when run securely"
+              $ \ (x :: Word) -> withSecureMemory (storeAndRead x) `shouldReturn` x
+
+            prop "should return identical values when run insecurely"
+              $ \ (x :: Word) -> withMemory (storeAndRead x) `shouldReturn` x
+
+          describe "store, copy, and read" $ do
+            prop "should return identical values when run securely"
+              $ \ (x :: Word) -> withSecureMemory (storeCopyRead x) `shouldReturn` x
+
+            prop "should return identical values when run insecurely"
+              $ \ (x :: Word) -> withMemory (storeCopyRead x) `shouldReturn` x
+
+  where storeAndRead :: Word -> MemoryCell Word -> IO Word
+        storeAndRead x mem = initialise x mem >> extract mem
+        storeCopyRead :: Word -> (MemoryCell Word, MemoryCell Word) -> IO Word
+        storeCopyRead x mem = let
+          src = fst mem
+          dst = snd mem
+          in do initialise x src
+                copyCell (destination dst) (source src)
+                extract dst
diff --git a/tests/Raaz/Core/Types/WordSpec.hs b/tests/Raaz/Core/Types/WordSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Core/Types/WordSpec.hs
@@ -0,0 +1,76 @@
+{-# LANGUAGE ScopedTypeVariables #-}
+module Raaz.Core.Types.WordSpec where
+
+import Tests.Core
+import Data.ByteString as B
+
+
+msbFirst :: (Bits a, Integral a) => B.ByteString -> a
+msbFirst = B.foldl (\ x b -> shiftL x 8 + fromIntegral b) 0
+lsbFirst :: (Bits a, Integral a) => B.ByteString -> a
+lsbFirst = B.foldr (\ b x -> shiftL x 8 + fromIntegral b) 0
+
+
+spec :: Spec
+spec = do
+
+  describe "little and big endian encodings are opposites" $ do
+
+    prop "for 32-bit quantities" $ \ (x :: Word32) ->
+      toByteString (littleEndian x) `shouldBe` B.reverse (toByteString $ bigEndian x)
+
+    prop "for 64-bit quantities" $ \ (x :: Word64) ->
+      toByteString (littleEndian x) `shouldBe` B.reverse (toByteString $ bigEndian x)
+
+
+  describe "32-bit little endian" $ do
+
+    basicEndianSpecs (undefined :: LE Word32)
+
+    prop "size of encodings of is 4 bytes" $ \ (w :: LE Word32) ->
+      B.length (toByteString w) `shouldBe` 4
+
+    prop "toByteString in lsb first order" $ \ (x :: LE Word32) ->
+      lsbFirst (toByteString x) `shouldBe` x
+
+    prop "unsafeFromByteString . toByteString = id" $ \ (x :: LE Word32) ->
+      unsafeFromByteString (toByteString x) `shouldBe` x
+
+  describe "64-bit little endian" $ do
+
+    basicEndianSpecs (undefined :: LE Word64)
+
+    prop "size of encodings of is 8 bytes" $ \ (w :: LE Word64) ->
+      B.length (toByteString w) `shouldBe` 8
+
+    prop "toByteString in lsb first order" $ \ (x :: LE Word64) ->
+      lsbFirst (toByteString x) `shouldBe` x
+
+    prop "unsafeFromByteString . toByteString = id" $ \ (x :: LE Word64) ->
+      unsafeFromByteString (toByteString x) `shouldBe` x
+
+  describe "32-bit big endian" $ do
+
+    basicEndianSpecs (undefined :: BE Word32)
+
+    prop "size of encodings of is 4 bytes" $ \ (w :: BE Word32) ->
+      B.length (toByteString w) `shouldBe` 4
+
+    prop "toByteString in lsb first order" $ \ (x :: BE Word32) ->
+      msbFirst (toByteString x) `shouldBe` x
+
+    prop "unsafeFromByteString . toByteString = id" $ \ (x :: BE Word32) ->
+      unsafeFromByteString (toByteString x) `shouldBe` x
+
+  describe "64-bit big endian" $ do
+
+    basicEndianSpecs (undefined :: BE Word64)
+
+    prop "size of encodings of is 8 bytes" $ \ (w :: BE Word64) ->
+      B.length (toByteString w) `shouldBe` 8
+
+    prop "toByteString in lsb first order" $ \ (x :: BE Word64) ->
+      msbFirst (toByteString x) `shouldBe` x
+
+    prop "unsafeFromByteString . toByteString = id" $ \ (x :: BE Word64) ->
+      unsafeFromByteString (toByteString x) `shouldBe` x
diff --git a/tests/Raaz/Core/Util/ByteStringSpec.hs b/tests/Raaz/Core/Util/ByteStringSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Core/Util/ByteStringSpec.hs
@@ -0,0 +1,37 @@
+module Raaz.Core.Util.ByteStringSpec where
+
+import           Tests.Core
+import           Prelude hiding (length, take)
+import           Data.ByteString.Internal(createAndTrim)
+import qualified Data.ByteString as B
+import           Foreign.Ptr
+
+import           Raaz.Core as RC
+import           Raaz.Core.Types.Internal (BYTES (..))
+
+
+spec :: Spec
+spec = do context "unsafeCopyToPointer" $
+            it "creates the same copy at the input pointer"
+            $ feed arbitrary $ \ bs -> (== bs) <$> clone bs
+
+          let gen = do bs <- arbitrary
+                       l  <- choose (0, B.length bs)
+                       return (bs, l)
+              in context "unsafeNCopyToPointer"
+                 $ it "creates the same prefix of at the input pointer"
+                 $ feed gen $ \ (bs,n) -> (==) (B.take n bs)
+                                          <$> clonePrefix (bs,n)
+
+          context "createFrom"
+            $ it "reads exactly the same bytes from the byte string pointer"
+            $ feed arbitrary $ \ bs -> (==bs) <$> readFrom bs
+
+    where clone bs  = create (length bs) $ RC.unsafeCopyToPointer bs . castPtr
+          clonePrefix (bs,n)
+            = createAndTrim (B.length bs)
+              $ \ cptr -> do RC.unsafeNCopyToPointer (BYTES n) bs
+                               $ castPtr cptr
+                             return n
+          readFrom bs        = RC.withByteString bs
+                               $ RC.createFrom (RC.length bs)
diff --git a/tests/Raaz/Digest/Blake2Spec.hs b/tests/Raaz/Digest/Blake2Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Digest/Blake2Spec.hs
@@ -0,0 +1,154 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE OverloadedStrings    #-}
+{-# LANGUAGE ScopedTypeVariables  #-}
+
+module Raaz.Digest.Blake2Spec where
+
+import           Prelude hiding (replicate)
+
+import           Tests.Core
+import           Data.Attoparsec.ByteString.Char8 as AP
+import qualified Data.ByteString                  as BS
+import           Data.Char
+import           Raaz.Primitive.Keyed.Internal
+import           Paths_raaz
+
+import qualified Blake2b.Digest as B2b
+import qualified Blake2b.Auth   as B2bAuth
+import qualified Blake2s.Digest as B2s
+import qualified Blake2s.Auth   as B2sAuth
+
+spec :: Spec
+spec = do
+  describe "BLAKE2b" $ do
+    basicEndianSpecs (undefined :: Blake2b)
+    B2b.incrementalVsFull
+    B2bAuth.incrementalVsFull
+
+  describe "BLAKE2s" $ do
+    basicEndianSpecs (undefined :: Blake2s)
+    B2s.incrementalVsFull
+    B2sAuth.incrementalVsFull
+
+  -- | Running the standard test cases.
+  let process hand = parseWith (slurp hand) tests BS.empty
+      slurp   hand = BS.hGetSome hand $ 32 * 1024
+      reportFailure l str = prop l $ counterexample str False
+    in do
+
+    result <- runIO $ do
+      fp    <- getDataFileName "tests/standard-test-vectors/blake2/tests.json"
+      withFile fp ReadMode process
+
+    case result of
+      Done _ testCases -> mapM_ toSpec testCases
+      Fail _ _ err     -> reportFailure "Parse Error" err
+      _                -> reportFailure "fatal" "something terrible happened may be incomplete file"
+
+
+
+----------------------------- Parsing functions ------------------------
+
+
+data B2Test = B2b (Test Blake2b)
+            | B2s (Test Blake2s)
+            | Skip ByteString
+
+data Test h = HT ByteString h
+            | AT ByteString (Key (Keyed h)) (Keyed h)
+
+toSpec :: B2Test -> Spec
+toSpec tst  =
+  case tst of
+    B2b (HT bs h)     -> context "with blake2b" $ B2b.digestsTo bs h
+    B2b (AT bs k tag) -> withKey "blake2b" k    $ bs `B2bAuth.authsTo` tag
+    B2s (HT bs h)     -> context "with blake2s" $ B2s.digestsTo bs h
+    B2s (AT bs k tag) -> withKey "blake2s" k    $ bs `B2sAuth.authsTo` tag
+    _                 -> return ()
+  where withKey hsh key = context (unwords ["with key", shortened $ show key, hsh]) . with key
+
+
+
+hashTest :: Encodable h => Proxy h -> Parser (Test h)
+hashTest _ = do  i    <- byteStringField "in" <* comma
+                 kstr <- byteStringField "key" <* comma
+                 if BS.null kstr then HT i <$> encodableField "out"
+                   else AT i (unsafeDecode kstr) <$> encodableField "out"
+
+b2Test :: Parser B2Test
+b2Test = brace (b2bTest <|> b2sTest <|> unknown)
+  where b2bTest = hashField "blake2b" >> comma >> B2b <$> hashTest (Proxy :: Proxy Blake2b)
+        b2sTest = hashField "blake2s" >> comma >> B2s <$> hashTest (Proxy :: Proxy Blake2s)
+        unknown = do h <- field "hash"  $ quoted $ AP.takeWhile (/= '"')
+                     skipWhile (/= '}')
+                     return $ Skip h
+
+
+
+tests :: Parser [B2Test]
+tests = skipSpace >> bracket (b2Test `sepBy` comma)
+
+
+------------ Fields ----------------------------------
+hashField :: ByteString -> Parser ByteString
+hashField h = field "hash" (quoted $ string h)
+
+
+
+byteStringField :: ByteString -> Parser ByteString
+byteStringField s =  field s  (decodeFormat <$> base16)
+
+encodableField :: Encodable a => ByteString -> Parser a
+encodableField s = field s (unsafeDecode <$> base16)
+
+base16 :: Parser Base16
+base16 = hex >>= maybe (fail "bad base16 string") return
+  where hex    :: Parser (Maybe Base16)
+        hex    = decode <$> quoted (AP.takeWhile isHexDigit)
+
+
+
+
+-- | Parse something and skip spaces.
+lexeme :: Parser a -> Parser a
+lexeme p = p <* skipSpace
+
+-- A json field (key value pair).
+field :: BS.ByteString -> Parser a -> Parser a
+field s p = quoted (string s) >> colon >> p
+
+
+
+-- | Some common character parsers.
+lbrack      :: Parser Char
+rbrack      :: Parser Char
+lbrace      :: Parser Char
+rbrace      :: Parser Char
+colon       :: Parser Char
+semiColon   :: Parser Char
+quote       :: Parser Char
+comma       :: Parser Char
+
+
+lbrack    = lexeme $ char '['
+rbrack    = lexeme $ char ']'
+lbrace    = lexeme $ char '{'
+rbrace    = lexeme $ char '}'
+colon     = lexeme $ char ':'
+semiColon = lexeme $ char ';'
+comma     = lexeme $ char ','
+quote     = lexeme $ char '"'
+
+between :: Parser begin -> Parser end -> Parser a -> Parser a
+between begin end p = lexeme $ do x <- begin >> p
+                                  end >> return x
+
+
+bracket :: Parser a -> Parser a
+bracket = between lbrack rbrack
+
+brace :: Parser a -> Parser a
+brace = between lbrace rbrace
+
+quoted :: Parser a -> Parser a
+quoted = between quote quote
diff --git a/tests/Raaz/Digest/Sha256Spec.hs b/tests/Raaz/Digest/Sha256Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Digest/Sha256Spec.hs
@@ -0,0 +1,35 @@
+
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE OverloadedStrings    #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Raaz.Digest.Sha256Spec where
+
+import           Prelude hiding (replicate)
+
+import           Tests.Core
+import           Sha256.Digest
+
+spec :: Spec
+spec =  do
+  basicEndianSpecs (undefined :: Sha256)
+  incrementalVsFull
+
+  --
+  -- Some unit tests
+  --
+  ""    `digestsTo` "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
+
+  "abc" `digestsTo` "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
+
+  "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" `digestsTo`
+    "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"
+
+  "The quick brown fox jumps over the lazy dog" `digestsTo`
+    "d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592"
+
+  "The quick brown fox jumps over the lazy cog" `digestsTo`
+    "e4c4d8f3bf76b692de791a173e05321150f7a345b46484fe427f6acc7ecc81be"
+
+  "The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog" `digestsTo`
+    "86c55ba51d6b4aef51f4ae956077a0f661d0b876c5774fef3172c4f56092cbbd"
diff --git a/tests/Raaz/Digest/Sha512Spec.hs b/tests/Raaz/Digest/Sha512Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Digest/Sha512Spec.hs
@@ -0,0 +1,39 @@
+
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE OverloadedStrings    #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Raaz.Digest.Sha512Spec where
+
+import           Prelude hiding (replicate)
+
+
+import           Tests.Core
+import           Sha512.Digest
+
+
+spec :: Spec
+spec =  do
+  basicEndianSpecs (undefined :: Sha512)
+  incrementalVsFull
+
+  --
+  -- Some unit tests
+  --
+  "" `digestsTo`
+    "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
+
+  "abc" `digestsTo`
+    "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
+
+  "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" `digestsTo`
+    "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909"
+
+  "The quick brown fox jumps over the lazy dog" `digestsTo`
+    "07e547d9586f6a73f73fbac0435ed76951218fb7d0c8d788a309d785436bbb642e93a252a954f23912547d1e8a3b5ed6e1bfd7097821233fa0538f3db854fee6"
+
+  "The quick brown fox jumps over the lazy cog" `digestsTo`
+    "3eeee1d0e11733ef152a6c29503b3ae20c4f1f3cda4cb26f1bc1a41f91c7fe4ab3bd86494049e201c4bd5155f31ecb7a3c8606843c4cc8dfcab7da11c8ae5045"
+
+  "The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog The quick brown fox jumps over the lazy dog" `digestsTo`
+    "e489dcc2e8867d0bbeb0a35e6b94951a11affd7041ef39fa21719eb01800c29a2c3522924443939a7848fde58fb1dbd9698fece092c0c2b412c51a47602cfd38"
diff --git a/tests/Raaz/Mac/Poly1305Spec.hs b/tests/Raaz/Mac/Poly1305Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/Mac/Poly1305Spec.hs
@@ -0,0 +1,47 @@
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+{-# LANGUAGE OverloadedStrings    #-}
+{-# LANGUAGE ScopedTypeVariables  #-}
+{-# LANGUAGE DataKinds            #-}
+
+module Raaz.Mac.Poly1305Spec where
+
+import           Tests.Core
+import           Poly1305.Auth
+import           Raaz.Random
+import qualified Data.ByteString as BS
+import           Raaz.Primitive.Poly1305.Internal (Key(..))
+
+randomClamping :: Spec
+randomClamping = it "randomly generated R values should be clamped"
+       $ checkClamped `shouldReturn` True
+  where randR :: RandomState -> IO R
+        randR = random
+        checkClamped = withRandomState (fmap isClamped . randR)
+
+
+-- | Check whether the given value of r is clamped.
+isClamped :: R -> Bool
+isClamped = isClampedStr . toByteString
+  where top4Clear w = w < 16
+        bot2Clear w = w `mod` 4  == 0
+        isClampedStr bs = check top4Clear [3,7,11,15] && check bot2Clear [4,8,12]
+          where check pr  = all (pr . BS.index bs)
+
+spec :: Spec
+spec = do
+  describe "Poly1305" $
+    basicEndianSpecs (undefined :: Poly1305)
+  describe "R" $ do
+    basicEndianSpecs (undefined :: R)
+    randomClamping
+
+  describe "S" $
+    basicEndianSpecs (undefined :: S)
+
+  incrementalVsFull
+
+  with (Key "85:d6:be:78:57:55:6d:33:7f:44:52:fe:42:d5:06:a8"
+            "01:03:80:8a:fb:0d:b2:fd:4a:bf:f6:af:41:49:f5:1b"
+       )
+    $ ( "Cryptographic Forum Research Group" :: ByteString)
+    `authsTo` ("a8:06:1d:c1:30:51:36:c6:c2:2b:8b:af:0c:01:27:a9" :: Poly1305)
diff --git a/tests/Raaz/RandomSpec.hs b/tests/Raaz/RandomSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Raaz/RandomSpec.hs
@@ -0,0 +1,11 @@
+module Raaz.RandomSpec where
+
+import Tests.Core
+import Raaz.Random
+
+spec :: Spec
+spec = it "system prg should return different words on distinct calls"
+       $ compareWords `shouldReturn` False
+  where r64                 :: RandomState -> IO Word64
+        r64                 = random
+        compareWords        = withRandomState $ \ state -> (==) <$> r64 state  <*> r64 state
diff --git a/tests/Spec.hs b/tests/Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/Spec.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
diff --git a/tests/auth/Implementation.hsig b/tests/auth/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/tests/auth/Implementation.hsig
@@ -0,0 +1,15 @@
+{-# LANGUAGE FlexibleInstances #-}
+
+-- This signature adds additional constraints on the primitive and its
+-- key so that we can give authenticator tests.
+signature Implementation where
+
+import Raaz.Core
+import Test.QuickCheck.Arbitrary
+
+data Prim
+
+
+instance Show (Prim)
+instance Show (Key Prim)
+instance Arbitrary (Key Prim)
diff --git a/tests/auth/Tests/Auth.hs b/tests/auth/Tests/Auth.hs
new file mode 100644
--- /dev/null
+++ b/tests/auth/Tests/Auth.hs
@@ -0,0 +1,51 @@
+-- Generic tests for hash.
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE MonoLocalBinds   #-}
+{-# LANGUAGE DataKinds           #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+
+module Tests.Auth
+       ( authsTo
+       , incrementalVsFull
+       ) where
+
+import Implementation
+import Interface
+import Tests.Core
+
+
+authsTo :: ByteString
+        -> Prim
+        -> Key Prim
+        -> Spec
+authsTo str prim key = it msg (auth key str `shouldBe` prim)
+  where msg   = unwords [ "authenticates"
+                        , shortened $ show str
+                        , "to"
+                        , shortened $ show prim
+                        ]
+
+
+incrDigest :: Key Prim
+           -> ByteString
+           -> IO Prim
+incrDigest k bs = withMemory $ \ (cxt :: AuthCxt 1) ->
+  do startAuth k cxt
+     updateAuth bs cxt
+     finaliseAuth cxt
+
+incrDigestList :: Key Prim
+               -> [ByteString]
+               -> IO Prim
+incrDigestList k bsL = withMemory $ \ (cxt :: AuthCxt 1) ->
+  do startAuth k cxt
+     mapM_ (`updateAuth` cxt) bsL
+     finaliseAuth cxt
+
+incrementalVsFull :: Spec
+incrementalVsFull = describe "Incremental vs Full authenticator" $ do
+  prop "for single source" $
+    \ k bs -> incrDigest k bs `shouldReturn` auth k bs
+
+  prop "for multiple source" $
+    \ k bsL -> incrDigestList k bsL `shouldReturn` auth k bsL
diff --git a/tests/auth/implementation/Auth/Mac/Blake2b.hs b/tests/auth/implementation/Auth/Mac/Blake2b.hs
new file mode 100644
--- /dev/null
+++ b/tests/auth/implementation/Auth/Mac/Blake2b.hs
@@ -0,0 +1,5 @@
+module Auth.Mac.Blake2b ( module Blake2b.Mac.Implementation
+                        , module Tests.Core
+                        ) where
+import Blake2b.Mac.Implementation
+import Tests.Core
diff --git a/tests/auth/implementation/Auth/Mac/Blake2s.hs b/tests/auth/implementation/Auth/Mac/Blake2s.hs
new file mode 100644
--- /dev/null
+++ b/tests/auth/implementation/Auth/Mac/Blake2s.hs
@@ -0,0 +1,5 @@
+module Auth.Mac.Blake2s ( module Blake2s.Mac.Implementation
+                        , module Tests.Core
+                        ) where
+import Blake2s.Mac.Implementation
+import Tests.Core
diff --git a/tests/auth/implementation/Auth/Poly1305.hs b/tests/auth/implementation/Auth/Poly1305.hs
new file mode 100644
--- /dev/null
+++ b/tests/auth/implementation/Auth/Poly1305.hs
@@ -0,0 +1,6 @@
+module Auth.Poly1305 ( module Tests.Core
+                     , module Poly1305.Implementation
+                     ) where
+
+import Poly1305.Implementation
+import Tests.Core
diff --git a/tests/cipher/Tests/Cipher.hs b/tests/cipher/Tests/Cipher.hs
new file mode 100644
--- /dev/null
+++ b/tests/cipher/Tests/Cipher.hs
@@ -0,0 +1,55 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE MonoLocalBinds   #-}
+module Tests.Cipher( transformsTo
+                   , keyStreamIs
+                   , zeros
+                   ) where
+import           Raaz.Core
+import           Prelude hiding (length)
+import           Tests.Core.Imports
+import           Tests.Core.Utils
+import           Implementation
+import           Interface
+
+transformsTo :: (Format fmt1, Format fmt2, Show (Nounce Prim), Show (Key Prim))
+             => fmt1
+             -> fmt2
+             -> (Key Prim, Nounce Prim, Int)
+             -> Spec
+transformsTo inp expected (key,nounce,ctr) = it msg $ result `shouldBe` decodeFormat expected
+  where result = encryptAt key nounce (blocksOf ctr Proxy) $ decodeFormat inp
+        msg  = unwords [ withKeyNounce key nounce ctr
+                       , "encrypts"
+                       , shortened $ show inp
+                       , "to"
+                       , shortened $ show expected
+                       ]
+
+withKeyNounce :: (Show (Key Prim), Show (Nounce Prim))
+              => Key Prim
+              -> Nounce Prim
+              -> Int
+              -> String
+withKeyNounce key nounce ctr = unwords [ "with {"
+                                       , "key:"    ++ shortened (show key)
+                                       , ", nounce:" ++ shortened (show nounce)
+                                       , ", counter:" ++ show ctr
+                                       , "}"
+                                       ]
+
+keyStreamIs :: ( Show (Key Prim), Show (Nounce Prim), Format fmt)
+            => fmt
+            -> (Key Prim, Nounce Prim, Int)
+            -> Spec
+keyStreamIs expected (key, nounce, ctr) = it msg $ result `shouldBe` decoded
+  where decoded = decodeFormat expected
+        result = encryptAt key nounce (blocksOf ctr Proxy) $ zeros $ Raaz.Core.length decoded
+        msg    = unwords [ withKeyNounce key nounce ctr
+                         , "key stream is"
+                         , shortened $ show expected
+                         ]
+
+zeros :: BYTES Int -> ByteString
+zeros = toByteString . writeZero
+  where writeZero :: LengthUnit u => u -> WriteTo
+        writeZero = writeBytes 0
diff --git a/tests/comparative/AuthEncrypt.hs b/tests/comparative/AuthEncrypt.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/AuthEncrypt.hs
@@ -0,0 +1,19 @@
+module AuthEncrypt (lockVsUnlock
+                   , module Compare
+                   ) where
+import Compare
+
+type LockFn  k n a = k -> n -> ByteString -> a
+type UnlockFn k n a = k -> a -> Maybe ByteString
+
+
+lockVsUnlock :: ( Show k, Show n
+                , Arbitrary k, Arbitrary n
+                )
+             => [ (String, LockFn k n a) ]
+             -> [ (String, UnlockFn k n a) ]
+             -> Spec
+lockVsUnlock lfs ulfs = sequence_ [ lVsUL lnf ulnf | lnf <- lfs , ulnf <- ulfs ]
+  where lVsUL (ln, lf) (uln, ulf) = let
+          mesg = unwords ["lock using", ln, "unlock using", uln]
+          in prop mesg $ \ k n bs -> ulf k (lf k n bs) `shouldBe` Just bs
diff --git a/tests/comparative/AuthEncrypt/ChaCha20Poly1305Spec.hs b/tests/comparative/AuthEncrypt/ChaCha20Poly1305Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/AuthEncrypt/ChaCha20Poly1305Spec.hs
@@ -0,0 +1,10 @@
+module AuthEncrypt.ChaCha20Poly1305Spec where
+
+import           AuthEncrypt
+import qualified AuthEncrypt.ChaCha20Poly1305.CPortable as CP
+import qualified AuthEncrypt.ChaCha20Poly1305.CHandWritten as CH
+
+spec :: Spec
+spec = lockVsUnlock
+       [ (CP.name, CP.unsafeLock), (CH.name, CH.unsafeLock) ]
+       [ (CP.name, CP.unlock), (CH.name, CH.unlock) ]
diff --git a/tests/comparative/Compare.hs b/tests/comparative/Compare.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/Compare.hs
@@ -0,0 +1,16 @@
+module Compare ( checkSame, message
+               , module Tests.Core
+               ) where
+import Tests.Core
+same :: Eq a => [a] -> Bool
+same []     = True
+same (x:xs) = all (==x) xs
+
+
+checkSame :: Eq a => [(b,a)] -> Bool
+checkSame = same . map snd
+
+message :: [String] -> String
+message xs = unwords $ oxfordComma $ "comparing" : xs
+  where oxfordComma [x,y] = [x ++ ", and", y]
+        oxfordComma ys    = ys
diff --git a/tests/comparative/Digest.hs b/tests/comparative/Digest.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/Digest.hs
@@ -0,0 +1,11 @@
+module Digest( digestSpec
+             , module Compare
+             ) where
+import Compare
+
+digestSpec :: Eq a
+           => [(String, ByteString -> a)]
+           -> Spec
+digestSpec fs = prop mesg $ \ bs -> checkSame $ map (digestIt bs) fs
+  where digestIt bs (nm,f) = (nm, f bs)
+        mesg = message $ map fst fs
diff --git a/tests/comparative/Digest/Blake2bSpec.hs b/tests/comparative/Digest/Blake2bSpec.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/Digest/Blake2bSpec.hs
@@ -0,0 +1,10 @@
+module Digest.Blake2bSpec where
+
+import           Digest
+import qualified Digest.Blake2b.CPortable    as CP
+import qualified Digest.Blake2b.CHandWritten as CH
+
+spec :: Spec
+spec = digestSpec  [ (CP.name, CP.digest)
+                   , (CH.name, CH.digest)
+                   ]
diff --git a/tests/comparative/Digest/Sha256Spec.hs b/tests/comparative/Digest/Sha256Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/Digest/Sha256Spec.hs
@@ -0,0 +1,10 @@
+module Digest.Sha256Spec where
+
+import           Digest
+import qualified Digest.Sha256.CPortable    as CP
+import qualified Digest.Sha256.CHandWritten as CH
+
+spec :: Spec
+spec = digestSpec[ (CP.name, CP.digest)
+                 , (CH.name, CH.digest)
+                 ]
diff --git a/tests/comparative/Digest/Sha512Spec.hs b/tests/comparative/Digest/Sha512Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/Digest/Sha512Spec.hs
@@ -0,0 +1,10 @@
+module Digest.Sha512Spec where
+
+import           Digest
+import qualified Digest.Sha512.CPortable    as CP
+import qualified Digest.Sha512.CHandWritten as CH
+
+spec :: Spec
+spec = digestSpec [ (CP.name, CP.digest)
+                  , (CH.name, CH.digest)
+                  ]
diff --git a/tests/comparative/Encrypt.hs b/tests/comparative/Encrypt.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/Encrypt.hs
@@ -0,0 +1,28 @@
+module Encrypt( encryptSpec
+              , decryptSpec
+              , module Compare
+              ) where
+import Compare
+
+encryptSpec :: ( Eq a
+               , Show k, Show n
+               , Arbitrary k , Arbitrary n
+               )
+            => [(String, k -> n -> ByteString -> a)]
+            -> Spec
+
+encryptSpec fs = prop mesg $ \ k n bs -> checkSame $ map (encryptIt k n bs) fs
+  where encryptIt k n bs (nm,f) = (nm, f k n bs)
+        mesg = message $ map fst fs
+
+
+decryptSpec :: ( Eq a
+               , Show k, Show n
+               , Arbitrary k , Arbitrary n
+               )
+            => [(String, k -> n -> ByteString -> a)]
+            -> Spec
+
+decryptSpec fs = prop mesg $ \ k n bs -> checkSame $ map (decryptIt k n bs) fs
+  where decryptIt k n bs (nm,f) = (nm, f k n bs)
+        mesg = message $ map fst fs
diff --git a/tests/comparative/Encrypt/ChaCha20Spec.hs b/tests/comparative/Encrypt/ChaCha20Spec.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/Encrypt/ChaCha20Spec.hs
@@ -0,0 +1,14 @@
+module Encrypt.ChaCha20Spec where
+
+import           Encrypt
+import qualified Encrypt.ChaCha20.CPortable    as CP
+import qualified Encrypt.ChaCha20.CHandWritten as CH
+
+spec :: Spec
+spec = do
+  describe "encryption" $ encryptSpec  [ (CP.name, CP.encrypt)
+                                       , (CH.name, CH.encrypt)
+                                       ]
+  describe "decryption" $ decryptSpec  [ (CP.name, CP.decrypt)
+                                       , (CH.name, CH.decrypt)
+                                       ]
diff --git a/tests/comparative/Main.hs b/tests/comparative/Main.hs
new file mode 100644
--- /dev/null
+++ b/tests/comparative/Main.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
diff --git a/tests/core/Tests/Core.hs b/tests/core/Tests/Core.hs
new file mode 100644
--- /dev/null
+++ b/tests/core/Tests/Core.hs
@@ -0,0 +1,6 @@
+-- Common stuff need by all test modules
+module Tests.Core (module E) where
+
+import Tests.Core.Imports        as E
+import Tests.Core.Instances      ()
+import Tests.Core.Utils          as E
diff --git a/tests/core/Tests/Core/Imports.hs b/tests/core/Tests/Core/Imports.hs
new file mode 100644
--- /dev/null
+++ b/tests/core/Tests/Core/Imports.hs
@@ -0,0 +1,20 @@
+-- Common imports.
+module Tests.Core.Imports( module E ) where
+import Data.ByteString         as E (ByteString, pack)
+import Data.ByteString.Char8        () -- import IsString instance for
+                                       -- byte string.
+import Foreign.Storable        as E (Storable, peek, poke)
+import Test.Hspec              as E
+import Test.Hspec.QuickCheck   as E
+import Test.QuickCheck         as E
+import Test.QuickCheck.Monadic as E
+
+import Raaz.Core               as E hiding ((===), Result, (.&.))
+
+import Raaz.Primitive.Blake2.Internal   as E
+import Raaz.Primitive.ChaCha20.Internal as E hiding ( Key )
+import Raaz.Primitive.Poly1305.Internal as E hiding ( Key )
+import Raaz.Primitive.Sha2.Internal     as E
+
+
+-- import Raaz.Hash.Sha1          as E
diff --git a/tests/core/Tests/Core/Instances.hs b/tests/core/Tests/Core/Instances.hs
new file mode 100644
--- /dev/null
+++ b/tests/core/Tests/Core/Instances.hs
@@ -0,0 +1,90 @@
+{-# LANGUAGE CPP                  #-}
+{-# LANGUAGE DataKinds            #-}
+{-# LANGUAGE FlexibleInstances    #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+-- | Some common instances that are required by the test cases.
+module Tests.Core.Instances where
+
+import Tests.Core.Imports
+import Tests.Core.Utils
+
+import Raaz.Primitive.Poly1305.Internal as Poly1305
+import Raaz.Core.Types.Internal
+import Raaz.Primitive.Keyed.Internal as Keyed
+
+
+instance Arbitrary w => Arbitrary (LE w) where
+  arbitrary = littleEndian <$> arbitrary
+
+instance Arbitrary w => Arbitrary (BE w) where
+  arbitrary = bigEndian <$> arbitrary
+
+instance Arbitrary w => Arbitrary (BYTES w) where
+  arbitrary = BYTES <$> arbitrary
+
+instance Arbitrary ByteString where
+  arbitrary = pack <$> arbitrary
+
+
+---------------   Arbitrary instances for Hashes ----------------
+
+instance Arbitrary Sha256 where
+  arbitrary = genEncodable
+
+instance Arbitrary Sha512 where
+  arbitrary = genEncodable
+
+instance Arbitrary Blake2b where
+  arbitrary = genEncodable
+
+instance Arbitrary Blake2s where
+  arbitrary = genEncodable
+
+---------------- Parameter block for Blake          -------------
+
+---------------- Arbitrary instaces of encoded data --------------
+
+instance Arbitrary Base16 where
+  arbitrary =  encodeByteString . pack <$> listOf arbitrary
+
+instance Arbitrary Base64 where
+  arbitrary =  encodeByteString . pack <$> listOf arbitrary
+
+------------------ For ChaCha20 types -------------------------
+
+instance Arbitrary (Key ChaCha20) where
+  arbitrary = genEncodable
+
+instance Arbitrary (Nounce ChaCha20) where
+  arbitrary = genEncodable
+
+instance Arbitrary (BlockCount ChaCha20) where
+  arbitrary = toEnum <$> arbitrary
+
+------------------ For XChaCha20 types -------------------------
+
+instance Arbitrary (Key XChaCha20) where
+  arbitrary = genEncodable
+
+instance Arbitrary (Key (Keyed prim)) where
+  arbitrary = Keyed.Key . pack <$> listOf1 arbitrary
+
+instance Arbitrary (Nounce XChaCha20) where
+  arbitrary = genEncodable
+
+instance Arbitrary (BlockCount XChaCha20) where
+  arbitrary = toEnum <$> arbitrary
+
+------------------ Arbitrary instances for Poly1305 -------------
+instance Arbitrary Poly1305.R where
+  arbitrary = genEncodable
+
+instance Arbitrary Poly1305.S where
+  arbitrary = genEncodable
+
+instance Arbitrary Poly1305.Poly1305 where
+  arbitrary = genEncodable
+
+instance Arbitrary (Key Poly1305) where
+  arbitrary = Poly1305.Key <$> arbitrary <*> arbitrary
diff --git a/tests/core/Tests/Core/Utils.hs b/tests/core/Tests/Core/Utils.hs
new file mode 100644
--- /dev/null
+++ b/tests/core/Tests/Core/Utils.hs
@@ -0,0 +1,87 @@
+module Tests.Core.Utils where
+
+import Raaz.Core.Types.Internal ( BYTES(..) )
+
+import Tests.Core.Imports hiding (length, replicate)
+import Prelude                   (length, replicate)
+
+import Foreign.Ptr           ( castPtr )
+import Data.ByteString as B  (concat)
+
+-- | Run a spec with a give key.
+with :: key -> (key -> Spec) -> Spec
+with key hmsto = hmsto key
+
+
+-- | Store and the load the given value.
+storeAndThenLoad :: EndianStore a
+                 => a -> IO a
+storeAndThenLoad a = allocaBuffer (sizeOf $ pure a) (runStoreLoad . castPtr)
+  where runStoreLoad ptr = store ptr a >> load ptr
+
+
+allocCast      :: BYTES Int -> (Ptr a -> IO c) -> IO c
+allocCast sz f = allocaBuffer sz $ f . castPtr
+
+storeAdjustAndPeek :: EndianStore a
+                   => a
+                   -> IO a
+storeAdjustAndPeek a
+  = allocCast sz $ \ ptr -> do store ptr a
+                               adjustEndian ptr 1
+                               peek ptr
+  where sz = sizeOf $ pure a
+
+pokeAdjustAndLoad :: EndianStore a
+                   => a
+                   -> IO a
+pokeAdjustAndLoad a
+  = allocCast sz $ \ ptr -> do poke ptr a
+                               adjustEndian ptr 1
+                               load ptr
+  where sz = sizeOf $ pure a
+
+
+
+basicEndianSpecs :: ( EndianStore a, Show a, Eq a, Arbitrary a)
+                  => a -> Spec
+basicEndianSpecs a = describe "Endian Checks" $ do
+  prop "store followed by load returns original value" $ \ x ->
+    storeAndThenLoad (x `asTypeOf` a) `shouldReturn` x
+
+  prop "store, adjust followed by peek should return the original value" $ \ x ->
+    storeAdjustAndPeek (x `asTypeOf` a) `shouldReturn` x
+
+  prop "poke, adjust followed by load should return the original value" $ \ x ->
+    pokeAdjustAndLoad (x `asTypeOf` a) `shouldReturn` x
+
+
+
+-- | Shorten a string to make it readable in tests.
+shortened :: String -> String
+shortened x | l <= 11    = paddedx
+            | otherwise  = prefix ++ "..." ++ suffix
+  where l = length x
+        prefix = take  4 x
+        suffix = drop (l - 4) x
+        paddedx = x ++ replicate (11 - l) ' '
+
+genEncodable :: (Encodable a, Storable a) => Gen a
+genEncodable = go undefined
+  where go :: (Encodable a, Storable a) => a -> Gen a
+        go x = unsafeFromByteString . pack <$> vector (fromEnum $ sizeOf $ pure x)
+
+-- | Generate bytestrings that are multiples of block size of a
+-- primitive.
+blocks :: Primitive prim => Proxy prim -> Gen ByteString
+blocks primProxy = B.concat <$> listOf singleBlock
+  where singleBlock = pack <$> vector sz
+        BYTES sz    = inBytes $ blocksOf 1 primProxy
+
+
+-- | Run a property with a given generator.
+feed :: (Testable pr, Show a) => Gen a -> (a -> IO pr) -> Property
+feed gen pr = monadicIO $ pick gen >>= (run . pr)
+
+repeated :: Monoid m => m -> Int -> m
+repeated m n = mconcat $ replicate n m
diff --git a/tests/message-digest/Implementation.hsig b/tests/message-digest/Implementation.hsig
new file mode 100644
--- /dev/null
+++ b/tests/message-digest/Implementation.hsig
@@ -0,0 +1,10 @@
+{-# LANGUAGE FlexibleInstances #-}
+
+-- This signature adds additional constraints on the primitive and its
+-- key so that we can give digest tests.
+signature Implementation where
+
+import Raaz.Core
+
+data Prim
+instance Show Prim
diff --git a/tests/message-digest/Tests/Digest.hs b/tests/message-digest/Tests/Digest.hs
new file mode 100644
--- /dev/null
+++ b/tests/message-digest/Tests/Digest.hs
@@ -0,0 +1,49 @@
+{-# LANGUAGE FlexibleContexts    #-}
+{-# LANGUAGE MonoLocalBinds      #-}
+{-# LANGUAGE DataKinds           #-}
+{-# LANGUAGE ScopedTypeVariables #-}
+-- Generic tests for hash.
+
+module Tests.Digest
+       ( digestsTo
+       , incrementalVsFull
+       ) where
+
+import Implementation
+import Interface
+
+import Tests.Core
+
+
+
+digestsTo :: ByteString
+          -> Prim
+          -> Spec
+digestsTo str h = it msg (digest str `shouldBe` h)
+  where msg   = unwords [ "hashes"
+                        , shortened $ show str
+                        , "to"
+                        , shortened $ show h
+                        ]
+
+incrDigest :: ByteString
+           -> IO Prim
+incrDigest bs = withMemory $ \ (cxt :: DigestCxt 1) ->
+  do startDigest cxt
+     updateDigest bs cxt
+     finaliseDigest cxt
+
+incrDigestList :: [ByteString]
+               -> IO Prim
+incrDigestList bsL = withMemory $ \ (cxt :: DigestCxt 1) ->
+  do startDigest cxt
+     mapM_ (`updateDigest` cxt) bsL
+     finaliseDigest cxt
+
+incrementalVsFull :: Spec
+incrementalVsFull = describe "Incremental vs Full digest" $ do
+  prop "for single source" $
+    \ bs -> incrDigest bs `shouldReturn` digest bs
+
+  prop "for multiple source" $
+    \ bsL -> incrDigestList bsL `shouldReturn` digest bsL
diff --git a/tests/standard-test-vectors/blake2/tests.json b/tests/standard-test-vectors/blake2/tests.json
new file mode 100644
--- /dev/null
+++ b/tests/standard-test-vectors/blake2/tests.json
@@ -0,0 +1,18434 @@
+[
+{
+    "hash": "blake2s",
+    "in": "",
+    "key": "",
+    "out": "69217a3079908094e11121d042354a7c1f55b6482ca1a51e1b250dfd1ed0eef9"
+},
+{
+    "hash": "blake2s",
+    "in": "00",
+    "key": "",
+    "out": "e34d74dbaf4ff4c6abd871cc220451d2ea2648846c7757fbaac82fe51ad64bea"
+},
+{
+    "hash": "blake2s",
+    "in": "0001",
+    "key": "",
+    "out": "ddad9ab15dac4549ba42f49d262496bef6c0bae1dd342a8808f8ea267c6e210c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102",
+    "key": "",
+    "out": "e8f91c6ef232a041452ab0e149070cdd7dd1769e75b3a5921be37876c45c9900"
+},
+{
+    "hash": "blake2s",
+    "in": "00010203",
+    "key": "",
+    "out": "0cc70e00348b86ba2944d0c32038b25c55584f90df2304f55fa332af5fb01e20"
+},
+{
+    "hash": "blake2s",
+    "in": "0001020304",
+    "key": "",
+    "out": "ec1964191087a4fe9df1c795342a02ffc191a5b251764856ae5b8b5769f0c6cd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405",
+    "key": "",
+    "out": "e1fa51618d7df4eb70cf0d5a9e906f806e9d19f7f4f01e3b621288e4120405d6"
+},
+{
+    "hash": "blake2s",
+    "in": "00010203040506",
+    "key": "",
+    "out": "598001fafbe8f94ec66dc827d012cfcbba2228569f448e89ea2208c8bf769293"
+},
+{
+    "hash": "blake2s",
+    "in": "0001020304050607",
+    "key": "",
+    "out": "c7e887b546623635e93e0495598f1726821996c2377705b93a1f636f872bfa2d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708",
+    "key": "",
+    "out": "c315a437dd28062a770d481967136b1b5eb88b21ee53d0329c5897126e9db02c"
+},
+{
+    "hash": "blake2s",
+    "in": "00010203040506070809",
+    "key": "",
+    "out": "bb473deddc055fea6228f207da575347bb00404cd349d38c18026307a224cbff"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a",
+    "key": "",
+    "out": "687e1873a8277591bb33d9adf9a13912efefe557cafc39a7952623e47255f16d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b",
+    "key": "",
+    "out": "1ac7ba754d6e2f94e0e86c46bfb262abbb74f450ef456d6b4d97aa80ce6da767"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c",
+    "key": "",
+    "out": "012c97809614816b5d9494477d4b687d15b96eb69c0e8074a8516f31224b5c98"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d",
+    "key": "",
+    "out": "91ffd26cfa4da5134c7ea262f7889c329f61f6a657225cc212f40056d986b3f4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e",
+    "key": "",
+    "out": "d97c828d8182a72180a06a78268330673f7c4e0635947c04c02323fd45c0a52d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f",
+    "key": "",
+    "out": "efc04cdc391c7e9119bd38668a534e65fe31036d6a62112e44ebeb11f9c57080"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f10",
+    "key": "",
+    "out": "992cf5c053442a5fbc4faf583e04e50bb70d2f39fbb6a503f89e56a63e18578a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f1011",
+    "key": "",
+    "out": "38640e9f21983e67b539caccae5ecf615ae2764f75a09c9c59b76483c1fbc735"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112",
+    "key": "",
+    "out": "213dd34c7efe4fb27a6b35f6b4000d1fe03281af3c723e5c9f94747a5f31cd3b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f10111213",
+    "key": "",
+    "out": "ec246eeeb9ced3f7ad33ed28660dd9bb0732513db4e2fa278b60cde3682a4ccd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314",
+    "key": "",
+    "out": "ac9b61d446648c3005d7892bf3a8719f4c8181cfdcbc2b79fef10a279b911095"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415",
+    "key": "",
+    "out": "7bf8b22959e34e3a43f7079223e83a9754617d391e213dfd808e41b9bead4ce7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516",
+    "key": "",
+    "out": "68d4b5d4fa0e302b64ccc5af792913ac4c88ec95c07ddf40694256eb88ce9f3d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314151617",
+    "key": "",
+    "out": "b2c2420f05f9abe36315919336b37e4e0fa33ff7e76a492767006fdb5d935462"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718",
+    "key": "",
+    "out": "134f61bbd0bbb69aed5343904551a3e6c1aa7dcdd77e903e7023eb7c60320aa7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516171819",
+    "key": "",
+    "out": "4693f9bff7d4f3986a7d176e6e06f72ad1490d805c99e25347b8de77b4db6d9b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a",
+    "key": "",
+    "out": "853e26f741953b0fd5bdb424e8ab9e8b3750eaa8ef61e47902c91e554e9c73b9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b",
+    "key": "",
+    "out": "f7de536361abaa0e158156cf0ea4f63a99b5e4054f8fa4c9d45f6285cad55694"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c",
+    "key": "",
+    "out": "4c230608860a99ae8d7bd5c2cc17fa52096b9a61bedb17cb7617864ad29ca7a6"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d",
+    "key": "",
+    "out": "aeb920ea87952dadb1fb759291e3388139a872865001886ed84752e93c250c2a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e",
+    "key": "",
+    "out": "aba4ad9b480b9df3d08ca5e87b0c2440d4e4ea21224c2eb42cbae469d089b931"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "key": "",
+    "out": "05825607d7fdf2d82ef4c3c8c2aea961ad98d60edff7d018983e21204c0d93d1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+    "key": "",
+    "out": "a742f8b6af82d8a6ca2357c5f1cf91defbd066267d75c048b352366585025962"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021",
+    "key": "",
+    "out": "2bcac89599000b42c95ae23835a713704ed79789c84fef149a874ff733f017a2"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122",
+    "key": "",
+    "out": "ac1ed07d048f105a9e5b7ab85b09a492d5baff14b8bfb0e9fd789486eea2b974"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
+    "key": "",
+    "out": "e48d0ecfaf497d5b27c25d99e156cb0579d440d6e31fb62473696dbf95e010e4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324",
+    "key": "",
+    "out": "12a91fadf8b21644fd0f934f3c4a8f62ba862ffd20e8e961154c15c13884ed3d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425",
+    "key": "",
+    "out": "7cbee96e139897dc98fbef3be81ad4d964d235cb12141fb66727e6e5df73a878"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526",
+    "key": "",
+    "out": "ebf66abb597ae572a7297cb0871e355accafad8377b8e78bf164ce2a18de4baf"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627",
+    "key": "",
+    "out": "71b933b07e4ff7818ce059d008829e453c6ff02ec0a7db393fc2d870f37a7286"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728",
+    "key": "",
+    "out": "7cf7c51331220b8d3ebaed9c29398a16d98156e2613cb088f2b0e08a1be4cf4f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829",
+    "key": "",
+    "out": "3e41a108e0f64ad276b979e1ce068279e16f7bc7e4aa1d211e17b81161df1602"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a",
+    "key": "",
+    "out": "886502a82ab47ba8d86710aa9de3d46ea65c47af6ee8de450cceb8b11b045f50"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b",
+    "key": "",
+    "out": "c021bc5f0954fee94f46ea09487e10a84840d02f64810bc08d9e551f7d416814"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c",
+    "key": "",
+    "out": "2030516e8a5fe19ae79c336fce26382a749d3fd0ec91e537d4bd2358c12dfb22"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d",
+    "key": "",
+    "out": "556698dac8317fd36dfbdf25a79cb112d5425860605cbaf507f23bf7e9f42afe"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e",
+    "key": "",
+    "out": "2f867ba67773fdc3e92fced99a6409ad39d0b880fde8f109a81730c4451d0178"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f",
+    "key": "",
+    "out": "172ec218f119dfae98896dff29dd9876c94af87417f9ae4c7014bb4e4b96afc7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
+    "key": "",
+    "out": "3f85814a18195f879aa962f95d26bd82a278f2b82320218f6b3bd6f7f667a6d9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031",
+    "key": "",
+    "out": "1b618fbaa566b3d498c12e982c9ec52e4da85a8c54f38f34c090394f23c184c1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132",
+    "key": "",
+    "out": "0c758fb5692ffd41a3575d0af00cc7fbf2cbe5905a58323a88ae4244f6e4c993"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233",
+    "key": "",
+    "out": "a931360cad628c7f12a6c1c4b753b0f4062aef3ce65a1ae3f19369dadf3ae23d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334",
+    "key": "",
+    "out": "cbac7d773b1e3b3c6691d7abb7e9df045c8ba19268ded153207f5e804352ec5d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435",
+    "key": "",
+    "out": "23a196d3802ed3c1b384019a82325840d32f71950c4580b03445e0898e14053c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536",
+    "key": "",
+    "out": "f4495470f226c8c214be08fdfad4bc4a2a9dbea9136a210df0d4b64929e6fc14"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637",
+    "key": "",
+    "out": "e290dd270b467f34ab1c002d340fa016257ff19e5833fdbbf2cb401c3b2817de"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738",
+    "key": "",
+    "out": "9fc7b5ded3c15042b2a6582dc39be016d24a682d5e61ad1eff9c63309848f706"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839",
+    "key": "",
+    "out": "8cca67a36d17d5e6341cb592fd7bef9926c9e3aa1027ea11a7d8bd260b576e04"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a",
+    "key": "",
+    "out": "409392f560f86831da4373ee5e0074260595d7bc24183b60ed700d4583d3f6f0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b",
+    "key": "",
+    "out": "2802165de090915546f3398cd849164a19f92adbc361adc99b0f20c8ea071054"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c",
+    "key": "",
+    "out": "ad839168d9f8a4be95ba9ef9a692f07256ae43fe6f9864e290691b0256ce50a9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d",
+    "key": "",
+    "out": "75fdaa5038c284b86d6e8affe8b2807e467b86600e79af3689fbc06328cbf894"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e",
+    "key": "",
+    "out": "e57cb79487dd57902432b250733813bd96a84efce59f650fac26e6696aefafc3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "key": "",
+    "out": "56f34e8b96557e90c1f24b52d0c89d51086acf1b00f634cf1dde9233b8eaaa3e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40",
+    "key": "",
+    "out": "1b53ee94aaf34e4b159d48de352c7f0661d0a40edff95a0b1639b4090e974472"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041",
+    "key": "",
+    "out": "05705e2a81757c14bd383ea98dda544eb10e6bc07bae435e2518dbe133525375"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142",
+    "key": "",
+    "out": "d8b2866e8a309db53e529ec32911d82f5ca16cff76216891a9676aa31aaa6c42"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243",
+    "key": "",
+    "out": "f5041c241270eb04c71ec2c95d4c38d803b1237b0f29fd4db3eb397669e88699"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344",
+    "key": "",
+    "out": "9a4ce077c349322f595e0ee79ed0da5fab66752cbfef8f87d0e9d0723c7530dd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445",
+    "key": "",
+    "out": "657b09f3d0f52b5b8f2f97163a0edf0c04f075408a07bbeb3a4101a891990d62"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546",
+    "key": "",
+    "out": "1e3f7bd5a58fa533344aa8ed3ac122bb9e70d4ef50d004530821948f5fe6315a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647",
+    "key": "",
+    "out": "80dccf3fd83dfd0d35aa28585922ab89d5313997673eaf905cea9c0b225c7b5f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748",
+    "key": "",
+    "out": "8a0d0fbf6377d83bb08b514b4b1c43acc95d751714f8925645cb6bc856ca150a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849",
+    "key": "",
+    "out": "9fa5b487738ad2844cc6348a901918f659a3b89e9c0dfeead30dd94bcf42ef8e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a",
+    "key": "",
+    "out": "80832c4a1677f5ea2560f668e9354dd36997f03728cfa55e1b38337c0c9ef818"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b",
+    "key": "",
+    "out": "ab37ddb683137e74080d026b590b96ae9bb447722f305a5ac570ec1df9b1743c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c",
+    "key": "",
+    "out": "3ee735a694c2559b693aa68629361e15d12265ad6a3dedf488b0b00fac9754ba"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d",
+    "key": "",
+    "out": "d6fcd23219b647e4cbd5eb2d0ad01ec8838a4b2901fc325cc3701981ca6c888b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e",
+    "key": "",
+    "out": "0520ec2f5bf7a755dacb50c6bf233e3515434763db0139ccd9faefbb8207612d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
+    "key": "",
+    "out": "aff3b75f3f581264d7661662b92f5ad37c1d32bd45ff81a4ed8adc9ef30dd989"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50",
+    "key": "",
+    "out": "d0dd650befd3ba63dc25102c627c921b9cbeb0b130686935b5c927cb7ccd5e3b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051",
+    "key": "",
+    "out": "e1149816b10a8514fb3e2cab2c08bee9f73ce76221701246a589bbb67302d8a9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152",
+    "key": "",
+    "out": "7da3f441de9054317e72b5dbf979da01e6bceebb8478eae6a22849d90292635c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253",
+    "key": "",
+    "out": "1230b1fc8a7d9215edc2d4a2decbdd0a6e216c924278c91fc5d10e7d60192d94"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354",
+    "key": "",
+    "out": "5750d716b4808f751febc38806ba170bf6d5199a7816be514e3f932fbe0cb871"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455",
+    "key": "",
+    "out": "6fc59b2f10feba954aa6820b3ca987ee81d5cc1da3c63ce827301c569dfb39ce"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556",
+    "key": "",
+    "out": "c7c3fe1eebdc7b5a939326e8ddb83e8bf2b780b65678cb62f208b040abdd35e2"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657",
+    "key": "",
+    "out": "0c75c1a15cf34a314ee478f4a5ce0b8a6b36528ef7a820696c3e4246c5a15864"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758",
+    "key": "",
+    "out": "216dc12a108569a3c7cdde4aed43a6c330139dda3ccc4a108905db3861899050"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859",
+    "key": "",
+    "out": "a57be6ae6756f28b02f59dadf7e0d7d8807f10fa15ced1ad3585521a1d995a89"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a",
+    "key": "",
+    "out": "816aef875953716cd7a581f732f53dd435dab66d09c361d2d6592de17755d8a8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b",
+    "key": "",
+    "out": "9a76893226693b6ea97e6a738f9d10fb3d0b43ae0e8b7d8123ea76ce97989c7e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c",
+    "key": "",
+    "out": "8daedb9a271529dbb7dc3b607fe5eb2d3211770758dd3b0a3593d2d7954e2d5b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d",
+    "key": "",
+    "out": "16dbc0aa5dd2c774f505100f733786d8a175fcbbb59c43e1fbff3e1eaf31cb4a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e",
+    "key": "",
+    "out": "8606cb899c6aeaf51b9db0fe4924a9fd5dabc19f8826f2bc1c1d7da14d2c2c99"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
+    "key": "",
+    "out": "8479731aeda57bd37eadb51a507e307f3bd95e69dbca94f3bc21726066ad6dfd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60",
+    "key": "",
+    "out": "58473a9ea82efa3f3b3d8fc83ed8863127b33ae8deae6307201edb6dde61de29"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061",
+    "key": "",
+    "out": "9a9255d53af116de8ba27ce35b4c7e15640657a0fcb888c70d95431dacd8f830"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162",
+    "key": "",
+    "out": "9eb05ffba39fd8596a45493e18d2510bf3ef065c51d6e13abe66aa57e05cfdb7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263",
+    "key": "",
+    "out": "81dcc3a505eace3f879d8f702776770f9df50e521d1428a85daf04f9ad2150e0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364",
+    "key": "",
+    "out": "e3e3c4aa3acbbc85332af9d564bc24165e1687f6b1adcbfae77a8f03c72ac28c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465",
+    "key": "",
+    "out": "6746c80b4eb56aea45e64e7289bba3edbf45ecf8206481ff6302122984cd526a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566",
+    "key": "",
+    "out": "2b628e52764d7d62c0868b212357cdd12d9149822f4e9845d918a08d1ae990c0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667",
+    "key": "",
+    "out": "e4bfe80d58c91994613909dc4b1a12496896c004af7b5701483de45d2823d78e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768",
+    "key": "",
+    "out": "ebb4ba150cef2734345b5d641bbed03a21eafae933c99e009212ef04574a8530"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869",
+    "key": "",
+    "out": "3966ec73b154acc697ac5cf5b24b40bdb0db9e398836d76d4b880e3b2af1aa27"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a",
+    "key": "",
+    "out": "ef7e4831b3a84636518d6e4bfce64a43db2a5dda9cca2b44f39033bdc40d6243"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b",
+    "key": "",
+    "out": "7abf6acf5c8e549ddbb15ae8d8b388c1c197e698737c9785501ed1f94930b7d9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c",
+    "key": "",
+    "out": "88018ded66813f0ca95def474c630692019967b9e36888dadd94124719b682f6"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d",
+    "key": "",
+    "out": "3930876b9fc7529036b008b1b8bb997522a441635a0c25ec02fb6d9026e55a97"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e",
+    "key": "",
+    "out": "0a4049d57e833b5695fac93dd1fbef3166b44b12ad11248662383ae051e15827"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f",
+    "key": "",
+    "out": "81dcc0678bb6a765e48c3209654fe90089ce44ff5618477e39ab286476df052b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70",
+    "key": "",
+    "out": "e69b3a36a4461912dc08346b11ddcb9db796f885fd01936e662fe29297b099a4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071",
+    "key": "",
+    "out": "5ac6503b0d8da6917646e6dcc87edc58e94245324cc204f4dd4af01563acd427"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172",
+    "key": "",
+    "out": "df6dda21359a30bc271780971c1abd56a6ef167e480887888e73a86d3bf605e9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273",
+    "key": "",
+    "out": "e8e6e47071e7b7df2580f225cfbbedf84ce67746626628d33097e4b7dc571107"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374",
+    "key": "",
+    "out": "53e40ead62051e19cb9ba8133e3e5c1ce00ddcad8acf342a224360b0acc14777"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475",
+    "key": "",
+    "out": "9ccd53fe80be786aa984638462fb28afdf122b34d78f4687ec632bb19de2371a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576",
+    "key": "",
+    "out": "cbd48052c48d788466a3e8118c56c97fe146e5546faaf93e2bc3c47e45939753"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677",
+    "key": "",
+    "out": "256883b14e2af44dadb28e1b34b2ac0f0f4c91c34ec9169e29036158acaa95b9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778",
+    "key": "",
+    "out": "4471b91ab42db7c4dd8490ab95a2ee8d04e3ef5c3d6fc71ac74b2b26914d1641"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879",
+    "key": "",
+    "out": "a5eb08038f8f1155ed86e631906fc13095f6bba41de5d4e795758ec8c8df8af1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a",
+    "key": "",
+    "out": "dc1db64ed8b48a910e060a6b866374c578784e9ac49ab2774092ac71501934ac"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b",
+    "key": "",
+    "out": "285413b2f2ee873d34319ee0bbfbb90f32da434cc87e3db5ed121bb398ed964b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c",
+    "key": "",
+    "out": "0216e0f81f750f26f1998bc3934e3e124c9945e685a60b25e8fbd9625ab6b599"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d",
+    "key": "",
+    "out": "38c410f5b9d4072050755b31dca89fd5395c6785eeb3d790f320ff941c5a93bf"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e",
+    "key": "",
+    "out": "f18417b39d617ab1c18fdf91ebd0fc6d5516bb34cf39364037bce81fa04cecb1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f",
+    "key": "",
+    "out": "1fa877de67259d19863a2a34bcc6962a2b25fcbf5cbecd7ede8f1fa36688a796"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80",
+    "key": "",
+    "out": "5bd169e67c82c2c2e98ef7008bdf261f2ddf30b1c00f9e7f275bb3e8a28dc9a2"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081",
+    "key": "",
+    "out": "c80abeebb669ad5deeb5f5ec8ea6b7a05ddf7d31ec4c0a2ee20b0b98caec6746"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182",
+    "key": "",
+    "out": "e76d3fbda5ba374e6bf8e50fadc3bbb9ba5c206ebdec89a3a54cf3dd84a07016"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283",
+    "key": "",
+    "out": "7bba9dc5b5db2071d17752b1044c1eced96aaf2dd46e9b433750e8ea0dcc1870"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384",
+    "key": "",
+    "out": "f29b1b1ab9bab163018ee3da15232cca78ec52dbc34eda5b822ec1d80fc21bd0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485",
+    "key": "",
+    "out": "9ee3e3e7e900f1e11d308c4b2b3076d272cf70124f9f51e1da60f37846cdd2f4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586",
+    "key": "",
+    "out": "70ea3b0176927d9096a18508cd123a290325920a9d00a89b5de04273fbc76b85"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687",
+    "key": "",
+    "out": "67de25c02a4aaba23bdc973c8bb0b5796d47cc0659d43dff1f97de174963b68e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788",
+    "key": "",
+    "out": "b2168e4e0f18b0e64100b517ed95257d73f0620df885c13d2ecf79367b384cee"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889",
+    "key": "",
+    "out": "2e7dec2428853b2c71760745541f7afe9825b5dd77df06511d8441a94bacc927"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a",
+    "key": "",
+    "out": "ca9ffac4c43f0b48461dc5c263bea3f6f00611ceacabf6f895ba2b0101dbb68d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b",
+    "key": "",
+    "out": "7410d42d8fd1d5e9d2f5815cb93417998828ef3c4230bfbd412df0a4a7a2507a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c",
+    "key": "",
+    "out": "5010f684516dccd0b6ee0852c2512b4dc0066cf0d56f35302978db8ae32c6a81"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d",
+    "key": "",
+    "out": "acaab585f7b79b719935ceb89523ddc54827f75c56883856154a56cdcd5ee988"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e",
+    "key": "",
+    "out": "666de5d1440fee7331aaf0123a62ef2d8ba57453a0769635ac6cd01e633f7712"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f",
+    "key": "",
+    "out": "a6f98658f6eabaf902d8b3871a4b101d16196e8a4b241e1558fe29966e103e8d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90",
+    "key": "",
+    "out": "891546a8b29f3047ddcfe5b00e45fd55756373105ea8637dfcff547b6ea9535f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091",
+    "key": "",
+    "out": "18dfbc1ac5d25b0761137dbd22c17c829d0f0ef1d82344e9c89c286694da24e8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192",
+    "key": "",
+    "out": "b54b9b67f8fed54bbf5a2666dbdf4b23cff1d1b6f4afc985b2e6d3305a9ff80f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293",
+    "key": "",
+    "out": "7db442e132ba59bc1289aa98b0d3e806004f8ec12811af1e2e33c69bfde729e1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394",
+    "key": "",
+    "out": "250f37cdc15e817d2f160d9956c71fe3eb5db74556e4adf9a4ffafba74010396"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495",
+    "key": "",
+    "out": "4ab8a3dd1ddf8ad43dab13a27f66a6544f290597fa96040e0e1db9263aa479f8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596",
+    "key": "",
+    "out": "ee61727a0766df939ccdc860334044c79a3c9b156200bc3aa32973483d8341ae"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697",
+    "key": "",
+    "out": "3f68c7ec63ac11ebb98f94b339b05c104984fda50103060144e5a2bfccc9da95"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798",
+    "key": "",
+    "out": "056f29816b8af8f56682bc4d7cf094111da7733e726cd13d6b3e8ea03e92a0d5"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899",
+    "key": "",
+    "out": "f5ec43a28acbeff1f3318a5bcac7c66ddb5230b79db2d105bcbe15f3c1148d69"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a",
+    "key": "",
+    "out": "2a6960ad1d8dd547555cfbd5e4600f1eaa1c8eda34de0374ec4a26eaaaa33b4e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b",
+    "key": "",
+    "out": "dcc1ea7baab93384f76b796866199754742f7b96d6b4c120165c04a6c4f5ce10"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c",
+    "key": "",
+    "out": "13d5df179221379c6a78c07c793ff53487cae6bf9fe882541ab0e735e3eada3b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d",
+    "key": "",
+    "out": "8c59e4407641a01e8ff91f9980dc236f4ecd6fcf52589a099a961633967714e1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e",
+    "key": "",
+    "out": "833b1ac6a251fd08fd6d908fea2a4ee1e040bca93fc1a38ec3820e0c10bd82ea"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
+    "key": "",
+    "out": "a244f927f3b40b8f6c391570c765418f2f6e708eac9006c51a7feff4af3b2b9e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0",
+    "key": "",
+    "out": "3d99ed9550cf1196e6c4d20c259620f858c3d703374c128ce7b590310c83046d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1",
+    "key": "",
+    "out": "2b35c47d7b87761f0ae43ac56ac27b9f25830367b595be8c240e94600c6e3312"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2",
+    "key": "",
+    "out": "5d11ed37d24dc767305cb7e1467d87c065ac4bc8a426de38991ff59aa8735d02"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3",
+    "key": "",
+    "out": "b836478e1ca0640dce6fd910a5096272c8330990cd97864ac2bf14ef6b23914a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4",
+    "key": "",
+    "out": "9100f946d6ccde3a597f90d39fc1215baddc7413643d85c21c3eee5d2dd32894"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5",
+    "key": "",
+    "out": "da70eedd23e663aa1a74b9766935b479222a72afba5c795158dad41a3bd77e40"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6",
+    "key": "",
+    "out": "f067ed6a0dbd43aa0a9254e69fd66bdd8acb87de936c258cfb02285f2c11fa79"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7",
+    "key": "",
+    "out": "715c99c7d57580cf9753b4c1d795e45a83fbb228c0d36fbe20faf39bdd6d4e85"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8",
+    "key": "",
+    "out": "e457d6ad1e67cb9bbd17cbd698fa6d7dae0c9b7ad6cbd6539634e32a719c8492"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9",
+    "key": "",
+    "out": "ece3ea8103e02483c64a70a4bdcee8ceb6278f2533f3f48dbeedfba94531d4ae"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa",
+    "key": "",
+    "out": "388aa5d3667a97c68d3d56f8f3ee8d3d36091f17fe5d1b0d5d84c93b2ffe40bd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab",
+    "key": "",
+    "out": "8b6b31b9ad7c3d5cd84bf98947b9cdb59df8a25ff738101013be4fd65e1dd1a3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac",
+    "key": "",
+    "out": "066291f6bbd25f3c853db7d8b95c9a1cfb9bf1c1c99fb95a9b7869d90f1c2903"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad",
+    "key": "",
+    "out": "a707efbccdceed42967a66f5539b93ed7560d467304016c4780d7755a565d4c4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae",
+    "key": "",
+    "out": "38c53dfb70be7e792b07a6a35b8a6a0aba02c5c5f38baf5c823fdfd9e42d657e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
+    "key": "",
+    "out": "f2911386501d9ab9d720cf8ad10503d5634bf4b7d12b56dfb74fecc6e4093f68"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
+    "key": "",
+    "out": "c6f2bdd52b81e6e4f6595abd4d7fb31f651169d00ff326926b34947b28a83959"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1",
+    "key": "",
+    "out": "293d94b18c98bb3223366b8ce74c28fbdf28e1f84a3350b0eb2d1804a577579b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2",
+    "key": "",
+    "out": "2c2fa5c0b51533165bc375c22e2781768270a383985d13bd6b67b6fd67f889eb"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3",
+    "key": "",
+    "out": "caa09b82b72562e43f4b2275c091918e624d911661cc811bb5faec51f6088ef7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4",
+    "key": "",
+    "out": "24761e45e674395379fb17729c78cb939e6f74c5dffb9c961f495982c3ed1fe3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5",
+    "key": "",
+    "out": "55b70a82131ec94888d7ab54a7c515255c3938bb10bc784dc9b67f076e341a73"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6",
+    "key": "",
+    "out": "6ab9057b977ebc3ca4d4ce74506c25cccdc566497c450b5415a39486f8657a03"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7",
+    "key": "",
+    "out": "24066deee0ecee15a45f0a326d0f8dbc79761ebb93cf8c0377af440978fcf994"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8",
+    "key": "",
+    "out": "20000d3f66ba76860d5a950688b9aa0d76cfea59b005d859914b1a46653a939b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9",
+    "key": "",
+    "out": "b92daa79603e3bdbc3bfe0f419e409b2ea10dc435beefe2959da16895d5dca1c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba",
+    "key": "",
+    "out": "e947948705b206d572b0e8f62f66a6551cbd6bc305d26ce7539a12f9aadf7571"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb",
+    "key": "",
+    "out": "3d67c1b3f9b23910e3d35e6b0f2ccf44a0b540a45c18ba3c36264dd48e96af6a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc",
+    "key": "",
+    "out": "c7558babda04bccb764d0bbf3358425141902d22391d9f8c59159fec9e49b151"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd",
+    "key": "",
+    "out": "0b732bb035675a50ff58f2c242e4710aece64670079c13044c79c9b7491f7000"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe",
+    "key": "",
+    "out": "d120b5ef6d57ebf06eaf96bc933c967b16cbe6e2bf00741c30aa1c54ba64801f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf",
+    "key": "",
+    "out": "58d212ad6f58aef0f80116b441e57f6195bfef26b61463edec1183cdb04fe76d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0",
+    "key": "",
+    "out": "b8836f51d1e29bdfdba325565360268b8fad627473edecef7eaefee837c74003"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1",
+    "key": "",
+    "out": "c547a3c124ae5685ffa7b8edaf96ec86f8b2d0d50cee8be3b1f0c76763069d9c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2",
+    "key": "",
+    "out": "5d168b769a2f67853d6295f7568be40bb7a16b8d65ba87635d1978d2ab11ba2a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3",
+    "key": "",
+    "out": "a2f675dc7302638cb60201064ca55077714d71fe096a315f2fe7401277caa5af"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4",
+    "key": "",
+    "out": "c8aab5cd0160ae78cd2e8ac5fb0e093cdb5c4b6052a0a97bb04216826fa7a437"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5",
+    "key": "",
+    "out": "ff68ca4035bfeb43fbf145fddd5e43f1cea54f11f7bee13058f027329a4a5fa4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6",
+    "key": "",
+    "out": "1d4e5487ae3c740f2ba6e541ac91bc2bfcd2999c518d807b426748803a350fd4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7",
+    "key": "",
+    "out": "6d244e1a06ce4ef578dd0f63aff0936706735119ca9c8d22d86c801414ab9741"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8",
+    "key": "",
+    "out": "decf7329dbcc827b8fc524c9431e8998029ece12ce93b7b2f3e769a941fb8cea"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9",
+    "key": "",
+    "out": "2fafcc0f2e63cbd07755be7b75ecea0adff9aa5ede2a52fdab4dfd0374cd483f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca",
+    "key": "",
+    "out": "aa85010dd46a546b535ef4cf5f07d65161e89828f3a77db7b9b56f0df59aae45"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb",
+    "key": "",
+    "out": "07e8e1ee732cb0d356c9c0d1069c89d17adf6a9a334f745ec7867332548ca8e9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc",
+    "key": "",
+    "out": "0e01e81cada8162bfd5f8a8c818a6c69fedf02ceb5208523cbe5313b89ca1053"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd",
+    "key": "",
+    "out": "6bb6c6472655084399852e00249f8cb247896d392b02d73b7f0dd818e1e29b07"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce",
+    "key": "",
+    "out": "42d4636e2060f08f41c882e76b396b112ef627cc24c43dd5f83a1d1a7ead711a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf",
+    "key": "",
+    "out": "4858c9a188b0234fb9a8d47d0b4133650a030bd0611b87c3892e94951f8df852"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0",
+    "key": "",
+    "out": "3fab3e36988d445a51c8783e531be3a02be40cd04796cfb61d40347442d3f794"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1",
+    "key": "",
+    "out": "ebabc49636bd433d2ec8f0e518732ef8fa21d4d071cc3bc46cd79fa38a28b810"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2",
+    "key": "",
+    "out": "a1d0343523b893fca84f47feb4a64d350a17d8eef5497ece697d02d79178b591"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3",
+    "key": "",
+    "out": "262ebfd9130b7d28760d08ef8bfd3b86cdd3b2113d2caef7ea951a303dfa3846"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4",
+    "key": "",
+    "out": "f76158edd50a154fa78203ed2362932fcb8253aae378903eded1e03f7021a257"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5",
+    "key": "",
+    "out": "26178e950ac722f67ae56e571b284c0207684a6334a17748a94d260bc5f55274"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6",
+    "key": "",
+    "out": "c378d1e493b40ef11fe6a15d9c2737a37809634c5abad5b33d7e393b4ae05d03"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7",
+    "key": "",
+    "out": "984bd8379101be8fd80612d8ea2959a7865ec9718523550107ae3938df32011b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8",
+    "key": "",
+    "out": "c6f25a812a144858ac5ced37a93a9f4759ba0b1c0fdc431dce35f9ec1f1f4a99"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9",
+    "key": "",
+    "out": "924c75c94424ff75e74b8b4e94358958b027b171df5e57899ad0d4dac37353b6"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da",
+    "key": "",
+    "out": "0af35892a63f45931f6846ed190361cd073089e077165714b50b81a2e3dd9ba1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb",
+    "key": "",
+    "out": "cc80cefb26c3b2b0daef233e606d5ffc80fa17427d18e30489673e06ef4b87f7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc",
+    "key": "",
+    "out": "c2f8c8117447f3978b0818dcf6f70116ac56fd184dd1278494e103fc6d74a887"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd",
+    "key": "",
+    "out": "bdecf6bfc1ba0df6e862c831992207796acc797968358828c06e7a51e090098f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde",
+    "key": "",
+    "out": "24d1a26e3dab02fe4572d2aa7dbd3ec30f0693db26f273d0ab2cb0c13b5e6451"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf",
+    "key": "",
+    "out": "ec56f58b09299a300b140565d7d3e68782b6e2fbeb4b7ea97ac057989061dd3f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0",
+    "key": "",
+    "out": "11a437c1aba3c119ddfab31b3e8c841deeeb913ef57f7e48f2c9cf5a28fa42bc"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1",
+    "key": "",
+    "out": "53c7e6114b850a2cb496c9b3c69a623eaea2cb1d33dd817e4765edaa6823c228"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2",
+    "key": "",
+    "out": "154c3e96fee5db14f8773e18af14857913509da999b46cdd3d4c169760c83ad2"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3",
+    "key": "",
+    "out": "40b9916f093e027a8786641818920620472fbcf68f701d1b680632e6996bded3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4",
+    "key": "",
+    "out": "24c4cbba07119831a726b05305d96da02ff8b148f0da440fe233bcaa32c72f6f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5",
+    "key": "",
+    "out": "5d201510250020b783689688abbf8ecf2594a96a08f2bfec6ce0574465dded71"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6",
+    "key": "",
+    "out": "043b97e336ee6fdbbe2b50f22af83275a4084805d2d5645962454b6c9b8053a0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7",
+    "key": "",
+    "out": "564835cbaea774948568be36cf52fcdd83934eb0a27512dbe3e2db47b9e6635a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8",
+    "key": "",
+    "out": "f21c33f47bde40a2a101c9cde8027aaf61a3137de2422b30035a04c270894183"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9",
+    "key": "",
+    "out": "9db0ef74e66cbb842eb0e07343a03c5c567e372b3f23b943c788a4f250f67891"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea",
+    "key": "",
+    "out": "ab8d08655ff1d3fe8758d562235fd23e7cf9dcaad658872a49e5d3183b6ccebd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb",
+    "key": "",
+    "out": "6f27f77e7bcf46a1e963ade0309733543031dccdd47caac174d7d27ce8077e8b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec",
+    "key": "",
+    "out": "e3cd54da7e444caa6207569525a670ebae1278de4e3fe2684b3e33f5ef90cc1b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced",
+    "key": "",
+    "out": "b2c3e33a51d22c4c08fc0989c873c9cc4150579b1e6163fa694ad51d53d712dc"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee",
+    "key": "",
+    "out": "be7fda983e13189b4c77e0a80920b6e0e0ea80c3b84dbe7e7117d253f48112f4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef",
+    "key": "",
+    "out": "b6008c28fae08aa427e5bd3aad36f10021f16c77cfeabed07f97cc7dc1f1284a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0",
+    "key": "",
+    "out": "6e4e6760c538f2e97b3adbfbbcde57f8966b7ea8fcb5bf7efec913fd2a2b0c55"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1",
+    "key": "",
+    "out": "4ae51fd1834aa5bd9a6f7ec39fc663338dc5d2e20761566d90cc68b1cb875ed8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2",
+    "key": "",
+    "out": "b673aad75ab1fdb5401abfa1bf89f3add2ebc468df3624a478f4fe859d8d55e2"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3",
+    "key": "",
+    "out": "13c9471a9855913539836660398da0f3f99ada08479c69d1b7fcaa3461dd7e59"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4",
+    "key": "",
+    "out": "2c11f4a7f99a1d23a58bb636350fe849f29cbac1b2a1112d9f1ed5bc5b313ccd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5",
+    "key": "",
+    "out": "c7d3c0706b11ae741c05a1ef150dd65b5494d6d54c9a86e2617854e6aeeebbd9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6",
+    "key": "",
+    "out": "194e10c93893afa064c3ac04c0dd808d791c3d4b7556e89d8d9cb225c4b33339"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7",
+    "key": "",
+    "out": "6fc4988b8f78546b1688991845908f134b6a482e6994b3d48317bf08db292185"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8",
+    "key": "",
+    "out": "5665beb8b0955525813b5981cd142ed4d03fba38a6f3e5ad268e0cc270d1cd11"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9",
+    "key": "",
+    "out": "b883d68f5fe51936431ba4256738053b1d0426d4cb64b16e83badc5e9fbe3b81"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa",
+    "key": "",
+    "out": "53e7b27ea59c2f6dbb50769e43554df35af89f4822d0466b007dd6f6deafff02"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb",
+    "key": "",
+    "out": "1f1a0229d4640f01901588d9dec22d13fc3eb34a61b32938efbf5334b2800afa"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc",
+    "key": "",
+    "out": "c2b405afa0fa6668852aee4d88040853fab800e72b57581418e5506f214c7d1f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd",
+    "key": "",
+    "out": "c08aa1c286d709fdc7473744977188c895ba011014247e4efa8d07e78fec695c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
+    "key": "",
+    "out": "f03f5789d3336b80d002d59fdf918bdb775b00956ed5528e86aa994acb38fe2d"
+},
+{
+    "hash": "blake2s",
+    "in": "",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "48a8997da407876b3d79c0d92325ad3b89cbb754d86ab71aee047ad345fd2c49"
+},
+{
+    "hash": "blake2s",
+    "in": "00",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "40d15fee7c328830166ac3f918650f807e7e01e177258cdc0a39b11f598066f1"
+},
+{
+    "hash": "blake2s",
+    "in": "0001",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6bb71300644cd3991b26ccd4d274acd1adeab8b1d7914546c1198bbe9fc9d803"
+},
+{
+    "hash": "blake2s",
+    "in": "000102",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1d220dbe2ee134661fdf6d9e74b41704710556f2f6e5a091b227697445dbea6b"
+},
+{
+    "hash": "blake2s",
+    "in": "00010203",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f6c3fbadb4cc687a0064a5be6e791bec63b868ad62fba61b3757ef9ca52e05b2"
+},
+{
+    "hash": "blake2s",
+    "in": "0001020304",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "49c1f21188dfd769aea0e911dd6b41f14dab109d2b85977aa3088b5c707e8598"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fdd8993dcd43f696d44f3cea0ff35345234ec8ee083eb3cada017c7f78c17143"
+},
+{
+    "hash": "blake2s",
+    "in": "00010203040506",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e6c8125637438d0905b749f46560ac89fd471cf8692e28fab982f73f019b83a9"
+},
+{
+    "hash": "blake2s",
+    "in": "0001020304050607",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "19fc8ca6979d60e6edd3b4541e2f967ced740df6ec1eaebbfe813832e96b2974"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a6ad777ce881b52bb5a4421ab6cdd2dfba13e963652d4d6d122aee46548c14a7"
+},
+{
+    "hash": "blake2s",
+    "in": "00010203040506070809",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f5c4b2ba1a00781b13aba0425242c69cb1552f3f71a9a3bb22b4a6b4277b46dd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e33c4c9bd0cc7e45c80e65c77fa5997fec7002738541509e68a9423891e822a3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fba16169b2c3ee105be6e1e650e5cbf40746b6753d036ab55179014ad7ef6651"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f5c4bec6d62fc608bf41cc115f16d61c7efd3ff6c65692bbe0afffb1fede7475"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a4862e76db847f05ba17ede5da4e7f91b5925cf1ad4ba12732c3995742a5cd6e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "65f4b860cd15b38ef814a1a804314a55be953caa65fd758ad989ff34a41c1eea"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "19ba234f0a4f38637d1839f9d9f76ad91c8522307143c97d5f93f69274cec9a7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f10",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1a67186ca4a5cb8e65fca0e2ecbc5ddc14ae381bb8bffeb9e0a103449e3ef03c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f1011",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "afbea317b5a2e89c0bd90ccf5d7fd0ed57fe585e4be3271b0a6bf0f5786b0f26"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f1b01558ce541262f5ec34299d6fb4090009e3434be2f49105cf46af4d2d4124"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f10111213",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "13a0a0c86335635eaa74ca2d5d488c797bbb4f47dc07105015ed6a1f3309efce"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1580afeebebb346f94d59fe62da0b79237ead7b1491f5667a90e45edf6ca8b03"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "20be1a875b38c573dd7faaa0de489d655c11efb6a552698e07a2d331b5f655c3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "be1fe3c4c04018c54c4a0f6b9a2ed3c53abe3a9f76b4d26de56fc9ae95059a99"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314151617",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e3e3ace537eb3edd8463d9ad3582e13cf86533ffde43d668dd2e93bbdbd7195a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "110c50c0bf2c6e7aeb7e435d92d132ab6655168e78a2decdec3330777684d9c1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516171819",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e9ba8f505c9c80c08666a701f3367e6cc665f34b22e73c3c0417eb1c2206082f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "26cd66fca02379c76df12317052bcafd6cd8c3a7b890d805f36c49989782433a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "213f3596d6e3a5d0e9932cd2159146015e2abc949f4729ee2632fe1edb78d337"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1015d70108e03be1c702fe97253607d14aee591f2413ea6787427b6459ff219a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3ca989de10cfe609909472c8d35610805b2f977734cf652cc64b3bfc882d5d89"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b6156f72d380ee9ea6acd190464f2307a5c179ef01fd71f99f2d0f7a57360aea"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c03bc642b20959cbe133a0303e0c1abff3e31ec8e1a328ec8565c36decff5265"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2c3e08176f760c6264c3a2cd66fec6c3d78de43fc192457b2a4a660a1e0eb22b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f738c02f3c1b190c512b1a32deabf353728e0e9ab034490e3c3409946a97aeec"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8b1880df301cc963418811088964839287ff7fe31c49ea6ebd9e48bdeee497c5"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1e75cb21c60989020375f1a7a242839f0b0b68973a4c2a05cf7555ed5aaec4c1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "62bf8a9c32a5bccf290b6c474d75b2a2a4093f1a9e27139433a8f2b3bce7b8d7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "166c8350d3173b5e702b783dfd33c66ee0432742e9b92b997fd23c60dc6756ca"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "044a14d822a90cacf2f5a101428adc8f4109386ccb158bf905c8618b8ee24ec3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "387d397ea43a994be84d2d544afbe481a2000f55252696bba2c50c8ebd101347"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "56f8ccf1f86409b46ce36166ae9165138441577589db08cbc5f66ca29743b9fd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9706c092b04d91f53dff91fa37b7493d28b576b5d710469df79401662236fc03"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "877968686c068ce2f7e2adcff68bf8748edf3cf862cfb4d3947a3106958054e3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8817e5719879acf7024787eccdb271035566cfa333e049407c0178ccc57a5b9f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8938249e4b50cadaccdf5b18621326cbb15253e33a20f5636e995d72478de472"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f164abba4963a44d107257e3232d90aca5e66a1408248c51741e991db5227756"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d05563e2b1cba0c4a2a1e8bde3a1a0d9f5b40c85a070d6f5fb21066ead5d0601"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "03fbb16384f0a3866f4c3117877666efbf124597564b293d4aab0d269fabddfa"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5fa8486ac0e52964d1881bbe338eb54be2f719549224892057b4da04ba8b3475"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cdfabcee46911111236a31708b2539d71fc211d9b09c0d8530a11e1dbf6eed01"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4f82de03b9504793b82a07a0bdcdff314d759e7b62d26b784946b0d36f916f52"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "259ec7f173bcc76a0994c967b4f5f024c56057fb79c965c4fae41875f06a0e4c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "193cc8e7c3e08bb30f5437aa27ade1f142369b246a675b2383e6da9b49a9809e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5c10896f0e2856b2a2eee0fe4a2c1633565d18f0e93e1fab26c373e8f829654d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f16012d93f28851a1eb989f5d0b43f3f39ca73c9a62d5181bff237536bd348c3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2966b3cfae1e44ea996dc5d686cf25fa053fb6f67201b9e46eade85d0ad6b806"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ddb8782485e900bc60bcf4c33a6fd585680cc683d516efa03eb9985fad8715fb"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4c4d6e71aea05786413148fc7a786b0ecaf582cff1209f5a809fba8504ce662c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fb4c5e86d7b2229b99b8ba6d94c247ef964aa3a2bae8edc77569f28dbbff2d4e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e94f526de9019633ecd54ac6120f23958d7718f1e7717bf329211a4faeed4e6d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cbd6660a10db3f23f7a03d4b9d4044c7932b2801ac89d60bc9eb92d65a46c2a0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8818bbd3db4dc123b25cbba5f54c2bc4b3fcf9bf7d7a7709f4ae588b267c4ece"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c65382513f07460da39833cb666c5ed82e61b9e998f4b0c4287cee56c3cc9bcd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8975b0577fd35566d750b362b0897a26c399136df07bababbde6203ff2954ed4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "21fe0ceb0052be7fb0f004187cacd7de67fa6eb0938d927677f2398c132317a8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2ef73f3c26f12d93889f3c78b6a66c1d52b649dc9e856e2c172ea7c58ac2b5e3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "388a3cd56d73867abb5f8401492b6e2681eb69851e767fd84210a56076fb3dd3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "af533e022fc9439e4e3cb838ecd18692232adf6fe9839526d3c3dd1b71910b1a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "751c09d41a9343882a81cd13ee40818d12eb44c6c7f40df16e4aea8fab91972a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5b73ddb68d9d2b0aa265a07988d6b88ae9aac582af83032f8a9b21a2e1b7bf18"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3da29126c7c5d7f43e64242a79feaa4ef3459cdeccc898ed59a97f6ec93b9dab"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "566dc920293da5cb4fe0aa8abda8bbf56f552313bff19046641e3615c1e3ed3f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4115bea02f73f97f629e5c5590720c01e7e449ae2a6697d4d2783321303692f9"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4ce08f4762468a7670012164878d68340c52a35e66c1884d5c864889abc96677"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "81ea0b7804124e0c22ea5fc71104a2afcb52a1fa816f3ecb7dcb5d9dea1786d0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fe362733b05f6bedaf9379d7f7936ede209b1f8323c3922549d9e73681b5db7b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "eff37d30dfd20359be4e73fdf40d27734b3df90a97a55ed745297294ca85d09f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "172ffc67153d12e0ca76a8b6cd5d4731885b39ce0cac93a8972a18006c8b8baf"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c47957f1cc88e83ef9445839709a480a036bed5f88ac0fcc8e1e703ffaac132c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "30f3548370cfdceda5c37b569b6175e799eef1a62aaa943245ae7669c227a7b5"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c95dcb3cf1f27d0eef2f25d2413870904a877c4a56c2de1e83e2bc2ae2e46821"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d5d0b5d705434cd46b185749f66bfb5836dcdf6ee549a2b7a4aee7f58007caaf"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bbc124a712f15d07c300e05b668389a439c91777f721f8320c1c9078066d2c7e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a451b48c35a6c7854cfaae60262e76990816382ac0667e5a5c9e1b46c4342ddf"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b0d150fb55e778d01147f0b5d89d99ecb20ff07e5e6760d6b645eb5b654c622b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "34f737c0ab219951eee89a9f8dac299c9d4c38f33fa494c5c6eefc92b6db08bc"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1a62cc3a00800dcbd99891080c1e098458193a8cc9f970ea99fbeff00318c289"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cfce55ebafc840d7ae48281c7fd57ec8b482d4b704437495495ac414cf4a374b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6746facf71146d999dabd05d093ae586648d1ee28e72617b99d0f0086e1e45bf"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "571ced283b3f23b4e750bf12a2caf1781847bd890e43603cdc5976102b7bb11b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cfcb765b048e35022c5d089d26e85a36b005a2b80493d03a144e09f409b6afd1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4050c7a27705bb27f42089b299f3cbe5054ead68727e8ef9318ce6f25cd6f31d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "184070bd5d265fbdc142cd1c5cd0d7e414e70369a266d627c8fba84fa5e84c34"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9edda9a4443902a9588c0d0ccc62b930218479a6841e6fe7d43003f04b1fd643"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e412feef7908324a6da1841629f35d3d358642019310ec57c614836b63d30763"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1a2b8edff3f9acc1554fcbae3cf1d6298c6462e22e5eb0259684f835012bd13f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "288c4ad9b9409762ea07c24a41f04f69a7d74bee2d95435374bde946d7241c7b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "805691bb286748cfb591d3aebe7e6f4e4dc6e2808c65143cc004e4eb6fd09d43"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d4ac8d3a0afc6cfa7b460ae3001baeb36dadb37da07d2e8ac91822df348aed3d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c376617014d20158bced3d3ba552b6eccf84e62aa3eb650e90029c84d13eea69"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c41f09f43cecae7293d6007ca0a357087d5ae59be500c1cd5b289ee810c7b082"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "03d1ced1fba5c39155c44b7765cb760c78708dcfc80b0bd8ade3a56da8830b29"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "09bde6f152218dc92c41d7f45387e63e5869d807ec70b821405dbd884b7fcf4b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "71c9036e18179b90b37d39e9f05eb89cc5fc341fd7c477d0d7493285faca08a4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5916833ebb05cd919ca7fe83b692d3205bef72392b2cf6bb0a6d43f994f95f11"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f63aab3ec641b3b024964c2b437c04f6043c4c7e0279239995401958f86bbe54"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f172b180bfb09740493120b6326cbdc561e477def9bbcfd28cc8c1c5e3379a31"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cb9b89cc18381dd9141ade588654d4e6a231d5bf49d4d59ac27d869cbe100cf3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7bd8815046fdd810a923e1984aaebdcdf84d87c8992d68b5eeb460f93eb3c8d7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "607be66862fd08ee5b19facac09dfdbcd40c312101d66e6ebd2b841f1b9a9325"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9fe03bbe69ab1834f5219b0da88a08b30a66c5913f0151963c360560db0387b3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "90a83585717b75f0e9b725e055eeeeb9e7a028ea7e6cbc07b20917ec0363e38c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "336ea0530f4a7469126e0218587ebbde3358a0b31c29d200f7dc7eb15c6aadd8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a79e76dc0abca4396f0747cd7b748df913007626b1d659da0c1f78b9303d01a3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "44e78a773756e0951519504d7038d28d0213a37e0ce375371757bc996311e3b8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "77ac012a3f754dcfeab5eb996be9cd2d1f96111b6e49f3994df181f28569d825"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ce5a10db6fccdaf140aaa4ded6250a9c06e9222bc9f9f3658a4aff935f2b9f3a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ecc203a7fe2be4abd55bb53e6e673572e0078da8cd375ef430cc97f9f80083af"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "14a5186de9d7a18b0412b8563e51cc5433840b4a129a8ff963b33a3c4afe8ebb"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "13f8ef95cb86e6a638931c8e107673eb76ba10d7c2cd70b9d9920bbeed929409"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0b338f4ee12f2dfcb78713377941e0b0632152581d1332516e4a2cab1942cca4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "eaab0ec37b3b8ab796e9f57238de14a264a076f3887d86e29bb5906db5a00e02"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "23cb68b8c0e6dc26dc27766ddc0a13a99438fd55617aa4095d8f969720c872df"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "091d8ee30d6f2968d46b687dd65292665742de0bb83dcc0004c72ce10007a549"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7f507abc6d19ba00c065a876ec5657868882d18a221bc46c7a6912541f5bc7ba"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a0607c24e14e8c223db0d70b4d30ee88014d603f437e9e02aa7dafa3cdfbad94"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ddbfea75cc467882eb3483ce5e2e756a4f4701b76b445519e89f22d60fa86e06"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0c311f38c35a4fb90d651c289d486856cd1413df9b0677f53ece2cd9e477c60a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "46a73a8dd3e70f59d3942c01df599def783c9da82fd83222cd662b53dce7dbdf"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ad038ff9b14de84a801e4e621ce5df029dd93520d0c2fa38bff176a8b1d1698c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ab70c5dfbd1ea817fed0cd067293abf319e5d7901c2141d5d99b23f03a38e748"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1fffda67932b73c8ecaf009a3491a026953babfe1f663b0697c3c4ae8b2e7dcb"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b0d2cc19472dd57f2b17efc03c8d58c2283dbb19da572f7755855aa9794317a0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a0d19a6ee33979c325510e276622df41f71583d07501b87071129a0ad94732a5"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "724642a7032d1062b89e52bea34b75df7d8fe772d9fe3c93ddf3c4545ab5a99b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ade5eaa7e61f672d587ea03dae7d7b55229c01d06bc0a5701436cbd18366a626"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "013b31ebd228fcdda51fabb03bb02d60ac20ca215aafa83bdd855e3755a35f0b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "332ed40bb10dde3c954a75d7b8999d4b26a1c063c1dc6e32c1d91bab7bbb7d16"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c7a197b3a05b566bcc9facd20e441d6f6c2860ac9651cd51d6b9d2cdeeea0390"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bd9cf64ea8953c037108e6f654914f3958b68e29c16700dc184d94a21708ff60"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8835b0ac021151df716474ce27ce4d3c15f0b2dab48003cf3f3efd0945106b9a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3bfefa3301aa55c080190cffda8eae51d9af488b4c1f24c3d9a75242fd8ea01d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "08284d14993cd47d53ebaecf0df0478cc182c89c00e1859c84851686ddf2c1b7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1ed7ef9f04c2ac8db6a864db131087f27065098e69c3fe78718d9b947f4a39d0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c161f2dcd57e9c1439b31a9dd43d8f3d7dd8f0eb7cfac6fb25a0f28e306f0661"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c01969ad34c52caf3dc4d80d19735c29731ac6e7a92085ab9250c48dea48a3fc"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1720b3655619d2a52b3521ae0e49e345cb3389ebd6208acaf9f13fdacca8be49"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "756288361c83e24c617cf95c905b22d017cdc86f0bf1d658f4756c7379873b7f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e7d0eda3452693b752abcda1b55e276f82698f5f1605403eff830bea0071a394"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2c82ecaa6b84803e044af63118afe544687cb6e6c7df49ed762dfd7c8693a1bc"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6136cbf4b441056fa1e2722498125d6ded45e17b52143959c7f4d4e395218ac2"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "721d3245aafef27f6a624f47954b6c255079526ffa25e9ff77e5dcff473b1597"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9dd2fbd8cef16c353c0ac21191d509eb28dd9e3e0d8cea5d26ca839393851c3a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b2394ceacdebf21bf9df2ced98e58f1c3a4bbbff660dd900f62202d6785cc46e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "57089f222749ad7871765f062b114f43ba20ec56422a8b1e3f87192c0ea718c6"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e49a9459961cd33cdf4aae1b1078a5dea7c040e0fea340c93a724872fc4af806"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ede67f720effd2ca9c88994152d0201dee6b0a2d2c077aca6dae29f73f8b6309"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e0f434bf22e3088039c21f719ffc67f0f2cb5e98a7a0194c76e96bf4e8e17e61"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "277c04e2853484a4eba910ad336d01b477b67cc200c59f3c8d77eef8494f29cd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "156d5747d0c99c7f27097d7b7e002b2e185cb72d8dd7eb424a0321528161219f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "20ddd1ed9b1ca803946d64a83ae4659da67fba7a1a3eddb1e103c0f5e03e3a2c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f0af604d3dabbf9a0f2a7d3dda6bd38bba72c6d09be494fcef713ff10189b6e6"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9802bb87def4cc10c4a5fd49aa58dfe2f3fddb46b4708814ead81d23ba95139b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4f8ce1e51d2fe7f24043a904d898ebfc91975418753413aa099b795ecb35cedb"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bddc6514d7ee6ace0a4ac1d0e068112288cbcf560454642705630177cba608bd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d635994f6291517b0281ffdd496afa862712e5b3c4e52e4cd5fdae8c0e72fb08"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "878d9ca600cf87e769cc305c1b35255186615a73a0da613b5f1c98dbf81283ea"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a64ebe5dc185de9fdde7607b6998702eb23456184957307d2fa72e87a47702d6"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ce50eab7b5eb52bdc9ad8e5a480ab780ca9320e44360b1fe37e03f2f7ad7de01"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "eeddb7c0db6e30abe66d79e327511e61fcebbc29f159b40a86b046ecf0513823"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "787fc93440c1ec96b5ad01c16cf77916a1405f9426356ec921d8dff3ea63b7e0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7f0d5eab47eefda696c0bf0fbf86ab216fce461e9303aba6ac374120e890e8df"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b68004b42f14ad029f4c2e03b1d5eb76d57160e26476d21131bef20ada7d27f4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b0c4eb18ae250b51a41382ead92d0dc7455f9379fc9884428e4770608db0faec"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f92b7a870c059f4d46464c824ec96355140bdce681322cc3a992ff103e3fea52"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5364312614813398cc525d4c4e146edeb371265fba19133a2c3d2159298a1742"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f6620e68d37fb2af5000fc28e23b832297ecd8bce99e8be4d04e85309e3d3374"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5316a27969d7fe04ff27b283961bffc3bf5dfb32fb6a89d101c6c3b1937c2871"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "81d1664fdf3cb33c24eebac0bd64244b77c4abea90bbe8b5ee0b2aafcf2d6a53"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "345782f295b0880352e924a0467b5fbc3e8f3bfbc3c7e48b67091fb5e80a9442"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "794111ea6cd65e311f74ee41d476cb632ce1e4b051dc1d9e9d061a19e1d0bb49"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2a85daf6138816b99bf8d08ba2114b7ab07975a78420c1a3b06a777c22dd8bcb"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "89b0d5f289ec16401a069a960d0b093e625da3cf41ee29b59b930c5820145455"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d0fdcb543943fc27d20864f52181471b942cc77ca675bcb30df31d358ef7b1eb"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b17ea8d77063c709d4dc6b879413c343e3790e9e62ca85b7900b086f6b75c672"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e71a3e2c274db842d92114f217e2c0eac8b45093fdfd9df4ca7162394862d501"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c0476759ab7aa333234f6b44f5fd858390ec23694c622cb986e769c78edd733e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9ab8eabb1416434d85391341d56993c55458167d4418b19a0f2ad8b79a83a75b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7992d0bbb15e23826f443e00505d68d3ed7372995a5c3e498654102fbcd0964e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c021b30085151435df33b007ccecc69df1269f39ba25092bed59d932ac0fdc28"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "91a25ec0ec0d9a567f89c4bfe1a65a0e432d07064b4190e27dfb81901fd3139b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5950d39a23e1545f301270aa1a12f2e6c453776e4d6355de425cc153f9818867"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d79f14720c610af179a3765d4b7c0968f977962dbf655b521272b6f1e194488e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e9531bfc8b02995aeaa75ba27031fadbcbf4a0dab8961d9296cd7e84d25d6006"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "34e9c26a01d7f16181b454a9d1623c233cb99d31c694656e9413aca3e918692f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d9d7422f437bd439ddd4d883dae2a08350173414be78155133fff1964c3d7972"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4aee0c7aaf075414ff1793ead7eaca601775c615dbd60b640b0a9f0ce505d435"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6bfdd15459c83b99f096bfb49ee87b063d69c1974c6928acfcfb4099f8c4ef67"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9fd1c408fd75c336193a2a14d94f6af5adf050b80387b4b010fb29f4cc72707c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "13c88480a5d00d6c8c7ad2110d76a82d9b70f4fa6696d4e5dd42a066dcaf9920"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "820e725ee25fe8fd3a8d5abe4c46c3ba889de6fa9191aa22ba67d5705421542b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "32d93a0eb02f42fbbcaf2bad0085b282e46046a4df7ad10657c9d6476375b93e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "adc5187905b1669cd8ec9c721e1953786b9d89a9bae30780f1e1eab24a00523c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e90756ff7f9ad810b239a10ced2cf9b2284354c1f8c7e0accc2461dc796d6e89"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1251f76e56978481875359801db589a0b22f86d8d634dc04506f322ed78f17e8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3afa899fd980e73ecb7f4d8b8f291dc9af796bc65d27f974c6f193c9191a09fd"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "aa305be26e5deddc3c1010cbc213f95f051c785c5b431e6a7cd048f161787528"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8ea1884ff32e9d10f039b407d0d44e7e670abd884aeee0fb757ae94eaa97373d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d482b2155d4dec6b4736a1f1617b53aaa37310277d3fef0c37ad41768fc235b4"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4d413971387e7a8898a8dc2a27500778539ea214a2dfe9b3d7e8ebdce5cf3db3"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "696e5d46e6c57e8796e4735d08916e0b7929b3cf298c296d22e9d3019653371c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1f5647c1d3b088228885865c8940908bf40d1a8272821973b160008e7a3ce2eb"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b6e76c330f021a5bda65875010b0edf09126c0f510ea849048192003aef4c61c"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3cd952a0beada41abb424ce47f94b42be64e1ffb0fd0782276807946d0d0bc55"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "98d92677439b41b7bb513312afb92bcc8ee968b2e3b238cecb9b0f34c9bb63d0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ecbca2cf08ae57d517ad16158a32bfa7dc0382eaeda128e91886734c24a0b29d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "942cc7c0b52e2b16a4b89fa4fc7e0bf609e29a08c1a8543452b77c7bfd11bb28"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8a065d8b61a0dffb170d5627735a76b0e9506037808cba16c345007c9f79cf8f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1b9fa19714659c78ff413871849215361029ac802b1cbcd54e408bd87287f81f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8dab071bcd6c7292a9ef727b4ae0d86713301da8618d9a48adce55f303a869a1"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8253e3e7c7b684b9cb2beb014ce330ff3d99d17abbdbabe4f4d674ded53ffc6b"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f195f321e9e3d6bd7d074504dd2ab0e6241f92e784b1aa271ff648b1cab6d7f6"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "27e4cc72090f241266476a7c09495f2db153d5bcbd761903ef79275ec56b2ed8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "899c2405788e25b99a1846355e646d77cf400083415f7dc5afe69d6e17c00023"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a59b78c4905744076bfee894de707d4f120b5c6893ea0400297d0bb834727632"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "59dc78b105649707a2bb4419c48f005400d3973de3736610230435b10424b24f"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c0149d1d7e7a6353a6d906efe728f2f329fe14a4149a3ea77609bc42b975ddfa"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a32f241474a6c16932e9243be0cf09bcdc7e0ca0e7a6a1b9b1a0f01e41502377"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b239b2e4f81841361c1339f68e2c359f929af9ad9f34e01aab4631ad6d5500b0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "85fb419c7002a3e0b4b6ea093b4c1ac6936645b65dac5ac15a8528b7b94c1754"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9619720625f190b93a3fad186ab314189633c0d3a01e6f9bc8c4a8f82f383dbf"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7d620d90fe69fa469a6538388970a1aa09bb48a2d59b347b97e8ce71f48c7f46"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "294383568596fb37c75bbacd979c5ff6f20a556bf8879cc72924855df9b8240e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "16b18ab314359c2b833c1c6986d48c55a9fc97cde9a3c1f10a3177140f73f738"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8cbbdd14bc33f04cf45813e4a153a273d36adad5ce71f499eeb87fb8ac63b729"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "69c9a498db174ecaefcc5a3ac9fdedf0f813a5bec727f1e775babdec7718816e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b462c3be40448f1d4f80626254e535b08bc9cdcff599a768578d4b2881a8e3f0"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "553e9d9c5f360ac0b74a7d44e5a391dad4ced03e0c24183b7e8ecabdf1715a64"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7a7c55a56fa9ae51e655e01975d8a6ff4ae9e4b486fcbe4eac044588f245ebea"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2afdf3c82abc4867f5de111286c2b3be7d6e48657ba923cfbf101a6dfcf9db9a"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "41037d2edcdce0c49b7fb4a6aa0999ca66976c7483afe631d4eda283144f6dfc"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c4466f8497ca2eeb4583a0b08e9d9ac74395709fda109d24f2e4462196779c5d"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "75f609338aa67d969a2ae2a2362b2da9d77c695dfd1df7224a6901db932c3364"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "68606ceb989d5488fc7cf649f3d7c272ef055da1a93faecd55fe06f6967098ca"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "44346bdeb7e052f6255048f0d9b42c425bab9c3dd24168212c3ecf1ebf34e6ae"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8e9cf6e1f366471f2ac7d2ee9b5e6266fda71f8f2e4109f2237ed5f8813fc718"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "84bbeb8406d250951f8c1b3e86a7c010082921833dfd9555a2f909b1086eb4b8"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ee666f3eef0f7e2a9c222958c97eaf35f51ced393d714485ab09a069340fdf88"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c153d34a65c47b4a62c5cacf24010975d0356b2f32c8f5da530d338816ad5de6"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9fc5450109e1b779f6c7ae79d56c27635c8dd426c5a9d54e2578db989b8c3b4e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d12bf3732ef4af5c22fa90356af8fc50fcb40f8f2ea5c8594737a3b3d5abdbd7"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "11030b9289bba5af65260672ab6fee88b87420acef4a1789a2073b7ec2f2a09e"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "69cb192b8444005c8c0ceb12c846860768188cda0aec27a9c8a55cdee2123632"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "db444c15597b5f1a03d1f9edd16e4a9f43a667cc275175dfa2b704e3bb1a9b83"
+},
+{
+    "hash": "blake2s",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3fb735061abc519dfe979e54c1ee5bfad0a9d858b3315bad34bde999efd724dd"
+},
+{
+    "hash": "blake2b",
+    "in": "",
+    "key": "",
+    "out": "786a02f742015903c6c6fd852552d272912f4740e15847618a86e217f71f5419d25e1031afee585313896444934eb04b903a685b1448b755d56f701afe9be2ce"
+},
+{
+    "hash": "blake2b",
+    "in": "00",
+    "key": "",
+    "out": "2fa3f686df876995167e7c2e5d74c4c7b6e48f8068fe0e44208344d480f7904c36963e44115fe3eb2a3ac8694c28bcb4f5a0f3276f2e79487d8219057a506e4b"
+},
+{
+    "hash": "blake2b",
+    "in": "0001",
+    "key": "",
+    "out": "1c08798dc641aba9dee435e22519a4729a09b2bfe0ff00ef2dcd8ed6f8a07d15eaf4aee52bbf18ab5608a6190f70b90486c8a7d4873710b1115d3debbb4327b5"
+},
+{
+    "hash": "blake2b",
+    "in": "000102",
+    "key": "",
+    "out": "40a374727302d9a4769c17b5f409ff32f58aa24ff122d7603e4fda1509e919d4107a52c57570a6d94e50967aea573b11f86f473f537565c66f7039830a85d186"
+},
+{
+    "hash": "blake2b",
+    "in": "00010203",
+    "key": "",
+    "out": "77ddf4b14425eb3d053c1e84e3469d92c4cd910ed20f92035e0c99d8a7a86cecaf69f9663c20a7aa230bc82f60d22fb4a00b09d3eb8fc65ef547fe63c8d3ddce"
+},
+{
+    "hash": "blake2b",
+    "in": "0001020304",
+    "key": "",
+    "out": "cbaa0ba7d482b1f301109ae41051991a3289bc1198005af226c5e4f103b66579f461361044c8ba3439ff12c515fb29c52161b7eb9c2837b76a5dc33f7cb2e2e8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405",
+    "key": "",
+    "out": "f95d45cf69af5c2023bdb505821e62e85d7caedf7beda12c0248775b0c88205eeb35af3a90816f6608ce7dd44ec28db1140614e1ddebf3aa9cd1843e0fad2c36"
+},
+{
+    "hash": "blake2b",
+    "in": "00010203040506",
+    "key": "",
+    "out": "8f945ba700f2530e5c2a7df7d5dce0f83f9efc78c073fe71ae1f88204a4fd1cf70a073f5d1f942ed623aa16e90a871246c90c45b621b3401a5ddbd9df6264165"
+},
+{
+    "hash": "blake2b",
+    "in": "0001020304050607",
+    "key": "",
+    "out": "e998e0dc03ec30eb99bb6bfaaf6618acc620320d7220b3af2b23d112d8e9cb1262f3c0d60d183b1ee7f096d12dae42c958418600214d04f5ed6f5e718be35566"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708",
+    "key": "",
+    "out": "6a9a090c61b3410aede7ec9138146ceb2c69662f460c3da53c6515c1eb31f41ca3d280e567882f95cf664a94147d78f42cfc714a40d22ef19470e053493508a2"
+},
+{
+    "hash": "blake2b",
+    "in": "00010203040506070809",
+    "key": "",
+    "out": "29102511d749db3cc9b4e335fa1f5e8faca8421d558f6a3f3321d50d044a248ba595cfc3efd3d2adc97334da732413f5cbf4751c362ba1d53862ac1e8dabeee8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a",
+    "key": "",
+    "out": "c97a4779d47e6f77729b5917d0138abb35980ab641bd73a8859eb1ac98c05362ed7d608f2e9587d6ba9e271d343125d40d933a8ed04ec1fe75ec407c7a53c34e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b",
+    "key": "",
+    "out": "10f0dc91b9f845fb95fad6860e6ce1adfa002c7fc327116d44d047cd7d5870d772bb12b5fac00e02b08ac2a0174d0446c36ab35f14ca31894cd61c78c849b48a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c",
+    "key": "",
+    "out": "dea9101cac62b8f6a3c650f90eea5bfae2653a4eafd63a6d1f0f132db9e4f2b1b662432ec85b17bcac41e775637881f6aab38dd66dcbd080f0990a7a6e9854fe"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d",
+    "key": "",
+    "out": "441ffaa08cd79dff4afc9b9e5b5620eec086730c25f661b1d6fbfbd1cec3148dd72258c65641f2fca5eb155fadbcabb13c6e21dc11faf72c2a281b7d56145f19"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e",
+    "key": "",
+    "out": "444b240fe3ed86d0e2ef4ce7d851edde22155582aa0914797b726cd058b6f45932e0e129516876527b1dd88fc66d7119f4ab3bed93a61a0e2d2d2aeac336d958"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f",
+    "key": "",
+    "out": "bfbabbef45554ccfa0dc83752a19cc35d5920956b301d558d772282bc867009168e9e98606bb5ba73a385de5749228c925a85019b71f72fe29b3cd37ca52efe6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f10",
+    "key": "",
+    "out": "9c4d0c3e1cdbbf485bec86f41cec7c98373f0e09f392849aaa229ebfbf397b22085529cb7ef39f9c7c2222a514182b1effaa178cc3687b1b2b6cbcb6fdeb96f8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f1011",
+    "key": "",
+    "out": "477176b3bfcbadd7657c23c24625e4d0d674d1868f006006398af97aa41877c8e70d3d14c3bbc9bbcdcea801bd0e1599af1f3eec67405170f4e26c964a57a8b7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112",
+    "key": "",
+    "out": "a78c490eda3173bb3f10dee52f110fb1c08e0302230b85ddd7c11257d92de148785ef00c039c0bb8eb9808a35b2d8c080f572859714c9d4069c5bcaf090e898e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f10111213",
+    "key": "",
+    "out": "58d023397beb5b4145cb2255b07d74290b36d9fd1e594afbd8eea47c205b2efbfe6f46190faf95af504ab072e36f6c85d767a321bfd7f22687a4abbf494a689c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314",
+    "key": "",
+    "out": "4001ec74d5a46fd29c2c3cdbe5d1b9f20e51a941be98d2a4e1e2fbf866a672121db6f81a514cfd10e7358d571bdba48e4ce708b9d124894bc0b5ed554935f73a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415",
+    "key": "",
+    "out": "ccd1b22dab6511225d2401ea2d8625d206a12473cc732b615e5640cefff0a4adf971b0e827a619e0a80f5db9ccd0962329010d07e34a2064e731c520817b2183"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516",
+    "key": "",
+    "out": "b4a0a9e3574edb9e1e72aa31e39cc5f30dbf943f8cabc408449654a39131e66d718a18819143e3ea96b4a1895988a1c0056cf2b6e04f9ac19d657383c2910c44"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314151617",
+    "key": "",
+    "out": "447becab16630608d39f4f058b16f7af95b85a76aa0fa7cea2b80755fb76e9c804f2ca78f02643c915fbf2fce5e19de86000de03b18861815a83126071f8a37b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718",
+    "key": "",
+    "out": "54e6dab9977380a5665822db93374eda528d9beb626f9b94027071cb26675e112b4a7fec941ee60a81e4d2ea3ff7bc52cfc45dfbfe735a1c646b2cf6d6a49b62"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516171819",
+    "key": "",
+    "out": "3ea62625949e3646704d7e3c906f82f6c028f540f5f72a794b0c57bf97b7649bfeb90b01d3ca3e829de21b3826e6f87014d3c77350cb5a15ff5d468a81bec160"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a",
+    "key": "",
+    "out": "213cfe145c54a33691569980e5938c8883a46d84d149c8ff1a67cd287b4d49c6da69d3a035443db085983d0efe63706bd5b6f15a7da459e8d50a19093db55e80"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b",
+    "key": "",
+    "out": "5716c4a38f38db104e494a0a27cbe89a26a6bb6f499ec01c8c01aa7cb88497e75148cd6eee12a7168b6f78ab74e4be749251a1a74c38c86d6129177e2889e0b6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c",
+    "key": "",
+    "out": "030460a98bdf9ff17cd96404f28fc304f2b7c04eaade53677fd28f788ca22186b8bc80dd21d17f8549c711aff0e514e19d4e15f5990252a03e082f28dc2052f6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d",
+    "key": "",
+    "out": "19e7f1ccee88a10672333e390cf22013a8c734c6cb9eab41f17c3c8032a2e4aca0569ea36f0860c7a1af28fa476840d66011168859334a9e4ef9cc2e61a0e29e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e",
+    "key": "",
+    "out": "29f8b8c78c80f2fcb4bdf7825ed90a70d625ff785d262677e250c04f3720c888d03f8045e4edf3f5285bd39d928a10a7d0a5df00b8484ac2868142a1e8bea351"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "key": "",
+    "out": "5c52920a7263e39d57920ca0cb752ac6d79a04fef8a7a216a1ecb7115ce06d89fd7d735bd6f4272555dba22c2d1c96e6352322c62c5630fde0f4777a76c3de2c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+    "key": "",
+    "out": "83b098f262251bf660064a9d3511ce7687a09e6dfbb878299c30e93dfb43a9314db9a600337db26ebeedaf2256a96dabe9b29e7573ad11c3523d874dde5be7ed"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021",
+    "key": "",
+    "out": "9447d98aa5c9331352f43d3e56d0a9a9f9581865998e2885cc56dd0a0bd5a7b50595bd10f7529bcd31f37dc16a1465d594079667da2a3fcb70401498837cedeb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122",
+    "key": "",
+    "out": "867732f2feeb23893097561ac710a4bff453be9cfbedba8ba324f9d312a82d732e1b83b829fdcd177b882ca0c1bf544b223be529924a246a63cf059bfdc50a1b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
+    "key": "",
+    "out": "f15ab26d4cdfcf56e196bb6ba170a8fccc414de9285afd98a3d3cf2fb88fcbc0f19832ac433a5b2cc2392a4ce34332987d8d2c2bef6c3466138db0c6e42fa47b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324",
+    "key": "",
+    "out": "2813516d68ed4a08b39d648aa6aacd81e9d655ecd5f0c13556c60fdf0d333ea38464b36c02baccd746e9575e96c63014f074ae34a0a25b320f0fbedd6acf7665"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425",
+    "key": "",
+    "out": "d3259afca8a48962fa892e145acf547f26923ae8d4924c8a531581526b04b44c7af83c643ef5a0bc282d36f3fb04c84e28b351f40c74b69dc7840bc717b6f15f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526",
+    "key": "",
+    "out": "f14b061ae359fa31b989e30332bfe8de8cc8cdb568e14be214a2223b84caab7419549ecfcc96ce2acec119485d87d157d3a8734fc426597d64f36570ceaf224d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627",
+    "key": "",
+    "out": "55e70b01d1fbf8b23b57fb62e26c2ce54f13f8fa2464e6eb98d16a6117026d8b90819012496d4071ebe2e59557ece3519a7aa45802f9615374877332b73490b3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728",
+    "key": "",
+    "out": "25261eb296971d6e4a71b2928e64839c67d422872bf9f3c31993615222de9f8f0b2c4be8548559b4b354e736416e3218d4e8a1e219a4a6d43e1a9a521d0e75fc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829",
+    "key": "",
+    "out": "08307f347c41294e34bb54cb42b1522d22f824f7b6e5db50fda096798e181a8f026fa27b4ae45d52a62caf9d5198e24a4913c6671775b2d723c1239bfbf016d7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a",
+    "key": "",
+    "out": "1e5c62e7e9bfa1b118747a2de08b3ca10112af96a46e4b22c3fc06f9bfee4eb5c49e057a4a4886234324572576bb9b5ecfde0d99b0de4f98ec16e4d1b85fa947"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b",
+    "key": "",
+    "out": "c74a77395fb8bc126447454838e561e962853dc7eb49a1e3cb67c3d0851f3e39517be8c350ac910903d49cd2bfdf545c99316d0346170b739f0add5d533c2cfc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c",
+    "key": "",
+    "out": "0dd57b423cc01eb2861391eb886a0d17079b933fc76eb3fc08a19f8a74952cb68f6bcdc644f77370966e4d13e80560bcf082ef0479d48fbbab4df03b53a4e178"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d",
+    "key": "",
+    "out": "4d8dc3923edccdfce70072398b8a3da5c31fcb3ee3b645c85f717cbaeb4b673a19394425a585bfb464d92f1597d0b754d163f97ced343b25db5a70ef48ebb34f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e",
+    "key": "",
+    "out": "f0a50553e4dfb0c4e3e3d3ba82034857e3b1e50918f5b8a7d698e10d242b0fb544af6c92d0c3aaf9932220416117b4e78ecb8a8f430e13b82a5915290a5819c5"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f",
+    "key": "",
+    "out": "b15543f3f736086627cc5365e7e8988c2ef155c0fd4f428961b00d1526f04d6d6a658b4b8ed32c5d8621e7f4f8e8a933d9ecc9dd1b8333cbe28cfc37d9719e1c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
+    "key": "",
+    "out": "7b4fa158e415fef023247264cbbe15d16d91a44424a8db707eb1e2033c30e9e1e7c8c0864595d2cb8c580eb47e9d16abbd7e44e824f7cedb7def57130e52cfe9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031",
+    "key": "",
+    "out": "60424ff23234c34dc9687ad502869372cc31a59380186bc2361c835d972f49666eb1ac69629de646f03f9b4db9e2ace093fbfdf8f20ab5f98541978be8ef549f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132",
+    "key": "",
+    "out": "7406018ce704d84f5eb9c79fea97da345699468a350ee0b2d0f3a4bf2070304ea862d72a51c57d3064947286f531e0eaf7563702262e6c724abf5ed8c8398d17"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233",
+    "key": "",
+    "out": "14ef5c6d647b3bd1e6e32006c231199810de5c4dc88e70240273b0ea18e651a3eb4f5ca3114b8a56716969c7cda27e0c8db832ad5e89a2dc6cb0adbe7d93abd1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334",
+    "key": "",
+    "out": "38cf6c24e3e08bcf1f6cf3d1b1f65b905239a3118033249e448113ec632ea6dc346feeb2571c38bd9a7398b2221280328002b23e1a45adaffe66d93f6564eaa2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435",
+    "key": "",
+    "out": "6cd7208a4bc7e7e56201bbba02a0f489cd384abe40afd4222f158b3d986ee72a54c50fb64fd4ed2530eda2c8af2928a0da6d4f830ae1c9db469dfd970f12a56f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536",
+    "key": "",
+    "out": "659858f0b5c9edab5b94fd732f6e6b17c51cc096104f09beb3afc3aa467c2ecf885c4c6541effa9023d3b5738ae5a14d867e15db06fe1f9d1127b77e1aabb516"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637",
+    "key": "",
+    "out": "26cca0126f5d1a813c62e5c71001c046f9c92095704550be5873a495a999ad010a4f79491f24f286500adce1a137bc2084e4949f5b7294cefe51ecaff8e95cba"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738",
+    "key": "",
+    "out": "4147c1f55172788c5567c561feef876f621fff1ce87786b8467637e70dfbcd0dbdb6415cb600954ab9c04c0e457e625b407222c0fe1ae21b2143688ada94dc58"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839",
+    "key": "",
+    "out": "5b1bf154c62a8af6e93d35f18f7f90abb16a6ef0e8d1aecd118bf70167bab2af08935c6fdc0663ce74482d17a8e54b546d1c296631c65f3b522a515839d43d71"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a",
+    "key": "",
+    "out": "9f600419a4e8f4fb834c24b0f7fc13bf4e279d98e8a3c765ee934917403e3a66097182ea21453cb63ebbe8b73a9c2167596446438c57627f330badd4f569f7d6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b",
+    "key": "",
+    "out": "457ef6466a8924fd8011a34471a5a1ac8ccd9bd0d07a97414ac943021ce4b9e4b9c8db0a28f016ed43b1542481990022147b313e194671131e708dd43a3ed7dc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c",
+    "key": "",
+    "out": "9997b2194d9af6dfcb9143f41c0ed83d3a3f4388361103d38c2a49b280a581212715fd908d41c651f5c715ca38c0ce2830a37e00e508ced1bcdc320e5e4d1e2e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d",
+    "key": "",
+    "out": "5c6bbf16baa180f986bd40a1287ed4c549770e7284858fc47bc21ab95ebbf3374b4ee3fd9f2af60f3395221b2acc76f2d34c132954049f8a3a996f1e32ec84e5"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e",
+    "key": "",
+    "out": "d10bf9a15b1c9fc8d41f89bb140bf0be08d2f3666176d13baac4d381358ad074c9d4748c300520eb026daeaea7c5b158892fde4e8ec17dc998dcd507df26eb63"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "key": "",
+    "out": "2fc6e69fa26a89a5ed269092cb9b2a449a4409a7a44011eecad13d7c4b0456602d402fa5844f1a7a758136ce3d5d8d0e8b86921ffff4f692dd95bdc8e5ff0052"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40",
+    "key": "",
+    "out": "fcbe8be7dcb49a32dbdf239459e26308b84dff1ea480df8d104eeff34b46fae98627b450c2267d48c0946a697c5b59531452ac0484f1c84e3a33d0c339bb2e28"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041",
+    "key": "",
+    "out": "a19093a6e3bcf5952f850f2030f69b9606f147f90b8baee3362da71d9f35b44ef9d8f0a7712ba1877fddcd2d8ea8f1e5a773d0b745d4725605983a2de901f803"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142",
+    "key": "",
+    "out": "3c2006423f73e268fa59d2920377eb29a4f9a8b462be15983ee3b85ae8a78e992633581a9099893b63db30241c34f643027dc878279af5850d7e2d4a2653073a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243",
+    "key": "",
+    "out": "d0f2f2e3787653f77cce2fa24835785bbd0c433fc779465a115149905a9dd1cb827a628506d457fcf124a0c2aef9ce2d2a0a0f63545570d8667ff9e2eba07334"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344",
+    "key": "",
+    "out": "78a9fc048e25c6dcb5de45667de8ffdd3a93711141d594e9fa62a959475da6075ea8f0916e84e45ad911b75467077ee52d2c9aebf4d58f20ce4a3a00458b05d4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445",
+    "key": "",
+    "out": "45813f441769ab6ed37d349ff6e72267d76ae6bb3e3c612ec05c6e02a12af5a37c918b52bf74267c3f6a3f183a8064ff84c07b193d08066789a01accdb6f9340"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546",
+    "key": "",
+    "out": "956da1c68d83a7b881e01b9a966c3c0bf27f68606a8b71d457bd016d4c41dd8a380c709a296cb4c6544792920fd788835771a07d4a16fb52ed48050331dc4c8b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647",
+    "key": "",
+    "out": "df186c2dc09caa48e14e942f75de5ac1b7a21e4f9f072a5b371e09e07345b0740c76177b01278808fec025eded9822c122afd1c63e6f0ce2e32631041063145c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748",
+    "key": "",
+    "out": "87475640966a9fdcd6d3a3b5a2cca5c08f0d882b10243c0ec1bf3c6b1c37f2cd3212f19a057864477d5eaf8faed73f2937c768a0af415e84bbce6bd7de23b660"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849",
+    "key": "",
+    "out": "c3b573bbe10949a0fbd4ff884c446f2229b76902f9dfdbb8a0353da5c83ca14e8151bbaac82fd1576a009adc6f1935cf26edd4f1fb8da483e6c5cd9d8923adc3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a",
+    "key": "",
+    "out": "b09d8d0bba8a7286e43568f7907550e42036d674e3c8fc34d8ca46f771d6466b70fb605875f6a863c877d12f07063fdc2e90ccd459b1910dcd52d8f10b2b0a15"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b",
+    "key": "",
+    "out": "af3a22bf75b21abfb0acd54422ba1b7300a952eff02ebeb65b5c234471a98df32f4f9643ce1904108a168767924280bd76c83f8c82d9a79d9259b195362a2a04"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c",
+    "key": "",
+    "out": "bf4ff2221b7e6957a724cd964aa3d5d0d9941f540413752f4699d8101b3e537508bf09f8508b317736ffd265f2847aa7d84bd2d97569c49d632aed9945e5fa5e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d",
+    "key": "",
+    "out": "9c6b6b78199b1bdacb4300e31479fa622a6b5bc80d4678a6078f88a8268cd7206a2799e8d4621a464ef6b43dd8adffe97caf221b22b6b8778b149a822aefbb09"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e",
+    "key": "",
+    "out": "890656f09c99d280b5ecb381f56427b813751bc652c7828078b23a4af83b4e3a61fdbac61f89bee84ea6bee760c047f25c6b0a201c69a38fd6fd971af18588bb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
+    "key": "",
+    "out": "31a046f7882ffe6f83ce472e9a0701832ec7b3f76fbcfd1df60fe3ea48fde1651254247c3fd95e100f9172731e17fd5297c11f4bb328363ca361624a81af797c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50",
+    "key": "",
+    "out": "27a60b2d00e7a671d47d0aec2a686a0ac04b52f40ab6629028eb7d13f4baa99ac0fe46ee6c814944f2f4b4d20e9378e4847ea44c13178091e277b87ea7a55711"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051",
+    "key": "",
+    "out": "8b5ccef194162c1f19d68f91e0b0928f289ec5283720840c2f73d253111238dcfe94af2b59c2c1ca2591901a7bc060e7459b6c47df0f71701a35cc0aa831b5b6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152",
+    "key": "",
+    "out": "57ab6c4b2229aeb3b70476d803cd63812f107ce6da17fed9b17875e8f86c724f49e024cbf3a1b8b119c50357652b81879d2ade2d588b9e4f7cedba0e4644c9ee"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253",
+    "key": "",
+    "out": "0190a8dac320a739f322e15731aa140ddaf5bed294d5c82e54fef29f214e18aafaa84f8be99af62950266b8f901f15dd4c5d35516fc35b4cab2e96e4695bbe1c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354",
+    "key": "",
+    "out": "d14d7c4c415eeb0e10b159224bea127ebd84f9591c702a330f5bb7bb7aa44ea39de6ed01f18da7adf40cfb97c5d152c27528824b21e239526af8f36b214e0cfb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455",
+    "key": "",
+    "out": "be28c4be706970488fac7d29c3bd5c4e986085c4c3332f1f3fd30973db614164ba2f31a78875ffdc150325c88327a9443ed04fdfe5be93876d1628560c764a80"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556",
+    "key": "",
+    "out": "031da1069e3a2e9c3382e436ffd79df74b1ca6a8adb2deabe676ab45994cbc054f037d2f0eace858d32c14e2d1c8b46077308e3bdc2c1b53172ecf7a8c14e349"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657",
+    "key": "",
+    "out": "4665cef8ba4db4d0acb118f2987f0bb09f8f86aa445aa3d5fc9a8b346864787489e8fcecc125d17e9b56e12988eac5ecc7286883db0661b8ff05da2afff30fe4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758",
+    "key": "",
+    "out": "63b7032e5f930cc9939517f9e986816cfbec2be59b9568b13f2ead05bae7777cab620c6659404f7409e4199a3be5f7865aa7cbdf8c4253f7e8219b1bd5f46fea"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859",
+    "key": "",
+    "out": "9f09bf093a2b0ff8c2634b49e37f1b2135b447aa9144c9787dbfd92129316c99e88aab8a21fdef2372d1189aec500f95775f1f92bfb45545e4259fb9b7b02d14"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a",
+    "key": "",
+    "out": "f9f8493c68088807df7f6a2693d64ea59f03e9e05a223e68524ca32195a4734b654fcea4d2734c866cf95c889fb10c49159be2f5043dc98bb55e02ef7bdcb082"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b",
+    "key": "",
+    "out": "3c9a7359ab4febce07b20ac447b06a240b7fe1dae5439c49b60b5819f7812e4c172406c1aac316713cf0dded1038077258e2eff5b33913d9d95caeb4e6c6b970"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c",
+    "key": "",
+    "out": "ad6aab8084510e822cfce8625d62cf4de655f4763884c71e80bab9ac9d5318dba4a6033ed29084e65216c031606ca17615dcfe3ba11d26851ae0999ca6e232cf"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d",
+    "key": "",
+    "out": "156e9e6261374c9dc884f36e70f0fe1ab9297997b836fa7d170a9c9ebf575b881e7bcea44d6c0248d35597907154828955be19135852f9228815eca024a8adfb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e",
+    "key": "",
+    "out": "4215407633f4cca9b6788be93e6aa3d963c7d6ce4b147247099f46a3acb500a30038cb3e788c3d29f132ad844e80e9e99251f6db96acd8a091cfc770af53847b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
+    "key": "",
+    "out": "1c077e279de6548523502b6df800ffdab5e2c3e9442eb838f58c295f3b147cef9d701c41c321283f00c71affa0619310399126295b78dd4d1a74572ef9ed5135"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60",
+    "key": "",
+    "out": "f07a555f49fe481cf4cd0a87b71b82e4a95064d06677fdd90a0eb598877ba1c83d4677b393c3a3b6661c421f5b12cb99d20376ba7275c2f3a8f5a9b7821720da"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061",
+    "key": "",
+    "out": "b5911b380d20c7b04323e4026b38e200f534259233b581e02c1e3e2d8438d6c66d5a4eb201d5a8b75072c4ec29106334da70bc79521b0ced2cfd533f5ff84f95"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162",
+    "key": "",
+    "out": "01f070a09bae911296361f91aa0e8e0d09a7725478536d9d48c5fe1e5e7c3c5b9b9d6eb07796f6da57ae562a7d70e882e37adfde83f0c433c2cd363536bb22c8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263",
+    "key": "",
+    "out": "6f793eb4374a48b0775acaf9adcf8e45e54270c9475f004ad8d5973e2aca52747ff4ed04ae967275b9f9eb0e1ff75fb4f794fa8be9add7a41304868d103fab10"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364",
+    "key": "",
+    "out": "965f20f139765fcc4ce4ba3794675863cac24db472cd2b799d035bce3dbea502da7b524865f6b811d8c5828d3a889646fe64a380da1aa7c7044e9f245dced128"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465",
+    "key": "",
+    "out": "ec295b5783601244c30e4641e3b45be222c4dce77a58700f53bc8ec52a941690b4d0b087fb6fcb3f39832b9de8f75ec20bd43079811749cdc907edb94157d180"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566",
+    "key": "",
+    "out": "61c72f8ccc91dbb54ca6750bc489672de09faedb8fdd4f94ff2320909a303f5d5a98481c0bc1a625419fb4debfbf7f8a53bb07ec3d985e8ea11e72d559940780"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667",
+    "key": "",
+    "out": "afd8145b259eefc8d12620c3c5b03e1ed8fd2ccefe0365078c80fd42c1770e28b44948f27e65a1886690110db814397b68e43d80d1ba16dfa358e739c898cfa3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768",
+    "key": "",
+    "out": "552fc7893cf1ce933ada35c0da98844e41545e244c3157a1428d7b4c21f9cd7e4071aed77b7ca9f1c38fba32237412ef21a342742ec8324378f21e507fafdd88"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869",
+    "key": "",
+    "out": "467a33fbadf5ebc52596ef86aaaefc6faba8ee651b1ce04de368a03a5a9040ef2835e00adb09abb3fbd2bce818a2413d0b0253b5bda4fc5b2f6f85f3fd5b55f2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a",
+    "key": "",
+    "out": "22eff8e6dd5236f5f57d94ede874d6c9428e8f5d566f17cd6d1848cd752fe13c655cb10fbaaff76872f2bf2da99e15dc624075e1ec2f58a3f64072121838569e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b",
+    "key": "",
+    "out": "9cec6bbf62c4bce4138abae1cbec8dad31950444e90321b1347196834c114b864af3f3cc3508f83751ffb4eda7c84d140734bb4263c3625c00f04f4c8068981b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c",
+    "key": "",
+    "out": "a8b60fa4fc2442f6f1514ad7402626920cc7c2c9f72124b8cba8ee2cb7c4586f658a4410cffcc0ab88343955e094c6af0d20d0c714fb0a988f543f300f58d389"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d",
+    "key": "",
+    "out": "8271cc45dfa5e4170e847e8630b952cf9c2aa777d06f26a7585b8381f188dacc7337391cfcc94b053dc4ec29cc17f077870428f1ac23fddda165ef5a3f155f39"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e",
+    "key": "",
+    "out": "bf23c0c25c8060e4f6995f1623a3bebecaa96e308680000a8aa3cd56bb1a6da099e10d9231b37f4519b2efd2c24de72f31a5f19535241b4a59fa3c03ceb790e7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f",
+    "key": "",
+    "out": "877fd652c05281009c0a5250e7a3a671f8b18c108817fe4a874de22da8e45db11958a600c5f62e67d36cbf84474cf244a9c2b03a9fb9dc711cd1a2cab6f3fae0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70",
+    "key": "",
+    "out": "29df4d87ea444baf5bcdf5f4e41579e28a67de84149f06c03f110ea84f572a9f676addd04c4878f49c5c00accda441b1a387caceb2e993bb7a10cd8c2d6717e1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071",
+    "key": "",
+    "out": "710dacb166844639cd7b637c274209424e2449dc35d790bbfa4f76177054a36b3b76fac0ca6e61df1e687000678ac0746df75d0a3954897681fd393a155a1bb4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172",
+    "key": "",
+    "out": "c1d5f93b8dea1f2571babccbc01764541a0cda87e444d673c50966ca559c33354b3acb26e5d5781ffb28847a4b4754d77008c62a835835f500dea7c3b58bdae2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273",
+    "key": "",
+    "out": "a41e41271cdab8af4d72b104bfb2ad041ac4df14677da671d85640c4b187f50c2b66513c4619fbd5d5dc4fe65dd37b9042e9848dda556a504caa2b1c6afe4730"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374",
+    "key": "",
+    "out": "e7bcbacdc379c43d81ebadcb37781552fc1d753e8cf310d968392d06c91f1d64cc9e90ce1d22c32d277fc6cda433a4d442c762e9eacf2c259f32d64cf9da3a22"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475",
+    "key": "",
+    "out": "51755b4ac5456b13218a19c5b9242f57c4a981e4d4ecdce09a3193362b808a579345d4881c2607a56534dd7f21956aff72c2f4173a6e7b6cc2212ba0e3daee1f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576",
+    "key": "",
+    "out": "dcc2c4beb9c1f2607b786c20c631972347034c1cc02fcc7d02ff01099cfe1c6989840ac213923629113aa8bad713ccf0fe4ce13264fb32b8b0fe372da382544a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677",
+    "key": "",
+    "out": "3d55176acea4a7e3a65ffa9fb10a7a1767199cf077cee9f71532d67cd7c73c9f93cfc37ccdcc1fdef50aad46a504a650d298d597a3a9fa95c6c40cb71fa5e725"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778",
+    "key": "",
+    "out": "d07713c005de96dd21d2eb8bbeca66746ea51a31ae922a3e74864889540a48db27d7e4c90311638b224bf0201b501891754848113c266108d0adb13db71909c7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879",
+    "key": "",
+    "out": "58983c21433d950caa23e4bc18543b8e601c204318532152daf5e159a0cd1480183d29285c05f129cb0cc3164687928086ffe380158df1d394c6ac0d4288bca8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a",
+    "key": "",
+    "out": "8100a8dc528d2b682ab4250801ba33f02a3e94c54dac0ae1482aa21f51ef3a82f3807e6facb0aeb05947bf7aa2adcb034356f90fa4560ede02201a37e411ec1a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b",
+    "key": "",
+    "out": "07025f1bb6c784f3fe49de5c14b936a5acacacaab33f6ac4d0e00ab6a12483d6bec00b4fe67c7ca5cc508c2a53efb5bfa5398769d843ff0d9e8b14d36a01a77f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c",
+    "key": "",
+    "out": "ba6aefd972b6186e027a76273a4a723321a3f580cfa894da5a9ce8e721c828552c64dacee3a7fd2d743b5c35ad0c8efa71f8ce99bf96334710e2c2346e8f3c52"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d",
+    "key": "",
+    "out": "e0721e02517aedfa4e7e9ba503e025fd46e714566dc889a84cbfe56a55dfbe2fc4938ac4120588335deac8ef3fa229adc9647f54ad2e3472234f9b34efc46543"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e",
+    "key": "",
+    "out": "b6292669ccd38d5f01caae96ba272c76a879a45743afa0725d83b9ebb26665b731f1848c52f11972b6644f554c064fa90780dbbbf3a89d4fc31f67df3e5857ef"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f",
+    "key": "",
+    "out": "2319e3789c47e2daa5fe807f61bec2a1a6537fa03f19ff32e87eecbfd64b7e0e8ccff439ac333b040f19b0c4ddd11a61e24ac1fe0f10a039806c5dcc0da3d115"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80",
+    "key": "",
+    "out": "f59711d44a031d5f97a9413c065d1e614c417ede998590325f49bad2fd444d3e4418be19aec4e11449ac1a57207898bc57d76a1bcf3566292c20c683a5c4648f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081",
+    "key": "",
+    "out": "df0a9d0c212843a6a934e3902b2dd30d17fba5f969d2030b12a546d8a6a45e80cf5635f071f0452e9c919275da99bed51eb1173c1af0518726b75b0ec3bae2b5"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182",
+    "key": "",
+    "out": "a3eb6e6c7bf2fb8b28bfe8b15e15bb500f781ecc86f778c3a4e655fc5869bf2846a245d4e33b7b14436a17e63be79b36655c226a50ffbc7124207b0202342db5"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283",
+    "key": "",
+    "out": "56d4cbcd070563426a017069425c2cd2ae540668287a5fb9dac432eb8ab1a353a30f2fe1f40d83333afe696a267795408a92fe7da07a0c1814cf77f36e105ee8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384",
+    "key": "",
+    "out": "e59b9987d428b3eda37d80abdb16cd2b0aef674c2b1dda4432ea91ee6c935c684b48b4428a8cc740e579a30deff35a803013820dd23f14ae1d8413b5c8672aec"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485",
+    "key": "",
+    "out": "cd9fcc99f99d4cc16d031900b2a736e1508db4b586814e6345857f354a70ccecb1df3b50a19adaf43c278efa423ff4bb6c523ec7fd7859b97b168a7ebff8467c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586",
+    "key": "",
+    "out": "0602185d8c3a78738b99164b8bc6ffb21c7debebbf806372e0da44d121545597b9c662a255dc31542cf995ecbe6a50fb5e6e0ee4ef240fe557eded1188087e86"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687",
+    "key": "",
+    "out": "c08afa5b927bf08097afc5fff9ca4e7800125c1f52f2af3553fa2b89e1e3015c4f87d5e0a48956ad31450b083dad147ffb5ec03434a26830cf37d103ab50c5da"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788",
+    "key": "",
+    "out": "36f1e1c11d6ef6bc3b536d505d544a871522c5c2a253067ec9933b6ec25464daf985525f5b9560a16d890259ac1bb5cc67c0c469cde133def000ea1d686f4f5d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889",
+    "key": "",
+    "out": "bf2ab2e2470f5438c3b689e66e7686fffa0cb1e1798ad3a86ff99075bf6138e33d9c0ce59afb24ac67a02af34428191a9a0a6041c07471b7c3b1a752d6fc0b8b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a",
+    "key": "",
+    "out": "d400601f9728ccc4c92342d9787d8d28ab323af375ca5624b4bb91d17271fbae862e413be73f1f68e615b8c5c391be0dbd9144746eb339ad541547ba9c468a17"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b",
+    "key": "",
+    "out": "79fe2fe157eb85a038abb8ebbc647731d2c83f51b0ac6ee14aa284cb6a3549a4dcceb300740a825f52f5fb30b03b8c4d8b0f4aa67a63f4a94e3303c4eda4c02b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c",
+    "key": "",
+    "out": "75351313b52a8529298d8c186b1768666dcca8595317d7a4816eb88c062020c0c8efc554bb341b64688db5ccafc35f3c3cd09d6564b36d7b04a248e146980d4b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d",
+    "key": "",
+    "out": "e3128b1d311d02179d7f25f97a5a8bee2cc8c86303644fcd664e157d1fef00f23e46f9a5e8e5c890ce565bb6abd4302ce06469d52a5bd53e1c5a54d04649dc03"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e",
+    "key": "",
+    "out": "c2382a72d2d3ace9d5933d00b60827ed380cda08d0ba5f6dd41e29ee6dbe8ecb9235f06be95d83b6816a2fb7a5ad47035e8a4b69a4884b99e4bece58cab25d44"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f",
+    "key": "",
+    "out": "6b1c69460bbd50ac2ed6f32e6e887cfed407d47dcf0aaa60387fe320d780bd03eab6d7baeb2a07d10cd552a300341354ea9a5f03183a623f92a2d4d9f00926af"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90",
+    "key": "",
+    "out": "6cda206c80cdc9c44ba990e0328c314f819b142d00630404c48c05dc76d1b00ce4d72fc6a48e1469ddef609412c364820854214b4869af090f00d3c1ba443e1b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091",
+    "key": "",
+    "out": "7ffc8c26fbd6a0f7a609e6e1939f6a9edf1b0b066641fb76c4f9602ed748d11602496b35355b1aa255850a509d2f8ee18c8f3e1d7dcbc37a136598f56a59ed17"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192",
+    "key": "",
+    "out": "70de1f08dd4e09d5fc151f17fc991a23abfc05104290d50468882efaf582b6ec2f14f577c0d68c3ad06626916e3c86e6daab6c53e5163e82b6bd0ce49fc0d8df"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293",
+    "key": "",
+    "out": "4f81935756ed35ee2058ee0c6a6110d6fac5cb6a4f46aa9411603f99965823b6da4838276c5c06bc7880e376d92758369ee7305bcec8d3cfd28ccabb7b4f0579"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394",
+    "key": "",
+    "out": "abcb61cb3683d18f27ad527908ed2d32a0426cb7bb4bf18061903a7dc42e7e76f982382304d18af8c80d91dd58dd47af76f8e2c36e28af2476b4bccf82e89fdf"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495",
+    "key": "",
+    "out": "02d261ad56a526331b643dd2186de9a82e72a58223cd1e723686c53d869b83b94632b7b647ab2afc0d522e29da3a5615b741d82852e0df41b66007dbcba90543"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596",
+    "key": "",
+    "out": "c5832741fa30c5436823015383d297ff4c4a5d7276c3f902122066e04be5431b1a85faf73b918434f9300963d1dea9e8ac3924ef490226edeea5f743e410669f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697",
+    "key": "",
+    "out": "cfaeab268cd075a5a6aed515023a032d54f2f2ff733ce0cbc78db51db4504d675923f82746d6594606ad5d67734b11a67cc6a468c2032e43ca1a94c6273a985e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798",
+    "key": "",
+    "out": "860850f92eb268272b67d133609bd64e34f61bf03f4c1738645c17fec818465d7ecd2be2907641130025fda79470ab731646e7f69440e8367ea76ac4cee8a1df"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899",
+    "key": "",
+    "out": "84b154ed29bbedefa648286839046f4b5aa34430e2d67f7496e4c39f2c7ea78995f69e1292200016f16ac3b37700e6c7e7861afc396b64a59a1dbf47a55c4bbc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a",
+    "key": "",
+    "out": "aeeec260a5d8eff5ccab8b95da435a63ed7a21ea7fc7559413fd617e33609f8c290e64bbacc528f6c080262288b0f0a3219be223c991bee92e72349593e67638"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b",
+    "key": "",
+    "out": "8ad78a9f26601d127e8d2f2f976e63d19a054a17dcf59e0f013ab54a6887bbdffde7aaae117e0fbf3271016595b9d9c712c01b2c53e9655a382bc4522e616645"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c",
+    "key": "",
+    "out": "8934159dade1ac74147dfa282c75954fcef443ef25f80dfe9fb6ea633b8545111d08b34ef43fff17026c7964f5deac6d2b3c29dacf2747f022df5967dfdc1a0a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d",
+    "key": "",
+    "out": "cd36dd0b240614cf2fa2b9e959679dcdd72ec0cd58a43da3790a92f6cdeb9e1e795e478a0a47d371100d340c5cedcdbbc9e68b3f460818e5bdff7b4cda4c2744"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e",
+    "key": "",
+    "out": "00df4e099b807137a85990f49d3a94315e5a5f7f7a6076b303e96b056fb93800111f479628e2f8db59aeb6ac70c3b61f51f9b46e80ffdeae25ebddb4af6cb4ee"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
+    "key": "",
+    "out": "2b9c955e6caed4b7c9e246b86f9a1726e810c59d126cee66ed71bf015b83558a4b6d84d18dc3ff4620c2ffb722359fdef85ba0d4e2d22ecbe0ed784f99afe587"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0",
+    "key": "",
+    "out": "181df0a261a2f7d29ea5a15772715105d450a4b6c236f699f462d60ca76487feedfc9f5eb92df838e8fb5dc3694e84c5e0f4a10b761f506762be052c745a6ee8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1",
+    "key": "",
+    "out": "21fb203458bf3a7e9a80439f9a902899cd5de0139dfd56f7110c9dec8437b26bda63de2f565926d85edb1d6c6825669743dd9992653d13979544d5dc8228bfaa"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2",
+    "key": "",
+    "out": "ef021f29c5ffb830e64b9aa9058dd660fd2fcb81c497a7e698bcfbf59de5ad4a86ff93c10a4b9d1ae5774725f9072dcde9e1f199bab91f8bff921864aa502eee"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3",
+    "key": "",
+    "out": "b3cfda40526b7f1d37569bdfcdf911e5a6efe6b2ec90a0454c47b2c046bf130fc3b352b34df4813d48d33ab8e269b69b075676cb6d00a8dcf9e1f967ec191b2c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4",
+    "key": "",
+    "out": "b4c6c3b267071eefb9c8c72e0e2b941293641f8673cb70c1cc26ad1e73cf141755860ad19b34c2f34ed35bb52ec4507cc1fe59047743a5f0c6febde625e26091"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5",
+    "key": "",
+    "out": "57a34f2bcca60d4b85103b830c9d7952a416be5263ae429c9e5e53fe8590a8f78ec65a51109ea85dcdf7b6223f9f2b340539fad81923dbf8edabf95129e4dff6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6",
+    "key": "",
+    "out": "9cf46662fcd61a232277b685663b8b5da832dfd9a3b8ccfeec993ec6ac415ad07e048adfe414df272770dba867da5c1224c6fd0aa0c2187d426ac647e9887361"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7",
+    "key": "",
+    "out": "5ce1042ab4d542c2f9ee9d17262af8164098935bef173d0e18489b04841746cd2f2df866bd7da6e5ef9024c648023ec723ab9c62fd80285739d84f15d2ab515a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8",
+    "key": "",
+    "out": "8488396bd4a8729b7a473178f232dadf3f0f8e22678ba5a43e041e72da1e2cf82194c307207a54cb8156293339eaec693ff66bfcd5efc65e95e4ecaf54530abd"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9",
+    "key": "",
+    "out": "f598da901c3835bca560779037dfde9f0c51dc61c0b760fc1522d7b470ee63f5bdc6498476e86049ad86e4e21af2854a984cc905427d2f17f66b1f41c3da6f61"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa",
+    "key": "",
+    "out": "5f93269798cf02132107337660a8d7a177354c0212eb93e555e7c37a08aef3d8dce01217011cd965c04dd2c105f2e2b6cae5e4e6bcaf09dfbee3e0a6a6357c37"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab",
+    "key": "",
+    "out": "0ecf581d47bac9230986faabd70c2f5b80e91066f0ec55a842937882286d2ca007bb4e973b0b091d52167ff7c4009c7ab4ad38fff1dceacdb7be81ef4a452952"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac",
+    "key": "",
+    "out": "5aeca8abe1528582b2a307b4009585498a3d467ca6101cb0c5126f9976056e9ffc123cc20c302b2a737f492c75d21f01512c90ca0541dfa56e950a321dcb28d8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad",
+    "key": "",
+    "out": "732fbf8f1cb2b8329263ede27858fe46f8d3354d376bcda0548e7ce1fa9dd11f85eb661fe950b543aa635ca4d3f04ede5b32d6b656e5ce1c44d35c4a6c56cff8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae",
+    "key": "",
+    "out": "d5e938735d63788c80100aefd18648d18cf272f69f20ff24cfe2895c088ad08b0104da1672a4eb26fc52545cc7d7a01b266cf546c403c45bd129eb41bdd9200b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
+    "key": "",
+    "out": "65a245b49352ee297d91af8c8be00528ac6e046dd83ac7bd465a98816dd68f3e00e1ae8f895327a7e9a8c9326598379a29c9fc91ec0c6eef08f3e2b216c11008"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
+    "key": "",
+    "out": "c95654b63019130ab45dd0fb4941b98aeb3af2a123913eca2ce99b3e97410a7bf8661cc7fbaa2bc1cf2b13113b1ed40a0118b88e5fffc3542759ea007ed4c58d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1",
+    "key": "",
+    "out": "1eb262f38fa494431f017dad44c0dfb69324ac032f04b657fc91a88647bb74760f24e7c956514f0cf002990b182c1642b9b2426e96a61187e4e012f00e217d84"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2",
+    "key": "",
+    "out": "3b955aeebfa5151ac1ab8e3f5cc1e3767084c842a575d36269836e97353d41622b731dddcd5f269550a3a5b87be1e90326340b6e0e62555815d9600597ac6ef9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3",
+    "key": "",
+    "out": "68289f6605473ba0e4f241baf7477a9885426a858f19ef2a18b0d40ef8e41282ed5526b519799e270f13881327918278755711071d8511fe963e3b5606aa3716"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4",
+    "key": "",
+    "out": "80a33787542612c38f6bcd7cd86cab460227509b1cbad5ec408a91413d51155a0476dadbf3a2518e4a6e77cc346622e347a469bf8baa5f04eb2d98705355d063"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5",
+    "key": "",
+    "out": "34629bc6d831391c4cdf8af1b4b7b6b8e8ee17cf98c70e5dd586cd99f14b11df945166236a9571e6d591bb83ee4d164d46f6b9d8ef86ff865a81bfb91b00424b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6",
+    "key": "",
+    "out": "8b7cc339163863bb4383e542b0ef0e7cf36b84ad932cdf5a80419ec9ad692e7a7e784d2c7cb3796a18b8f800035f3aa06c824100611120a7bdeb35618ccb81b7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7",
+    "key": "",
+    "out": "4f084e4939dd5a7f5a658fad58a18a15c25c32ec1c7fd5c5c6c3e892b3971aeaac308304ef17b1c47239ea4bb398b3fd6d4528d8de8e768ae0f1a5a5c6b5c297"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8",
+    "key": "",
+    "out": "48f407a1af5b8009b2051742e8cf5cd5656669e7d722ee8e7bd202060849442168d8facc117c012bfb7bf449d99befff6a34aea203f1d8d352722be5014ec818"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9",
+    "key": "",
+    "out": "a6aa82cd1e426f9a73bfa39a29037876114655b8c22d6d3ff8b638ae7dea6b17843e09e52eb66fa1e475e4a8a3de429b7d0f4a776fcb8bdc9b9fede7d52e815f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba",
+    "key": "",
+    "out": "5817027d6bdd00c5dd10ac593cd560372270775a18526d7e6f13872a2e20eab664625be7168ac4bd7c9e0ce7fc4099e0f48442e2c767191c6e1284e9b2ccea8c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb",
+    "key": "",
+    "out": "08e41028340a45c74e4052b3a8d6389e22e043a1adab5e28d97619450d723469b620caa519b81c14523854f619fd3027e3847bd03276e60604a80ddb4de876d6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc",
+    "key": "",
+    "out": "130b8420537eb07d72abda07c85acbd8b9a44f16321dd0422145f809673d30f2b5321326e2bff317ef3fef983c51c4f8ab24a325d298e34afce569a82555774c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd",
+    "key": "",
+    "out": "ac49b844afaa012e31c474ca263648844fd2f6307992c2f752aca02c3828965175794deee2d2ee95c61cd284f6b5a2d75e2ef2b29ee8149e77fb81447b2fd04b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe",
+    "key": "",
+    "out": "b9d7ca81cc60bb9578e44024e5a0a0be80f27336a6a9f4e53df3999cb191280b090e2ac2d29c5baad9d71415bdc129e69aa2667af6a7fd5e189fccdcee817340"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf",
+    "key": "",
+    "out": "a755e113386572c75ced61d719706070b9146048e42a9f8cd35667a088b42f08808abdf77e618abd959afc757379ca2c00bcc1a48390fa2bff618b1e0078a613"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0",
+    "key": "",
+    "out": "a73c7debed326f1c0db0795ee7d6e3946894b826b1f8101c56c823ba17168312e7f53fc7dbe52c3e11e69852c40485e2ef182477862ea6a34ec136e2dfeea6f4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1",
+    "key": "",
+    "out": "6cb8f9d52c56d82cac28f39ea1593e8bb2506293ac0d68376a1709b62a46df14a4ae64b2d8fab76733a1ced2d548e3f3c6fcb49d40c3d5808e449cd83d1c2aa2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2",
+    "key": "",
+    "out": "683fa2b2369a10162c1c1c7b24bc970ee67da220564f32203f625696c0352a0b9ad96624362d952d84463c1106a2dba7a092599884b35a0b89c8f1b6a9b5a61e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3",
+    "key": "",
+    "out": "aad9ad44610118b77d508aeb1bbcd1c1b7d0171397fb510a401bbc0ec34623670d86a2dc3c8f3ab5a2044df730256727545f0860ce21a1eac717dfc48f5d228e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4",
+    "key": "",
+    "out": "c42578de23b4c987d5e1ac4d689ed5de4b0417f9704bc6bce969fa13471585d62c2cb1212a944f397fc9ca2c3747c3beb694ec4c5be68828dda53ef43faec6c0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5",
+    "key": "",
+    "out": "470f00841ee8244e63ed2c7ea30e2e419897c197462ecccecf713b42a5065fff5914bc9b79affe8f6b657875e789ae213bd914cd35bd174d46e9d18bd843773d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6",
+    "key": "",
+    "out": "34fc4213730f47a5e9a3580f643e12945cfcb31bf206f6ad450ce528da3fa432e005d6b0ecce10dca7c5995f6aacc5150e1b009e19751e8309f8859531844374"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7",
+    "key": "",
+    "out": "fb3c1f0f56a56f8e316fdf5d853c8c872c39635d083634c3904fc3ac07d1b578e85ff0e480e92d44ade33b62e893ee32343e79ddf6ef292e89b582d312502314"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8",
+    "key": "",
+    "out": "c7c97fc65dd2b9e3d3d607d31598d3f84261e9919251e9c8e57bb5f829377d5f73eabbed55c6c381180f29ad02e5be797ffec7e57bdecbc50ad3d062f0993ab0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9",
+    "key": "",
+    "out": "a57a49cdbe67ae7d9f797bb5cc7efc2df07f4e1b15955f85dae74b76e2ecb85afb6cd9eeed8888d5ca3ec5ab65d27a7b19e578475760a045ac3c92e13a938e77"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca",
+    "key": "",
+    "out": "c7143fce9614a17fd653aeb140726dc9c3dbb1de6cc581b2726897ec24b7a50359ad492243be66d9edd8c933b5b80e0b91bb61ea98056006516976fae8d99a35"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb",
+    "key": "",
+    "out": "65bb58d07f937e2d3c7e65385f9c54730b704105ccdb691f6e146d4ee8f6c086f49511035110a9ad6031fdceb943e0f9613bcb276dd40f0624ef0f924f809783"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc",
+    "key": "",
+    "out": "e540277f683b1186dd3b5b3f61433396581a35feb12002be8c6a6231fc40ffa70f08081bc58b2d94f7649543614a435faa2d62110e13dabc7b86629b63af9c24"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd",
+    "key": "",
+    "out": "418500878c5fbcb584c432f4285e05e49f2e3e075399a0dbfcf874ebf8c03d02bf16bc6989d161c77ca0786b05053c6c709433712319192128835cf0b660595b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce",
+    "key": "",
+    "out": "889090dbb1944bdc9433ee5ef1010c7a4a24a8e71ecea8e12a31318ce49dcab0aca5c3802334aab2cc84b14c6b9321fe586bf3f876f19cd406eb1127fb944801"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf",
+    "key": "",
+    "out": "53b6a28910aa92e27e536fb549cf9b9918791060898e0b9fe183577ff43b5e9c7689c745b32e412269837c31b89e6cc12bf76e13cad366b74ece48bb85fd09e9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0",
+    "key": "",
+    "out": "7c092080c6a80d672409d081d3d177106bcd63567785140719490950ae07ae8fcaabbaaab330cfbcf7374482c220af2eadeeb73dcbb35ed823344e144e7d4899"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1",
+    "key": "",
+    "out": "9ccde566d2400509181111f32dde4cd63209fe59a30c114546ad2776d889a41bad8fa1bb468cb2f9d42ca9928a7770fef8e8ba4d0c812d9a1e75c3d8d2ccd75a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2",
+    "key": "",
+    "out": "6e293bf5d03fe43977cfe3f57ccdb3ae282a85455dca33f37f4b74f8398cc612433d755cbec412f8f82a3bd3bc4a278f7ecd0dfa9bbdc40be7a787c8f159b2df"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3",
+    "key": "",
+    "out": "c56546fb2178456f336164c18b90deffc83ae2b5a3aca77b6884d36d2c1db39501b3e65e36c758c66e3188451fdb3515ee162c001f06c3e8cb573adf30f7a101"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4",
+    "key": "",
+    "out": "6f82f89f299ebca2fe014b59bffe1aa84e88b1915fe256afb646fd8448af2b8891a7fab37a4ea6f9a50e6c317039d8cf878f4c8e1a0dd464f0b4d6ff1c7ea853"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5",
+    "key": "",
+    "out": "2b8599ff9c3d6198637ad51e57d1998b0d75313fe2dd61a533c964a6dd9607c6f723e9452ce46e014b1c1d6de77ba5b88c914d1c597bf1eae13474b4290e89b2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6",
+    "key": "",
+    "out": "08bf346d38e1df06c8260edb1da75579275948d5c0a0aa9ed2886f8856de5417a156998758f5b17e52f101ca957a71137473dfd18d7d209c4c10d9233c93691d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7",
+    "key": "",
+    "out": "6df2156d773114d310b63db9ee5350d77e6bcf25b05fcd910f9b31bc42bb13fe8225ebcb2a23a62280777b6bf74e2cd0917c7640b43defe468cd1e18c943c66a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8",
+    "key": "",
+    "out": "7c7038bc13a91151828a5ba82b4a96040f258a4dfb1b1373f0d359168afb0517a20b28a12d3644046be66b8d08d8ae7f6a923ea1c00187c6d11dc502bac71305"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9",
+    "key": "",
+    "out": "bcd1b30d808fb739b987cbf154bea00da9d40380b861d4c1d6377122dadd61c0e59018b71941cfb62e00dcd70aeb9abf0473e80f0a7eca6b6dea246ab229dd2b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da",
+    "key": "",
+    "out": "7ed4468d968530fe7ab2c33540b26d8c3bd3ed44b34fbe8c2a9d7f805b5ada0ea252eeade4fce97f89728ad85bc8bb2430b1bef2cddd32c8446e59b8e8ba3c67"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb",
+    "key": "",
+    "out": "6d30b7c6ce8a3236c0ca2f8d728b1088ca06983a8043e621d5dcf0c537d13b08791edeb01a3cf0943ec1c890ab6e29b146a236cd46bcb9d93bf516fb67c63fe5"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc",
+    "key": "",
+    "out": "97fe03cef31438508911bded975980a66029305dc5e3fa8ad1b4fb22fcdf5a19a733320327d8f71ccf496cb3a44a77af56e3dde73d3a5f176896cc57c9a5ad99"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd",
+    "key": "",
+    "out": "785a9d0fbd21136dbce8fa7eafd63c9dad220052978416b31d9753eaa149097847ed9b30a65c70507eff01879149ed5cf0471d37798edc05abd56ad4a2cccb1d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde",
+    "key": "",
+    "out": "ad408d2abddfd37b3bf34794c1a3371d928ed7fc8d966225333584c5665817832a37c07f0dc7cb5aa874cd7d20fe8fab8eabcb9b33d2e0841f6e200960899d95"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf",
+    "key": "",
+    "out": "97668f745b6032fc815d9579322769dccd9501a5080029b8ae826befb6742331bd9f76efeb3e2b8e81a9786b282f5068a3a2424697a77c41876b7e753f4c7767"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0",
+    "key": "",
+    "out": "26bb985f47e7fee0cfd252d4ef96bed42b9c370c1c6a3e8c9eb04ef7f7818b833a0d1f043ebafb911dc779e02740a02a44d3a1ea45ed4ad55e686c927cafe97e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1",
+    "key": "",
+    "out": "5bfe2b1dcf7fe9b95088acedb575c19016c743b2e763bf5851ac407c9eda43715edfa48b4825492c5179593fff21351b76e8b7e034e4c53c79f61f29c479bd08"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2",
+    "key": "",
+    "out": "c76509ef72f4a6f9c9c40618ed52b2084f83502232e0ac8bdaf3264368e4d0180f6854c4abf4f6509c79caafc44cf3194afc57bd077bd7b3c9bda3d4b8775816"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3",
+    "key": "",
+    "out": "d66f2beab990e354ccb910e4e9c7ac618c7b63ef292a96b552341de78dc46d3ec8cfabc699b50af41fda39cf1b0173660923510ad67faedef5207cffe8641d20"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4",
+    "key": "",
+    "out": "7d8f0672992b79be3a364d8e5904f4ab713bbc8ab01b4f309ad8ccf223ce1034a860dcb0b00550612cc2fa17f2969e18f22e1427d254b4a82b3a03a3eb394adf"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5",
+    "key": "",
+    "out": "a56d6725bfb3de47c1414adf25fc8f0fc9846f6987722bc06366d5ca4e89722925ebbc881418844075397a0ca89842c7b9e9e07e1d9d183ebeb39e120b483bf7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6",
+    "key": "",
+    "out": "af5e03d7fe60c67e10313344434e79485a03a758d6dce985574745763c1c5c77d4fb3e6fb12230368370993bf90feed0c5d1607524562d7c09c0c210ed393d7c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7",
+    "key": "",
+    "out": "7a20540cc07bf72b582421fc342e82f52134b69841ec28ed189e2ea6a29dd2f82a640352d222b52f2911dc72a7dab31caadd80c6118f13c56b2a1e4373be0ea3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8",
+    "key": "",
+    "out": "486f02c63e5467ea1fdde7e82bfacc2c1ba5d636d9f3d08b210da3f372f706ec218cc17ff60aef703bbe0c15c38ae55d286a684f864c78211ccab4178c92adba"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9",
+    "key": "",
+    "out": "1c7a5c1dedcd04a921788f7eb23361ca1953b04b9c7aec35d65ea3e4996db26f281278ea4ae666ad81027d98af57262cdbfa4c085f4210568c7e15eec7805114"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea",
+    "key": "",
+    "out": "9ce3fa9a860bdbd5378fd6d7b8b671c6cb7692910ce8f9b6cb4122cbcbe6ac06ca0422cef1225935053b7d193a81b9e972eb85a1d3074f14cbb5ec9f0573892d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb",
+    "key": "",
+    "out": "a91187be5c371c4265c174fd4653b8ab708551f83d1fee1cc1479581bc006d6fb78fcc9a5dee1db3666f508f9780a37593ebcccf5fbed39667dc6361e921f779"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec",
+    "key": "",
+    "out": "4625767d7b1d3d3ed2fbc674af14e0244152f2a4021fcf3311505d89bd81e2f9f9a500c3b199914db49500b3c98d03ea93286751a686a3b875daab0ccd63b44f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced",
+    "key": "",
+    "out": "43dfdfe1b014fed3a2acabb7f3e9a182f2aa18019d27e3e6cdcf31a15b428e91e7b08cf5e5c376fce2d8a28ff85ab0a0a1656edb4a0a91532620096d9a5a652d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee",
+    "key": "",
+    "out": "279e3202be3989ba3112772585177487e4fe3ee3eab49c2f7fa7fe87cfe7b80d3e0355edff6d031e6c96c795db1c6f041880ec3824defacf9263820a8e7327de"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef",
+    "key": "",
+    "out": "ea2d066ac229d4d4b616a8bedec734325224e4b4e58f1ae6dad7e40c2da29196c3b1ea9571dacc81e87328caa0211e09027b0524aa3f4a849917b3586747ebbb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0",
+    "key": "",
+    "out": "49f014f5c61822c899ab5cae51be4044a4495e777deb7da9b6d8490efbb87530adf293daf079f94c33b7044ef62e2e5bb3eb11e17304f8453ee6ce24f033ddb0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1",
+    "key": "",
+    "out": "9233490344e5b0dc5912671b7ae54cee7730dbe1f4c7d92a4d3e3aab50571708db51dcf9c2944591db651db32d22935b86944969be77d5b5feae6c3840a8db26"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2",
+    "key": "",
+    "out": "b6e75e6f4c7f453b7465d25b5ac8c7196902eaa953875228c8634e16e2ae1f38bc3275304335f5989eccc1e34167d4e68d7719968fba8e2fe67947c35c48e806"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3",
+    "key": "",
+    "out": "cc14ca665af1483efbc3af80080e650d5046a3932f4f51f3fe90a0705ec25104adf07839265dc51d43401411246e474f0d5e5637af94767283d53e0617e981f4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4",
+    "key": "",
+    "out": "230a1c857cb2e7852e41b647e90e4585d2d881e1734dc38955356e8dd7bff39053092c6b38e236e1899525647073dddf6895d64206325e7647f275567b255909"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5",
+    "key": "",
+    "out": "cbb65321ac436e2ffdab2936359ce49023f7dee7614ef28d173c3d27c5d1bffa51553d433f8ee3c9e49c05a2b883cce954c9a8093b80612a0cdd4732e041f995"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6",
+    "key": "",
+    "out": "3e7e570074337275efb51315588034c3cf0dddca20b4612e0bd5b881e7e5476d319ce4fe9f19186e4c0826f44f131eb048e65be242b1172c63badb123ab0cbe8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7",
+    "key": "",
+    "out": "d32e9ec02d38d4e1b8249df8dcb00c5b9c68eb8922672e3505393b6a210ba56f9496e5ee0490ef387c3cdec061f06bc0382d9304cafbb8e0cd33d57029e62df2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8",
+    "key": "",
+    "out": "8c1512466089f05b3775c262b62d22b83854a83218130b4ec91b3ccbd293d2a54302cecaab9b100c68d1e6ddc8f07cddbdfe6fdaaaf099cc09d6b725879c6369"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9",
+    "key": "",
+    "out": "91a7f61c97c2911e4c812ef71d780ad8fa788794561d08303fd1c1cb608a46a12563086ec5b39d471aed94fb0f6c678a43b8792932f9028d772a22768ea23a9b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa",
+    "key": "",
+    "out": "4f6bb222a395e8b18f6ba155477aed3f0729ac9e83e16d31a2a8bc655422b837c891c6199e6f0d75799e3b691525c581953517f252c4b9e3a27a28fbaf49644c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb",
+    "key": "",
+    "out": "5d06c07e7a646c413a501c3f4bb2fc38127de7509b7077c4d9b5613201c1aa02fd5f79d2745915dd57fbcb4ce08695f6efc0cb3d2d330e19b4b0e6004ea6471e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc",
+    "key": "",
+    "out": "b96756e57909968f14b796a5d30f4c9d671472cf82c8cfb2caca7ac7a44ca0a14c9842d00c82e337502c94d5960aca4c492ea7b0df919ddf1aada2a275bb10d4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd",
+    "key": "",
+    "out": "ff0a015e98db9c99f03977710aac3e658c0d896f6d71d618ba79dc6cf72ac75b7c038eb6862dede4543e145413a6368d69f5722c827ba3ef25b6ae6440d39276"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
+    "key": "",
+    "out": "5b21c5fd8868367612474fa2e70e9cfa2201ffeee8fafab5797ad58fefa17c9b5b107da4a3db6320baaf2c8617d5a51df914ae88da3867c2d41f0cc14fa67928"
+},
+{
+    "hash": "blake2b",
+    "in": "",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "10ebb67700b1868efb4417987acf4690ae9d972fb7a590c2f02871799aaa4786b5e996e8f0f4eb981fc214b005f42d2ff4233499391653df7aefcbc13fc51568"
+},
+{
+    "hash": "blake2b",
+    "in": "00",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "961f6dd1e4dd30f63901690c512e78e4b45e4742ed197c3c5e45c549fd25f2e4187b0bc9fe30492b16b0d0bc4ef9b0f34c7003fac09a5ef1532e69430234cebd"
+},
+{
+    "hash": "blake2b",
+    "in": "0001",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "da2cfbe2d8409a0f38026113884f84b50156371ae304c4430173d08a99d9fb1b983164a3770706d537f49e0c916d9f32b95cc37a95b99d857436f0232c88a965"
+},
+{
+    "hash": "blake2b",
+    "in": "000102",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "33d0825dddf7ada99b0e7e307104ad07ca9cfd9692214f1561356315e784f3e5a17e364ae9dbb14cb2036df932b77f4b292761365fb328de7afdc6d8998f5fc1"
+},
+{
+    "hash": "blake2b",
+    "in": "00010203",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "beaa5a3d08f3807143cf621d95cd690514d0b49efff9c91d24b59241ec0eefa5f60196d407048bba8d2146828ebcb0488d8842fd56bb4f6df8e19c4b4daab8ac"
+},
+{
+    "hash": "blake2b",
+    "in": "0001020304",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "098084b51fd13deae5f4320de94a688ee07baea2800486689a8636117b46c1f4c1f6af7f74ae7c857600456a58a3af251dc4723a64cc7c0a5ab6d9cac91c20bb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6044540d560853eb1c57df0077dd381094781cdb9073e5b1b3d3f6c7829e12066bbaca96d989a690de72ca3133a83652ba284a6d62942b271ffa2620c9e75b1f"
+},
+{
+    "hash": "blake2b",
+    "in": "00010203040506",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7a8cfe9b90f75f7ecb3acc053aaed6193112b6f6a4aeeb3f65d3de541942deb9e2228152a3c4bbbe72fc3b12629528cfbb09fe630f0474339f54abf453e2ed52"
+},
+{
+    "hash": "blake2b",
+    "in": "0001020304050607",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "380beaf6ea7cc9365e270ef0e6f3a64fb902acae51dd5512f84259ad2c91f4bc4108db73192a5bbfb0cbcf71e46c3e21aee1c5e860dc96e8eb0b7b8426e6abe9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "60fe3c4535e1b59d9a61ea8500bfac41a69dffb1ceadd9aca323e9a625b64da5763bad7226da02b9c8c4f1a5de140ac5a6c1124e4f718ce0b28ea47393aa6637"
+},
+{
+    "hash": "blake2b",
+    "in": "00010203040506070809",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4fe181f54ad63a2983feaaf77d1e7235c2beb17fa328b6d9505bda327df19fc37f02c4b6f0368ce23147313a8e5738b5fa2a95b29de1c7f8264eb77b69f585cd"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f228773ce3f3a42b5f144d63237a72d99693adb8837d0e112a8a0f8ffff2c362857ac49c11ec740d1500749dac9b1f4548108bf3155794dcc9e4082849e2b85b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "962452a8455cc56c8511317e3b1f3b2c37df75f588e94325fdd77070359cf63a9ae6e930936fdf8e1e08ffca440cfb72c28f06d89a2151d1c46cd5b268ef8563"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "43d44bfa18768c59896bf7ed1765cb2d14af8c260266039099b25a603e4ddc5039d6ef3a91847d1088d401c0c7e847781a8a590d33a3c6cb4df0fab1c2f22355"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dcffa9d58c2a4ca2cdbb0c7aa4c4c1d45165190089f4e983bb1c2cab4aaeff1fa2b5ee516fecd780540240bf37e56c8bcca7fab980e1e61c9400d8a9a5b14ac6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6fbf31b45ab0c0b8dad1c0f5f4061379912dde5aa922099a030b725c73346c524291adef89d2f6fd8dfcda6d07dad811a9314536c2915ed45da34947e83de34e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a0c65bddde8adef57282b04b11e7bc8aab105b99231b750c021f4a735cb1bcfab87553bba3abb0c3e64a0b6955285185a0bd35fb8cfde557329bebb1f629ee93"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f10",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f99d815550558e81eca2f96718aed10d86f3f1cfb675cce06b0eff02f617c5a42c5aa760270f2679da2677c5aeb94f1142277f21c7f79f3c4f0cce4ed8ee62b1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f1011",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "95391da8fc7b917a2044b3d6f5374e1ca072b41454d572c7356c05fd4bc1e0f40b8bb8b4a9f6bce9be2c4623c399b0dca0dab05cb7281b71a21b0ebcd9e55670"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "04b9cd3d20d221c09ac86913d3dc63041989a9a1e694f1e639a3ba7e451840f750c2fc191d56ad61f2e7936bc0ac8e094b60caeed878c18799045402d61ceaf9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f10111213",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ec0e0ef707e4ed6c0c66f9e089e4954b058030d2dd86398fe84059631f9ee591d9d77375355149178c0cf8f8e7c49ed2a5e4f95488a2247067c208510fadc44c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9a37cce273b79c09913677510eaf7688e89b3314d3532fd2764c39de022a2945b5710d13517af8ddc0316624e73bec1ce67df15228302036f330ab0cb4d218dd"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4cf9bb8fb3d4de8b38b2f262d3c40f46dfe747e8fc0a414c193d9fcf753106ce47a18f172f12e8a2f1c26726545358e5ee28c9e2213a8787aafbc516d2343152"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "64e0c63af9c808fd893137129867fd91939d53f2af04be4fa268006100069b2d69daa5c5d8ed7fddcb2a70eeecdf2b105dd46a1e3b7311728f639ab489326bc9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314151617",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5e9c93158d659b2def06b0c3c7565045542662d6eee8a96a89b78ade09fe8b3dcc096d4fe48815d88d8f82620156602af541955e1f6ca30dce14e254c326b88f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7775dff889458dd11aef417276853e21335eb88e4dec9cfb4e9edb49820088551a2ca60339f12066101169f0dfe84b098fddb148d9da6b3d613df263889ad64b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516171819",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f0d2805afbb91f743951351a6d024f9353a23c7ce1fc2b051b3a8b968c233f46f50f806ecb1568ffaa0b60661e334b21dde04f8fa155ac740eeb42e20b60d764"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "86a2af316e7d7754201b942e275364ac12ea8962ab5bd8d7fb276dc5fbffc8f9a28cae4e4867df6780d9b72524160927c855da5b6078e0b554aa91e31cb9ca1d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "10bdf0caa0802705e706369baf8a3f79d72c0a03a80675a7bbb00be3a45e516424d1ee88efb56f6d5777545ae6e27765c3a8f5e493fc308915638933a1dfee55"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b01781092b1748459e2e4ec178696627bf4ebafebba774ecf018b79a68aeb84917bf0b84bb79d17b743151144cd66b7b33a4b9e52c76c4e112050ff5385b7f0b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c6dbc61dec6eaeac81e3d5f755203c8e220551534a0b2fd105a91889945a638550204f44093dd998c076205dffad703a0e5cd3c7f438a7e634cd59fededb539e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "eba51acffb4cea31db4b8d87e9bf7dd48fe97b0253ae67aa580f9ac4a9d941f2bea518ee286818cc9f633f2a3b9fb68e594b48cdd6d515bf1d52ba6c85a203a7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "86221f3ada52037b72224f105d7999231c5e5534d03da9d9c0a12acb68460cd375daf8e24386286f9668f72326dbf99ba094392437d398e95bb8161d717f8991"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5595e05c13a7ec4dc8f41fb70cb50a71bce17c024ff6de7af618d0cc4e9c32d9570d6d3ea45b86525491030c0d8f2b1836d5778c1ce735c17707df364d054347"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ce0f4f6aca89590a37fe034dd74dd5fa65eb1cbd0a41508aaddc09351a3cea6d18cb2189c54b700c009f4cbf0521c7ea01be61c5ae09cb54f27bc1b44d658c82"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7ee80b06a215a3bca970c77cda8761822bc103d44fa4b33f4d07dcb997e36d55298bceae12241b3fa07fa63be5576068da387b8d5859aeab701369848b176d42"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "940a84b6a84d109aab208c024c6ce9647676ba0aaa11f86dbb7018f9fd2220a6d901a9027f9abcf935372727cbf09ebd61a2a2eeb87653e8ecad1bab85dc8327"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2020b78264a82d9f4151141adba8d44bf20c5ec062eee9b595a11f9e84901bf148f298e0c9f8777dcdbc7cc4670aac356cc2ad8ccb1629f16f6a76bcefbee760"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d1b897b0e075ba68ab572adf9d9c436663e43eb3d8e62d92fc49c9be214e6f27873fe215a65170e6bea902408a25b49506f47babd07cecf7113ec10c5dd31252"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b14d0c62abfa469a357177e594c10c194243ed2025ab8aa5ad2fa41ad318e0ff48cd5e60bec07b13634a711d2326e488a985f31e31153399e73088efc86a5c55"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4169c5cc808d2697dc2a82430dc23e3cd356dc70a94566810502b8d655b39abf9e7f902fe717e0389219859e1945df1af6ada42e4ccda55a197b7100a30c30a1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "258a4edb113d66c839c8b1c91f15f35ade609f11cd7f8681a4045b9fef7b0b24c82cda06a5f2067b368825e3914e53d6948ede92efd6e8387fa2e537239b5bee"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "79d2d8696d30f30fb34657761171a11e6c3f1e64cbe7bebee159cb95bfaf812b4f411e2f26d9c421dc2c284a3342d823ec293849e42d1e46b0a4ac1e3c86abaa"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8b9436010dc5dee992ae38aea97f2cd63b946d94fedd2ec9671dcde3bd4ce9564d555c66c15bb2b900df72edb6b891ebcadfeff63c9ea4036a998be7973981e7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c8f68e696ed28242bf997f5b3b34959508e42d613810f1e2a435c96ed2ff560c7022f361a9234b9837feee90bf47922ee0fd5f8ddf823718d86d1e16c6090071"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b02d3eee4860d5868b2c39ce39bfe81011290564dd678c85e8783f29302dfc1399ba95b6b53cd9ebbf400cca1db0ab67e19a325f2d115812d25d00978ad1bca4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7693ea73af3ac4dad21ca0d8da85b3118a7d1c6024cfaf557699868217bc0c2f44a199bc6c0edd519798ba05bd5b1b4484346a47c2cadf6bf30b785cc88b2baf"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a0e5c1c0031c02e48b7f09a5e896ee9aef2f17fc9e18e997d7f6cac7ae316422c2b1e77984e5f3a73cb45deed5d3f84600105e6ee38f2d090c7d0442ea34c46d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "41daa6adcfdb69f1440c37b596440165c15ada596813e2e22f060fcd551f24dee8e04ba6890387886ceec4a7a0d7fc6b44506392ec3822c0d8c1acfc7d5aebe8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "14d4d40d5984d84c5cf7523b7798b254e275a3a8cc0a1bd06ebc0bee726856acc3cbf516ff667cda2058ad5c3412254460a82c92187041363cc77a4dc215e487"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d0e7a1e2b9a447fee83e2277e9ff8010c2f375ae12fa7aaa8ca5a6317868a26a367a0b69fbc1cf32a55d34eb370663016f3d2110230eba754028a56f54acf57c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e771aa8db5a3e043e8178f39a0857ba04a3f18e4aa05743cf8d222b0b095825350ba422f63382a23d92e4149074e816a36c1cd28284d146267940b31f8818ea2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "feb4fd6f9e87a56bef398b3284d2bda5b5b0e166583a66b61e538457ff0584872c21a32962b9928ffab58de4af2edd4e15d8b35570523207ff4e2a5aa7754caa"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "462f17bf005fb1c1b9e671779f665209ec2873e3e411f98dabf240a1d5ec3f95ce6796b6fc23fe171903b502023467dec7273ff74879b92967a2a43a5a183d33"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d3338193b64553dbd38d144bea71c5915bb110e2d88180dbc5db364fd6171df317fc7268831b5aef75e4342b2fad8797ba39eddcef80e6ec08159350b1ad696d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e1590d585a3d39f7cb599abd479070966409a6846d4377acf4471d065d5db94129cc9be92573b05ed226be1e9b7cb0cabe87918589f80dadd4ef5ef25a93d28e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f8f3726ac5a26cc80132493a6fedcb0e60760c09cfc84cad178175986819665e76842d7b9fedf76dddebf5d3f56faaad4477587af21606d396ae570d8e719af2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "30186055c07949948183c850e9a756cc09937e247d9d928e869e20bafc3cd9721719d34e04a0899b92c736084550186886efba2e790d8be6ebf040b209c439a4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f3c4276cb863637712c241c444c5cc1e3554e0fddb174d035819dd83eb700b4ce88df3ab3841ba02085e1a99b4e17310c5341075c0458ba376c95a6818fbb3e2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0aa007c4dd9d5832393040a1583c930bca7dc5e77ea53add7e2b3f7c8e231368043520d4a3ef53c969b6bbfd025946f632bd7f765d53c21003b8f983f75e2a6a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "08e9464720533b23a04ec24f7ae8c103145f765387d738777d3d343477fd1c58db052142cab754ea674378e18766c53542f71970171cc4f81694246b717d7564"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d37ff7ad297993e7ec21e0f1b4b5ae719cdc83c5db687527f27516cbffa822888a6810ee5c1ca7bfe3321119be1ab7bfa0a502671c8329494df7ad6f522d440f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dd9042f6e464dcf86b1262f6accfafbd8cfd902ed3ed89abf78ffa482dbdeeb6969842394c9a1168ae3d481a017842f660002d42447c6b22f7b72f21aae021c9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bd965bf31e87d70327536f2a341cebc4768eca275fa05ef98f7f1b71a0351298de006fba73fe6733ed01d75801b4a928e54231b38e38c562b2e33ea1284992fa"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "65676d800617972fbd87e4b9514e1c67402b7a331096d3bfac22f1abb95374abc942f16e9ab0ead33b87c91968a6e509e119ff07787b3ef483e1dcdccf6e3022"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "939fa189699c5d2c81ddd1ffc1fa207c970b6a3685bb29ce1d3e99d42f2f7442da53e95a72907314f4588399a3ff5b0a92beb3f6be2694f9f86ecf2952d5b41c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c516541701863f91005f314108ceece3c643e04fc8c42fd2ff556220e616aaa6a48aeb97a84bad74782e8dff96a1a2fa949339d722edcaa32b57067041df88cc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "987fd6e0d6857c553eaebb3d34970a2c2f6e89a3548f492521722b80a1c21a153892346d2cba6444212d56da9a26e324dccbc0dcde85d4d2ee4399eec5a64e8f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ae56deb1c2328d9c4017706bce6e99d41349053ba9d336d677c4c27d9fd50ae6aee17e853154e1f4fe7672346da2eaa31eea53fcf24a22804f11d03da6abfc2b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "49d6a608c9bde4491870498572ac31aac3fa40938b38a7818f72383eb040ad39532bc06571e13d767e6945ab77c0bdc3b0284253343f9f6c1244ebf2ff0df866"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "da582ad8c5370b4469af862aa6467a2293b2b28bd80ae0e91f425ad3d47249fdf98825cc86f14028c3308c9804c78bfeeeee461444ce243687e1a50522456a1d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d5266aa3331194aef852eed86d7b5b2633a0af1c735906f2e13279f14931a9fc3b0eac5ce9245273bd1aa92905abe16278ef7efd47694789a7283b77da3c70f8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2962734c28252186a9a1111c732ad4de4506d4b4480916303eb7991d659ccda07a9911914bc75c418ab7a4541757ad054796e26797feaf36e9f6ad43f14b35a4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e8b79ec5d06e111bdfafd71e9f5760f00ac8ac5d8bf768f9ff6f08b8f026096b1cc3a4c973333019f1e3553e77da3f98cb9f542e0a90e5f8a940cc58e59844b3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dfb320c44f9d41d1efdcc015f08dd5539e526e39c87d509ae6812a969e5431bf4fa7d91ffd03b981e0d544cf72d7b1c0374f8801482e6dea2ef903877eba675e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d88675118fdb55a5fb365ac2af1d217bf526ce1ee9c94b2f0090b2c58a06ca58187d7fe57c7bed9d26fca067b4110eefcd9a0a345de872abe20de368001b0745"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b893f2fc41f7b0dd6e2f6aa2e0370c0cff7df09e3acfcc0e920b6e6fad0ef747c40668417d342b80d2351e8c175f20897a062e9765e6c67b539b6ba8b9170545"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6c67ec5697accd235c59b486d7b70baeedcbd4aa64ebd4eef3c7eac189561a726250aec4d48cadcafbbe2ce3c16ce2d691a8cce06e8879556d4483ed7165c063"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f1aa2b044f8f0c638a3f362e677b5d891d6fd2ab0765f6ee1e4987de057ead357883d9b405b9d609eea1b869d97fb16d9b51017c553f3b93c0a1e0f1296fedcd"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cbaa259572d4aebfc1917acddc582b9f8dfaa928a198ca7acd0f2aa76a134a90252e6298a65b08186a350d5b7626699f8cb721a3ea5921b753ae3a2dce24ba3a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fa1549c9796cd4d303dcf452c1fbd5744fd9b9b47003d920b92de34839d07ef2a29ded68f6fc9e6c45e071a2e48bd50c5084e96b657dd0404045a1ddefe282ed"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5cf2ac897ab444dcb5c8d87c495dbdb34e1838b6b629427caa51702ad0f9688525f13bec503a3c3a2c80a65e0b5715e8afab00ffa56ec455a49a1ad30aa24fcd"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9aaf80207bace17bb7ab145757d5696bde32406ef22b44292ef65d4519c3bb2ad41a59b62cc3e94b6fa96d32a7faadae28af7d35097219aa3fd8cda31e40c275"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "af88b163402c86745cb650c2988fb95211b94b03ef290eed9662034241fd51cf398f8073e369354c43eae1052f9b63b08191caa138aa54fea889cc7024236897"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "48fa7d64e1ceee27b9864db5ada4b53d00c9bc7626555813d3cd6730ab3cc06ff342d727905e33171bde6e8476e77fb1720861e94b73a2c538d254746285f430"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0e6fd97a85e904f87bfe85bbeb34f69e1f18105cf4ed4f87aec36c6e8b5f68bd2a6f3dc8a9ecb2b61db4eedb6b2ea10bf9cb0251fb0f8b344abf7f366b6de5ab"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "06622da5787176287fdc8fed440bad187d830099c94e6d04c8e9c954cda70c8bb9e1fc4a6d0baa831b9b78ef6648681a4867a11da93ee36e5e6a37d87fc63f6f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1da6772b58fabf9c61f68d412c82f182c0236d7d575ef0b58dd22458d643cd1dfc93b03871c316d8430d312995d4197f0874c99172ba004a01ee295abac24e46"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3cd2d9320b7b1d5fb9aab951a76023fa667be14a9124e394513918a3f44096ae4904ba0ffc150b63bc7ab1eeb9a6e257e5c8f000a70394a5afd842715de15f29"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "04cdc14f7434e0b4be70cb41db4c779a88eaef6accebcb41f2d42fffe7f32a8e281b5c103a27021d0d08362250753cdf70292195a53a48728ceb5844c2d98bab"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9071b7a8a075d0095b8fb3ae5113785735ab98e2b52faf91d5b89e44aac5b5d4ebbf91223b0ff4c71905da55342e64655d6ef8c89a4768c3f93a6dc0366b5bc8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ebb30240dd96c7bc8d0abe49aa4edcbb4afdc51ff9aaf720d3f9e7fbb0f9c6d6571350501769fc4ebd0b2141247ff400d4fd4be414edf37757bb90a32ac5c65a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8532c58bf3c8015d9d1cbe00eef1f5082f8f3632fbe9f1ed4f9dfb1fa79e8283066d77c44c4af943d76b300364aecbd0648c8a8939bd204123f4b56260422dec"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fe9846d64f7c7708696f840e2d76cb4408b6595c2f81ec6a28a7f2f20cb88cfe6ac0b9e9b8244f08bd7095c350c1d0842f64fb01bb7f532dfcd47371b0aeeb79"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "28f17ea6fb6c42092dc264257e29746321fb5bdaea9873c2a7fa9d8f53818e899e161bc77dfe8090afd82bf2266c5c1bc930a8d1547624439e662ef695f26f24"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ec6b7d7f030d4850acae3cb615c21dd25206d63e84d1db8d957370737ba0e98467ea0ce274c66199901eaec18a08525715f53bfdb0aacb613d342ebdceeddc3b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b403d3691c03b0d3418df327d5860d34bbfcc4519bfbce36bf33b208385fadb9186bc78a76c489d89fd57e7dc75412d23bcd1dae8470ce9274754bb8585b13c5"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "31fc79738b8772b3f55cd8178813b3b52d0db5a419d30ba9495c4b9da0219fac6df8e7c23a811551a62b827f256ecdb8124ac8a6792ccfecc3b3012722e94463"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bb2039ec287091bcc9642fc90049e73732e02e577e2862b32216ae9bedcd730c4c284ef3968c368b7d37584f97bd4b4dc6ef6127acfe2e6ae2509124e66c8af4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f53d68d13f45edfcb9bd415e2831e938350d5380d3432278fc1c0c381fcb7c65c82dafe051d8c8b0d44e0974a0e59ec7bf7ed0459f86e96f329fc79752510fd3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8d568c7984f0ecdf7640fbc483b5d8c9f86634f6f43291841b309a350ab9c1137d24066b09da9944bac54d5bb6580d836047aac74ab724b887ebf93d4b32eca9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c0b65ce5a96ff774c456cac3b5f2c4cd359b4ff53ef93a3da0778be4900d1e8da1601e769e8f1b02d2a2f8c5b9fa10b44f1c186985468feeb008730283a6657d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4900bba6f5fb103ece8ec96ada13a5c3c85488e05551da6b6b33d988e611ec0fe2e3c2aa48ea6ae8986a3a231b223c5d27cec2eadde91ce07981ee652862d1e4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c7f5c37c7285f927f76443414d4357ff789647d7a005a5a787e03c346b57f49f21b64fa9cf4b7e45573e23049017567121a9c3d4b2b73ec5e9413577525db45a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ec7096330736fdb2d64b5653e7475da746c23a4613a82687a28062d3236364284ac01720ffb406cfe265c0df626a188c9e5963ace5d3d5bb363e32c38c2190a6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "82e744c75f4649ec52b80771a77d475a3bc091989556960e276a5f9ead92a03f718742cdcfeaee5cb85c44af198adc43a4a428f5f0c2ddb0be36059f06d7df73"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2834b7a7170f1f5b68559ab78c1050ec21c919740b784a9072f6e5d69f828d70c919c5039fb148e39e2c8a52118378b064ca8d5001cd10a5478387b966715ed6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "16b4ada883f72f853bb7ef253efcab0c3e2161687ad61543a0d2824f91c1f81347d86be709b16996e17f2dd486927b0288ad38d13063c4a9672c39397d3789b6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "78d048f3a69d8b54ae0ed63a573ae350d89f7c6cf1f3688930de899afa037697629b314e5cd303aa62feea72a25bf42b304b6c6bcb27fae21c16d925e1fbdac3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0f746a48749287ada77a82961f05a4da4abdb7d77b1220f836d09ec814359c0ec0239b8c7b9ff9e02f569d1b301ef67c4612d1de4f730f81c12c40cc063c5caa"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f0fc859d3bd195fbdc2d591e4cdac15179ec0f1dc821c11df1f0c1d26e6260aaa65b79fafacafd7d3ad61e600f250905f5878c87452897647a35b995bcadc3a3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2620f687e8625f6a412460b42e2cef67634208ce10a0cbd4dff7044a41b7880077e9f8dc3b8d1216d3376a21e015b58fb279b521d83f9388c7382c8505590b9b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "227e3aed8d2cb10b918fcb04f9de3e6d0a57e08476d93759cd7b2ed54a1cbf0239c528fb04bbf288253e601d3bc38b21794afef90b17094a182cac557745e75f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1a929901b09c25f27d6b35be7b2f1c4745131fdebca7f3e2451926720434e0db6e74fd693ad29b777dc3355c592a361c4873b01133a57c2e3b7075cbdb86f4fc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5fd7968bc2fe34f220b5e3dc5af9571742d73b7d60819f2888b629072b96a9d8ab2d91b82d0a9aaba61bbd39958132fcc4257023d1eca591b3054e2dc81c8200"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dfcce8cf32870cc6a503eadafc87fd6f78918b9b4d0737db6810be996b5497e7e5cc80e312f61e71ff3e9624436073156403f735f56b0b01845c18f6caf772e6"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "02f7ef3a9ce0fff960f67032b296efca3061f4934d690749f2d01c35c81c14f39a67fa350bc8a0359bf1724bffc3bca6d7c7bba4791fd522a3ad353c02ec5aa8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "64be5c6aba65d594844ae78bb022e5bebe127fd6b6ffa5a13703855ab63b624dcd1a363f99203f632ec386f3ea767fc992e8ed9686586aa27555a8599d5b808f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f78585505c4eaa54a8b5be70a61e735e0ff97af944ddb3001e35d86c4e2199d976104b6ae31750a36a726ed285064f5981b503889fef822fcdc2898dddb7889a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e4b5566033869572edfd87479a5bb73c80e8759b91232879d96b1dda36c012076ee5a2ed7ae2de63ef8406a06aea82c188031b560beafb583fb3de9e57952a7e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e1b3e7ed867f6c9484a2a97f7715f25e25294e992e41f6a7c161ffc2adc6daaeb7113102d5e6090287fe6ad94ce5d6b739c6ca240b05c76fb73f25dd024bf935"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "85fd085fdc12a080983df07bd7012b0d402a0f4043fcb2775adf0bad174f9b08d1676e476985785c0a5dcc41dbff6d95ef4d66a3fbdc4a74b82ba52da0512b74"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "aed8fa764b0fbff821e05233d2f7b0900ec44d826f95e93c343c1bc3ba5a24374b1d616e7e7aba453a0ada5e4fab5382409e0d42ce9c2bc7fb39a99c340c20f0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7ba3b2e297233522eeb343bd3ebcfd835a04007735e87f0ca300cbee6d416565162171581e4020ff4cf176450f1291ea2285cb9ebffe4c56660627685145051c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "de748bcf89ec88084721e16b85f30adb1a6134d664b5843569babc5bbd1a15ca9b61803c901a4fef32965a1749c9f3a4e243e173939dc5a8dc495c671ab52145"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "aaf4d2bdf200a919706d9842dce16c98140d34bc433df320aba9bd429e549aa7a3397652a4d768277786cf993cde2338673ed2e6b66c961fefb82cd20c93338f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c408218968b788bf864f0997e6bc4c3dba68b276e2125a4843296052ff93bf5767b8cdce7131f0876430c1165fec6c4f47adaa4fd8bcfacef463b5d3d0fa61a0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "76d2d819c92bce55fa8e092ab1bf9b9eab237a25267986cacf2b8ee14d214d730dc9a5aa2d7b596e86a1fd8fa0804c77402d2fcd45083688b218b1cdfa0dcbcb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "72065ee4dd91c2d8509fa1fc28a37c7fc9fa7d5b3f8ad3d0d7a25626b57b1b44788d4caf806290425f9890a3a2a35a905ab4b37acfd0da6e4517b2525c9651e4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "64475dfe7600d7171bea0b394e27c9b00d8e74dd1e416a79473682ad3dfdbb706631558055cfc8a40e07bd015a4540dcdea15883cbbf31412df1de1cd4152b91"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "12cd1674a4488a5d7c2b3160d2e2c4b58371bedad793418d6f19c6ee385d70b3e06739369d4df910edb0b0a54cbff43d54544cd37ab3a06cfa0a3ddac8b66c89"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "60756966479dedc6dd4bcff8ea7d1d4ce4d4af2e7b097e32e3763518441147cc12b3c0ee6d2ecabf1198cec92e86a3616fba4f4e872f5825330adbb4c1dee444"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a7803bcb71bc1d0f4383dde1e0612e04f872b715ad30815c2249cf34abb8b024915cb2fc9f4e7cc4c8cfd45be2d5a91eab0941c7d270e2da4ca4a9f7ac68663a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b84ef6a7229a34a750d9a98ee2529871816b87fbe3bc45b45fa5ae82d5141540211165c3c5d7a7476ba5a4aa06d66476f0d9dc49a3f1ee72c3acabd498967414"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fae4b6d8efc3f8c8e64d001dabec3a21f544e82714745251b2b4b393f2f43e0da3d403c64db95a2cb6e23ebb7b9e94cdd5ddac54f07c4a61bd3cb10aa6f93b49"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "34f7286605a122369540141ded79b8957255da2d4155abbf5a8dbb89c8eb7ede8eeef1daa46dc29d751d045dc3b1d658bb64b80ff8589eddb3824b13da235a6b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3b3b48434be27b9eababba43bf6b35f14b30f6a88dc2e750c358470d6b3aa3c18e47db4017fa55106d8252f016371a00f5f8b070b74ba5f23cffc5511c9f09f0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ba289ebd6562c48c3e10a8ad6ce02e73433d1e93d7c9279d4d60a7e879ee11f441a000f48ed9f7c4ed87a45136d7dccdca482109c78a51062b3ba4044ada2469"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "022939e2386c5a37049856c850a2bb10a13dfea4212b4c732a8840a9ffa5faf54875c5448816b2785a007da8a8d2bc7d71a54e4e6571f10b600cbdb25d13ede3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e6fec19d89ce8717b1a087024670fe026f6c7cbda11caef959bb2d351bf856f8055d1c0ebdaaa9d1b17886fc2c562b5e99642fc064710c0d3488a02b5ed7f6fd"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "94c96f02a8f576aca32ba61c2b206f907285d9299b83ac175c209a8d43d53bfe683dd1d83e7549cb906c28f59ab7c46f8751366a28c39dd5fe2693c9019666c8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "31a0cd215ebd2cb61de5b9edc91e6195e31c59a5648d5c9f737e125b2605708f2e325ab3381c8dce1a3e958886f1ecdc60318f882cfe20a24191352e617b0f21"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "91ab504a522dce78779f4c6c6ba2e6b6db5565c76d3e7e7c920caf7f757ef9db7c8fcf10e57f03379ea9bf75eb59895d96e149800b6aae01db778bb90afbc989"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d85cabc6bd5b1a01a5afd8c6734740da9fd1c1acc6db29bfc8a2e5b668b028b6b3154bfb8703fa3180251d589ad38040ceb707c4bad1b5343cb426b61eaa49c1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d62efbec2ca9c1f8bd66ce8b3f6a898cb3f7566ba6568c618ad1feb2b65b76c3ce1dd20f7395372faf28427f61c9278049cf0140df434f5633048c86b81e0399"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7c8fdc6175439e2c3db15bafa7fb06143a6a23bc90f449e79deef73c3d492a671715c193b6fea9f036050b946069856b897e08c00768f5ee5ddcf70b7cd6d0e0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "58602ee7468e6bc9df21bd51b23c005f72d6cb013f0a1b48cbec5eca299299f97f09f54a9a01483eaeb315a6478bad37ba47ca1347c7c8fc9e6695592c91d723"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "27f5b79ed256b050993d793496edf4807c1d85a7b0a67c9c4fa99860750b0ae66989670a8ffd7856d7ce411599e58c4d77b232a62bef64d15275be46a68235ff"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3957a976b9f1887bf004a8dca942c92d2b37ea52600f25e0c9bc5707d0279c00c6e85a839b0d2d8eb59c51d94788ebe62474a791cadf52cccf20f5070b6573fc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "eaa2376d55380bf772ecca9cb0aa4668c95c707162fa86d518c8ce0ca9bf7362b9f2a0adc3ff59922df921b94567e81e452f6c1a07fc817cebe99604b3505d38"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c1e2c78b6b2734e2480ec550434cb5d613111adcc21d475545c3b1b7e6ff12444476e5c055132e2229dc0f807044bb919b1a5662dd38a9ee65e243a3911aed1a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8ab48713389dd0fcf9f965d3ce66b1e559a1f8c58741d67683cd971354f452e62d0207a65e436c5d5d8f8ee71c6abfe50e669004c302b31a7ea8311d4a916051"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "24ce0addaa4c65038bd1b1c0f1452a0b128777aabc94a29df2fd6c7e2f85f8ab9ac7eff516b0e0a825c84a24cfe492eaad0a6308e46dd42fe8333ab971bb30ca"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5154f929ee03045b6b0c0004fa778edee1d139893267cc84825ad7b36c63de32798e4a166d24686561354f63b00709a1364b3c241de3febf0754045897467cd4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e74e907920fd87bd5ad636dd11085e50ee70459c443e1ce5809af2bc2eba39f9e6d7128e0e3712c316da06f4705d78a4838e28121d4344a2c79c5e0db307a677"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bf91a22334bac20f3fd80663b3cd06c4e8802f30e6b59f90d3035cc9798a217ed5a31abbda7fa6842827bdf2a7a1c21f6fcfccbb54c6c52926f32da816269be1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d9d5c74be5121b0bd742f26bffb8c89f89171f3f934913492b0903c271bbe2b3395ef259669bef43b57f7fcc3027db01823f6baee66e4f9fead4d6726c741fce"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "50c8b8cf34cd879f80e2faab3230b0c0e1cc3e9dcadeb1b9d97ab923415dd9a1fe38addd5c11756c67990b256e95ad6d8f9fedce10bf1c90679cde0ecf1be347"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0a386e7cd5dd9b77a035e09fe6fee2c8ce61b5383c87ea43205059c5e4cd4f4408319bb0a82360f6a58e6c9ce3f487c446063bf813bc6ba535e17fc1826cfc91"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1f1459cb6b61cbac5f0efe8fc487538f42548987fcd56221cfa7beb22504769e792c45adfb1d6b3d60d7b749c8a75b0bdf14e8ea721b95dca538ca6e25711209"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e58b3836b7d8fedbb50ca5725c6571e74c0785e97821dab8b6298c10e4c079d4a6cdf22f0fedb55032925c16748115f01a105e77e00cee3d07924dc0d8f90659"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b929cc6505f020158672deda56d0db081a2ee34c00c1100029bdf8ea98034fa4bf3e8655ec697fe36f40553c5bb46801644a627d3342f4fc92b61f03290fb381"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "72d353994b49d3e03153929a1e4d4f188ee58ab9e72ee8e512f29bc773913819ce057ddd7002c0433ee0a16114e3d156dd2c4a7e80ee53378b8670f23e33ef56"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c70ef9bfd775d408176737a0736d68517ce1aaad7e81a93c8c1ed967ea214f56c8a377b1763e676615b60f3988241eae6eab9685a5124929d28188f29eab06f7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c230f0802679cb33822ef8b3b21bf7a9a28942092901d7dac3760300831026cf354c9232df3e084d9903130c601f63c1f4a4a4b8106e468cd443bbe5a734f45f"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6f43094cafb5ebf1f7a4937ec50f56a4c9da303cbb55ac1f27f1f1976cd96beda9464f0e7b9c54620b8a9fba983164b8be3578425a024f5fe199c36356b88972"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3745273f4c38225db2337381871a0c6aafd3af9b018c88aa02025850a5dc3a42a1a3e03e56cbf1b0876d63a441f1d2856a39b8801eb5af325201c415d65e97fe"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c50c44cca3ec3edaae779a7e179450ebdda2f97067c690aa6c5a4ac7c30139bb27c0df4db3220e63cb110d64f37ffe078db72653e2daacf93ae3f0a2d1a7eb2e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8aef263e385cbc61e19b28914243262af5afe8726af3ce39a79c27028cf3ecd3f8d2dfd9cfc9ad91b58f6f20778fd5f02894a3d91c7d57d1e4b866a7f364b6be"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "28696141de6e2d9bcb3235578a66166c1448d3e905a1b482d423be4bc5369bc8c74dae0acc9cc123e1d8ddce9f97917e8c019c552da32d39d2219b9abf0fa8c8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2fb9eb2085830181903a9dafe3db428ee15be7662224efd643371fb25646aee716e531eca69b2bdc8233f1a8081fa43da1500302975a77f42fa592136710e9dc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "66f9a7143f7a3314a669bf2e24bbb35014261d639f495b6c9c1f104fe8e320aca60d4550d69d52edbd5a3cdeb4014ae65b1d87aa770b69ae5c15f4330b0b0ad8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f4c4dd1d594c3565e3e25ca43dad82f62abea4835ed4cd811bcd975e46279828d44d4c62c3679f1b7f7b9dd4571d7b49557347b8c5460cbdc1bef690fb2a08c0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8f1dc9649c3a84551f8f6e91cac68242a43b1f8f328ee92280257387fa7559aa6db12e4aeadc2d26099178749c6864b357f3f83b2fb3efa8d2a8db056bed6bcc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3139c1a7f97afd1675d460ebbc07f2728aa150df849624511ee04b743ba0a833092f18c12dc91b4dd243f333402f59fe28abdbbbae301e7b659c7a26d5c0f979"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "06f94a2996158a819fe34c40de3cf0379fd9fb85b3e363ba3926a0e7d960e3f4c2e0c70c7ce0ccb2a64fc29869f6e7ab12bd4d3f14fce943279027e785fb5c29"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c29c399ef3eee8961e87565c1ce263925fc3d0ce267d13e48dd9e732ee67b0f69fad56401b0f10fcaac119201046cca28c5b14abdea3212ae65562f7f138db3d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4cec4c9df52eef05c3f6faaa9791bc7445937183224ecc37a1e58d0132d35617531d7e795f52af7b1eb9d147de1292d345fe341823f8e6bc1e5badca5c656108"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "898bfbae93b3e18d00697eab7d9704fa36ec339d076131cefdf30edbe8d9cc81c3a80b129659b163a323bab9793d4feed92d54dae966c77529764a09be88db45"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ee9bd0469d3aaf4f14035be48a2c3b84d9b4b1fff1d945e1f1c1d38980a951be197b25fe22c731f20aeacc930ba9c4a1f4762227617ad350fdabb4e80273a0f4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3d4d3113300581cd96acbf091c3d0f3c310138cd6979e6026cde623e2dd1b24d4a8638bed1073344783ad0649cc6305ccec04beb49f31c633088a99b65130267"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "95c0591ad91f921ac7be6d9ce37e0663ed8011c1cfd6d0162a5572e94368bac02024485e6a39854aa46fe38e97d6c6b1947cd272d86b06bb5b2f78b9b68d559d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "227b79ded368153bf46c0a3ca978bfdbef31f3024a5665842468490b0ff748ae04e7832ed4c9f49de9b1706709d623e5c8c15e3caecae8d5e433430ff72f20eb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5d34f3952f0105eef88ae8b64c6ce95ebfade0e02c69b08762a8712d2e4911ad3f941fc4034dc9b2e479fdbcd279b902faf5d838bb2e0c6495d372b5b7029813"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7f939bf8353abce49e77f14f3750af20b7b03902e1a1e7fb6aaf76d0259cd401a83190f15640e74f3e6c5a90e839c7821f6474757f75c7bf9002084ddc7a62dc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "062b61a2f9a33a71d7d0a06119644c70b0716a504de7e5e1be49bd7b86e7ed6817714f9f0fc313d06129597e9a2235ec8521de36f7290a90ccfc1ffa6d0aee29"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f29e01eeae64311eb7f1c6422f946bf7bea36379523e7b2bbaba7d1d34a22d5ea5f1c5a09d5ce1fe682cced9a4798d1a05b46cd72dff5c1b355440b2a2d476bc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ec38cd3bbab3ef35d7cb6d5c914298351d8a9dc97fcee051a8a02f58e3ed6184d0b7810a5615411ab1b95209c3c810114fdeb22452084e77f3f847c6dbaafe16"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c2aef5e0ca43e82641565b8cb943aa8ba53550caef793b6532fafad94b816082f0113a3ea2f63608ab40437ecc0f0229cb8fa224dcf1c478a67d9b64162b92d1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "15f534efff7105cd1c254d074e27d5898b89313b7d366dc2d7d87113fa7d53aae13f6dba487ad8103d5e854c91fdb6e1e74b2ef6d1431769c30767dde067a35c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "89acbca0b169897a0a2714c2df8c95b5b79cb69390142b7d6018bb3e3076b099b79a964152a9d912b1b86412b7e372e9cecad7f25d4cbab8a317be36492a67d7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e3c0739190ed849c9c962fd9dbb55e207e624fcac1eb417691515499eea8d8267b7e8f1287a63633af5011fde8c4ddf55bfdf722edf88831414f2cfaed59cb9a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8d6cf87c08380d2d1506eee46fd4222d21d8c04e585fbfd08269c98f702833a156326a0724656400ee09351d57b440175e2a5de93cc5f80db6daf83576cf75fa"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "da24bede383666d563eeed37f6319baf20d5c75d1635a6ba5ef4cfa1ac95487e96f8c08af600aab87c986ebad49fc70a58b4890b9c876e091016daf49e1d322e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f9d1d1b1e87ea7ae753a029750cc1cf3d0157d41805e245c5617bb934e732f0ae3180b78e05bfe76c7c3051e3e3ac78b9b50c05142657e1e03215d6ec7bfd0fc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "11b7bc1668032048aa43343de476395e814bbbc223678db951a1b03a021efac948cfbe215f97fe9a72a2f6bc039e3956bfa417c1a9f10d6d7ba5d3d32ff323e5"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b8d9000e4fc2b066edb91afee8e7eb0f24e3a201db8b6793c0608581e628ed0bcc4e5aa6787992a4bcc44e288093e63ee83abd0bc3ec6d0934a674a4da13838a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ce325e294f9b6719d6b61278276ae06a2564c03bb0b783fafe785bdf89c7d5acd83e78756d301b445699024eaeb77b54d477336ec2a4f332f2b3f88765ddb0c3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "29acc30e9603ae2fccf90bf97e6cc463ebe28c1b2f9b4b765e70537c25c702a29dcbfbf14c99c54345ba2b51f17b77b5f15db92bbad8fa95c471f5d070a137cc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3379cbaae562a87b4c0425550ffdd6bfe1203f0d666cc7ea095be407a5dfe61ee91441cd5154b3e53b4f5fb31ad4c7a9ad5c7af4ae679aa51a54003a54ca6b2d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3095a349d245708c7cf550118703d7302c27b60af5d4e67fc978f8a4e60953c7a04f92fcf41aee64321ccb707a895851552b1e37b00bc5e6b72fa5bcef9e3fff"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "07262d738b09321f4dbccec4bb26f48cb0f0ed246ce0b31b9a6e7bc683049f1f3e5545f28ce932dd985c5ab0f43bd6de0770560af329065ed2e49d34624c2cbb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b6405eca8ee3316c87061cc6ec18dba53e6c250c63ba1f3bae9e55dd3498036af08cd272aa24d713c6020d77ab2f3919af1a32f307420618ab97e73953994fb4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7ee682f63148ee45f6e5315da81e5c6e557c2c34641fc509c7a5701088c38a74756168e2cd8d351e88fd1a451f360a01f5b2580f9b5a2e8cfc138f3dd59a3ffc"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1d263c179d6b268f6fa016f3a4f29e943891125ed8593c81256059f5a7b44af2dcb2030d175c00e62ecaf7ee96682aa07ab20a611024a28532b1c25b86657902"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "106d132cbdb4cd2597812846e2bc1bf732fec5f0a5f65dbb39ec4e6dc64ab2ce6d24630d0f15a805c3540025d84afa98e36703c3dbee713e72dde8465bc1be7e"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0e79968226650667a8d862ea8da4891af56a4e3a8b6d1750e394f0dea76d640d85077bcec2cc86886e506751b4f6a5838f7f0b5fef765d9dc90dcdcbaf079f08"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "521156a82ab0c4e566e5844d5e31ad9aaf144bbd5a464fdca34dbd5717e8ff711d3ffebbfa085d67fe996a34f6d3e4e60b1396bf4b1610c263bdbb834d560816"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1aba88befc55bc25efbce02db8b9933e46f57661baeabeb21cc2574d2a518a3cba5dc5a38e49713440b25f9c744e75f6b85c9d8f4681f676160f6105357b8406"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5a9949fcb2c473cda968ac1b5d08566dc2d816d960f57e63b898fa701cf8ebd3f59b124d95bfbbedc5f1cf0e17d5eaed0c02c50b69d8a402cabcca4433b51fd4"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b0cead09807c672af2eb2b0f06dde46cf5370e15a4096b1a7d7cbb36ec31c205fbefca00b7a4162fa89fb4fb3eb78d79770c23f44e7206664ce3cd931c291e5d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bb6664931ec97044e45b2ae420ae1c551a8874bc937d08e969399c3964ebdba8346cdd5d09caafe4c28ba7ec788191ceca65ddd6f95f18583e040d0f30d0364d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "65bc770a5faa3792369803683e844b0be7ee96f29f6d6a35568006bd5590f9a4ef639b7a8061c7b0424b66b60ac34af3119905f33a9d8c3ae18382ca9b689900"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ea9b4dca333336aaf839a45c6eaa48b8cb4c7ddabffea4f643d6357ea6628a480a5b45f2b052c1b07d1fedca918b6f1139d80f74c24510dcbaa4be70eacc1b06"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e6342fb4a780ad975d0e24bce149989b91d360557e87994f6b457b895575cc02d0c15bad3ce7577f4c63927ff13f3e381ff7e72bdbe745324844a9d27e3f1c01"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3e209c9b33e8e461178ab46b1c64b49a07fb745f1c8bc95fbfb94c6b87c69516651b264ef980937fad41238b91ddc011a5dd777c7efd4494b4b6ecd3a9c22ac0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fd6a3d5b1875d80486d6e69694a56dbb04a99a4d051f15db2689776ba1c4882e6d462a603b7015dc9f4b7450f05394303b8652cfb404a266962c41bae6e18a94"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "951e27517e6bad9e4195fc8671dee3e7e9be69cee1422cb9fecfce0dba875f7b310b93ee3a3d558f941f635f668ff832d2c1d033c5e2f0997e4c66f147344e02"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8eba2f874f1ae84041903c7c4253c82292530fc8509550bfdc34c95c7e2889d5650b0ad8cb988e5c4894cb87fbfbb19612ea93ccc4c5cad17158b9763464b492"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "16f712eaa1b7c6354719a8e7dbdfaf55e4063a4d277d947550019b38dfb564830911057d50506136e2394c3b28945cc964967d54e3000c2181626cfb9b73efd2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c39639e7d5c7fb8cdd0fd3e6a52096039437122f21c78f1679cea9d78a734c56ecbeb28654b4f18e342c331f6f7229ec4b4bc281b2d80a6eb50043f31796c88c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "72d081af99f8a173dcc9a0ac4eb3557405639a29084b54a40172912a2f8a395129d5536f0918e902f9e8fa6000995f4168ddc5f893011be6a0dbc9b8a1a3f5bb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c11aa81e5efd24d5fc27ee586cfd8847fbb0e27601ccece5ecca0198e3c7765393bb74457c7e7a27eb9170350e1fb53857177506be3e762cc0f14d8c3afe9077"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c28f2150b452e6c0c424bcde6f8d72007f9310fed7f2f87de0dbb64f4479d6c1441ba66f44b2accee61609177ed340128b407ecec7c64bbe50d63d22d8627727"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f63d88122877ec30b8c8b00d22e89000a966426112bd44166e2f525b769ccbe9b286d437a0129130dde1a86c43e04bedb594e671d98283afe64ce331de9828fd"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "348b0532880b88a6614a8d7408c3f913357fbb60e995c60205be9139e74998aede7f4581e42f6b52698f7fa1219708c14498067fd1e09502de83a77dd281150c"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5133dc8bef725359dff59792d85eaf75b7e1dcd1978b01c35b1b85fcebc63388ad99a17b6346a217dc1a9622ebd122ecf6913c4d31a6b52a695b86af00d741a0"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2753c4c0e98ecad806e88780ec27fccd0f5c1ab547f9e4bf1659d192c23aa2cc971b58b6802580baef8adc3b776ef7086b2545c2987f348ee3719cdef258c403"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b1663573ce4b9d8caefc865012f3e39714b9898a5da6ce17c25a6a47931a9ddb9bbe98adaa553beed436e89578455416c2a52a525cf2862b8d1d49a2531b7391"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "64f58bd6bfc856f5e873b2a2956ea0eda0d6db0da39c8c7fc67c9f9feefcff3072cdf9e6ea37f69a44f0c61aa0da3693c2db5b54960c0281a088151db42b11e8"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0764c7be28125d9065c4b98a69d60aede703547c66a12e17e1c618994132f5ef82482c1e3fe3146cc65376cc109f0138ed9a80e49f1f3c7d610d2f2432f20605"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f748784398a2ff03ebeb07e155e66116a839741a336e32da71ec696001f0ad1b25cd48c69cfca7265eca1dd71904a0ce748ac4124f3571076dfa7116a9cf00e9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3f0dbc0186bceb6b785ba78d2a2a013c910be157bdaffae81bb6663b1a73722f7f1228795f3ecada87cf6ef0078474af73f31eca0cc200ed975b6893f761cb6d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d4762cd4599876ca75b2b8fe249944dbd27ace741fdab93616cbc6e425460feb51d4e7adcc38180e7fc47c89024a7f56191adb878dfde4ead62223f5a2610efe"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cd36b3d5b4c91b90fcbba79513cfee1907d8645a162afd0cd4cf4192d4a5f4c892183a8eacdb2b6b6a9d9aa8c11ac1b261b380dbee24ca468f1bfd043c58eefe"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "98593452281661a53c48a9d8cd790826c1a1ce567738053d0bee4a91a3d5bd92eefdbabebe3204f2031ca5f781bda99ef5d8ae56e5b04a9e1ecd21b0eb05d3e1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "771f57dd2775ccdab55921d3e8e30ccf484d61fe1c1b9c2ae819d0fb2a12fab9be70c4a7a138da84e8280435daade5bbe66af0836a154f817fb17f3397e725a3"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c60897c6f828e21f16fbb5f15b323f87b6c8955eabf1d38061f707f608abdd993fac3070633e286cf8339ce295dd352df4b4b40b2f29da1dd50b3a05d079e6bb"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8210cd2c2d3b135c2cf07fa0d1433cd771f325d075c6469d9c7f1ba0943cd4ab09808cabf4acb9ce5bb88b498929b4b847f681ad2c490d042db2aec94214b06b"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1d4edfffd8fd80f7e4107840fa3aa31e32598491e4af7013c197a65b7f36dd3ac4b478456111cd4309d9243510782fa31b7c4c95fa951520d020eb7e5c36e4ef"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "af8e6e91fab46ce4873e1a50a8ef448cc29121f7f74deef34a71ef89cc00d9274bc6c2454bbb3230d8b2ec94c62b1dec85f3593bfa30ea6f7a44d7c09465a253"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "29fd384ed4906f2d13aa9fe7af905990938bed807f1832454a372ab412eea1f5625a1fcc9ac8343b7c67c5aba6e0b1cc4644654913692c6b39eb9187ceacd3ec"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a268c7885d9874a51c44dffed8ea53e94f78456e0b2ed99ff5a3924760813826d960a15edbedbb5de5226ba4b074e71b05c55b9756bb79e55c02754c2c7b6c8a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0cf8545488d56a86817cd7ecb10f7116b7ea530a45b6ea497b6c72c997e09e3d0da8698f46bb006fc977c2cd3d1177463ac9057fdd1662c85d0c126443c10473"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b39614268fdd8781515e2cfebf89b4d5402bab10c226e6344e6b9ae000fb0d6c79cb2f3ec80e80eaeb1980d2f8698916bd2e9f747236655116649cd3ca23a837"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "74bef092fc6f1e5dba3663a3fb003b2a5ba257496536d99f62b9d73f8f9eb3ce9ff3eec709eb883655ec9eb896b9128f2afc89cf7d1ab58a72f4a3bf034d2b4a"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3a988d38d75611f3ef38b8774980b33e573b6c57bee0469ba5eed9b44f29945e7347967fba2c162e1c3be7f310f2f75ee2381e7bfd6b3f0baea8d95dfb1dafb1"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "58aedfce6f67ddc85a28c992f1c0bd0969f041e66f1ee88020a125cbfcfebcd61709c9c4eba192c15e69f020d462486019fa8dea0cd7a42921a19d2fe546d43d"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9347bd291473e6b4e368437b8e561e065f649a6d8ada479ad09b1999a8f26b91cf6120fd3bfe014e83f23acfa4c0ad7b3712b2c3c0733270663112ccd9285cd9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b32163e7c5dbb5f51fdc11d2eac875efbbcb7e7699090a7e7ff8a8d50795af5d74d9ff98543ef8cdf89ac13d0485278756e0ef00c817745661e1d59fe38e7537"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1085d78307b1c4b008c57a2e7e5b234658a0a82e4ff1e4aaac72b312fda0fe27d233bc5b10e9cc17fdc7697b540c7d95eb215a19a1a0e20e1abfa126efd568c7"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4e5c734c7dde011d83eac2b7347b373594f92d7091b9ca34cb9c6f39bdf5a8d2f134379e16d822f6522170ccf2ddd55c84b9e6c64fc927ac4cf8dfb2a17701f2"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "695d83bd990a1117b3d0ce06cc888027d12a054c2677fd82f0d4fbfc93575523e7991a5e35a3752e9b70ce62992e268a877744cdd435f5f130869c9a2074b338"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a6213743568e3b3158b9184301f3690847554c68457cb40fc9a4b8cfd8d4a118c301a07737aeda0f929c68913c5f51c80394f53bff1c3e83b2e40ca97eba9e15"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d444bfa2362a96df213d070e33fa841f51334e4e76866b8139e8af3bb3398be2dfaddcbc56b9146de9f68118dc5829e74b0c28d7711907b121f9161cb92b69a9"
+},
+{
+    "hash": "blake2b",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "142709d62e28fcccd0af97fad0f8465b971e82201dc51070faa0372aa43e92484be1c1e73ba10906d5d1853db6a4106e0a7bf9800d373d6dee2d46d62ef2a461"
+},
+{
+    "hash": "blake2sp",
+    "in": "",
+    "key": "",
+    "out": "dd0e891776933f43c7d032b08a917e25741f8aa9a12c12e1cac8801500f2ca4f"
+},
+{
+    "hash": "blake2sp",
+    "in": "00",
+    "key": "",
+    "out": "a6b9eecc25227ad788c99d3f236debc8da408849e9a5178978727a81457f7239"
+},
+{
+    "hash": "blake2sp",
+    "in": "0001",
+    "key": "",
+    "out": "dacadece7a8e6bf3abfe324ca695436984b8195d29f6bbd896e41e18e21c9145"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102",
+    "key": "",
+    "out": "ed14413b40da689f1f7fed2b08dff45b8092db5ec2c3610e02724d202f423c46"
+},
+{
+    "hash": "blake2sp",
+    "in": "00010203",
+    "key": "",
+    "out": "9b8a527b5272250a1ec397388f040914954806e794db04b70a4611bc59586a83"
+},
+{
+    "hash": "blake2sp",
+    "in": "0001020304",
+    "key": "",
+    "out": "2bb6333729000be3d5a21b98f8e7ead077f151a5393919eb67c876ee00bbbb04"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405",
+    "key": "",
+    "out": "63c01408154ad19d7fb739f311781780462cf2eecce60f064e853487c272e3eb"
+},
+{
+    "hash": "blake2sp",
+    "in": "00010203040506",
+    "key": "",
+    "out": "3d051a1176019ca37bf33d60427f8d9d1c3abd598297cfb4235f747d7c7c7fec"
+},
+{
+    "hash": "blake2sp",
+    "in": "0001020304050607",
+    "key": "",
+    "out": "391ea912df4d4d79a4646d9da2549a446d2240f62415d070a2e093992b471fba"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708",
+    "key": "",
+    "out": "324640440ea5c3082ddc309e7809d741d6cc1b2d490ff8c052128a6eeb409d62"
+},
+{
+    "hash": "blake2sp",
+    "in": "00010203040506070809",
+    "key": "",
+    "out": "ab855e6fa39a5e8fc90eacb999c7f78ae71e59c3d97d60afe517d587923b7711"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a",
+    "key": "",
+    "out": "2a39da4586efc47785a7a8da85683a51724cdef5413b356dc4fb500513f8fa2e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b",
+    "key": "",
+    "out": "8a0057c1f78ad6214555c0670733e29a4c7e956227660efeb1d7fc79f58ec6f2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c",
+    "key": "",
+    "out": "0764b0017f5bd951f01d9fdf95c0cb4138985d84799cd42984e25b512800e73c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d",
+    "key": "",
+    "out": "cc02495693c8e184ad2ed09d533dc33b76a7783d6207fcaccb64f3ed2c6d66e0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e",
+    "key": "",
+    "out": "c0df49c206a34288143216847df334d4569dad73c2b1ff6284884fd38941fb95"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f",
+    "key": "",
+    "out": "b9194519e4978a9dc893b28bd808cdfabb1bd510d862b3171ff6e017a41b804c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f10",
+    "key": "",
+    "out": "bba927acf11bebd362a3a3eb78c4bb65e602a8709fcef38dc6c8b7bda664c32c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f1011",
+    "key": "",
+    "out": "ecb4900a63924e720d40f2d2b14d1bb39c3701ad7346bd0b67234270bfbe7e70"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112",
+    "key": "",
+    "out": "f8315a21b25e6ba8bf59b17b05913b8ca4659f1cd838fcc773c9eb12e7004e09"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213",
+    "key": "",
+    "out": "4b77af67a9232bf1184e57818294031e55f1f853c94dbab5577547330d65aa61"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314",
+    "key": "",
+    "out": "768568390fd2b87094114ed4cf723ea320fe977b53180305c384335479f0b59b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415",
+    "key": "",
+    "out": "a431cb270f3e2c9b7a9593b155ccecff5b5c4a2dcd5d6bb1c485aa286997f915"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516",
+    "key": "",
+    "out": "d691fa6a790b1a517980087f50b03ded8c6ed486d084221c827d9bd922beb8c0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314151617",
+    "key": "",
+    "out": "8f978a4932f4459813e8fe15686e4efa25c2c5ff5a3a4f8c9b14965d2f0be461"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718",
+    "key": "",
+    "out": "1efbd0c131449142f2295f2d42411dfe0f48d4acae762d8df67a570bf7b1dcd5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516171819",
+    "key": "",
+    "out": "d53ba93346143ab8e0d3d1bf272706d169e66c69c7b8f4a5e82fef440702bcf2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a",
+    "key": "",
+    "out": "f71a3ec01aa382ea76992b430a7f42c7ad2a86aea9c19e76cd1732ec6830de6f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b",
+    "key": "",
+    "out": "80a6ab7b710464f93e6cba96864aa6409bcafc1bf4b32a309372e857e804068c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c",
+    "key": "",
+    "out": "dbde81e51a52174b1014901b53bef88de93b29e274347e8e9a7b037456629f35"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d",
+    "key": "",
+    "out": "75f274466b1a2d0fd845bbb57c38c989516e1568320ab517b163eaf709234cc7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e",
+    "key": "",
+    "out": "afe1a0591c491d416eb64f6286f3ba29d4c9998214a3831c39014ac030557945"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "key": "",
+    "out": "67ff6acdbe8a99a166a5d9cf32136506b548d6c947c24c699cea3afd92adfaca"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+    "key": "",
+    "out": "bfb4d0c7112075262c2dd248f334b2ef1540087ecc7382bc2a272575c5009f70"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021",
+    "key": "",
+    "out": "17c94b9c537243f2335b863949b2b91c98a6956d7c10aa989959a80f910c2522"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122",
+    "key": "",
+    "out": "f6338f434d319410196d9519abcaeff7d55439fd2aa5babf7a7e7913b294ed4d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
+    "key": "",
+    "out": "08ef7d65f9bbf3da1f7884ae9b75901fd85295662a6ea71de08bee3834576278"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324",
+    "key": "",
+    "out": "1647ecc2ba13f8b93b2fbcdc4e8f1dfa47fe3be12aaa0e459b0e5a87f3a69bb0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425",
+    "key": "",
+    "out": "ff927a717881f6fd8ed8bf5d5e35bd80161573e5829404c32d2a276a01f4b906"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526",
+    "key": "",
+    "out": "c8caf136ff209c82e0240c1e62a3bc7e9cac873b011cf7c5e67ec187a5fbcd96"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627",
+    "key": "",
+    "out": "d9acc73e3f421e1883b5ed53d82a9aec8f5dc980c42bcaeb0e7d8976a338ef51"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728",
+    "key": "",
+    "out": "9f173fcf08a5362193f352c8256ae534ae9ce7bfa4bc09fac90098f98a716294"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829",
+    "key": "",
+    "out": "0a724579dc80bc0c9004e51be7eff3afa53075ab4a32557733586e820fd36423"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a",
+    "key": "",
+    "out": "38f7c340f4b159b1e594f6eb83284917b7aa19c74f57117a4e08cf7c4e32a23c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b",
+    "key": "",
+    "out": "1c674be257e9b33134d4168f152f8b63dfd780c97dc4dc37ac26cc0aefb79c1a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c",
+    "key": "",
+    "out": "2f0c597616d5751714a5fb4ebf3c481a96c3ad145ebde06509f3a2e5f2c13fc8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d",
+    "key": "",
+    "out": "fddc69e0c983cd8283ed8188bec4e5f41dea3d01b9e74c4baf7341d8b4bf553d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e",
+    "key": "",
+    "out": "24d083cba038c87e9acb8681820208b75cb3293a96c9efa75d2c63f16b85fe1e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f",
+    "key": "",
+    "out": "7f6a649cca89b253ffbd20c016980100a87c168109628fcc66525d8baafe505f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
+    "key": "",
+    "out": "6da373b4c18792b3209add15a5074a1d70c10bb39480ca3fe5c439d95fc286ca"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031",
+    "key": "",
+    "out": "270affa6426f1a515c9b76dfc27d181fc2fd57d082a3ba2c1eef071533a6dfb7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132",
+    "key": "",
+    "out": "c22e15cfc5a3d14b64d131f35fb35dd5e6c57dc4afc552277501eca764da74bf"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233",
+    "key": "",
+    "out": "ad683e96b8ac658c4f3f10ad22d99b07cb5ef9e31cbe11e7f7dc29f2aee5024c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334",
+    "key": "",
+    "out": "78d3ceda1ce05293f430f6167b33c99f0b1d6dade52143c2925577c0ba8253eb"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435",
+    "key": "",
+    "out": "e006456344f90f501c25813f9be2a3f40b9874fa0563981cd456ee8d44807c93"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536",
+    "key": "",
+    "out": "3908e8d547c0afb1134949466304a145027e6bb7a74dd1c162cdf0bcf77237e8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637",
+    "key": "",
+    "out": "1b6c87a34838c7cd5fd08914224e90c22abf5a97b10646d98c4916d3a8939e62"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738",
+    "key": "",
+    "out": "b0d38f82f248916952b316b6d36d9e022df6eecc26c762a655cf5f0ae649e2bd"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839",
+    "key": "",
+    "out": "8d66fc9ceda5eddfb1e04d096ca70ef50650fb87cc6a9ffbb3d20bce7b5a6074"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a",
+    "key": "",
+    "out": "064354e8e11cf713b2c72ba67ac7d76e41ba61db9c2dea522e0bda17cba5e392"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b",
+    "key": "",
+    "out": "c8ef5f498bd1bc707fbc7b5cbc2dff0493144ac52786db3c793ef4ae8a838847"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c",
+    "key": "",
+    "out": "8a2397df31e7f0cc290da9a8bbe4f5f7a3a13750730db62dc2540fdbd6188589"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d",
+    "key": "",
+    "out": "f12d0b13c6adfb3be50a51eb6baf65abfb1700baa87e527dbe3e675a7a994661"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e",
+    "key": "",
+    "out": "1024c940be7341449b5010522b509f65bbdc1287b455c2bb7f72b2c92fd0d189"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "key": "",
+    "out": "52603b6cbfad4966cb044cb267568385cf35f21e6c45cf30aed19832cb51e9f5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40",
+    "key": "",
+    "out": "fff24d3cc729d395daf978b0157306cb495797e6c8dca1731d2f6f81b849baae"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041",
+    "key": "",
+    "out": "41eee90d47ec2772cd352dfd67e0605fbdfc5fd6d826451e3d064d3828bd3bae"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142",
+    "key": "",
+    "out": "300b6b36e59f851dddc29bfa93082520cd77c51e007e00d2d78b26f4af961532"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243",
+    "key": "",
+    "out": "9ef30314834e401c871a2004e38d5ce32ed28e1137f1970f4f4378c73706763d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344",
+    "key": "",
+    "out": "3fbdcde7b64304025ec0582609031ec266d50f56835ae0cb72d8cdb4cfaf4419"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445",
+    "key": "",
+    "out": "e90ead3b982b435b66366a496c3f8ae65b17613700f547673f62153541912864"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546",
+    "key": "",
+    "out": "abe3547b336d6e240d7fe682d74b9cc7e8d7f9b5664858b94df59e9fc330d9e5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647",
+    "key": "",
+    "out": "b299642095b8286c521cdb21ed0fe057278021bb4038eb5a3d79542f5d751f54"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748",
+    "key": "",
+    "out": "e4d758359f086793a83754aca6968c3e9fd94b40497f2ec224a2916063a214a3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849",
+    "key": "",
+    "out": "59a304fc03ab75d557db04ebd02dd4c6b810a138bbfeea5dfceeaa2b75b06491"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a",
+    "key": "",
+    "out": "3995102215f5fe9210eb30d952d8c919589e7145fcd495ea78d02b9c148faf09"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b",
+    "key": "",
+    "out": "472ee711563506a5f0083fe82b08b9923cf6c8404d0cbacbf84864f648542ac0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c",
+    "key": "",
+    "out": "68fdb82adae79bef590aba62d7ac553212061c36e36f12c0efa29a1762de3b6a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d",
+    "key": "",
+    "out": "7585c0773383f174fd666549a8352b305bf6855bc98bea28c391b3c034da5a5a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e",
+    "key": "",
+    "out": "acc575fe2cd7ba2a31fc7d670a9234af68503386e959073d16a81b33b922b50e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
+    "key": "",
+    "out": "9ec7d2995943d39d6b971493b897a0ee2d3392a72db875c2405d357178fb6911"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50",
+    "key": "",
+    "out": "2d7ef19401425aba450e82d36d0fe7b2085ea0af6045a5994cf431ea59939cc9"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051",
+    "key": "",
+    "out": "f32fd855f011c718027f2ebe377d6939f12370caff151c1e5ace438d703c6d9f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152",
+    "key": "",
+    "out": "b2bd83d2310d3d7b1d2d5aaf4359fae28612962719fdde4ddaf69e7820f33f61"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253",
+    "key": "",
+    "out": "1a7a9d0f44ddfa7fc2f4770cad7422fa6c4e37e6cb036d899e102750e594ffcd"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354",
+    "key": "",
+    "out": "dc69f6141c8e103ff61f6298a2c44f52d147366ddbd9c79cc308fe84336a9564"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455",
+    "key": "",
+    "out": "e34ed417b0791d9a77ee1e50cc2c207e540c77140421c46ce0862878aaeb2709"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556",
+    "key": "",
+    "out": "2174425c8ccae398c4ff06f848991c5e9bc0f3461111706fb95d0be1c68e4760"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657",
+    "key": "",
+    "out": "1894582a8a25fe8f847a4a032574b77b8b36bf19997526bb4bc85f3824537feb"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758",
+    "key": "",
+    "out": "17ed188ae3c953d655445983b8325bafff32e222b2dfeb16e8617abf86ee7cc5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859",
+    "key": "",
+    "out": "f1489ad1c354cde9789237ea6dbf67fc1e44d1acc8dc66ad838727f47d9a91fe"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a",
+    "key": "",
+    "out": "367f22165b8b66e97f6670f34eba2749d2643b21beadadfefea2574b7c9b2196"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b",
+    "key": "",
+    "out": "3d8dfea17eea5d645ac1d41a5b59226c486c36bd77ed44bb349170d080e30e68"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c",
+    "key": "",
+    "out": "4115f89e0b3b5c8f6122c02500171dcffbcea4662a8c5f8c1c01a9ca7b1027bb"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d",
+    "key": "",
+    "out": "ed6e910b960255d7d792ebe67f260a143cfac1051dfc059025ee0c1bfcbc5681"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e",
+    "key": "",
+    "out": "558fa8afa12bbee54af78f6b7445f99665d4e356bc07d3effd8fd65ab9c74716"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
+    "key": "",
+    "out": "5b6012762053b8734af0e555e6a2bb4fd4840af3b04fcf6350a2b8a51b6796ad"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60",
+    "key": "",
+    "out": "ab7acca5d77710bad37ba0ff4ceae27e847179f7fd7aec8869c649b33f8d2577"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061",
+    "key": "",
+    "out": "ff7730b474ec2145a92dd1cffe45c342c6fd6bac580ff95a75eda3bf90eb4f01"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162",
+    "key": "",
+    "out": "d10f061d5b9cb44ee078a96b3318579e5ef50aef3ed96e4f62149b2e9f7c660c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263",
+    "key": "",
+    "out": "67d22b8edf2001d86422136ac6516cf39f7fc6a7029892fd75c98790964a720b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364",
+    "key": "",
+    "out": "7a5ec5ba76259b07b4da03f381fe7bea4865c86c424abaa0dd1ecf74f87d2ac0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465",
+    "key": "",
+    "out": "e0ff60d69029e6bd1c15953e91509c0c59ed5da5000199f216d29f96079c2fef"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566",
+    "key": "",
+    "out": "fc13ead841018f59903b40f2020c6638a66a54c3a338414d97a5c394f3266f33"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667",
+    "key": "",
+    "out": "0c2f62b898fb2f63617e787345263cb9cf60654b553b203ee49dcbb8f2a6afac"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768",
+    "key": "",
+    "out": "d7d6cb552aeb36eb96b1d5e052f8d921c3245a970d0bc8410cd65ea104c8e779"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869",
+    "key": "",
+    "out": "b7141f305efdfee556bd13e0400d1e8cfd6548bf81ee5d15327e4995ca8ad6fd"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a",
+    "key": "",
+    "out": "b6b638d22b7a12825374f70348d7448d4e7d908cf6e7bbef8c93ef679b2a5478"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b",
+    "key": "",
+    "out": "0df4585641fa09f6cba4cc165a10adde34f80d425a70db67e2fd237b627f438a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c",
+    "key": "",
+    "out": "106b2b354d95acecd0d9588fbc231f8bea2e94ea662ddd3f139e1b6787461eed"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d",
+    "key": "",
+    "out": "ae5c69eefe9089b29c6c1a2370d20552ba40c3d5e3713c12defcae997f433ecd"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e",
+    "key": "",
+    "out": "1aaef55d4fa892b635fb2a7a25f9a8e03b9ffb082ae9c07c2042a049c6515e45"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f",
+    "key": "",
+    "out": "297daac4d54dc41c83e32394599f171cdaa9ddb71726da4ece3ccf95c11f56df"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70",
+    "key": "",
+    "out": "2c45acf491ec2f4b7e309e7edd815be5a54c4458d1a57c4f9b763b0c6718d43e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071",
+    "key": "",
+    "out": "2f92f90170d3ae95abfac3a6989a2a60cb28b858782be7ea179b48a7276dd860"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172",
+    "key": "",
+    "out": "b401e84b15acc470936d6e37f7888333092731133b251bea221658ca19a75669"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273",
+    "key": "",
+    "out": "f8b340d2b9b33d43a0a66f3497820afaaee434c4e3c0c17e898b8301c57a26bd"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374",
+    "key": "",
+    "out": "566da283990389138aa6f2aaa3b9e40cbf90840ec762bd96b7e33a3113b10108"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475",
+    "key": "",
+    "out": "340672b704676042c9bf3f337ba79f11336aebb5ec5d31df54eb6ad3b0430442"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576",
+    "key": "",
+    "out": "5050b73b9316eea2f149bffd22aee384dc5403b18e16fa88825e181609496fd2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677",
+    "key": "",
+    "out": "1365cc6fb9260e86889b3afbd1c8bc12923197715db266cc7a01ca57159f7596"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778",
+    "key": "",
+    "out": "29466f51c011fd10181494a9379b6159b808ae0fcb0161f8f07909ff041b1965"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879",
+    "key": "",
+    "out": "6591a3c3c767b38d805ed3f7eb6763e8b3d2d642e7307745cd3418eff69a19ed"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a",
+    "key": "",
+    "out": "1d84b04b1338b0d2e3c98f7aea3e98effc530a5044b93b96c67ee379d62e815f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b",
+    "key": "",
+    "out": "6fa295272532e983e166b12e4999c052f89d9f30ae1481f3d60eae85f8ee178a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c",
+    "key": "",
+    "out": "4ed8caa98ec39f6a629f9a654a447e7e3e4faeecf34dcf658d2d4b98b7a2ec1a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d",
+    "key": "",
+    "out": "cfab8299a0da0c2a7e8ff54d0a676d141ab26bc0012e5f668e85d814bc9888b0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e",
+    "key": "",
+    "out": "a626543c271fccc3e4450b48d66bc9cbdeb25e5d077a6213cd90cbbd0fd22076"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f",
+    "key": "",
+    "out": "05cf3a90049116dc60efc31536aaa3d167762994892876dcb7ef3fbecd7449c0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80",
+    "key": "",
+    "out": "ccd61c926cc1e5e9128c021c0c6e92aefc4ffbde394dd6f3b7d87a8ced896014"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081",
+    "key": "",
+    "out": "3ffa4f6dafa57f1c50f1afa4f81292ae71a06fe4f8ff46c51d32ff2613489f2b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182",
+    "key": "",
+    "out": "19d3921cfc0f1a2bb813b3dfa96df90e2c6b87d78e9238f85bbc77ae9a73f98f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283",
+    "key": "",
+    "out": "f5c916ff2badde3e29a5f940233ea34007d8f182a48a808b46bb8058003f1903"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384",
+    "key": "",
+    "out": "6ba07a1af758e682d3e09add2d3dcdf35d9553f6799854a27e536063c57f81a5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485",
+    "key": "",
+    "out": "b78378fb446c544b04d4a152ac49573161b3ddebf69386770a55a7d47b880e5d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586",
+    "key": "",
+    "out": "b519538fe1626f0c595945ada58a344faac0061761cc9d4a841419bd32eec0d9"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687",
+    "key": "",
+    "out": "96e488b027896413f4034b0354f48484f6cfc10f8ec57b026fd21a3b88361a74"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788",
+    "key": "",
+    "out": "770c8a5f47bfd769ced35a71afc3ca1ff4c1f1e7cc3d2356de945004368d8145"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889",
+    "key": "",
+    "out": "6df9d8d0d3a8d98c8350d7162bd15579d5707add7611a00eeb6ca5743ed78cb7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a",
+    "key": "",
+    "out": "4f0fe8fc17901591cf348730e187de523d6d7568c1fbd82485913985eb67971c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b",
+    "key": "",
+    "out": "0ef3bb35cf372bd94e3f80eecebd50ef0d0308e01e0ed6de0f5a8a8c818a0074"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c",
+    "key": "",
+    "out": "c038d3e809a5e3a58db2f91c15ae12439578f75485cd84f556c6971e8e250620"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d",
+    "key": "",
+    "out": "ce399a0f08277d8d4816095060ebbf33da016fb43a6c356d5a3fe4bb574c5e7b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e",
+    "key": "",
+    "out": "869f7e316b194f9531bcaf33f7913f1b9cfc6bb5dcf86b692bf8cab29b8aa96f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f",
+    "key": "",
+    "out": "327dfa464459d9e48f5e55c7f5baa68fc4a25ad622bc7bf01aca82fd5e72314c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90",
+    "key": "",
+    "out": "e00dad3151b9085eae786984fe20735232b7ff7f1b1db7961fd0d0e0f605db9a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091",
+    "key": "",
+    "out": "076f644520d0b4732d6c531c9349089026936d99820461da87749a520fbe90ce"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192",
+    "key": "",
+    "out": "b4414ca1373be46f15cea6b1255a7d1886c6fdb08ed5af9657d5aac317de3a29"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293",
+    "key": "",
+    "out": "8d1ab0263dab7b86ecee219162d999a01245572269de31100e5d88fc1b1eaa69"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394",
+    "key": "",
+    "out": "b48d1c1f83924a02a23e5e0f971e16e87fc4884853833485191a2b60722fe269"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495",
+    "key": "",
+    "out": "f2edd5f750a20a541d3f6bd5df80838f11825b25a98f3da5e1523bff813bb560"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596",
+    "key": "",
+    "out": "07166004ef88e1614ebdc887dfc7da42ebcda02d92c12f18d1186ce3c98710e4"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697",
+    "key": "",
+    "out": "69f83aa101d69b8f1220dc1c538d8934458420be335feb46ffc47a2c8e2e6a8a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798",
+    "key": "",
+    "out": "e1469f16c6fca15119a272e585c7f50421bc8a414c864fc76b01048d4c6fc5d2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899",
+    "key": "",
+    "out": "6763343a1c80f19283a80af854e7e9065c2a8349ef11f11bfb76ba9f97048539"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a",
+    "key": "",
+    "out": "1ae3a0b8b2c7885ba318ad6fd449fc4d7f8404b59cf3275fcdea13563425772d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b",
+    "key": "",
+    "out": "3a71184cbe8eb58e6812ba7a7a1dca0ca28eec63782f2e6e3c0b87073f533ffd"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c",
+    "key": "",
+    "out": "184ccf2a52f388c9f897a857fe7ccec2959911a8d1e09ee8804d8d5d508dd918"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d",
+    "key": "",
+    "out": "a66d409af7afd75be831dd498c196ef12c73c31129ec02d5f12ab02a2c63a25e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e",
+    "key": "",
+    "out": "58b37497fcf0be0e0cf1734045c295b286c76a7c048e87c54028ed36915b5df3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
+    "key": "",
+    "out": "2c7333540a832d64456e43058c50d93c932ad9b18b3fc3a0599207cda3b3c7a6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0",
+    "key": "",
+    "out": "3dc062ffb57d835fe3aa409466822f9186918423947505165fdcdfb7306f7259"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1",
+    "key": "",
+    "out": "89204844acb92f353bfc89a3ce8a9817219c101385c593cf60e0befa9638e14e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2",
+    "key": "",
+    "out": "782ba902e91232941c78c49cd9771a5d9992f9b07d9c0a2df82d385d15c42bb3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3",
+    "key": "",
+    "out": "0dc3ff7df0dfc023763d7634e18da27393fc9fdb1c154646861075f0a87d0e90"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4",
+    "key": "",
+    "out": "b95c65fb6f254edbde8c037d5c8b2039340f4ac2b023a6aa28a8fcd2d2689cf4"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5",
+    "key": "",
+    "out": "87e8f51572a5d6a239f85bc53e1174e15be12fcdf151a0b9a2b43640caf74c1d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6",
+    "key": "",
+    "out": "2a6f3e462c405c354fe80fccced1c9be44325d29e07da30960b625a76ea42f83"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7",
+    "key": "",
+    "out": "20b46c8fbfca97453262460f8498a7e2af15ac79b59ddfb027bb52f2d68e8f51"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8",
+    "key": "",
+    "out": "31b0763cb9ba92403dca1abdd7342d7de94c581e76f7c9a61e515928e10b4e77"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9",
+    "key": "",
+    "out": "e191e117063cfac9642cd93cb42b39eddd9e4ab65f1d0397e3e17dd04cab1180"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa",
+    "key": "",
+    "out": "225a202107a74703e041c6cca4eacf4f21eea6f22a146d8da2ab8cf6197229a5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab",
+    "key": "",
+    "out": "efc4836be4ac3e9791d2ec62226e7df64118f4565c19e6c9e84063f5661c7b2f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac",
+    "key": "",
+    "out": "3a76b0152c0e1d1fd7ac9d91a28a18e1a4c06080f2b7ecefb6effe28b8cfc765"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad",
+    "key": "",
+    "out": "0d46ad039070115828f94eb6b72963e60a7d2db7ca8991d225c3877b149b0a8a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae",
+    "key": "",
+    "out": "e44cfc42118f096bfc51521cb18d5d6525586b989f4ee2b828c5199feab94b82"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
+    "key": "",
+    "out": "6d4bd2e073ec4966847f5cbe88ddfaba2be4caf2f333552b8553da533487c25b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
+    "key": "",
+    "out": "bbc46db437d107c967ca6d91455bbdfe052118abd1d069f04359487e13aea0e1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1",
+    "key": "",
+    "out": "b974c14db7d3174dd06084bb303108b2f0daf50eccc3293543795c9636c62482"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2",
+    "key": "",
+    "out": "0eee235b06936aed7173c8c19aa7c217b9eedaeb1a88f30552e9225145149e82"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3",
+    "key": "",
+    "out": "36d089e025b5686937742825e6ee3d83e7d7a50c823c82883460f385147dc17b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4",
+    "key": "",
+    "out": "77ee4ffc9f5dd605470dc0e74d6b17c5130d8b73913f36d5f8787e619a947ca0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5",
+    "key": "",
+    "out": "0fe6c2ab754233360d68b9ac80cd61184bfaa7d356294180025fe40639c76c36"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6",
+    "key": "",
+    "out": "996088c79456ecdda1fbc02ee1ba42d91d858c310a5a8b4674fe6a7c144414a1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7",
+    "key": "",
+    "out": "9e338aed0bc71c0c97f19855bf49174f70a9d77014873663213427502bd85d9f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8",
+    "key": "",
+    "out": "4a843d26adec520e4b5dbf0145cc4f5024fafcdc2025824a8c64650617687ee7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9",
+    "key": "",
+    "out": "c91678c4a64e2fa4b74de61ad0c06ff06b5d672fa7c6877a4014ce9e91be38d7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba",
+    "key": "",
+    "out": "ff7777405d327adb58301c711ecdc2bce1bfa829ffc9b117f21a2b198d0d6884"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb",
+    "key": "",
+    "out": "0a8ddaf1728c5cd93a255d5623c3dada2d3d0571bf1438adc8c964a9aad118cb"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc",
+    "key": "",
+    "out": "c133abbd0d2d808a67b6745b4b3650b4a64dc276cf98e30357b6abd5c1d22a9b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd",
+    "key": "",
+    "out": "c59ee5c196ba3cfef94087798207bdcef139ce2cf78dced6198f0fa3a409131c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe",
+    "key": "",
+    "out": "c7fdade59c4699385eba59e756c2b171b023deae082e5a6e3bfbdc1073a32003"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf",
+    "key": "",
+    "out": "975327c5f4dec6414b6e00cb042337b8d2a6564637a7442aec7be8f8c89a2f1c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0",
+    "key": "",
+    "out": "a2f7246df4a24efbacd3fd60683abc868bef25327052cf2f1d93ece4ffcd73c6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1",
+    "key": "",
+    "out": "497fb2acacf123f3595e40fc51a7bd24458bbcba4a2940a5cb03d608fbdf2825"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2",
+    "key": "",
+    "out": "0e97d22793ce6f283d5c740d308a27ad7c3b0d9afcd3d9e9b9cac56b10290c8f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3",
+    "key": "",
+    "out": "6630b35618e700d910683893795ef70bf07eb156f55ffe3b69ad88a4b8b0bfa1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4",
+    "key": "",
+    "out": "02f742c6e95278121a05e44205444fc5ea6af5e741c535bc2cbc3b235a2ea2b0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5",
+    "key": "",
+    "out": "4622f36eb898383f60d5bed809ac5c4745c5d6ab84bcadf79cf2a96d4ec88818"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6",
+    "key": "",
+    "out": "ccd11faaa0581ec32c3a403f92ef43d5dcf195c1a101dbfd495dbb4dce8069e0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7",
+    "key": "",
+    "out": "06024d6b07e000bce613470a2880519b8be4a36bf33c99c917893ec75dd90fe3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8",
+    "key": "",
+    "out": "d93af947b1463a817db441a474588d6f996d243983e83c7eee90e1efa440d9ba"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9",
+    "key": "",
+    "out": "94898945a7db259e1b2e7cbea48aa0c6d6570d18179f0618471c88f3ec3b0fc3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca",
+    "key": "",
+    "out": "4c2d935256392aa2be6e1078c0593815abef469de969b57b881b93af558465fa"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb",
+    "key": "",
+    "out": "aac7be16e52f790e4ff70b24015cb11b40616e94db13882b41d3dd8c8c1952b7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc",
+    "key": "",
+    "out": "0434b47c0ee7e6f53906799a43209d3fc37d3fd1f74555de67abacb951b006f4"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd",
+    "key": "",
+    "out": "0442fbdd5b58496ec78159ccaa887c88a861fcca70e7abc976f24c11588be6ee"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce",
+    "key": "",
+    "out": "a73e68bb18b007648e76b5528d1e50e7fa654da3970ec349bf591a30d932c8f6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf",
+    "key": "",
+    "out": "849cf873162ba72c4b8008e68f932fb3a015a74fcf957198d56a0dc4625a74f5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0",
+    "key": "",
+    "out": "a6dec6fc8949349c4e9a9c623687fba4c9b275bdb230509b72e3d6711914e2d8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1",
+    "key": "",
+    "out": "58afc2b24a19fdbf76a09b70b1e3b77fcbd4065001d9636640eb5a2628f442cc"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2",
+    "key": "",
+    "out": "473a43aa1d6a028767432a830ad1221e029c589af9fd4d68d56c4fb820259352"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3",
+    "key": "",
+    "out": "a0aeb4a5ad899af2e291b2e79dbb6b0bf56b5844676b955d945b6c4ae1c01eed"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4",
+    "key": "",
+    "out": "cfc3029a9eeb152222d96653492e46ca64ca4f0d64683028d3aee5a49cb47163"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5",
+    "key": "",
+    "out": "7467cf7761cd9f55618d30c9d8c5b41e4701510c7d16ab4e5d89a5d77146b092"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6",
+    "key": "",
+    "out": "c016d8424e531efc5737c03fc90a5efc9f9022e4d5ba3b0695f7ae538260c2ee"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7",
+    "key": "",
+    "out": "5d381189e6000fc117c71f59f786fb4b79fdd4ec5d4cd30aac2157f75dead778"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8",
+    "key": "",
+    "out": "7c9cdd15c4c9abcacbfe6f664a7f5f8b2e259183291ae5cc9130a0b241e5737f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9",
+    "key": "",
+    "out": "b8813172f5218ac3eb687bc4afaff83fbca4e9c1a462963301dd4459850150a2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da",
+    "key": "",
+    "out": "e3d130e36a028ea80c57a2aa4819fd34e4dbbeb14a495894b15a8787db1a9f9c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb",
+    "key": "",
+    "out": "fff1b4400f489e07d22351c1f09565e265b68ad29f6329879e6b5f7f6b419350"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc",
+    "key": "",
+    "out": "559ed5bb3e5f3985fb578228bf8c0f0b173f8d1153faeb9fec756ffd18a87238"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd",
+    "key": "",
+    "out": "88131253014d23c5e38e78bda19455d8a023bd7a7e727457a152a81d0b1718a7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde",
+    "key": "",
+    "out": "f4d3fae7cde6bb66715a198fa48d210c10f8df3204ae5e33a602467f1b622685"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf",
+    "key": "",
+    "out": "e62b622ac8a21366bf2ded30f4082a53e77a9aa696b1f3ee8cfe99c59312d9c7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0",
+    "key": "",
+    "out": "3d39ffa85512c3c8890d4bdf31889ca66e5cecb63cfeed57b9263708e74c550b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1",
+    "key": "",
+    "out": "b1703b8a00e2612497d11c649d150a6c963bf4fd38feb1c381fe0d9b04c02b22"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2",
+    "key": "",
+    "out": "12fbad9d3782812d71179a50fbd9b4566c7b06f5d77c6f329717fb4ae2c5b4ec"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3",
+    "key": "",
+    "out": "768b659a824b43f9ca5660b9ddf05f8ba2bc4993866b7c9be68791f5b24644b3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4",
+    "key": "",
+    "out": "c0204e23ca86be205eed0cc3dd7225ce5ffe1ee12dacb93c5d0629b7699cd733"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5",
+    "key": "",
+    "out": "f43296961f8eaeccd854413dc5adda62393a344627e86c066e7907550040744f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6",
+    "key": "",
+    "out": "82f4469e80789021c61db7e32f36acbe591a64f26059265770ae658d62bde7ef"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7",
+    "key": "",
+    "out": "2a85671a55c89fa156e296f75df1c7dbab178ebba65204a7e8178c916ad087f8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8",
+    "key": "",
+    "out": "33e245002808f6934b9be3a6fa8e8670c90baa625717b9201eb9b9dd912f5ce2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9",
+    "key": "",
+    "out": "58ee5e799184ad9da9a17c5b46a4810e28bdd08c3581634c835030539b79544d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea",
+    "key": "",
+    "out": "26d8fa08db308edf2f96f82af6b60c17d8f1ff858c52f2d0f3831078127526a3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb",
+    "key": "",
+    "out": "25a58df4039247a22f68ff2b71766b7b5600ddf401d99ff2c1955ae7bb43e56a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec",
+    "key": "",
+    "out": "be43e8686160e907ba547d5a879d10f788afc842b8ebb9f3f788532515912ae4"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced",
+    "key": "",
+    "out": "aa4acb95d879192a6908e88ae3d6589f4e3eb3d4e03a806ccdb9b5d6a9586fdf"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee",
+    "key": "",
+    "out": "8466d5e44ce95b4fa179992444b8c2485b886448a6dccfcf0bc30bc5f0f56b01"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef",
+    "key": "",
+    "out": "0056d7e0ac33355783659b38ec8beccbf783939967fe37aeacf369ddb670ada0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0",
+    "key": "",
+    "out": "904f42f345530ac8a352d09b6872c5bca3661abca6ca64c8099f2fb6867c30fe"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1",
+    "key": "",
+    "out": "a8c3bf46f0b88bbd16fda4a8b5ca81f5243520c385d38c0b4d2352ab34ea35e6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2",
+    "key": "",
+    "out": "8d3317fc606e566d302edab55e801611d8c13f4a9a19d185978def72839cdaa3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3",
+    "key": "",
+    "out": "97388011f57a498690ec7988eff903ff9b2358f5b61baa20f73290d6296c1c0b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4",
+    "key": "",
+    "out": "cfb80cab8990950809123fbf85e976454708e0afed698e3352a31635909db3e5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5",
+    "key": "",
+    "out": "0daaca55132a235b831a5eff4ea467cd10af44200847735a1ffd51fa37eaa2a2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6",
+    "key": "",
+    "out": "69b21497ebb824ba665368188825e6f6f14cf2c3f7b5530bb34fa658eed9a739"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7",
+    "key": "",
+    "out": "b9a19f509be03fbc40e243a58a3ded11f0d51f80e3e29a505644cc05743814ec"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8",
+    "key": "",
+    "out": "c4bcb2002555d544fd0b02770623891e70eeec7744865dd6455ad665cc82e861"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9",
+    "key": "",
+    "out": "912d24dc3d6923a483c263eba81b7a8797f23cbf2f78b51e2226639f84a59047"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa",
+    "key": "",
+    "out": "56827a18883afdf9ceec562b2066d8acb2c19505ece6f7a83e9f3346cbb828c9"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb",
+    "key": "",
+    "out": "251d8d09fc48dd1d6af8ffdf395091a46e05b8b7c5ec0c79b68a8904c827bdea"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc",
+    "key": "",
+    "out": "c2d14d69fd0bbd1c0fe8c845d5fd6a8f740151b1d8eb4d26364bb02dae0c13bc"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd",
+    "key": "",
+    "out": "2e5fe21f8f1b6397a38a603d60b6f53c3b5db20aa56c6d44bebd4828ce28f90f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
+    "key": "",
+    "out": "25059f10605e67adfe681350666e15ae976a5a571c13cf5bc8053f430e120a52"
+},
+{
+    "hash": "blake2sp",
+    "in": "",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "715cb13895aeb678f6124160bff21465b30f4f6874193fc851b4621043f09cc6"
+},
+{
+    "hash": "blake2sp",
+    "in": "00",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "40578ffa52bf51ae1866f4284d3a157fc1bcd36ac13cbdcb0377e4d0cd0b6603"
+},
+{
+    "hash": "blake2sp",
+    "in": "0001",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "67e3097545bad7e852d74d4eb548eca7c219c202a7d088db0efeac0eac304249"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8dbcc0589a3d17296a7a58e2f1eff0e2aa4210b58d1f88b86d7ba5f29dd3b583"
+},
+{
+    "hash": "blake2sp",
+    "in": "00010203",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a9a9652c8c677594c87212d89d5a75fb31ef4f47c6582cde5f1ef66bd494533a"
+},
+{
+    "hash": "blake2sp",
+    "in": "0001020304",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "05a7180e595054739948c5e338c95fe0b7fc61ac58a73574745633bbc1f77031"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "814de83153b8d75dfade29fd39ac72dd09ca0f9bc8b7ab6a06baee7dd0f9f083"
+},
+{
+    "hash": "blake2sp",
+    "in": "00010203040506",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "dfd419449129ff604f0a148b4c7d68f1174f7d0f8c8d2ce77f448fd3419c6fb0"
+},
+{
+    "hash": "blake2sp",
+    "in": "0001020304050607",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b9ed22e7dd8dd14ee8c95b20e7632e8553a268d9ff8633ed3c21d1b8c9a70be1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "95f031671a4e3c54441cee9dbef4b7aca44618a3a333ad7406d197ac5ba0791a"
+},
+{
+    "hash": "blake2sp",
+    "in": "00010203040506070809",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e2925b9d5ca0ff6288c5ea1af2d22b0a6b79e2dae08bfd36c3be10bb8d71d839"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "16249c744e4951451d4c894fb59a3ecb3fbfb7a45f96f85d1580ac0b842d96da"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "432bc91c52aceb9daed8832881648650c1b81d117abd68e08451508a63be0081"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cde8202bcfa3f3e95d79bacc165d52700ef71d874a3c637e634f644473720d6b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1621621f5c3ee446899d3c8aae4917b1e6db4a0ed042315fb2c174825e0a1819"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "336e8ebc71e2095c27f864a3121efd0faa7a41285725a592f61beded9dde86ed"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "079be0410e789b36ee7f55c19faac691656eb0521f42949b84ee29fe2a0e7f36"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f10",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "17270c4f3488082d9ff9937eab3ca99c97c5b4596147372dd4e98acf13db2810"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f1011",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "183c38754d0341ce07c17a6cb6c2fd8bbcc1404fdd014199c78be1a97559a928"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6e52d728a405a6e1f87587bbc2ac91c5c09b2d828ac81e5c4a81d03dd4aa8d5c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f4e08e059b74144bf948146d14a2c81e46dc15ff26eb52344cdd474abea14bc0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0f2e0a100ed8a11785962ad4596af955e30b9aef930a248da9322b702d4b6872"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5190fcc732f404aad4364ac7960cfd5b4e348629c372eeb325b5c6c7cbce59ab"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c0c4cb86ea25ea957eec5b22d2550a1649e6dffa316bb8f4c91b8ff7a24b2531"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314151617",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2c9eda135a30aecaf3acb3d23a3035fbabba98333165d87fcbf8fe10336ecf20"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3cd669e8d56262a2371367224dae6d759ee152c31533b263fa2e64920877b2a7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516171819",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "18a9a0c2d0ea6c3bb332830f8918b0684f5d3994df4867462dd06ef0862424cc"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7390ea4104a9f4eea90f81e26a129dcf9f4af38352d9cb6a812cc8056909050e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e49e0114c629b494b11ea98ecd4032731f153b4650acacd7e0f6e7de3df01977"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "27c5702be104b3a94fc43423aeee83ac3ca73b7f87839a6b2e29607903b7f287"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "81d2e12eb2f42760c6e3baa78f84073ae6f5616070fe25bede7c7c8248ab1fba"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fab235d59348ab8ce49bec77c0f19328fd045dfd608a530336df4f94e172a5c8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8aaa8d805c58881ff379fbd42c6bf6f14c6c73df8071b3b228981109ccc015f9"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "91fdd262203916394740952bce72b64babb6f721344dee8250bf0e46f1ba188f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f7e57b8f85f47d5903ad4ccb8af62a3e858aab2b8cc226494f7b00bedbf5b0d0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f76f21addae96a9646fc06f9bf52ae0848f18c3526b129e15b2c355e2e79e5da"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8aeb1c795f3490015ef4cd61a2807b230efdc8460173dad026a4a0fcc2fbf22a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c564ffc623077765bb9787585654ce745dbd108cef248ab00ad1a2647d990387"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fe8942a3e5f5e8cd705104f88210726e53dd7eb3f9a202bf9314b3b9065eb712"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "dc295359d436eea78084e7b077fe09b19c5bf3d2a796dab019e4200599fd8202"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "70b3f72f749032e25e383b964378ea1c543e9c15de3a27d86d2a9d2231eff48a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7982b54c08db2bfb6f45f35bc323bc093779b6bb0e3eea3e8c98b1de99d3c55e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "75e4162257014bedcc05c2944dce0df0c35eba131954064f6e4e095fd08445ee"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4a129ea6cdbabc2d392479372f975b9cf5a1b7deb69a3266f03ebc6d111393c4"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8fed70f27955dc8ad9f1b7b3f6f5dfbd962a33592b42de856d421e2912bab86b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e2f20660376f2b1839667cbfe5e16ef075ac3943644f3532282f8bb0723b9986"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "abf84c913a83df98c70029819c065f6d6de4f6d43abf600dade035b23bed7baa"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "459c15d4856c7ecf82620351c3c1c76c403f3e9707741387e299073fb1704b2b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9ab912eda0768abdf826b6e05d0d735839e6a5f02e04c4cc75650b2c8cab6749"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4740ebecac90031bb7e68e51c55391afb189b317f2de558766f78f5cb71f81b6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3cc47f0ef64821587c937cddba85c993d3ce2dd0ced40d3be33cb7dc7edabcf1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9f476a22db54d6bb9befdb260c66578ae1d8a5f87d3d8c017fdb7475080fa8e1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8b68c6fb0706a795f3a839d6fe25fd4aa7f92e664f762d615381bc859afa292c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f640d225a6bcd2fc8accafbed5a84b5bbb5d8ae5db06a10b6d9d93160b392ee0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "704860a7f5ba68db27031c15f225500d692ab247534281c4f684f6c6c8cd88c7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c1a75bdda12b8b2ab1b924843858183a09d202421fdbcdf0e63eae46f37d91ed"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9a8cab7a5f2e576221a6a85e5fddee75678e065324a61db03a39261ddf75e3f4"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "05c2b26b03ce6ca5871be0de84ee2786a79bcd9f30033e819b4a87cca27afc6a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b0b0993c6d0c6ed5c3590480f865f467f4331a58dd8e47bd98ebbcdb8eb4f94d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e57c103cf7b6bbeb8a0dc8f048625c3f4ce4f1a5ad4d079c1187bfe9ee3b8a5f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f10023e15f3b72b738ad61ae65ab9a07e7774e2d7ab02dba4e0caf5602c80178"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9a8fb3b538c1d6c45051fa9ed9b07d3e89b4430330014a1efa2823c0823cf237"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3075c5bc7c3ad7e3920101bc6899c58ea70167a7772ca28e38e2c1b0d325e5a0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e85594700e3922a1e8e41eb8b064e7ac6d949d13b5a34523e5a6beac03c8ab29"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1d3701a5661bd31ab20562bd07b74dd19ac8f3524b73ce7bc996b788afd2f317"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "874e1938033d7d383597a2a65f58b554e41106f6d1d50e9ba0eb685f6b6da071"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "93f2f3d69b2d36529556eccaf9f99adbe895e1572231e649b50584b5d7d08af8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "06e06d610f2eebba3676823e7744d751aff73076ed65f3cff5e72fd227999c77"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8df757b3a1e0f480fa76c7f358ed0398be3f2a8f7b90ea8c807599deda1d0534"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "eec9c5c63cc5169d967bb1624e9ee5ced92897736efbd157548d82e87cc72f25"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cc2b5832ad272cc55c10d4f8c7f8bb38e6e4eb922f9386830f90b1e3da3937d5"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "368985d5387c0bfc928ac254fa6d16673e70947566961b5fb3325a588ab3173a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f1e442afb872151f8134956c548ae3240d07e6e338d4a7a6af8da4119ab0e2b0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b012c7546a39c40cadece4e04e7f33c593ad182ebc5a46d2dbf4ad1a92f59e7b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6c6097cd2033096b4df317de8a908b7d0c7294390c5a399c301bf2a2652e8262"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ba83feb510b49ade4faefbe942781eafd41ad5d436888531b68859f22c2d164a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5a069e4392195ac9d284a47f3bd854af8fd0d7fdc3483d2c5f3424ccfda15c8e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7e88d64bbbe2024f4454ba1398b3d8652dcec820b14c3b0abfbf0f4f3306bb5e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f8742ff46dfdf3ec8264f9945b20419462f069e833c594ec80ffac5e7e5134f9"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d3e0b738d2e92f3c47c794666609c0f5504f67ec4e760eeeccf8644e68333411"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0c90ce10edf0ce1d47eeb50b5b7aff8ee8a43b64a889c1c6c6b8e31a3cfc45ee"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "83917ac1cdade8f0e3bf426feac1388b3fcbe3e1bf98798c8158bf758e8d5d4e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "dc8eb0c013fa9d064ee37623369fb394af974b1aac82405b88976cd8fca12530"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9af4fc92ea8d6b5fe7990e3a02701ec22b2dfd7100b90d0551869417955e44c8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c722cec131baa163f47e4b339e1fb9b4aca248c4759345eadbd6c6a7ddb50477"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1837b120d4e4046c6de8ccaf09f1caf302ad56234e6b422ce90a61bf06aee43d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "87ac9d0f8a0b11bfedd6991a6daf34c8aa5d7e8ae1b9df4af738005fe78ce93c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e21fb668ebb8bf2d82086dedcb3a5371c2c46fa1ac11d2e2c566d14ad3c3653f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5a9a69815e4d3eb772ed908fe658ce5087310ec1d50cb94f5628339a61dcd9ee"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "aac285f1208f70a64797d0a9400da64653301838fef6690b87cda9159ee07ef4"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "05643c1c6f265925a65093f9de8a191c4f6fd1418fbf66be8059a91ba8dcda61"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1c6cde5b78103c9e6f046dfe30f5121cf9d4039efe222540a41bbc06e469feb6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b49bb46d1b193b045e7412059fe72d552552a8fb6c36410723dc7d05fcceded3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b612d3d21fc4de3c791af735e59fb717d839723b42508e9ebf7806d93e9c837f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7c3390a3e5cb27d1868ba455cfeb3222fde27bcda4bf248e3d29cf1f34329f25"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bd42eea7b35486cdd0907cb4712ede2f4deeccbca191603865a1cc809f12b446"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d1dd6201740cfaad53ceccb756b110f3d50f817b43d7559557e57aad143a85d9"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5829643c1b10e1c8ccf20c9b4af821ea052d7f0f7c22f7380bbbcfafb977e21f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fc4cf2a7fbe0b1e8aefbe4b4b79ed84ec97b034f51b4e97f760b20639765b933"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4d7c3b3438a0bda28e7a96e42027d813e88ae62885499833d3c5f6359ef7edbc"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "34cbd32068ef7e82099e580bf9e26423e981e31b1bbce61aeab14c32a273e4cb"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a05dda7d0da9e094ae22533f79e7dccd26b1757cefb95bcf62c4ff9c2692e1c0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "224ccffa7cca4ce34afd47f62ade53c5e8489b04ac9c41f7fad0c8edeb89e941"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6bc6076483aa11c07fba55c0f9a1b5da87ecbffea75598cc318a514cec7b3b6a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9a0360e23a22f4f76c0e9528dafd129bb4675fb88d44eaf85777300cec9bcc79"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "790199b4ca90dedccfe32474e85b174f069e3542be3104c1125c2fdbd69d32c7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "55839925834ca3e825e99241874d16d6c2623629c4c2adddf0dba01e6ce8a0dc"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "615ff846d993007d38de1aecb3178289ded09e6bb5cbd60f69c6aa36383020f7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f0e40b4ed40d34851e72b4ee4d00ea6a40ea1c1bf9e5c269710c9d51cbb8a3c9"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0b07b2333b08d08c11ca34ab449b71d29a0f43e1f778e073e79006ccb730ed62"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d1f4c29d9f23ea35ec4035b377d506538e728bc739c1459680cf1cc69424924d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1279cf6f669f92f6bfc25d605b9440c7dccbd25df28dc7353abc1c0530405dc4"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1fa0af00775dc2ce76506d3280f472d2f6ff97a2151faa827942fea44ad0ba1f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3e1ad54a5f835b983bd2aab0ed2a4c0bdd7216209c36a79e9e2aabb99faf3512"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c6ed39e2d8b636eccba245ef4e8864f4cd946be216b9be48303e08b92dd09434"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e24736c13ecb9f36a0d829d4798d7699c14cc65b6dc44ed6f10cd4853d6e0757"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "389be88052a381272c6df741a88ad349b712718435480a8190b704771d2de637"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "889f2d578a5daefd341c210984e126d1d96da2dee3c81f7a6080bf84569b3114"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e936095b9b982ffc856d2f5276a4e529ec7395da316d628702fb281ada6f3899"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ef89ce1d6f8b48ea5cd6aeab6a83d0cc98c9a3a207a1085732f047d94038c288"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f925016d79f2aca8c49edfcd6621d5be3c8cec61bd5871d8c1d3a565f35e0c9f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "63e8634b757a38f92b92fd23893ba299853a8613679fdf7e0511095c0f047bca"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cf2cca0772b705eb57d28943f83d353fe291e5b377780b374c8ba4665830be87"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "46df5b87c80e7e4074aee68559424742845b9b350f51ba55b074bbae4c626aab"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "658aa4f9d2bcbd4f7f8eb63e68f5367edbc500a0b1fbb41e9df141bcba8fcd53"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ee80555008a71655e081092bba6f670ed98af9a09fb5afb94cbc5c754814db4f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2c5f9d048220b041b6d4524b4490cf8c66fcb8e14b0d64887aa1e4761a602b39"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "44cb6311d0750b7e33f7333aa78aaca9c34ad5f79c1b1591ec33951e69c4c461"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0c6ce32a3ea05612c5f8090f6a7e87f5ab30e41b707dcbe54155620ad770a340"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c65938dd3a053c729cf5b7c89f390bfebb5112766bb00aa5fa3164dfdf3b5647"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7de7f0d59a9039aff3aaf32c3ee52e7917535729062168d2490b6b6ce244b380"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "895898f53a8f39e42410da77b6c4815b0bb2395e3922f5bed0e1fbf2a4c6dfeb"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c905a84984348a64db1f542083748ad90a4bad9833cb6da387293431f19e7c9c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ed37d1a4d06c90d1957848667e9548febb5d423eab4f56785cc4b5416b780008"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0bc65d9997fb734a561fb1e9f8c0958a02c7a4dbd096ebef1a1751aed959eed7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7c5f432eb8b7352a9494dea4d53c21387031ce70e85d9408fc6f8cd98a6aaa1e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b8bf8e2c34e033983639909eaa37640d877b048fe299b470af2d0ba82a5f14c0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "88a9dd13d5dadbdee6bff7ee1ef8c71cc193aa4bf3e84f8fe80cb075683c0779"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9aedb8876dd21c8c84d2e702a13625980462f68bf0a1b7254ad806c38403c9de"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d097573df2d6b2489a479484869800a1f833ea169eff32ae3ce63a2079548d78"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d18f27a3e555d7f91a007c67aceede391f75a61fa42a0b4566eb582ca05ebce7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "df1daa90b1702313e6a5901c7afc5ed9657717a715fa53a4189ec1e5df293a68"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "04e3a496b66996c66e32919ed1f94c36eebbf240633a2f739845f0295d34afba"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8c45d88c4e9c9d0c8c677fe48fa5449ba30178d40af0f0217921c62e4b60cdd3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e149a6b13bdedea2eeee009ce9445e8dcf76b76e55a501d8f5b43ff896796ad1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a837c4c7c6f5cfb99e1085fd43287a4105cb28b76fc38b6055c5dcff78b82565"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "42411f28780b4f1638540b870521ec45bceb1e0c7131f7e1c4672e436c88c8e9"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "34b4e876769471df552e5522cea784fa53ac61bede8cfe291409e68b69e8776f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8f31d637a91dbd0ecb0ba0e694bec1447658ce6c27ea9b95ff36701caf36f001"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b5c895eb071e3d38528d475d3bb0ba88b71795e40a982e2ac2d84422a0f2685d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e906257c419d941ed2b8a9c12781db9759a3fcf3dc7cdb031599e1086b672f10"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "98ad24397c6eae4cf73ea8bbef5a0b74d21ad15f33920f44070a98bdf53d0b3a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "dd510ca55b1170f9cefdbb16fc145262aa363a870a01e1bc4fbe40234b4b6f2f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f2d8d931b92e1cb698e56ed02819ea11d26619b83a6209ad67225368fe119571"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e4637055db91f9437cf460ef40b5145f6998266a5e74e96a00782c62cf30cf1c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3563530a89d32b75f78d83e9872ad4c575f520399d65035ded99e5eec5807150"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8e79f92c865beb3e1cdbf08f754a2606e85349053d66d616024a813fca541a4d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "864226f2839c76b1d5f7c13d98c2a5158c2abb71d9d8f0fa1f7c3f7468001603"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d3e3f5b8ceebb11184803535900b6eedda606eeb369751a7cda36ca30229fb02"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8c7d6b987269169031f71fd7e4c445012d3e6a3c8809f6479bd667cf311e276e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b904b5711bf19e8532f7ad6427410a62a1f77f77b9b6d71d2fc43bc90f73235a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4536634315c86728f5ab7449eb2d04020e9eae8dd6795500e9ec9a0066386e69"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fd5e49fed49dc44bde89f460a950191ebb067c698a3f21ea14308c7413b91681"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "31f01d030b9b22d00a0f71ed2ceb5d2dc81af2c24bf5670fde19a685e8d1392e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5f84d9de284b1e4f678e31ab6a76f5661b5aeaa768539384aa38f9e49cce6e6e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b2079e5997a4ead3a71fefc02f90a7483a10fd2e6f31bda9d2084485cc016bbd"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e0f84d7f525b6fed791f77289ae58f7d50a29432d42c25c1e83929b838891d79"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "70469690956d7918ace7ba5f41302da138c9b56ecd415544face8d998c21abeb"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "45c91a62249b39cda94e508295bec7667119447765ef80efa82d1e92d57067d8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1d9e0073eed0731554c3beaa47460d511ad261dd4d4a3bed9d8d202f22f21589"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "408262736d8aec0b847dba250258608a4345a63a1eb195e5c7ae2ee874c34da8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "23d2b70439469949982390538d7e5ade9f18c8e3bbf6605afcf49b00c061e837"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "232fb187d271bea912efd407ffe08056d6a42e5321ec792df3d584a94f630ab2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "138e1944e4b54de8681d7e48c4f08148e40a567e5cad946a6af4e8d5d26f75c7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "80c151325fbfc678b7be4e40b30f29fe31cdbe1c84126e006df3c18524bd2d6c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a642267301669df261b839f87365762905ff320a0a2fc4bdc48e5a8e15d13233"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0f8b10993860937a74cc2de40a2731dd9954b654bb94c34e876652e98d4bbd16"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e634a58512493273260f10d44953cd998e34cb8281c41bf42e0ae2f25cbd1f75"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bde6af9baf3c07e95423cab504dee70edcc3318b22dd1eb6fd85be447ac9f209"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "914b37ab5b8cfde6a480466a0d82432c7d76328e9a88ef5b4f52429f7a3ffc7d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "55be66e9a5aa671a23882ef3e7d9d36ea95487dc71b725a5ad4b798a879143d0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3fd045894b836e44e9ca75fbe3eadc486cbbd0d8cee1b3cf14f76e7f1e77aef3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ce60343dc4874b6604e1fb231e37ec1eec3f06566e428ae764efffa230add485"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e38c9df024de2153d226738a0e5ba9b8c6784daca65c22a7628eb58ea0d495a7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8dfec0d4f3658a20a0bad66f2160832b164e700a21ec5a0165c36772b2086111"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4401b50e09865f4238243b8225ca40a08dbb4685f5f862fbdd72980431a85d3f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8668942788c4ce8a33190ffcfad1c678c4fa41e99417094e240f4a43f387a3b6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a7288d5e09809b696984ecd5326cdd84fbe35fcf67235d811c82002536a3c5e1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8e925c3c146bacf3351ec53241ace5f73e8fc9bd8c61cad97fd772b07e1b8373"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c7eb9e6ded2f993d48b0170da27c5b753b12176be126c7ba2d6af85f8593b752"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ca27f16f94e4ec0e628e7f8aefc6657bedc93742965940ae786a73b5fd593b97"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8c21e6568bc6dc00e3d6ebc09ea9c2ce006cd311d3b3e9cc9d8ddbfb3c5a7776"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "525666968b3b7d007bb926b6efdc7e212a31154c9ae18d43ee0eb7e6b1a938d3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e09a4fa5c28bdcd7c839840e0a383e4f7a102d0b1bc849c949627c4100c17dd3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c19f3e295db2fc0e7481c4f16af01155ddb0d7d1383d4a1ff1699db71177340c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "769e678c0a0909a2021c4dc26b1a3c9bc557adb21a50834cdc5c9293f75365f8"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b64874adab6bcb85b94bd9a6c565d0d2bc35445d7528bc85b41fdc79dc76e34f"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "faf250de15820f7fc610dd53eeae44601c3effa3accd088eb66905bb2653be8c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1e2038739b2c018b0e9e0e1e522fd9651287ee6e3665919b24c2124f0c1a3f3a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5fec3aa00861de1ac5dab3c137065d1e01bb03f69dcc7d1cf7ca4f4356aec9a3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4451fe6bbef39343919244c51dae1ea9a954cf2c0966ab045b15521ecf350081"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8c622fa2160e8e991813f180bfec0b431c6dbfa2956d9175816a23c382c4f200"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "817d5c8f92e7b5ca57f5e1639016ad5760e446d6e9caa7498414ace82280b5cd"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a6a1ad58cee54e69cbbcaa87df07a6707eb224739c217613460ab454b459ca9c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "63b847275226605be67681258f7d00bbb307c66f1959bf2e467a41aee714e55c"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fe52ebe5cfcfe6a2297b539fa3dadbd6ebd201aa2ca13563e3d7f14d15abff63"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b7bef9fa5a3d10426246b5f658c08fdf8066eaa3e55a2f7da1591e05c87df8c7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ded1d6caa9f8f3bda92cea7f6549b1fb86a2211478c4ec289b837efc2b5c27d7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9f30008a2eb050f18e56a76be92091b2fdc164d56e32c87dd64c9e3a611041b1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "010b6a3b11860088f0abc80a8972cbbc329d5275342950eb9a045afdc8bbed24"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0cd210aac11f1c1ced497f673e53db68c3ec3607f0c5787ddc60a355dfe56c25"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0e56fd01da3b4f8be2c990552aac8d1e8da209bcf4aad4ffb5427fd63172463e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d6d5cdb11440e34aca3a2fcf30f59e08b11a2a3de539e3e6513ed78a4fee513b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "aa35ac90680670c732ed1ef37e8cbaae49a4d88ecf4df2b689a0f101b756ae47"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "278e561288722630e26a5fc954bf2dcd6a65816739abee7be14307a96174e5b0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ab4b2ca1a2b349981524b6155462f0ff1060bf9bfa07fb9ec69ca471645b6a18"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "18a9bbec3c8e1f8ee9571297a93436de427cd270ec69dfe888db7dbf10b64993"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bafc7e43d265a173021a9d9e583d60ed42a803facd6b8360de1f916835389bf0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a5b67be950fbc2f0dd323a79a19e3ed1f4ae4ba7894f930ea5ef734de7db83ae"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bf1e65f3cd8498884d9d5c19ebf7b916067637604e26dbe2b7288ecb11426068"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c3342cf9cbbf29d406d7895dd4d9548d4ac78b4d00e9b63e203e5e19e9974620"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1c0be60277434b0e004b7b388a37559f84b30c6cf8600f528bfcd33caf52cb1e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "73954530d03f10bef52ad5bc7fb4c076f83f6331c8bd1eeec3887f4aa2069240"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "69c11ee04944dea985ac9f13960e73980e1bb0e309f4384a1676f8efab384288"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "36fb8fde0ec28ce853fb7175c1b79da3b5e8c39186e78aaece5464dbd9fe2aa2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6bb2a09dfcaf96962de00c8a082d6df9322b4966ae8d2ecf732411a76a1a0ee6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7412e7dd1bf1aa9397411bba4d3e0276d2e7a1a29a2477157ad60360d33d4e76"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "dddeafcfc72321c849fb25947ab42c1af2a5e43fef681be42c7eaf3660080ad3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9defebadbdcb0a0e7ff992f947ced3d0a4c899e64fe77360e81e1f0e97f8c1a2"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "844c59fbe6476fd189239954f17e36e1f69e24aaed5d5c8b8405ef2a830cc2a0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ff3fafb67786e01a0c38eadf99c4cae8029da8cf29875fc419bf680009b3bdb3"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ca6760f345678f30a28d628294272a19e3072ebc61b19ff13b318973e97c2738"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c08e1a9047c505264a16447c9ed981a719d381f28e605fd7caa9e8bdbb42996a"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f173ba9d4584cd126050c69fc219a9190a0bf0aececbe611beed193da6ca4de7"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b184876520ded8bd7de25eaefbd3e03688c3be39c19fb73e1f0eccac7cc0f014"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9025db0758bdfb48f0667ebd7e120246598fed01c258764fa0fae334a2a00a97"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e83d8086fabc460d5efc459f95a268f5dc4ac284093c247ca6ec841ad6183fe1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cc9df41d35aa75928c185f7393666110b80f0986a221c370f45c2eb9016c9a3b"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "92f9a594954590fa819817e5d1c28aab2b1cc504d86dba443676bdf866796811"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "729562a1e07b0e2605494809bd480f1537cea10dcad43ef9f68c66e825dc46b1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "26f160ab96f5582045146eaff2e2a8d4dab298b4c57e117cdfc5d025c92a2268"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "87ebe721383873d247f86182e3f599a7634fcaec5e07b1e83ebb79625ba354e6"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e08d389f75694adc996c22f55d4f859ffd0c1319ff9cedf78c31be84b6f21abc"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1363e22913c6e18e7aa65b83e751c8a2c61b0f307155865a57dba569a99c7b0e"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8878088eb2d1f6d0bb481b4bb187da04bcd8c2c639f005b08054cc41753905fb"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0418d60d05b4e124646ee50e7749a1d209457bc543e3cc1130274aea0f7bf3c1"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7a397e503f293bc42d5f7ef5ec37872460a4f5b5ccde77fb4d47ac0681e5a049"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5c0d2983e72a6dd4e652d723c1dfc12b414c873d4ab4a0a150408eb34347e995"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5623365453c04989c7cf33635e0fc4cddd686fc95a33dfedcf3335794c7dc344"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "11f6dad188028fdf1378a256e4570e9063107b8f79dc663fa5556f56fd44a0f0"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0ed8161797ecee881e7d0e3f4c5fb839c84eb7a9242657cc48306807b32befde"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "736667c9364ce12db8f6b143c6c178cdef1e1445bc5a2f2634f08e9932273caa"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e15f368b4406c1f65557c8355cbe694b633e26f155f52b7da94cfb23fd4a5d96"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "437ab2d74f50ca86cc3de9be70e4554825e33d824b3a492362e2e9d611bc579d"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2b9158c722898e526d2cdd3fc088e9ffa79a9b73b7d2d24bc478e21cdb3b6763"
+},
+{
+    "hash": "blake2sp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0c8a36597d7461c63a94732821c941856c668376606c86a52de0ee4104c615db"
+},
+{
+    "hash": "blake2bp",
+    "in": "",
+    "key": "",
+    "out": "b5ef811a8038f70b628fa8b294daae7492b1ebe343a80eaabbf1f6ae664dd67b9d90b0120791eab81dc96985f28849f6a305186a85501b405114bfa678df9380"
+},
+{
+    "hash": "blake2bp",
+    "in": "00",
+    "key": "",
+    "out": "a139280e72757b723e6473d5be59f36e9d50fc5cd7d4585cbc09804895a36c521242fb2789f85cb9e35491f31d4a6952f9d8e097aef94fa1ca0b12525721f03d"
+},
+{
+    "hash": "blake2bp",
+    "in": "0001",
+    "key": "",
+    "out": "ef8cda9635d5063af81115da3c52325a86e84074f9f724b7cbd0b0856ff00177cdd283c298326cd0917754c5241f1480fb509cf2d2c449818077ae35fc330737"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102",
+    "key": "",
+    "out": "8cf933a2d361a3e6a136dbe4a01e7903797ad6ce766e2b91b9b4a4035127d65f4be86550119418e22da00fd06bf2b27596b37f06be0a154aaf7eca54c4520b97"
+},
+{
+    "hash": "blake2bp",
+    "in": "00010203",
+    "key": "",
+    "out": "24dc1e6dc4e51a3a3c8da67aacb4c541e41818d180e5bb69753dbbff2f44d0e7da830386bfc83b27a59dbb62b964fc8ea6cbdf3049bff81f24f348db4efd0d07"
+},
+{
+    "hash": "blake2bp",
+    "in": "0001020304",
+    "key": "",
+    "out": "bc23f5abdffd6a32a5d40811262ed4479ef70b4233ca205bc5b9bf8596731982d04169a904dd43b0e0f94899f733022d24d84fad0a991600f1979b272ad62073"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405",
+    "key": "",
+    "out": "ef107fcd0d92d84ef5ef9463e6e96241254529d2b97fdbe56419070adbc7d5706feb8f449579819ed4be619785fffaaf0d9789cfe726249ab08c9468cb5fde22"
+},
+{
+    "hash": "blake2bp",
+    "in": "00010203040506",
+    "key": "",
+    "out": "231fbfb7a1ddc5b74933a285a4224c049cba1485ce35640d9c516ed78eaa226d36f65b2589b826c459fa6a91c426fd2a8ab461c9767e7bdd996bef5a78f481b7"
+},
+{
+    "hash": "blake2bp",
+    "in": "0001020304050607",
+    "key": "",
+    "out": "3a831f2da969b9b7360e74ee53b518980a5ebcdfd4ee23ed805c26394d1824208d7e8f6327d4ec87979ce4af8ab097d69e261ca32db0eefdbc18d16377a6bd20"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708",
+    "key": "",
+    "out": "8349a20fddbae1d8472b67f0347aa0fd404d65c6fa1472b310390d7565ba6bc10260d3dce6a14f4dd9b8b3e0a0c47f6db7e7100a7a9b64a844f01064d07905c5"
+},
+{
+    "hash": "blake2bp",
+    "in": "00010203040506070809",
+    "key": "",
+    "out": "239ae3d6859c7c972a5dc8b9c55aeb938590cfb8552aa305a6f6f31ffa95a840f4ec36f6fb8f83b69c1da981fc9ba16360db0f4f7c68eb543ed58b28756a1e0d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a",
+    "key": "",
+    "out": "7c5673286308408fbc62240e074728b27a575cad2a156e00b5c08b218d8887791e47bf10b0bc61a582545a2469639ce628c40f20ea8b849cd005445f29a08cce"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b",
+    "key": "",
+    "out": "dd077e769e0def78dd7aadd57d58421bda3a1a4e6972059f8e649cd6bca44a13ab71eb535d244922948465d73bd64efb091046949066653603575a2e891ebd54"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c",
+    "key": "",
+    "out": "b36cef28532b40d8178628f0fab5e5b4a1dec0c0e911d727bf09490f5e8d9fac57213fd2a2d12ed3d77a41f5e2fecc40e4eeca1612f51c452331ae93966235bc"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d",
+    "key": "",
+    "out": "de737dbc612ebd31bc49a2d7c644d4b137817419421c32f4e75114d899e3131d45ca5451248f24169fbf17ee60a9b70798a4b937cea62795289639d18fcd89e4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e",
+    "key": "",
+    "out": "b4c1bbcbbccdfce4d2be9dcdb983c1b020c5f720da5becf4cb2a9a3d1b8d23cea7a9f5fd70d3740ecd67ce7d1e9c5e31a3302df66a9b5d54304490fbe1c4a8b9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f",
+    "key": "",
+    "out": "b1d65e70c69ba7e3a728e8b6449493f237510b23b6e77d9584d05ff4d3f08780929d74fa5bed9b75d4d6d1ca91ab8d2637dc2e79ba0fe0594acd68fb3cc660b9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f10",
+    "key": "",
+    "out": "da79f729eab98c04f37fcc854b69a84e467dea1e7782e7af02cb44a49d210d2523683d420ac1dec8ad1fb40e65ab3fe251a851e283d85838084261301ecd089b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f1011",
+    "key": "",
+    "out": "714040403921ae5548a20339d69e093f609aa99c22db72591d1ef4fcb0af016173e577d8c1a3063b443a0e48f313cf2e0f9b0c2ef96a96c424322ccc0cd5304c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112",
+    "key": "",
+    "out": "8b2e8c3f0e3c319ba67e86014bda683e5357a04037b4563286ac89cddb7ee04cf6675f9ab61fc8332d218d2bca9715e7dbe58372d1eebf6bc2948471cfcebb77"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213",
+    "key": "",
+    "out": "32ee9549d4e32f4be9c500bd8543afd0b69782d0b3ff7ed47a881a0e491f37650a21b26c3f5d0a64e09058b3004a2368b950e47230c22966d3f79da7baa0b87f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314",
+    "key": "",
+    "out": "cae7f292713782c471fe3178a9420cd4c11fcd3f6dbe5d15c84ab7353c739ef0641639a2f92aed31c56a2021cc5e58cbead374e2dc8a0dbce5450fe7a018cfa4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415",
+    "key": "",
+    "out": "f17fefaeae7d40cd885dac0bc350c0273668ea0222df5c75694f5cb3a321519f6e0ec43ba0c8593dc7341341e519488f20abd5b8124dfacea5cde0965b6970f9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516",
+    "key": "",
+    "out": "e2cf86ddc8424ee547eb7245b7325e02f2e3ac013c8d386b3d2e09208a9bcc0b44c4c438eaaf52d2077e9177eb8ee1d59075b52592202062229354bf23c96239"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314151617",
+    "key": "",
+    "out": "38f26a1102cb162d351f843b3c49f6ff85441633b6704a286af81ccbae5a67d3015cc0efafb7057dc2b28d6766e82a068a4c0b524b66d0a632775d93061575f9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718",
+    "key": "",
+    "out": "a2c4302daca7a7c632f676304e6275c1c1f0dbfe38dc571cb23e1f7ba5dc18180fc48a015f927c89967c1e104e66f5ea5b2dd31d781c3849bfc649220c385c82"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516171819",
+    "key": "",
+    "out": "c19c6b3fb5352bb394c26846523c25e8265d505f501f9603a4f8bd55386cf4cc9f4d71f38ff445f4efc83098d47969334e79a2bcb4026bc63b7959dedb62b7bd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a",
+    "key": "",
+    "out": "1f4ab9840a1cfa8fe6c5622d9b538becb8807a8778b69d9305f908576573b20ca3704e89129726d502e198588d072668bf03630b5b5a9232ff392527249df99b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b",
+    "key": "",
+    "out": "fe03177b58b48883a86d4268334b9591d9fbd8bf7cc2aacc5025ef476b4533ba7bd781df011147b3cf511d8b3dcd8c780d30d7da718c22442319817be3186bc5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c",
+    "key": "",
+    "out": "f4c3b059105b6aa5fe78843a07d94f712062cb5a4dd6059f97904d0c57973ba8df71d15a511a066864fe455edc9e5f16524cec7ee248ee3ec929063bd10798da"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d",
+    "key": "",
+    "out": "57a16f964b181b1203a5803b73817d774483826cea113b9ccfcf0eb87cb23064284962d847bb1fae8cbf5cc63b3ceaa1241ea42c63f898011fc4dbcae6f5e8c5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e",
+    "key": "",
+    "out": "7952fc83acf13a95ca9c27a2156d9c1b6300b0ef790f572bc394c677f7c14629ebd8e7d5d7c7f1a5ebbdc390cc08cd58c2008900cb55eb05e444a68c3b393e60"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "key": "",
+    "out": "2c2240d6b541f4294ff976791d35e6a2d492f57a915fbac5832660c10e9c96465c7bd5fca751bf68e2673a638e3af735b02091d75d1a7f89e3f761c5df821a6b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+    "key": "",
+    "out": "59dc846d3405ccd806f8fa20c8969ef68a4385ef6c274eee6dc0692c3ecfb1a834ce644376c52b80421bae94d6c7fdcca5a8f1859c45a10c4eb274826f1f089f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021",
+    "key": "",
+    "out": "b752962707a17b664faeb313e2b952dc03e74a7e9447098aa6d4ea5bd287d07a1225eceda9811570580a512b2b20b3fcfca70b44f6454ef3c3524cca6b69475b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122",
+    "key": "",
+    "out": "da0d8e5461f81024effeed5d7076a04fededac57e7c98a5945bfde66755818851be1136b71f433a56bda1841ae71392c4b8290826359f587223c3ef737ff732a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
+    "key": "",
+    "out": "edb86a237c6f137dfbb347011edb4c6e861f4d58146085463441042fa36316f1faf88711bb0f1811dfbbbfa7b51f9ce2d49605243ed016cbad6885eae203674f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324",
+    "key": "",
+    "out": "e6d8e0fbaa29dbeb60f3c7f985bad754d721aac63da6f4490c9d7ea231d2622fdfdef148d0ca442b8d59cf3e4f9835cbc240af40fba63a2ea5a235d46eea6eac"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425",
+    "key": "",
+    "out": "d4e463c4882987eb44a5ed0c821d68b0fef99d6f53a57bf319bdac25ac38eb0b23e1138c0012f5f38346a1de9d4a992a64b942834a856efbaa0620bda29f6a86"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526",
+    "key": "",
+    "out": "42d810d01c2da24735f04a5e901338fdfc2de1715ff6643a372f880e6c5c6c13d2b3ad7077469d643354054d32dd8049ea63732b5745bdb23be2b58e48c1013a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627",
+    "key": "",
+    "out": "cfbf5430076f825a3bbb88c1bc0aef61259e8f4d5fa33c39825062f15d19fd4a0182cd9736d2aec9749ccf83186c3574ab94426540660a9db8c3aabbcbdd9d0f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728",
+    "key": "",
+    "out": "6c2434a1afa157accc34a5c4872dff69fe7f3196cb1a750c541d8b73922888babe89b1c38202218620d88d77dad9dfbab3fbf740b2d1d8f37ead258e2ef10652"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829",
+    "key": "",
+    "out": "48b7268aa4342fab021d1472e9257f76585cc56810c8f2a6e1d4a8946b777142d44ae513a8809f2d6dc726305f7944604d952d4a9f085c5c1050bafdd21d1e60"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a",
+    "key": "",
+    "out": "cecfce4b12c6cf53d1b1b2d418a493e3f429170321e81aa25263aaa715d5ca389f65c3acf99b180e446b50e601fcbf4461d0426a8592a07742201857125f71ee"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b",
+    "key": "",
+    "out": "385a752242eb9ed56b074b702c91e75aec0be9064bd9cf880304c213270cb2eae8e21d9ae8c6081519f75dfabb003b2432b04755b8c32c97ac2914e8bf45b234"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c",
+    "key": "",
+    "out": "d89a124a9b958ba23d09207acfa62a33b87089b286e8438bdc01e233ab2a8630a1eeb6b2b9ba6b7d2100107733deaf4c20478c26f249c689c5268473e2e9fa60"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d",
+    "key": "",
+    "out": "43de1092ff9ff528206c6fcf81322ead3d22eaa4c854521577df336247495ce172fc873995300b21b94610c9d2f633b533bde4568ca09c380e8468fe6ad8d81d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e",
+    "key": "",
+    "out": "868b601199ef000b705cd64d3930262a5ab910e34e2d78e8587b4e010d376dd4a00de44867d0e933ee39a1fa9147d499d184f3a9cf354f2d3c51146ff7152d68"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f",
+    "key": "",
+    "out": "1517f8f0442f0d50bbc0aab6846fdce3b70faea4bb5113acb23abe101d99a40a1b76c1e8dc2ea1936294823ad8354c11e2e96c6712be4cf77c583fd06b5e5c55"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
+    "key": "",
+    "out": "af4c6c67c5ca38387348ca3ec2bed7fba8c2b3d22de148d08a618c297023fb7b6d2c153d5efcd1688999910b20e1eac7c100a2c5a6c1acf5e98f143b41dc8a12"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031",
+    "key": "",
+    "out": "a2ad94243b8eea68f5fadd6908adb0dacdaa6a6d24c250d339403dba8231bd51e887cb5b1b7bde2774c6b08acce0f7495648da3bebc7b1c2821508c4d382f730"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132",
+    "key": "",
+    "out": "28f88cdbe903ad63a02331de1a32af6dbba82d7fc0798702724933da773807bc804278134781f126233220e307928131b24710b4674ed705112f95d1aa37a2dc"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233",
+    "key": "",
+    "out": "5bb29265e246b884ff40914ffa93d9a12edc19eee9cc8a83631d68bd46aad3354ba6674b913f4f823e791f0cb19ea6a67c6e32e9be0d0ff5760f16dd75a87b5d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334",
+    "key": "",
+    "out": "bf3c06dc6d94e3859a4daa50eca1af5357e34579e599f82049e1cca7a7d4f33fea443b44691bd43688f5550531cf22b71277890bffae1ece783f5663a1c4d71a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435",
+    "key": "",
+    "out": "c90df532f2f1493a1155be8c2a4400922049974e7d4f4b54f820c2269d3b161b6e88eb776b859b89b8567fbc550c4f54aad27a1610656d625c327f665dca707c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536",
+    "key": "",
+    "out": "3d39eecc9e904236dc857ba49d55d3bad76572a91a759503376b7708d62d5a785c23068059cf68897f23eec507219b0a02eda2d8bc94fa6989a514822203c8d1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637",
+    "key": "",
+    "out": "e08c54d998f92b7a54a24ca6aeb153a64f9c9f1fc33658b3edac2c4bb5263158dadf00d3519a119a5614c7f37940e55d13cce466cb71a407c39fc51e1efe18da"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738",
+    "key": "",
+    "out": "74767607041dd4b7c56b189ee8f27731a5167223eb7af9b939e118f87d80b49ea8d0d01f74f398b172a8ad0dbf99414f08d2b7d8d75216a18225273d8d7fd05d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839",
+    "key": "",
+    "out": "fee89a92ccf9f1eb084aaba95497ef0f30134c191cf90a49d22c7d2f6614993cbe1a4b6513edc153868a3d562b5b0226ba8e1b0dcb69ed45af47ce4f86ba474a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a",
+    "key": "",
+    "out": "cdae94b6d1d835f6c74c76ec3a2db65bbdfae19d7b050dc95d658733b8b22c6f9e0b63cc905a29ea8878ca394556b3673c62791546a9a1f0d1565fadc53536c1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b",
+    "key": "",
+    "out": "c7228b6f000017d2be4bf2ae48addb785e2735bf3c614d3c34231f1d0c887d3a8e88880b67ad3b2f6523dd6719342cd4f05935d2e5267f3680e773bd5eadfe1d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c",
+    "key": "",
+    "out": "122744fe3fff9a055f0f3bde01eb2f446b0cdaf3aed72caa2940741920120a964fcff87099b08ef33496e399032a82daad4fed3031172f77479258fa39db92fd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d",
+    "key": "",
+    "out": "1fb4e367eab642b72e43ad4abdfcad74620c3f6c63a8913128d2226eb192f9992eb9c8f76ae206d3f5dec726a5a686b4ae37b557ab57f956485334f73dce02e0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e",
+    "key": "",
+    "out": "0425caaa923b47b35045eb50829c048bc890444afeefc0afc9d1877b821e043c9c7b9d6dc33fbbdfa537c1ece311965b2fee8982bc46a2a750bfc71d79dbea04"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "key": "",
+    "out": "6b9d86f15c090a00fc3d907f906c5eb79265e58b88eb64294b4cc4e2b89b1a7c5ee3127ed21b456862de6b2abda59eaacf2dcbe922ca755e40735be81d9c88a5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40",
+    "key": "",
+    "out": "146a187a99e8a2d233e0eb373d437b02bfa8d6515b3ca1de48a6b6acf7437eb7e7ac3f2d19ef3bb9b833cc5761dba22d1ad060be76cdcb812d64d578e989a5a4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041",
+    "key": "",
+    "out": "25754ca6669c4870840388ea64e95bd2e0810d363c4cf6a16ea1bd06686a93c8a125f230229d948485e1a82de48200358f3e02b505dabc4f139c0379dc2b3080"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142",
+    "key": "",
+    "out": "0e26cbc78dc754eca06cf8cb31fcbabb188892c10450890549b2d403a2a3c4577001f74a76bd38990d755bae0526648329f63545ed16995cb1e6343f189f8e6f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243",
+    "key": "",
+    "out": "58e7980b8b1a0b88da9da8640f2b96e3e048366130c266217ddc7953508f4a40d1674dabd39289e3f10c611968ccd1e9ccc18cadc7774a997dd1fa94e8354707"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344",
+    "key": "",
+    "out": "696fb84763e023584b35907a8b8aaa9e0e786f2ca5914541915848fb6ddab8d3d2eab600c138ce6717b0c70259d3193ea15695c850537f2c706ca4af158e957e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445",
+    "key": "",
+    "out": "23de6e73079c8c2047a7846a83ccacabd371163b7b6d54eb032bc49b669742be717b99da12c646ad525706f222e1df4a91dd0cc64df182da00731d439c46f8d2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546",
+    "key": "",
+    "out": "bb74f36a9db696c93335e6c46aab58db10cb07ea4f1b71936305228390959478f8734e215490e9ae2a3ec8f7f76733ae3f8b9a3fd7c406c6cac709975c40f856"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647",
+    "key": "",
+    "out": "ec6304d38e232c096ab586cadf27026dc5e53217d0e8b0c60adaae22f4e8c22d30bc5177f1c83acd925e02a2da89595fc106090e2e53edb31cdb76ff37eb6180"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748",
+    "key": "",
+    "out": "92f9fc6bc59a543f0dc9a1798fb1e5d523474e48ff3e29497f7280d1c408c8663348fe2af78f6c4e5ef5c0a017f3d3f215ecdd7a400ac5773b9e256068845a92"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849",
+    "key": "",
+    "out": "4a25b562f2fa01ddee7ea2e9fbf52f8c756d28db4a8bf70e740e9027426e51639df8788d133856858d01fddbdd5b987944c300dc7f8241fbcefa4f12948afeae"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a",
+    "key": "",
+    "out": "34212dd9f0651f81809a14edbcf7f3acdede7872c7a4847bea9f7ab7597382477a4cb8479a276321235e9021579446a4388a99e560a3907aeef2b438fe6b90c4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b",
+    "key": "",
+    "out": "d62cf7abbc7d7bcd5beb1ee48c43b804fd0db455e7f4febbcff14b05be9047e27e518d6d3a6ada4d5863b7ec7f8492458940ac6bddb506592ccbc896afbb77a3"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c",
+    "key": "",
+    "out": "33a3a2636f9198d37a5ff1bff9eb10024b28468039f491402d39b708c55d27e5e8df5e3e1949958235cad980742096f2779a1d71dad58fafa3cd02cb5eaa98c5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d",
+    "key": "",
+    "out": "b7a38990e6f4564aa3d93a7937100c29f940aff7cb20865a1c218981a5420486081781f8d50c86625cc5d76d0f5ccc4eb65d436609624f21d05339ab0cf79f4c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e",
+    "key": "",
+    "out": "9d665a3fdd10459e77f03ac8c0e239019489693cc9315aa3ff112911d2acf0b7d276ac769bedfd852d2889dd12db91398b01c4f4a5da2780b1defe0d95b63270"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
+    "key": "",
+    "out": "70fb9efd5bca7f19b6e31d640dcf88d77e768ae227ecb3fd6b47137894f549bf1cf06e5db4546044dd9f465c9c85f7284fe54d2b7152699be4bd555a909a88a9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50",
+    "key": "",
+    "out": "7afdb0193087e0c9f8b4dd8b48d9f20ace2713afc71bcc9382b54290aebffeb2d138f4dcf028f9c43cc180898477a39e3f53a8d1bf67ceb608261fae6ddb1abc"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051",
+    "key": "",
+    "out": "05990d7d7df1d484f5b1cae9ee5dfcb43f2cbe186c1a5b181a3731d4b1548ebff5bf61cb0f6d9fc230f25e8678b799e0e83026a0866bf0acab089e102e67ab6b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152",
+    "key": "",
+    "out": "1af7a5ce587c8d87c7b79fa3e723d74ce026b5286752fd0c3742c6f0418ed785990d21f28da839ce8212ed550c373e6d3a75d55c31770441eeaff2d50f6e61b6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253",
+    "key": "",
+    "out": "ddee0c76c9bdd32d7049354cfc85dc6867e2492e47feb08e3983d0b678845d7ec6c9793c3326bfdc1e113276d177fe38825204dd00073989c081cc3b71c68d5f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354",
+    "key": "",
+    "out": "de070648b37c47dc9f2f6d2ab20773cd82fa5725a6900eb71cddb0c9f39b31df6d0773246e8ef9034967752db7ed22733f4379948dc396dc35adbbe9f6537740"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455",
+    "key": "",
+    "out": "a6456fbcff9e3d5b116a0e331a1f974f070e955609781fa599d608a31da76ad8abfe346617c25786513b2c44bfe2cb457c43fa6f45361ca9c6341311b7ddfbd5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556",
+    "key": "",
+    "out": "5c95d382021891048b5ec81cc88e66b1b4d80a00b5ee66b3c0307749e6f24d170d23facc8eb253b3562bf8a45c37990cd2d3e443b18c68bbcc6c831dfde2f8e5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657",
+    "key": "",
+    "out": "e37400dbd9210f3137acaf49242fa123a052958a4c0d98906247d535a351fd52296e7010325bda841fa2aab44763763c5504d7b30c6d79fc1dc8cf1024466db0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758",
+    "key": "",
+    "out": "5273a3a13cf0ec7200442cbd7b374466a7190ddca131d963f8f83965aed3dd86e9d45ab489b9c56247c9f2aa69fd7e3187b8fa0dac77c47cb295ba6296784394"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859",
+    "key": "",
+    "out": "2adb9349a9ec37ff4962f4217e80ebdcd360967b513d1202d9982831155d2f43eb9add63b5ec10d3d0430dc9cf7648117fc60babbf8ebf19facee550455b60c9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a",
+    "key": "",
+    "out": "acaada3e4737c663ebf03c0249cca6f3179a0384ea2ab135d4d7a2bb8a2f40539cdce8a3760fd13deeecd160617f72de63754e2157cadcf067329c2a5198f8e0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b",
+    "key": "",
+    "out": "ef15e6db96e6d0c18c70adc3cdb32b28677402e8ea4411ea2f3468ed9382e19bfecaf5acb828a52be16b981e487e5bb4a1430865358e979fb1071fb95114ffdd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c",
+    "key": "",
+    "out": "057eab8fa61c230967d95dfb7545570e341ae3c6737c7db2a227d90ff315d098d476f715779e6772b4ed37548266e6598c6f096913c2fdd8d6e44fe2b54d9780"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d",
+    "key": "",
+    "out": "ede68d1b13e7ef78d9c4ee10eceb1d2aeec3b8157fdb91418c2219f64149747017aca7d465b8b47ffa53644b8bc6da12dd45d1055e47b4d8390eb2bd602ba030"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e",
+    "key": "",
+    "out": "27f856e63eb94d08fbbe5022b0eddbc7d8db865ef4fec20586df3dd902a05b26359e267c788d7c88032e766b118740200f49cb4d6edb1561b2de7dc65ee6423b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
+    "key": "",
+    "out": "e9e98d6de0ef53fd2427661e1acf103d4caa4dc610036209ec997419c120631c2c094a8ee7822d43f8778011c603111f2628f897c9b431315477756b032e1f8d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60",
+    "key": "",
+    "out": "52eb1e6c8a54492ca760b56ca87da3e1a9a6d8a4219219351d18715a9a2c26708bb712cdac0434482e551cb09e3f16338de29be2c66740c344df5488c5c2bb26"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061",
+    "key": "",
+    "out": "473fa6c51a48105f721c5cb8dba61c64a1e3ddccc3250e682262f212c01ab4874aff688fea9637739e2a25d2ee88dbdcc4f04d01479b301717533a6432b850cd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162",
+    "key": "",
+    "out": "6b7660d410eae5f35ad0ae85e63da453ebb057e43f42e842cbf6250da67866b4240d57c83b771b0f70663e17fbd9087f76b4ce6bcd0b502e3374b1509bba55a8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263",
+    "key": "",
+    "out": "a4d08aca7a9ea6439999ea21e4cfe9869bb90e3a014871ad88ed3a97aa8915951c3fd0b3933a508588938af7544944ef43c440aa8ff1e5a818a466435de70fa8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364",
+    "key": "",
+    "out": "85e0e9b50d2db022c239d7232ae47c025922e4f07e2afc656cdc5553a27d95bfa58a574d4ec3a973281a8f4e46a71ab0341c2577287463e251044db2398d55e2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465",
+    "key": "",
+    "out": "81a0d02442905191163370ae29c7f89c0f48bc1a1eb2947047da1c622b8677e9ea9beced55d33adb1553bd584ad2f86a6207e84e40e4607e11650ee2879f4e0b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566",
+    "key": "",
+    "out": "87790df6cf7394451bcc730e53fc57be564522771e14432a80ab0b06b7b1d209ad698995125385db8b3c0959b8a5339eda0ae67859d847f44c81597272cbf195"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667",
+    "key": "",
+    "out": "cc064ea853dc0152cc03feb5fb5de78b9b88e96155d5358bce84a54c0e0c42fbda092f22d056df9993262e2ba44a5b2d53c3759d0945febaa6fd51b8ff38d839"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768",
+    "key": "",
+    "out": "7e517fc383ee8c9f0a01681d39e73beba5969595ce77927f91691f33bb3e1307ee03616c27e6795186f6940fedd9d5c7f21b6d2aaf70299cdd835125050a8b3c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869",
+    "key": "",
+    "out": "845fcfa67f6e065510d262f1dd6939ea4c0a4a59c8ee3977db7005e1aee420bd3f3826ecfe59015b4dfa0bd5bbf8d8a434485dc11cb9cc8597cb8c9566115f31"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a",
+    "key": "",
+    "out": "17cf2c23215bcdfc243d8a945f3c5c251d2718a3f75fed6f3320bcc6fd927386d56f8719cca02ec5e99cdac4ea1095b465ba9a298b1d238e38b3fa15e8b14ee4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b",
+    "key": "",
+    "out": "d789cec7d7520f10e8b8b6c8409589df57b856b8245568f64e2d2183e359a784c8d26cf9b720f5df567b01f3f48de64d4f0db156be525d7c7a665aadc591f0b6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c",
+    "key": "",
+    "out": "b5e246a9027710c0b055c71f1167e0ee36ebc432cf5d142775a7aecccea78325ed8c12f50fbe648addf059b8c02a61492f8357bee142e7f7de043378dbcf2d33"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d",
+    "key": "",
+    "out": "b523fd77ab9eee424872bc2e83fc0a77ff8a90c9a0ce9e8c87680a0f6286331f15c93a2afecf7566653f24d930c323192d3043b905721cbdb63111ca42f28f4e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e",
+    "key": "",
+    "out": "4359a45876bf6acc0aece7b9b4b4a838b9dba5776a3b14da2fba9102e78bf648ffb4d867bae85fd9b71312dc4602d0d49c907bb9289b2295961e54138123f54a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f",
+    "key": "",
+    "out": "d3f2c8e74f343a4e7190d475cf9af754eed5577262b35bd9a9c42b58ce88262e3114917fb9e683c62d9f8947b58a294da506fb86b3edf25cb9e2d2df611cd448"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70",
+    "key": "",
+    "out": "41b890f8e8450dadb6959accba194917e02f3067821d4e995a37ac18ba3e47c7506e7a3dd1e112e6ec41bef530851120894a7b34b3dbcdae407327f0c5736edf"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071",
+    "key": "",
+    "out": "19d7144f0c851eb8b053a3a43586526dc5c773e497975164d11151364368df24bc44d536072304d70631a840b636b966fd028f61062bfc5285670153a6363a0a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172",
+    "key": "",
+    "out": "c2184c1a81e983be2c96e4cfd65afbda1ac6ef35266ee4b3ab1fb03abaddfdd403fffcafb4ade0e92da382da8c40222e10e9fde856c51bdacde741a649f7335d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273",
+    "key": "",
+    "out": "488c0d652e42fd78ab3a2dc28cf3eb35fcddc8def7ead4817bffb64c1ae0f208f78cf40976f7e2a2cb2dd30f1c99130208ceb692c66880d9528cd6d38ad29db2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374",
+    "key": "",
+    "out": "515b65bf65688399575f0e0677bb6a919b66335546d6cae336f5c6feae5e2bf745e3a7b13c3205dd8b5b92cf053be969df7120fcef77e3895f560fd232fb8950"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475",
+    "key": "",
+    "out": "3fdbc7d69f4b53c225663da30d80f72e54281044a22b9882c6638f5526834bd31601ca5eb2cca4f5ffcf675dcbcfca60c8a3612d1aa9dab693b2356069603a0e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576",
+    "key": "",
+    "out": "4ff6c31a8fc001ac3b7ae020c5f7c45efb6271a2d7ccab8713e548b729f0fff9c82fd4db5cf65643d4076a3fb17b3e893c302dc75b6122ff8681d037120e276a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677",
+    "key": "",
+    "out": "43dff260dfef1cb2d61600e240aad6b720e5f4f83086e26a49a0ce3e0ca44b9a60fcf46a8c3f1bb1a6f5762b66513fe3f7c5b0bc150c08491acbc4361cabcfdf"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778",
+    "key": "",
+    "out": "b4dea94c9d3675be0512efdea8163870fe3425dcd761f363c43a0ca5716b76540663fb2be49e2db106485c9cdd3c164898a954b58748c42fea16a40fc453d210"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879",
+    "key": "",
+    "out": "e5277b6f93ea1de3e2d9fcd8c679793c6ccb8a3be26e8e3114f35da4f2ac014f55c2f15e09e94aa071298167a2fb9be311701ffba9d3eeff8ffc7993a3cece18"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a",
+    "key": "",
+    "out": "f095a7c6e2b91664734f3e23f18eb2ba9b00e71fbfcb9931c0a614792a9d8675622a874c1bf5241a2a8741ed1c893bdfa8e28c2e20bb1c58eb4de7d801116c78"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b",
+    "key": "",
+    "out": "dfa1fd803a1d4a3e661df01f4943ea66260a18fece134d62f97dacdb8b3bf9c800afe579cfd13fc0148bdefbff4e7683561c06a6f7225e4781993b4f4f2bcbfa"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c",
+    "key": "",
+    "out": "2b86ceb270f6908d8b160075ea7f57163af5d5c6f8aac52040cc687c17abf3c778c13906e0e6f29a6ab123deebce391f907d75d3a2cefa0efcb880a0e70d7196"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d",
+    "key": "",
+    "out": "32466bcbded538e568795430352536feb919bf4d97cc44ab1d805040f4bc4c2e7952721018958b4ee78303590ef6ac450df92ec77f477054bff867b88971d421"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e",
+    "key": "",
+    "out": "ea64b003a135766121cfbccbdc08dca2402926be78cea3d0a7253d9ec9e63b8acdd994559917e0e03b5e155f944d7198d99245a794ce19c9b4df4da4a3399334"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f",
+    "key": "",
+    "out": "05ad0f271faf7e361320518452813ff9fb9976ac378050b6eefb05f7867b577b8f14475794cff61b2bc062d346a7c65c6e0067c60a374af7940f10aa449d5fb9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80",
+    "key": "",
+    "out": "b545880294afa153f8b9f49c73d952b5d1228f1a1ab5ebcb05ff79e560c030f7500fe256a40b6a0e6cb3d42acd4b98595c5b51eaec5ad69cd40f1fc16d2d5f50"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081",
+    "key": "",
+    "out": "bbfb9477ec6a9f0c25405acd8a30d5dd7c73571f1d1a6e8ce72f8b9c941cf779b76403ac7f0450052584390a14eaa37c20b5bdb0381054a9a49534f81466ba9d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182",
+    "key": "",
+    "out": "c8287e933d9504bffd7be2ac022b32f3f46d87a7a0e79bb2a1cbaacc2e84cd70845d0d427848a6d788d39622e10f4342237eefa6d3c012dae96cc8a650cc2e30"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283",
+    "key": "",
+    "out": "c4596fcb0a28d24aad70cf1853ec29dac0fb202d8ec140da300088bb85b92c30291946ad307c096e3b2866335c9317afe28cadab5d62c354329c98d993c5be1c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384",
+    "key": "",
+    "out": "e88c38e67e8d19835808854670779eca60bad854c5778790a07254a30a14ae82b61bb16911fe57771d19e9b7f5023c0d4e8a8d372e3d85e43b03e5e00e6eba4b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485",
+    "key": "",
+    "out": "2d663e03e6f3552ccdfba496a14cc6224ceb1eb61aa265e6a7d4a26e54106104a96e330959f9713b3487c1b9497ccf82611dbfa34ff11d3133b5b5d1f1e4f8d0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586",
+    "key": "",
+    "out": "707d6a58421b8f7e44ff1f8362bc700f71ef7c3935e0764bd14d390c1c72792af9c2c02fb72a2b9d9a0729cb3e99626cf034df54b506b5b16464f475864f2590"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687",
+    "key": "",
+    "out": "9d88f8baa4eb0f9ab2292e4982ac80445358227d7f9ce7a4a629f180f7141e08fe6355c64521a69ba2bfbd1c4a3ea048d0bc8ab3701f30ea83fbe02474d892bf"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788",
+    "key": "",
+    "out": "65ea4db04a7581c18194a8921afdfa4f8d9af629ded2772c658e08485f67ad2ce21a98cd293ff28d4dfcdf658cdc7ae67027848e71ccc115a3ffbac4fa61bb73"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889",
+    "key": "",
+    "out": "0b4a68929e7f15ca91bb4439f2403702034cd4748e46927aba95cbef80048b25a675970fac33c874abd3d83aa0f37be2308310e8dd794f8192930ed56e70a8e4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a",
+    "key": "",
+    "out": "c1c5d8acfe3fde674edd3620157a8b6b4c8e67c6a7a9726741d9c305e2a52a8797fda0b2f13ac78734db2f4fc83ef32414d931ebaeaecd826d7c2be203bdc2d1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b",
+    "key": "",
+    "out": "2dadc8c9f7425a0114491287bdc68eae4fb6194d1a109db9b6e8a2ac94d4e440909985c4291fe89fd8281f8fcef6f6bc32550e53cb7a49428981e8d53cf5a212"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c",
+    "key": "",
+    "out": "e555f2a58acac5503f9e2d97b246872b4ca78bd56d47b765f052aab3dc77dbe993936f2252f0ab2e01fb087472ccb5a121ddffde531d3dc4022a7d1956ce0e20"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d",
+    "key": "",
+    "out": "9b4eae1295000aea7983ec3bcb4857cc7125fd7306787c63132473cfe8f4eb45318a60daad646d63a27c4b9d1f5073700a3057de22a7fdf09a87aac66ebe4758"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e",
+    "key": "",
+    "out": "9664acc2dc7298b9868db495eebc6b59657d139a6af060a72fb69124bdd3a6591888f0354f702b1b888684411058a3759f7fd37f06eafb3b58ecf26f4553be27"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f",
+    "key": "",
+    "out": "fc16e0925a35aad47ad69554b25796fcf9260cb50e6cc3747535559e99c85881c75889ac793ab78b88b05fb160895655e4d663a2a09ba9fa614a10c22947210d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90",
+    "key": "",
+    "out": "225e7341f857524f7890376c50e6354b16c1cdfbf58fe5f3a4039493b5dd408d79d48c56e1f89b687fbe3362a77fa75a54374b7a485e91b189af2e2f749e2adb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091",
+    "key": "",
+    "out": "a07a4c023ac704ce7c09dd6c92c6f184f53e8dd96fe3be9e93c39c534485b64b39d5be7f7b7170604de77ce5a437a98e712cc44f19e21d41f0e6e3ec1e00ac55"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192",
+    "key": "",
+    "out": "62858463582d22e68e5227bfbab540048f65edd6a6755f6fab53c025b663ca377a0ed5efd6af166ca55a9c733fca805ac4e409ca56177aa74940db9f40c3b9ff"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293",
+    "key": "",
+    "out": "a1ac539d1abbc2b096ffab813b64457fe6eb3b50fcd88953d0cd9f6502f689620ad442b5517090b50cffb958866d7c161d8a7d7560c893e1def6aec437ad6d06"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394",
+    "key": "",
+    "out": "b586b75da70f6cc0627ef3cf1237c94b12d0f74dcba26a9e7c7bc6c21a335337bf9f5b830c6324afa6ef649e95af8790875234c6e661d3f5e98ca012ae81488a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495",
+    "key": "",
+    "out": "5668a2982137cbc622ef8d06cf4e86168cdd4a899cd4462af6c3d415426156a5d8dd67c9604f31b57d6c9d597250457e4ab52a58115542acf27f925930f6a112"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596",
+    "key": "",
+    "out": "f2b1bd16d88e37f3a518d193ed061a1df7b443a18ce9f84445ef86effbdff16055023cd4e78d034de4032a77ddc1d34352fe617f825624459bc3269f704f345b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697",
+    "key": "",
+    "out": "f085f3d8bd138e0569243f74523e87ff376f04eabd5a2f6e53df3899000e2e94af0d2bc71c3f711025c538a6c8b10b0904dfc346adad7ef36b1ae88a6cfeabbd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798",
+    "key": "",
+    "out": "8291a4afd2e4b71661773a46b3d4455a8d33a726d9d3873083ab337020c27b4dd643e28c2fe47ab2fbf5d14081a3fc1c839b12ea31d13cf49eee97ef2ed7fa3e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899",
+    "key": "",
+    "out": "b126ae46a7a4595e31607ef807a5601f4ecd9e7d66c82daeb9715f8da1c17d7d71c3e68250c9dc01ac40a36d2e638bef3d7bc70ea2d0e331e3d33e1704eba92d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a",
+    "key": "",
+    "out": "63b14d8ed2479caa17c3e4cf203b233a7e373edb0c2f197129a9a36c5b3e1f3838f2e82ac2c2ad9d52b335790bff577304a378e38eb6bb4162030ce2a8ba293c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b",
+    "key": "",
+    "out": "34422a3229669928c490f57b8e768852e5b7c00dcad60b012a5db39a2d597c3d0a63be6a263ea53608b70692d78e1b427eacec01f4bee0bdbb8f0881488efc28"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c",
+    "key": "",
+    "out": "e26b7ed6b907b54ca26567f11ee5bb6d739a0008a53437ad7590a3134ceb95196e49b3443f324922517523c0cd5a00d77e4c4de7a0de968a84fb1b3be7b3b963"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d",
+    "key": "",
+    "out": "260197cafbf456b411fa26d383d64d61e81e5e52f84cd9d57386c776230c65a2681cd2fdfd28679f67fe1bd7469cf7269585fccbaecc22f503d6e3fc39301436"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e",
+    "key": "",
+    "out": "cbd5abe37bcc4f9a1270add0a5270f42839c7d249320d1f1d88553d05faf9a2679f49b49c9e20c1c85c629aa0f090cae8f6e32c6cad71721fd0623e4ed25b256"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
+    "key": "",
+    "out": "780e314fd697d2a97d221a22c39011e25069163cd08f0070d067e8cdb0bc8673fdb0ec4f46e31d748cd3bb3d61b9010a6612f341d471d9c5a2de6b6dd538a6b5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0",
+    "key": "",
+    "out": "408f16ce86f801d08bd051364b3ecd9a3945715888df4663219a190b3504e4618e7bf55171178b0400fbebfaa01f6eeab54ff5e31e6d7a55b84adb9e03df4836"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1",
+    "key": "",
+    "out": "0bf98869ec0580199ca3708ec9c42c376c5c36e0fb749242572398a0da57f98d1c4cd2963b37c3c65a10f106b56dcb96dcdd325796297adbf6ee6270edd4592a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2",
+    "key": "",
+    "out": "052c32984387b1930d3a96be72368535444f130757bf87e0762d8b1c4f6570f4dc674c4e6f5e21abd0b35e1ca19db840688d1b6e9ec91f3730e8b2880ec2c3df"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3",
+    "key": "",
+    "out": "4bb71409c15a0d3932c599ef0ff3eff5c7602d7000cda974082c4a4682249a19d43a5c14e0aeef897821056380aff275201d7459148496eae9420e718288b414"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4",
+    "key": "",
+    "out": "4795b251cc7b35e69692db7fb40efd34f294f51aec15d6c8673e59f204becf4cf9df849523f1db73be2a66c839d801974d433b47806701a163a794b26a846b06"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5",
+    "key": "",
+    "out": "dd50f965b60baf168f5ea05ac20b8a78f4475c18610b9d9fc2b7c3ad5c6f97a4cf5ea48ee40a3ca2293cc4214082cf0f8ec895553269e14da9bd1a196562ca59"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6",
+    "key": "",
+    "out": "e0b54b617f44922c7f61c6a54c98c61e932ded1fa9340266eea25f01e8180d1ddc6ad8dd6a0b8fab8c73aebb9773171bba04a781b11314d5a30a9d1c2812ca7c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7",
+    "key": "",
+    "out": "2dc4ad0689a4460b5b399e911bdb41586ac8ad367b7aa39e3eaec8899a2d3ce38e34ab4608234d75eb6737fe215824c2a97883596f6f18ddebbf1627ded91d84"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8",
+    "key": "",
+    "out": "f56a11cbbf8a997e1477ec76e53c894b148d6925a4336f0cb7aab9d802ac9b4536f480101f3f9a77eecdcbae7aa6ea447a85da90b501f7db2ef8ddf5de173363"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9",
+    "key": "",
+    "out": "6e171d196d0fc82fb473e29da8f40f37ee9741ac3eaf175dd49fdb56530db59898baf3cee72eef5e77276cadabcd752ca3a1b864c10ad28d27eaad86e3f21d33"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa",
+    "key": "",
+    "out": "952012330d92bb9c1892f25b7b5aa0fed3c0398a1708509a661474a3f5e511d09f21c30008002f1042d83d2f7b11336b8c2fe1d979c1e386e02097489b2dfcf5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab",
+    "key": "",
+    "out": "2dce47c33a7e7f215d34a5471bcd1110606c77138f19d41741ed5d1b89e8f7c774eec4bbc102766ea1532f2e43134ad366bdcc27d1a0cc959e1648659e44cbbe"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac",
+    "key": "",
+    "out": "7f0659597e7ad122d1c9ed91930b07de40e255201a33eb2b3181376e368df7764c0c14bf799f161b9b0079578b4709713e24e42fe7dd71b50943f440e23cd1be"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad",
+    "key": "",
+    "out": "1e66f7b358805dddffc582683e0bad818c873403d4ba1506b92fb320ca8cf9cee8154715d6db6f04093d4b3fd8a6fc8e7eddeaf2795b3d22de7c75ecff6f92af"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae",
+    "key": "",
+    "out": "1f60c18db168d90d2b4660e758a3cd28023d4c0b848b5e33ea5cc15629fd352eacb14f05fdec07ac23da9204745fa973c32955135f8ec7410a1cb53bc7580684"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
+    "key": "",
+    "out": "b9df57b345ee6f870ee0e63c558b81c1bc3842976fd3cfb1b53b766bf436d1d175f4d4c5f1bd8d7af65b5d18a72f9571f234701932afb7c3c94a8c8fa023db4f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
+    "key": "",
+    "out": "d8c82495a2b5f66451f8c5b2e8a17333c2be3220ce06a814c2cea95cc86592aa0215bf294614a328cf07222b73f93f242a948bcae9565fc97057b52e0280eb82"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1",
+    "key": "",
+    "out": "8134ce66d95c4088a566d4e43599069ad04553b0fea3d74819a6fd766f436742f6b6ecc8279398609f60b4e4bb44fd72cdfbff18d8038aa71230838b126bc300"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2",
+    "key": "",
+    "out": "3da89f5c52b052e042e5117b96806edb1c55227e8514b39e8b22bea4c9533080a4d7a92492b751769b0e119ef4db2bb88d5c1e75b4031074d7f21a78014a1f96"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3",
+    "key": "",
+    "out": "9bdcb469c2665dd84683e58101fdae5c88292a4e05c400ca0826da79382b8a2826ff24fcd556c9d5b5aa892f02b1670477279bd75f1b2b7b675efac380607036"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4",
+    "key": "",
+    "out": "6c77857b38533e414af7387c98568d71c8f0e35e22b02e2a1c0dc6d57e37d868725ad823586a0beef39889cc31f1f7fad0960a125e29dfea745512d179e5f589"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5",
+    "key": "",
+    "out": "88c9833a6d44fc25bb64f3e98e838fb4ff564896dcd3583a8b57c9466e740c628b2d26ea147cb31110fbadcf9d0108accebe04317d19fc0366de0c28a1a45e2a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6",
+    "key": "",
+    "out": "0aabb3a178464a0147645f05712a0a1555c5b9a3e999ab255aca35c50381f490551a408931aa6be9a4ef497a165b36663b1e1f05134802b178b7c70468cb98e8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7",
+    "key": "",
+    "out": "5850d893706b3bc2dbba9cfab028bed819a28311d2d6f0cd8e272ee677bc878a0ced6c0dea9e5cc94b2b4f591a40ec9fb18222d6deace1f9c083dc05de117a53"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8",
+    "key": "",
+    "out": "bee696a4764f9425d91b141738625a0447a822bba7a84778cc3a77a386cb182487db513bb8f36fc2f7e6d2896e4456a52346c4948e3ec634cbf18f39c446cbab"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9",
+    "key": "",
+    "out": "3d9f75d3e50d9ba3bcac4a4e116b9b308dc64599a3864a9dafd75cb71f2de3109f7956a7d2dd374f8406d77f796311e3d30089e54dd6ce8abb02a85a85ae92e4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba",
+    "key": "",
+    "out": "ef3951475a16df64983224046530dc7cb053d29394753911c4949950f23e8a92c709f46369b23a0d703a6f36490f75be1e3e8129a829f3dcd72d0e55497b8133"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb",
+    "key": "",
+    "out": "d4197d2a685bca6bfbdd0e3d84c748013548bc849fe649dae7c4a277fcbd8f818a9edfa6ca14d7feea726b23b4a33aa8a3f5a66167215c6148c06b94cd8bfe37"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc",
+    "key": "",
+    "out": "7a24403335b86410d8d693f163d6198a680f7e3ac025ec4474249b011677fe1c866aaf453db0e8f654335150863ace576650803191278e9d4b547a434c5654e2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd",
+    "key": "",
+    "out": "af07c67d58743aeb1850eb53b2da78ecf7095818325beb866ff313e394c007e0c0b5a1cd7ae6bb37cd2781b52d154d18865d5e37dbaa5f96739bf7695996ae30"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe",
+    "key": "",
+    "out": "28b3c260fa7f23b9ccadd615a11469498adb18d7a9f684fde435c06533f5f508b29b5ecd0ecd57369f22f1c54e61be6cd104c8f7d3e1847aad67073a4786e1db"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf",
+    "key": "",
+    "out": "d643233325239e2ebd411f0e002330562eb1bb08e68824b71b98199c76d53158d91ddd6f4f8261ec1d72fc77c2cc237eda15f0257cf07b84cf1fbd1dbafa1dfc"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0",
+    "key": "",
+    "out": "3d7b44cc82efcafcaba6b1910548958c180a0e8d84bc663e8ef9533bd80c4bbaaa255b1981f756eb1079ad0f3471a1fc9d7a432339303a5781a34535309e5a24"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1",
+    "key": "",
+    "out": "eb0812c9670646d563198b117aafc56fa1b6560f88b5754ebfc31b355216d8d74d341e35b243bc938cf546af1f73c1b00455dc06b2c6c535279e8767498f14e6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2",
+    "key": "",
+    "out": "7bba7d7304021c75b5d6ce66b4efa55019d942d208afac8211aa7e5e111e27697670e4ec91ba308ebdfb19154c3bad0526a62541ae5d43d0f547b9d98e073660"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3",
+    "key": "",
+    "out": "a8e2a9468da3e3543a23a578780e2562c7ce57fd1120e1c024d7ea3290317046616e14cd0f15a86b9939549b147611b6a55d85abc25f639546b89dd23d39a985"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4",
+    "key": "",
+    "out": "ce874cd6e1958b9d7f11ff44ab0832e848702c8f26656ba10bf5720a7caa1f5908c99a9603a98b416c57228c819ceaf827013b2e6d6b2dae59dff104b902c31b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5",
+    "key": "",
+    "out": "30fffe37218db194b23273498f4544d38414bee41b1755a0c6c2dbcb411942d5ecb9d4523fb4794ba36e579af2f8dd851999233183fab27b47add87df35914bb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6",
+    "key": "",
+    "out": "cef4431dce9ff55a00300ec8649e27583618224369f60a5c896b2a3110b032b87c9ee4f26c5f0bdb503ea7447a5db3f707fe3410dacdd7572219bdea8e17dc04"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7",
+    "key": "",
+    "out": "8ff0bcb75f0061b5f909298f569e45c75ed2d64a8189cebd4e02566e1a1b8be53a783228558e28b5f87ccc2f428f7f879744b525b24962b3604b120f06779f2e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8",
+    "key": "",
+    "out": "7f8ddffb4dc15191de3ddbe4a0f88b7ab02d48e25cfc1fe91da557e885d012b8f65526c5b7b1013fc816585043a345605a39d8dad70d8a6448513250aac4f3d5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9",
+    "key": "",
+    "out": "b1fe8c68aef6b4d4b23354eb8c1d8f5a56e32e76b96ac8443b2ab835e4c8b674b33e4c6c6dc121d7c2d34b59b37a568a1c98d500324e53088785b6b0806347d1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca",
+    "key": "",
+    "out": "8e8734fcf9259ee37fe9c6cda282c2d5eb83d0cf439c8619d4b042ff69966b03565be4df96393fe6bf35afa16e0273b6d339c00995bf6f60a714ef180ebb9315"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb",
+    "key": "",
+    "out": "ae156d43a72c042942595878a783079760f521edb8b2c3d41a566b7cf74a4a08ea0f119d240a62ec73b9509788fa3aedf120ee88cb951b693f8f7caf8cba377f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc",
+    "key": "",
+    "out": "9330aaca8c08844658c29506b1c34272e2b3c7b4e75e6fe99a0107ec5da4530fb1c88caa66dd9c471e01ca21a13a5d6f8215ded3147e94de2088571fd1bf23b6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd",
+    "key": "",
+    "out": "c129f22c50f5997232e2b9f93dfaa00ad8a53429f9d15b9842e3ae08d849ebdd45238c85f92c6f917e0f8f6f94e234be076168e0df43d028455279a6ff65dc84"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce",
+    "key": "",
+    "out": "0e2b4bc2f6a75be4b7c9d4b53d104da065858d387b340bc1634f3a8332d54caa943024b213dc8d4f219ec8e1decac7d5c6ae69c9efd88149367838205d0dc7c0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf",
+    "key": "",
+    "out": "83b543853b8142a83beff0735f201891e7ffc67dbdcd21a422bb336de32972ae0392646f6827d80cda654fd3a0774cd2f995517cf064c617f21a54275fe50c8d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0",
+    "key": "",
+    "out": "09be15eb6a5c226f6d9508cba4a2519fba172af8375827d754a7a1bc1925d13f5e6343f3e14d08a06e8d37f8ec56fb438e623666b6fb0e23fb50477d411b0c3a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1",
+    "key": "",
+    "out": "c35797e9832d3e2323335b8c19c5fa7491602dbf6bea77faeec9510bc2e891c8c3462199f60418d2e0abffe31b613bb980ea32b76c82438d025f678caf4824a4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2",
+    "key": "",
+    "out": "cfc057fda78a50318f4978ffffaf771798e12c3ea8c798195bc5b4e6891e61aa25f7af4aa7286ac8507662c907ed913eda658f63fc47997c59b85970f878ca18"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3",
+    "key": "",
+    "out": "d8ebe0e638fc535b52cb0afce0f82dde285701aff329a54ba06dfd3d1b4b31f9f4b24d9d6836f1223d6de66bae7888febc2040cfe930e69ced59da6da8a0a6a6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4",
+    "key": "",
+    "out": "16b8c55cf2f135a432590d2d4cfa38592f5935f8e71ce08a0206a0e5abea90b2e107eb86b918823bdd3bd2660722c8dbfa66abb9f8638e463402f657a168640a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5",
+    "key": "",
+    "out": "6a6e89384f535f02176c48a993d3687b389bfc03050c777086355c1a55597742f0b74834a71d052ae8a83dc34a8fd7ba5aa69dbd612a4c22df4f74e2528fb7a3"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6",
+    "key": "",
+    "out": "1e4038cfa50d8b13ef68bec3b0ffd562a07ad634b5828257dba87304f823a900492a3137198b605cc7f77c33b8ca3d940fd9b338cf6b7b36e7d9d927209793d0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7",
+    "key": "",
+    "out": "5ba6cd988ff9a4819142217ed65d437b413ba5026b554d8d94ea2702c096d1014775dba2cae96f1e2e7229c378f20b0389e119547fdd35224a617fcdcd0cb3af"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8",
+    "key": "",
+    "out": "2d20961230e250f81ddcd2d2ab3ef0dacf96851ebae5963447192cdb89e48e84f396ec9a09252784e173ada52a9c81acdab3d8d68380247ae975239b017dc1ce"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9",
+    "key": "",
+    "out": "35383ea7762b55310a7d57fbd5a54997579b0ba39a4eb887942bd14fd8483188e50048838d6c02dc758959a9f74d83372743e864c601ed7040a9e87152d4cffb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da",
+    "key": "",
+    "out": "0b223b6a1c2d3ab3f9077a317b7fe32f6f957b7b1741f2717771834d3796a19ba36273c9eed64c07fa4e9af7a98ace9c789a79a5a0f94d0405aaf04af31ed797"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb",
+    "key": "",
+    "out": "5a007f5895524a5e8037036e0f2639fda8c5c1512d76e9d19b3dd2d5ba43f5079741a458313c5e02400ce02cb65680be282eacd9a254ef1cddeebdcee85d4187"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc",
+    "key": "",
+    "out": "be4dd1ccbde1670004d0efab6543e91c4e4664e5a2a88bac6dd27d27648d302a065be6078b22e4c4ab4f7f7cbfafc1ad86ec2a504fe5851766f7a3244757cb6f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd",
+    "key": "",
+    "out": "0fb4483f9659296cb9245b57792a1e6a99f28790077287968ab3ef3589e6902406f1f39dcce0061dea940fc8c1c49f4b545eed59e96ddae96a6c35b5593c2977"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde",
+    "key": "",
+    "out": "41d1fadc60a46c9ad0120a3f54d005f5a1075e2f71ee0da618bac1461efae969eccd7aa575c4cdae971ded13ae13c506872cecb5b208fa72a94840023edb3efe"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf",
+    "key": "",
+    "out": "2f7fdc1da44b6e5d2decde821aaf4b49168c02e8d5f25d5c699871083aebd928b74dc22dcbedfaba9316aefca848d15f0517329903d34b8370ddf9bd58c6d0cd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0",
+    "key": "",
+    "out": "88558a464ee1a8803b2395af6a6490842b5cd43d41f6c07cd6c5f85f82f58432a0b162b438bf0cb7082a7673e287d6b90f8d0dc8aa5ceba36bfa77b15ba06916"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1",
+    "key": "",
+    "out": "ecc149917b266398b6f3297e969673b14eae69ce43671fd3c6c215c7cf42dea102fc6bd90c87dbd4290251129cc19b38ccf00cbdb16dd8de5158601a416b1f00"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2",
+    "key": "",
+    "out": "ed3012f89d71ed13bb8272ecdc3d0f51e14a37c1ef7757777ada6712784be16ecfd3e6405830f51db33dcb85529293e23e473abf8c5c7655d0c4f152d048bab2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3",
+    "key": "",
+    "out": "097a81191e1005676d6e22a96348fa4a7c9561fd4d228eb25f294756bb87a2ba88475b036f79fe373d7540870552001d54795f259239be6d32c487d1944f1fe7"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4",
+    "key": "",
+    "out": "3fc798e469d39086ba0bb4063e805fdfb2208de499184173f9a2364d56bcd563ed619bb687322425014a1aad3bcf50d22d83a99d09730a92ec6546b3fc40a2c6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5",
+    "key": "",
+    "out": "6912b4b341c7dd70683738ba0e7debbabfca5f4fb0760c849776e920750bf13789a6999796234e9e240715b26767782b85a64d680c6d4cd426ad72b2fce081e8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6",
+    "key": "",
+    "out": "cecd140150157dc906c0ff7f87c0088f316480783b4fe0a5944510c64a87e3ed066797a27ce9d0f284dca518441808ac18290afdc031294b31aa8b4a9fcd78f8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7",
+    "key": "",
+    "out": "2a2bed5d6ac0892811a409d9f1ff6303ccf95544574699cda7f7350301f6d0c4e86e635c80875666e2bb3907510d0e72120f04865edc4c6ceecb4462d6af60fb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8",
+    "key": "",
+    "out": "0385ae9b735dc59f304d414ca043749ab51ab665ee01be5e52dcf725ee7dfefea6ad73f335eecf2a5102e88807fdc75ae6dc490d7b8b5f116303ef60a5f17c06"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9",
+    "key": "",
+    "out": "0ca3ff038965c03bc65bbe2d866ce9e0e4e7d03dc7f86ba5650f82ddb3a9aa846b2b1f553bd89fb4f9b62e3c7faf9ec3109fa90ee56c2463e6efd1abad8e28e6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea",
+    "key": "",
+    "out": "6dfd4f22184ed091fd5aba039fcd3db922f5e59bf838c037357fad934b4510603f43a7319fffa62386f8788fdf9ded40c666b4bdca86d9328fe55ad86b372fc8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb",
+    "key": "",
+    "out": "a318976102747d800f584df65bfb443b856f009e74f72946d0076cedac04376fab973453adadc310f72081cbba96264ffe2b21a3b18be9d88c4246cba6d30901"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec",
+    "key": "",
+    "out": "b5e6e4fca0cf9848a00589c65457db68b3253a6e17788541472e1fb94817f804054d07a5d32dfa0cdb6fb44eed50d20e5f2264361132fa5fcfd6e1b367c1be28"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced",
+    "key": "",
+    "out": "2ea457382925e03cf81110050e636ad678e0aa3cbc6900bdef278aaa18f235e25160a20e23fe0e62a8511b5dd0592f79cbc8eb7dea64ac8667494345c6892dd4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee",
+    "key": "",
+    "out": "96b3498bccd78b5a401b2738787d28a98a0edfdc7c0b5ff943cfe1b14e9cf5d9ed43107dfbdd9e9728d5fdd6f71fbc770eaddc4f2e409abe71927bae1f8f73d1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef",
+    "key": "",
+    "out": "ce1bfb9afed28af4dc7535adef71b8f1b80a8d7294b411fd1ed393cf232d3a5c5df23dbb1db26dddf6f745f8bc24c3781f2dbbc818a00ae1fb9d6463e95f2986"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0",
+    "key": "",
+    "out": "e64d37356b296b36930eabe454db11b2097b0c040bed5798878d38a8c4d1c6f3261f36bff764e3b4d606b317e5ff5004184592b0b7ddfb8c2fd8352326cdddb1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1",
+    "key": "",
+    "out": "85e6fe54e1e76046af68f5c6044c1e3fff3bfca0baecaef6a1df90350df2b0bec6a420ee8f49ad4464ec4c1e7d71f667614acebdada3df320779078323f6a8af"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2",
+    "key": "",
+    "out": "b12ff1eb3bab320d7855b549d72b724759916811cbcf3e1a12823f98b64ab5c45941610f6b471e35ff792829dd5ade5179125738f3f23728630f1eec57775a19"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3",
+    "key": "",
+    "out": "b4dbe72a1e21697a4744be65000cb1bad37ce21416ee6fcea84ebaf12a59c11d7c080df92fb2aa8f1c4ee8e2a22d30be498582d7c5fbba165a472689aff601b6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4",
+    "key": "",
+    "out": "348218be4de08dfb245bf25286e36618631d3bdb5827d9f74fa04301661131a4d55c7609b1a6a03b853f0733e0aec02616a0a40e8491f494d76c1543cfc68214"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5",
+    "key": "",
+    "out": "4287e19bab1d4f75e1d197cbb43f11331307f2f75b8d0d50278eec540999a009c03373529607fda605aa0f0739e20bd1fdaa27d7c0cdc8284d98e6c755a7562e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6",
+    "key": "",
+    "out": "08560c9988c8ce5a8876a600b6e512b4e243a4a4300ad5ab2ff0637cc56a0441645b3deb1684064ea43bae1cb62d3bc41537fe8d7deca7172937776bbed793a9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7",
+    "key": "",
+    "out": "b536162394776fa7dd5e9fdd01530fda52be1d39bd609b3f3bd0476b8160aa18ab2d37d2991628be2fcc1256cd485525d1fa356b04d30e4a0f9fffc9935cf432"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8",
+    "key": "",
+    "out": "02abc97175edb47a4cb4bd38d82f86aa099c8b8fa8ab3fe1ce105a22bd616578c6dd1515dfb0397e1d9d0671916de4b522e74e6375236893c8fda6d236bc8da1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9",
+    "key": "",
+    "out": "21e1eb731276a835a6ddea7178b23ebc9aecaabc7ccd706587d71b85449793b07e7b179a3da7a571982997e8f5a67f8c93daf11aaa23f07e4df7a13105a54209"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa",
+    "key": "",
+    "out": "1cc537d3e50ed9fdcdc4f3ccb4819375415304d8e5a6c05805b6b5d9e1fc18256864f10cd812f84801b8616a92b40795a155932464f62dbf6ebd2f9ac3ee2816"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb",
+    "key": "",
+    "out": "6f6cd26005c8a561cff51e301d1a068fc28b9b650ddd27ae97b522dae9639134d5a150587b0a901f3b9aabc7e39784984cc585235d8e17ce9e3b42105bf9034c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc",
+    "key": "",
+    "out": "69c17c2864c3379fafb714c0475e00cf7c9b377d57a8bc9698b4d34a54854176a2f8d15afb54775604787390d60074cd4bca6902ea23d3ae1ac083409fe38a4d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd",
+    "key": "",
+    "out": "8669b0ad35829edc2a8a09852b0ee9b3903bf6c1f82f90a3f0ed9524192f1091fd6484e04c3fea8b022f4a8950db17d4734145c0cec5dc387455c126903f7766"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
+    "key": "",
+    "out": "3f35c45d24fcfb4acca651076c08000e279ebbff37a1333ce19fd577202dbd24b58c514e36dd9ba64af4d78eea4e2dd13bc18d798887dd971376bcae0087e17e"
+},
+{
+    "hash": "blake2bp",
+    "in": "",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9d9461073e4eb640a255357b839f394b838c6ff57c9b686a3f76107c1066728f3c9956bd785cbc3bf79dc2ab578c5a0c063b9d9c405848de1dbe821cd05c940a"
+},
+{
+    "hash": "blake2bp",
+    "in": "00",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ff8e90a37b94623932c59f7559f26035029c376732cb14d41602001cbb73adb79293a2dbda5f60703025144d158e2735529596251c73c0345ca6fccb1fb1e97e"
+},
+{
+    "hash": "blake2bp",
+    "in": "0001",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d6220ca195a0f356a4795e071cee1f5412ecd95d8a5e01d7c2b86750ca53d7f64c29cbb3d289c6f4ecc6c01e3ca9338971170388e3e40228479006d1bbebad51"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "30302c3fc999065d10dc982c8feef41bbb6642718f624af6e3eabea083e7fe785340db4b0897efff39cee1dc1eb737cd1eea0fe75384984e7d8f446faa683b80"
+},
+{
+    "hash": "blake2bp",
+    "in": "00010203",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "32f398a60c1e53f1f81d6d8da2ec1175422d6b2cfa0c0e66d8c4e730b296a4b53e392e39859822a145ae5f1a24c27f55339e2b4b4458e8c5eb19aa14206427aa"
+},
+{
+    "hash": "blake2bp",
+    "in": "0001020304",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "236db933f18a9dbd4e50b729539065bda420df97ac780be43f59103c472e0bcca6d497389786af22ba9430b74d6f74b13f6f949e256a140aa34b47700b100343"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "238c9d080285e35435cb53155d9f792ca1bb27de4f9b6c8726e11c028e7b878733549112a328b50e8cd8ba2787217e46b8168d57113dd404d914e29a6a5470e6"
+},
+{
+    "hash": "blake2bp",
+    "in": "00010203040506",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9a021ebd504a97596d0e85048ae1da8999e3a047016f17c6c5556c2731e9b139261f843fad6bd43f7c7c587f698d69b682e568b442ac45889857b7690734cdbb"
+},
+{
+    "hash": "blake2bp",
+    "in": "0001020304050607",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3aba07ae980e338637479dca1e352800f4588e62d823365aa69c5b25fce12968d26c9bdbee9a32bffd42e6b22c8138a61c1fce49ffbc190e1e15160153ccb6b4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "774cdf9abb5081fe07eb5725e6069b8d6c7e6004a24d70f7dfabfc03825bbc3b30e620b6041f3cc2896b14ab660af72e249510ac2fe810cc7763a2e5c3fca7fc"
+},
+{
+    "hash": "blake2bp",
+    "in": "00010203040506070809",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9e089f51657b29c2668e2850524e53aeaaa7306f2ad5a232b5f07f688d8ab2b425df7ea5bd3e9ffd61683890151d78bb94031185aca481e2140fe37985367643"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b35bd54e4f81696b4f22316a1e337d98d1c6b06110998763b5913335923a4076cb80d6d8a518629113477b30a132a6b27fc1ee79f6b2e0d35d5bc29727463db5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "123930d5a4b73b491f50e56e2b7397a43d2e4787237602b66fe0a847bd13cbe8b37dc703d7b2b4eaa8bfb9a58a7d719c908f1966a2f19fe6eb1a78962afa5bf9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "089cbc7ee1b12c0cc9c83ff666fec8026bb71b9084979b0ea8b723bbbe8b00d41008b60499f24f241b63281fe5b4d88966309c0d7e64669105e51e69d7af8ce5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6b3c678947f61252657c354978c101b2fdd2729ec34927dd5eff0a7c0a865826e833c363232131b10593be1ccf6ba54ecc14312f45bffc2404629ff80267f094"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "aa0c23ea1c6fe2e90a7718ef4aa4751ff6beb9d46163595b5d4fb89600525c5b6cf19ecdb2477872a7a12d40e5063608e5f0008e7972a9c01a4be2afe9532f9c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "63347ab4cbb6f28952992c079d18d42001b7f3a9d0fd90b0a4771f6972f0c53289c8aee143294b50c63412585cdce4ff7bed112cd03c9b1df3def0cc320d6b70"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f10",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2396c0cb9edaaca9d8b104652cb7f125f193551ae5d7bc9463307c9e69ca7da23a9fbcbcb86669d5ba63438593e132f992b57c0017c86ddb9b47286ef5b68718"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f1011",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a94b802257fd031ee60f1be184383a76328539f9d8060872ef3573beb6f27368089590edbb21f4d8f181ba662075f91905974beeef1fc5cb9bcfb28aae1e4de3"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "52c7d3399a038004bea52d3ea9e91e2544c8652ab8f5285c9d3218637a6d9fcaf0d965b3588ee6d73fa599deca1f41ded8025bf7768e0e200e8cd3ff868c3800"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b629f57162876adb8fa9572eba4e1ecd75a6567308de90dbb8ffde77de8213a4d7f7cb85ae1b71e6457bc4e89c0d9de241b6b9f374b734194db2b26702d7cb7c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "722846ddacaa94fde6632a2dc7dc708bdf98311c9fb63c61e525fd4b0d87b6388b5af7042018ddca065e8a55bbfd68ee61fcd3c6878f5b09bcc27bed61dd93ed"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1ced6a0c789ddb295678ad43a322d896617fde275f138cccfb1326cd3f7609c2aaa5ec102697173e121ae163024f428c982835b4fa6da6d678aeb9ee106a3f6c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e869148c0545b3580e395afdc745cd243b6b5fe3b67e2943f6f8d9f24ffa40e881756e1c18d92f3ebe84559b57e2ee3a65d9ece04972b35d4c4ebe786c88da62"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f1011121314151617",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dada155e554232b16ecad931cb42e325b586dbf1cbd0ce381445166bd1bfa3324985e77c6f0d512a026e09d4861c3bb8529d7202eac1c0442744d37c7f5ab8af"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2d148c8e8f76faac6f7f01f2039ea02a42d9325794c2c7a00f83f4a7798afba993ff94911e098b001a0bdff4c85a2a6131e0cfe70f1d2e07af0209da7796091f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f10111213141516171819",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "99983a759ccf9cacae702dcbfcdf7204ddf0334bc65dad846f831f9f9d8a453f0d24935c4c657fff2ebbdbaf7bce6aacdbb8876f160459b1a4aac95697e00d98"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7e4a02126d7552f4c9b94d80e3cf7b897e0984e406f078135cf456c0d51e1391ff18a88f93122c832cac7d796a6b42519b1db4ead8f49840ceb552336b29de44"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d7e16fd159658ad7ee251e517dce5a29f46fd4b8d319db805fc25aa620350ff423ad8d0537cd2069432ebff29236f8c2a8a04d04b3b48c59a355fcc62d27f8ee"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0d4517d4f1d04730c6916918a04c9e90cca3ac1c63d645978a7f07039f9220647c25c04e85f6e2286d2e35460d0b2c1e25af9d3537ef33fd7fe51e2ba8764b36"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "56b72e5137c689b27366fb22c7c67544f6bce576194131c5bfab1cf93c2b51aaa303368aa844d58df0ee5d4e319fcd8effc602cee4351bd2f551430b9211e73c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f335cc22ffea5aa59cdfc8f50289cc92319b8b14408d7a5aa1232ae23aa1ea7f7748cfef032010f8626d9318edba98d416620335c901ed02eabd276a1b829c9d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a99a3d10f95b442ffff7c418fa949d4830869b0e60ec8b972c30a3169c27beb5cf330594f014b66b2200a7f086d2c2f3f9fd8532a5718876dfca661ba0f7b36d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "158e2570d084a4869d969343c010860717ff74116188175f2ed74cd578fa0d8091b03fad0c65cf59ab91dd73b37fe3f58a58e7b4479c875acd63ec525812353f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7c49501c5808b15c0d31bdd5bb5631d53ae00df431025fea51eb4762544efdee978a83508dea6bfd3b931a0e9583ccfc049ea84644705d319fdc5c163bf48224"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fef436b35f717d59aca17e9bf5ffda28f5f401943efe93eb580ffb98f13bea809469a344e782a443c64eb25ad09d8de205fee7d5639686a19e7c42b40f706a08"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4d47a67a5f8e17b722df9858aeb67b9956b45962ec353dc2e27f0f501c398e34397bebe02b54927e2d31f12ecf55e88269fab5370e7fa57035266f89d5c26441"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1b58dc7aac363b00446ea803bcd749c3f5cabeaaf223994c0c3ecc1b28477344d7bf97c08a959d1ac2060b47278986929188ad73de67078ba680963b9d3b12a4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3c522c843e6974ec750df220d41a004ac2adf09456fa787f7c6543ab17979c777b3e79d1787da5a83f178da9f04cf6f5b255ddcb1874841bbf7016e6132b998a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5a4feb8f7075b4dc9ca16c6f05cd6b7027485ffed9157d824d9d1a1720eeeeea3f6c125fda4ba4409d798049fd1882c690288f33547a3d8d6260b654548853d7"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021222324252627",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bcaa793632569e2f8417cc603253535bd7d85f38531992591e56c1a4b6f58ee7f818fae027888a86284305101ec04661f5995347a467ed8b9279f1acc2b4bb1f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "34af91cc22a69bcb55ddbf7f0f43ec564840433213ea55d9f81ac475208d74851db70fe496af9da1d393ecf878695dd33fd54349a6f824aeed183cb1b08c5485"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20212223242526272829",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b8b7ad2ea2b6fa06d00bcd599c9971c5b4e16558e15212c9bfd373e4bc7917052601ffdb6801be80ba509db82a0b7195929133ad539956065233f49d071c84e4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dcee9c45bc5d1fe630b18b063ce82c3857e30d20c64b5cc25884943e7ae94edff850eb0e8244023d3d07a8a00706f0582cc102b66c6dda86e8f2df325659886f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "04f6e822f17cc7a5946df80d958aef065d874916e103a6830c6e46b6055918180d1452293c58a9749cbc8f0ac408a9ca895761cfc451164641a179fb5cd8febc"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "511fdb7c88268535e97e4ed892f3c065832b265914fc6107a1d27dbb7d51c37e95981506c1147244d5bae90ee90d084984baa7587f41ff6f4ba722c8b92aeb99"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2ba2bd17e926275b0683b236bfe37630266e37f4182f53a98234e915ab64c95996c6cb7ae880c3dfcb47d05aadd21abf8e40b73f40f398dc5b02141457456a09"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9b668d9b4447e376f6c6cfa68dbc79198381ab605f55d5a7ef683bced46f9afd3685411a66e2346f960777d0c922712430e018bfae8653017ea20ecd5f1f956c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5681024f538588a01b2c8394cae873c6d85d6aa06eddb3a502096fc082bb89cb241531b315750d31bb0b630128d19d11392bcf4b3478d523d7d213e4750f5592"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2aa91ba6de6017f1930fc7d96dccd670748b7eb1d094dfb4b3b1478a612ebf03ddd721279a266de38845e612c93098c2efff34fe500617205b1de2fea1d80246"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "824d89c0637ce178b630684c729e26653f34eac7e90412e963d3f19d6451e825852167c48df7cc55b257b250a70c7bccfa9aa15c188ac4637a522289c0876ad4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "87e4ae11da1a2ca8822ae330dc97ab2e47ff62323093c2b7a6c0e2c16821cd7cec92184df4bb6e2b626a4478039063afeeb0d287f24219207898cce7ade0639c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dd7f2f44a402a01e8216b103a4e7235c2830319d56af639f23c48c2759aba6eb5eeee38c298ebe4198267a00eb2a08d93a503703171c77333862101055bd7ad2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4cb846596193f7f278aaaac5ccffd5357ab0d1245f6979d141a471bdab55e238b1aed67b73399504b97df1a25eb6fe272b5cd496a7c8a060926e7404fda0790d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6f44ecdae14e3b81a1912203015f5918eac6fbf4966010f49d2bc2bcefe7b1dfec5c835d7d87a44371f15a6c084252b93465264272a410d50f89a117f31af463"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1f705f6e9f070d87fde8e2774674fa9bf120d288eb0be7aa128dfb5d1011ce1fda99b255226665d83f634e8fcabda9a23c03515e9cfece6e94a8ec92e4edecb7"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2d96c5b01574722b817feb486c5fc98f5f8461f4cee9905af206d4723386d1c4c7cac5840028d7afed0e38ad139628eb6af92b4b88ebf09b1fa047fbe10bc31d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "65da780a0a37479dd8f4d65564f9a7089e4207eb16aca3f65531cfee7625ba1380a497b62472fc7e0007a6b035610416a5f82c1082fa065c46ddee4940d1fc46"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233343536373839",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1c09a3b380b8a7fc333fd2714df7129b44a46768bacf0a67a38a47b3ab31f51b0533c2aa2b4b7bbb6ae5edf3dcb0ecc1a283e843f2907b341f179afd8b67da90"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "67888b83faafbb622934b8d55963e186153e5951887c7f4a7635c798d9a58294be26a3c549c9fd5986abd19f401ee24eda3602042ad383357a317d38073b38ce"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b4f79963ca31bb62265dd929af7d51272fa6631de7fa35f7a6b03f9fcfdb8e3b5bace33591b7ec2cfab49c91a6db1ff8f6786d08f44e8062d2ff696a7d984142"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "408483697bb6f9d011a1f29a23c278a81d37578dcccf423bdf489337f182eab79a50b05f3d2ccc491337c7e41f30793bd27d7661c2e304c946a5a401af8d946f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "eeb5ade1ab97e7154343a46eb4cdd2a773f36301edc6a1bc1dd6480e08f58765cb938782923bc01f8e0c61c6be0dd1ab4c18cb15ed5210112405f1ea8f2e8c4e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "714ad185f1eec43f46b67e992d2d38bc3149e37da7b44748d4d14c161e0878020442149579a865d804b049cd0155ba983378757a1388301bdc0fae2ceaea07dd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "22b8249eaf722964ce424f71a74d038ff9b615fba5c7c22cb62797f5398224c3f072ebc1dacba32fc6f66360b3e1658d0fa0da1ed1c1da662a2037da823a3383"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b8e903e691b992782528f8db964d08e3baafbd08ba60c72aec0c28ec6bfeca4b2ec4c46f22bf621a5d74f75c0d29693e56c5c584f4399e942f3bd8d38613e639"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d5b466ff1fd68cfa8edf0b6802448f302dccdaf56628786b9da0f662fda690266bd40ab6f0bec043f10128b33d05db82d4ab268a4f91ac4286795fc0f7cb485c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0a1e8c0a8c48b84b71ba0fe56fa056098ca692e92f276e85b33826cd7875fcf88385131b43df74532eaa86cf171f5076e6d17b1c75fba1db001b6e66977cb8d7"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "65aa1799143693abd9cb218d9b5ec60c0eddb067e6a32f76796010acb11ad0136ce49f976e74f895042f7cbf13fb73d19dc889d7e903469deb33731f2406b663"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "deb712b9cc64f58814860b51fa89ad8a926a6908c796de557f90cfadb0c62c07872f33fe184e5e212a3c5c37317418446efd95613f618a35f7d2789efe0d9660"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b42f4a40b3c88bcecfe328c846bf0648a16990ca539195c0c1dc8d70308067685af677ad65ac0c7a9bcfa8f7acc0aacf45ca18ac831fed644ec3d9283101ffef"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "edcf6c81ccf16e11ddf719a33dd0e5349cabac5cfae597009840e1c39362c0f11982fe2c2765859a94262da28dd3373d522693897511eba5e07b8bc6b6064dc0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f4041424344454647",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "46b962d2283694d27975dcbf32564c9b04032b30a93e058fb77b2b718b4ad5fb789ab7d7aa90852da2bfb6b393b09f98e869b16e410e7de230b179f62eb57471"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "29036c3f5382e35de7a69fa7a63ec7bdcbc4e0cc5a7b6414cf44bf9a8383efb59723506f0d51ad50ac1eacf704308e8aecb966f6ac941db1cde4b59e84c1ebba"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f40414243444546474849",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "173f8ab8933eb07cc5fd6e4bcebae1ff35c7879b938a5a1579ea02f383324886c70ed9109de1690b8ee801bc959b21d38117ebb84ab56f88f8a37262002dd98e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c6afa6a191931fd45c3badba726e68a9bc7388c8cf37adec7c64561cf481fd259a646c8bd843e7709e11e64dcfd5dfffed79235c689b4200fe7ac8dfdaddece0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a6dccd8c19266488bf77b9f24b9143def1fed61d0c60b5000a523f450da23d74e4e3f6ef04090d1066b6ace85abc0f030173f52817727c4e40432dd34c6ef9f0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "aaf8908d546e4f1e314c00e9d2e8855cb256445aae3eca44238322aec74034a1458a293675dad949408de5554f22d73454f3f0709cbccc85cb053a6f503891a1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "525f4aab9c327d2a6a3c9df81fb7be97ee03e3f7ce33211c47788acd134640dd90ad74992d3dd6ac806350f3babc7fe198a61db32d4ad1d6569ae8413104dea4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2daccd88719d0a00b52c6eb79e1ca8b4a1b4b44ffa20889f2363ef5c0d737f1f81f50da1caac231d6fcb48895e7299b77af81f0aa4a7618ad24b7aafc8e3a2be"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7d286f1f721ec2d2115ef4ccd82858a4d512211355d4fc58e534bfa59c2e1bf552a96dc4b3e46b012865da88134cf04e731b1930759e158ff620b6ec5aafd012"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "21826b9529c4bc519147f5f9fe6db878345215e5094f4e99b131ed54e24953cee9adb718d1743e6c27fc94516a9922fb975a7816b8aab02112608c032bf138e3"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c1689c698ab065f62eee65ddca676baa45b52f308afa804ab4aa6ab84b7ac1aa1dff07175610b12ae11f27b7c430afd57556bd181d02832cd8d0a5fdc3020124"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a1a6281747e34d3ede5e933401747ca7f76628b614c8a394f502562bfee0b994ecb65fbfe1ff7067dcb01d02a92ba462207587cef7dc2cfdb4584848ad55914a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0070a0190aa696572d853f1d24ab630848ac56ad5c2ebfcfde27d111cd55939c1e4d07872dde7ce78b534b530f0a396e86af9d575354b5d7e34acde18cc767ae"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "51b9b5ed193fd4b1a3a92b46bd4bd1f6ec6b38a60f2d0261d72abfd16436128dcbf22c25e3e3c43fe4d29db9124d033330184592d20c5b082c23206454cb3dd7"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "578f242746914e36d0d9d4809689571216a43e4733323951620f5ee78ccfee919bf55f287b45a73d4485ac7422879239653b0591c36c866941f8affe4ae56e9e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "947130ef0b948ee04581aba3e2cc4cefc38ccedc861792b7b5dcd9d9361c724a122003bf796ce0979800adabc7456f173ae5269315afc01b606db29c7550e8ca"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f5051525354555657",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c852e677f77b14b585bd102a0f144243059dabec7cb01ffa61df19fce8ab436bf5e2d5c79aa2d7b677f6c375e9343d342e4ff4e3ab001bc7988c3c7a83ccb69f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "01197526917ac2c7bc539519e68bb2798135f6033ed58f5c451e0ce946aff0f98dfdd15101731ac166126eafb5e7cbe2e272ee233f34e5f3f8ea3d2d122482fb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f50515253545556575859",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "059c9085895eb718304e2dda78686bd95749815a5ee902510b009af69248b6a7a72ff8a628d81773e11d5a1e7f697a449b7a1e2712d5cfae7ab26507d1112918"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "295243bd758cf21c803125fcf321de5f97987c8db3bb3cb51ff97c4cdac9d3bf0a67cee7ed350a41fde6abcc254fbc9f8e6b3e3ccecbd0e4a640a20f362ba3a0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dd8232d2412cceecb5123191f6e9221e851ecce0faebf0505f2aeeff8a8c92d41dacf177bdae27763ea4a86205ef7634f7a687cc44bbbbdeee5e11e65f9fbd69"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b046b683716d31c914c70b10f7646da31efab2236347459cf8fa2c09123431f72807f11d867c3770b1f061d56ca0e5b1e88a6b44a33cf93e18bcc9cebba5ade7"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "20e5a255058be51e1a629b4ebf81e5cbe0781cb67ca4e57ba86b308896bce73820eb08431ce8c9bc5810cc8d8b9c9d6fcf834e42ea33ef73cec47d713b6d8dfd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1e4804f9c0b1e82b9ed363bde44728acf7d090a1bfe2ddf8819d6592ef453b835bd2efe8b0206e29255b07fb90c7d30d2c114800b86cb0e3e07d387e98ce9537"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "41c953d8d22a86c3634df422b6de4a4f149666be8c4f581b2623ee65c392a5c32836639ef56b93686220f45ce65b4fa8589c9125641790b6925faad948b8be04"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8bfca4c8dfe3fde4257b75c3db01862ed31167de66c2e03a2556c4f46c9dffc1ac45f7bc59a67ab93624beb86ddd0d02603f0dcd0364f0f808819be96cd8d3b6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f6bf59d8d45a557111a236cbba52619ae3dfcc4316943843afd1281b28214a4a5e851ef8c54f505e3c4b600effbebb3eac17087f2227581263f17d7e5f68ea83"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1bc9ede4d41a4df6e8e6f47c2f4ad87337b69b19f710f766e1faf5aa05a43b6645396e7fbef43bb7795d39407b5815b92ecc23a6c1241421153a55d51f12bfd8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "76b38b3631555dbcfb21218ff9e412a229889ef2ce8ad705e90f96aabbd5be7e5329a426534c815a5653771318726641424e3b88292fb1d89544406ade9bccb5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e53f600740224e4d10d31d2438003143afdb436eb1791b150de35676f0e32f80b0b65f0acf481a5fbf9596c0cb0a27c7afc11d1e2c4d5402475e4ffcc1cda811"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6206b91fc0b6f1211e9fdecdc9d51a6f1eee6554b138adcd4a823df00ddef6759a9bfd7a4e981e045236838f4af693f69377931484b3e81e3e3bc2cb7ef79fe9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "76fd02dadd963bc035399146ce42988cc099d3cf4d32df5c0bbf64101246b1c708d167e29595d11d09b3f63486b40526ac1dfe31bc22dec70b745e90e2eaaf5a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f6061626364656667",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f0a1fbe31163e421015072183d68ee5191a99cfda169ba5a1954c9f3107d4eca063e137a7114d397c9db672b9f478d41c34e991b0669a951539290c8ed65e46a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "13c72a6aa571b143dccf45adcd98eae699a154b110f25e7e9e82b765b9a08923688e8e0ff311a68a771e145096d60776c6d6ee70ad6f69fa2b7677634055a00e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f60616263646566676869",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0e062bfe818ee10f33481dea43028b2cfbb49ec95e0f75a9e16d404bc519b9ad50b4a733692ca54efb680469ed83ddefbdddb139042e0e1c09c3eb7903fa08df"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "453be4aab9f423b33652a0b5d02a9af855dd0d42dd83110ba3bc4b3994ea3f885a71308975089b4903e2e4d6ba6dc2e84031ffe9c8563975c8616aca0742e829"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5361e3e893dd360bcbf51c793ec092a6b052054f5f000b9fce507b6645f8d47013a8706a58d4b10629cc82b8d2d796fdd37b608a587952d6553e01d1af0e04b8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "74b56739f01f8209a40444df4ccdeeea8f97e8e76efa3c04337f69945c4d44c085f1f4789696361e3c97774a935f860d674686dcba3d45ecd8639a64aea0621b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b4d31587b92b5361cdc2d3c41086c1553e7b55a1f61e94d2bc30bc251daf8a5ebfc50709cc04cbaf4b3b4da2d26b81238fba718fa91759b80bd3103aec11e06f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "aaf6127f00a03d96406b9fb4ac70160db522429b5cd94e7fa0303a749478fe3189c8ea23930a66252a802674dcaf770046820dd964c66f0f54751a72f97d9c35"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2c30d48df9984e02f75a94549217184dd02aad3b57683d09b5a8c2ef53a96afb73feb6f914e2d815bb3b08654332fcfe79f80ec5f051da10d721413ddde8fa60"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "92e2c5f75d0ceafc818fa7935939e48b915941ef734d75270eb321ba2080ef6d255e90ef96c64cff1d8c18f33c2eab107fef53e0d8bb160516807480fcba5373"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6e03a91e20444627e3d2e22226cf470026694434ed6479828cb6dc8f27960aeee2f4ab872a5ca2f7f652f7dc77d5f96d85828b8f9c2d6c239e797724a13131b1"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ba432db0a331bb8c39b17bee34462b26ddb7ad91b6c75aec2765fbae3a0e60ec546d45f8e58437b9d77c3d2e8d7ce06973156651d408222aa290cb58cabc0ae5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "83a01e23ab277b1fc28cd8bb8da7e94c70f1dee32d1955cee250ee58419a1fee10a8991797ce3d209380ca9f989339e2d8a81c67d737d8288c7fae4602834a8b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0ea32172cc191dfc131cd88aa03ff4185c0bfa7b19111219eecb45b0ff604d3edb00550abba111522b77ae61c9a8d6e94fca9d96c38d6b7cce2752f0d0c37e78"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "54add6552b08858b23d6645f6ce79e92f38b66ae918677e6d91f7187c4160524dfa8d01f00ea93dd299f3cc40901bd3327a0f18ccd7b6b8e4e47cd28cf838fab"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ef84746dc20156b66ba5c78a50830abd2aef90e667b97eb52291bc869d8aa24559a142c68fea2ef32af22dfcea4c90b3d4908cc9ea5cfc4e91bf11ce6a7e5761"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f7071727374757677",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5a1bf381a04119f942e463aba2b1643882468aecc1b1aa1e7bcaab3b478fc5f056f10da9037d40fa7f55708e103bda965e920cf67ce3adf7e200e861014decc6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "acf78aa3284596f330b7e84751b94c314cd8363627ba997881308578873759895d13dfffa5e574501361f043c74f57d2d0f15c7a41c7c45e3c09ad89d699a977"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f70717273747576777879",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "18b3e9043844d4f3a2d021f54c38facc364f84ba1058f21009fc371d2e4f38c727518aaba6a29e0fdae6e760a4f1a6d758ebe42c2afc9d2cdc6dd580778c4b32"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1896b2317033cf31046873d87f26e6a42a9d770bbaf6e062df11f9b4a0eab275aab12caac2d3f529eb20d070fd844d86d0a571cdf6285f80e2308bb82c6c5b3b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8c3dc40194aa021f3c4a1f9a055e4d419eb3a26d4c2f1a8c7e188b7348134080b63f6e570ad11c2878665355419c1020de4b655e7a6c2ccde9072cd427fe8c4e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "70ae0430d545ec427f8541211d4fe042b9823acec04b15c90b7f4b8bdd3dc7851990f370e7141675106649d39151090318231e4ded51225d9a6fa6c424695de2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "07336c42bd51490ef84dfbdfab7466f6b63999a5c08872dfeda0206fda80b9a62de728e3e3c3fd6b7d21a438aad1b8dd223863c0d26aca27790174d9d442a64c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7926708859e6e2ab68f604da69a9fb5087bb33f4e8d895730e301ab2d7df748b67df0b6b8622e52dd57d8d3ad87d5820d4ecfd24178b2d2b78d64f4fbd387582"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9280f4d1157032ab315c100d636283fbf4fba2fbad0f8bc020721d76bc1c8973ced28871cc907dab60e59756987b0e0f867fa2fe9d9041f2c9618074e44fe5e9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5530c2d59f144872e987e4e258a7d8c38ce844e2cc2eed940ffc683b498815e53adb1faaf568946122805ac3b8e2fed435fed6162e76f564e586ba464424e885"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "da850a2f54e9448917d0dcaa63937b95a4da1eac8af4ddf2113e5c8b0d4db2669af3c2acb0803d05323f3ec55abd33bdf9b2be890ee79e7f3fce4e198696a7a3"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f16095dd9f1eeb77d5b92f4b1fac3a2c5da6ae5d0ab3f254e2a7fe52672411d01cfa6ac05bf39ef65f4b22264b41c3f363563abf0e924290c1c680b18aa65b44"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "76d00a09c5bdd39ed32871722cfa0047674bec8d35175af90d7ae9107440a2a0638856d8384c817d772a4a597a895549c84866375631cba042f0ef6ffeb89d44"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a651137b2c47fb7951e7bda71543a6ebc6242acab4347d388be8350f0c3fa3df8d952c7c8a3daf01e06c1da69496bba8de62d86b5093256f77a187b53db03988"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f32f150c2d67c0c437401b70f60b38f0a3a47059033e7505e69a1d301296030bc9b29519c7f8b7d59a71fab90557dc3dc823fac95b9e85e652528cbfb01b1178"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2702566136c492f41089b060108460fa3022c9c25d343bcbd8af2af19c17ef4ca9f2224fe7c4700a10198ee5248f300b548ebf5c8e7116320cc893ff7e231ffb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f8081828384858687",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ffe6879f46b6292b2196972e3fdf4fe9ea4a816d1807a31caead6aac5f063c8fe877797559a759a00f8ba8f668d8968fb31d8a3b845735902c5e42e289ee0b62"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "144884286822c2512d61b046e674d86b264e9cc6893eff36731124f59d1a82001e63f3e8051cfe52e7597e28738e3c3a70f1bed9680e2c0ef3728b10a56ed987"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f80818283848586878889",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "17c3f146ee8dec3bafcb51c0da37f17871f234c4a0fb7fa6d0707a543e3cbf3adb81e30c1e0ae9e1ace7223bda99bd5919a3cfcc92c6a755e456f093823bd33e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1b837af233a8a68be70952f783c4961a8152d1e0b0fa325ff086ea5b5f1312b89c42e01b8c3a477cb540c06b2f37ee0e3924d745b4ff5c6af7d61e0e37ac1931"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7897880c1eb00fd2567ae8a59e6482afe17349cf93924a915f8c592693d452075519689dfcd293e376897b3b0e036f114fe81ebcb3153671bd23bc2bed46f9c2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ca7b6c775d201e5b5a772261de528e475f4bde517660529f41beeb1578b24bcb94b9410f9bf336c109f9d47093a10ba6debe504380d9d15073bdd111c8d129fa"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5718e0d45debc3002d52b22c527329ae5ebf27e8fa9c8feab46c40bc6422ca0335304cf9e7f141de7fa6adb6789bdbf38d14daba3e6297d25bf17de170d6e3c8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "48d0ed249f902841997c255daf99089c9a3124698b164a3028330fdd4cee41e1683fa4d9dc66b2a79c8aa4c8284e27bee2a428a6719d6ec655ed769dcb624e24"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "794e0b64ace1fe5ae379937068d82df04868616cae0c17d30572c2024e774894e0668c472d623c903cc5885f1784945110329eb498a895a9e59a75e527158a5c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2179aa820e03fa33d9bde5568c262e2d3417a402e07a591f9d5570682db5f9bba4bb9d5a82ee5efdb4f65bbbfeee2f4ab9e46cf2ce7e3b054327a718d3f10806"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b0a48c6ada548725799b5986bab4326979609224d897184b8997104e0c6a24b3abe562165422a45d8ac819b99d3756ebbb64f843e3e0934dec487aed12137279"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "848d7f2ead41291d0538680c649d07897e45c70a0aa4f9353f82c3f6fbb8e8489c753e90dbe8890041a1aeef84cd3136434f530e9dd9c23fa54fe124eafb72ad"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0ed14626ee6d0c8ed3f0c200c129850fff76318fffa1ddd7dd563a01b7779706862b239959b615ae2ebe27c45037e6ffaf9914da8ff2772ba5ee0811cd9ed532"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5203c07638c4b65f78431e8b02e20f6d683f19fa8f83b5134cd0f4e468c97eacb5267c7d3eab583ccaacd0dba4d58ace52193a5178a7b12d2795f5fde8a37bb9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "48be43d5e0043688df3532f7121afffa167dabe4a484fb75a03af304a5c6f825f36ceccbbbc075eef320c4cd8d7ef8cb49e6dd5973379eec4c233c4543d132ce"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b5464e6abaf5d3d4083d1d7d2a8b0bab78b61709500bbf77823f602d57d513ca9e9fff65efaa899cfe7bf88a0188829c24e498ad00235abe8eefa719fa6ae6f6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f9091929394959697",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "afe5e5e83f19adad9e95903ea9b298107d37dd38632c9590bbffc624d4de958cb6b61af080f037ad17d035b6bf58f780fadf70f3c959668a1b472198a59a8a00"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "efa2c7c802e210d2d80fb350b3c2cb3156131811e718eee5c9c6640f87682a55812b10f40310baa7b82b273ef3acc55fede0b5f1949de4293d91b589a2175ff7"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f90919293949596979899",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d6c62a618271f3bcbe007924a0c9812f8317445fb6fb19eb589a629f512fb38a0b4e247dea88c56a1baf17883365b436f28446ff66ea43180bd01eb5a6509bd5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0b41166be62f65e193b3b865e6c47aad260af5fceec9ab44abaa460a0c0246b6c69b67d71d3adfec60dc8e77372f094952344fe10c0d59efec0e11c4a516936d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "79d5f9ffc05ecf337de9f1e0f1d89b30acfebbb88a6935867818cd8d45da3d2518de61a7fe28751b618f7a875e11898fff74157ab90681bd53fa6962671ed99d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bea983d76f24b1eede1d06714805768faaad4708c9a4ff9cd2422f706b6f0c306d8b67f34089c65ed3880c75f67bbc4d89ad87120a77d0ffe436fb7b58b2ca41"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "466fd915efd950bc966578cd92c685929d7b51a63db142c7b9a93d16520495319b87f658e6afda1b42773e2d49da814594a5549089efb1f3ab5f1590ca0a02af"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f64611137ad2954670eaecd626d212cfc5b9f6bb41aaebb1d71e89792eb1317aedc63813fe63de401798df756ca1f22035a0fabd37fb1103437f891ead5e6429"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "32e1f938a27faad8ac4a13fd4f6a8bf3dabe4bc72af11c8f0e1a06567ed704b8e78e1140a0c7724e3efb70d23807cf38e627e326afc164cded52b44139ffb3f3"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4833ac92e302ac2b67b02b8827143bada15ced220e1d1f5b71120c51ee54c19d301f2960bdb5a2ce27d441d14af080cb010a8a23eeff5811dfa44d1d7b358b48"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9a0388cee1ad0146177c48b5a08a2db3c489e84ce2aba8c645112a021e411cf829127fa2f1d1ae1baf3a33ea53098477a7d12ba748d2af24d16602e919077623"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e3df0074a93735130d9922d2be916f35343d988ce59d769715a983b4ba807ce1ee70a313e59231584f556ebba1b90b1bb6a6c581a4b47c3ff52189652aab36f5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9191cf461b6959bec93eae7fb1c6e37073d1a61527ad75d10b7f8949d9b8af70a23ad1312ed51f70f0e9df601ddae238906c0fe3f766b14f113b26bc8542d1d2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2a8bade272ee7ac643c5e37147faac92c3970bd3862f531e5dcea5ceacd1837453aa498d785b4d1f89e1b2a739ca4a384987302746b4f113424302c4a1e0f9df"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "323e6793c7dd9b4d7bb7fbf21531d37f7264532c58f1225548d06e6940c63e91270990e7f5643203c987647e5cf66103e79b714c581bd8772e19d0f005dc8633"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f922076d295d23e2985830aad2f23f652f7f4db42c119ed220a5451488a453f59fa8a2de2303000d6bfd8c4823a85fadb4fb8e7eac122bf01247d76f65247d45"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dc40009560959291558ebe072064ce6712c921b5409b44e04f9a565eeadd39a7716e21b46dd8616517a21a0c03419e94db820a353f152d108384be9470093f89"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7fa4be91ca5207ff087de92f1db09bf71a67878bed193a5c2cc4e35323b8df99a26ecb9888d7b34a739d641a0ecd0a6647a6a06426f3cc1fefdf9069922fae4c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bad3cd75905d7bfda3322b44a7d3588714d333ee86855a872747e704f6119484bdb7d077fa08edc4a79de0f43fca8d436e8a100857f59bc7b055b987f97ac6b9"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aa",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b7dee8e8339db297fdaa3ca5c1dc1988d97f5fb6208c64dea95e1c78f337ce20a2b4df17a7b8236a90d6286733163572c867d93de89ef62fa05dab707ec3a770"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaab",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a0f7e93cf32502b9fd79ec20546207f331c5299ecef350d66ea855c87fbddf18e691c20d045a308f83f6cb8fca69d7e2b39b34d2f877276c196bf514bac60270"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabac",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6f5093cfc88300bf688e884b4c5ec2c31a8cc28d6331ad7ca71d9760216482052815d44fc69e18a8dc8bd71b31f2b589a7c0780b6199385f8dae6c9b7974c4cb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacad",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3cff46ac3546f65ad7a720871afa20a9216dda5c45188156a5bbedf21546d4bb3940b21a41a39403e3cfd5e7a0e7904da95f4d8e0c5bf5b70eb029556efd497e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadae",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "af668a805e6d704b1e581f1e8e3c00cf4cf3e546147c406d17ca974d19a014c78b44e72ddeeb652607e86d690259dcab0dda81c77c7ee2721e82bbb13943071d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "79ddeb5c54ded1e4484071c46bb42802d23b3a08c12311be363c7c7a025a1764c8d85069fda8d517777d8dd809e3d4a956041a7079f9167b0fe9712e5f1229f5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "998e82f4263d53aedac939ebb6eb8b1969746cb815bd721f17a48bee9ecff2fe598c539c419a60e0d5a04f1cb523a2fd0538bb178e44758d3159ab9e028401a3"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3396cfd5cde14aec1aaed3e12252cfd6e342ed255e8e9e1be10f1f273877f3633381e3c961e67ec41e8f9e16110fc03dde88bfc096fc1514461d70d0bece0af6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "777d9dc55a2f57a46ea06a2f4cb9760d00d7a862d0a2aa19467b570f7c7d5ea7629a95eb200e1f9db06610cf8e30d5e6ad0a7b632977fc21bb178967f3b0e09b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "32ee357fc91636a855ba01a0b8da6f3553b1d520adcfe8fe9debccb26c5c4ce8505bb1efb5ed5baa4c5245b50d74463f0767b2c783c47a93b0fda66895693ce6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "340c0a7ce496febda13fa2407a21dc19839bedae1a086ad0fed3917df9bf40944a787f641e90ddbae03a9337723e51668fb893772c0fbdb3eb7ef790dfcbb9ab"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d86a5baa3365abd8f442cd6ebb93113819f0b46061e13404efaa1a58e1ff272ad4bfd30815add88ad98fce9af018374ca60d89790f71a6075f3d68d32021a9eb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a67e6ec657c95eab3c3c32e41fbf39cf2033ab4be2e2b821104adbe69d16e948dce4c4c6a3cf2276901f7d4ffd69654649882c014d2c10a1302b79c61569cd36"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "55ce192ae4b3eaf855590e2d44e625d9ba146eb75048e6b56e025031efba0bda8aaafa0470b7ac3d406e5aba3e832f27a507246d1b5f33dea1f724e2b81b0c98"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b3a20c1fb0b4f0d37726c23b5877dd8e72f69886e09a8c68cfc301d2a3f2f95cefcfabb8889903c732f4e81432d3f678ccdfc398acd8a2f06641100450d89f32"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f7272d93c7012d38b27f0c9ae2017958bba666a9de1e8812e97437aeb2e03c999438f0be333d09addbcfaac7aa73f7b6ccec67dc077998dedb8c1332bac0fba8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9ba",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1fe7b3de34c0479ca8405f3cbcd2db64bb18dbb291a5feaa16c5228c93ee21c711d68a010c2ae88005ebac959e3a322452f862dde94bb941813e524d2347feee"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4ee1d38805c32284ecebe92e3df6cd98c7d6680eab0d68664f96706c45633b1e268222aa5a5279ef01fc285432abeed74ba3df189f50a989d58e7130622daa59"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0e1405871c87a5ea408342f39d3494f939f73c2260c2a43a5c9f1b57330cca4093fc1f42f96d83005677037db51aef26f05438057ae79ed14464fd8e57d15586"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "17c5cab4091073621b5c24c336316d0cf649ba1effebfc87e0439cdf578887b221656d339a6fd198abaee67ea188dd66567823fc220c52b57490251469d25d8c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "57dc2797d142681c94fe488626986ed4b26703cbf6bfe59391643657065b2d46e4b1ddb3aa832c9bd449755ac8b1bf936897fbc6ade378f2bd6493e486f42029"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4412dd6bed6db2a803c2e0df8f5829e7a4b0417889510df7dfee49574a71ec0d9e0d46065017c72dd9743933ca839a768dd15ab0b7c14c626a354109690196ae"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d0ebc771031b7c160021c9b6fbb2b670e3b40270026907a39163db1873ecc3b800111dd7bf138f83a610dc046da268b72b8c9086922377dbed73948243ca1e14"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "10c4ba315591698dfb91a57337631884b4738d9f59807851a679840cc287ace3011ccdc8f4a485bb1973404ef9ee9b9cf1eadbc54074c6d113de8fc91d0797eb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1464347be32c7959172b7472d11fe07844a52e2d3b2d058cc6bcc0a8a275d6b82b2d6263755eaf2a6588b6a1eb799af83a4ce753f8c75a2284d0285bab5f7c1c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f409231ed187f5c4e833fa9e3042aca6c858b08b496b2531f84fd5cea93ecd06dafe0a10c3ff2376c74dc80da07da01864fbf2685960b540b3a2e942cb8d909f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "395132c580c355b5b0e235336c8dc1085e595964043d389e081efe485ba4c63772db8d7e0f186c50982e1223ea785adc740b0cf218707458b8b8034042f923c2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f92abaca213229660649ef2d8f88115b5bed8ab5b9bca9a1b4c52457035310c41a6bea2b23b7918b5b8bf38b52eac6ff3b6213a522f381be7ff0906dba7bd00c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cbade7ad3b5dee0ff1a46b082cf4e1e1dc21620dd2cc0edc2c707a2162d2149969abbb29c5720b04bd1568a9556195e67f24322dd9aa4e8365191aa5b6c44579"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f51b4ae4d4c54a29cf7135a8fe1eabd5e1bcbf820896967dc41e3849dac22507694210ca11c4ebf1c29a8d4f71b30f76c9b6010ad95bdfb0de837925f0612597"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ce3872115d833b3456ca942e6e385f28a903beabfb753f8afccc12f2582ce1f36212bd05e05a46fc88d31950b4911ae5dcd8ff7a0b50474cb488ccf2a89cd0eb"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9bb74cbd47a624cbeafcc16d462947bbea1370b85c961a407df9863e54e6d9e6a8d2ef0c6497205e5eb7c3e59e698d992463ca9dd4cf28cf9a2d4e30c133e855"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9ca",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "729633820bf013d9d2bd373ccac7bc9f3716f69e16a44e949c7a9a93dca126bb1aa54e5e7040707f02876afd020af472639d49f5420d294c3aa31d067e3e8575"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "06861db307c678086e8b2aecdf1829d2883d28b731abd0f1e72f1ced6c7ad4172eca6322a83fb6a65afa37e94a3e2ba205b87bf382d91588497a4650883bd875"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "356eceaf1702b370f4aab8ea828486f33013f744b39e7ea26c6918d60e1abcf44fb16edca7720acfc6a701bf1e2c35ddbd695a8d408e8c9632e8cd27230cad8d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "489a39d0fc3cdeaf42892ed80385c11ce293c932215bb23188692a86e61bcad92c2a1d1142601b1bdf0982d1cd1e05c052de819e64f247db35915dd1db79a3b5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdce",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c02f464b4dd18117e30a8db8ef1da067134b604efa1951767ee632dc024d64c00f2449f042db3aea0174ebcdbb4ff59dae754f723946f1b90a77fd9523690b7b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fb31e6ddb86dbff372646d1e3a3f31dd61159fc393658c2ee957103bf2116bdef82c33e869f3c83ac3c2f6380cf692f7b1dcbae0bb227ad347e754137466c69f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "006062abe16c2fe79af88085e0b582b106e7f79f01a43946c78b19f9bdd725997636a332eb9a3aaa6de0d4a8e9e28e8c778774224c665bf7bc3644fce411228c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d44a6db3de9fd4e4a7ef155a01bccb91c1bcf1cb53225689a77a0d23b4d39a89a189f28980f91c56eac5879eae933ced7f267e2f7040eb380fdbbf34a6b7b615"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5afbfea1deda5aeab92e4d0c31d16a9a86bf7c7523274a05c50529f5c139db10933a52c6229cd31108f083fb0c85cf52831b5a05f2550a77b5703cc668912dbc"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d17fcad4e0d8bde2edfda168ba47104bbca4d26da2d31a070b0fba0b26eedd95eec1fc34d76cd4a1cb15f2621688a9cc0e96358de993222bb3e3cd0bfdcb746c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bd6a59216337b45d6b71aeac01366bfe9660e0fbc2959adbb68d526c43d48ffffe2ffc430588e78e66546a3c709b0acea17cbc5a218c53cd47aa4871c1dd984a"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "83ea5ae1891145c41a7c6c87fe922487f5d282933569b7ae0e345653381ede6d4b16e144d1c3e8f0605daa0db5965a7b79d91a8afe11f1e0bc549ac074a01ab7"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "375050cf2e430d0e29875835208e8906d7052e47292c5a38a63082873d31d583135c07a20c52d95b2d5dc3eade6be143ca3438f44d020aae160ed77ab9884f7d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3028b0e824957ff3b305e97ff592aa8ef29b3bec1dc47b76133d103ffe3871bf0512a231afcb1df86597ec5e46e923c8b985c2850857c64001b2c551ea833d0e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "087ccb1e5bd17222b8af206dd63908f8917297621a8cb9330ae0ba4af3e9d60c98fcf1effcec20136b4f9188126dfa044e1c1ccda3ced87373d9379ccbedbdb3"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7f17062498bfa2bb5856cd0a62c568c5c6b897432474efb2e6a2ee18caffd21e1ef30d064723850f7990d21ba34e8f2b3bb067023a772782158a27c6c467c928"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9da",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6ba986a942497fd38462972f50a61968c0652dac56ce9b9ac1bc061ab634fe5a77acd0275f8396e3c0bef012ae93b72758b8d7679c87e847e63017b55a69c5c6"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "967c81f561951833fa566f6b36077eadb2a615cc15f0edbbae4f844ddc8e9c1fb83d31a93fcb1774d740d69208ca5930bcfac4a1f944469fefd19b6e9375e0b5"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e8aef178e6da3ef5caed6530f7eb25608256c2377c4cf96b0cfd0d76eeb4bb86eeff7b7df1585c8d7a20c0633a67907f6d2867c3264a91c051abae6eea5a91d8"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6481dcc8157ae628b5cd526bac8f933156dedac956a2b22a974bf5f7ec2db5806f53dd0e2dd53db87cd8f58a586f9b3c5c522331a31174c4e7b9b6f7f057c28f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcddde",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a71ea45ce6616a3d2f0a592d5d0286932da63c6db11d59c6691c35a56f7ee4f80b6fc340b4dbc1844c5040e668d2892f4a4ae8533f1b6771bcfce7c3a23e0d97"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9693448770feae421726eb203b01c70823d5f44cc5213e6a68284729bd117d9bd18fec4a0a824a24080f298bacd296d7b497838fbd7b0d575c52492b3e6f926b"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "37a15066f2b9f94c24611bc453ed0274078d1f70b2d34c8b963608489dcbe8df448edd9c73362bb2b66beef61fce60106f7019ed373c692259d9556a940b1a06"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bd44e739e1f9db1c6baf42ca4a12ac099b96f6b36c4bcb1b72eeff08a6496835ec65150be8fe16cbe32707e347547dc5a583d265746fa595c5e7730fcf24581e"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fab2038e9498a1c39e0578a0a5ea6b44f3c1b41ae567f9914a95b131c48d121ecacea895a09b1d4e0442bec9c50c50e00a9fafeffae070884c2625a8b1a21726"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "05a1b76b2fd56211e0f2d75a251654a772f55e18ca022af52cb330191e98a3b8eb87e5117bae58044d944c1f1885451225417735fc72f73936693cff45469f8c"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2a30c96bdac78a3994eecaa5a53f827f58e13231a0d113086c06b1bdabda38d08f1ae27de25fd22eea70c05f0132bf7a501c82ae6215bfef3c016398baf2cb62"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "48db53765b82bd6f2533eae17f6769d7a4e3b24374601cdd8ec0ca3aab3093fd2b992438460baf8da58fb9a89b2c58f968e63617cbeb1844b02d6a27c5b4ad41"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5c8b2e0e1b5c8f457d7f7bd9f05a97e58dda1d28db9f34d1ce732528f968bedd9e1cc9352d0a5df6672928bdd3ea6f5cb06077cf3ad3a76e29b22e82bac67b61"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5b7391aa52f276fab9c13877f12232708497fc028faa1732a5db079e7fe073ed0cc9529cfc863a4ecba4dc2f1ea9f6bd6904f3a0c107193c5e711cb911f38025"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1d5af70f09a5fc6916ef59a38a86926dcaae39a8954d73fc80a350751adda38c9d597506dc05e1ed37bd2db1590f99aa296aea13ab8443d5a92347fb85fc816d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "80e3709297d44114b9fbdf5567f05f330094cf09f4c0efcfac05095c3608107730c1aa07ff23002562c7e841a9f56624ffe2abec611eb9e73e1ccbd8f62b1149"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9ea",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f9945c190677846194132b496ec6012c08750e025fd552ed324d3a49d86366c03dccde8d5b5ac9a4bcb7195e63bcaa939e8eda18f11694b6fa6937393bffdbf4"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaeb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8d8f2ed9ae39809aacad2fcedbd2dca730c783e62ff70b8d3c5362f073f83467197d3756b445195fe752117364d92cf42c026e409d5ff7a9533eab78f1754a2d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebec",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3ac99ac53ac49a56faa18646b8e08a2d35be80df3efbbba6bda4ae902b8d3e170a7be8605c34a4dc9a7362b1c201d702391bd7d5207f95fa390ce33c4314d411"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebeced",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e4694bdb31016f25532c043c5c6308cc619b0f8716f0c29eeb9f340f47b07b4a4ce0984c4724b12ab3d32af516ada2644ca6558c1cb5815c1212a9b5fa834412"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedee",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c63c703e62108aa0edc683f3678a00788fb100c0960b4e98b76a48e4e5923d3413448db8875e3bcea7b6b85d9e3eeab72cd15096fbbb2cc4270317fc34d40471"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeef",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9080b7e841ef519c5417e690aaf4327907a83dbcb738d0f7308b1d611def169a4f47423e690f27a7e2741ae7865da23c5d3f13c316063c7aa1a958e5be838f04"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "298df646915f04d665e9675e6a1031870d28eb7a0405663eac3b10d1b4fa2e868e6373a586cd73e06d8e7ad771b4fb0a8b4fc2dc6ce09c642ee89926fdc65260"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4f2de9c4f4348bdb323a668372e7714299c776f9602f3af8fb7746f176868df3542b2fa69eae38b6a26a06ca8942f88278c64e3d017fee67a94ea023b2b5be5f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4018c5ee9093a681112f4ce193a1d65e0548725f96ae315387cd765c2b9c3068ae4cbe5cd5402c11c55a9d785ffdfc2bde6e7acf19617475dae0eb014456ce45"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6fce6675e86d7e85704c96c295703cd95498590e50764d23d7a7a3a32268a0b3c991e8f78487699a554b581e339c09aec982e0baa4318793620635e1e2c8d9f2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "eba937859197c7fd412dbc9afc0d67cc198160b5a9ccee87c41a8664859f3efd961366a809c7c6bc6fa844926814e0b4efa37ede2c8844268d7f3556e446581d"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "83f433e4f1c50797493c58c264cffa70c4a7a24c334dbaa3c57489d970d49d6949fe45b704f265efd2aee1ac1b46f4aa3e4fad68b37961d2c7280ae19672c850"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b557ece12272493dc27e88a05adcd861875a0cd00bd68adc3a301d263a9cd993a96ae14cfcddcb997cc98623935050ea43552a341107187de75c4eded7c786bd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9589c0813b7393dbaaafe47af5b408b23c8a8c8bac62554b8fa132a358ce3083b1d4e39707cd54a55f673d48116eb1f9ed8de9c943cd2de460a68bddf71e9803"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ae4ccf27ab00a40c3637d3d2ce51a83efba62d4a6fdad695063fbc60a2d82ec5a54acbe09ba9388f49aac27c992d84632036e1bdd4c529bbf1851eae0c6ea902"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a3944b2c31cb494080b7ee1db0816853e425b54c48d631447ea52c1d2952079bd88fab9ed0b7d8c0baaf0c4eca1910db6f98534f0d42e5ebb6c0a75ef0d8b2c0"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fa",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cfa1a224685a5fb2010458201ceb0cda21c82b1602dc413585fbce80976f061c235b1367712498144ac16a9854f6fb323cbeb62369cf9b752b9252a2a7ace1fd"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafb",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fa62c6cfc8f079e58f3d3fefd7c224e71ebc69a95b1835ccc32f350777051102615492d67fb6de62cf2ad5b18467fe8715748882db89ff86efdf2f96f8135ed2"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfc",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cc633fd4ea6ac408c3875756b901288a1de191892832be2e9026dc65c2ff00009f1436ddff4206260a3d66ef6192143e572f1e4bb8e5a74b12055e42411c18bc"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfd",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "44d2bf7f3696b8933f255b9be1a4a6ae3316c25d0395f590b9b9898f127e40d3f4124d7bdbc8725f00b0d28150ff05b4a79e5e04e34a47e9087b3f79d413ab7f"
+},
+{
+    "hash": "blake2bp",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "96fbcbb60bd313b8845033e5bc058a38027438572d7e7957f3684f6268aadd3ad08d21767ed6878685331ba98571487e12470aad669326716e46667f69f8d7e8"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "99"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "57d5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "72d07f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bdf28396"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "20e81fc0f3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "53d87da652c6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dea6abdba2b385"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e8ef785d84bed985"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8564786ae17558a034"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8fe7cf0bedfc5c8a25c4"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ced64dbdb850b8d9238544"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a61e711081c80de67b0f5cd3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ca84913682c32af70a5a762e96"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b3051e87aeb0e2f29d4197ea1001"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f1db5e2f2bde30d08125a67d718b3a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "541e57a4988909ea2f81953f6ca1cb75"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "58910f890077e12ec101610597195ddc0e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "42a2b79173ee4f554baafe870efdd11d0bef"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ab2133a08e937af16b521a09a83c5b25fe39fb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "839d21a3030d13c2f59fea3634d8394cfa97c7d4"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0a0eb5cddef7a827d7d3ba947e55c04d5d74ae4780"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5fbfa41a06fabac5349e39701e79be5ee7d74195ac94"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "58ff07c4812f286cfb69bae047742a1fe519c5a886f3a5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "653a88f2458217a42ebb0cff862076dfff08ebdcef917bd2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4f64ff718d4a02663a64d61ef7a3a0b8a9e0d201c310931f32"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5980b25c906286f0850b2349b0ab1b6fdff051aac85814648c64"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "89a4ae162416824f35ef116369d155b2d941df8a3d3f6dbba2279e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e72beb4a6524fdfe06fb519edd634e62bfac05dc26e73d7da4e6b105"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "34fdfab2a60eb77a4b30e0a14d1b90c4d3fed0284b6ca4503d1e87729d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f0fe72dcc5a7aa3cd3ba068e14395b1998db37f922593dd6f340b3831ce3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ca46fb7d84d726f5011c00c379ef2fb625151c0a1f416e62c9da2aa14c33cb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "91cab802b466092897c7639a02acf529ca61864e5e8c8e422b3a9381a95154d1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0253f5487d927a5d35d0089ad9cab2d7515b65d332e870c78d1229d1c584bec3d5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "38524415a7ecc9d09128cbd0999bb76847fc812148b5a432548e4e500720b356c803"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4607a9e4ac70b3b61c47c44f9e5d05450bc356f2a323a9d2d213525ef2ad2905f82f79"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c8ab4ac86f91ab339c79bec70920cdf382f7cffa279a80687a5c27cf691cc92777120c3e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "de63da44e818a837a9ccb7d339ae9e68bb4632eb34ad5dcc2223de7b8c1dca50a3739ff8ea"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ad5a3ff34c717f1ea06334e074e30b4c57053501566d4889beb32933bc6dabd01f74d17fd3ec"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "845a8fcb16cc5459868f5200a811f511c84caf7fd7f6de2010c162c1eaeca1f3f135b14c4de356"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5ee53a681ccf1bb9d65359e2dd5daa377ce9f54096678a67390c2c9db5e797eabe13fc0ca5d4037c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ed2230ff3817d2ba55e65dc137a3ea9865e436355ac542ca0ee71bfb70e0f48f61f5a0099dbb6df616"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "29be3322662c65b7cceecbdaf27e6f65f93cf41bf27fe5dc8c29891297892bdf1adc948026ef20b6c29c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "82c496d4ed8b6cca197c25bd2fc6924c35ae9a23fd555cf12456cb24850124b1b8dce9a1badf1983f16cc5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c80125ad9d202db1fcbd9a4c7ec3857eb5578b20ef54cf71197954a45df5b5d246bbcfac43f19ae3aaf7b212"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6d25dcdaba3b133747de6c4fae478a6feee65c70b6ca904768796aba08a056071d2853b8375cad2911fdfff20e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ce14b4f4f327941684be16178f86c3cc1382c326909d3577748c672d6a80253c7a563ff36c409d647997cf1039a6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "62c256d6561b46b0cc6567b188ce615aadeb4b51880e16f2a268cbe3eb37b97d1136089d892b5dda8f65d1e418eda9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "02a06f6949c942ddcd8a659faa3492a12f22ed44cfd58de5e4312ad33b1af337655d2b292f9e4802b5ea1ad0f2f9a2be"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c9eb45d0a7430548d96f1033a0e0c62e150c0a105b53de8b7288ec74349ed6d329b60abeb64053cbd13c97404f0b1a8a9b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "253d1710e74d36ee28918880220468da1be23678579bee544a671094dd05cdc658752585bdcb8d943c5dd008531ada11a813"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8ac3361542a33bd1ddbaa83ceb37113e391803b46824e91a81862f8867420b78dcadc8967ca6645084db367f811001471c17c0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "cdc6b82553314ed27d442d6445a97667ec94337ee913d7a6f6f83ac197286e93ad455be6e5346a3369ed7a5c03152f4e452b1773"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "74d8b9c28a80e3d2f9add23c1700a0a8677c6833c969f8337375411d0f2514757bb6dddbcb1ace7e0046fe3668f941860c9f624811"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1a801c80e2e74bcccd583037b6b2228c8bca8444a3ce7d3c47aac3647842c204c1f3997e2f0f8b2b3d63b27a9f845e392bb273497dbf"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4641d3f104a6d384d04c7a92712c02a7c1df543cddd80ad88252113c155b344530fe1602f50f0325f61669daa4b7dbb6ed5e1e3229ff37"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b79a894d9e95b0d71b78810f7ad18fbeb4bd3d84843b585195e3cdee4021a9ba3f0e6e1b960356afcf607fe3b5eab448dcf512fc5b0929fb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3e89fd9a7daf87bc75088c756067afb8da003e746553603338e0ef5aadf804267448c74e8ad014cde658708e5707976e8311881bbdd2fd3415"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d74c6b60df37362d218396f411d1ee7d7e34cb502ea637e9c9c10523f8f687c13a9b32d704fd49045f22c1c4b9d0576b3eb51f5f2b2e234703a0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5e428a29f184b93022812c39485c770cde5c3b4596c0d4e714054187a4bab511193458f7b618d64e2debbd8d5b5680b602326ed760cc5d48c5fc84"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "04147c14a73752961ae870b0ab6c3704e29c8534be4b3063adbf1430eee5f144a57bd003afce1fc1fbf6f926a34c504203ecd113ca3f2de3744238a2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8f54504e449e743a4308fb215d250a08f0541d376f8bec5f4d7afb609326795416a168084f62c187eac40f036603e8426d306a05df36b5e91a1733813a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "76c564a9a5960016b9e588d4fcad94a4b9afe77172edeff7cfbc25b2d08277225fd50250a05a3281f677adfdd96777351bd895fd289137dffd8588907deb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "25981b7d6af3c87840639621acd46ce4bce8612fe7f081cca25b72a569c81c498606deaf781f89b07534625336563e19c6b2c467033bd04b55561251f8521a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "57aa5c761e7cfa573c48785109ad76445441de0ee0f9fe9dd4abb920b7cb5f608fc9a029f85ec478a130f194372b6112f5f2d10408e0d23f696cc9e313b7f1d3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "150a3e311efb3299d0b9ca333526bdb96a0584f00b52f4e723407cc332a9d5f0f64f426fec8717ae03eaebf1b52401956595bd6e56543a53517be104be99745e51"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6add9e23840ca283a12f0b695a39631e5e068c27abb35edf351b19e542ec30d956b3a978df34155941e11b8182f71a57f3f4edad8dc8913b3e3830989ebdcaaf3952"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9878a842d17d75bae411967da45e1e23c395a714192d424a4a082c5ffd8745c5d872a841d827865fd4586c668798117d65b293ed2950427610cb9c908bb961699a9585"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "65f1a8874e3563170d4f8c81a52fe1b27d5137056e95ff03ccc97a1c658f29fedf0f3debaa39452f14821b2ce06d349f89f6aec7340e79727dfe4609b7d08c1b5f3b591e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0d1d71883a5d82addb706c677a054c03be97972392fce88b9dfc676fe83662c2d8a310f1ea00acc7bf1303b324bccc7bd7c9b8ec0f0d3e33d6e31311ad96357b144078b0bb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b85aeb30fd301c182b980ec09dc99caf533e7ec86f35580004b6741aec28d4ca416d13eaaf1c87758f1eb3a70525932129f65528a790983b012a7620db68d7858b48f9e999d6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bc3c10e1a08de16ce26134f363843f9243caf3bd1dcf445cfca839ee55cb5ca5f8994acd13509609578dd39d6b3c89901bf129a5bff17ffa1bb506ad7f63d0c18a570b8953a488"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d37cb91bdca013430f38c914d1ef18b68dc38e5c6013cf8e357048df2c86261a0f3301bbe436362bd81059c1f315cff45a9091f1e1d84141f63ff92f2c56a6ba11fe3db17cff3377"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "52704d061557de8f2debc6cfb71616bd6ea10eef41523670f87e8f8acc673fd3100b063b95f8bca943b3eb98984f908142d6da9e040aaf93cd711191d00ac48fa56e4669d2e7e5b548"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2c0981b3580aed2add3f7c0167f04221b376819ff5406034a41c261ec5969ff248b7a0ce2a6c9f01f1ec80b7d98c148a3a9f842c626354576c9e6cd0588aa129cc9360e9aaa8d4c58bf4"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1b9b51a0e20a02922fabb2a99f11c9ab0111ceda3e20433b25caf010190aba37789c996947cff081d0c6332bf2a780d90c1ccaaa05ebe9a2f186e30b210f9859ace8bc9fe84bb5aa512e8e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8489919afae8ad867c55bddcb43868a089cdb5ed7b8fe0a3dadddbd12cf6ac1d608741d76881c085b4542fb5e82959860b4d617fcff1e627cc89910a8d7cf848dd6b0b70c9870005b8be5ea7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2b820effcb8312b6c05f1013d61327f84c1f11c5b8834a7e59820bbb8ccf77990d0190fe70f62bed946605d82e66ed4c68236c9aa39d9a88fe668331dacc607a3dc4a30365e9a185bf294e94ce"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "481f56240d0aab02b669e7e595041ea59851a8372b375bd1131e39cbdcd76e73734dd5838ae8ae655c2ef513af9bce364b103911defd332da64a1fe9a11011195e4a71c11e8eb57d82d0457b0346"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b57d1fa9332b7a22fd6cb3348733c2883f4a99f4a6fe22239dea9320a458f062a391e240044d19105b81f3c08dc9ecc5a9f86bc884cc1bad649b9cd5ce12a1f0a73bcfb5c1c32dbcbd75a74f5df617"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f59fdea0a8b6b99202c455194f5bb65e56fb45d34500c37a7e73470bd1175714969b608cb7507e8fa1b9e39dc82b1582b3cd4b193e1f518f016a7251b6f52ff4b1d217758715b739eee27b1c9a2aed11"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "56fe4e7c41e9ff59c48b6200d17e6f9eb30b6d4d18154bab7db9aaf206b667e937cd3d4ae23916dfb9f1485ef68c1aef8fe7a661c6a5fb9cb8034364821641b6ee9d76bd4cc378a454435a98c71e47ef8f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c7233615cf8b9d6871fdd7c0024f5ef629e00b2e0c0a19abdcc7b789ff1493d187ebad63b651eca605f8295b29f01364422527a15176754c332f3cf566fd2fbcccfee0bb33d9305e7b8660f81f3e8f6d42ca"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c1bca6f43d40a287f596e4730e27fcf56ab9b841aef9e4daa4e244846f2036689cb319520b93a43aac9e9238ffc256f26e7e5860873cb3404417099eb8147a5e12a094c3d9a758ac989c0c2baeb1e719c2a432"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e3b82e4cceec32977767241c1b1e8504ba76018162de5cea14a19c5f06875a32fff9e53a047e68416b8dc6bcb9e991487b81b76e58428cb33f92f637965f9ee00ec57923019e702c7ba3a8b3c1b7049f3bccdeba"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1489fc59f0b16c2f6bf4a78b6cb71a4c12e0a9e02567edb6a14ec2dfc512687113a709d7e4457a8d03c9d3b1a6cd77a0d50ec5aaab94d48d366e976e7f3dec356ea32ec0561bea07ce8a4204911619ebe54152c73b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7cb2babff9c15db475ee00db87804d984fdc3be81272a60f8286b7ccfc4294841908c56c7268e80356b566582ba457614e392f58613c4059b184e085b0caf4e81aef8ab67a2220c068151ae100c9a323792d7f49e477"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "508f70ce1e4450291f690e2172944e5008dc6bfc494f891a8c79c012351ff160357b39c69027859bd0d6ca7d329ef4c5779e8f3cfd5921ce9c7170038821e4ff03f5279a01156299cc5227eb8a81cae310d4c7ca52e7cb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e534d9fd2632c0d64a3df145048bc674ea0f01af879a26f252a4b0cf406d8bc4c2f134a86443228b667ec1c0c1babb2b04775b064a3994965cd6080913036ed387483fc9295930fe9ebb1da87adcccbca8318fd2b1d14e29"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "deed43ef976409050873e966a722922bd2b61bf11cff0064b5458b9eaaf9bac20846b7f20606d84b0429bc1a0c00df5b742cec643d44659b3243cf42217e6abc84d01cd326139120f96c92f625a08dcdf193639bc5756e29f9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "00b322e73e6eae7de84425961f11b9736806bafaddf0495274552328c6b1dbc9c88227de05e8348c04b9fdd9e9898fe69065cad8f884e4bf1a2eb821ad0a3eb4b49cee2ef299a0051976b28af1d3d16777233b75db6b9004cdbc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9d3a5ca80e99eefe49eee987132c73bb973260869149ecf8b167a7a4424939f48c5acfce848232f49372aff6ff09908f943768a5b87bc30594ad6272f63b5ec2fb46e742700767d4663f82a1ac88e060ee87dd30ecc27115f52df1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e068a4c054cf8b757ac81d216c961f221276e1753148fc9202f83f258bd2877d192e324784fabe600a2dcb53996d67aee8ee9964b9020e2bf458daa4e9494a193f3446daf087899d71c52688a14c05f5ebb6811ca0fad85003aaefe2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0d4ea1a13a2cb5e403caf018e5c529dcf0fb8b1fa625e150fa46383c45fc25e51725e946f09b93877ae2058de3577e996637817a3332c46842089ceef2dc9a4f52f14edd2f10fe56d11477a4eb06e559d4636c4f06019be3911426d1b3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8de5e14a26cf4c758fd43b30b71fab2a77480ee98faccc95488849a49fb983362f883e5c75d6e6515063c15194f3fe9fada18b91b8ccf0b3ced07c410d8eda5f0956a1fe9340b5a3dacc10c2f1b5f4a9c751a65361f21273a11e571829cc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bfec8b58ee2e2e32008eb9d7d304914ea756ecb31879eb2318e066c182b0e77e6a518e366f345692e29f497515f799895983200f0d7dafa65c83a7506c03e8e5eee387cffdb27a0e6f5f3e9cb0ccbcfba827984586f608769f08f6b1a84872"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "291a233932dca80d3a4ff11f06c056b8c7e9de2a99c4c28c666965ef6c075b8d90017608ac7074b7e4831536f5811ccf97f47ec39660ee1de01e31161cbfaeb575a45413df6a9a69767763a4578c23d1d697d7b8673d2b2dabb05dbd506c7c62"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "967c76e3814a1a2fe4ab811b8e0ec56b54dd67f37947bc3554adcd143d8ff17f0f11b5736d512dd8966bad9c4e4c2aae5835ef5d0baff5c6a034e58e3eafacaaa0d0ba4489dd78f06449754b25688fd9e50a191bab8ca6dea5e59c08aa07f2947b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4ea13e136028596e6e0ffbcd2aa8f177d2e40abb7a5efc95a66b0113eab8eb48c7e0af7a7499eeb6e04b341a229f24fb5b9c6ab444288d32a9489e9c9abc6bbad1fcf406adeff9b14e29bc60dc0307094ad8e6b1b6151d7dc185c2a6b2f2c0465798"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "61aa1f4d4e2cdf23bd547f425b52cdac799ff437ea49adbd5a81f0801f640881a09569fbc8b6c91ea2c5538f518e054b5ea75dd074a8285b5869b109646408621b64f6a902ae061192f0dc25a172361508c945e218d1e42182abc21eab8d2b00c8e308"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5e3f0046de3d99d5de3d01ef2947b812714e09af342d9ea03311565a748ac0842540e0504aa8a54d4c7563bd8948d36177d88cc7b14777b2c7930252d4ec1c1a0fa0e21ff2889f41615c9b828b179c4778f314751cc58fbe386bb6cc48b1a729cafd9f2f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "37238968e530a2c072632186f8c54f271d15f43d2bb2a5541914a9d771a7d22a2e718992f74534da17f126e1616c39788bb4a8196e49da93ff4c6300b0d873de6b1effa0af995f534ff4c5c079324e66b18d3c2a87b632541a39c1353a6e2c0cf5b594d4e0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "88623f66c92f3993a309c6ecdafd29815c8b9ac1757290ca3a5f5694932e57acf70fdd83c595858b3331afae7de0884859ecf11b28f84ec8794fb16a136ae0cc9a4360f64a9dc6e8cc5160e8f11e2d2243e927e1479bae5afb82d192b44e59971357a5cb14ab"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e8b11e720b0870db776a8f682b85c865144ffae5a7ab7849bbd0cd9077e5f64d4ee4aec0b25d06ff5d2ad528b1248df90a3dc8cc189cec026b22910d57d756b12153362001920c3f82d102f910eafdd34b1a50e9b99b019107e764b5b8eeda5b465c755d684489"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "690501ac0b21e40128f36be64fd19919dbfb4e0edcf01df9a4d946f1660d3c81b896e77fdb74ef601e44b4af6e1a0f6aead0fca6328542dc7c99d230ca97b905bcbf2dbe0bbc6a73f062d555fe2579cd3e658ddb9a6959467f64fc02344e42cecbfe1c10740f3b6e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "672a69beeb960495361d80ce9bdc3c348b8a747ae83399cb648a720ab7596a8c2db14f924c0960355988189d6aa437e87c3ef3cf3a716d49a045a4fa8dcc7731925f1d5e66f8c0e644d9b4746f5f27d2361269c1313f8badcb38d74ece67d4de7dae120dd9f8291393"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "739c7ea259cebc61598b9630de10c1217eb32a1107933b8929ffbe71e664c266f5733b94843a57f92f57af363ff73ba91022d92183ea368ed26a7bb27162b66651ccb4c3fd417b0ed195d2b7f1323396c49d82f5fd17c60962f795705c3f8262cacff82a587d49c25b37"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "fc80be54afb6a6dbfa21744fa588249e6532572e70236ccc6170f5abfee2e7806104f2ec507782d93efbe7b9f7b098588bfc2f62879df7b05929523015cd5720ef452c244ec212bd21ecc3e1a15932858dc6a55b6888947c067865f0c34f7e8b78b76c8f18c28e1a0b81d0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7dfa64ccdeec6811f6f67a899511d693b999cfafe705a9cdf0458273ad314d2580e01d6975a476beb67e9cffd48da875aa9faabc555968ce2f3ad0b1d9526c986b78fd86b8abc36e281de1e4258ba5521240ac7734990de7299e51063344d9bf9fc1a47d8a9b0c4b9243e7b8"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c4d84255d5a7ebb77d632d59f998decbac3d031464653146adf5e78475910cc049fc0101fabed376bd8440bfdffd83d80c27081d531b9fcc3e732248dca2c3bf6007da725c0787ba07269b05034a953a2df682c962e1441c96024966ee6663853f8c3ac88e80bc6117b7f68483"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9003bcbe5e928e28827eeb435f311730e8ab0e7d1f2bb615f4258e591c625d28301ea72520079c40455a9464e4811599ceeedb913071f5c9c8b4486079108e0916282668799441c4901b72d5a57da1f72b65a1512a23c4c0c88857ada847d75c39f3e925100ef0bdde49f5127083"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1c1ce518a470f751be5abc5c95e797809b40c83f5002c69c3e34b2eb52e9eabd4202539d821e98e8510733e26dad712527ff04e17d37f9172c58e4af94524fdf0bdd55126cce429c7ec91293d073a4e3d33b33a8bb198b2bac7113799cac70df1d860db405b78a0bac420976a6f6d6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "23e5ac8c6331d772e7b2bdd3f0b6fe57df95bee52645013072f076835a3393547d454d67f3f228d1cc2d1e969a80879c241f68273477ae65a6cf6e5194e5ad6cdb2881b74fc0a3e31263669bf5f1fb70890c681c5e1d12eee43b44141e9b95d0180c11aa95c0e513a96861bc3944cc31"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "51f3254390ba613dad1b4288b6b40f8615e047e1ae85b7eca3d1e8fddddb5ef0555c1db8683fd889fc304c62c70eef2ea4c21c2192f6097a996d421b8b6f730cf829ac14f82b45c64c299831e8015039a10314896517297c4c48a91d0914a6da1eb7951e29d0ec63f3fde0c98e24bf7ab5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "75168cde1904184c2cc845ecdef73f69fa67a709cda969853fe8644c44cf8674f13c3a399509f1671568edeb936ef60a450c282aef04086bded69d0696df84b00c3d3477ad51d5483cdade2eddf8093de0aef19761f7af4f6182bf48e848b422088a22ab38eb331c8908a2ad28956e4824b2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d8f6542eaa90aebbc9d24c28e29c229ea4cc6a775aa8146e98cf6929160d90786fd1168e5e81aa91246e4175b06a383f3cf61a6d832b91c13ca2ebfd88f659e351da333fb25ded1fc44df314cb42897cb56ed6544fe556d4e6a658fead6154b3a1cae3e50be2c81f2f86a326515078fb8cc910"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2be8d7128e0200e78ccd7cf6e61a8786b62809b2a17fc3b333387b2205794fef2b6836b19eb9600b8de93aed934191b3e2c291954244d46e87774c465f96b46ff46093d66d6ca1ac4176e9e59c6ea649ea174ac197043f6b2b39ab3397218e78bc2bd79071bb4ab3532d304bac5c5e47730dec36"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "835a085c2f477b537c8d5ff4dd439f2794f8cb3bc1d787fe30b3ff9c590c3d3df6f4b903238c482c63e24b448fcb347b73821089496fd7587f4b9f23ef73c615060c9282fd67f8f012869ffebc12521cb745dc318b07b48dc02aa8b5a512aed4e346919b3ee4836cbdaffef1b3dabdb01bcc7eb636"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6c626640d1496181b0c161e28ccf741598e521d9187e8ac1a648bf7128dafea2562a6e9010f2dd8fbe561f158a0d1eed7c7f1ac2cd208b7cfa2c352939227a12da50018c54cc44a7146ac79d5d847897a69cd64e22f252abbb506d141d3a8393b38a3a3cd99096a3d10037de1feb6404b6c5072c3d98"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "295ccefe2bd4e68d533fe402c8e6477ad00a3cba55aa1c99b7a9bf31f0d021d761607d27312fb099784a456efbaad30fbddd354df45c328838c423f169888c3e7ac7dd9f9052ea356aa46171156ddc645dd2d9801aa23ca832c8a19c5c2fbef040b66fcc579bd73e92e0a1052519452392c94b50176012"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e635d9a82e5fa5af49561bae9abf31ce5c2fb85c1d3ed819f2aec39019bd637d66595ed7be4d1eec75d2f97ee0bf41b441624667e0e7a727e4aedb3c306c6903aba306b88074d2c9ae6787c14003fb76408efb90b0827538f5099ea35baf2a1d7c874ab38804efe51a925aa852a9b4e776e21fe913518afb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "92e056584b2767dc7a5f4f4d0837c034d962eb36e97a590fa3386b106a58e238842923b8e688d6034e7c1466cb26f2b09a5378117a8fbf3fc08398070fcb4ab8d0ca0b4ef197a4252ecb5eccca097d32cb036c8ece264a45f9f7d4b0ab945fd95286ed3714b9979b0575226fc52c979fc26cfa8d3d23e6b327"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d826daae45241b3e5b24e9049a4f86c454b50c5de06e2dc70605acc8da4712f9391ba7a8ea90449c368590881ddcdb2d37775004ca032aa8861453704c9afc42a77553d24f664db7798b25667e9b5e3d04287a35fd6e604feb70a2f8d03de083a364e7711687eddca8c3b73e0134b940b0a42f9631a74f39cf1f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8cf01578e2d2cf15680485db397ee230e4d04171c45fd8d0c65555128f6a13b8dd28cfd7d90807ff4f71ab9ef5384bc8160c49a23b19a541658d7b8f8c43aa98f09af0fc0668da332b1b8f9590a5a5b46fe9058bacf25157892705130d8004dde4eeab3255214776a2d9b2368755b20574b37524f15e300e0aa093"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "16ce0a26a1985633c5f9c653bf4da9853b301b08c321165e20ab38762efc7952352556f91d109779485cab6100294f3d59269b99082037fd5e48a125523c95d5ec4e8339d3eaccc67d9bf37c7e82c0962d72532b0448a4497d312524ee2f92b44a6763de12996164821f0f11db66031b1247cb4cc1dcfbc366b93c88"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b145e964233d8c74eded80b6c625de7efe274142c26ae9140a762bfbd31bf543eb8e52c65fe0c96dec46a02c08a8fac0aa564f0abdfe6ce629d5e191ea159165f351982d51f0d64ea434a1e7e789ffef38ecb8756485cbc2614de9b80e1172fd2c4be05ae5b7dc76182f8d9ba29106e5ed4f8d610c7708fc97eccade92"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c96773d31fb8c6f02fbf2a9f4f4ff74234e26808d7162678d25c931309209c3b568fc2c69b5d97a00ae7378702b344644fe9c4b0f9e44fe01ee219a3471866ee1fafa8b00265a10dccd1b3f676562ffe2fe43bee82c4f7b5ff5e04dfd4e23de75b6ee35dfaf01c716c0db1c848a781d04978bba749d347b6e85c5334b74a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "87776d4b3be82f3eef9a88f8135a005e4c8efb34d51d182efc358af1b4287b46c8c16a6307fc57dbdd7af3af57c3f3670a310e65c69ff7c91b2a75bfe622dc860cb6384459eafa243d0d6cc768add9bf5145e6ad393777d745f285ef4e96f2238da3f7416b049958cd55019850982843315038cb97f788be3aadbf283ef956"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4d1f33edc0d969128edb16e0756c5b1ef45caa7c23a2f3724dab70c8d068cfbfc4ee15ca2fa799b1eb286c2298036faec73d3cac41b950083e17ef20ddff9d55aa8b4d0365c6dd38d5ddea19ebfa2cb009dd5961320c547af20f96044f7a82a0919126466bad6f88f49b0342fd40f5c7b85206e77d26256c8b7ff4fedf36119b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9339bc4d2c29865f64d1b93b1e29314bc26b78d53b69873ef54205b3891155683f2d8199eb9c8bb37becb7ec02d126b730cc4310c9c70785fb819551beb509ec14f2f7cef1deb83a8c9fae4511f94d48ed38f8a444b73630cd433ed8e6022211286a2df8193dbaa1f57b38ff84d6ac2945a575dfd4804b538cbd33800f488f254a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c4018d36d2f84fe2e1f726181caf1952f3501b4b4ababe525c76d8436c9e79d18094a3f7726f3bdced6781f1626e90ee3b230bb4862e5497129bb58b40d6717c7f25ca7d96f80b1f37273105acc9dbd30f15fc0c5b81f465e2f596948a00aefb9d976eef60669e1770cdb6beabd2ba112622734c8659eb87f0aa08c034d462a0267d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "03a44e84603f79ebdeef6680447ded2bdd5a640549f4ed6cc493ddec1006d0535481417bb8ce221e1b3b2535cd0223630e2f96a8e47f44da8a998c2766be89b2e245033a1bf1fc15f506825964e6c6a9c6c5eebf06b1fec66b8322d1425755aabe7391ca9f5c59cfe0c14095036b141f864c01a5dff04b8fdfb7de2b88d6c31f8c684f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "181870851c94b7b02629c99ed1bdf55a20412534c5101918cdb36525364b1e7d0f7eb2b4f549be88bfec9eabe45be9e4bc3d8495258b83c6107c995c85e1f5ec84bbb8bd43f58ae98d13854ea7de75e51a5f73e24bff4e6dd850878b3b7f8948ff99924b9706bec23fa613634abe2191023d01d463ea7f6f4019f1eb4af6e74832008e69"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9b8d7205ace31b13e544de5f65ec17fa2ce350c8bd32e68aea7b22cfdba9e0181b8db8dc961a279f3441e2f86543e0ef8de65b89d28eeac748fb65a2b5c13466ca94fd45c425f8146c4fa12c6705e6230b0a0ea060fafeeb43907087682d26a465fcf7f21ac52f1351f73b45d75ece0680d27db1be924af3a92adc38a9efec2963b6882b8b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "60ddbc9c10494d540b04627b30dbceefa1331bfed86ea30407c99fb18a50f5afe58a7f73544f6c70b3034825111fdd139dfc3e0c3c00ee2f1960fee71284332f727efa6187a4d131d4271e23948a2c2092b24fc0b366ecb11ab464bc85e2c779fd3d9f2b68e62ee59d9b86debfdd96cac33b2628a5a966c26b0602e242ed4053737a3db0e83d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "27e3bca4fccfae88c9a7a7f43c0b72a302b626cdf32eb70122e9cdbc100be2d29d945098f5d74354b4f90a66e938ed6eea3ed9cadc24a1b08d12e731150b327f0f53ad43fdaa9ba76785c03fcb9b2995cc2ea67009a0ce10e92f9ed9fab54c09b3f90b0fb9db2545edb9088f93a547333fff31dec6000120914baf6b6ad7feba9ceee614beed11"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "71028d445c4d77fa30c5c58057b4d233ad2e12ee640d484177e20c635fd1ebc150d1a3e4d855b7910623492a6828c215d5d1a9f39a4ff3f4e6c98c98068fb1f3b4ce319658fdc764854b95928bf0315a81a0f0a022b3d2bd285f22b16b1613b52590399f1b993589ff2f8997c4d9eabda69c9f3b8a925ac9b4942b380c6fe0ccc95f1b4e3d8cf336"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8533108fe06b8ffadb5b8618d03486db657bc32221488b7b629d6ea2e24c1e1de3755edb971c1db135bb38e0cc943bc2b3aae2369b3019b98b5a92dbe122b35dfbef0620685d5a808f21c31704e7296f207dfda914fad3a903d8142c623a83a0f55dbd0313bbca2c2831c8e4f02b10bef62ef321644836b3b5224a0eb68e84f25742450b10f9c59bed"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "45a62940d954283daa40a17b89a8d89f383ecd3a888d009b31d96f48bb5a656e4d6870062b41ff33d0b7dc7893b3a480f2d2c4c909b18d50365451e7e56c6305d26e357cf51665bda819c1f64b59dfe87123755523ff969934f5900d2f5e69da3189c118ac2bc1c0438f14b1a37d2227801ac6895a3c54dbab0faf77e9b1b8eea879c9dcbfbb7dbcfaef"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "03f992e29cff3059d46ae559186581b67954e6efa73d7a8aa26ed3e453828c3e8ca5031a988dbd680648f5775b0484a09d0ec953c49c3f44bbeeafec5d7c0820e6c04cabab144d66e2076f1dc8ffda96fdd292edad65a671c440a2810bd0c86e9608173ebde1d193f2fc738e1482cabea306208b9eae348113be4855d5aa322ea604597cc0793488b65cea"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f3a30064a77618fcb495df57dd45d498e7fc9edf91e6c41fb76ab296201f6b9eecff62f5a3aa6309e38d02bff0548238dc7a54bb1c51f89500c8cd07bb8da92a7659cfb12b175f6417eff25d811c930b029c543c4cd0f849e77cacf476f3bc690a169e1dbc5a60c407cf206074980d265a44231a9afe10aa679b542f63397019011e6fdc0316f658dd10a4d6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ab3cfed6234f8bba8918664f83d266b3876ad57575032b3260c3cbba740ef1530db08f0f5e9f1718d5bf1f177922407ed746455736f21016994e0b447258234921f0f373974ba0e17f04f0aabdf7e7a33d180e474fb259191450ba590e225e9d7fcdd7fa5d4b3eea4f836444e31ecea28727d215709ba33bf6f2fe31305689600a314dffc81f99afdc1f63010f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "fcc8d836915a460569d081121755425439a95a85f635b8b1087b55abf43c1ae3af7350de02a0d11443315e5b46cd2dc135c5a2522801ced212bbe05c7c595ce3cf30b9bca9a34082b270b42c02b12e3c570524a9f7724ff0adfb2a134cfc70b6da98c375f197cd1a0f56c792695a88272ab3c30fbc3d46cd391303812e3db840e594f59b25e21007fbb7e259ad2c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7664b3954ecad281dc23e0dac62536a4512076afd536addfc74d2ccf9742e80abd6a45dbdecccbb951e41b5f9dc4b5c10fa2734a0ff4b247f237950367a3e2f1ee00f75813eb6c3d6da4383ab908333fc123d5570a43319587d9625516122104e5691a7c6e9244ab7785846e13da5bd0e15568eea2d491cf202a0253a25209389b27c817c22c5ff3da99520cd71290"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ed5ee508aab550984e5c58cbdefab0b5161a4455f2d4eb0cfb633dc2fe88144504e294af91dc830604a0c6be4583b97d054fd2d11c431292e52e559206bac1a447b4267a93740c7fc50973a6569772589286593164262056ddd60e6cde4fcd7798cfcbe4761ceed93c68f9075c6f1d5ded991974c2c75a8057eeeb73eeb07de5dfdfde32af4f69fa1476209f38003cdc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5a1c93e287f1e01a6e832e7c0c23522db04758c67faf12f8900cbfdf48cd62fdd0e5f1c1de85c921104164e35ff970ae0f047ec1ffdc84934cb869d4f944cbe010061b6e1f04fcc67eb1fe73a267c9e2cc784937b70ccc9bc210ce12c52c1a4c6e944d212d8a7789f7fb28e0633f299bfbb69bc967a464cf18610c695029f14a9049fafd3d876b68c9e3abdb4f829ee2cb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "70de86a6b3d9cd1d9b61084e7008b948afa2beda8e6171618260533d5f55bde09d454add55d6c6419467a57e48fa5ff16ffe852d5d650659310e3d56da10d0bea2d3ca1ed3557ea2ee5cd9a1067f3415a628aa0c174234ae0636e662b51bf5d1d0d066f5900e7464ab741bc69d3fec621dc610748271a672862aaf3c553fe4ca2ed9ba4f57f1e27953e3167fd1d9c3e4c30e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2bb9490c3f07c77e4cc4db3b10e57e6606920d0ae01bf3a7b68a3d29b327ba9f5d7389fb0636d1494c3cb95d27122cfbcd9ae960fa0fadcbb123927f93599a24be52a01be80f5763597b8c52268ae553f5f6a90894573cd0a8876ee1035a65ff5a739c8abd8f115cab980d369d68b266b7a34d75f9c18b2efe3742e3e398ab6c70448f670354a8b486fa916bbff492fc98daab"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "deaf859404fc6e48c66cff9bc437eed861b45dabdbe625af4a82353f426a040050ed9235c0798a40930714df30bb796b64e9ad0df4350e196390aba4b0a10a6cae34007414a5880c5c2ce672c2b36a0e7d2622d677b74348ce07eb3cbb1c5a9c568063d8da555a64a0ba4b126a0e9d9f9ccde4cfca6d206f54c022f7518b8dda9d26d31a7dc9a2afcc3abf70ee5b0fcef9bf669f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f875ef68c13c5a982637b84eb21a11e6f57ffab07bbc11e5326fea005326cb27c6f70e99347d5bf3b303639c260193c1b7d15de51da7e661e2ee4d08d5022d918d0bf1f3a4572d8003a8a4afb821f6dd03c2bc189391f25b2e425b743282f1371d209b61cce95092a2aedfabcc842fcfdef7a0b33473992e13fe0d6da31b41976597aebd26657407ede2d7c51ab1dfad8d44e66b86"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9f46e27edb697d90398d02620b06ac8d49a3f66f0cfb02b9c628e70bfa0bda51eb024376fbcec59d8517f1e896557349d22ec78038b66a9a16460b8941005336bff96caa32e195abded0d31de0f4c8ab234d994979dc2b53476460abf5136b6b7fe6489793c14c48daab353208e150c43f7b1c7d659d6f8b5bf2fc3663335495e9aa47537afa5b5173aebde200f26705b6f1f3efc4be"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "35a3235938ed1312e8d79120615daa622cb5d24bb84efaa84dfd8daad79311ce6ebd52af7c8ea8dfc3ab72f49ede51d5b62f538e6cc84127a0eefa20c558961c644ea09c913cfc8550173109deb8554e0a418351073d5bda8f13cecdc71f32efa4e8c96ff5b30f663c7a4112f4b6b6afd6ab8daba9e2c7ac604a7e4b00cb52cce8ed10bca0cd6a6d1842b59867ca9e7f36ad678d28ec5a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b3a70cd849fb5978199d363881831cc9df46c940d405360faa294e36e8ebcbbfdd8a672dca3b3195eb86b1a0817e537f853ee599ef3058692bcf5dcccd37118fdd42d50c524bc96ba7c6d2deedfe062a32b7ac93a20a8bd3ef20fb7a1766db25313390838e6a08e01cc932dc8b4410efdbb02aa4d53cd88d1b5fa0ba564b6e764aa417833f52e0a3ac46b42f4da1ddce5a35e070e0e02343"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "090c351eadfa98ea2843c39c0f1f6c6bc1800cf17359ae22e7a8a24960ddf137666e1cb45eaa675bd01175e81110f54c775ba952e3de3784987c96b92bd9fd349c7f120de13553366f621e7437a08e374612dae5f9f2cf9081c6761bf287c7a3af39963f06a345f1a8f7a8b04d360836f172bcc2f4b3aa2c6754a60b1bd49d42747561b3fef35501581f606777e6530c446daa462a4f7ccf83"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "01cba0c30285c6963c3bd9455713eb330bb887289c2a71ef7755e64cc0067810f120a1becf6a0dd45eb8c31ddb2befae75bbe7b4fa7dca9417455b92b6adb7118a36bed55b379f66d9bf4423ec928f14ff644019a6b9bbef69cc013f717b9a385ada55c87c06dd6b3474020edeef23188d0ccbc5d758e61eb00a20f9f52f309f2a8ba45f49db93170e61c239eb8bbc3c89b0b925c1c87a099aad"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e13f2c5aff51c441fc9aaf48aa45bfa2afc7c517104b6b7d50a9c4fa40ddd0595bb06541ec709c685aaea4c77ac37afb266f3510ac0c8c8891b4904a065ff9f7dd11de4bb758f6f2f5b16370a3ebc5890ec75b69a2c014bc9c67598c7e094c8820858e34c0d2150996dbd1c3de69f53dbfae0283412d27680428437ec1d5dfa444c5a553851bde66ef3377019c06f93d36e9b7e540e09ed223c948"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "84d5ae7fab040456d5b60a49db84184c6522c671eae6d715432d5b92da30fa8d17ca6fd8e10f00dc0a06fd7bc0fd3c1b00e6308b0c2615b20aa1a65d8ac905238c0520774181ffbdf4767eb2971813de6ecb07baad256ae3dbcb1b73d90afd0f5de22ee1e4be79541bcf4eb887ce1f904c3f32a868b289a76e43214ec171bc1639b51132a1f6b0db60c835761b6106115d81aecbc385114d56372891"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5fe779f861e709fe51ba04ef56aeab3865b758ddd56caec49d268eb04ccf2cfbd83075286011ba7af59b8c50f81d978b029b541a5a5023c86533e1d25c4db5ec4f9b4ccadade8f4332fb62dd5f41cc0756adb4662c4b9063c7bca3dac7719082080e07de40956a4f3922b0271d6227115eb634639383608693bde9942fbeb4c0a76c1efa407946ad440556f489800d92eca6a7c73beacdac79e7fc551a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "be6ba46b695d0b8a24d4886e3a49caa510bed696d342a842bc51c0d015b9b737f299516ec27d3082a8c87fcc92bd50efa4a3aae7ca140bff820e5a849fa02b421fc0647a09f5a0f01bcc31c966fefab1e136b0c6d1fe1bfdb24a436f7a84d3905a88dbe18ceda4ea4923ad4b2b42ecf1923678f3d0bcca46c20c4a8edaed8f76e27ebeeff5d3fb3831de0b0de469e73968f94adb172c50eed38cb058ea62"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a00bc425de55c2d030ac39dcce74083b56f809c1f1f8e3398fd68f4139a083ea7261f872378aafcfa6bb45b720101c9be64eef0eb2097a1c4f66ce4b56df65b144ba74267ace2c0dc80076d5d3e6e8a9acd70f21e7e743422acfc148be0088db05ef5575f9eaf5a1bcfaa468142b8f2c4a62ab3247571dc2481254ff030ca298dee37a4500845ee322378324ae2f635f4891e2d46f1f9c71ca307e5243d056"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5f57318fca8c3a3b590e0205a5f5d314c15fd2ae751ba7befb91c4f898205f3f2701651e23f941c274b9228a39b598b33405f4a75e9d6600f1192e4f06f81edeb7f619ecc4e82b161f0cf9c8d37e68c7139ca9d653ee34a43419205caa61d14ab51f28b7c8e393dca8d6fdfdbd796d7f84ec0f3f33ebadeec67dbf7afe134c37f2bfc24a8ec47e0536361a87c8ac238e42c0baa9eebb9d576548c847f78f3f78"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "61237c1ea7a82566fc6f76a1d3d78eec3b3181de76065da39f4bd1da971e40e3011334c225e66ef4d4ff50e49b331ac39b00c91f985aec227d43f7e0eeee40c2668328201bc663039851fcf757e1c757f27f831a983b1050ac1e669c6a1f4cb42fd76c40f76cf0f4bb889ea36c02890f0d2adaa009d47169a9a8b4d1bdfb2e107c7b3b2bc907c368c59ab37ef54f84c4488ab75901995ac8430c27be15934f0de6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "24c443acf04ee19b20fae2268582993fbd142d22ad75a777647201116bd8c123334f6e0e847b3030af1482f7cd2cd2ccf5425683172094cda8e73e33cdc9991ca69e3285b9387beabf00c370ceb47db606aeae4b958636dd0937ce857cbdedbe31cb67a33eedcf2c51dccf620e20d8dd9f35718dbd208d865f1459e4cf3946e0a9b4e60ad0c450ba81d73d892b0cd595a52f4e07b6f740bb957e7768a9f32bc154ab"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7ba4f3ed6000a2117982962ffd84e932de959aee244a8096778264fdbec4d04ddacda8a73c5728b04f0571ce5b9ec482a9ecf50b21133418f644262d9794601e7f2398629122b5b888d6af02ecb42d2e41238e0082fb2d47636f2aaa6cdb7d3be5eacdd4d4912f1b307e49572f1d657038ca83d1a9c456bc3bb6faf851687e5cdf4977984a44050413b5fd2c4272c2a3448fcda152e2c306a98d738ba1f8a21fcbf57a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9b16ea160c255452b6baf3c4e5caf627c1f4e8663da9c9036f048860d31f0918075e3eda569254422b0295ff3afa152e4df0f99de21bac416e028e2a32e52896179f18bce7be2c5ecce28625222dcfaf2cc503ac4768df7bf04cd38d6dfcf1f1c4233051ae9843de7ac552203cbe0afcdee913ced89103a986af7fec428f9f93167a4218d5745cdcf57c6de15bcac08ce8a8de8b03ad9ebde73978a6486f7e1b90d1123e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1dc2f82fc83a973eba60ee0ca1ad7a50fc50e9db3fc530378865b9abd4101198d6017a40777839dbc6313ecf35b7b727e0311226fa865d73a43cd28a400d8b35408d789b2249b7a8e5df452d50c6a3c28fcaadb58b222261be49aeee3667e0ba7c5f2726e31cd5bffd125231116baee18bdf7727ce3bcc0c31e1cf600635623881a944d14d514e1becd9bd0d823b41a93ae969396db22411172efdcb73593fc8cf80071f2c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e8c00940d825a6117d59d922221e01e2dfc2fcb47bcba06a72f09e8f5969bf988aee8a4035fc97d4ba4a0d4629c06912c908b90611c1cf4c580f8bd3345fd8b155c64dd747a9c21017146d620913979ece6df5a610d12ebb9ef30724586655ea7a11e45ed51a58f7705db538dd075a6a5ff70239e88a8d8da0817da0318aa57f637b522c50418da50d0710ece7e3b36331eb1147094ea8321659e6cfbfb90e92f10e90c3a73c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8e9c1aee76744af025ba3f5bf630c13af132ab7c55230c8adbd20b214f204494f08035d9cf1beaa30a3f8522eabb88d02d5558e7f43c27b58c56dec5bf67812055a99bfca881e86f0024ef84501eb63bd5af849a134de4dabccb087a6cafe0426ff0d03de8cdcea2af83746f94b33eba2dcf4de7775d6a4db8d0ccb0d789e11b9bc3586e82e31a265cb26f82ef705139a5464118072af13f494f1b9a07bbbdb19dd596fdcac414"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "44753f6011c68059b5fdbaf6156e158221b5f1a544225844b33f3d4509efe0d4185a670627c3652b4f6427b583ebc5d941da2a801111a12d8d46ab1c0fde95c91e538be2e86954be14d3e7ae33d04029102e4267f3e2f099fb76f6801ff19f26b5ba07c29ab74cf1e3f3e3bdff363699dcfa7a32e3ffda3419bd22691cc64167f66a3c999714144e1079e6ff0472dc218d11274c061d92d97ee5ac1e02c104d1313a1ce3272326d3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f6a4be7b99c42b72c4e03cef4ac7420b445fb0720804df5f58d284e16cf27ae905dcd5e53f2ac1cc19d62c762fc9906cd45a0a5720dce51692285118f80dcd0cfa4008730a49c69aa259cf9221f2a992c21617e5fb361b03cffe6bdc283866d4f4823abbf43f02dd4d9351f1e37cbabe3eba1438dce281d6b87fcdcc88f4d6c2473d479467e13a5a1e94d1fcc32b9932c5f28ada66615d1f8c7e6e9170b06ff1c1041eaa4ca838edf7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "894491aeccd8edcceb6a6cb3c7722b2959cc591f8443b1efbc19a459d84c77183b2439e594e644b5b66091059fe372cc41c98ee01e2b83242ed2379dc97cb7f9d75fa146b36dfa9f923f2e5093b19fa4beb18d844af8926338f458d458f7452075bd0882e70570fc9b74cb61fa4fc2d50f8aeba4ee7d1dfaa4cdd44134c751ef6dd04d06f4892256472a09b9cf68919769c3b1ccd75c3b89b7f122d9b5c37d8745caaab703a32113afe7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0ba47fc6ad5364ed20dba3638480fd26ab35fcc2da8220e971f3849235d6e706f291e08736bd2edb5de04299bf2fbb97d9fea02456244540821a7ecd0f3b87a7819e054fb14130c92245b72b8b8b4e5a0d3a0cbf513a75aeb398e2c5842553c947297603cc733021608451a615cde713099a4b4d1ab26b6a322932d1fd6a99c0285b7c44103c7ee80499db0716160382db8fea1b5caea9aeaaf1d940dedf185b903dfc2764bae972005fe0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9f80b7abc0af99d288971d6a3bd35dc802e7975eeb854bc16dc0d7a2b4c41607fca9d2628d042d65d7a2bdabde5912ab36b293932c12f02f8c97d2623fd4b660a559de3ebfe58ef90f5cb5dd9515f5d21157825803f32aeaf2c1700ff8d084c0b7bcc70ac7f29090ad8c218375624d58f2ce789ab0b345da99ad17a47279d3e8a001f337e5fa7278c26554c673a7bac334efb258471c4156974cd1b54749a49000cc7459fb3983b4258e1f0a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c254b38aaed704cce241ac2308490d469aa01403a44fa44987e3a33a94f51a9b762d02ea54967a8ba351812a6662463e82fcc4ee07af0862113e01c3f6d513b292dd02ae0e3afcc8584b559b930a27f877443d9443afa119db7cee8c632e18f186df0b907e8e3f3267f48a5a44232b720cc9330720e93a31cfbdab14718453cd5eac89beac73c996b6175bae2e91eda40e47625b286d42993fcac967e8320d7cb013a84427df4e30d23abe9cfe"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "abc8df1ef3606c517f5a2d8623e5cd0325504ebfc670da56ca01a570cf3840416b24f21091a68a536e162cc7ed7922869b7ab30283e57f5eeb60b778a06a8c5d6c6d10c91fe5cd37ce47669b785b11a3e1ae824eb9dbc4857a3ecfe0d1aeedeb103688daa07c4e01eb3e12507fcbdf1522fc5a186afbd858cfe8a453278c78285271c303a82417afa3d1893e09b4d2d1146c715cd226292af1ef2ad968ac7e491c127129d106677336767f25597c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dcb3db73e478b5957276b1c6b16b1cb26d6679d4ce009ee6e5f4dff8ac135296f3ceeb80426d5bffac0324e927d7f77e31d011737e7460cb1f19b8c8aed25a786ebd8b521524c5faddfa009c6799778b48c50075d43db1dbdb891715f038595c597380a8d02baa3f06c58bf3d610148ef84c7bfc610455b63c1a8acc9e834cc079bdc9452bf5a1964c75776f33ce648d71b99a3a97f776938fd76314296a892973f1ac73cfd778eb130bb7aacab4b1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b390160aab430ba9fd39956bc2cffbb81e85f83323840c665cb3c8534dcbba46769ace43b21a0e0f6808b22cbe2e64075c5ee4aeb9f6588cf377a7f10f824aa48e9c3ff93c2ab1ee3bf2149ec9d51783af44d50d49f5801f5e30183b4a18ee99496357201602cfb7cdc6c68ea95bdb858dcef3f4333e304183f139811c853ce1397deadea3875036c72d4e018f8443763e5679bbf177b6d6f9295a9f0079dd6f3d33d523481b44d5abf432fb5cc372dc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "eb380ddac0f8e07171d05759fac1dc71a22448e1453ff2430f82944743457b56a6c5228f6d14408d703cdb89305c5d67efd1c8cc9b0b145e51784edab2beab0021dce4a93fd4113cbdd7c7a33a6a77028228eb6b2a6750dfd2f842769da9692b8f1da6f9ce58ed56a63a666be97912f464ff57d3214889b7d66394b759caa18e57266b63bef3002a8a32d1138ff033e8f078d88b2f01b800e3f1181acb82460b8352b6736b3f122f02f416fd4aa40ec98c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b480f56a66f51cb1385dec327ce586e81d3d9143a7301dce4bc593035080d6c2e1f0cb256bfaa082f68edd8542c0e0166464021dd2a5d721e9f6ce79d05208c348d9c892beecda78200ff67d61a96d7d2df1eb5426d41d5cca0ae3b25e896a914360db473c96899b923fd850a03770923473fded07c0b82cfa2e8c6f9aeca4f266829ebd10a07c1662d2ab1f2986eb9ebc33559958db46a89d46c7dee617caf1740f5e3022458d5cb0b8476381ed6ec8abc7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a91a2d8ecb6485fa780adb7dab9679ac17f2b269306589e1eff3bd7842c2e004795ba3367ab5e6bad584159a6e6c063d64c0338cdb19f89eba55059992b02258f27fbbe1b5b748810a6d00cb365e08a493b98159a169616b8ff88f7e67e7ddb6502e03481a2c601852ed0b6651fb8963af760fdac36edd4fdcce1529b2c3800af3e63ab6bb013864b49950f04a3c784f0e84db4a1f58aa8b4a437b86673d124caa8534afff3fc5be3f5d5f16ba6f862ab5b9e7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "214b8e934e70e2e9ed6ca65e198bca56c84f498fc642b5add5b709b62544171a4d57f82d70d1fbb5cd4359379aadd8dbf274da265ea78302d66f130aa5593ab968a64f596e5f72093ccc3e5473e2de5cb4378823e6282e93d52fbdc4217cb1f942da7e5fdbae8c5ccd44c59fde24128bbcc3436bb6e43fa6d7bacb7a8714f693f1348dedbb024a8c22e164e0e7804a51bfb316569c3fde1b771fb2af9a648d949cd701cbab36a5bcd87c6923428301f3d64f5231"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a2efa708dda81f8ef989f37cb10cf344a8a91548cffbab474041b59c5ebcebf34355e38de9e3b853201b3a4547762b9d10bfbdb52d8230c057fe84177b7790f488204d401fb8dc35fda836cbd549d504c47487ca1ed4fe80f327acd84a43e228c43c811070d74b788a3ea7b39b4a908bf9a17098fe36723f994b0d4cf2390ad430b979a5a48b89e1b7069656f806d53ded32cd256e3d3ad0ec09738b822aba507c16d15f2f4b748fd050b7984654e597d9b30c63eb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1c8e20f3bb00f4d30a8b6d53458ff0b13032bdae6bbf1c99389d32069284dba2e82e068205583bf493de4cbf873ddb0018d866d4543e480b7f3040be117f526e99dc60a60bd84c3ebca8331dc2c126304369420c5c98d00f55d753cf7a993d58962093fae8460f2af2e495908bbe8276c50c11d15dd7ce09dfa35a49bdb6c1b0679f4abc2645034d9b61e07f29af79239dc2a47bd04157ccb5e77011f8dda9f75ed06e1fcb6b87b18a0d02a2648d91f6800ddd041a85"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "34a6209350420b4fe7eb859cbc21e7323f73921819f03529de3051d248f5ba3d73694eac76ef6e3281c51755ca6d625f6f840b181e18ef1f227669603e7f65875891639111d996314dc4b6e5a2dd18a8fa2da32ee3fc1514a44b3b105d291f3d49990d2a1c904921685b9f713c484fa1787608c735bccaeb4ceccd3e799960354444cdce5d9880a3100ca285560d2b9d3842391f60ef89126a58a0af453b1dd0d8ee44d253a99fbcc9f5b0ccd7b80cd2488a57bb4b23d8"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "85aecb151295bb3b7c992aa4c2534701e6ec0c9893d9bc8b95716262497411d9592b4f061357e7de7d03b0bf213c0c371c513e12fdf5d0fcaddf8b4b801a261082731dd269ab64e436dbade46152669a945bc51b9fb583cf287c76af8f236b2b44c85649066d2f46ad699435c3c3e954a9e85503537d70f34c06c5aa7c5e0cff11d2cf37c9ce6e883c837d7873a0b152470b26e21c82fb36c300a5e0bb62c81d09444d0967f0e8e8533d69660686f2c7fe2cc6f28478e231"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e7eaea666eda1ad214069ebe8acc8c01e7fcaea21ac8bc4922c686f8f256741f6b29c00fba4e9556b056e3c1ee55d75f06d946d77450c5398e17844ded4f7276693bbe9109bfe9507f42bced1971b3b03f3d70f25f0f99e29d82969bcf1bb663e4c4ae2a04882e05baa2f9c34c029b700c745705581cc5dcef33472cf2319aad0d1d37d92add19e20c88168475463969ca10c5e37cdee346482edbd9133636ad18690070fa7313fa39a7b8656b3e67340d386bd91eb2069262"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e0d3cae4de4bb434d22e779d992c671825b2af5209a236d0d82fe8103d21bf4519401ce2cd4c2852a8aa63f4aa29c8533ac9cb280bf39c92e5813208f563e7b3b88393f611175e99bdf22abc75e2cb175e5bcc9e0f614766e8c9f61b675899e701fad79ddc1f84c18649e50795305667bd22f1bc5dabf914ef207770c99ce3d802ff9afb36c829e5eb34c3218aa3ac47381da335d6dd1757c92af01f51b45d1f7b08a2ce50586474171acaa36927b10752268bc727b057f7c14d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3d237d5b4e1fd29c6677c0fe437bc6624165b3a6e3ca157258dede30d0a59346a57b49ae0cb049324d5c6f289e91de76ffb29395a79e4937a74fdaefa65ea2513a487b8b50675954b72c9d551b0de89ef39c5596e678bae4b5b1cbeebf86e6818555fe886c624fa37f645120973fc92f4f83b263fe6d3e6eb4896d3bbdb8840c01a5f96d9213ac0400cb39e045ebbdbae00179afb31b77823a1ca3fae079d2cc4b09fb0525aec2ea5421e2c4b5ff9e2c881a29b49f9868d15a5dc4"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "89a8c115681b38ec1fef2137fe0dc1c76d53d042820536455233743830fb08a9d601fd1f3d796a08472687e457cad3166dd4781fa3ec0ade3ba31ba38a528932f0c6a1727d012631f649e50c76b983873217fc3c397c39ad8661c0f818222c55b35d0679b8ff13ff66235ad5bbb64c2eaa2891e400d443c687ddba429c2ec038c080785510cf999e0d2bf4e3918b27ec209145e0176dd533ff69876e4ac57438ec45ff3574a8e03afddf802e946385a158505526c1f6f6d816db2d3b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f3f8196eeb035d4d2d9a0312f962190af5451a245a04ca77d2f7201c57a34f81332822730fb68bbe9c7876fe5b2dfbd56734110a9cc550419643ad094dda17171fcb06437e69e76c6614f4b90acfa3767093ad1eaeb5ddd3ea30769efdae090545eb74c482559c9c08e78231b0f235402a339eaf72c1c3f202a456d9a954e3187325bdaec1cee4a436e65a7ba401596a88c8b116470cadf8143f1cf0206eb7fea09fbe13178e30c7522218d80cb5146550f94c0f7085011bbea616c82a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "17790b069543cc3116bf84983c6fda6b6782d48bea79f4359f194a0a91f071fc9dff793af64302ff581d60905ca0e0ec07e16bb1af54d30bbe2ad2f522611d6d164ca85274041ab0a041f78a066480f19cb44ef88980febb1108513654b06480350fb68923b64b3c06c749d9da05430a0b4440105c44653e808a8557f59ac721c99aea7edf76b3bb3f1abebb4a7e55babf42cdc03c91135b48ff1554e57a96f07ed9bab8e6f529c93c6ccfa6961a591d8d05d7a9ef4d333b7722d2b29b08"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "86e0a5f8f3e995dae42d2e73d87438cf139f4bc42bdffe97dbf8fc26939f1454a254fdcd56882b3f552fa30b25ca62d0315fa49f1d5d42020b68bfc7bdb20fd4957ed50a533b2be720a8af438e68f174cbfee6817f3f0b3be2bfa365ab51942dab2b321def065c20cda6c7b1a7aa6fc3a1f1d6b4185880491601507ae2a0fa9686b40aaf0524705b760e15d9db822bbca58fba45f6c2d1b33fe49381120dec862d3940a3b145106125e3e99068beda1b073e5f03d38f6973e5969a4bab896e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0459375f9886f055105cb34a109eb44de838bd5e14812f0719a40593aa1bd3c76c8339b7ad90d934d23f1b2aef5aca6f795c4e0132fb1e2d0702fb044f4724fb33e75c5a5d5af60501bec7c873349b1b8bb756ff7a816088ed08fd1a1e79830396d3f73f4656da870a5c1c0aa238c024ed490ec93e0e410c9312b96b5a64313e3d404c6236c655c9d9ad5df6b64e2149bc62f0173f33df60840f44386f4726ce15ee50fbaa0aedf1c384225413889f68571e578412bc6f6897081848fb7df0cc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1cc2c138b0cec83dddb572024356c6a05b456b889f69a8dd2cd8007fe7a23715b567fd6f646c0282b5c5d5360c0e1dc04fa45f69010eaaff42385ba85fd8d343bd1f6d2ac4556fc35ef57394473652f468bc28a0911eeca4234cf0f5e15d5b61a5c8e6340e974835aa8d5e36c63cfafb67bc1388d94e2a57f37056ff1925401f3ea9b497ce7750af79d45a8bbfe9cffd0597a0ad17cbffaa0f90451ac25ed14e807e4ec68e0100373a9d951d094c43308ebc195aae1c68067e1308bbc6144d0464"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "464d0ed294396d610f6b6ce100a876c0ef5b6d3193b746e2152cf437c422a2ab89abca1af36d2d585ddca437e43f9b045c129147820b0ec937d75f5051bb70c528ad9d419a38c9062d665a111e738e44ee9ec9c0f06e566c7267b05f8bb824854d4441c4cd3ba152002c4425e42e9e67926ee8f152f4b76f8bedf50855bfffb23780f02897765571a66b22c3b91fb115ecbd8f6b60b47761cb89d776d8376fd7a7ec9f267e4a27c0339d05812fb98e332100c3540d26a13d1122c09ab64acd30092f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8b18cb31351dc0e00052722e236ab7c57c35c6ffff24a1dc28a56854f48ededdb067315234f6b25308a45c8fd9cd8130ecb24cb5ab0b1719796681fcbb4fd007f92c7d946545a0ac340f7e641cf3647756e08a96d4bd3396b691c9701b149c0c3859fcc922c76d2e827b5717198f015644301acfd2629840a0196e00e9f50477fc561dc69c8df6322d05e922212f2a5d5436701bc3256cad9d868cbd3ca4616938c8cb0e6dca03d2acec7709aa0dbb82b558b912f7e18283fcf13b7e32a992b222f341"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f9962f0b9c6d5628577fcbc108d5708c2ecdc65c157ebabadfc68350cd0734d8ce6277544f39b16438f3b29b8265bfe421eec22f854e7ce8c0d165ddb38ecc523d895704764dfe263303a72db9aec08b1aaf5edba746b585fad6af8b7c61c7753cf9f1fa6121959842bcf74566cbd18bb8471bcf438cc3080feaca7891d326e627de7fb0f104851f1afcd832c3031366406953581540eddb0834dc79964facab1e7b8a45a3c64c6726e3057f82c22c674cc09f41bac59aaf3f7c727f4cee52306f91fe4f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "fd7af4e31d0f692bd74c4089e0af8890a933800b04521d59bb8c24bacc43e96193fea4475bd67419153362b83e54d235d7c7816d4027197e73ec1474dd2d7d003c1297eaf6ea80586d748cc52f1719b73f66cd6174c09c12524f960cd4d4bc26d066020d2ead9af8210bb78eebcb7e480604a1eeb15cb5e3df95f8d701b2d3ebb0b5b06822e157f09fd5a12fbf6af1762ff5cc9a7bb780237fe572eeb9fc4f52ea8b3494b1690fa5809819af4680070d25081dc00bf531710a13d8b661fbeef104ce7bce72"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7a366aa68ea6dd5eaf6820ad9ac4a4863a3e67dd54d1d54b13f4bc88043398a5bac0c735750e5d3d65c157f97cd981aa1ea489f58d6ddd187fd18b8c65bcc3f36e22f564c64786254f319e25bdfd3edfd9d9cb744e7d36115788ca119b892ab4bffba4b467eeb7be8bfaaa09d902143765622351126e1d9707929350701875d512a762d28ec4d9e506d946078be66c6f57b9f5f21d8121bb339e9688b52a7ec1af7c4d0755026a531b73cb940c512d28d3421a302d83acd915ff2fc3c2a45ad5ebd91db7168b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e29fdaf8cae1f2aceb376d53f550170e5d18c44b3083c835340ed6079f312c7d1776824a4604d7967efda33b3824f106abfaf08f359555a24b78dc8ed6787186b8650a19adf64a8a7bd3d8598d9fb4699d3c8df6007086b03141a78aed1fab1ba46d4ad57d6b165dd2a405a6725e50d7bf0114728d1f81eb542abc72ebf499bf795f58f8bd0805b15fabd16de34bc646a7199e2df0e80064a9aef599c9d60884a6503fb9cc50efbc6e46d6dc1c8992978b9cd67b6d61b779c99e98d01c4c84a258a3318e57672a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "da61658788de4b16bc6eae4d9999785448e4055e730629275d1dadd048ac007440ec203f593c4e790cf9bdeba07ac926ab4310c5d6c196fa62dd239b22074bffa535fa1e9616bf7ceed9ecd56b7b6ec1d1d6f88c8672fc4087db0488cb0313642599682a5cbfdb7b79cbff91b4bcf76ad8f779d9fc2fa8fb95c4123775c7c0ffaea19dc28f310aa40cf734b8de7aea233c18b40ce01a851d0e208017e4a8f36c74d344a41dce80b6b180699021bbb13670c2c6025681b730c5f2ea581923f900c9e42baa2d5e0a38"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "31f1b58b087a656bd501b6b89b95e87ec36db90469b3ca02e8bc2b2f2493ccaa9dee81e8877f41a846b717ab550bf3ddc60438d747520f28ce4c30db9ed6be0e5062e5bd4aeeda7c42b94792247b383423cc24dc84613b1c8c892fd3c926267a1f6b290619be07126a34a442b860980967844138155bdf8fc4869115fc65fecd28b16bba47b4651e8bb586c1189dbb7d557124e04943ef79754beffdfe63ef9151610abbfd7b9696b98a6af7f5af088a6ce6ab23ec7533b7ce2942ec61bf9baedab3f3768205ebc85b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "77b6b031b61fa2a66115ba10bdbce0922cc3a5fa29a1410dd5e7021182389319800c3c2e3587af3629ae821366ccd5fa498960786814c3a2263a7b912d2ee866a35a51fdce1df8c7b9c6a86659bd6d2a05d665fb0b6f39582f26d648420abdc1f0404739b0502f85ce9b0d034d51a3eeabc562a8900ecee65dec28e111befc3c62ef8f928e707cdd2ec76068f3d347eeb0f062f6abd23e7c0cbd50061fd462dbf07bec30ef13ced3e5c65d2d8913495680a71a80275c0ca20d7a693a3b25f8c96beb78dabfdc55b8ab57"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5169d680a74be335c0bbfa5f28985595b9d23b4a7101f92d11332ed5938b578900c18b6c2cd6676bf3bdf93121b6537d3aa97b3856b2fda9dabcb1a01f7eec7bdb8239dc8e6aed00f08bce422ad6b834670c847684669c84739ee2e26baca9703db038b92b943bd9ce0f8fb2711e79f8722115e6d7b8eb9b5cbc2b7e318fdae83edf3dc24b400b1907c8b8450c6b31bc975ed4303c9bcaf84b4003077f7c39514244434f7ed1b691ec9bf4c01005e14f40e1818ec376cac21d60f3986dba064f48655a5ca9a9f6045957db"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1681227674cf4bc7124559c7c3409caa4eaec0f895a35693d454e44d79166bd93d29fafb5750c4235609d8a6545b19685a3049466c1e9a01e79221ff4d045390d3493186d116eef714a26e79dbc38a84d2b44b5909524d123ee2a1db6c5fb8d97f6d9776acd3a77210107c2853780225d49b8aebd00486eca5f469d0fb4ede6a7bb72ff92d778357b25053307db21b4f394c120c42712d52fb2ab3f803b276d5d81619a94560bfa0dbbad76a88f6527e453ee3eae3cd0dad3e9be3bbda9277a167d4de833f2a0876f13032a0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1ff6e40a736e0aab47957a8f9631e7b7740645cc10e00ad4f1e95837bd45dc95f44d63139c28351c80432d195e8970222544d7b9f31b29cfde5bda467b814ff381b0af02ddfca8199f18aceb656eaf34df471918b5280c0c5e08ad17dafbbd22627febdf9e62ab1fc0beea3f3732ea166b4715733ec2c68262c09103ee96b062a0d112af1e800cff59b970101626bf3af5ec665d9de91467101e8a261dc733fef971639ada5b8c7679efc6a83cd6195fe5ee933efac81e8f83d0fcc4147f6dd7ddb35c1d0a17395f3309c4328e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b44f695a21679104c2ee1662abff4f654712c990c2b8a89141481e5f33757484a2b921e822c5f37e5703cdbca480df2813163bab64fe5f7ee2958c6e08d2296908cd2aec4b66055f4d64d39967fed56f1074365d1d0e973cf10cb6b8b872ce0debe7658d75d73a4295d858b316559f9ddd9c4adae98143d990880dcac0b8f2c803a6162f0627bc18e8b43c0ccc1475fd03c51b39a64d93e7d60bc63de383598833fc248b5daf8c124ecbe9c39e1be8cd9c0e5c453936b1370177720f2d0b76078088ae483018ae6d5432b4324aa2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dde2dbfa04b50b16c03e7134981e2a947f49fd05ca06c25d3dce5203bdb17a281af45a291f9e0c3a463468f90415322bb4e61ef0016f47f169e0cdbd4dd88b352f6f27c12ddb9705a1269529eae07f3d34f6ec9fd5ac8eaaf3f20fb1961c188a771163c50778dcf452ea52b17723399d3f8a02967b0e27cfa61ac1c90adb585d6fa504f646e3d08c9abd695405563ea08b0163c6a4f91c88f7b0321e4393e234a355e3fc83a5245ca46cc6236e6f053d854360a7bf379f521acee6b6f54deda7b2fe233208d75ae77db9d1d827afe0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "fd0e4876256b31547b3bc1a2c2def5c417a5d3fb2c3771946784705528611d0bd60b1b5bedf3ee074875b6c8f38f57eac0323d85842dc3980c133f785379ae98fc732cdf733e7600b0cdd895b15ef0a280a01171fc7be87995047e70f8f4a1556e4cd7f0cbe0afd63fea4e51d5b8ee613ce38241e6f6e9e25c577cc8ad7dc914c0f26314a6a629cfd85d364ee73db9e888036fcad410478b563590aa10324d0b7d95618d36210fe8d086808b09fe52939f629d0e083ef6b03c1bc46b7e57779649f5f2b5f9f2e7f99d4017d1c20de6ce"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6cfb70ed1c1ba261bb608217a062828357f228007518657378d4c633b5f15a54946cdf4a25f3466860339b42ad84b2a13553a8c7e49999716d7c8bace66ba68bb499d7840c622fa93245bf144b0bad70bdc16a27ec9bfafa92a1a58e846c3565d1309a29a371fcc2105e50b769f4fb620d839f042fde48e72a01e5889154f0572e31b7d6caa4326f393cba00100404c38ba6150465cb181aa29d4031d3e2ec3f09310caf4dd0bea9bc5527aa0161e41ddd923c4c0885dfcfc08ff92e85c703901dfe0ab233066a3d2d41a282d77fb767bc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8cd5d164a2b79c9e78b6235e49e62a174b7318c8c5b9a1e56e344951ee03daceab43c7ad9240e6ace541a052a1f500145b4dbd6590bba86f094f0b0696650c64be3ed6d041acd8ea6b0a32082eaf396faadcf0ef1880eb8ac2fbfd82b41f4755f02e970061328a7c8d93de8043d6d8df00e0e3527ae796738be6a76513e12af27807e981d152aa64892a1290c5d28636b4f7917cd0b7c4cb84fc00f4b9687e195cf77a52cc14bc1f5881a02f2a118d2296f7a254ac1a6d566ce4c04e91e42c398ae305e406db300dc3a9d450a390958fc62a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a7a88b8862ac6d4895b627d2b4ca88f144781d69f64da7ff294b92b1f398c8740f94664c8262d5f1a47ec35cb2442fd91f5a0e74317782c2dbd861022945447313d7e5d17f930ab9f7e546dbc02e5df9f07629baf206fac4c3a5bd8de1d4172fb99bd2423b67c9e6c16d5648d3a95554996fd9d8ffb8a0dea44cf70e9f3976c53187e3f54810bafc49ea8164f77e8f0e6b1207445940b82f7a2ba783d9bfa1bd19cf847d7d6a5eb5989433c7aee0356a021b0701ffce133cf2242560b451abfc240d23ab2584de14bc727537a7b5fd582c4322"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a3dead87fa53514025d8523b2ebcd89c7136c51788a8828c4ab62cf129e39a13f0ebaa2c990e621511bb6e8c1f948c4ea4775ae68263f368d7a7d52346a2fb45fb098d7009d46ea17078b8a0ae8a6cdc2368e6df793f5362bda3ec1d88959ae4aaf665d6d755902c908bba2ee95a38f59a5bfa9564103b95789f31f293c8766c51d8f41fb598581dc1503a8904b6efb74071c9fc7f5d6028a609bd4780f283867eb71e5754d1459d70f5393a5da9a2e0f90492bba2264b3db26cb4294082a8d98cabeba6733e5081a8d026f8a490858d8855d239"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "cbed99581a74de8d52bd80a970cec4fad1deba42a37496c7a584dfe75f1f883e1810b2efe18d59b6d92d800d1a0290b956fb35f8f8c9ba0878e0e5d477fa1d4d3fa0d7a835a25cdf9282ad93dafdfd90a28d7314d42b4724cfa495a599eeeb501a719168e38dc82200a593ae3f34920eca33a0224f511247a733f03ffaf1ebf476ad3645c3f1807bfc01619dfaf8731405d5efa106df774c0f3f018f8a545def065578651b01c33dfa5643d4a1b03dc9953bc943ea097f1a616002400e1cc4241084f63acb935561e0d3ba0ed5e487ffb3cded6a5b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "cebc668bc2e2f5089abfd20f1e15167f923a3d8514839eba2d6321f91f4cc7045ccb9d07f77bcb4872e42984e54b78f2e1c5fa66882c34d0369342b78d05443001b6eb97943f80d90689f140343b7b8b7e0eb2b5aa41d270c6cca1062c11b3cc6e0801e62213cece8860aace2a94176702f5e5f3ee31cb09e8c5b18d5d1e99a66492b115f11eb951e78b268e19009ff509605c66cc319d38ac0402c20d384c3ae4772b8d3aa4ad03dd19a639d5dd4a7e88307d68cb7bc13d768f1bfd7724cb2da50812e77a516ed36a1666b23ad3c5d8c80f4a94b9f2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1241811d00320b1ba7c370bfef2e3f423caa0680c22d17674db382617ec02be7c360bfadf95329ddae76919208bfe6f138b45885a5cc54e9fa46096707625c8b6a9b2be1e29428a98177a8c7d703969fc6f34c7b4cbcd316b7515b23502d0eedff8dad2d918b2673089160ce5bfbf1a03fa43bded3b7c006fe23af584a577b6518238706cc1ba6d0f462bc3f62e68948dd2332fe3ab624df9662cde869cdff1b8785a08af7f14aaee0217ca2e29b3e1679acdd25ff50958aaef05c13797bbe4992ba77c3091320c5e1b237decb7131a1eab79dfd636260"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f175fe4bb81904142c7bbf271a3133444b8fde748d151672c471392458238dfd84cb643715705e2f21d7193ba52e06b81f6644a8733eaf71aaa9b24be772e6491b68717d6755b4af4e45f43cf88f874fca71a01e559d4a5a1f60c321d3e0ea0a8854b8d51ce7f8febebfade0edcf04a74f3c21814061cc7e9e5a48a40c49778a803a0eae7449f73512016f272784e32a4cc78c8d0f30ce3832b7e2d324bdd7b0c3d09ca49c654348760d261c55b56cb7767535ea925af2f0159780bdc8906c57abcc6319f2a5e9f16bf6729bc6e919311e5948aaffd84e89"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8923aa7bc888549a47f405f61f09cfd235a9126250566506b7576d1c65a7e49dc76553f1921a4d1e1458c35bb032d4d804e421d8e19d9ee0dc80fe4de1f06d183c3ce60709df1726450532ad082275bd2552233bce9b15324dd1211d939c0ade85a16b5618754c6bfbba9dc15e79c2e69d375918a5301d8fca2fc5fb0dd02d71490575192497f769967c5c5a15a3552109d862c5ea21170db9a660418dafc942982d56a46181ec290c6fe9322738f00ccd0dab2bb825e557e39d61662409609b5d06676e9801ee7826076a665dbc9a0b65c17fc48d6223cfda"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4dd761fd488c41c89c1998a95dcfae35c7907221195c6747aaada8e37b900d6c2f1a69e874a088dc2a7f01c31c64d877fe0a970716446135af511380276a51b067ef6a4ab914765a36444add895d4586a941bd1ba8db907487159a968bb8cf2f4457585b331cdaed2dd327b972c5aa71eca959add6dde4ad0b97f82bee9dd5ce457b0bb3b6da042068f6ff2bb8c20d8459d44172dcfd6139215a42aca13ebeec835357d3e7e01b1a684a4089c1e502cb655331acda4cd2f1c748ec2d86c8841f7606cb13271710ae816d62c3e7e4e35c968cd608f54bad127074"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "af5d2912543cf85417cc243ce775ca86d09a3463a6f6caa554834cab060d88dd18678dc22c46c99529709afa2499e37d58e345a72d40dec191ac1035b9eb6cdb85c41e6d5935574b9600e3b6acbf9292d237b410827e3e4ba40023141e19372bce972e16561983a0a2d06b5659224a8cfb4fdc253311a7c7c3b08d34db27c5118f5423ebc5d0503dba6ffc8653b5d0be4e82e3b0d3cac1f5b2a5efac448849c42d775fb659b041dbc793c0b64a58e884410d6aaf69e3d7bcd7bf500e61ef66f16f77ad1b4c3f009206577196be081b7aee014f4d62cebfb6d058e8"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1317d1f48092dff2f78bacd0ca292e7a36839ed52d7bf1e0e729ff800372456a544ece4e740443652b67dc697e316009b3dcecbf9cc471193dfac3935c81f928744770a8b250159f44de9461f068d024927d5d8a4aebd2061fe015927ae67658aa48209aadd2115de5d02fb55fc5b4c274c7c9f2dbe218116fdc235e37d07a9fc5747da978c4fbee1244e5210ddbda05984f0e3dbc5b63359d2c928051a4d5ce6cd3857b6864ad1dec588ceb6306328f925f195a05aacf53d9340427f5fd433289fa0320f073417e68f356e4e6e5fb6b8a2a467af8fd51f4092afc10"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3dc8e8ad7119b010d186e1238acb4bbaf33a2d93852ba91f733611e981df6597a87226f6c6d41edac6981d12e7642daa82c0490fd150b8d57f790630716b188af8285925fc0ff8457b4aa93963adfbdebacb8ba89fc4281bc56e4562a632e030f47093a7a44ec563c23dd6556cdedf899a2d3c1298f63e7959716981f82743b3f4d8cca371c7881550fb30bde8b7feba2e80d0ed5ec63e166d0ef17ddf8db2cf8cfe983d88eb40b0b10e0c9a9eeb38b220f7e013bb952c86b5ad11fc570f525c0125e01302a28ed8b1a97cc79edb87846a8e596c4d28f5018f2387a1ef"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3a2f35477d7056e9ffd101691d80926ae1595c6fc618be62d6b24eed1922c1fdf10dc62d019a29b87440f3f3311dd90d0155e726eb96c3a49d985e9bf719e1480ecb4f4460d16cac29aa64b77e58d9a414160ed5f90ef0811c161c4e860a2ac705c988ac3567b1e63de780781b61ca6e8f16087a89e5304ceb7a68506ffa692194130eb82d1a458cf0057cb4a08346ace3076c72728c4e7abab4bf0add26d33eec3709a7644bc2c7cc355a10887f245f92fc049d733dfd1a87d2b67c9ee12ea4545cb84df60f3d8ffe209b7ac2fb3aada065acd7138d3680e36802f671f0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b8d04609ff91f7dd457592d183d5482fe26f2862069011c5255d4c265c7906b55c72d2befd472309430fed0664b39cb67d16fcc622ada4976e2ff23c39910f85566473ab6bf0f5a8e1315310a2789ceddda80cae84f48f7a2d6c75df0277b5424d2c54c20209a9cf298f94d43b7769ada163ad1b4c2497e6a2406d41af3cbf11d233b882a46ee9195ad7f511b3de6369fc65e34ed54715681bbf8afefb337fc2f26adadecb429fda383b56a2529cfc7aec86b6377dbc17d03557d61f5410c106672d3a553c36e2a3722663f47d75c4c45595a9e7579d058aea1b35a5caa836"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7d2f8d13222f1aafc0a47689010713d019feede3b1fdfad25def42550cbe918f5f4829787413a3606f854e0d431c6b2761d53f92786e969965d06700a39945adbdc17972b0ce501ddc5c6dd4b489944611ccbb9e62134d98fea9ef5bb6b5f7a684d971bc09e21fe6b40828199864516bc0b00323767a6d9506c8e3aa47c7676feaa60c820d70d0d8bfb7c3b7abb8d47eadf3beca782c79f6cb469c7c8c3340c14896b3489cb950fd23c4439a72f5c8a9589efcefb85bc786ee32124030a1c6d346011ef105cddbb398a6fef999cd19b04fcbbc6427cc385e8399d2611f0f3e65"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "723898ccebd8d2746ce9e3796d429462fe9e34cec7fd6c863e3d90c4f51eced7e241365ff428161a6762544675b6c805e6cc04c625f4d727e6e2e596c501ca5d9baab86c7b4d04fe4da505acd3e2d34b477ece7339b2064ae9f8d991d4f21de6273fb32fdd789df450b3d10e8961a5061290af31ea4f240a512da433fcead2c0908f9a020a0167fa45b7575e65f4febdd63ae251953afc407de50c5ed5da15384a16b5bbd86ff3514cd1f7cf2902cb7192dadd848987929121b051da8de022239c01e8b8f40379c0970e31ba98859bc5349637fcae05c8a50ea7c00fa3300b1af6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6433591eaca79f1bb52aef15dbaea5e19f2b29312e594ac58702c3f96c297d87ca6ee2bffa2f961f41814c410b763125ec7a412e0621f32fd4b0fe2e17ac262c75780bd43877c56c413c2a6bd8c119ea73baf2cb821d46b7684f81101d3ed0429b6a94ad91742f7bd51b11bf4c12e5547c30e870f8e407bb5ffbdb96b10f901430eaf3e650b69b7802e93ec2c75d05183fb905f21d590e79617e4d08838a1ca126cb47d7e80a55253444682b49543b97146e71a96ddab190821a3007b28b55785442259bb2ade35e0cfe11e994f3894b7f3f5fceb341734e6b52d7e22b22f678f283"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7d7e6bca9da076e7e833dd86bcb7d86fa305755e46e252eb201982fa3a3bd7fbd5d04d9077908a694de27a236361ea68a1f04adc231cc3856de97941ac8936152c51fe55e02be1673f315281cec9ae3b3f10f1668a84c1a96ee3f0a889c22cfeb7d6175b3bc23052971ae2e88b9be6fd5454b6256b8d62bdf617ad6cb22ad93fa02a20f1a3c29cee6447dff6806bcc7169f0b94b016c6a68f0b5a581a58d41a0cab986d4660cedcf1cc6113df7423bd486ef4e4b8f7fe33f3d82afccb9c86eea598156aedc90bdbccb75fd55c254975a193e1a6937e7a5ea0aefa94de7a9667565826c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ac91aa5434938c1293186c76b7ae28a8437e621ac79c93b4b8145de9951f1948fd4cac58b781c3593a444b51751297db4dfd6bca2aa3452156f6bc412010da90270b09b6c5d0e4d8d836dadc2bdc35152ec6fdec7d1faedcb33868c81717100dca6bea92e08408ca6d1bbc7b68e7f71ae48f2fb2117697b9fdc4b46cccdf2d81bd6dc8c76c225ac71a49548b2f3788e47d56127a703e6705b08f4949738415b3392a701025775359ac29940a12161e554e50e6a6d5c0229039b25326ae1a61c93035f68c389ab2e88e8dce09b2f55d9291e6e640d411a543f5e97fa50eee2c10aedaf5fb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0502fd59c54a710da5a6c4060d3573de3ad4c9a5a570722f95ccef846e5c7a574c8bb772816a6e7dd5c56331af86139fe7fbf3d7a3fb1c44c9d8579094c622b061060ef1f3dcd77163932ee6fe66af70d854e31ecfc086979416cf3e193c5dcd19ec1a9933aac0c04964981e4f76169a937bf9a454d9ca413d6a1097dee798a5f60a20b0643acb48c7514f026a9219a8d7aee6087584ac33a8c52af289699e604f2659bd7fbb45342cc3be9e7fe7564fa0332e5c2233daa9472f59d59f38369c1d153cee628fd5ba511c0f5df6deface8ad81a2864d403273175db913047b80556da8ef76e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3d7eb388c75f23aa5a413c1aea1fcb3ba1d76123bc1834b5b973b385aa12eb0041ab55f571c7432287786ddae33539ca8777250f7f1960c973d7afbf561c274104f3c4cc033cab139247e43d98a5c814076482fe829e2eee0e302b3265676fdc82cf921935d19161ae814394cda9818f8e7c2bb4c56565790fffefa9ba86ab35816daa9bcb35f11e72637e7a6b127d084057906035914ff0ae08f71b601d755371171d249c7f87586e53cef8e175fb6312e8771ff5ead9a2f68050b8bf1add0aea7a3cd2f6d18eea57c6a7a13918cf7ebeb21113d09ce9c7a641a34b8ac22c9c164e9729ffda"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a2a3b9a7c7f17ed8c51f8437c92e8918d0102f320227682192479a094a0cd6401d689a24f0f1f0ec7ccd7d5343391a7ef7590db47c83da0b43c133c673a679b49dacce5386a92c50880ff2803489a1ab8edf6212a155dfe8e3cdeff98cb145ddc1a9a1260385ffafb175e954d67eb5816c4da009df5a21b96a5cba8e77050220abd4f0b21f87fd44bf0354b9ea270cb8e428bd2d1822c8ae57256a413016b67894a3c38ef74bda287c2ee7aac2efbf244bea3dd1e9e94b0e1a5b18295f538253d7362e0bf0b5c090ca4b537e692bdb993e1225b23565cb281372f4d3a0ce247b96b1af1db06da1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "42563ee8adfb99ea56890d94074a727c47d0aef5756145a92b1a41ae4cfeaa91351c88668afc1c4a715f35d265a36ffc103c5820098b13f0bb4ec0b761066aeb521a3b40dd40bacb45f58908cb2742e453c671754e85cfc43b12ac385dc1c72883260196658ae345ca16d16a08548fc8197709e3d026b7130bf6a0a74375dbfe619e64d35c2577f8e2d53eca56ae60d11551208ce41f95d19f789d909b4d9fcb52d289ed8862d5f1bfe5542b9fc68dd49d20f673b53a06e2ad6d74725e1180228a2dabf7f2089f4a974a22e91f3f413c2a4c18d7f5da95152a0338c3f406b71d760a9b2c32a5328b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d699a03480c769b114056f7b8c1c2f4ea6013f785216a91ab9cf02df1a72625162c74979bfdbb938f76e0248f7a18c20dca243104aacefd8e8d2c9eba6ac0123f38fdc6ed1dadab1ed473097276f6c1a50d1d6fab39f2dfa8e78cc965d5875f73c703785c77e346c4ca551aa4ac0c25fd74567555209aa5bc7b7455a71f3d6cdc94a81297d1aa2901d2be9423f91e4d2c6977355910b0bb0dfad851e87bfca350e1406225dec1c514cfd2325411425c71dbfcacd4e21338980af552e5f833e4743a96130e71988005a26ecaeeac6abca9fe7aab0c8ff320ff135195532bde17cc5cc398476fa935597"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "cbc516abdb43cc8aa4d6e8c0dd28c4f8a1286d510a9ee9db7815814b635c6f17dbee4d4d18442d03faa7b21bc9756e7ab276f855d8780e2c35e0fdc4e6e1d2c7bdba75b3236e761289731461427e89ae9c36b815727740004c7aa565b9c8e52796a67a5be792c01365e6005d7bdaf71eeb26cbb67a2c503e978cc1469cf90cc5c67a0277eb78227c66c999fda6d87f6e2c8d69ca614f5335fb77333ad53bd64a904b9a588e99d5362b965fa509829bc88c5163f09ba40147e61834dab7316ff537eedbd207ab34c103c014048a33861e85d1e5384145a002b0d21cc0dcbb55ef3ebe8c595dcb910ec06e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e63a2558d900ebbee7ecf56cfd1a20b7ed133c1476f9504fa814917cbd3057c729e38284cacdf8c6e65387be06664ffbd5dba5523186a05231c377b26ad453b8ffba3439d44ea10e4a12ab7038da3c734927d88769a00ec15d39dd2d7d2ac8bef814d06bcbf804889ef46d2ed58bfe2d0bc4a9bf10594f3c4244f7460f40eb1df72d80ef4c20ea18c2af5a059ade20d634e3d0f184a6d025ce40759ddb4de99746cbe4afe858893c2a5c2f51c19e47e2b2a36c7efef85ac7bbe63657253a2ebc0915f09f288d7c2030f24c923dfd0f29b66f8ebfdf3cfbb6f551ba7d83c068ba8144e566df37b64edbf111"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c12bc01a2001cca9b3b2f8aa048c86a70fb6f9c0f03ee16e0dff7154d5989c0f22e0d5db0c05a0a24f85e89e1bf1c1c49a7343158fa5827a3031fad7a3b62cf69a24f9d6541984c498b758a70a91576c0209be7f83ff47b3788de21ccb1f2c5dde0d654b92ce5d6c4da20f0904a453d2dbb2f84b43ff4d8ae84432d896bf07ee1047af1a942c5e2576917a279846451e1ab36843ff1c7fee1202e1ff7d4fb14788bf4ddd7bdc050048d73d2375440575b04c83127a5a4189b926f777f24d9abe76270c4f1c64a3f9da133180a8f6f88f423134ecf7b49df41c57b6c736bcb2c896f754dbc07f6b4fc807f047"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "df5437f55443ccd7676aa471db84da24295903a87f02dd95e23aa468f6fd60be2e96d1d4366e2bb831c0f396b9b92328baaf45641a1c19339b768021f6aa823c953fefc56e7dd15805f4a3c0f83f9a21b5b3a7f81591febc8f0b1614813cc4b09df3a67dc11cb3d0f4d0399101da60b7986c1b7af3d19afa3a245a6c457332caa28e4c87be2596b6662992631d6ea8361c44f7b5f0ae991951b18fa187de224966fd074e2add2cd4e442ab18118737b75751c32b5c14afaf06318c2011b08e62c5c2bb35e48ab946a59be2ba6dadb3dc0e94b69ed0de84f02d6b5c61ffd4bc42cbf393b51760583477946b5417"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "491baaaf3061239f157fb02dda59e76f995c710d6170179821aa556264dd237e2eeb3c1b51efb94623e5603a0f0d3f0cce2b5ace1108e5c1f1edb359f5e1d65de4c99f1f48cca747adc58786515b955f65177e36f4f5c7fc696146fd4e7f7b9cb38c81b215fe08b6f034710cf9076b29dad70f8795bdb89bf4688c020fd2362feb2b6876fbdc9cf0edd250709cc7d059870f080ba9899f977007110274ebac11373578d11c93b1ff5872253aa395b1bd0b4e9da71c273dfd8c98c46d65d692c688adbd656bbcadd4ad4a5531e5ea96728afd25da0ea6c3b472bd5924aaff2b0e26ec6e0f0496f1cdd8c3c8cb34b4"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "39d12b605a6241a2a239a9cfa9936556b2d6f8d961b6165425f0a9b8c63940db014e41ad93aa9a94e68517a7553a4979a58eb24238eef54baea5384836be636b9953893114830467065ecb7b5d8b53fe8d861001f3c16e616cc5cbe0650942b40b068dc6740ba40684f837685f0581d699ec34226967223228bb73f5449d933c2fd7577b4f5feb3c98c5cc890c86e56e666b135c9ac46ca67f0ef5f4f5516beb221006b38bb37c1e8df9b549a5ba128fe168b83752c588d0ff9ddf725d31431f0ae085b5dd9f251124e0d575f9f79b6d2c28ba8d5c79a7d106c2617f77863a95fce0ff9962e6a21c4c00647ba27e8f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c0ef3d806481d316ab62e4a75d42256f653138e6bfbfb42c398e88ee6f3d5ee2e85c5f6d407196718cda38c890111f2ca41a20238fe78903b1071591916b964e1cb15e1c357cd0f2c30aebf03a3662e14cbc1cd5bd4d58cf0054960edb9f091e3f4ed6c11a87fcdfdd84b8f5ca3ad8f1e4e5f06efd9594e1c5e5240ac9a8a373e140850d6b4eb4df20da33ce768b46a645fd73ec0fde5b799d548a12be5452492e46dba3da03fccce0cd3666ce88373ed07633024f29dc883c16245f8992b0b134e5461ad8def4922b4911e526f3e3c72b121fec0318369d1a40a4fadfa5078585494d3926b7ec6fc522fc85e3eec7aa"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d9c78eb756dc9335fed007b1156ee7d89356291bd1808b025b7ac3bdaac8597c2a68f3d99890c04578ada7fad23125dc1fdee6e183f17c332882979913fd2610352e61f4f1b6e3c711907f4c6b5ecdd5ab5659b9788ab98e734455ba2a564215c7cd147a838e4ee02f4f35fdeb38706e64d23b8dfe3a58b0e1fa76c63038dc6aae308896bf52b9f851b76f3760f808b00e17442328f78287161dc283affb00862dd500140b86ca787bd58fd20f8425d2b5735467f723db7a0f9d1d08800ec395078a5470670056013ee95d7e59eee510fa23fe899a59594a3f823a1d62017a03bf464135c6b71f405e774c25563218b45f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "fb4504919408017da6d8a0622f6e95b9ed6b14db7841bd44f046eef98bf26bc834ecb3f4b7628ba3a53fc4d75075a25bfdc8536d014a185c0087fca9e011efe29e794b0e02719b617470fff50b02562a521e6c109a6cc183d74ab70b60ff1326255f8de02307cae03ff1bf49a771b5b311daa67cd4131004b2a1efaccd1d157c468637ea400caa891a531261b32f0fc61b241ff0fb8d1e8cf90703f80945a50dbf8edd650d43dd1c19dd4bcfdc202812f7dd5fe7d66dd39b3a9be37ecbfe1d0b3609c79cb19e49cafac783f02b9815912619cb3ccf8aaa47362bbb98f21fb48f61dfbe20d48b281fac8263b84b7c472b1719"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0c317a9baf295d07e050e015a73f8827778973d924707c71aac3edf5e0f13bb51ad4f391b56d9b6dc204bbfc71d091d274fbb21e38317b7844a5e1cd58225279471401512a874ce6da69b364e2bad389069892057eba683f55b97ca4d18febda810eced644b6475fb00b64a4d86e81ba344a41b8b120eb63b047a45c9251c396448b07afa0315e062f40c430cae51448eaed7946cc58c7ff05917b564e6e4f99d1522be04d235659b3dc1e3f7ab0e65a5bb1cc3d26c1589e8532cb361f6bf2ef0b6b27e57569030db4e543a684c17db3dfc6bdb984834d842fd3642412ff88453d78dbd0cfd3b0771b6c0fb7ee38261cd1d103"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3edf5d417a0d1a38a3a57e5265eb8df1542e25d90cd64292ab63713cb4a75b9c94850978fe2bd2f96f160b61c51d62eb2092d19b70c4448c2900f57f861f34425e2af6fd060c94f237fd4cccb745bee2bc47d0b4d5d8a57bd612af6109f5bb9a964bb4a6360371bec3bf851c269aad8d0f191eb7a9b77a1e98bc096a9b5586252526508a1c25cc1f6b0c1333f97c86a8799ad2ef8aa123400aa8741fe6277a2b92a6c4d4edaadc7fcae7953fbdf5ef1b499f871f66809b0d72c9b03e9b49cd5b8a91dc1c749fada0d9a4595d085f4b3e7643e239689c87a73455b31c9c5a6e0b899934408edc0dab175ce25c659c238b69e9ebbe"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "80f4ea817d4649de3f998374e11c9b41c3db5a5ac86b53031abab352171f46b893592ac5650a5218f7e54964b962b297079751c1d82bfbb9333fac445067a04473d26cf96a71c0c8092a8571d91f4413bfef40807206584d04928a5243f5ecec60e42aa3e0c83a28c8df71075d9a52ffd3519d5e40a0b20d4f4d1b21c695a249b5509a540cc0360d2906d6fddb6fa327beb9b087b1ad4d40ad435a2d589406369e7655dbd6d4f6ea340e35301b4bc02ac03ca85e55c8e50dff67718a9c1aedb6a0334bdc99f6c8b4dd52996bfd8dfca840c10aa92f6cf9d84c3994f5719fbc8d6a9592ffdada572d32aef67a9d7f9c897e08a197cb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "32d5d8e29fe1b68a49a30ef65787bf1ce003534891700ca2efe6dc4ce4b8770857130cad694451c148ed276c6843cc92597b3cd0129a043cd2d0803d82dda405b4151c5b4121bc276540c1723f4ce0f490d5ba0a4bff3a92117898d6ec362cbabd34052b6f82633f059a9f7948b46ab11cbe78d23f5a4828dfff412acf333a21cca6aacf570348a12a44c2939d360099234c2a68aff2bfc7e6fa0af55fbecbcb7d5d581a133bc46af75437147bdc42bd2cc0769098953655b2a41b5fec382ce63820ff4a447c7f62c825e68628279b8da57071a0c0a187943cfe5ac99e8447c3cb565973642115bf78cab6884cacd202d5c086ff09a5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2042c8097d147442b9e0787ad9efc72f0b351bcbc3e4037556a82e29a6f0015f0c8e162513c6529fcb5e1e790c789c0022e34ec0541128ee07f3597062ca54e4bc9ac6566861d0d3e93212c229a318b379f03e480776b0c57dc0053535d3c94ebe54887fd89212bc3f1814eccbe00918049f17b9db59aea0e5cba970ec6bae937cd059d0eacd3bffaa19dc1ebf5f5cd90681effe1eff986754b80c5817589abf4ca404bce5ccaa066c4753494b8620e0a796f7892c6ee8c62a44a9b40f7a098d344f09b45134583f860a3b59621aa31b96e094713406674a9974df69d206eb8efaffc9b7feda8ae5757406e5278873d68114e11dc57ee3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "32217f6690884421cd6b0cb94884511ed0047b3a317cd2ff899b2dc866ece06ae9473018019124ab7f91918b9410a67f411ec349182c7f9dea73fad0152716d8f9910496e83fd50c56c93d5b088548071d65eae370722ac87178e62126f3a702ad323bac48bd7c238d65033c76187baabd952d6008723ecc4f492ca401b85fade1b219b31c6ede814e0ae35e1977ffd7b3b8c3b3474a3465a860ea7f27ee4b92852b09e4343772272deb760621bac6beb48143013dbe1c7ff1b7ff51cf66d02bd59e76604ad8b3374c688a05843f8af5e66465d5b5b738712e809d87587468c970e6239594720f1200b084fdd0829f282912a86d1c6360dd"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "da4830165af94ace9b01248bf2c373911096ebd83129cf6f454128c41efce7fea91156ab30a74a521e533b3ddb21b4a48de883c0ba7028420a128b3ead0a0d15d42766ce4d0607413cce1f947fa25f4a5ba29573554e68e005978d3b14ac0216ada50e02964759625bb313926f5ee7369fb3d4f50ab7e20244d2930d7f0113a44dd4b3edee72c15d57224d24b9fe9d9c1df2ef77f7566b18b6fcbb1f550f7717d4cf50b6666da197bfe2f4c3c23fe7d1ff6f770711dcc54ef9231bfa6ff455f859fb4be342e33a623723f17976f7b014ff8f50bfd2a687622dccf55e724d17337c65a1ef721c9ae68aece4906387078f058809e2a139e9755d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1017ee9edb76500379a9eb1011cdfdb02cba68c53e47dcb2a2e29075c1b275f6a60782257b69e23e92563e8e6ef00bd99b5eac94ec223279e18422af405b0708689e8e3ae56044286c80f4de21474b4d0f8a5e525ed4394dd285abc592fd52410893a4f5b695ec9015bb3e95d9b8905ee6357122020729177042dd1b1a36f3fb33f992d4abbee44753c0d911745a186db1dfbfada785e5cfdb119217107f51e33858ddc5cfc97bafb75d838baf5e7407176db5080dfd3f4417221f0d1673db79289f16cac33e1be977f75a699658a965bb4730118202eabe34486f35664eec62610260014755d2704339ce611e759eae087b9b9ffe237bb8e88d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5fb36a00c95a45ec6e7526c2a35189980e231aa36c2c8d6a9ccf288abe52ff56f77f01a0303d267fbed331bde0c30555e0f5a298b148fece91d802e3c33c233b535e37caef41ce16ab5df52070fdc3bcff00aefc15a552b0760769011e81aa70fb5740a3a568a15b5f72bc70564630209c5356dee3e49b1e089d97d9137f33653d81758f0a38aa53913753b5703249b5bcdd0104c86998d815951d5d0ec94685dbcf98e7fdbeae10361e9522fe87ba60c49fa6290503016cfd85a478a91fc70e9d43075b167058f1589b194296c750c6693f9dc245e9b21a483975ada00217166189b99b6c56357886e9a8063da35e9d20db24002ed36edbbd1981"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c6942d36146678f56f4f8cec34f97448aeaeab84424cc0ea957292227287ffa954d5186f3e133eddd0d460c741dfc104f0015165e5efb7ee33043b97e55b2995b7887c49a5df5546459f445819a55edee3fc39743352b5b197095787710dd55b11f88d1155b051b97918885916a59dc8d64dc31c2e1eebd3995bf144c86849b992a35be67fa30bbba18a565b1aae21ad2738236014cbde288ecfcb910a7edbf33d41bf59fd81675a8fc0f3dce569d0662d6d565e8bcccb8528328aa75bc98e09163be1ff113af4d7e4dd514ead744117754e54b4bc85c194c2f074d3d27033011c66beb70e984ef7b675b70a9eb73a3dc0c3d626bba33a87cde4dd68"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "55f5d8c7a4fb578ae7f02e9d627b5ec4e6279aaeb1791be6a030e00f3f715eff486affd8539d41fd7517588cb6a08dc77c0a3d2ad6be11492cc950d44137c3209177ca50e5a48073a85ecac000fee2cc97c81ea4c82f9ddaec4ec479219ceffa06052d6c0fd57044b7c69c07b6c361269aa6e2fd6dec3d93cef32cd8a698af82f676f211053787b69194552d03d3db7ddc508efb6336f17541d7c18b18e93854d24644ca999495e8b321303b8dfe9eb430d251ee9e265dc838b1d201f84018fb89cca117954c7c059927e5eb8ab54afe5caf720292edfc003959fd93f945dabae0c3d56edd430894c103f579a048ba0c097a17fb4954df8acaa46026b5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7c4634ca8c596c5f3003986ef7a26bbae711327cc9ea020b546755ebe23e4997731fc1a9760de9e44529a8d671f99f567db7aba5d8b594ae35a61bb585cd2a950f6c216f3173614b1f96ac120085f79106732e7bb55edbfe1b525c23e4dbb117a23517ac4a89cd3d09a39b421ac1bf3f83ea763c272f3f653c3c3807130d6a998394359bc5f51047c46f77af1c738b363cd243c10d1c7a0d9db55d8e14c91bced77065d0a5c21061d181ef6fab35218aeb065b49630b9e3b29ca1d64fe21ddd2b906d9a9421eca770639084e97ca4b04cbd522a355f7e30465219a5ac869003f5c5d40401d5e049a9737081effda31c6ea9e6aaf4205c85470d5a2ca2d37"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2953a3385e63c8bc7bf7f441756deedf21f7620528ded82100ee0639658c6b973ee4878b1ed8c7a9a755b2aefaf010855c64933c578cdf5d9b93f991ea044ff020662757901c1b6014f354f061f7274c2d912eae78601944be200be650a869219a9f67890f5d6a48ab799c3676b24009642690105b20e034c6632b36956e43d049b306b0a596d0ecc0e79cb1ff11824ea31e8d023bba757bf2597bc58e83076e1c45b2f0e9b72fa93f4423589401efa4916d2f9a82833f44e2866bcbb222ddec1b5a70ac5f78716e4389e566dff0e9c1b510eae7a3106c47eb60b8b5bab89acbe46c055a7554bb1cdfa485a891c3b548c7a5f1d38c03cdfefa5ead65031ea4"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d4a23a17b657fa3ddc2df61eefce362f048b9dd156809062997ab9d5b1fb26b8542b1a638f517fcbad72a6fb23de0754db7bb488b75c12ac826dcced9806d7873e6b31922097ef7b42506275ccc54caf86918f9d1c6cdb9bad2bacf123c0380b2e5dc3e98de83a159ee9e10a8444832c371e5b72039b31c38621261aa04d8271598b17dba0d28c20d1858d879038485ab069bdb58733b5495f934889658ae81b7536bcf601cfcc572060863c1ff2202d2ea84c800482dbe777335002204b7c1f70133e4d8a6b7516c66bb433ad31030a7a9a9a6b9ea69890aa40662d908a5acfe8328802595f0284c51a000ce274a985823de9ee74250063a879a3787fca23a6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5196"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ad6bad"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d8e4b32f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8eb89056f3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "410497c2ed72"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f0de771b375c90"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8662db8685033611"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9ef9f1eed88a3f52ca"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "08225082df0d2b0a815e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0f6e84a17439f1bc97c299"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "895ec39c78d3556cefdbfabc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2b396b3fa90ab556079a79b44d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "abae26501c4c1d6123c0f2289111"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bca098df9099b3f785a37ba40fce5f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "19b827f054b67a120f11efb0d690be70"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b88d32a338fd60b58570fda228a121113b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3f30143af1cad33f9b794576e078cc79062e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ffddb58d9aa8d38086fcdae07e6653e8f31dfc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "abb99c2e74a74556919040ca0cd857c95ec985e9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "71f13f89af55ba936f8a7188ee93d2e8fb0cf2a720"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "99734fdf0eef4838a7515426f4c59b800854e2fcdc1c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "579b1652aa1f5779d2b0e61868af856855020bdd44d7a7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1383d4ab4a6d8672b4075d421a159f69380ff47e4bb518d5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d3fa1412712dbbab71d4c6265dc1585c8dcc73380cf807f76a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1d57868a71e7245667780455d9aaa9e0683baf08fbaf946091c2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ef80418fe7049c6251ed7960a6b0e9def0da2749781994b24593a0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ef91cb81e4bfb50231e89475e251e2ef2fde59357551cd227588b63f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d7f398a5d21c3139cff0562a84f154b6953c7bc18a5f4b60491c196b6d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0a2abc6d38f30aef253579a4088c5b9aec64391f37d576eb06a300c193a5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "02dd758fa23113a14fd94830e50e0f6b86faec4e551e808b0ca8d00fef2a15"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a4fe2bd0f96a215fa7164ae1a405f4030a586c12b0c29806a099d7d7fdd8dd72"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7dce710a20f42ab687ec6ea83b53faaa418229ce0d5a2ff2a5e66defb0b65c03c9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0320c40b5eea641d0bc25420b7545ac1d796b61563728a4dc451207f1addeedcf860"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "460539415f2baeb626fad748dee0eb3e9f27221661160e13edf39d1b5d476ee0672400"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "02de8ffa5b9c748164f99ed9d678b02e53f4ae88fb26c6d94a8cefc328725a692eae78c2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "348a61a0136436136910262ad67ef20644b32c15456d5fad6b1679386d0bea87cc1a2e2b5e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "24c32966c803434d48d2283482ee8f404f598cf7a17961748125d2ed1da987039b1ce00f2ba7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bd07cb16121d3b47adf03b96c41c947beadc01e40548e0d0773e61780d48d33a0e2a675ca681a6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a35844e34c20b4b9371b6c52fac412afe5d80a4c1e40aa3a0e5a729dc3d41c2c3719d096f616f0ba"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6df1efbb4567747fe98d218935612f8835852dde2ce3dec767792d7f1d876cdae0056fef085245449d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "48d6094af78bd38d8f4b39c54279b80ef617bc6ad21def0b2c62113b656c5d6a55aea2e3fde94a254b92"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cd6e684759d2f19083164712c2aca0038442efb5b646594396b1fccdbd21203290f44cfdecca0373b3801b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "155dfbf26103c8354362663677fa27d0e1ce3487a821a2a7171014c1bd5dd071f4974df272b1374765b8f2e1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "15b11067f311efa4ee813dbca48d690dc92780656bc4d4c56510523190a240180867c829a8b8b9844175a8aa23"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9bc27953a17fb84d5eabe95b4ea6bc03ea450274abccfb6f3938ded8560fb59662459a11a86b0e0f32fbea6bb1f8"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "03b78fb0b34fb8662accdf350a6be75ace9789653ee4375d351e871f6a98ac5e782ca4b4a717665d25e49a5ae25d81"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "687e9a6fda6e2ce0e40e4d30fef38c31e3513d2892bbe85c991fc3715947e42bc49bcd079a40ed061c2c3665efe555ab"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f3886027d2049a8909e26545bd202d6a6fa2a6f815d31c7d520f705a81fa606dd695369c37aee4fa77dc645e9b05813ceb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e4a412ccd20b97797d91ccc286904fcd17c5afe8bed0618f1af333c052c473cd327637d951c32e4af047106036a3bc8c1c45"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "92f4b8c240a28b6238bc2eabadaf2ff3c4bfe0e6c61268ace6aebdeb0691450caea4287db8b329bde96af8cdb8a0fe2f57ef2d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e506834b3445e1a9a9b7bae844e91e0834512a06c0dc75fa4604e3b903c4e23616f2e0c78b5cc496660b4a13064bb1138edef4ff"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "27031955a40d8dbd1591f26e3c26e367a3c68f8204a396c6a4ba34b89672896d11276966a42bd516716f35ed63e442e116dbcf35da"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "646b1635c68d2328dddd5ac26eb9877c24c28390a45753a65044c3136ae2fe4fb40d09bf555271646d3dceb1ab1b7c8d8e421f553f94"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f6171f8d833743bdee7cc8f8b29c38614e1d2d8d6a5fff68bec2c0f4dd463d7941ff5c368e2683d8f1dc97119bde2b73ca412718bc8cb1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "45db1c478b040aa2e23fb4427017079810775c62abe737e82ec0ef8dcd0fc51f521f29fe6412fff7eac9beb7bcf75f483f3f8b971e42454b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "500dab14687db3ca3dde9304af5f54194b37bdf475628af46b07bfbf6bc2b64ecef284b17f9d1d9be41794699bc0e76c2878b3a55730f7142d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "31bba2efc7b3f415c3f031d4c06bb590ae40085ad157370af30238e03e25a359c9e133212ed34b7a006f839173b577e7015a87fdff2270fafddb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0600b3fb4b5e1ed0c8b2698ac1d9905e67e027390764821f963ad8d2b33cbc378b9c25c3ee422992d22b760222ed5697be0576d73938ae9d634ed7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4c0ca4f177d132594a4c613bad68da24c564efa3b4da0d0a903f26534a2e09f8d799d10e78f48ccdb0203954a36c5cf1bf24c076632c2b022b041200"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "97aacf2e1b013677b2e14084f097cb1e64d7b3fa36f097e189d86dc4a263bcc46817cd1ee6ff0c7ccd9acef63201cdc0e36254e19204a7388643bb571f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "71fd6846ce7adb0843d6063546a16b79b54ad6c0f018a479a45817624fa221f63525084860559d1a0679c8d89a80701c62743ec2da8419d503f8f0cd7946"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f73dfb046def3362d6de36077dae2cee2587fe95fe0800548bb7d99737897096ba59052e0dadcc1fb0ccb5535391875328637a0376a43a4d89366758dfe3e2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ec470d0aa932c78c5bcf86203ec0014314114765fa679c3daef214f883a17e1b4ca12f44433772a6e4ef685c904b2fc35586c6bd88f325b965968b06d808d73f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "cf601753ffa09fe48a8a84c37769991e96290e200bbaf1910c57760f989bd0c72e6128e294528ee861ad7eee70d589de3cf4a0c35f7197e1925a64d0133628d87d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f15413f7d6fc54bb55829f698da92ee42fcf58dde1aa1bd07d438ecdc32ad6bf2bcdbecc99f18ed43e81b33065af5a4ca29960ae50553e610c0bbf4153d580e73dbb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "84b1738adb9757fb9402ef7113581291136184d7ae35fe0b6a738da6acb0889d4d5bac7a957024e3709fa80c77d3859871ed1aa25cf488e438a2d24cfadce6008761dd"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e02814bb81f250c1835a05108396b74c7878e737654bb83155e241774d04e639bbc571b413cd9349092f926c8a149a53cd33e9b63f370b6d460e504199d2e7d849db6cbe"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "aeee4a789956ec0913592c30ce4f9c544894da77ba447c84df3be2c869100e4df8f7e316445d844b31c3209abcc912f647735fd4a7136c2f35c6fda5b2e6708f5ca951b2b0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8cfd11ca385de3c843de84c830d59278fe79b70fb5ddbfbfc1ddefeb22c329ef2f607d1d1abbd1cd0d0cc7c5d3ed922add76aadca0d2f57b66cb16c582b6f18f60aee2f7509b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "852e5ce2047d8d8b42b4c7e4987b95d23e8026a202d4567951bbbd23111e389fe33a736318546a914d2bddedfbf53846036ad9e35f29318b1f96e33eba08f071d6dc665149feb6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f225c23164979d0d13874a90ee291627e4f61a672a5578506fd3d65a12cb48a182f78350dc24c637b2f3950dc4882a5c1d5d5bad551c6f3e0093aa87e962bea51566af3791d52d65"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5f33864d882455f8ef046aed64e2d1691e5c1555e333b0852750592e6f00d3b5ec941d0c00e99629612795d5870cf93c984b45e4464ba072a34903b400a42824ac13da28c7c1cb1959"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7baaee7c3eb68c18c5ae1d45ba381803de34e36a52e2d7ccc9d48a297273c4d8644b473195bc23005f7a4f5ca790b1fa11f6a96e585e635513f11745dd97a69c1222204ab28d3c7735df"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d0a2a3fc450ef9af7ae982041feb2842901026467d87839c33b4a9e081ea63d5be60ae99ca6e42393ded45255b8f42886f87ba0310572d9f0d8b5a07ff4b6bae1f30559a844983cc568560"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3aa4164462b3e7044c35b08b047b924790f6d5c520b1df4305b5d41f4717e81f0cd4bccb9a5a6594773832b8707443adde4047caaed2293f92234df257df54ed275a9658fab483d0576d33a9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c8b4239fd7f1b893d978268f77f6505b5775d89090374322d40083b0f4c437423f670ca213f7fe05c61069725da2561646eefaea597ac48e293fbad44c2872046857e56d04a426a84008cefd71"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f94839a7024c0a16971271b6727c081770110c957b1f2e03be03d2200b565cf8240f2873b0426042aaea996a1784fadb2b27f23bc1a521b4f7320dfbed86cd38d75141365ba9b443defc0a3b4078"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8af934fdc8b3376ca09bdd89f9057ed38b656bff96a8f8a3038d456a265689ca32036670cb01469cc6e958cc4a46f1e80d700ae56659828a65c0456b8e55f28f255bc86ce48e44377bf1f9970b617d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ada572989e42f0e38c1f7c22b46bb52a84df8f7b3b773c9f17a5823e59a9725248d703efb4cb011abc9474e8e711666ed3cfa60db48480a8160615dfabad761bc0eb843d2e46299c59b61a15b4422fdf"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b11f1ea52a7e4bd2a5cf1e234b7c9eb909fb45860080f0a6bdb5517a37b5b7cd90f3a9e2297f995e96c293189b807a7bf6e7633bebbc36674544db5f18dd33020aeaf50ee832efe4d3d053873fd31ce3b9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e54b006cd96c43d19787c1ab1e08ea0f8922bdb7142e748212e7912a1f2c0a4fad1b9f5209c30960b8b83ef4960e929b155a8a48c8fb7ce4326915950cede6b98a96b6f1ecb12715b713985dacd1c1180413"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ee2c2f31a414ccd8f6a790f55e09155fd50aac2a878f9014f6c6035cae9186f90cdef0b7adf3e207c3d24ddfba8cd321b2e9228b02a1182b6973da6698071fce8cc0a23a7bf0d5aefd21ab1b8dc7818549bba3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6d6810793bad6c7efe8fd56cac04a0fb8717a44c09cbfaebce196a80ac318c79ca5c2db54fee8191ee2d305b690a92bd9e2c947a3c29342a93ac05796484638787a184e4525e82aeb9afa2f9480caebb91014c51"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "91e4694366cff84854872667fd168d2d42eca9070cdc92fca9936e8361e7266931f418450d098a42686241d08024dd72f0024d22ba644bd414245e78608942321ff61860ba1245f83c88592dc7995c49c0c53aa8a9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "608aa620a5cf145f4477694407ccd8faa3182465b29ae98d96a42f7409434c21e4671bcae079f6871a09d8f2965e4926a9b08277d32f9dd6a474e3a9fb232f27fc4235df9c02abf67f7e540ca9ddc270ee91b23a5b57"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c14f75e92f75f4356ab01c8792af13383e7fef2ffb3064de55e8da0a50511fea364ccd8140134872adccad197228319260a7b77b67a39677a0dcdcadfb750333ac8e032121e278bdcdbed5e452dae0416011186d9ebf29"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "03fcb9f6e1f058091b11351e775184ff2cd1f31ee846c6ea8efd49dd344f4af473f92eb44eba8a019776f77bb24e294aa9f962b39feecf7c59d46f1a606f89b1e81c2715ac9aa252e9ce941d091ffb99bb52404961794cf8"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "11e189b1d90fcfe8111c79c5351d826f5ec15a602af3b71d50bc7ed813f36c9a682520984ae911669d3c3036223a53176794c7e17929efab2b1c5b500f24f8c83d3db5d1029c5714c6fd34eb800a913985c218071677b9885c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "69f8f5db3ab0321a708ab2f4234645dade6bfda495851dbe7257f2b72e3e8378b9fa8120bc836b737a675271e519b4712d2b56b359e0f2234ba7552dd4828b939e0542e729878ac1f81b6ce14cb573e76af3a6aa227f95b2350e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "be734d78fae92cacb009cc400e023086bc3a3a10e8ca7cb4d553ea85314f51383660b8508e8477af60baf7e07c04cc9e094690ae12c73e5f089763201b4b48d664b94b4f5820bd1540f4a84100fdf8fce7f6466aa5d5c34fcbab45"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d61b77032403f9b6ea5ad2b760eb0157545e37f1712ec44d7926ccf130e8fc0fe8e9b15570a6214c3899a074811486182b250dc97ebdd3b61403614d935cd0a61c0899f31b0e49b81c8a9a4fe8409822c470aacfde229d965dd62f51"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c31bd548e36d5fae95ed8fa6e807642711c897f0fcc3b0d00bd317ed2bca73412064618c6a84a61c71bce3e963333b0266a5656571dcc4ba8a8c9d84af4bdb445c34a7aef445b15d77698e0b13c436c928cc7fa7acd5f68867e8132993"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9903b8adab803d085b634bfae2e109dd247a7d6249f203403216d9f7410c36142df8fa56fb4d6f78136eef5817bad5ea3608439bb19336628c37d42db16ab2df8018b773baedafb77278a50926370b48bd81710203c7abc7b4043f9a1751"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4dadaf0d6a96022c8ce40d48f460526d9956da33260e1770315ead420da75b122c762762aa3ddc1aef9070ff2298b2304cf90443318b17183b60778f3859b141053e5827decfff27ff106a48cfdb0371d0ef614fc7400e860b676df3176d1a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "314dda800f2f494ca9c9678f178940d2284cb29c51cb01ca2019a9bede0cdc50f8ecf2a77e238b884867e78e691461a66100b38f374c4ccac80309641533a3217eca7e6b9a9af01c026201f0afaec5a61629a59eb530c3cb81934b0cb5b45eae"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4658b7500951f75c84e4509d74047ca621009835c0152f03c9f96ca73beb29608c44390ba4473323e621284be872bdb72175628780113e470036265d11dfcb284ac04604e667f1e4c1d357a411d3100d4d9f84a14a6fabd1e3f4de0ac81af50179"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "491f877592837e7912f16b73ee1fb06f4633d854a5723e156978f48ec48fbd8b5e863c24d838ff95fa865155d07e5513df42c8bb7706f8e3806b705866475c0ac04bbe5aa4b91b7dc373e82153483b1b03304a1a791b058926c1becd069509cbf46e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "231034720c719ab31f7c146a702a971f5943b70086b80a2a3eb928fa9380b7a1ad8773bfd0739142d2ad6e19819765ca54f92db5f16c1df5fa4b445c266215a92527bd4ef50ed277b9a21aee3fb7a8128c14ce084f53eac878a7a660b7c011eb1a33c5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3366860c77804fe0b4f368b02bb5b0d150821d957e3ba37842da9fc8d336e9d702c8446ecafbd19d79b868702f32405853bc17695873a7306e0ce4573cd9ac0b7fc7dd35534d7635198d152a1802f7d8d6a4bb07600fcdaacfaa1c3f40a09bc02e974c99"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ccbbbe621f910a95835f5f8d74b21e13f8a4b03f72f91f37b5c7e995aa3cd5539508d5e234e77a4668a42c239b2d13ef0e55ecf85142055e3f8a7e46320e21324a6b88e6c823ac04b485125c2aa59b61476481208f92ea4dd330cb18777c1cf0df7cd07893"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "87faf0e49e7e5ab66ee3147921f8817867fe637d4ab694c33ee8009c759e7d707f44c69c1b9754e2b4f8f47b25f51cd01de7273f548f4952e8efc4d9044c6ea72d1d5857e0ffeb3f44b0c88cb67683401cfb2f1d17f0ca5696641bef28d7579f68d9d066d968"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "38c876a007ec727c92e2503990c4d9407cea2271026aee88cd7b16c4396f00cc4b760576adf2d683713a3f6063cc13ecd7e4f3b6148ad914ca89f34d1375aa4c8e2033f1315153189507bfd116b07fc4bc14f751bbbb0e752f621153ae8df4d68491a22430b309"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "87d636a33dbd9ad81ecd6f3569e418bf8a972f97c5644787b99c361195231a72455a121dd7b3254d6ff80101a0a1e2b1eb1ca4866bd23063fe007310c88c4a2ab3b49f14755cd0ee0e5ffa2fd0d2c0ea41d89e67a27a8f6c94b134ba8d361491b3c20bacac3d226b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b021af793badbb857f9a353e320450c44c1030fce3885e6b271bcc02e6af65fdc5be4dc483ff44bd5d539ed1e7eb7efe3001252e92a87df8227ace601047e101c871d29302b3cb6c6f4639078afc81c4c0f4c2e04688612ecf3f7be1d58ea92894a5dab49b949f2089"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c5c1f2fbf2c8504a686b615278fc6221858d401b7fe790b75fb6bca6885cdd128e9142bf925471ee126f9e62d984de1c30c9c677eff5fdbd5eb0fa4ef3bff6a831056cea20fd61cf44d56ffc5bda0e8472ecdc67946d63c40db4ba882bc4dfa16d8ddac600570b9b6bf3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "88f8cc0daeaeaea7ab0520a311dff91b1fd9a7a3ec778c333422c9f3eb0bc183acc80dfefb17a5ac5f95c490693c45666ec69234919b83244003191bad837aa2a237daeb427e07b9e7aa6ca94b1db03d54ee8f4fe8d0802cb14a6599005eb6326eefe5008d9098d40aa851"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2eb6b1a58e7fe39ff915ac84c2f21a22432c4f0d260380a3f993310af048b11647f95d23adf8a746500833ee4e467fb52ea9f1039519fa58bcb0f1d0151558147b3c92b83730aba0e20eeeea2b75f3ff3ad79f2f8a46cbbadb114a52e32f018342aeeaf827e03ad6d583bbce"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3ba7dcd16a98be1df6b904457709b906cbf8d39516ef107006c0bf363db79f91aaae033466624d30858e61c2c368599963e49f22446e4473aa0df06e9c734e183a941510d540536377072334910e9cef56bc66c12df310ecd4b9dc14207439c1da0ac08bdd9be9f2c840df207e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a34a7926324ea96867dac6f0dba51d753268e497b1c4f272918c7eb0e34120be65b7b5ba044d583141ec3ea16fcedae6197116b16562fb0706a89dc8efd3ba173ccd0fd7d84d480e0a3dda3b580c326aa1caca623879b0fb91e7d173998889da704eda6495023b5ad4c9ad406298"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5ef97d80b90d5c716322d9ba645a0e1b7a403968258a7d43d310320f60f96235f50e9f22cac0ad239636521fa0607d2f471051b505b371d88778c46fe6787d47a91a5bec4e3900fe6ed22918226fc9fbb3f70ee733c369420612b76b5f55988d757c891d7005d17ee55783fe506202"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "140d2c08dae0553f6a49585fd5c217796279152b2e100ebde6812d6e5f6b862b2a3a484aed4d6226197e511be2d7f05f55a916e32534ddcb81bdcf499c3f44f526eb515cc3b6fa4c4039ad251253241f541558bba7413ca29318a414179048a054104e433c674ca2d4b3a4c181878727"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "29fdfc1e859b001ee104d107216b5299a792d26b2418e823e0381fa390380d654e4a0a0720ba5ff59b2ff22d8c4e013284f980911dcfec7f0dca2f89867f311ced1ac8a14d669ef1114504a5b7626f67b22ecd86469800f1575543b72ab1d4c5c10ee08f06159a4a3e1ae09937f12aa173"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "52dfb643832a598a10786a430fc484d6370a05356ee61c80a101dbbcfac75847fba78e27e537cc4eb918eb5ab40b968d0fb23506fee2ad37e12fb7534fb55a9e50902b69ceb78d51db449cbe2d1fc0a8c0022d8a82e2182b0a059035e5f6c4f4cc90278518e178becfbea814f317f9e7c051"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d32f69c6a8ee00ca83b82eaf82e312fbb00d9b2f6202412a1ffc6890b4509bbbeda4c4a90e8f7bca37e7fd82bd23307e2342d27aa10039a83da55e84ce273822740510e4ec239d73c52b0cbc245ad523af961994f19db225212bf4cc160f68a84760233952a8e09f2c963be9bb1d71ca4bb265"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d1e603a46aa49ee1a9ded63918f80feca5fc22fb45f659fd837ff79be5ad7faf0bbd9c4ba91628ee293b478a7e6a7bd433fa265c20e5941b9ea7edc906055ce9799cbb06d0b33ae7ed7f4b918cc082c3d4a1ac317a4acec175a73cc3eeb7cb97d96d24133a29c19375c57f3a4105519846dd14d4"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b45ac88fac2e8d8f5a4a90930cd7523730733369af9e39bf1ffb833c01108952198301f4619f04b9c399fef04c214bad3358999967c474b67a7c06457a1d61f9466489ed5c0c64c6cdc83027386d6263491d18e81ae8d68ca4e396a71207adaaa60997d0dca867065e68852e6dba9669b62dc7672b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d5f2893edd67f8a4b5245a616039ffe459d50e3d103ad4675102028f2c497ea69bf52fa62cd9e84f30ae2ea40449302932bbb0a5e426a054f166fdbe92c744314cc0a0aa58bbc3a8739f7e099961219ec208a8d01c1ae8a2a2b06534bf822aaa00ca96218e430f0389c69c7f3fd195e128c38d484ff6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "37279a76e79f33f8b52f29358841db9ec2e03cc86d09a335f5a35c0a31a1db3e9c4eb7b1d1b978332f47f8c3e5409d4e443e1d15342a316f442e3bfa151f6a0d216df2443d80cbcf12c101c51f2946d81161583218584640f4f9c10de3bb3f4772bd3a0f4a365f444777456b913592719818afb26472b6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a46d252a0addf504ad2541e7d992cbed58a22ea5679980fb0df072d37540a77dd0a1448bdb7f172da7da19d6e4180a29356ecb2a8b5199b59a24e7028bb4521f3281313d2c00da9e1d284972ab6527066e9d508d68094c6aa03537226ef19c28d47f91dddebfcc796ec4221642ddf9de5b80b3b90c22d9e7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "060c18d8b57b5e6572dee194c69e265c2743a48d4185a802eaa8d4dbd4c66c9ff725c93667f1fb816418f18c5f9be55e38b7718a9250bc06284bd834c7bd6dfcd11a97c14779ac539629bcd6e15b5fca3466d14fe60d8671af0fb8b080218703bc1c21563b8f640fde0304a3f4aeb9ec0482f880b5be0daa74"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8f2f42bc01acca20d36054ec81272da60580a9a5414697e0bdb4e44a4ab18b8e690c8056d32f6eaaf9ee08f3448f1f23b9844cf33fb4a93cba5e8157b00b2179d18b6aa7215ae4e9dc9ad52484ad4bfb3688fc80565ddb246dd6db8f0937e01b0d2f2e2a64ad87e03c2a4ad74af5ab97976379445b96404f1d71"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ccb9e524051cca0578aa1cb437116a01c400338f371f9e57525214ad5143b9c3416897eae8e584ce79347297071f67041f921cbc381c2be0b310b8004d039c7cc08cb8ff30ef83c3db413f3fb9c799e31cd930f64da1592ec980cc19830b2a448594cb12a61fc7a229e9c59fe1d66179772865894afd068f0942e5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3eb5dc42172022ab7d0bc465a3c725b2d82ee8d9844b396913ceb8a885323dbbbf9ef4ed549724cc96d451ea1d1d44a8175a75f2a7d44bb8bfc2c2dffed00db0328cfde52bf9171f4025770abbe59b3aefd8151c480bafa09f613955fd571e5d8c0d4936c670d182cf119c068d420ded12af694d63cd5aef2f4f6f71"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "20ea77e58e41337ad63f149ed962a8210b6efa3747fe9bea317c4b48f9641f7145b7906ed020a7ae7d2ee59435392edc32aee7eff978a661375af723fbd440dd84e4a152f2e6ef66f4ab1046b22c77ac52717de721dfe39aa8ba8cd5da27baca00cc1fffe12c52382f0ee83ad1418f4c6a122effaf7471e1e125d7e7ba"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "95c662b835171fa23f948c3c3ed27bab9b3c367bbfe267fe65f8037a35b50cd7fc6030bfce4000425ef646c34793f0762635ae70487a0216ef7428da622be895d1b6040423246511c2370d6876a5c5d2df8bbd48fb14f787b632ad2c1f5a927fdf36bc493c1c8606accfa52de33258669f7d2d73c9c81119591c8ea2b0ef"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f708a230675d83299cc43167a771602d52fa37cbc068ef9128ef60d186e5d98efb8c98798da619d2011bf4673214f4a4c82e4b11156f6292f6e676d5b84dc1b81e7cc811b0d37310ac58da1bfcb339f6ba689d80dd876b82d131e03f450c6c9f15c3a3b3d4db43c273c94ed1d1bd6d369c4d30256ff80ea626bda56a6b94ea"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f8417766ce86b275f2b7fec49da832ab9bf9cb6fdfe1b916979ae5b69176d7e0293f8d34cb55cf2b4264a8d671370cb595c419c1a3ce5b8afa642208481333522005fbe48cdc700e47b29254b79f685e1e91e7e34121784f53bd6a7d9fb6369571bba992c54316a54e309bbc2d488e9f4233d51d72a0dd8845772377f2c0feb9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3479e04efa2318afc441931a7d0134abc2f04227239fa5a6ae40f25189da1f1f313732026631969d3761aea0c478528b129808955be429136eeff003779dd0b8757e3b802bdff0f5f957e19278eabad72764aa74d469231e935f4c80040462ab56094e4a69a82346b3aeb075e73a8e30318e46fdaec0a42f17ccf5b592fb800613"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "03df0e061fa2ae63b42f94a1ba387661760deaab3ec8ffabcaff20eeed8d0717d8d09a0eafd9bde04e97b9501ac0c6f4255331f787d16054873f0673a3b42ce23b75a3b38c1ebcc04306d086c57a79d6095d8ce78e082a66c9efca7c2650c1046c6e0bbce0b2cba27c3824333e50e046e2a7703d3328ab3b82c9d6a51bc99b9516ff"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "76b488b801932932beefffdd8c19cf5b4632306e69e37e6a837e9a20c8e073bcadd5640549faa4972ebd7ee55cb2425b74cb041a52dd401b1a531beb6dfb23c4cfe74bc84f034156c8f55050ca93236eb73c4e2595d9fbf93dc49e1ec9a31705359732dda73f737ec4274e5c82626dc4ec929e5e2c7a2f5f5fb666181922bd8be575e3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ff17f6ef13abc0426b03d309dc6e8eeb822300f7b87eff4f9c44140a424098fd2aef860e5646066d22f5e8ed1e82a459c9b9ad7b9d5978c29718e17bff4eeefd1a80ba48108b551e62cd8be919e29edea8fbd5a96dfc97d01058d226105cfcdec0fba5d70769039c77be10bd182bd67f431e4b48b3345f534f08a4beb49628515d3e0b67"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "95b9d7b5b88431445ec80df511d4d106db2da75a2ba201484f90699157e5954d31a19f34d8f11524c1dabd88b9c3adcdba0520b2bdc8485def670409d1cd3707ff5f3e9dffe1bca56a23f254bf24770e2e636755f215814c8e897a062fd84c9f3f3fd62d16c6672a2578db26f65851b2c9f50e0f42685733a12dd9828cee198eb7c835b066"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "010e2192db21f3d49f96ba542b9977588025d823fc941c1c02d982eae87fb58c200b70b88d41bbe8ab0b0e8d6e0f14f7da03fde25e10148887d698289d2f686fa1408501422e1250af6b63e8bb30aac23dcdec4bba9c517361dff6dff5e6c6d9adcf42e1606e451b0004de10d90f0aed30dd853a7143e9e3f9256a1e638793713013ebee79d5"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "02aaf6b569e8e5b703ff5f28ccb6b89bf879b7311ea7f1a25edd372db62de8e000219afc1ad67e7909cc2f7c714c6fc63ba341062cebf24780980899950afc35cef38086ee88991e3002ae17c07fd8a16a49a8a90fc5540be0956dff95390c3d37629949de99920d93096eb35cf0427f75a6561cf68326e129dbeffb8772bfdce245d320f922ae"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "70752b3f18713e2f533246a2a46e38a83cc36dfccec07c1030b5204cba4432700735a8cee538b078d281a2d0262110381c5815a112bb84404f55af91652bd17502dd75e4910e062943d8a736ae3eecdfdd8e3f83e0a5e2ddeeff0ccbdadaddc95391310fc657a59724f7e6560c37dc1d5bb5db40170190f04a274c864ade9687c0f6a2a48283177a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "01f3c1333b44077c518cc594d0fb90c37651fb7b2442e71fc0a5611097f1cf7bcfaf11c8e0ac1b1cab54afba15bb9332df6bc64d8032368e3f686c8324b0114e0979dad78a5ccd3fff88bbe89eef89c4be586ca092addef552ed33224e85d8c2f4fba85ac7735f34b6aa5ae5299154f861a9fb83046b0e8fca4db32c1343e02676f283975f43c086cf"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "509283ebc99ff8d87902fa00e2d2a6fa239e335fb840dbd0fdbab6ed2d95e8275402523f7ce9a2fabd4b6c9b533288fbe914bde84365a204711d0977a7d698f4614385984dd4c137e4820035dd6737da364edff1bb62283e87a8c7ae8637314fe9b5777ec4ec21276dafedb2ad5ee1aa0ac99e34a6c01c055c8a239fd28681607f65143082cd4553c529"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c17e417e876db4e123c631f7136b8a85bfd6ce66a69180d0cd5ecfd6f037bb1c7bd7908d51f2c485bf9e92c0e1799ee5f6ab834ee481f5eb1a8020205adb4d0f90126d4e7c2c859c5a5f644bdfa9c649ff4f168e834de6f9769429732099d46d0af506ab86c6fd92175159bbc05c75db8e1fa867e6030d64250008d64c857c47caec3dc8b2ffb384d0193e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "950988fbe9d62a66f5f2c492bc8dc944a78eb3796ec37ba94b6a81a9d402ccad03cd8497fff74c5f4a03081c5fecec48574fecb21c1de261332c23108195d3f6a96ff8e433a1a30eda53dd5bb414973334f8cde5510ff759f7c17046cbb5acd8e8c4a6eecf2a9121ec3fc4b22c4daa72678194ce809024cd45c4ebb9ccdb6f854205cdb624f0787480d8034d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "552a212c403b473741da8e9c7b916d5e5e9bcc9949021ae1ca1ed46b7d4a98addbb604d9fff56175b7e0367db26c9635fa7813653dc8d610befdd09ec41e99b192a716106f4299eec8b940863e5a59cf26cdc2cd0c3017f9b4f215812bed15f69e77edf672178e13c55580982f01fcc2fa131ec3d736a55d56504c545f4be50fee83f1263e4d3f3c877cc6242c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b00c4283dd3d9cd26e44bd97cede6c771cb14f2571b51cfdaae4309560ffd165da025a1bbd31096c3aa8286e2d6dcc3e681b8d01f2c5064ea26dfd0b5156b7a7f5d1e046c5bd1628f8fdae24b03bdf7cf7366900cc013a8cbed9d7f5937c914b08f8c27683b956e1279812d04288515333fc6aba3684dde2292951f0610649d90fe61606630fc6a4cd383649252c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f6e79457bb6d0884dd223be2cf5ae412a1ed425f1e4012f75951b096aea3b9f3581f9013bcae1aff2d3fc1e5c7e06f24af6d53c2c5c238b71c71cc670b05a7ee5204400026a5c4e5ddec3ad96771e49fae4b0f75ec58049ad9d972e5749a32d90f847f1ed2a1bab83db181e541cf5c8adb6b29ecc64dc25add491d408d3eb3ddcb013de7f5ffb6de9dd7ff300a5fc6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fe1d71e1d5efa3f712d23216ee8ee9139e66bd648b83efc02cdb4d45a28cf36759ff190a84d14d9471477abefb5aea4111110336143dd80cf81e02f268120cc07d746538f968e9876bff8358d390f5b8e7eafa61ecd236cedaf276bd61865fdd3424988201dcdeda2e3e0c33c9e3b3670125dd1049106cc6df5695fb2dca443233ff440f265bbff055483bac1e859b83"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4c80163562872a965dedd8725652906156ada6e9d999027d96f49289edb92f9ef043e9d7c3377e091b27f85275499454af32317535997fb4aaeaf93565ad481ff7d45d2abddd4df4b60f71a6923ec30496c6ae534dc5427107ab4c5e656a322c7ab058d4c13ec0ebafa76576560697ac98f84aa4a554f98ec87134c0d7dca9184cf70412a324aac91823c0aca02537d197"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fdd58c5ffe88665beb7073c8f4c22472f4bc9390cdd27a42622ca55978b000ab7579f795d4de0dfcaf521b8268980ef1d20277b07567985c0fd5030784ad6c32541ac24e99ab706105a2255fc32935c0fce6fdad9bb224d94ae4eae2a3ff08836618a3adf193630647bce1952b69da4de360f59da303519278bfd39b733cf66820a5e9e971b702f45998b69a0889f4bec8ec"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ff38b15aba3794e2c81d88003e045ac6cbfc9f4833cdf896cefd8ac0c88674727ad9a9fcb9ef36574deea480e6f6e8691c8390ad73b8ea0eb3665c914b0d886546948e67d7987eea248b5feb52346ffdd965d5c835144c3bc63daf325e74b11267e32e58a914ae4521a668839d9445fececa49c5fba41f9e171698bbc7c6c97fa163a377a96456958d6e1d74f91ada56a30df8"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f048c19328d60b4e59ed76940415b2c84c23883198bba5699efb0a1774ad5da6d15390c7b55d77d66f37448fe08107f42a5336408d5322f4b630e3275865fc66dccab39f6e13fabc133e5a441fe352d81c7cd9a25f145a6e2e2417d3b0bbc79eafcd7ad688c02011fd268dd44ac3f4f87b37a84a46fd9e9975962fba92c9a3486deb0c45f6a2e044df4bb79f0feeea432c5008b0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1b3e5fe6f113cce28a6f8d6f7809d3cec398cabffe9ff2ff10a7fec29a4ee4b54186063fd5307a2be393c9ecd75a37620bdb94c9c18da69b658579676ec90351d10dc33a7cb3b75798b1234f9f684d4a73a0fab2df3d5d6fdb1c1b1514d0935c1f2dd21486f91c2595b2f8f8a500ff443b9305270fb6f3da7961d9316d4ed6a135a31c4a3611d40e6585bbb34f498cd5b9a5d92676"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "740db337baa12b16897f17a85fa5685acc85e48338867f8ac9c0198dd650f5dfa7c17725c1262c72207e365c8aa45ffaab6470a0e5afefbfc3bb702a9766064f28cc8b796878dfdd3ca9d0216c14941438fc541fb5be0a13d29a996c5c985db4f630df067a5626db5dcd8df3a2bff17dc446e46e4079b8815da4318cb228c7722684e2a795a0ca56f500ea51951a6a385385d886f678"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1465f2d578d167faa017fe8f763ce3cc8dc1e8371d774ed2a8803f12585296ee71a1f2253dd16b717a81f91f0f3641018a0111182b4e65d884b0a3d0292631ad807cdccc88bdeecb476e76f72b5246a630aff6e2401fa9570f85acb73ccb4e19ef04a932a03d7b7985dbe1e5bb410df517fe362321469e6f8b0e0cef6c31d7aa8ec06aa220620d66cc0e133fdee963589b12320fc9678e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "80c051952fa6f3ef6af0f1759ec3e83c8eb91abee1de360bfa09e74b05af2475a0dbf8f9135aa25892919bbe0515898cfb6f88abc9e1891f2b2180bb97370f578973d55c13c35edb22ed80647c2a7e2884d1ccb2dc2f92d7b6ec5843ade13a608a31190ce965bde97161c4d4af1d91ca9962053f9aa51865bdf04fc23fa35a6fc3c8e888941263a26ed66c2dd0b29b2325dfbd1227c5091c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9c1e2a1aed6406052eed12b4495365f2f80e9c9645473f3549b607f20910bcd16dc3a4b173ac8d128129cdb7c76ebbc8e9a2a1ba0d822c66b367e790a69ac71f0a60ed4bff0e979148e3f3ee6607c76dbc572ee5ff17c27e4b52adebb4bedddff517f591a1977299c7cb01106f1453b098d29848ba3751c816215bb0d090c50f9e445b41b2c49d4eec83b92ce6c269ce835fd279e7cbbb5e47"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "466abda8944d0329d2975c0f2e2afc901f117887af301881f63b714f49a2f692fa63a8871fc0b301fe8573dc9b2689880cd8969e5072c57671e0633b041481dab25e65c9de404af033a11a8070c8ab70ca6d465318501afdd9940c7efbe1bb6d49581c222fad251dba4ee0a98efe22a3c4f74da05844523b30bbad6b080ac8df70a02da80bc9d477dfb869adb211e209a316d5dd1fd89a6b8f8e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0e89a873e07799ba9372fc95d483193bd91a1ee6cc186374b51c8e4d1f40dd3d30e08f7feecfffbea5395d480ee588a294b96304b04f1ee7bbf6200cc8876395d1db3ac813e1019bb68d27204e514fe4a61ad2cbd1782dca0e38b5538c5390bca626c5895b745cfca5dac636fd4f37fed9014ab46ae1156c7789bbcbb956ff7ee5ce9effa560731d26783dc6ae8bddd53a5d28133614d0ddeddd9c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fdde2b80bc7a577ef0a6c03e59512bd5b62c265d860b75416ef0ce374d544cbb4e3a5dbd31e3b43e82975090c28bc77d1bdec907aeceb5d1c8b71375b6d631b84a46153f5f1d195bfcb2af6f597a9cdc83782c5bbbb58c5188a87ebf375eee5212fa52523820a83106e8ecd52bedd60d95cd646159774389c07e1adcaa6b6f649408f33399ec6e507d61659696b3dd249996892d5986b654d94ff337"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f5d7d66929afcdff04de30e83f248e69e89604daea782e1d82d8032e91a95c1d6fb2f5578f79b51be4397e4cd7cbc608ce143fdddbc6fb6c43ffdd394a7df0124353b919aeeac025f3eb11ff246c3b9657c1a947fc534ce48e18feffada8797037c6bc7e2d9a9e2e019fe65627b3feb28e446473e3bd413047a2587f0be6a103403cb3c33fdc212dca14d8e386aa511c22308e632f5f9528dbabaf2deb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "332990a8dba55f977bc814436cf386ebbf10cb487a5f6ce83e13741bac670c6810284fbbe4e303547ef411e964fae82854e8c13cf56979b89ecfedd337aad78260060122d13dfbbf8497acb2066ed89e30a1d5c11008bd4d145b5ec353956310536304d8b8bba0793baec6d8f3ff49718a56e6694f8122078265cf5731d9ba61292c1219a1affb3679576d4998290aba3684a205c3469d40761a5c4e96b2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "efbdff285027610f03182009c89b953f19721cfcdb8accd74bab6ec4bdf3f555ab902cb0dd91284269d140638aaabd211748aa4da3b18cddc653b57e461b9ad8491807c535c08fe97d89eb587c6af19ca152e72479626ab764e8b62da89fefc8354c75a44851f985746d78715a5a92798dac1a4222be27897b3f0aa63d596aa7378545f49b259aa8518c3def8a2ec8f7aa956c43668c8717052035a7c36b47"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0eea9bb83bdc324fd21b03669aa922fbebc448e7d25e210294c07862cfa6e061731dfb67b4810633f4dbe2130d90fa1c65843af436e74219d213c4458dcac1c48ec4541fc6e3b7918ab2bc621aedda53658050900c3865ca57cd5dfa1d28576827401956d2dd8b861fa90ab11bb0b544ded9bd3d62e3278ed484e17db8f2d5dc5ea4d19a0e15134ba6986714c2b22c59c2f0e517b74eb92ce40d2f5b89e6d79f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "25da9f90d2d3f81b420ea5b03be69df8ccf05f91cc46d9ace62c7f56ead9de4af576fbeee747b906aad69e59104523fe03e1a0a4d5d902352df18d18dc8225855c46fefeec9bd09c508c916995ed4161ee633f6e6291cb16e8cac7edcce213417d34a2c1edea84a0e613278b1e853e25fb4d66ff4c7ee4584e7f9b681c319c874d43502534e8c16a57b1ae7cc0723783807738a55b661e617ee285bdb8b845607f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a76b6f81372df09322098868d469fb3fb9beafc5edb32c674974ca7032966aaca5b5c9bffef87bfe626bd8e33d1c5f054f7d5acd3b91ff95324d1ae39eb905b9f2694fe5cb03486cee86d2f661a751b0e6c716a61d1d405494c2d4e32bf803803dc02dba2c06eecf6f97fb1f6c5fd10cfc4215c06d627c46b6a16da0854e4c7c873d50aa1bd396b35961b5fa31ac962575230c07c369f8fbc1ff2256b47383a3df2a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f9db613812f2259972d91b1598ffb166031b339913925ee385f03b3b35dc4b2f1ae78a3c3d99c6ff6a07be129ce1f4b8d994d24988d7fbd31f20535d36ab6bd0592cfb4f8c1ed9244c7fa8a3c46e91272a1a40c6cfcf261c5658476c59793bf1a3775086e41a0492f88a31e2d9d1ce75cf1c6b4b928b3545d838d1de6b61b735d921bcf72e4e0615e9ff969ef76b4b947026cb016e2660ba39b0c4c953369a52c210de"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e601c7e75f80b10a2d15b06c521618ddc1836fe9b024458385c53cbfcedd79f3b4239598cd7b9f72c42dec0b29dda9d4fa842173558ed16c2c0969f7117157317b57266990855b9acbf510e76310ebe4b96c0de47d7f6b00bb88d06fad2c2f01610b9a686079f3ed84613ba477922502bc2305681cd8dd465e70e357534503b7cbc68070ad16d9c51de96ccf0aae1599299331c5655b801fd1dd48dddf6902d0e9579f0c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ee5ff4ca16d1bde59ffaf2d064eac9141c1d8f120ea2bda942b7956ba3effc5f1e725a3b40b0b9223a14d7a50df1681d14ca0e0eda7bb09c428fa3b2701f83a7a3e139485a118f6287d266dbc7fe68c87b35becabc7782537c79cb8165bdc40cc103d7b6d4b627fafa0e4113f92341ab90ceab594bfae20dadbfafd401684584598941f1ffb8e23dc8a04ecd15376cda6d849fe0dfd177538c62413622d172d9d46e05c450"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1daca80db6ed9cb162ae24aae07c02f4126f07cd09ecee8e798fa1bc25c26c644333b63731b4ebc3f287f2318a820c32a3a55fc976576bc936f7384e2553d2891e3771ff24dd4c7f0256906460a8f12d30ed2b23583a0259cb00a9065a757d654d6e4603e7c7eb4a8426b527ae8a849d9350e9094b890367df3e8b23ad2df4d7dcce416bd8ea3badd037f53f7b07c02e5926515f196d62aeb9b8b14c863f067fc12c5dfc90db"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "27ff4e58a34ff1fcd66855d014ea17889a3cf0021a9fea3fabfd5b270ae770f40b5439e00c0d26bd9766f6fb0b4f23c5fcc195edf6d04bf708e5b0bced4f5c256e5ae47cc5651e51cd9fe9dc5d101439b9bc5cc24f76a8e8847c72686e2af1ce7098ad7bc104dad00c096a6d48b6453322e9cd6773fb91fb1eabd05dc5185a9aea07a2f64c6fea9897681b4428aaffe1fe5fd3e8ceb890b12169ec9d51eaabf0ca3d5ba415770d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "75e2fb56327983b04f640717be8cba6fef3655b4d8e5539587d6478356ec397efaed818b8425d052778eb30ef0dee656c52c2aeab079ed496ae4441a365f2130432c87ba757e25b4511656ad15e2eff84d342331fd2814d1f1d11af65d98a424c115ba183437c0d0aa55f5c44b8685028a47d89d0d36a0f20aed510c366ab338f074a941b404fb349caaec821e0850a627777cc8f5abce6b509290027a2a28ff1db62a5ed2f95fc6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c6ae8b6a060917cd498aa7874ad44baff73efc89a023d9f3e9d12c03d0b7f5bcb5e24e1bc2ab2f2c67b9a9d36ff8beb51b5affd4a3510361001c80642955b22ea4bf28b81a5affe5ecdbabd8d17960a6af3825a4522fe76b3d720b5d06e66bff5379d7a8de1f5cc3e7bb75163a854d77d9b3949bf904b6c4e568682f0dab7f217f80da7303cfdc9a53c17b6b51d8ddff0ce49541e0c7d7b2eed82a9d6be4aec73274c30895f5f0f5fa"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "606c9a15a89cd66a00f26122e33ab0a08c4f73f073d843e0f6a4c1618271cfd64e52a055327deaaea8841bdd5b778ebbbd46fbc5f43362326208fdb0d0f93153c57072e2e84cecfe3b45accae7cf9dd1b3eaf9d8250d8174b3dade2256ecc8c3acc77f79d1bf9795a53c46c0f04196d8b492608a9f2a0f0b80294e2abe012dc01e60af94323c467f44c536bf375cddbb068c78432843703dd00544f4fff3eaa1a5a1467afaae7815f80d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "88b383cb266937c4259fc65b9005a8c190ee6cc4b7d3575900e6f3f091d0a2cefa26e601259ffb3fd03083270eb63db1ffb8b4515ec454d12f0944f8f9f6869eedc2c5f1689766a748d74e79ad83ff6a1639aefdec6109342dead31e9cead50bcc00c5b2206e8aaa47fdd01397b141880490174141a1e6e19268378c1b54a84aba60ca711fd72f7df88e120dfea2caa140085a0cf73342f3c588b7edfb5b5e5ccabd68a32364746d92d536"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "dc0b293f1ba02a326743509f41efdfeeac1efc45137ac03e397a3273a1f586a0190cfb4ea96d6c13ca692a4de6de905c8338c3e29a04cbae76272f568b9d795cea5d758106b9d9cff6f80ef650d6b7c428ea3946c3acc594907fe4227ed68faf31f2f6775f1be5139dc0b4d73ed6308fa226b9077561c9e4c7a4df68cc6b819b0f463a11b9a09682ba99752c4db7aea9beac1d9279f2c2675d42b551d27aa2c1c34125e32f2f6f45c35bca45"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5d801a7413311e1d1b19b3c321542b22e2a4ccbe340545d272abede9223741d9835a0fc80cc9da97a13f8bb4110eb4ad71093efba165b1edad0da01da89d86726e0d8e42ae003b4b50297d233c87da08406f0e7fc58ba6da5ee5ba3d2d7142cbe6632734eb2e7b7863c15cc82198ee8f9a0ae0b7f93bdbda1ed269b3824d5d3c8e78513815b17a4c0cc8c9706b9c77423a309ae3fd98e1e05cdbe9e2577834fd71f964301b10b66c316a2d8f2c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2fd32a2bc15a9e96a100624404fd0a4e54ba9f8c0543d8ccf7c5c2e35f5e8c3c11dfd497320aa903900a4ca55a2b323b3ac4a7cfcd01bf0b448db8829072bee6b77c3d7bec2e1d8b414d907288d4a804d2379546ef2e2dc628269589164b13fceb32dba6fd5d48a956ce0b5c3eb28d894a95af58bf52f0d6d6cbe51317152744b4ccfc918ed17fa6856478d580b389016b772e1d02e57d2217a204e25361d91d4845a3fa20fefe2c5004f1f89ff7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f537b437662759bef8bd64368536b9c64fffbddc5e2cbdad465c3966b7f2c4bc5b96767ef40a1c144a4f1cd49edc4cc5b57e7eb30d9b90108f6fd3c0dc8a8808b9e0bd13aa3d661c4863637c5e4ba286553694a60bef18801299ae349df53a355051dcc46a7d003c4aa613808f430e9db8ca7dfe0b3f0a4c5ab6eb306aeb53e11a01f910064fbe6ca78b2a94fac34a2602f73de3f275953e13ff5c6bb5c39b82321ead17ec0f8ecc479e6afbc926e1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1dd9fb7d5b5d5074971e69300720014deba6fbdb942bd29704cdfcd40fa5281d2a1b9f5b776183e03ff99c29587f10e8d325cb49c5c93e94f5132741b92c4086eec1374dea5c1e772cbb230c7b31f3e962eb572be810076bdb926b63732522cdf815c3ab99bbc164a1036aab103cac7b823dd21a911aec9bc794028f07b7f839bae0e68211286441f1c8d3a35b281fd321312577bbda04f643ecb2a74ec4527bb5148dbccbeba749f5ea19b6072366ba"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5bd63737449de2d20ca63943953338ecf4cdd6cd0a726241adb04376385a809cc6ba0f3482a310746fbc2cd5eb214f03a14cdc548777fb0d048d659cd75a962e490c4fe47affc2430a34b10275e4c76752a115aae3a24d4fb4fad89ce4d79d65de10292f3490bfdaeabfae08ed51bda6ec8230e66cb07ddbeec26e3ef68dd71c852900659fcf0c963f4574ffe4626a33db9abf0873dde68b21138498b81e8cc44d354be4073615889a7ddff633b5447d38"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a683ec8250506571f9c640fb1837e1ebb06f123e745f95e521e4ea7a0b2b08a514bbe5bdfd316903d1d6a05f5a143d94dab61d8a3a146ab40b2d6b72df2f0e945875a8aa7051ed115975f6f1567cfcbf04c5e11e3a7027b8e179ba00739181ba10b028e3df7259d0712f4a6cef96469ff737865b85fee2c2db02a6423e32505381e18a1e0b4ce3c7998b8d6b1b5e09c3a280b85486d0984c9e193b0ad2043c2bc4ad04f5b00a73956715937eebf6b3e27afc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4df9d160b8e81c42930c48956fcb46b20b6656ee30e5a51dd6317876dc33e0160d31280fc185e58479f994991d575a917073b4439919c9ac49b6a7c3f985211d084c82c9d5c5b9a2d29c5699a22e79de3958d7b0e856b9aa97493cd4563aaa04fa3977a9bb89e0bc06a82296bdc76d20c8d393770176d648712454305fdfcf4e117d05acb5a5b006a9f8d0dc66dca708c4e4103ca825d2331750685c44ce3d9b3e753455580f4d6ac4533edeeb02cebec7cc84"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "67bb59c3ef5ee8bc79b89a673e331e581215076cc36b68f517ca0a74f74efafe9dcc240e6d8ca4b21019c27d6c9289f4419b4f218eeb39eb741c5ebebfe0ed2f6faeec5e8c477acf71907990e8e288f4d4049111779b0635c7bbec16b76493f1c22f645745fdac2b383679fee573e4f47af45ee08d84f63a5ace4ee1c06fa41e2e6e14b7bc392e38426813087a3a461efc62ed1941dc8f1728a2bdc04fde72a0b786558783c84abd4bd100e4926979a0a5e707b1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "d341147169d2937ff2373bd0a9aefa77968ec8f0d993c6f9881eb174a1911e05cdc45993cb86d149a754bbe321ae38363f9518c50dd3faf087ffeeeb6a058b226ccab7858c00ba6de0e8f4d034b1d27508da5cc473f3a413189ee6fd912d7750486912944d4dc34405ce5ccc3885fb0aabcb922bcfa9081d0ab84c288022bd501235a835eb2e1124ed1d48fd4f8682da8e7919321031326502273375625c4e3a7282b9f53452195e53c6b4b57cd5c66f621bed1814"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "27e7872a54dfff359ea7f0fca256983f7600236e716e111be15a1fe72eb66923ea60038ca2953b0286447dfe4fe853ca13c4d1ddc7a578f1fc5fc8598b05809ad0c64a4363c0228f8d15e28280837a16a5c4dadab681e28968ae17934639fbc124bc59212138e494eecad48f6546c38366f1b7b2a0f56f579f41fb3aef75dc5a0958b25deaa50cb7fd1c69816aa9a51874a98e57911a33daf773c6e6166cecfeec7a0cf54df01ab4b931984f54424e92e08cd92d5e43"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "13dcc9c2783b3fbf6711d02505b924e72ec6736131159017b966dda90986b97522bf52fd15fc0560ecb91e2175322334aaaa0097e1f3777c0be6d5d3de18ed6fa3444133486068a777443a8d0fa212ca46994944555c87ad1fb3a367db711c7ebd8f7a7a6dbb3a0207de85851d1b0ad2f4149bdd5a5ba0e1a81ff742df95edee850c0de20e90dd01753137cb8f2c64e5e4638ceb893a3879ae2c049aa5bce44d56bf3f325b6c5029b2b8e1b2da8de7d4e48ca7d8f6fbdc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9ca875115b109eab538d4ec7023600ad953cacdb49b5abe263e68b48eafac89a15e803e838d048d9625972f271cc8f36344bed7bab69abf0bf05979a4cfff273b82f9961626509765fcb4b4e7fa48212bcb3ab2b1f2dd5e2af768cba6300a813514dd13e4d269e3d36548af0cacdb18bb2439ec9459f6d847d39f5598304ec46a26d75de1f9f0c2a88db915bd26e45e1f1e68c5b5b50d1890e97a3803c36755f026863d14176b8b57f42e91d3ff37787f9b38e333e9f0433"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ec006ac11e6d62b6d9b32ebe2e18c002353a9ffd5dfbc5161ab887770ddd9b8c0e19e5321e5bc105add22e473050b71f0399327c7eba1ef809f8667c1f4e2c7172e10e753705e9a083f5bce88d77521225ecd9e89f1e1caed367fb0275dc28f620fbd67e6b176c9ae5d2659e6ec662116c9f2bbca3a93043233a4861e0688db6dc1800f752c5d58aa5033c250c891d9126e534ed921a9026eb333333fa8292059b8b446f336ca6a0cb4c7946b6aea3831653122f154a4ea1d7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "23deadc94481ce28188f3a0ca3e85431964cb31b60fabf381e6bd45ef0332bd4dde774b0281d317dc2e7d0c298fcf8625fa734126968df8b68ef8a35c325d84ba4fc53936ff3ffdd8838d2a8cabf8a9cac54aa444ed9875944e55994a22f7fa8538b1e983b57d9215fac5c0052029644044e790ce2f5044655608c1d7ad3bb862203ba3aba3b526606f273d342ed5721648e3f600942d3f7546f679161436389d879dd8094e1bd1b1e12cde15cd3cda4c30a40835665e4e5cf94"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "94701e06340114f9cf715a1fb659988d33db59e87bc4844b1500448960af757b5282f6d52967a6ae11aa4ecfc6818c962b084c811a57724f5d401191567f24ce917e4f8c3963474fdc9d2c8613c16f62446448b6da6eeae54d672825ed7606a90e4611d0e318ff00566862c955b636b5e81fec3362e8672ad2a6d222a515cf410482836deba092a51a4d464dfbbab35c50a33437ac16a88256e9e23ddd3c827cc58d3e5000ee90b12e4c5175c5733662d4848ae0d406c2f0a4f498"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "735b0758d5a331b2304f01081172eb95ae4115de651b1a6693c5b9543de33df25d9f421dbaeca033fc8bff57313b482778005aa9fdcbca65c643da2f3320e34197868eec3848ff3c70d7ac7d910fc332e9a359f892ae01641be253013b554a0d3f249b3586b1857e5a0f9482ebd91432a852b221f4287a6e81ed24e8064645d5b28ab9a13b26cc1420ce73dbc47b31acf8a871601022ce23bc443b1222ce9a037a2fe5226295feb4efd4fd671338f459ae146032697cf82fc55c8fbf"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c48d94f14549352790079fee69e3e72ebaa380510e3581a0824066413e7044a36ad08affbf9b52b21963d2f8e092ff0ac1c973c423ade3ece5d3bca852b894675e8173290529226939c24109f50b8b0d5c9f762ff10388833d99bea99c5ef3ebb2a9d19d2231e67ca6c9056d8834730605897426cd069cbeb6a46b9f5332be73ab45c03fcc35c2d91f22bf3861b2b2549f9ec8798aeff83ceaf707325c77e7389b388de8dab7c7c63a4110ec156c5145e42203c4a8e3d071a7cb83b4cd"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "553e9e0de274167ecdd7b5fc85f9c0e665be7c22c93ddc6ec840ce171cf5d1d1a476743eb7ea0c9492eac5a4c9837c62a91dd1a6ea9e6fff1f1470b22cc62359474a6ba0b0334b2739528454470f4e14b9c4eeb6fd2cdd7e7c6f97668eebd1000bef4388015630a8332de7b17c2004060ecb11e58029b3f9575040a5dd4e294e7c78e4fc99e4390c56534a4e933d9a45460f62ffaaba25da293f7765cd7a4ce78c28a85013b893a0099c1c128b01ee66a76f051dc1409bf4176e5afec90e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "dea8f97c66a3e375d0a3412105ed4f0784f3973ec8c57b4f553d3da40fd4cfd39761de563ec96a9178804641f7ebbee48caf9dec17a14bc8246618b22e683c0090259e3db19dc5b6175710df80cdc735a92a990a3cfb166461ae713adda7d9fa3c4cf9f409b1467f3cf85d2141ef3f119d1c53f23c0380b1ebd728d7e932c535965bca41a414b6ea5bf0f9a381e098d282a554a25ce41980d7c7be75ff5ce4b1e54cc61e683f1dd817b8e2c1a430d7f895e5e7af13912cc110f0bbb95372fb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9dfda2e2f732867e60ed2b5fa99ab88eb82dc7a54334d02031258beef75fa4bd6962a1083b9c29e4eeb3e5ab8065f3e2fc732675b8d7705c16cfb4ef7305eb58120f1af5ddc55872a2cbde3a48661a0598f48f63e2e9aadc603545e2b6001748e3af9e86e1830af7b84ffd3e8f16679213d37cac91f07af0af02b37f5ed946ef5c955b60d488acc6ae736b10459ca7dabeacd7dabcfd656511ac913174f6d99327be59befe3e463a49afbb5235f0ce2840588c6edfbaaba00a4211c0764dd638"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ddcd23e8b9dc8889b8599c721e7f8ecc2cbdca03e5a8fd5105f7f2941daec4e2906c654210bdd478374ddee43ee749a920ee91872e057a1157d384dcd111266221b3c79774476b4862fe450704ff2c5353e9a936cac87c96515c28ed4c830335a55d084cb5873c5fd2dd907f3266d8eb7bf13b6dd7cd4966982a0949efd8e428dae13daee549e01cc3c226211d6307823f742c5ef2155601a4644c46eddd603d4abd959c6d242e427768df3b1e22d87971df58a1564b38311a897c85b497a72556"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "39016647acfbc63fe55a74598bc1956eaf4e0cb49d532c5d8323fc6a3f15a0231597f06eafd74ad245e672bf6b21e4da503cb5bf9d15e9038ef354b38807564d91f38b4258378ccd9b9420a1562d7136196822a1291c913d83c4cd99fd8d420990c72cdc47607124de21da8d9c7f472fdcc780379f186a04da93cd87628abf323c8dadcd7fb8fbade37d7d2b5c9f9fc524ff77494c98f42f2158a6f68c906105ca9e8bb2df463863cfc1e9008d8344f55c4e3203dde6699b59812d49ce1279fa1c86"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "02cff7567067cbca5911664c6bd7daaf484181edd2a771d0b64566c3ab08d382e83932cdd7b4dbf86c9cdd1a4c353a511e68afb6746a507a9cd385c198246f4543d606c6149a5384e4ff54c1b90d663dc7a4b91aeac3cf716db7ca6f9a1914e3a33efe82e7ccc4215999c0b012782402db4726db1d7d1c73571d45739aa6fcb5a20eeb54a84d5f99902a8d356cbf95f34c9c28c8f2badfbc08c69233514493c0c04963268c88bc54039ab2999c7b06cba405936dfc43b48cb53f62e18e7ff8ff3f6eb9"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5764812ae6ab9491d8d295a0299228ec7146148ff373241a510faee7db7080706a8dada87938bf726c754e416c8c63c0ac617266a0a4863c2582412bf0f53b827e9a3465949a03dc2db3cb10b8c75e45cb9bf65410a0f6e6410b7f71f3a7e229e647cbbd5a54904bb96f8358adea1aaa0e845ac2838f6dd16936baa15a7c755af8029ef50aed3066d375d3265eaaa38822d11b173f4a1de39461d17d1629c8df7334d8da1b6401daaf7f34b2b48d6556ae99cd29ed1073926bcda867421832a4c36c7095"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4df3043cf0f90462b37d9106e67366d112e4938c4f06abae97869531af89e9feebce0812dffe71a226de5dc36be652e26ef6a4be47d9b2db5cdd43809a565e4fc0988bfe82037c505dd276b757b785203249fd083fb474a25acccc9f38dc5164ff9097e05989aa6e280739a755231f93670e7226e22046914c155bf33d135b3f736ccca84cc47ae643215a054b54b7e13ffcd7ad73cced9279dc3210b80700fcc757acfb64c68e0bc4da05aac2b6a99d5582e79b303c88a7ac4dd8ed4289516bba0e243527"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bf041a11622715426c3a755c637d5f478dd7da949e50f05377bf333f1c62c671ebdbf9467d37b780c25f7af9d453fc67fafb2f065a3f9f15d4c3561eeaa73fa6c813bf96dcf02430a2e6b65da8d174d2558110dc1208bdcb7898e2670894c0b9e2c894da3b130f57a90ec8ea1bffd27a37b4da4645c546b2b141db4e2c919154dac00e78dd3eb6e4445974e3bb07905982da35e4069ee8f8c5acd0efcfa5c981b4fd5d42da83c633e3e35ebdc959bd14c8bacb52212b4334f94aa64d2ee183861db35d2d8a94"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a170ceda0613adc9c3a1e427f07beacf3b16ed69fb42b6bc09a38d803f632ad2929dba215b85683b74e2feb1d18fe17d0ea0db84d1be4e2e73476917a2a4cff51d6eca7c5e82232afde00dd2286a4c20eb09800b4d5d80e7ea35b6965b9792d99e399abda8cf32174ae2b7414b9bdb9d63e148f7357635a7310b130c939593cd3479164724011966c4232142df9966f09422f34f20b30af4b640a2c6d3dd985fe0ba3dfa9083cbb9b8dfe540ff9f6c608d18481213040768ef33300d773f9890c724ead320a1e7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "929477e9c2d0bbad3429a0e0de776695255013108261dc6404cb09828770e274d8bb650a50e490dfe917fc2047b0f8ee72e105927d9fa70523c727778cbf6ae876d641ad562938c870d12f2e047bb78920739dba0c3f8ce1fb77589623a5f1625f5d6ab81940c7dfc3dc3a641d82b2813629bab8282999317d6b93842334f123fb4693a9c2c9d8ba9bfc746642dfbd045cd2021b272eab7358aa954d453da53fc5392dfa7eb881f6f53809b692d27f3366595ff403289efcc691e118b4744a1147071d8909bef1e8"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3e98bb14fff5bdf7db38a3960dc55ca7d02333daed8712cca13dd5bffd114636559279db72554cc0a0ee1f7e15557d77cab0f2f1131f94fe698db81be38300a856a5eca85e5cf915fb7b6f38ccd2f27350e62cc30ce10ffe835118be3d435d2342ed3d06199b7e20c8e34d68902f0ab8745bd8b7d5b863d525c1f5906d2dca598db8a0f1e67736182cac15677579c58b8c670cae1be3e3c882153b2aa2988933e579ec2d6dbb00c671da64443dfc027dee6dfc3233c99758304570a982bf9b2eb59ccd70d0b54c4b54"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "aa12c7fa50ffdc2811c1872e4bee15f43e6909212385c872eb489f7e06dc1787043f56126f8373bdfa4b3f61405c73dd4dfd3f40aa5cd207e8520849c26f67716a46c0989a99efff42f24e0736e327af8e607c401a1bac77341e9a78c91e35d55b2457bdd5317a405a1fcf7a2a23de68ef92b65819e8aa3807c545361dfc9fe89125123492da958dc313cb5d03cb4b192c54ac6b27fcbc498652f5ed36b587bb74942b3ad453a8d79e5ddc06ebf806dad5046b73251064582ef5777dc530f8701701761884783fdf197f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "83e615cf6e17a29e63945710b548a6d9935850eec69830841e26cb6071e908bf72c87cf079ffb34c5eb1a390def72d004a9488224a18e189aa1092a0f1135712834d257a53dc1d0e2c6417d8f472ff13b181910f4c93a307420d44beec8875d5219a3160b8e921434ddf3f71d68db1c1d5c39d68edb7a604792f8b4e31ecda7895c99fc7031a5b98a22009c1da005ac8fd2da0b5d742743f5712d12fd76d11a18e487776ce21ca0d6e5ab9ca6d8c394c321b91c14e291399a642721361811a73b7392e8603a3004e7060bf"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ae1a8f7bfe4b1a0fa94708921dadb2c20b938239d7b9a2c7c598528f20f49764d322ebe85a5b2ea15563cf2f2304baf55d6607c52e2e1160859dcb7af6d7856899eada0e9128a180d3de6fed9334ba52b80c5c362d5591a0ec30f86d37a399927eb1c53076a12d26775522c511c83eb5b7abc2a00bd2dfd5627a8febba53d85f9b74c4b7f0c862ddb0d9298899b646b774d6cc23e4e23ab47174fccd34499253996d5e0917210e2f6daa1685f89f2f1fdfd5509ebc38191d539ecfb54ff0f5bbe6ef36ea35d425af6462f518"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1d033e06be253ab800c8176d3a9650ab2a5bcaa03e11ea95fb9ab3834b41eb0d1b2bcecfe219364c3104ef65a8d692bd77c798548b7d9a8faf7f5172db24ec7c93006d6e9839368291b8277a82c034a3731f1b2e298d6e0282ec8a7902e4f844d132f1d261d171375c646065e201849f2df73e3748d853a3122c2206aac92fea448500c5418ecfb3d80e0e6c0d51f85831ce74f6c659cc291f5348a1ef8b949f1b2a753633e382f40c1bd1b2f44748ea61127b6f568255ae25e1da9f52c8c53cd62cd482788ae430388a92694c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "104bc838b16a641749dcf73c57b207ea3bcc84381170e4ca362065a3d492e892b426a1f4fd82f69461d1ce1f3aaf8fc291ea30d6667e7e1aea4c44f7d52a5fa6d34709e6658483260ff5da76bfb74e7d194ad40dcac00daf0e45e74db4bc2248100a8b256b257278c3c98f1f2e3a80cdb812352aaf4155b3a4033999fb9fe7f506994fcf3a8db31e9e5ca8ef8c2e9c6326ca5b0803724ba641950eca877fe6ed6afc2e014651c56d0e6a61eaff7c5ed0b861d4bebe42904c0a568c26aa8abb2e97da2bfb40f14eafb6bf16cd208f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5b92e4a175437d0a53eb10de2c56401720b11715a034459ebf506c3fd6534b5e817a0f09deac4bcfd353301d8d031b1331582ac09189b48e6ccea444655866c4bbd123d45ebabb774f877cf12d33b84cfca4a6a94f3f98869fcf2bbb6cc1b964c2438c2f348bcdf9001dce60a4706d20c169a040baa61cbeb0b8e58d505e6e3739ab03e110ae7efdf91347474033defbd1e86af322ec6456d3394699ca7ca6a29a70d9b10a38fe666eab2858bfe12dacb31568549c826c15af5b6fddf779954351be1872f04e53db7b3b5fbf61fd18"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "401cc7bd9f8227efaed70dad83fc8db3bd38efc166f0f11ab142c565c68ba9db680423a3d698b6f3476ef440051fd20b93f6a2ed045825567df5a65e3f62e4442ec396ad260a16a13a1dee46c7e8d88bdd7edf223ab76a9a787c1f4fe9925c051a4ca0e77a0e78baa29f36d193c862fd3a60653f544ea9e3f75f2f553891be8c1fb882f6a6aad118f576f3c2793efc67221b37a45ab6137434f6228cb002fc137b91fb8572c757f00736879453d64a8a868c131810ffdad9e9d028d132157ecb1da675d54047d19b27d3258c9b1bca0a"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c20cf0354982ca6a19d9a4dbf78f810934db2373941a12c263adefa61a5f385c859bc47028829c531dc25ccc0004c7510e707175a102ec3c4b4c933e3f52033e67476ff5f864c446c042a21e6037f7798363d20267891b965879fde80af6b59d77862e3a229af01b7ac78b578e94bd9f9b073c38a627c1864df0083aabb17024bdab6c3c0f0f73d31d59480523a2f23b78baa0385c15f290114305d7f98786b7dbc17a8c2aad97448e8ea389e68ef71091a6a9735ac12ca5497b9171da11a93c28d3273f58b74e2e46279d3ce9d0b20d19"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "e2365c2754073b511f16a1881ff8a537541ca7362ae7b84223d3c7d1d49d03a37d6d05dd2b819af9705c015dacc9dda83474eb14b7d5fce6e8a8f8c58e870149338d320e5ae476da6749af45e65ffed550d225a39dc74ffd93ba7da476985d6f44e90fc8e82454496260458431804d802fe804d825f611772f9710667377adfb1a11e4275bcecb42175c515f6a9439a359824f82cc9d480954364e6693099a821ace362e6c7ecbe68be8823bb5b49b4f23ad81b64139e3b63d9d4d298a842f013ef0d91ce7915ee8f816c70ba2aa3994216f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9c43944676fe859327096f82049cf69e48b98715878400fdf2805e0d5ee642e6cc9c43739f418b701348a033c5cb96bf8702fcd2fac9be58262a843c1e4155ed8a1724b6ebf7cce659d88a95a0c54deb2d7d9574a45219b6419ee173d1d8fad3ace47c962b349abe1048565df85bbd0eb9b11698258c23598023a00fdd26573e41951452027125c6e894a97736ecd63fd15b29a55d8dd9dab7e2e18f541a2e341890a61b7c896e7dc67aa82f3479dacd4a8ec7558d40c34d9ae4060e13718d676c2450258d83de8a86e012813693098c165b4e"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1c707c29582d98a0e99639211102f3f041660ca03ad0939fe3855b8c1b22d6a9b8673c93e3eabc0ab231509b2b0d73c76a290a363943d12d2ff0ea30c6dd54eda753767effe04cabb4c3966388fa4c83a1906a0f48519a5fba9aeb585e0f8c45d6123a75ebe98fd1d0272f733a3925119481a321fe7509346c05128302851ba17a137f956f184e057a305e79a148727a5926de6854eb0314d5492fd735fa773d99ea34c95ca7546bd3a3aa8e66bcc6d860cec3d35d0e2165d5fbe8be99b6e7967df6693e5a6243e94c9c4a2528ae6305cbeca209"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8f1e88103ffa378f062cade0ec509bec99a5c73fb273e79dbef24abf718ac26ac23dfd2b8932038ed3cb9637b71643c161142019f45b25b4fa4c52356737a27027e805ec635154327a66bfe64efc6285cca98c34edc7fb6c0766970a545342cf840aec0a5ba1dd3c6949be4fe97b0f8c8186de07536fd9074db34d09b2f08af9dcf9424d6edbf9cd044102c0e5dc35aff78c36d079dbd2c500e19c8c985ae2abaf6b2a20716bb719754a8840ce97632116c4d0b0e3c83ccca27f11c4204b76b5d6cfe6348a9615d8e4af53500dc4c2cabf12ec8c76"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "b9a0c28f1a6156992c103a84655fc6e654fa6e45e45819513afa797024717c00cc195994512fd53ecd1e12dac4d2448e0c40308382312084d2111f7db147b2e6589ce6d977f6115f629508167df8f45bac98abd49f6b272bcc4fd874dd5e29fb6daceb2d727a2a892194cfb9269eda00626ac89b4e74bd29b21e9f6ef18cb69889a02d4f0a06a2e5718899c1dc3b051c2cfa29653e782f87fefa478e6465bf5ff27f8b6abdb500077aac97100bd955ec535a587d66f23354be51cd8170289344bac9451f74e8aee3639f7c09981f4885e018912324d7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "456844a34ae1074246f8f71eeef2010ec8733265bed7c1cc60043d770edfa320cbd4284a94be2574337e16d27f125074ebd7e99031f7abb4547b9540a7b0b5148ef501b550dd929f3dfe39ac65519f563e9254424aaafa05b1d37c16c771882e9e25d4906ac58603da749adf686932cd73d81e2658134fe69294c7a521d257eaf2110c667fc9d6f09b52d24b93910e532184eeb96eae9d9c9750ac3c39e79367431ac1af7011172d0a8be46a31010219a0310a733068c589bfc4748f3626aa4ff8d355cc893d05111c287c9992e95ad47481a6c42d6eca"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c5c4b9900b9727bdc24baa544cad5faf8340be6b3759361f53889f71f5f4b224aa0090d875a00ea7116772117dbefc3a81c6950ca7ceeae71e4ba975c50d61fec82e6d9448d3a0dfd10bb087bdf0673e3e19fa2aaa7e97eebf71f11b86034fcf5a61240c71444ac3da15ef09b27b3523d37d309e8722380f835c1aee4a767bb027ec0674040853e5b53d6a31657f51acff6d2487860becd5ce695696cfe5937f4a0217b69e01cc6facc24dfe5f5230b8692a0b718e3b3c789d682db36101795a9a5f8bbb838c3679be72f7941a1db180135347d0a884ab7c"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1781df2fedd2c39137854737d054cd3ed16b0ade411e41d97888ac900fdb46d9ae26b3d2dd07e118fd57eabd0dfd03a55793c76420666444865371adffc9b2f35068a0d70f9cfda1ac27ccb4beff4ffa5b8bb8bddac843386675c38a181fd0d935d6d51b25d78e7ff4ecef27a9853c0f0d2879c395ed1c4883987d123890d04f851c3e042e1164c68c0d503de16816f4b0e554236e5f4c339ea11d01ce652f6208f78f457a2417a97c0a6a240f443262def4b6763abf53e597bf1a28f907dc7cbdc751a234ea7d75710ad5ab0c37e8e9805102a375abd44011"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8963552ad1e729ead07750df599d734157aaa4bcdcac17e8eb19b4f99cdb162686ff433137aa4e8a0cc8df0053999196262115aec326cf37567d9ba4760e0ad21d5763977f1ab9b35c0fc667890fa87fc946ceb776a811b5adc69446bfb8f5d9908029dc5aa38db816e4a4e8f98e5a48cf0a01627031c5bd1ced8bc1940dcafe4ae2f1199b186468eafc07e96a89d95dc18ef0fed3eda5b58ce58f221a47ba5311313cc680367eeb058fafc7bcadce5f520b6371489d9e529278ae6ee2650a85aed82896879038bbd9aa8d685fc9528943ccf2235cdf69a86464"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "23ceae3008085134433f5de4b47bafe0f443d443491e6cd47b216dd2dcc3da65239515a6e6b9beb9a939ae9f1f1f5e11f88326475e0962f319d9bf75ddfb4a46e7cc3f799d7547f3c0b2e089018b75787b82ea1a7295e7411f4852f94c94170e98bb0647923b8eb7d184038e56560da46085540cbfef82b6b577c445d038f6c93fbfdfc96ab3a0191d20a57b8610efb4cc45cd95198198e6f80ac46b0601511885f650eb00992605be903bcb46cd53c360c6f86e476c4c9ca4ad052eb572bbf26eb81dd9c73bcbec137aea6ee27aa97dadf7bef733fa1555019dab"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c0fd31e82c996d7edef095cccfcf669accb85a483ea9c59f368cc980f73da7202a95c5156c34192ae4ebf773c1a683c079b17ac9d08b4265b4054fcddaf6666ca50f38f1a2ef2497459a68c06837363a526e850ecfbd223f55dba67db017eadb7a9139abb5bf3854834478b838aafa16c5ee90ea52fb2f7b8db2bcefb85b06fc455c2b6c27d0af9a49dbf2f313bf2599370637393e7972b31d8bf6759f3e6115c618e672831f84d76ba1879c754144e1df4d56b1e264b1797dcb8ab165040c8d20b931071081d7f74fbff590bdc8e888e71acc6a720270da8db7c821"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "936fdab91fba396e4a8754a97a04ba333daadc29885c9d0c8fea3387165278f4974e468fea57f2bfd8428c4d0f010833283db73735d39de0c0cb5898d0c06c0ecd05f61098935cb6130a8da60d1a6c2ecfe420f972263fff5a631b09e81c837183c5528bb1c740b36fc39cb082f3383c2b4afb25d04ad1d1f4af63dcf26a0bf5a647cd2e35a51cc119c4dc5031f5715b3bfa1f2b92de06bdac0d670fdd30980f32c51f3936b51e5db6b95a8d36279da5faa4c4e454f2b7e54e9f488071011c7f6f9b63da260a2e46d796d36c9a9dcae88085806a10a77bbb670d475778"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a55fe162b287bd6eebd6cf7e7aeea8672322d924ae42c7404ff89aedb98943f3755d2889bca488cc7000e6e9b8e7a0ef289273cd29c44cc600e330d1775e3cb767f12150e1615dca8c3f67466463a3ca993a1b788cf67a7a35b95dfff954206eb5ea1e1bf7fb06482a551625b5c9fd9a86e8414c8cf79d3a14104a153cbe04aac5172aa4c4a89349f5856c4262dd1d7317a7544c9afbbed449e7dcc2b58d9df6c9c9ed3883e42e80f5c2433550f30e73c7bce0fccdd880adc19282a392dae26a0108e7faf168cfc15937aeb046d60712603286b8ddfb27916b79242d56f1"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2bd6976592408cdbc4e41dcd3ecfbb786775ddedef914d9058e6753f839fdfe15b17d549dbc084aa6cdf3befa0158aa84c5d58c5876144fd7e6c41ab7d42419d0dd353732e0e6d3fafc4f5626c07433390a4fd467197e85b5de7e2cf1c26cc575356adedcc0740008523b503df12ff571387726c5ccb280376d19cbacb1d7ce7aab8b13292c6a8b8881e949cbf6d4610d16ebba1d46cdb8d0459596e0aa683d0307bd926e14de19b9bfeaefa29d91b82248604673a455520cbb64eef3f38cfad8e126a3b1cfa1aaba53a784c8ae0c50279c0ecdab54095d36f67ace9b8ebbb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "71913ae2b1c8729ed6da003c24a1d4f96e28d7faf55ca14ee0b2865282b9b61103ce6ee0b00b00aacf2081adedea5616f9dfd22c6d6d4f5907bcc02eb33edf92de0bd479794f51246d9b612b4543f6ff633c4fc83bfa6144c9d26721cdc690a3d5a8db54d8bc7873bfd32924eeb502810732b5ac2f1852bb021c401d26c39aa3b7eb09083093a9e89bf889b53383b5af61110aca1b9fdf38908c7d5a184fc5f46b3423a66a2749feb8de2c541c563987278dbd0513d99b732411012b5b75e385510de5f6839c3797dc094c9501d5f0504b06b43efb6e746f2129ca189c1da424"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "9d048a83294de08d3063d2ee4b4f3106641d9b340a3785c076233686dd3382d9064a349c9eaa78028d35652078b583e3f708e036eb2ced3f7f0e936c0fd98f5d0f8aa91b8d9badef298bd0c06843831279e7c0c67ca7e572f552cfdd984c12e924c08c13aeec6f7e13d161785546ebfd794b5d6a92a4744e52c4cab1d0df93b9468be6e264e8cfcc488f9c3c1817cbe501f4b9cc5999483b7433aea777226b25273a6ef2331b5f3b6db8091591e8e276015da3ef78bb2ee0526ffe23def2d8d193cbe594e8ced1f3d216fcedae2a1eb288da82e34cf98aebc28def658ee0849ae7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3251c96cbf82ee2e5264528c0b6cdfc23d20e1eb2d6441b5d62f0fd24c692a0d45a8bc8aac32884b7141ac0f4f113ec9fc7f6b4db3d696374177f9a42d602ca471275b928f639105a55b846da9ac7274cc37de8c38541f6895f94d72a81e117844b46601c201f7189b935a96e42505f2098ac985d92dfe86349a706ef6325b3c2e4060ced3c453e68ed09e043bcc75846b80118dc53530248da250fb57922d0afa53a7b2c89161aa4fa372a46b2a8e1307741cecedf585d2f998a9d496763800b6965c38a5d8aa566c709f13699c8185ab4fd8fdc8b824f4dd6d1c255b4788f50574"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2de31dbc8a012254586f3229d3524fc529554e98850d30acdfc11406bba6a142029126ac165ee90b2de7509fc3571a8ee12e16b05054eb8baea879d135b39627f0d8331be3e66bc720c2096ce74e437daebf3bc53d8f2ccc228c3256d3edb6e9ae7c354a0c9350e6d663a9a30630bf9da3d96b96608a2a171ae28105714058b6c4b38a36c56561c4612c32aad25c65b7fb6faa4e4ecd44ebf9b2fad42ff9a807cda2581614fd30d41a7436069399b8d4f062a37a5bd4066a93d541fa5797a7d3e7dc9c4c40f0bbf5256f71613240f9ef128b3423eacaf428ada06b6a531f835281e4f3"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "07dadee629a08223dcd7ec441287b4c5e26347451d9c003e3a8496b4ea313b51126283a6720d7851e24423d9c9c818b4601247178f38a61f45fd4c8596d79529d416834226666a2c8552bbc901cc5cc3406a18fc88077fea52e1b620748553052ab7788c0d025b095b736fbe714cb3a968ec16b5917652eba2d7cf32ef3140d6c27b25d053e9786d24cd09a5306a0ef55e46201faa6196a91084267d7a7b5ca57c2efdeb2cb97d682d2a191b915553c8933f1d1b7faf0b4a1d83ef611f1e44438bc1c3d860fbfd12b5f26e5a6889a31ce26ae6a55c7a563b5816d113423ef3f25fa9befc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1d94166bb387526d519c4ce150221954da8930f66765fe6a5504e30a69962d595cfdd07a82c003843598864261f053bdb6f5086d516c261e089caa89990f0967605768ae9200bdfe4dcd7b77a93265cb33d9851a2a1036113c732bf3f37534530641300f0620de5c16101e16f4baf39d9fcbfcb01c52afce0992c329d8dbb438c314eee995c5020611d6f889e06b8a032785cba9a415580dbf752b5e510523c89f478cc6f047bd926f51e4a965c9749d1e76379c0e7e5b56803893bafaa4d2892b4c52f143b2fa777cd1035ea418684b8019df084f9a3f1f768753096621f342895c510d01"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "fc0073f199ed8a1d6edc8e7bdf182670003108d82b283aba82326e856f8de378987a03d0fe8d2041440fd29d51c63796aab44090d2b14ee00859b3a08cbe88f724badcd3c401226c5db8b307b8deea5be305412b080e9f99cf79d6d08d3646f347a7afebb62912e3e246e2e726f9aec5c101d916e47f984507b1d65d313697256c77da7eca3bc5811c87bee02a2826cefff0d92bae989609aaf95d70561b40d98474c37277c884aed887a1606d206b11e8a8a71d1f1d19319557b57351228ff0404be700a6cc56c0a30f3d4b7a0a046463fdaf19e7d5f59e155f378e35baa33db1e881f2207f"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f42a6a91278d6a076feba985b1cf4ce0af1fa9d6d039c136e8971e665ff088a10b6b9a379a6f5526fc5957773a0ccb8972a4a19be0745ac13937030a54b18dee4f4c5df47a58a33a7516b90e646e5da999166ab0e52f457f7c9b7e391836a687eaae37b377e59a4c995ab0c57162c307ab951a9ba6590f429cd27250e7010eb794ec1b1ec35f8aad189b2fd3e8aff24d93601d91a4884e6f84b02757ce7620a02901519fccfda52f68ad6df709d112a9c25d66bcbb9622806427ca8b8d346b6db05874bde800cde9cf17df4b05baab0f133febd1ebbb053b49c109a7f5b1f864a304d10288e2f0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "bbcefaf4a0739509f8a2f831c954071aac52e60cfa882a867b8b910dcf7edf92e1c0692bb027bc378c460a01cb6ecc8f2a012dd84ee5a678cd497b1457b6d393421fbee98ff544fc7eba24cbc3aae506254d9a2d74dde74437ce4c8a69010718506bf4c5943342a942e5e2d3406a3016280b6e37954c5d5e763346251afb0b746cad68cac757f9df765e092518729cfb9a5e76300c124e708ca33591a369767ffb63933cb72fba67beb2223d98984d0b75eb5d1a38615913747b520b3d613c715c0c77d2987bb88f3c419bcc5d38573cf4a8a4f550b2d876f05ca252d88c70a561d869a5018b32f7"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "dc2437010cb05d9cab2af5c275e1d2acd627ce19fb86355df91fb8d059e60d591663c8eb077d48388c9a321057a98136f49f0098348d9f29d808936f98bb1787c7ac75fb14f6076dfd2de5b59b1fa4848cabaa9a99a091dc24b561911c392ecdbe53f4adae82b852d830adea3a10490c908e337ce0a6d12354ce05a37ad3a06696b66820af8a1f67e6287533fd6f38a5f6ad1c6b078c08baf2c37d2683af01e6a5b33796c8ae48935a888f9bd265f4f11a4e27c433b8b1c9afd140bcd21a07e24378ad6badde8e47c57e3340f49e2406e8d49afadd65eaaa4c3d078c27d7e42118cb86cd248100a356"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "6c290db326dd3152e6fa9b9c0cd7d49e50a0221b96e32f5f34a8cb7d0c2edd3e937a7d025d6999b7b468add4d6894d8f7aceaabc18f4d9c171f1fe95ea1ae8570382a8450fbc595d95b1f51d24e1abc2970b0e1d20ca40aa21bdfb3656adf2f19882eda606f5ef1c03174e1d94c8d12f0fee8dce6852f42a364eeafa27a7971d4379405db8e46baac4d685b969238e5df06292a6c790bf1994a051b038e1d8db91e1bc4804f32443781c34a552ed2e8100cea374e77af56ba0e11c45990d3ba68df9087b1f4968cbcbb1c42f99b7267c76af926ff3134e093df28fab039cad420c6b70f2d9b5e678c155"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ac724a22ebabaedbbb052953e3c264a4b6440f313bad501cdc1484b64f33402a2230898776db5c818c28035ffae6ea24abd04b7159e42159833903a0c23a7c564f7645e49ddedb748fd9e51bd6cbf2eced98caaa35226970f003ce1fd260ac5795e096f1c04aebf8fd36e5e2adeea929b5e963a3cb71d6b55c85bb7d3a2b03a7e74b4416de8fa68950168d7c3ae8ed2e29bad1e8a182a7c5418e5d564373163778cd3c34e9d320eb1a60480a8f98b12e0026cbd7752e6079812e3767d9f55f3f10b8c214a6eceb2a58954091a06b33862af171a9b60bf2c6a44e8766e6c56e98092c56f2a8510f6d05c103"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "8c70114f7cffb375c2b9a06e27297a5c32418b2daf68af5bbedcc7106edbc070e764bf40c1f8eb15079e2ab77f898afff3490108ed9afb7ea9cb05df41d263be0e42d2321d3d2656622d7bd232bf68d37375fe7314b09cba66f19c8b59424198ee69e7a9f3de0ecce0685127807ce336fa479ccaf7aa1ebc4e406271ce6c4923ec36093516498cc227f9218869346c80ba5ae83e023aca0ae2bc86b5bf5d115a4616b6587cb869d92f8c780ab70d5766de07a204af5e1c8dbba622516d2e911b36c82e4687e4d258ea616c07f76ff0baa376c8d5975cffac0b25817f779ae3ce88b72eb47e378484ce999bf0"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0733d59f041036398233fd47a84b93f6778ae5259ef5d62aa3b9faedec34c7edb570c18b2a5d2c4c55cf656d98a1ae396d45a3b746b7ad6f07312c3d05d1a50ffa90bcdcdba105e25b7b0c52664223f8c2476925d46dc6ea2406ded7d0b0b292f6656cebcc7616cfa4b82aec68b35d1da67f6ed2bf0171849d6bb65128d8a140ea5cf97f1003f8d7093bee077be78def4f7bd2caccbf0644f26b26285225142c40038484c3bb9ba9597744f4389e76dca3eb695c33ccc621cab1fb603cb3535a0ad318d220385d5e94f8674f3d55e97e097f8d5c049e911946afbfce783819951d65d6bff4567dc951390d1aaa"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "398ddbba3dcb5642c102efa841c1fcdaf067062e7eef8e2ee0cd73d7f77e57372d6ee1a9b7b6f86ad12d575001ae71f593449cb5a476c6bfeddaa2af0f9239c1d7effdedf66ceaf413707b5ab9661a7cc0ef8cfe4d1651579c4f0f64e2d12a52653c54f2dd60864e769eab8a627c89c56ee93365d031f0d2523cb95664b1575d51b122f33c9e94de75432a690658c977b68aa5b721a393f9b9b3b612c10e920a7d510c6d8460b35f8614c42f5d2c241a01b28105aa7c1b521ac63ebbedafac6d5a38c898e8590f918a1927bc53aecc2b1c8b18d7df9107c6997d9b3fa4b0bdb1c603da619d9e75670b97a5b40f06"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "ef07bbc7c4150dd47f8c69a7989948fe831dc798b0424dcd6551bfa8e88216095a7e5d720909bf3d23526b9ba464b66ff6b63a7337c31451ab9a15f04ead809a62bb52206237de77597a730106d02d227dd6099ea9ee2a92cdc446ac3b9d024e32255adb3e9b56b561c431e0b5a721f0336f19568a5335d0ebc6c73ed8ff2c15e219477d9e4b67f2928e251f8a61a2848857e037d010806c718ab062967fd8e85f3722252957923f5f9005aae47b4b1b3fa464e3ba9df573a56055f17e903126fbbcb6cb96de92fe617c97f84ef3ba0d8f2651dc4aa80c157f372ae1bc02e5067ad076f3fe48bb72c0f3c99273f82b"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "c7076986d2333f3a6752adf11f1a9e5c6bc4755f341073cc86a9c7519c8db029d5ae833fdf3fee826ff4692c57880c5074620ea97c00f1dde1e8a0f18501627984ded4d1b5c4af35be5cc1bcc868060a49a968dc0547acde490b4c68d79924a93a986aa0ad060c7de706e8a99ce8f84a4f8707b52a8ee122b763ba580d6b1f35f6af25094c69f49247da96c836991851ad36f60bf577863d7471608a012afa7a56656abeee7cd9b4f1f4d9d13a8526c0f33cd251caf7486639e787250390e7e488e9ec311fc3d847a7266cc59bcc2bc34192554aa57cf25db10ce04bdabef3fde6db85f55195ecc2ff892b2e268ebea6"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "01789f40d42d8d3e4a416fd9ae7de78c3a30507809eda200e1afaaf8d7020cd1fad18eba62d821946f220506cf105ff0e2069a771a2c233714afa6b2f695497e4b95c9693dbb93ec4c9a14720676aa87ee31dd34e4e081756477032b4a57b328285f2cdec1b269754c474936927e93acc26012aff1bb36f30c2402aca0a9b9ce9568f5000e2c934263933b436c94f8d6589c89db7edabc5d03a8fe795fe50c5166beab64ed7c22662b984ae2c66dbe4c090b0df603b27c759278f8d66859afea3f6a8f02c2c2a2202b9fc29132256f164b5050a803b43688dc4c9ba86374a3522afba5d1a19bb3820b883aebc267627095"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "2c61944bd6a50da00ebb951d2b67d79fc6b6fb5aca83b1de3dbd7690ab756bb1e1a21051ccf1e24136ac8ccb42a2ee10be94d2cb9289d5f52b6f90e9d07a3478f36a1eb7d08c3dec52ca154fd1427ba92a4ecbe73a71bceafbd26e9a39d50821e2876d3a0c0e6e373b9795dbf72ea29cc439ff42706be798c90d4617b39c90ec84bf9fb699dc8a9a34e25d81759d6c57df45efb1d0d68aa51278564b99633ed5dc464bb7d53c5c21f798f33bcd868657ecfe75a1ed8149d394b398969ef624831b30f1458465bfd2fdf3f284f2ffc54bf2817b5fab2e02056e864f78bb6fd870c64f3609dab218f25da8060f756e45121e79"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "942fa0c68cc72f69518a3a7aac0cde45bab0e928b5cb2bd24d049fc313f74b6afa87c4e34150484f3b5200163f8a6472d04777928ecc49319539fc17d71a38090f55a74f757fe45781a3c09f08dcd3dd4c73c8533a5e00cf8a86ebe77fe45be2848574f7c5d25e9a0632a60d2dd41febdbf987d2a0487e4a4ce6ed5f49f2d741a88ecac232b1498253fa4ee8147bbd0f600abdf295e81f7570015aac5fe6ca7bb4a99bb3fc54287106d7fc1132a574af49db82a7b9a5f33e193cde527ca2176c52cdab672165e0fe5720f71ada57ee90060aa069ae2a0bfe67c1b71b17c601c3c2224bf9891bc11ba216e3ebcb51fd95b8d7cb"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "0d68cfe9c087ec116fe7572042385159cc705960f842aabad1ed1387ec1697f4413a23c6090041328fedd4b626c6eeaac5b5a71acc1fd1bb8fbd228857ac5bd045c364be7a5a26338ff04c99c4c473cf445a891db6422d1bdef4533442df171643fc36a092fabb464298e4194c9e2950884de13d113ee24160a416404c16ddc5d2476cb3fb80da543e6ed9105f6003977acb34e1fdd2cbdf7a00d5ff84350b74ac231418c0d88269d02d824802791ff42a51cc835deb9869a6023f867f82ef6dc0bfb03e6dfa835646bb18a4074773486e308aa39e532aaea4e6fb35dcada7e060f8282c371ed26d22302323d4fd142a85534671"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "45e24b167a0bbef1bd8f79dd047763d0754f36a7b623f298059d177e8ac994945c37d2c4af06f01318960301595941124592f2995af1459d854339998d3ae17534df2d9793d6e203857d02c98a0cd88991e641b3e640090ba303f87b907dca8ca462fac19ad079b2c82ea5b521ab891b10138b083b3d9fa214a8fe60d1cb3599c5d199c61a2cfb7ee2f39e5a5abad5ac4998b707545f73e92128d21803420526d2598a53bb314adf29a0ef56b94bd2221601eb53ecb8540e8fffd38fba7bd827ef255e4ef55491475c0f383a241f81c72af4e1dbf2a65cd4d18a497615aa0de2791a3511a7977a8d4d41492bfa4085f2fd4e8f751d"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "1c1bb695ae90e6e33fc1e8b2a62ab98bf835ac7193440f2351c8cdd830472b637d2fd9c9013cb83caef506abc1c4f7567706db6046b1d184579c7a9223ab1b35e32898c70a3c27628123ffcfa518612f080a2c4a9f8e0a927a47dc98307d2b48de9d5dddcb5c82f0b0e4e610d44f1baa9bbbf7f5a727134680bb7d1327b73b52d8e5e36dbb53971e99e699d79f75a3fc01316bd7012947d119d6aeb7f75b8fbf0479c03002148553fa0da450fd59d4f1bebc252caa11ed9bec5b6ef54279b5f8382b61cffc67ec03f4baa7ea476c31364b86aa8ccad9fd0818717f0ced2dd49477874b4341c602d7a1beab860eb476c7e3ce597e6926"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "7a3cd9bb2277e2c7f1134fe7233f0f7883c2db9fba80aa5742b03041de0fe589d9e5ea84470dabf41bb66816f3e33ebf19a0ca5aba1004cf971249b258ff26a98dbd0c37ec6cd574854109433357720040bafed4531e0079186b1e853e0ced35d08d27f6d732ed6e2c6651b51cc15c420a24f2dc36c16ef4b3896df1bb03b3963f9aaeb02a48eac5772abd5948c2fd0db2bb74e3351e5eabd681c4f413655bd94dec96b1544c1d5d2d1df4bdc26020d25fe81d5238de824687a5505e1fbe08d11b3924b3ccc070fd225bf01eb79e3d21f7b62a836cd3bcc11c931669c37613470e356143df87c48848a829f5e018973a5db88eb6c60203"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "3f158afd0733fcc5dfe1efc2dd4eada732f942af734ee664955bb1ba613eafd0f349e7554a14d68200c62d8f2dca2ec8b81c8350735eaf437041f78b452598825b6899560963ade66a0fc74ad01f8343d1d19c7bb327a8dc14ffdb1c42fa72b2970d9155e2da6a2e6419d4117842d826ff38ffab9617307a0283d3ea28c8104ad9a6e087bb750ed1d10fd8f7100b1663682e979d80e43968c33d9eff66f4d1344e583ee521e78d0a2193c0577516b978339c143bfc689bc744bbc4a9163063de82c9706384b6b385e54666c86b34f23c1e25be293af06092ca31d857e11e5b2caf0d19dd3afbe85380878eda76d718b4bb869c67e044e242"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "a177af4387b9bfa3d59e97ee7b0ff5f4ae4a326fd9204c8d28831a67fcc385ee6c4828247b16d11aea9bb8cd9e6c4d2876c6b2fa6d5041ad39e1b04039071e29c4d86417e7eac4fc7d3823958a021823e2c880a757dfbcd0c8196371db5bbfac15e4d1a0596508b6d26f8c4a664924c95082d173f817995b44c4285d625d9b2f56c86632fe1295c5a8a7a3760028072bcb07bc245a705e7174d06b9d5c0c8ca495b9ac218f1921fa63f2db3fd148f07545366d008fb5aead7497d902b91fbaa39669929d4ae9d07df8557f1f0aed7b51252f10c6606e5ff3ede1327530ca356b4896ecf14bf7322d77fddfbe28d52f6de7f66eeb81704c87e2"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "01a15b9018e35cc342c926b01d03ad9db4993a6bf92e0555969fee90033f28f3ec234c1268b11b040dfa0770d4ceb39edfeb8ee6a589f4eebcc08d2d1b0a1a52953aa26eb44fdf4a2743c3dacb212a0c0f325572f645f53027b6f3c0c55abaeb1b0918c89bedcb5028f094d743ea354f8ff553c45f111a8fd5a14a4e5c835164747d302472e19a67da04b4c8e39756a9d248ce14d1ed43de75aca86850f2455eccd4639b2af035bb3f504cc9065d091c1c47e036083cb3fc50bf39292b11737c7ce0b49673ba93981de304dc65a671775b6ff927e3ff93850b214fffb5792105a4bdc81354d5b09e84afbdd1792b8fb4e9d0ae3dad2492b03282"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "24f07ae31279ceed18ec6d35990f21200934ad6b132c6c62e82fe92a40a0e60a5bed10720eff5a1f728971888682772b2d9060d4fee88f37d0824e7384dddcc549475f0e1a44eda4804778b62febe46e04657a20577ee70acb3425e334881eebd8ddf714ae8c527ea747e3367de384e595a43b299b6bb3f6b0a4716cf90038e0f75a47d5057d7fcc3c8a8f9224992c67f8ae0d3251ea09a24aed9ce57ab637f6b3cbb7083df62b6287f64d0877984c4249d113bdb2b07865082aa24cd7ec07061b17de320f51f29f25b82d7073d369cf2dbf96310c0c311997911b2cc02f606f9cd99663c57e78499192a2a78f9c9fa67013e0f9817287faa69b22"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "4aeb32bf9d050f10bea18d9f71b4afea7bd08550e574e7d50df234c7413668b297b6721d7a0f0bdcdcceb2f55adddea28cd59bd44be0c5ec067039e428706caae11f565d961ad6e7f4c51b0aed6d05cc5b8d826c4b9c39daefb6c7da46dce619a359dc9ce215a215218fa8d54ee0b4f301b6c201c7c2c5f7cb1c6e0cb76ba6c6e8f63ef7a5213d550b0d0857fa0ff9e3e38e497161617413ac066e2fa539520233193a5cb7baa0c2cb20b45e56bfed2c40a9544d1f230dd0cd6d4976e7cf51da8a13200c3957c0154c8237b2931ce19b824963ac576ea49b548cc6aa85c47796b470fb2c6308d88f390bb13607e294c84a838b2713b14ca6a5e8bcee"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "77e607478be5502432230c913d9ec82f967d87c0ee169a74076f989648853eca693277287f8a5b306bc94dfdbf64ca5cb5dfc0bc498589d51a691b8d57d4b0a9ee247d038fe1b5571183be3e75c37045bf1235863ff1b84b208c10e7f1a5ba54ff36af5b2870129867164d013e0a6d2cc067a3509bba2f46390302c80b651cf590ef69aad8effd94cab28a9b44be6a38b58cfc47c9c725d6fa467894163383b6873d10d263b1cbbad932ded59ab503920267ac026726f794a335a88f6ef564f8968c6fa6f5d3ea161eb6062ca349b9a0e4038273399cfa297a6b07ceda1ebaa99c9de2d935ee230a08c5a488ad46f3393243371d40916b8063cac9da63"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "50957c407519951bd32e45d21129d6b83436e520b0801ec8292d79a828106a41583a0d607f853dc4410e0a1427f7e873455a75df065cfc6eef970f7e49d123b346976460aadd91cf513c140c356442a84656904a8b1d708dc6089db371c36f4fe059c62302eaab3c06c0cb3b429961f899dcf99798464b8571a440cac7a52b495f32417af6bc8f58adc63647531f804b4e96273b29b42434c1236bde80ba3744fef7b1d11c2f9db332b35bc25123338ac9a0796aac213c9709b3c514ea7ecd80e22d3d8a74f28c8194418a6e1ff30714d0f5a61c068b73b2ba6cad14e05569b4a5a100da3f91429d6e3ffee10ceea057845ec6fc47a6c5125b22e598b2dc"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "f2273ec31e03cf42d9ca953f8b87e78c291cb538098e0f2436194b308ce30583f553fccb21ae6c2d58f3a5a2ca6037c1b8b7afb291009e4310a0c518e75314c5bb1e813bf521f56d0a4891d0772ad84f09a00634815029a3f9ad4e41eafb4a745e409ef3d4f0b1cf6232b70a5ce262b9432f096e834201a0992db5d09ffa5cbc5471460519a4bc7cdc33ae6dfe6ffc1e80ea5d29813136406499c3514186ced71854a340701519ef33b6c82ca67049ab58578ff49c4c4fbf7d97bfec2ecd8fbefec1b6d6467503fea9d26e134e8c35739a422647aaf4db29c9a32e3df36e5845791fdd75a70903e0ce808313a3327431b7772567f779bbaee2e134c109a387"
+},
+{
+    "hash": "blake2xs",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f",
+    "out": "5784e614d538f7f26c803191deb464a884817002988c36448dcbecfad1997fe51ab0b3853c51ed49ce9f4e477522fb3f32cc50515b753c18fb89a8d965afcf1ed5e099b22c4225732baeb986f5c5bc88e4582d27915e2a19126d3d4555fab4f6516a6a156dbfeed9e982fc589e33ce2b9e1ba2b416e11852ddeab93025974267ac82c84f071c3d07f215f47e3565fd1d962c76e0d635892ea71488273765887d31f250a26c4ddc377ed89b17326e259f6cc1de0e63158e83aebb7f5a7c08c63c767876c8203639958a407acca096d1f606c04b4f4b3fd771781a5901b1c3cee7c04c3b6870226eee309b74f51edbf70a3817cc8da87875301e04d0416a65dc5d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b5aa"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bc38f1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "57624fb2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ea9d54f5f2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2bcb84c09d35"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2df3b0c53f2967"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "26de76fed412b6f1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b91f740750ffdb2aa9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e161ee158218cfd98f91"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6bdaf88b0922b637274001"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "eff9f92cbd769c81a64c20f2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "313f0d863f80e115d342afc286"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9ac7c942487e8f48b1bec271562d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "221d56ed5ac8b0936111c773f9a744"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d0a446adfd1fe0cc61e42e70772584c2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a7248218b83af8ca2728d9aca773438100"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7ada5a3cd09be192f152e36eb77a49228bd5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8969cf3e34b108498786f3c9807a54da29c5df"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d6981306dc3865bebe4ee085ae81a11d43601bba"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e1f7cd444fc960831929a1ba4c81316537e315dab1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dd675ed39403b1500a2a619889c2d9d91791fe15d177"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d503e3a0261176767e318f079e9c4941cee791d3db3e03"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4bcb663054528ad4cc568d12ee1ac0e33790e0635189e53e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ee8ad528ce57395cfc101654a2e205deb62429640755a6067c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8435fb101e96b9dbca75a444212a99211ccb35173e9f1c2b01c9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bb849abcb58a9e8a3a2becdf0550774cff0093d5ee5dab5e9db38a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0a74d45327c814c45abc41713680021f487be9a133455a7550fad2e2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f662e426340a253766ad9a1a13b7f60db4bdf953a04456789b5a261543"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1a03271192bdc3981f166cb43945d4d78878cd2a2ab620f56337f4cf1206"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e8cdc5a0f15392219c8ad35abf0c1a976fb430debe801887ac8000a7968fd5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b5d259e2e3a86c77cbf6d53f9dc78daddc2afd84dbb4ba7e9891227fec079d5a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d3818948294fdecac8411f860f7cad50469df5d1485524e059d4dd8cfb69c32bbd"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8e3ee191e4d30346f19ab6904b6e810d416a87a1da3c7f78445db72fe49f615705a6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c2622f680f4350aadb5dc35300e08197b1e968a1df8b3091cadc3abfe261a269605319"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7030a487b0c270d224a0f2eba284b876ac44576a119546af47627417ddce0f4650bb8b56"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1c09ce4bedf8ee67d19430f8a4708d73f0be22e19c55fd397471e7705ff9958603911f6a38"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "84f7f7502bd140a07b57e0f69863874a635403c111836b3fdfd27a030582e6d8e46162b62cf7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "63971b351ba119eff6342fdfda6bd558edada5c56e65ec0648ba3455fca1a3d51b603c028ead8f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "64e5a1f06e4d5cb5859ff01f3af1dcecdb89729d97aad3d4c8cd96eed4bd10487f918ea0ec6c96c0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d3cbcee509e8efa84f4c54f6eb097f17ba98c23024097f8ae5498d364d45afecb6ec1654e2e3c073c1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c35631a7735d09551b02c64eb3edfcfdd515c12646bb51695ac51681b33841197e92f6c3a0a2691cfbd9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4835394320ff955c272fce2a6eefc8279aaf63492610912ccb525a9f3c78870397c6dd35119900e88385d8"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "66c4227b1a29889d5cc7e2025fa4649c365e56d153eb4c4e1790b3f0a26a3553c51f198b04851401af1c0acb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a1550d81d0e465b8e1bd228e0d3b71c29a23f8cf58d9c43361ecac7eff8698cd68bca923c25d08be3c92bb9926"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3ba25c21d16bb7c93ce16fc914b1bdb5b7ec249ba7dda6be1533c76e8dc20b704913cbe53201086b0e14e5901042"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0c4c0363a32aa180de2d3aebad786dfa1612141ae77f2eefedda3fc6366f34ef8d64e496a30e972ead3760f13553f5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "60fea990c5efb33b64005694d1ec92c90ea86f434ffc603cc26393a6bcdaaf99c8993f6f2fc5a3080a5cca5532697a08"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "67c9623f20ada31853c15e3d973b8a9c69643c3e328908bd138fa7d74789b4e5408da66ca04f0a286cda823c738958665c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dcda6413fdbd760d59bcdf5d28000c099818c9237511acdc6e0ad40819d47c40f0f883bb0b98d3caefb7fbd281db805d3aa8"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "120c123171c486c9a11af8d7a1aeef60f78d071c8edb55fd97959261e4c708ac06eacee87e657b84a5072a7989b101c98b0415"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "434cb92246e474ce066de67de1fce06ab17416438598d3cff730faf1deb4574812e877f6a3f2dbc30a3e48a2cf4e441da32c4ee9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dd4cde9f87ecd959a41c6454869e55342ce0e5d2ff306b3d4dd2263365e192ee6781fe463175280d4682b397b8d6020699ed3a9611"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "df8471721ee7aae06d5aab20ac9ab5624797cd0311ee38116eec76748a42aa5ad23d1e3dcadbfba6c296aceaa05512cf1f2a2b415c14"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d226e59df92c995bd5fac8b9cdbd4bce4e11d6b2a2cc382b253a5188e7f4164063d1daff2254b4cfc7ecca462b7c1e11080c1ae51dd908"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0316b9cf375915d70a2c0a0f6560a609b3fd43bc8b26b8489caaece3c8cab25beecc3bb86d3860d6f2ca9297625fa2f2d5fcca5f6f0a32f6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "828bdf033346520f262ac1383a5e7091640fb9df39c51f82de52bc61b7284f4d7cfb1e90fa19d0ffe3f38dfd60fd05136d66c190cc47639634"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9388577eb0bacab40bfc38e2333f82fe72b575392db914da2706bf2a30787d638b6b31343e8245e4dbb2c962cf3f940d8ed0945d2db04b902b0c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5a79d4de91c298c87bfba338f3f85efe00275f6e5463419af83c34129586f30a3d36f57bdf68c9b5e16373c9f9921866c302bc75722c314fc57cf4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "73068c5b623b14802a9eb899f6285ebb7e601c4d916b0255762b7cccc2161417695818a605fed681fd4016e4cb1ad3a42cd88fe1a3f73367ae0aaff6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "668d87bfd70619d877ee8d8f86b5d5ecc4df2aacbad00f2dcf7c80741be0b890bf404bf62c1b4c8d1b0201ffb92d85fdc45149fa58f557a9c6a0190e7d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "cbaab54fe4bfd9ed5d9b7fc97d8a4105af147e13f009514ddb083402ee941ecc7dc3c286308d9555bee67cd73505142758db79fd819ed399e490b801623c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d9942e996573688a348aa0fd1a2951b11d7732103acc23f31f27b222d5103879b9d3837f2571a7aebffd170ad03cfd89281f48fa70edb7c9f4103b5b8bb791"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "571be91037c15145e2ab4894a7bb8d8a3cab75e6e64ef296e760c15cf8f3f3acfa5c894ee56cb6ac2db9b32c39a1cc39f96c50dd333f1059230482f3ed2d9246"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c6f0b1b66f22726cef3e4fca2325d2bb4e922b39f9df5ef548d321419c07391fc311904407f98db7d7462db1e8576138baeac2a76400b2a2f72b4497c19e239430"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "43cb5507bcb6d7162f7b1d6b81a958b1e21ed2db9ae907a663819ae0d613ebb43c4b39359ff859ce90a9f65c369c6d30b83aa56b0107a5193a6fadced2d6c0ec5be9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d412ca3d1b8fa9adcda589c5c422c295c3fe953ffd896e7a98f9262689bd10670047d9224b685c449b6daa5ff5d660c3ecbe5b3865652932d35cf15176de70e4356ed9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "54955d39b0806ec95897e117064c4b173f20fb248596ac8b00ce57de2d88c01a12f42d3a6f0de1d1af8c41c0b2f8dcd613532314f773bb3ad0f470500466f0d8ae599164"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "713b87f7f4f2edb42d279e9ca3bef61e8ceaad72e6ea90cfcae4f9638798e00e8d4b464bf49ff26231dfca5a4dc8b3d47afb36708f494ea2c20cb9bd3d344901a42a95ff82"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c9421a7a80df6882010c6c4aff7ddf920924fc77246d1870da90f183c14dc3264faeace4c76426020d8383efaca2abfbb0957f1cc8249a212699019d36afae811253e8bb3b26"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2f28d45cdb35951f9e043335c0df22d53e238a7b2df3bfd74d5656bb7e65f24d12c35fe0254669622edb9f76fe2672a7978dff201aecfd2605b2b326a73a43fd470dff9d8d98bb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "93694e4b1a7b15ac94963b9111f86a29266f4beabf1fce740ee44fd264ff44eadd8d0df5aafba8b8b65f48513a5920bcccd2e4d9c3a90b71fe51e11e2857df2e0379debecb4ade7f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "48887c63b6a5b7351632689a03b53cfba034c653cb65ba6756e0f816eb630663b263ea897025b65703cac600e1a450d71c945f7063d1606f0950da744f47ce0021d7a180e943ee9aef"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "44c7a8ed8751f54d0e5428d1ae063f1ec081d93acca64542d28d8c11aa0011caec398a2897b3c3a15ed382610b23620e833ab295d9a0eb61afd2948b4093d9e5df08d01d03dd6834742b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d625de2d8ee2ad2ef5a207af5092eb7965c4df09ac6b55ebe2bdaae799162a32e576925129f32f02c00e42bb2ce5afd73e0c64b9fa8298fe1495f0c8f201ad5c6780b83d58787cb2b4d8f2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "36370178c82981799e8622265c63ecf2329875efec250e995a8de5064aa5f1dd80d2854adb1d806f6bf2360c567c34e802d58fdd0ea15008b20492e09a6e11ff340de57dd8b03aa319d61c41"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "554918ff5b98e3df9c43ab9559a75e8eeb8f2bcd5c4bc87b8a9c2329df8fc35c241bbf9ad354fba00c318a2057e9eea6184260fb11072f57c6a587add3043c9f2bbc162abc6e50d06c7c673c9f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "72715c4ad8a633712074b9f133fea34cad5f7c44aa12ae7f1027b03500a9a132a7ecc477c0d18cf4a1a794e064eeca6743534ce07dba5ca211251c903a6d2729d02728161fb8812ff511e7e49c16"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "98a842b0fbce066ec6778cc378ca4b90c69ef7570247cf789dd5c9a502f5f7dcb3ab02c32f06375c2e153237babe51d0cf3fee0cd75bf1e34095a98ba712a2e11c1017500abc9238dc1494c527c4d5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2e548c4d06fe63198b95a9629e5c68372f8c51b0f2689a2a0b7994a204dee4a5669525786c5709e68ff35faa3d29be6f8902ff1bd742c4f1534fe3d6b5cf0b4f6f1c0f9415bd9801ca0c33c8e11940d2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9ea0b2e651b1d1755a7f67e78d2333b658bd4dd49157795657a7ad8bbce158dc0d4a002e5e737f52ab1e55abd0cfadac928a977949b264946af48045920b46da19f63649dc116217f6ac67355edb94c46f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "740fe0d1f4db6f6337d300089af7a166ce44da3c6e71e80ad6e92d604f80ac067eb077f2ac2ad76bc0604a8089ddbd22ed3373438e5ee0f25dc34ed466ff4b420d77db7e1e9d88a4ac919fc421116b62e673"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c435ab1e8d4697596abec90384c47634689ec73e87fb2d360f30bc5b4b47268bf3a1f31b271b800132f8a45dc85f82ee7620d50db5bdd400d36a36e1c87cb2f637c30afbd07ae34417e77ef2dd24e017deb7b9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7f32551c0b81ba6233553c8ce988da296fa2e345262950188cf6372aca5bcb8cedbbec424978310adddec426551681f93a9b4cf6e15a06ac70650dd211386498d45dbd6b70d66b843f73f07fdec611bbc5ee0440"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d8e9839dd767f514a33125051022d7e50c05d6521d852fbaa635fed502e59554bc9b8a1a31753f4fe90d2f270b27e73d65edcdecc18055d53fe1859744ca3d5f39bfa6b23a4cbdb9c326d7b3be831ebf7c0abbe676"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a1d587c939232585840b8f9ff27503efcbc1f59bca47f2dbae3fcf8ce26743debf6d67936f3d45bf2cf7474eb8f69b0765f362867be29a7ccfe41710e2c3c9fb5ab8a0a860612461e7f4b52ef28c73a087ef0852116e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "63dad275e477674191cf03436e979fbf16b1220e81ea8965fe53828e46f06a1dbd1a6bb03cabfbca70261f63d5cf491e54e31c024e87394a3cbaa9ea1cab3a2f3a6f5a015888c01150286460dabadc8d0af900bced9a64"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bbe011c112d53f842c0cffe98d96855b8d775c8c1572d29ffcf3feb0bae18de317e1db03f847fcba90ed941095ce0b2b96c8b1c7d9dc2afda7f08d16ca6c0f32d3a5cafca2fac92487c5a177af200c9adc866112629beb26"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ddafad4d5b5fcbc07f2222f9765f750f7a526e5894a165bbc9ddd6de71e23775246601393f488b61ca9f26aba2d3847de759f4082999e472e40c829e6923282b4f6c1d3702071457c7fb2dbd0db54c5c6072159d1fdcdf90b0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "275cd52846616d516fe77a6c7a4069ce46f120b66fe8043be79dd70906abb006ce5ced75dee096277b8c26899323cb8567a8c389578fa0ddb0b0988ded7d96ca69d8b78abd52663fd20e66a0ef4660e1f38460db06304479e421"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "39e75539fdefb2bd552b0009e7b2fa583afc8a2b011b505de62aba44c545e13b86590c731fc2fd848a219a510c3f1184ba0149283668ba93dd5a056cf5b752200659991351a7db19f04fcc7f96b3d25de5b4a726c7dad1b7ec7768"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "cdb61379ab20f7975a61b52dfc3f218d5f803f08e8286881aecc94b92f46923973f227b7a1637c1269cc87b9634bce578858f4e9b04fa60ee0516899d71573c8e7560886dfea6d08b744010c0a9c236f3caabf523cf3a3d7a075e23b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a1b3588cc3742b70cf826f7af7c45ed5b4cba2559541e34cdd3562a216afdaa2a4e39436183ece09c222bc77ed5cf7b806b7f67c703f5c273a7d5879a630029224140f9b33bf2f4243372e8f781851f7db7d3dd8c795d161605257aaf4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3443227e56b16df3f7e15deeb5c8c0713300348703503a82474f964612ae13a047925c3f5b6b364af3f5f89f3b8fbfd1814a42856ed777b90e702256d241938a60b16d00a65143762ca29f577405301979aef51ac5c666247dc2f932ffe0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e0cde88552c1f5e0f9d3e7a97ccb49996aedc8d38093edd3930094002306f729b8f55d1fdd54db364173ce2abfdb65a35e698f78ffa02686119217597b26216af81ce7c7701e9ecc74dda65feba3d63e3e7dfc1f0a2c7ca13c552fe16c2830"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "610a5ed42281e3b93a210848ebb8203b8eacafc2a19a502d8baaa2e604a573bac3acd16f265ea4befde07c5de8c0c5cd019877d90de6c3e93df1afb6930ae311bd52b7c6e7c677aac72df9edd2657264d145755dc936193e1ecc44edb1246dfe"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "99f96987a955b931534b13d38fb49f383078112195ac492fd6cc44a6efb2e161ab87caa50a594fc7f86328f374d4b21c7802a84f99fa498c22d62c461c2945347e6abf1749afe2e22c0aae2f053b6a6bc7854f56503f3ea6d70193287bf9b82f23"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3ddc943c2a5e5d0786d8671083dd8893906b02a610db62bfe64c7e6ab086646474483193062f08f903866d6050b50ef55213e3935aaeccbc385f90ebd040f7e7efca8be101824770d1e5e7ef92fd65d148e63fa627469c3f2b5fd5e5e4476159665c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3df18ae1f63e037219787a95ad960e967671a8389c1ef07c17be3632d5bfb30ddd86ccd7b53f191baa81dba189665407df6d3b1931c7a94c2ad62bb6ed9b7da1dc9b2a5b98cc069abb2c7e58648ed4436d359eb60fe5425c16103d20c793ca66bf847d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "726ead16f67729ba596654a551eb126e99457962286fc54bb6baf50d93c283409694db0142264b697e6d9be81bd7f63e4965c784ef0af12529294ef7795e9d64c371b15c1a5701c48dae9e2a3d908602c4a82bbeddb9a20eca30b591140f76fbc11a3df2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bb100a9b0c720ffb4e57422af4017c7eee0396f9c1b1174e0248298d521ad171ffac53c622b68f45c9482b3e520170f44b9ac4855f25874674afec56ba9f608c6c7a6e8bc9b77dc7f5f48a148052e649ff31004a47dc1b3f15bc668b060862684bae6cc402"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "cde6c07be9135468c33b09e648fa0551578d8b7317fffa60add7e430838633f0fc1efe2783468c96c74e2208ac947d726b139b5f5b682bf615910ea9a911195f71ed8ed899f7b8ed126d6452cbcdbf6aee558662de0f689d766e69ab2244f5ca70e6bbe9cc4d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "591fbc984e4b79a372b2dc951afbc269dc51afcca0f131840335fd93275b40b32be13db09b36a8bbbe7644470093210e04ed4832e6aea478fb5028320ca8ef513f27d0b3d1c018fd7d2fe1bb1b8da6fab196dbebc33043b13469a114153267a3d4668d062d109f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b14803314977b0e29e3ac469b17206b527b6e95e3a47f537bd7e5e18ce69e0e783737f8b1d993c48b0dc2078b0bacf2f752ade8a0a709f8b27bb5efac90177d6bad0d946223992cab2bedd83f8e874f13839578bfbb1e283423616b9cc9c5a7793ae921664338d4e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5b3f9b47a210b68bb40b96396fdfdc4b130cf0c4f7708277a6bce760837dd8508f4e321e09cd36cde6fb6125ede04599064fd9a7675c0508b240b8352e71168668681eb6a0aac08dd9145439ae2ceb9c7b0e575230c51e1f89a08fdd4590c3c1bc2c397b64d098302c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dd31b6a184c00932da12262e6030c8045d45433e15b975eaad70144143c8b9ede3c71f4bc0324c04617ffd377362caed64ee57e40cbd952b559b54b59fc86832b687d08931403f854f26297251e606c75f41717228a3a6eff683fad7528f252960a286e15edac01a5a59"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "872cba270f1ac791d7444b1222ba36706735ee0a2794cbb33eb0e7f1e091f06124f61c1a1332e78f71290c8e9bd3f8f7b73d7619958a2d9a8ec9e7345e43c2b49868264ce15785577f4b7542b4dacbea045850d38c006e40f61a710b660ffb1be2a9697d0c50802c19fe2f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "190acd9ec74d1e20da6d30b7c8ba4a8477d87cc700569017e74dbd1fde1e66fb746d43cd115e7d4e4e960cf23a762325c2fe0a36fe5f9b1f5b3d100cd0427c9747b4ed2fb8e4c1f8e86da805884c55333f5d8b29db7317699919f927b235aed26014b4bb0ccf02b6b3ee4ea6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d7b9dc5c89dc7a2f6caa59d66faf48c7d3cd85b40241ed5f839f7693a637e2f995300cdbb942dda736929ec84cbb4113a982666b9f49f7758b1dd8cfe1edf2049f8f822afeb9d7b469839325e1a854a0a48fed747ccdecd01f1dec302899578a27947eac0ecf4f07742b311053"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1c8f939474416a28984e8e5edd261c73757210a84a070b8feff99a3395e5f61f4eb5fc97b4a10015d5adc35fdc79be330112cb1133c9ec8362872029cff48c1aed3a4734d343208a809ecb1280e442ff80cdd793ffe3a0feb207de7ffdf685f595633b758f80f0e932464935e79d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bf442201603db1da2d8e8dbebad06c0856aa36008825fff03295f3e81219f0708983414a8e584c2e40bc897a777a03923b3be75dd66b764863c67b7dcb18fa781e2543f8c1a901e9e7a50c125f7ed0202f5fe5ffa4e2ebb3242e36e2ffa25ac5fa6d86ee556310a7cecc84a023b16a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "33166d74ead94fd2ea667981edbe87ff5a7418098953bd4a293ceb01954e83991ac116ad990bd176a885ebec291a3b2385d78e7b2c1034849b413a66bfea98910e5aaf3c3a83b726ec63c94b8f36832235f5986eefa495e7e9e1320ad00ff57b7898284a0f1550986cfb5ad938bc8e35"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "eca675d47a8c160371cfde83919fb31b65653792432281718d113780c0d0c1d8eed4f5e0238606d66fa0a3b515716ba58535c7d36a2a3835f7599ed6601a7e1467adc1720514d78946a1658139482d3ec38cf5d6aeb58f79ec51780b780a58df316a05784764d791e3a8f37368137e8ce3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "923bbbb27c5a11d4d5305a35646543efc0ff2c38b8602f306024b2b5954d940039720677ec0e873c8e0e83f9581a045867e9b2c02edb359249d9e006dcc6c79f75c9cc5dee9c5f04ae43268d5a4a1da37122904b2750aa8aa43800b7ff90e07041b9752cc7001928d9fca5e73874e4fd78eb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "16353325821cbee3c476b1f872fc6822a902426f812affdffb50b5cb7c8b5c550133c9135e0ac6068c3f8f0709f1a720717da2833c3a83dd9e6faddc45502950c33ac14d35dd05a96cc7a41158fbfbada5e5775668c6d0724a454446655f25e7a212e6d6b6335df1c86d0db17332fb4d12698f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "04a979bac8684f95894f1c4db8009a33bcc0c054858c7e8ec40f0820d9c98e09758be2b492426333cdbb0606fa7981033aca5afe0d13c89bb51b8c3f5b65593183c91eb23165a141b4ed8b9064469c71301541b8f7d087d5bdbf192b99c8f5cc440f01c3e29631c5d10c88f9f3ef9236fb42a1e5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "19352454e048610cb26842f57414f8f62285eac8944f6c448a09b2706c8b853267ef45d93a5056a89b2f28dece8475b4232f6206ca0c9090ce731b0dffa5130383eaed7a81f06c457a4684e5ee1783d4792e0d47681b7262757ed3446f037e6a9808972585cb2ef0074c07994d30caceecf9a9d66a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "965ac58510f8f8f446dc09b91d3eda85b3a2de1350a4ede9aa95391bd116898fd4e70c0311df9353e602b1d8f1060d69b8dd8672fcd6d1dd7249c804c5b4031d22896019809434483beb3eceeca78f11415a71e101df3fe5eef09afa97a1d1c66ee3f3efc08cc35a5268e06521b1f0742a45d0fb4053"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5f2215f843ba3949f5c68cdf5cac13ecc64a589ba0d752ef877a4928dc462d918395c83bd1c1f5dc3036621e75a51038f9467a8023800d6545b970abda4029ce1fabf0887ae3721f3494dc15a6eaab704969a5b4670c9339f181ea91eb7085be064154f6a359f12b6715e6a1190fe9fa2aac0b1a082f91"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8e6a13e3d41197e3f8b897761594dd9ba97ea1166a281fa01e2804e92597dd596d25726df67d9d7fcef9607a6fd248ae1502ee743f6d0eb3a1a8efc621f86bcacde2c53e091f6778eed63bcf5092ea732ed2ef7f71090f4c41d0b6567a4d7fa62c40ce14d7321f5fc18261a7c86fc06c764e94eb6b72f63f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "13fe6282f3c1379432cba49fa10fa325d165fe17e7923620c4172759bc8989395d16715cffd3bc719d72558a19cda78fca79477ae6342da459aec809692976ef227fea180e4df795766883c4260320acfa8e8128c6bd616ded9714e9d5badb3a22e93ee69fdf5496d9ca6c5c3a93dc524bc519861d80dea323"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6812a934dde83d1b997082e980f7c4b01f12e354cd064131de1380d10627549fcbd13db3405bef9fdc9bea482e72a29e727a233b0a5df6bafbf5512e30d58cee5cb21cf351199251f5dd8d45bce9c868d562f6eb6898952a82082eb5d334c69fc85543491d04c5bdfbf8b50337bff27a503563d8d7baedde9207"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f8c6b86a31408a2278b8b6ceb60eab1254987587eadf7655ffe26389e3119319ead76d4c1086ba5ca8c42aad07e607de1205594483184401ebd3fa5ac8bfdc3276c84f78b9a2c3d52580c6e7ee439168c30720fde06738753140c64206902bb597a794bc3e359053716c7cf1ccfaf3916f79902358501b13f81498"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "81672d4663cb2ffb96f8cf0646a522b58dd0ceb087da631e24b57446345f7a2ed9b684e1f22bc6f20a51004b58fc4cd3f575af5ac846aa777f9be473362fccdb8155d24ea889cbfb418f774b96c8ad1c6e5b5da2af8722f74661691b56662ad5fdba5022385717151d33e2d1f4d373c8260778881fcaf9efdf676a12"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f7abea1397adedb382ef9efe62949b6b3a4358470937ec54c5e7df6d30ae6db38082bb2d56f56eceef44bc13e4372a2d6af84a671fb7fe007513e9d5f1161774ebda4fd832184118cb7ac265c043be9c65f63c418ccd27a4c9da085b12e6c6533db311755bd1e678d3934581af794c0587c8203822dbbe865653b2aef8"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9c9b67c43ccff3b84ee5b83d17c2d8ae44dd079821967b2176336a1667c7249099ece48abc047351fa6bf730c55c10823442350e164116fa4e0b290ea378bcde454ac8ec4d6962462d63917321a5d509fd2bcdccd47ddf5302c5696815fb1ceaca869dfa07285b1b43f19874c53793583f689bc3952f34272bb7da273c24"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "95edd838e7fe5a3916372ba59f6b58222f66552b6321066ac66159efa14cd7e06365c3430d325e9a8bc8945e595a0569de98ed571d340fa63f8ee506d9aa8070f9b70757a8d31fa5d677cedb5909fdaf12cac56b4e138d1e072ffdb126dbc850159bc581c98f3c26e27b8c79ca50d77dd622eeffe10a95882ab2d93d0c9a19"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "926f571626650610f95622628f738040814e59315fe7af85a8e346d18c28cfc6f3cab985db9947917d0fc128b138af2ecb02fd840ed91c363f8d52608ea405e37e2a522d0f1bf185cf2c3199fd9f1957f7216f6f2e6ea661c6a3196e77608402373dc9c36e35b2eff1fe17ae8f269e5241956088130f8e7b94cf042391482329"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "afc3dc4a953e845bc367f2930acf37a902e0b2fc61563119f41260c5d50bfed64951b127611789bab0e9679325a24c4642e0e80ff392c42c340e2bbb6d208c7e28e833a0d8adee30f907afca672835acb7b41063d804cef1e8df7e2688d9803d4d34b31200a4e2ef25280bace4e11266a1250653e89b2e9b350616dcc09bda9241"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0323b5622248d8ef0fc718e54c0296c99176043504f4f8739caf6078d17ddfb8f738e35e8a2469e62c57fde5b3678b66dc3ffa8291251ed099340a6bb07987bb47bb2bca76f58346d3ac254442ff6ed32712a80ad20b622c1e2a7e010b2a30915fcce91ad88c3eb6137c347cb2943970b2eb72b463209703c034c82bd22a302c5527"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6db9fb1727b40f3736250d908386e19f2329afd69389826073c2ad5eef09eb57f2e3b7bc746b4b7d346dbbadfa4c3e368300f6c21535eb3f3b5cf400fdef2084d38d1a042e3093cac8074a915ab7c8593f171ce6eaab28abb1b83786f0095be1757c7a71a38fac667d16f9f7c4ed2629f1465fafe635f624ee946f8d08e0587b62349b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0733913340ec863e87e9c0c29882a73aa820fd764130cbbeeca52c70b20b65a4437af34cfcd220b22ffc1d7f7dd6c143653177035cd29dcf5a68834de1a6d1e517b381ad173a9dd31aa93c7bd57ebc58214c8106910df2b3879377686ca7aaa9e39e8ee7fe65dc1c87749b475a24edb68b423135aa47c7f423034b4be5fa3eb06b1f67ec"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d9e86e137b90bdfe911a9fe8181f733d6a1a1bf1bef0a6e8e21ecbc2b52cbdb33b00097d3a2329eea102266fc9a5828f20d8f79b0b38e6e46f832c4dd09f2022eeb4de8a063cee2777b18f57e9184bcea014511c793f6ec65b2cb5b829cf02e32089663a7807f7f5f292fe2bf07a2a2efddcdbf0998e7511e0fb92ca96d2851de61ac1d92f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a802b116e08094afd366f0884b21917f20cffa2bbbc962f0338b75d0374ab0957c42c4abef8fa2a0bd9f208b54ccd39b0dfbadd13a4f9a2e6b699ab8938112e3fdb907de7dd3105388b137f998ceb943132aa97fc5b616d2a2f038e3eb8ca8b85abf0d74b70a5c64d8d39c5d01d6f653431f73e5ee74dbd12b770f87ede864d67a30942efbfe"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f69081e0dcace4ce289806fb4fdeb0b48599dffb1ddf7f5f558e101fd1a0528d534a5286db0f1e18cae824849ddd440a735801a24c84fff16ab92c4a09e091c3316d72677c3dcec71a9bb412b8763858dd649f28150642b850e642a17923632be4bde995d01d43225f72d3ac91d7fb55d8bed4e8deb4a8e88ed71811933e6e4a126e1a1e275633"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "eefbad10e1a20fb3a4747860dd0a5d1ae60a5dc9da7919f21b3aff8cf40f465221f1ded0584e73d02f1f3d598ccc1259b1a39f173ad03c4e3573528bb1e4aa410e5ac0702f16c53f71b041e06a631195066ddfb5c97ca6c6955ebfd9aa24f5ba650f2a9fbb574e30a0b19ae4bb485b422e3a47fde01fd22fd72633c11e397bffe55af45bef687673"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "97e9262370583e5abe378e45febbfb8738691395eab70550021a94c31a82069c22beff6edbb9c65341c6eee246cef57f25ff864ad0eff66cc3b9a41fd3d82287528dfaa12452f9bea39997c00552d45fea39a460ecc2f23d7a58673f93acc4bc48513c0d01298af2195a2d0b692d5ce0b4ccc85c82b45a9a43f70a6e91800dacfc022b27d535cbc147"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ea995f5f197d938e1958a041708710e6632bf48f92a1ef5b1ba1fed9b0566e9cd6b1fefbb77b2009e98fdf14d0f0e6d14dd33fd7ae1bc4d4de7ab1c614ecdbf5651707f1386a6120651cfd2a561a31019f80b50b330d0e5d052a434d053b76594f93bba3ad7b2e048d2dba4fa7c3498fe8f310c0ceaae5c12e26d74aff0a6717aa16850aa2b07115fc9f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d1cc5d7ec1035fcc4160d5cd7ff1a3c89194697ccb0a00cc3ed4b3d48ee71eb5fcf228746e20d4b3e93dabc12427c15bbc3147f00b124d812437d19eb6f9ea5236f87052a5fbb379e27091ad829199365115275061c79f20521053a88fca71cd7b0afc377fe4fe34d9d56d21816d88a374f7df5de258123f35ee1ebbf9cb20f1ae94705581f67f24f626f6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2fe0f366c5051ece560570f2c2783604c1bac4c84c2156c916fa5ef7839ba296343eb2e26c9dc446441897c62a9fa56fcce2fb92af4db0ca6d16999514a1b63bee0f0b949cba08fa3e5aad137df5cf5656e7fc3b09ed8c69873861871911091303f855d79e678f674fb74830b263e22be7ac7b89434fed87e0df401ade983a672ad919565cef1ed9403a41b7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e234ec499d037ff0ad5e3698ecdb7dae1e10dad50e4d5507545395913fb51831e4f767e578a7e17bbbb77f57d1abf76bc1d419e6f38383b26fb639a5ae6e14a910a2b22ed2a41aa18437862ce6c2fe8d1206f21900d50f26b1f24024c8ff36e9b662b3c4c0687364921d2fa6f6d0cba9e76d4b2b4b2a74f14dd8c2e1a752e99bf1e5154ef64b095197b0e7da71"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c5b8214c2baa3953871edac53f0513cfae89f14c99eb9119075430c8882f71f2efdde2aee59b8395dd84db4dbd0c0dc0d2f248159d9e994799491aa75b02093cff37fc9a4e06a09ae5b6d2bb80bb46c21eebcc2a03ad0bfb1cdf86197af8b5cba960ba137fb9c3ff8656c4b38dba954944f05a921f98e19a19d89aad62db2ae7c12804e0947970cdf30fbdc056bc"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7de7a86206aed65ca62e28e8021707156d74cdf87e0de02acfdfb0fdb46de5a70a06b4907e3d90ce9aa016723adcab4186fba4dd054c10f715ddb95991b10a18afedeb83746d17d3d3287645c00b4b9cdec703fdb4a802bf919514c605957865b27c1b601d2a1a0010f9e5de3839a325b99e6b8bf6691b4c298221297250488fc406878fecd9c6cd7319cc1bc8f869"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6c441cb15bb438db10c972797d08b719aba3987c056800016fb542a3daa944c4226b9b3c41260c8013721158b36f6aa3f3118524bc91b68b35def994a010d05e35cb29a3c784968eb8ce322edd3c3d5f1fbe89970a1817d7d5b7359342c964e2d4adc992cc27ac5322ba43c352ceebd88e08aeadc090a7a62983fdffa66002a862d24be79f20a408fdf051d302972e81"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5e6e5eb22f30350dd71c5f3253d403d85471d2130967e049ed4294f7e137743bb60c0b11b0f5818c0224bdb4ae1295458a98857b6a32ffbfd1f7d2863acce5c844e044bb314e34df2222721614d0d51e5bb2c04548228a1693d90783dd985818d25bcc6c61ff875dc4b6fc0eaf6af89e58d981904b522a589ddb0178d6b3a1d1c395922584b62c67e965e840589f658c63"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e0cc757725180643bf8d08d9256aa7acea53a56dad9b49ff86e73792e721c96aa5c496d2922665ce3ab27fcaaf596d2aeac7ccba1e5f56c1bb3aae070dd01a702dce11ba34fbe71b102c35df3420928e90e84671640279ede57748346a3bb8643a37cffc092490760406146e7922e45680f6520b694f8e599b857074981be25e89bbdf82f9b1af169936a2ac1b2eb1fb7513"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f992da612169ab7b8184e28fc2fbbcb5006b3e92f084052dfbd89a74cc65dd0c361a0e0c764a315f58ee5123ef8d48cd6c5d8421e8bcecf0fa1bc2933671d856fe30dbd9e9492c4c3970804297df06f08336b05e5f5227b568b7d99570d9b7ee54aef3a8bb236a736605403fe0945fd85cccb0ba083f20034d6c625bf5a75e090f42af954f444aad730ba13489e972bfcf0a15"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "762a04d1740f3a31150b0763b5b3b91d3e1203b9939e3d45a6bf21e96ba6c82214f1b7481137084c234445406aebf30d7b2148afedb78c19e308ef49debdef5dca50926bf123d9be9f0a39d0f59e2de55f512075c2ff4d5b426168f31284e1aa5385127dcd054ab144c26c351f5a70d9ffb7735c43b10a83e790df8da1a8311c7175dc8e2a79f4bc7b47cba13a1d8af0440ef70b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f5b7e6dfe2febe4e8280667743680cb85ffa1c520ca8651046dadeb10d38e6a0cbdd2abc9dbdf4e5c7f0d81497acdf291fa41848c30a6bee17330ec49bc440ba92b4b5bf3515cb02e5675f7f09856041560fa38e4f26c6309f2c4be814138839ed8ef64be1cc13d322bc9eac111090a24e0a7ac29fb7c9b9bc8f864f2dc96f862598026352530ab7d3120dffdcaca1560b7b52bbe8"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ac6436d8b5bc121875027945b6ec42ac48bc7d37c81ab624851121e6f8938a67f49efc5223205478e25ce51c6a802773be807b2e61a448a7656b7c9f22622e8e9101486c8c6ea443ad17402f2f373123236137925cfbc5d8a154a55b9e7295f0b0dc3e58c91dfef8eff278e770c9007d5247f481dbce8ec0c129e49a95fe4ae2ebe9ec6a75dbe7c9c44d29218e1a69389da9783933ae"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "47a8cca3b77e63f270d2448200d9f3606374f7e708d3e60669896f159e2e80192c141210cbce44c06369f339d93f97c1107affef1722cd2238546dd69505bf7a2f894bae87f13209d03fcf372413aedef8fef4583270c6bd787a452647e3534ce8cfde89d03e3a4bf8100e4b57c04d6844492af0eaac44e1482814e038039d37d41d7df47d7098254ae1fac3bc3b2af97b46eb2af9b8ca"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a7f309a4215057b16b9084a95cae92e7b91526786b63acd8f8c5c13d7ed0ed696994f07b96d9cd2c416909529ac914a128634ccd9979edfe256205998569b395a06095de53699bd1e9ffef2638432a4cbd4d02b53b600fd34e04d2032555d7ccee0a217e6d96c67c76467b62bd4cf4099210b8155f8ec0ebcf4336047c45d925622e328be20b4966aa8706bc36fd222def584579decd3f59"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "39e0a9b4109ac94bc86adcc6f3b13e5b6bd12980f6b6203a6de641804791164fddcfc888db5cd5d26d9e7bdb8e2d1467f5870031a93b55b4b8e872adb1886c98e698dbc19d6eac9c767ab2b562d3e4a726f2c8782db54b27b0ace7836dbf86ea5dddc3ca95447c17b90f97a6d925c913b0df825135b93f32e7c845a0c40ec7abb07970c928b6e2153de1f5f927a872624a1a6329e3d675cdbc"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "34c075d9d6d050229c6f9575cd477ef976a83026b7979776c1a255382de751894a47e9905c16a596a6fdbb557825cfe194cce09d520009ec70b4d3e591c96130c882a282334b9def2b0ec09714380a3437e8f0f568a00b91e5ec6617eb64db9a0e5a631e089ba4cc3030b918def43d5e2d745362ec7caf4302dea3741686f423df8904a03732968a16528a36b26acd4c6c677a724cc19181f040"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b43e4a514c52415dfaa0e9d69e7a329520093e5760a1d79116d756c177518245757f603d3f859a48ad27f7ef25c210eb6660a37fd27f8dd4dc29f16b9717507f3cef8ee8c49b0cb44ca0cbe2cb2762d91ea3f49db133271212d7dcfdd6afddabfa34c5bd3f6c5f57e12b6d4d13e1eabd96baa27da286b139e2fad4896ffb7701d6bf57df16d2779b6b46aebf4d498d991d6387e5ed9cd23fd1c847"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f132c18f218b14ab6add0c359f2c81638f9df0d11a951236818e81fd7d436b97e18c45abd3307ccbc3bc93e0b17c1c66bd65d089d16e78236f557cefb1e6219586d223c284144199e3fbd715c6d5adb5f5dffed926c8cb9fc825602b3f206b91d4aaab5b868b6610bbabbfcb8b3c96400c4045e47951ccdaacd2d72a3c8f8bc265db7553eca4f53a7e816628ca70f1ed5943d33fefc7c4462dbe4c5a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5dff03f0b320ab343c4b63733b193bc2ac369c015ed55ed7217207b0cc86582758cc59620e02abafd241c892f237130178186f97e50a90154a3f020a2bec33e49d5d06b17e13bc3ddcbbcfb6503c9eb14e64a10a9b1bde1aca7fa6f1af33c182795c00c283d033b5f7420265ac8194e79327aa4817ef04d4e9991035e7fb5efbbfe7426098392c3d5a33908ab6cdf7bca5354880e138d341853e5401ec"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "89e2b44833586822f237d1cf49e47479aea3a909bd703f2623faa889544032e52e7084670456375a58297f04e73cb6bb05a2af8e7d6f295972192f143001caee5dcb15d93bf02133cb5056b94dfe3f64283f2f1c59ef9f8cf7732563d088a67447fb92d13159b0950de9c4efee5cd4da5847830f62144b553803601e695960ad04e3d37232056dd1cb8a90ff304b172dfb035226d29cbd0b59e9d5b21c3e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7bef5d050056bf05c4c735ca53f59a5db8ba571a09a16012c469552c5a2231a0d8b52452051ccb79b11153f2afd3c9e5f2a491bc8d49a81f320b1dda084b3010f86eaa22dc5cab4b179b2189556f09467013258e0f1afba6264af97bbcbc844d7136103f403f56db79cdb997b7d0a20240852025648f7507101b81a6883ebfa49255ed6cc0318082fa48a3927a91ee6d73160bc7665faa67a5716005e4931b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "750212ce39be39e573bf4a4787e969103a41dd9e2d0e9025026c5ff30c6a66e3f42378e1ebfbcb193cc8b695ef90d94b1dd6b785fbc3010d95e9f4a91108d3fcf97ab46ed7059839adec545599369703756a3939c23979e254671a1b3840953f7a7b089cc33089e3da314a8bb1899d70efa47e9320b81ffaa3364c7e403351e26ab49d9a7e6f288cca67ed5c1120fb9c8f1d58557036dbecab75b0f40a9d9647"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7d927ba14c4d09e95ced48ab6aa295b68262ec0ad054025de80da8cd73e4a38cede35ab2abfbc29bda89dc6e5185b313d9de1f21cd8020c1b45bfefca13725966603d3b0a19d906e76a1599eb6612edbcd98abec8278d1147f1cff473a626636f75e0c2f691146ace47b4bea98e78b34c3aa0f2ea3df7f57a10d4cae3aba3f2323fc44c0eb8db6c1b3fe0562328461eed1c3da8c2543150e0b535faa8727397395"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bf24edc1bbb0ba5f27a8bcb2c6c10fe342e7e3f05b47990dc118aa4afb459842c91faca491e57c32a73b09ef42fbd00e1cab092a616523ce8392a8d65537c4dbca23928d7c85df694d7cd7353adea0ba1f5b944d5396660003f394f9db0b75e7f4188dfd1e4ed6bc0d6e651d3e0b51a576913c7bcd6b2e585f80f9b2c23f76d3a756f2d905bcbc52290e73d29a1453b7555419cff091679d0accb3a0d687ad115020"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f633b297ac617d6e4885ece567e1d25979f305be0a2f8d8f35cd48def39b96848d26419832cd6871126d862c7b00870116e23aac91d3ac7d428b61521f7dfd676459261e47b47b2e389960cf2925050266bfd09de6df95097c2978334d85779036b82c4a934e29646bb076a9f9762d56fa18cb59f37c026267461e8ebf18bedb565520f7b1f2dda53c026539f31b63e5b09166595cddf7f1a0812f23fdffffc63c169c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "1abb663429f560454807260b09a5b7291f483127d168259872e964f0de5f885a2280cd3f75ecbb7afe1fa4bf5edf058a3f591a37315fa132d3d18ca52c5ded5048370f9717cd64e42a964a5d708a492f2bf7fed270e570fa493152d3b794ae440259fa0dfb56dafe068f40785272854b06d4bc022ef1815846f5389ffc3a48b15e40e69875586824f6efbc44669f0457afd3e69ab8437c0e594206430a8ca8f81d787ac0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5f81f7efaf96c3d6f2586b7ea870c287b8b4d9e3f785867ae56a8a93307c13695dd1300b423b5004f0a03b0ff3a84b012e47086da6a7700b1ace111c753de88844af71217bbe4d0b8d905cca16a163999baa30e514d402e22b265ee33032e6e8e69b7aa871130f779d40bd8d89f47c72623421f54c0de9138817a436ce2b3d8645994427524dd26348b6caba28768e924b3faa468c4abf68b8a39da2b39aa8431af99997d8"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9f7fe6ca671658925daa4ab04f5cd68b9ab5e41b504f4f85a504affd2e3b8caad9d7a735640b348dd657a30fac592708803e31fc675e0dec7e344f4c55ffd707b67f1c5f80af611ba923b9c2abd71294c2a29f75f3d686948abb2b5aba5c324af2ca5711342f7eee49be3e19e97fc59cf4a5edf82f7bc01a49ea90c94f3d549a45ce01ab785f2174a0ba35e2bbb3738ed4bf4b8b708d94163e74faa108034fb8defd5c506c62"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e07157420910a5ffe21df9ee78671ce38984c83a89a3219a6e8873c569f378a2afe4132e9b768a6a5391a6733897e642aac6f9b7020b2750ee9abe3d13ffd24be62b62f943420c503a68ab8cb6830762a59e42039f723b06667b6cc483dda77105b65ee205de8b9452e8fb7c5009be1107d255b79a5bc5f2ed9bf8e6e92aa0f7b5e70d676dd66fd445bd2583f225b5cec24e8c8d725b27b1ec218abb485490a696318ca6da50f6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "50fbfaef285279077944e04de5c0ceb42d7fa25b9e40f4efb2730c605e9b868e5fa3de3e5dc39a838eecc31bdfccc0e67587fbf9b2bfa8bb96f77a9ec3a0baf84014dbbedc288c4307c8648a97051b39bf30825766fab4974ebe3396dc4b9209d6de68640cea6548d2e660d5cf375cdc2519ddc396769ee5aadf4cba872610fd1f4322b3adf0b02f9437b28ed007beab1212e15fc5a854f9bb7d8b78d7f760f89f854675ee0e8b70"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f650845cc5512c33490a9eddf7d940dabd432789a736a105e44737b1ec4459706cedfddb4a1e6774a5c113d4195cc5073bf2b9e4e403bbbe349b687c5d9b938502568231b294a445c6e0cec07f4010ef5e88d700ad796b5488c9f26735e82fc556cf196759a6346130b6a103ecd89134c2b9a8763b5afaeac942c69cbd5e0f0b05caf8460ac7adbb0af868e943874320888d2687299b0ece196e93fdad44f6b355264c6cbe233c4709"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "faeb1f08b867088b601a8d773405fba4fa28ada560c2e9e46a34eccde500b7080a35bbbe108bfcdb0f28cfb0a6fa0ac50b80fa0917b65868439129707bb26eb13290fd2ad8c60061c20b3b75668d0d2ed539f1dd99076e58513b302004977f92069c077c4e6332ee044c14d0cbb71d480a344080cd12f7f31e17245a55165cbc6727053443a1264361f41a7784f6043d93cd8bf0fc0f2141ad1cdbf366f612e16d07f49ee8398142f1b9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0b703c4014d626e29fa067f138861ec42f3b71fce5cd19110f0dfcef1f50b3d07880cd07d2db8f6c2f4975bd674dd6b62c0b98bf97ea54eb541ffc66f73d6b2c16d1fb08e208163289be8a8f05c423e05e68523f75baac9d61fa3b0f6e1bfb4a7faad3007197c37ec3b0e34ceebcec9592501faabf812fff49ca8c2c5373bc7f4d75de7b1a2e5e6bd32cb77c6c2d6fd58cd56326f33cd61ba0940b4c1086e606de79ddb50f7cb182cc5742"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a992d3932a5d000119aeb6933b815ede519b52c7176c6d62ae98a39b70bd52c602075ed884fd82bd0b2380df2f8f244bf759fbfc5cf99954ac5cb9adb70317b4d52e1f982293e0d5a377753740f8f744ae4aa025fc66ed382002ba7f405a2f0cbce92ae70b20660da3b3ac10abf4f179e02553c2520b8b7c997ed51233fce90918547a6004a4f729711df06c8d2b29f65f24024459ea040a6bad1cc27fb1c0d8ff3d756a6c9bc74dc0a9703f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "152718090ecce8f70756546834cb6591fe853759c6eff8771c36d81e08c4458b080041d2f3d3a2f5fdc5efade8144dca0176d68c61909ef985060b522cec9f8ec6d54ee2453f1d670a75ebe7ab12c7de5a30d65c28fdf561599dc19c72c8f75e54eaa2de391909a948aa47c9a76358ef46554791bc18c289f8535bb9d30101bbc6d840347903c2b4f61cad5c2f6f04227df38108236a7a2f2bfef15ddcbc597257b48e8a5718c668d61872641f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "63d02fc7a14e2881eb47db6c79104f866a15d26f9f84d2c55adaf26b3c010a69ba973d586de5b12ad51e89a899c9b4743a60017dbf356b7c5a485da33047c028d580bcfe8d1408a1dbce0194af2a84011a6ea16dd5efddd7073e8a0c024c5f5dc4e71f36dea8229976962de385162896d0eedebb22ba35d7275b9ba8a5aede12c78843ad540a28838728bc1d4ad24e53c91f9d025371cbc230032a836212ca45aec4b611ebc14b5d353c54e06e6c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "cad989474092fba2670873c9cebc67dec86eb823dde7b0b99f1178d298be05828e4aa3eb1dc369fe7c6058b8372184156600adb5624da2ad769c689a7cbcb5e5c38e259a45d4b83ff0e93011e3fff285601fd209db19134883c1fd97e5979f97f7da4df2f3ac489290494dfc6748008f96b98e92637d4eaca6953c2cae677dd6395d2884ad59e632592c15df904cd7c9c8e481228e23667860dc3f5d2e6c4ea1ce0c0a73076e6a747aee3cf3c3647e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "36b5ba6d0fcb50ee37aaf66544d34b4106ff8f865c24b9c8ea769d6b16894ca0592dd3d709124f18997a98aa2c88e0a45af0a5fcbc4cbfa7baf15b246c74a26ec0e672bef688a9b619b081b63e7a30e09c0c8442de9fb071e73909f5d50b6c1d0692004242d3750d793f8a767d28fbb8b4bd40b6fe7fefdace8ee530aca73f75f5b0e000e242e1c6d31e3a3adde861668721439bf952edcdaab40560e30795c9578436f0373f6316a66dee75f2a13fd7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b9d5f19e82dcd525aeca9808a2d76174a04574e48265396a5aef082e66c867a0551bc30f9d1f044009db3c2d0d698678a9734ddeaed08d96df5e6efffb40c758c81ea7e5924f5530d60efe3a983351f54388683b21fb08cbbcd95aab9306454dd9104cd7d0b6b1cea85d7630d38b818082badf854af8104fdaa76e4c186b77fe0047f3e3566cea7db732d893b3453ff52cef9d0e7cbc58a5417c547454a353cd90dbcef06dda6a2643ee50f00dcdb9019a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "742d6d0d638dada3fa15074f7e6ca29f861131e7784a46720687b3d4534db7090d1312d1a215cbc5adad439e741f938e3cc31d2b92561e9302bc54ab4588ba4e89d0d538437e11960a83a11a1e52a30dce185cf3bc3ea671b0e24d54f6561e502f6d987b6de7a49e057b38123acc7125fd68ebf3e8fda86b64baf026fa8ad53c2ec32f0af41cd37c56d624f83611e0f10861b11f78b9999680f4aab8ec35298897c206522e554cc032c8a1847d4112b40dee"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "aea024c695d12c1e8e5b8d181ea49771fa6941188fbe128216b65f20849e11d61855ed132c2458524ff7f7bf4bfbdb31a09a5e3f1257243553e35c8f78b64803ac2c10db6dba6662caac0049aafdc627d65d040bdef334fcf5bdcb4e4aa25629cfe86faec497d1bb7bb9c9c581fb89fb91f7898ff9f2f3ac3db4c8b58fcfc1fe741a5ac6fd34c49cd058b48f39432345da0699bec367b04f4b5591a30097a451a593d0df658e9a9e15e1f5481e23d137104f1d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d28db81040d09a6b5303b588f280411511fc5f8c32a8fd6739f38f5b633d0175391c12e7f429cd387eec7b2bda428e56b93877da802354f5622a67ae458c37ac9676d7ad065e2764adfcdf8082001f9a2b86f0f46162f4a5cb8007122fec5d3838806a9758a6440433e808c8392f55e27c295f517ede674126739f7d32d923c6c09003cdb701ddb53e2cb48545cf184a142f6916694c9d823366ea900b49bb20fde261d55790160a41ff42f2b0a199c6272a6bd9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ace60c7ac074b101965aee3c36049cdf4b8a409f81e713771d519294819bcdd1b36e2bc76c4b7559830ebd7dc838696def0e1aae649e0ceb583eeddd0b94a239dfbf18b5dba8800898187b1c4c7eac811f43b8d8e6d9d250a35810c7171ecc79b4967bcf73c016cbfe8aa7cbebbaff236abfde7135bc6e29fa9e2af007eb5e524c15a1008d5535309ef3209276f14f27d05955d92e0d7d3eb05e4bbd4301625964129893abadb60f6f8b7d6c3c015b8570cbb4522c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5b5c19a7fb153284634acd3a98da6a66e31f66ffb581d71befe94f958105d814aa2b370c245134b25f3547abd0101abde238110b7d7f25206cb8aa57a4e1415b205c6cf3b46af23981d1cf48b6d6159040b279ba60ab78a14d08f6a3377b28892b5bb3d0e44f980290cceec226f90d5f4457a5bebe8d1a39e2e98c3b4e2010ef9eb24438a23ae73d0386bc5c9f56b581ca358b164ac7c051933e2ca54648456af3bfde933fd090aa0a3d57c5cbc3b3df57ea4a31b5a8"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dd7b1c4ad1d97d73a7f5b00c0f45c1cd33be706a31aa44b36ddf6704796da1eb23d2195dd92740221b97bfc11a11fd0c5a1f8717ffd84bb5401e965a3e987e4a6c91a5163a0d2860e3c96f0acdc30ae389048f5eead04606f8f2d313b78623962d55f5c81aafa9f4e6c754f9525b1fef34403ca08d2c0e20d0cd61f6957b2b096471130e4d1d714e4e270e4fc29d45c536c035642afad9bf17e893c4e37c13935d9055a926a9ff0d5460eb3f809646e18222fef84d28ae"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "195e390bc6f727cbc247c31f58dba36117921596afae5be4fa0f33d1a8d454ff417bc95f03fdae775325ff64dc6918354adbb586844d66490814ee513700fe893d7640e81e24ab461ee79221308b245d5e54d99d1f7472a4262ee2ba759963a5970c46153add4bc04328fda5983ebfe903e2b47e076b48d517f7f0a6cff9ada7d9bb07d787c0acc11a2ebe22fc352f3517640e9dc5395b92ae769d00251dbae88a809d0673f08525494ee3ff7fb9956a23a6ab37dfe2b13b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2b18ec0134bd03907c3a81f39186adc4b025043d58deb0c327673d73a4d79b1720d843fb4f7bab22fb4126f4378a801b9fdde70051a48c59a4dbfd094cfc8bd658855ce16af0e563750c5f7909c273a78815a55b30e019a5ee26752a0a25db5032d1735f0df1c03c078a43ad190944cf2b6c89933466b49abc32f2e5242077e13b48c92d22e232e53a52c4bacee3b1e03d61c7fb8578cb8c58605fab06f86c010f5722f7dec13cba3931143f979269a4d7031068771cd7131a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2f9268871cd9a46480466df658d8ab1513de8ae18aea3175b00ebc92af48e363384b24723c780371e1c6a45444dcf17182c0a66c315c73de24f430a49aa8f2f8947ebc7bb8cc10fbf85fc8fbe134d2f6e9e11eea9dc79d0de6bc227ed831567d55a939f388cd4b2ec2c057e5ed8eb583b4addc14f0f2a5842e974556426e6d4510b56fb2bb0cb8518ce3a4e14dcdd3377329280364b0b1f602e72ba15e27e0991255801983211917f26c196bef06c3cdd90291def8c677a257e5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d567627598873f4dec3f6236240abe5b6943ac8dfbf2774dd7f40efacebc50b07fe52e6b89595553ecd93bf9065db058163ae63552d2fe4f3d19a614715981b7a503c6052c3e9e2747f6018b5275ffe078216c46f3820d964a2d11e85eb031f6f314602f462dd3c3aecc8a4f77d4e73bc44505201fd3e8e580d2b04c3f4c885f0d13e52b505067f3f605e9b637b5ad81d3d2cffb07f88f12ace18da209c10d0f4d9aa38c5a17995c92c8fa28d55fc731ecdcafa65d956dd65ada03"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e6f01a669f9e61cec57e3256c7a7c23b840b749fcc849b9e46d66f5903f770c7bddde56e969a46228dd2d69a8e5bceb5bb06a0555375178e15cb9c5957b2f52568a41778659a0841fa62cce468ba409bbc30e1a70facb45e0c748f08ad36ce113612f1217281f822546e29ac37466e32fbbf9fc878a12a75c5849c7efb6ccd2c3163bd2fd9ca8349dfbbd234c15da524256ce20d150e54086cdb6a83d3ae83a0b9c4a49cb5cd67ad91719dabc6179df90012b5193c120179c0b69987"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f3d1c40217c3ed135e5e6afb91770819b1596034a0a183ceb9ba5a1050f4cdacea0c8ce35111abecda4a09615fcc0ca476531b24d67e94f11b30b15fdae2c31d09995a2ee9f8db40667656dc197dc35dff1416d968a572424c7fea2de1f4c23bf6ead4345c881cbcf22c4a98ba1d3d3c6100e4e4a21e9197d3d54634a5d3c18dafcb9a8270f4550cfdd17cf77e06e1e72a6181d9342dbdbd1b656eaf735a07afc9ca4e883ca545e041f6aabadff6b1ece06870a534aebd638db701ceb9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4e80407aad5316ba80492fde6cd6caa97b1eb853111cdf4909bb0ef9ca3828cf94d059349f363e1c5afa16aa1f18c95e9b0b44b2ff348bcca79877e294beb7405c88b05dec34b775947d0fae8ec1da26c02bd5035788d27305707181fa60327c5825e2fc50e175e2922753307b994d27f902f0cc72b5f2e3b78ac3ea66973400b8faff4e346e48405eb2bedf96f70fbbda6ab905dad86e766dc3db774a358f16a1d416cdc0bc8a0d99a90fe23780c2da3ea7774aa976025cf784e46eda77"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a01a2a35365e7f0b3349529bdafc41cf031feac97e6254182bbc6f78ccc97b918dd51ba1279c24f0ee5a257b8dfb3e838567da4fde3fa4b2b49d108b5e843f8ea2453e2a5ba4cee6bfcb9e224d172369d7d8fa3e8fdac85aa257498b28b0af88559213cb147b6116ec0f7fc872dd6a84f246ca1f41b10ca43fc19c8f20ea5d63c4c39bc2c257ca5aaf7a89f2e50aba5eb6b069c200f733d7f68f2f11f4c430b932d40e7e62e84c22b75952cfd941dc505085f12869bc520dc645b00d0cdaa0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "03c4b34be5d2a1891b10a0a74e4cccd5a0be17ae1f2388a972ad699db8c247c4ec013ac22fe6c6c1a75751834101a17c930c90dd3805963235aa8909edd60211cd97f2896332f606164a3ddb1aa9465fa8c994aab818768166828e3d7a81b9aeb5dedf93555fc351782663167e2e36b618fb16abcb6d64de99971082ca76ed6ec17d5d0cd8b45e0336ff3061a5e06c54793b8eb10a1b772c8cfe390e5d32ccf61c05a618f5130af24b33068ce35dde6e3a9acf7550797078294e69a9b6c10be1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "52f245b0d61ee4f1b173511bd008d3970a25b5022250ec2b9f9a28b68b3b0c8d274ead30fb9fc1f9b3b5f2c3e7125c4fad241dd3f5f4d0c186f64ebe09d879922a682f638c73c0419e7a729329809a7325a76851b1df2eb4cdb4eca2204779b8acc052c62551e274b9137b1c50d822cca8d4cd0b8eb7554ba448b7ac6409eaa38093281c5017260ce2bba9bce09b3467178cba5bfa899101ea3d073cf778944afe12651ab713743218c28092e6d37b41721f191e006f29b5ac33f973d671e943d9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "24b7bb806303fb0581f5baaa960cbea9b2eaf6ad927d073237e4d77cc52c306a407a4b1094c668061ecb445eb3de6f1880bd72db303bc05af8a5b72ab54014a032c28af1d71a62fed15f95b468557a28fbf06eb22caad469b20702b3e067e96ebe06ec31a61ffc2cd4edcb19c11abaeb5e303860869ec7ce19061bef3522a6c3b0c64e11c7226bab5547ccf4042bf59b1bc0c2c41dd1a7db42418e835e7871bf121bc9b1aa037c3796214e31b682f8393a1531d1734e2bf0237be24002f8c2a8a7ca"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "21535b47e5d30e131aaa9572e94390d6466ea90f4daaa27b2211a9725ef1715be8805ca5dd95e01a649d23984d5e1dbd461ca6c6d9c9c4d62779bcd3c286103e6d3a86d289a86c58cf84941e74d022cc75942d41af9da94602361e1839a4d8232c3d0ad09f8db42d13e66f79bc22bf52950abad83a84fe6c071aabd718c243ce9f11d84a266b172c08f0b17bb07d0032cc27d60fe21f29479474f52563b9eb42e40a7c2188404019e02ecda1c588a3b9684191b19dd33bbde2fb3e9d5ecd1317594127"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f64e8a480d548be1e8dfbfc1a6c494b81e9c630d05c9e1c843d35c62109496e03c954da403b57249e6c3863f3f7289c47bd97bbfc927de8edd896c2dc4dd02971bec98624cfaa7244543c4bdc02c0ba6edcbe543cfe80a34245d5fc4abbb5a60588df8a1783d655c65606d4fb3a3568b1b44c1ab7397ad8117c5d6d9033890e2558ac2e2b9c8e262191cb35b2c7f77d4ab0c459473beea90eb8129a4cb4008febac2bf51997ec1074acdb75b8c446803b8f0d4cdd24d411c7cdd58f21e587a98a79a8562"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "ea65942ff43fa6092e4056100586228f2d44cd8f7020d7c9a0927af28fc4cfda7d7f8202b1dec3ac153d186b97729508f8875bc46c5213bb3254717facf81fb1b750f56b0e25923d428aee8f06ffa9f55bb9d06b7144c98926f9dc82cb7de678d0d217816d73821b34e60ec41a64e4b9cbabfa8a88ba9559ded2ad1c2e5c3b54654af840715d7de483c1844ed17e8d515d13016ad5dbb83e09d1eab459b68720672ffe1d8ac982fb5ffebaf08b7b94fcdd9481ce3bc07df4d4aacdf06b4f145871133b8296"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2cd24ad3e4a9f3b145eb0c899f4e9622724c3ee8afe865f8f1aa10003c584cc6eaf3639154ba7ae2ceb4c4daad3b2e9712bdd50fcb8bb844a080ae9ae2565a562333b098ae9f56fcad5219cf37bd7a093191eee913cd46231ca9290ca858e8c057a4862700c701178a908795932a16d95d17e4000d71911ac1048d82cfaf6c8007f3c50ba8b1eb87d07d66d62a19ed638079d4a5e813de2863362b2237b9c6940708373ebf162fe5365cae6f43a535a73e6f49d6ca51e8ef3811bd395cb84fcb7387db81d7fd"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "35d3281fcd49033ff7255c49ee4b084e90a34cabbba2984fb4ce4f66a62b514977b328050f0af3b9ec9b2907abca5413de2ca1aa05edeadd440d5a261c861cb3e726488913917cc07e2c4763024aaad13d37158f1606bcda253d1332811f0fde69d411bf8296d00b45830d300567dbaefa79ae5f152a7a6212f0c481838a9319d042404dd3e64892b592fefd3b1127c300cb541388867dae011b749672008958764dad93c13898a4b612e6a137bdfa4ccf0da58aa0c25c096ba79cfa49ec9af689e761855fd712"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d055196d7bf4fbe53b8fac09d12e55f2401fe2dfdb423fc25c6e787a10ba2c192885c2ee5fedaa4d2cd1c880833bc32e2095246311d47f464629ad53c82cd0eca24de0801cc5d5f72c5f0d37733ca62b9dd47dfbbfb1f66ecbb1b710e342afbee3ba971c1fc735c9441e910ea7fd9669dd78d1fd4053dd06856744a122be93e5f73ecf04606af47d49403e3e658849c3a76d38833d96271ed76b0ad924b5aea8ee680b1da889991d52da6a4b7ea12c848e134fdbb1305e27c2fbce7233280c3b3bea6a1219fcc3bc"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5d3e88955c388dcf6177185f894fa7901bc5874a9e73d9596da159dd88b77fcccb3ad5fed768ee6d69c05d6e38df5a679eb433e0161b3464b4b8157cffec2c450a28eab12c11b18ccbb68f3ae14c71a233e114c4868ccbd1e9eca1a2b6ca4a63779508099080d3de3396649344423a8b445d34e5902725627608e9b5ec920a8202d82a5eefbb3b3360d5eacbec5d9817a64d111052e5f030622ffca610e1af69beb2296825f2409a1042e4012daab54d649f5ae284ccfa665e6fe80fd910f39cfe3860f3adee2912c6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "392bfcad38f2938b8d7880f70e33c14070fe54843ce8622ebbd9c5fd9d7cca22156dc73c1dd616449826ce33e4bfeb4d536c8b3a72aa23cdd512bd16a7c7ed5febe356c8869c5db31d67b4fa34ceec7015a19391c4b5d8ff95dcf414aeac3e80d261689275be9b70e336cb13d9255d05084c367f42d92c18939e89018e0b5e3ab9a51bd9eaef72829e964e65c8d70e47ee0668af16d27a0307da66a9c4297da67963ac1bff76083e3a87ff12aa25aa5d042a744bc01157102cebe6521d7b2e5932e81fe2a23341534823"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "97d63a07164ce86d6b413acfe23156e919e1c40e320ee6419b9aea50271506d739aafaa4829862b611786a772e7aeced9007e09bd7524309095f1643ac8d18af3d3a95f9864b18d2e89df43a3a4597b0801f2ce05811ccfaa88c8e94373378bf325fa7fb6f05cdd0c8ec6cbe8db438ae131f5097353eba012e18f5d1499e735ff4bc951986390530998726e7a90b0ed71d16e8986074dde9d3770005a748fdcf411ddf0b03615896d2e0cabeddb07c57d74ef262e1778016c8246625c237be901bb8a6c05cdb1ec2f3f4b7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "5d14d28542ed0c9c21aa82de98c45157b83675341370700d01a9cdf62c3254ec8e44bb1346f503b561ddcda6f1176816449993f99f870d774bf6610af93cf00c5d36e08a6e006c4dc78c6605345c8abad4a8405f575cf40744b1c789f987cba44c31a022d98d20e79d214659653dc1d9812c7b7f82ed38b469e8c718a8f4a281f71911929ed1b5d4e618c4250dcd6980bdc64cb34f57d0d4778511c38456c40300ee6b0b2f50f64542a44a8c9b3b41d4c14bc06b4e166200c1a22bf0f11d51f07dd130ed482f6a5804c6ea11"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b606c4c803672e40423f7b2017825cc6d87f7db31cb155458427d40824f4d8ef0e77b8f2aa152a3938e1acdc8db298728ded23dd2eab091f91273c284b8f644328d16d7568c112f4f0d1209a857a6fcd9ed00fda2d8bf2409a01fe2cb771006fae826ae58d7f5d4af94415569395bddf575a116d6daebbca841469f06ca234edd6348e078506d5f3699e8fa74fbeb65e6e182e40af3b129bbfab140a287d95bced6a4ddf4bc942eeccbb875c60aff88987642b499d6d50f2d37beb1b54d9a27dc25350b324e13b4dbad157d18d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "29606ee5ab59bb463bdb766a319af2085a36d5d5d92b83e60092c0f568ebc8bd2c7139cc0042f7e248c0c8a89936a39f4655a78b66e668451562fc7c7f9127a7254f4fa39fdb21528f21aacc04d86ca7d985056db91d70cf46ddd89a54a78cb2f133ae1310ab830813637fddaad4d70118b68f50919476e81bae14010d8b5dbfc88b2f92b048476139e7d47f6501ef8b0e8b52e1626924d6f90fa32a7ca62e1fceebd50dab14baae9e21a68a64af88962b6d8c55e0e7e6cc22233405e7a1d29360058bfff24051db40ebed223271"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "63b44af02cda636a386591f0f2698336e2110a2552e43783ad6da06ded94e314fd50adf6661f1caef42c42f60d9c4e50261a5eb45267fbb457deb03ad0317c4c9ece21c6595d17c7c854a3589aa6e75e04a9865f821d3b8552acba9bac49c959188de5fdf7f81a26e4f634ecfcf46ab5acac7233b697ef91b79a04dca30fc2959bae72c0a9806c74a59c53f6eb322e00301b8c4858f6d554a43a4e2f2486306704ae96b0b815802caaa96f4078b27e5bb7968da16b5a6c5b0168be405c95647bd21b3055e6c849d65f0510d458ee25"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d33b0bb08e56a3ba99a7bc02d236c884110bd637c293804ba2dc254473461ebc307a311658232ebdd608177e1be7f9fb66d912a433ae6bd1500822d7becbe453f01e1df8b7b3903d2b8dcffe1ac23e42b33d8d5b446e22f5dd220ab3f22217d1c992b30d656cb56bd3c1199e8672328a8598599c6099bfe3d452c942a285f35f96a85584e11e9e4586f726b721098294fd27e3b4ca3ecd127989e1202eeb218fa5d74aa66fd5533a22b25b213eafc8dffbabef6e17362b9c1888e82b00108cbf8ce096348bab79d7d53ce997a1b182e1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "623b1417140ab573ca90ded7bd86f7fe01292df33d285d2a2ded9fc6ad13060769d18cf5aff2e276231a172a9ff46800434ef60f8feed67e10058a6d32dbb111aa286db0a8f0980a5e55c6498f4e380bf31b1a4af1332dbea6cc0add86f563f1ba70df596b29eb9fc694201590a63e817cf455bdaf49ca1e5a4ee4250643e8f30389eca76e03251b41ef211ff1d17250ff7bf7a72993687f6cbd1e73015d42485ca36c995352e77b966c2f77a201ef57d5d3d8272bb87931077df73ea3937195b4bc6c95cc7d975053c150c6f354a5cb6c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "debdf7e34d1927d34002aeda057f7c56a5d2fc56ee130c91007432860e1da1a940a71293f371b2da670ecc5a7e3fbfe8779c1546cf4939a6f36dca6aec54018770ec3c9945cba91a83edb3fd32ca6182c01d0e1b74c1d80a4e5f5537a17c2200fbe0659dedbd4b3200ead90ed34a8549759eb3a21eaf6f8f9bb1b9525f11bb4e10ea55b04174dec2a7fb6b5ba2dc212d4f4e45e6b948ab3d6600f51767ade1339c26277cdf0b3627df43e227aff9a38800fc496f6c4b3cda3dcb5bb1c3dd03ff916266d5f6f4bf1df0ed4024afe84ad1edc5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "dcdc862adacdbdbb9b1d43ba399136029cd9901fd16f443311ce1009a17b2bbd118a92db41f60bd9640be21488c671c8267b7ef10d94f001d94bc43cc783351eb05a419c183a6abec9af39d91edfca281f0c53db8bba509140924327739f394af61b77352543530b1364fee4dec9a04bfcc3aa51373692087b4d3115a7295e549736abebaeb87c64066d3e1d5752988395bfe67c9b5fe9598e313a39766486fca2bc053c4ed09b5dee30b182cabda9395ab140809fae76ccd5851ca625c8ef0dc8eed9308248aba77a06fe6d581aa103b43e00"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2a94dc0ec9592004cb301aa3adc90da3d326794934c8c05e17915d31d3912b133b0508d16d47c77c03cc7097d68f1879a39139260d39a10ec407db9680048e8ed06f3cb4ee9e53afd01ae78da4f18d0e7e298bdc882239b22c4e0790863cd88fd3485b633adf21d279811c4eaee6f61a3b0b6146be2075c08a9c97883062b4ca2a16c4f309406a3782fdb3646e51b8d52d25a15c7af7edbba28693906dc8497b9240518b2457003a9c55c7a41601329ba7eb46e82af1db23d1ddbe1a67dd358a9cfddd3497bd91cf0d4e41edaae8d2232e3acbf5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "b390805562b9503677a1a5adefa7eb55ebb22acc2c7fd7032326c3f87900a6d429eda3663b77eed2a5df929e1b43763325bde8ed901092e4099aa96f89b42c2620a1d8a2f20f772187c4b30d62dc49f12fa929396249c41936e2bc379474c8d8ae0d71fef5307644893eaa14b46ebeb581bb139956e1ff4064301d03862cd358eb156c9dfce5712b35b149e42b53be3097e813305b8a689d4a211259d73ed116fed8fd6ed457f58665289c73799137aa57925037d2a4898e19609a576609a539d640a6a0898d76e7d1170de06e98a87c0aecce67e7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d527df309ff5112d906def8c461e300942e10324f9ea54fc47ac4e81bc7f0e83f9eb3c7f347ec1877340c78346f4618f52681eec7828b38583719def723ef4b405553373e280668c33d846ad90ce5e074f31cf6ea49b08e86cfe2ba6039a7259ef9d73297d310c6db2e17491f524811edeff14383280dcd3a6ac23cf170bcae854b7bfd476195b3ff0762f1ef4bd0d5c1727968fb79c3dd15b256d6cd53ddd0ddf4e29eadf3f75013d9099a351c53e9c4e604516f050dc6b2883d07a28e691798aab696cabf607bdcb6f59fc32e1079d20424995d13c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "58ced7f7d6ecfaeddf35b67823815da814b008028d25af3b79364d93ac4aa8c120a27745598f742a52a4dadc2298df0d7d0fbc23c250cd097a0076b89017c8707963e0b90f06161dbb4df4822bfcd2656870aceb9a5adae5cae7de37c3df6abaf2ec751cd163f03613e60409ddf579dd9b732ba3c429271f3200251c560b4010e9310233426904f8e2418798373ece661646e8e511a75b0df17eadaedcc64259cf8c4fea77d754eb09f378edc79259325ba9414865385e6347efd0f41de3c52c6f27d6c8b92d97a29c1e06d37874e0c58c3d940f0f996c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6a1d428d191bb36d060f1263573118da568af27ed52b96c71dcfd8e4a61274c64bd3627ccc59825ac8f2325b2a7cd46be2fcd5c22f3ea1b7a8920ee8d150542f08e3595b225404a125a96ba66f9ce1fd36d57f12bef1c66fbea22144d1353d65a072d506d0187e2e8aaaa25d1c7c8695e3293f01fbddfd44307f687f6389c34a2969ccdbdfc6237b382063f6f6a9aaca24e370e88ccec8e74972fcb6934c08dcded213830f6430b37a82b05f408c8209f95ea2bce17b712e73ec83acbf3bc51a2b6881e3f3bdf02684b6b752e7abe723679191e26abe2cc7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "acd7222469ae8767f7c949610852bb7f120a51bc6561fbf66cc7396b38dfbdf33049302b4f26caa93b2844c6c4d46b6ec0f5384c9767358751b7c148830d957e68c08e11ef9a0fd7f381aaca2238c773f4d2f885fafa151d17a12746c7c28a57b2ec7c575d88b9d98652ff9140c1a4c50f31ee4491e53572bf16a10b29efa94a2c079046604c0715ff4fa1c4ea8fda3cf30fa8ce37e53740274e83f6dcc4a63d24d34b3ed9393b671d3b9915dde6fdeda18ca5d670277c434d793090bed30966dbaab252966afba1d426ae2d19b5c74b16d3bd36528cb42b4d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "97ef05ca9a81c3ccb8e993d10943be011b8ca3e8307ff65b1ca259d70718f22bed4fe50de5e46d6abdfb3da2bf9669c6ade7746d44a40ae0655e9e8b4dec1f21c41a9e907fb0b4beafe49ede427c7da456d9c9139530875ddcd9e6e1602480e63ab8426fcafa6eaa3f4a68e3e04d53b64312e25e3339d0084a987b53c11dae4cab7091141018f9f1780753e87aee6317b9e249135ca32d26289783ca2af99a2d29ef35b92d4f6541e5e337b85716266441867d89f0af4b855ce0db3fcd0b7b71d8491d43023ef06586070e167d2dcd90ce9aee71f9043913f459"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "faab0206e2bd10ec36f111531e9114f4ee7fa43deb60b268254c0e3d29a4cdf928497a097791816a8ee8220d8bcd6e5ae6d403ce64c7bac17104dfed8f56870f067bbb210aad4b042654fdc7d5e7c1598eef1f307fe871d00e6d69d68067dd98a7d91abb8040393455f606da8349beb2faa52bccec14c4f1f4d9609b3b23dc24b031c65e7eb67ed4faf8e096511403c871a9f64e4b8dc3e557e9bb5d6716d158924bc4e5b53d81138b2643c253fe9276110956e553790e0ea89a79366934198c21f9532b43e3675552dad56b447f4bab67ce04d53101b7734a50b7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "48d6d638ea797322909ec196c41ecd64717c3ef45a9c7cc24820524b1e20e430c59a9fe3efd044c692a2b7fa0d476d546b35cb09e8144877c62ade19bfeaf598d8087a97acb68f8add97862c1db10f0fc032a74ba3c8fe4fbd07a28bb9a3c107ad0a2a0e0da23eb74ab55f8a2b7b511e1bdae340b1d8803b46edbcef3f537c8a6ec2806b89dac13989b89186587792f42e5cc2f8d08f9bb989f00b770e4c4a29e1c0689809b950c04dd34e7e7f74823b1bfcc4f855bc955ec7fa53d9a6d582a5186ca1c282f030869fe5d7caee534b98ca7748c37476c6c69a277051"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2894313e0e99da4a8d543ab6dd9803eeb369cd4b3a7c590e2e56b9f99487c16bef7eb190ff51fd2aa6b93723e712717cf721106115f10b2951141deb33b18ef7ef1e7145ed9b5eff22fa30780f05948adc7195118e8411f853b3a26caf220e81d241121dd431716a58994b7d97bf76b4acec5424818e545c4c334586efb63907dd436e92bd04aee200bd7dcb7cc1ca5f39e67e355b9e1fce7ddf882e324bcf957500212461df00303eba46f538c6de2a1681d08432e3e28ed69767b1538b09eef75637da24d100ca8acbe418760edfa21a1125a8dcdb30762544405405"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "0a760b5a7b059f5f97b19552306d18463598a21ce5d01c9d228bdf61bc5eb4a6820cefc9e3d59018f775e945e20518f9520ac91a7469b612d738a900c94e0ac42431aeae194040c02b6d628f1815e5270edd3bf616221b0238e779cfca37c3034a0a747a0c0b25a60d9fc67abd1fbee5498355cde9821814edc8785b2f965d29eccb4aa1b6c5c417150afe9e2537bad0b696228e073d73b0e6753fd165831b479c95adeeb2dea1466ab405ec85bf72a436a0764bda5581369fab7dc094cb0e8556e3336bf1c6380c1f35cec4f38cb2e2ab03969ae62c7fa81b3a43869cdd"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6f268254d6fcea73605bd2ce4d85df1c319e2ec84dcb204d46037e25d3acc81051f9a32be04f687b642a6a18d506b26b0c6c8f2c00a6bf1726c628113069beede1020cfc255391be45cdf3ebda30042bb300c3053608716ecf5f8c435bb10d4f5da66a8695788b034c28956d2fc6fe5dcf4b3285fab8fb650d3c4c6ee0ecaffa47f8177eab9ebec5f8adc5a8cfaa9c3adbc94b91629413e6da4781a86525a3b27597c78b0642cce5f12e5bcb844d2439bf901c3934d66e17f2414b1b8a62b53447203cdbb9299f928799a0701c58cd816afc73f0001f58b4097cad8e1412e5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bbdf17fb1bb249561642899623e7c7f5cd41a403171b675bbe59e5ede54a76ebe2cddfe9eb77a4a66494a09748f25e1fc3f0bd744bc685ea2199196e0859d6a4b6733f866b7b2df0ed69eb5c5ff6223a520c9ea99840c9c5ff0795d9ba45118d491d4fd6ed8413dc22e0f1ecd64e64a01c7b93ef9a9ee7dba83bae239d116637ccef80f25cca04acfa82eed665c46c98a9bc04121f70d781c73ab892f7982d0e772ab37dfdc3b84d2f357efbd60542ade377ba416d9d5a595c96d17ed8dd5c8a32f114ec99512dc2001227013eba20356120f0f712291c8da6df5681e2197ef4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "439943e702aed09907d07e36c81f1fba89772351f4b60fd69e3058e88330e242470c0bba6e42a3c16e1b89115eeb4226c2d9d2e49ffba7038b3bca20e08028947b166957ff2bd91d21bcc6377f105b3d49a91cae8eb6b9b701de96a423445dde2472ba3eb001261c17ca50a955c0daf9832c7fe86f9434f88d2411d7a030389e7d93f14b6568b300aab8f54865343ae1863852827c9f72e7102e92a1f6d67c55ddc6a2b216241893d010bbe104d2229acb0282263979d5b0b86e2768ad7a59ed51935d29bdb7989bc3b9900c6e7e2ca65d27b9673d2c8def797c3fa554a032b8c9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "4f66b96ecfb7dd7f1fe069e77f9a40ea372bac1f13c0c8b29e03a4384a928ddcf6d0c7b29e429991d43a1d835878f4d597b59da447b448209788dc3cae8f7b3f110490e1bd0e7d096d1d4b433b2acc70031b74daafee42f3ea8cfb12aa2a72bf12217457e3ccd4660a9ce8c6b1adc002dd5e50faa748546920b61e27f1e6ae0fcb4eda0336381d81833321eb8edef96ed046bb88416c95cfed95d30321ba53952c9b738ea3a6c8650ae31bcd1342016ec070e4527ac9509b4542d9983ad63ca226528448d46ffd6417f70c78dbc5160f546d92a4ab0854aa6abe37481824ea956792"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e71efa0eae7d17b57212f0a1b9e9ce30e9442bcbe26312fe8dc1dc0e2b0b1ef028e0e98ac816aca2af4a725a0abce96c0907cca5c07c612707dc785eff79e759393258f90b981d7f4d89833629d32507aeab8348d628484e67b4783c0bce6d810ccbffdc77ee2796553c9182f5ef9ef6d84774518c05374ea6cac33f720767d7a8ed29c3c422a3667a692e0bb8cf9439d879ef90659636442bbe07438dcc1bba764c6497433fc000a09b7eb5518b2c179364e829f7a1128c7504935503ebc7d1d59166a843ce018f721e4d554fd27b731570ddda8482e67f03e6669ed4ef2511aa7bd9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "fc646e856c320f2b9caa33bd90bf08231db8740d7fd3ced036411aa80b7650b58ae100bc07195e88d8ccc460aa58557482a794f15204a51ee45adb7986bff62003a32083e5bab62d66ac406dd74bfaa09cbfd21f2467457a51c3cd4988d40628d65b6363e186f7be7195d110d772f3ae0a8c24be2b0d28ffbbe00b133cce4ecb51651f0d8f6ed63ef5ed012c93bf58c221ee7837c6c7ea0c09302570cbf2316e76474cf264633c5b28e71988ebf9bdc055f127e19b49a46d892291b76f70ac290f87c8534292d76c4c7bac67a2dc498a81c108e52b8c0db290628121882a067cffe235a2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c6f6b3eca36be502cfe65b1d4803854336969b65febede26d9513e83c6d55a38948a85c54997c99f206fbef972f473a8aee5ab44d32eb75f38f03ecaa31223cbc4bff215772061afb48a80705e1511d0cdd4ddf00a365a09d7e1e8daf0f32629bde8576e2055e5fee04053f661224f96e28c3c3b56c8bcc6bfe14c7a224242dcf0e3e7f002192655846037017acaf069c63a44b72a343a14cfed90ced833822de6118a5b5b257bbce56d24ae81bc731e0b4a318e45a84310bbcb569833dde17b396f76b4b0f72f4e59239ab3738d028319765e3e79dc752f2aecf2a3ab5c51923d8d6bc58d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d11ae03c75a7b0bc1723d301b4bd2775085801d01ae5cccb9dec444e46e44f0f413ab0ac34a005a4b7877cfcbc6d7db3b46071c0e73b90a430f4cd3a2a4576763926df0894dfdaf47ecf18d2d4a9844e818ade7c11a993d11349e04a6b3da2090889e0ac67fbb0b86817215505a728bacd2e3dd7be9f80ec92c591037d16fd1b8f706c95c097b18f01aa4577437bb2a38c569a64fe262192fe00921df4a9d95f3e481fcf422d7d35fccdfab474f633e17dc041285d6fd59831056846166cf8f95e56a6204239794125b1502376f1934ff62b35a2dcf1f51b53720a96f191d72032138035cff2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6d243cfc8bc00b2def28def7543a0ca2b0d531c4be9cd1cef41d53bb2b84da4f3e1f58c2fe89a49658dc0ff614beaec3949dbc673a45fce18e7bfaf7953e16b8298c406e5013949e268aeed343a2abb4ffc1e740937f40fc5c99313209688929a6fab1223ce62e924ec290c21702acc2627a1862098cf3eaed6ab08004eca7108b1b02fd6188e04353012a5eac7bf17547ffa761cb7430fec5d21d576bafa3aee71be6787d6d210a72cda07bf8fefbbd49c3326826836698ba003f3482005907d5fd7f4fc8d31ed92802b6ad28df0c174cdb525238dfe82cc324b628f3359ccb57f4024c06c17e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "579efb8aa51c50b13766d79a95712358ad522c2a1baa33b10df4b6817f8909e3d855b037f9f382a18aed61fa776ceb53dcb9bd2adfddb7b69e417e3ec6740b363852625ad0182e686274b3556c1fd71b3cb5df25c64ed23ce194f247022ac398408e804de1fe525046f6455c41122a3818f24b312c5db11714537f75d0f96d3c6ce02e379046a7878514157398153f9187dc5ef160e9f3572dd7abe016fc710ef0ab7670610305ec612f084026771e93274bed74cadeb5a6522076af6db38fd184c07c3721f281754119221cb49e1c35ad07838565f10f234e05bae1d88f66d8e9ab5e51d838a151"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a857f1dae5f4e7fc5b8035e82a3df1735dc0eb001c70da569d93e85efcb3ee64bb58c553770ae07c9fd6bbc5cbc8b6743b7587f1a75d277eed7599f946d94944aa668568dcb42fec6a3a7144f52c89731996207664ec0bd7aa0aae2dec262bbb3a3f4edc902619e5e5e24656f98d5dec3b9ac6937b3a27a913e43782dddfa351dc863b9b72465f653f59e1cc2cf32e04ead53cd231ec6f00603517b191bdc3434b989ff9d8e83f4ecd0bd1a145593e245b8fff15bdbfdcbbd7e1696d28df5ac6d285bff0eac38bb5342dd7ceb630e4f238019ca1235e13b8cef8f03b0945a3b1f777cef905b15a1087"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e0bdc65893480aab82ac4665e5e732a634619d7cb68fe5cfc25a4726c15ca1fd604d45aff79387153e8466f724c902c2a1ada5c53d61daca9320722c47342fef394645b5b8631dbf45046afd67b682ffca139ccf97f1f94dc0ee90155c4eed46dc42e658b105d592d0a70eb43a68a0dd9f3b8eb6609355c8169cfa483956afa46ff9ea55eaf0e66a7c36ca0d19d6986175c034d4105976580ff9d9d4959d00025b5978ae7c76fde710f7d8c9161befb62f40179be1d072f43610709af18f472798e96586a11dea0b1e37ecb4254d9b0b376916ec412f5668e93f332f8a1ef883f57f2fec44ada795286a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "bc9fb80a5685dde8244f6f552a32794a8fe86ac9a3822fcc753484726513c7e129c5794b1055e1202f1cd91ebc5ee789d131c532c9efd2248beeea52cbe0eb96287a6e3a4a8b763afb37f3176e11e2c4fd9c593c3246f51bb5092f94e7d6d63b5ba5942dda975c01c3b4990a11a8571ce3494809584605d4b9d06b45d1a9604616b10477caa617542c6a89f1e8a155a1ba4b0e31c63497a8fd48ed62b47ea098f4850b9d386a2a0de0a1d793d20e720c4e1d63ab2e19133bcb2a379ca830bea32ac8103eb9105207eb10c812c0fe3dee657a357ecb13e405cb23bfbad572bee5ca80fb5bc4b315c3821b28"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f9ae35ffbbb49c533eb324cd02252de0aedaa3748c4c8884c389ca6abae2e953e405212dd687237efc676f7a000235fb13d604e0481617839493bd10a2ccac9c7d8d11186dd33134a41da716ee7a4a7e5085e48fea22b9b753709b9d86d264a521978955b2e4836573859f7124d6c9d89107f55914f33cd009fef23fd8f28c85fc53d6a7ff331ab2df6899ea0565ae4fe2f0168830ff1c20f39f994f37a857d502002b1239f7809b117856bfb92eaff2e4d8c05c718fde83825431003c5c11e661ae40b516289e3e347957669a7f20ddc665dc3bcab5bd42f2e03bca3511d83519f4a6cdb8c67e0f33b12dfd"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "664950c1caf4e5737671bb02158b45a938ba5aca3f7c153b64ef531c1d7e9e79bf78678abc9480046286cbf03bcea3db6de2cc5663193198e8dfa9907f7712892fc522ba644d46bd956bd8a8ce8a2d35266ef237e6c1a9fd0ec6e5c5ceccd7f726e4dad639eaa21cb475e9765671cf041f45b88840d60b22c1537112c72471f4d2430b6ace85ae80eaf4da52fb2ae1ad15ba2c5e7754da94de5b00f6aab061c1d96a7a524ffbc1ea526d3d1744d4682985e8a1427c72f90aee27505c73ae7e378e371c6000c4602007c2fc3be33936b15483a60e0838aea4834cf8d38325ad3430a1614d56ddb0370e8c8ef748"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3deef64b2abd079784b7dbaabe360aa3f6cb20763520eff7069ec1704c9789beea0fe3390ba5af842abde876b371d43a94771b513a081099e136d32f4f8a88f4c9630db04f05ae6019b814489a5ecb7ace0c25476ae1decd59c6dda06de38e3e06347cd2294aeaaf941f0e030a895c2f2b2bc88e2ca698dcf6b6f18f24479e383a36caa47224719e581a20002bf2a21d8650f031f7dd1870c3153693b624608069f30a0ba6cf5a9a1eb712d92bb97ad3a3327a41069e23a7445c02d6de1e46b35b4a8a44134ee19886afbef0a4834f7a7fda53c1f784aee2ffaeecd86e7df02be15b62ea204aa3a082637c4ea34a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "fa80ca58dee32b10b4282f576ac3f88ea89530aa712ca01a708761cfbe2a14de2fb4d5ffcc486ffab600ef97e79e4d734337b637947d04f1aa87e60020be8a26937d0e701b39c2ef09b54cc1fc784931bcc5d6b58b01bf8f636c6d40545ef5a7a5aff122f21d72e40fa1b3bea67c5a6c27127c55ccf61b601f4d59438a453c6e8ef9f1904e5c209556c085393c4ea7152412090961dc0f406dd7c008d00c8bac435b6f77ce8f26240d3ca3653d86a542240b34209ae9ab87086a539a10f9fa5551b9d13ed9501877faa3708219a2b0b2678ec57bb1ad31a8d0462ee7b2cc38f2644969b742c0da8aefe33c5185e088"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "d87dc4024a0266375b6e4ba966765b1f98a02c0b14ae969d3a00bcbcc2c1b741dc96035fddc310d2b2f801e019252489084363589be8242dd4c5454cfec5cd68858d519d9f1a2660d522a399638a3dce554fbb3b9c5956f8046f7e2c488739f6fc399c208c8abb94bef1e057a4e64b8a2b4a1e71903a4ebb5540934919828696f09fe0a2bf4560d9206f7bf7d5e78ac1ccf8e4650d05cffb71b20725249f82b62f94730e854c2e50cdab1bda0888ca1137b4bc32a7b469191ea7ee33a329fc5cef8c096934ccd6142f109163b4efb93f12e85307da35eb6562ef110d4eedd0baa1ed720aa77c2dafccb1a33c6f5d8a23"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c0ce6af7494dff967497d120cf99bc0fdabdd04831ba57bd6fa5d7f5d1378b1fad4aa0c5638b3aeb34730aa782515e9a720ba112933adeeed13f5407959bad9715057001402327698a8512af562b75bb70e0f9883df3726407edf3a6cfdd410718ed739969ddafa6b4e186b3ee77dbf47cad4ed5e7a458bb927b8efccdd63a5b2399e49926e68c6d4dafaa639354e0ba349187a0cf4f3e92774a33bf95878ac585fd72b5544ae54295a3a0d8fd0d063b0e6e77feb7deb3e617e263de65531d60d138eb2e54de5d50b12c47c23ba4bc91bc477556ac56b0706629a2a89657253ccd36746918be8d0b57b9e97c6146466554"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "6df5132e38e7c63b5e09d42239bf16f6a53187733ba07287b51f2362196dcd9347cf74d9f6be301ed993b63ceff5192e6f68966dee3277587bf4845bb345af7907217cfd0f3c99c34a0d8b723f8c70c5648b998e22ad0c4612b778235f757755b5fdc4f00684d5aed5c135fcf487f06cedf9f11934715b66589d6af2188a3b4e885d28e6f223f60d98817415a2d47607ed5d5b43a7559cb2bde1021f168a9d4a89d1cda0801e2c876e03208a841ed48ce86965b822039e99d56fa82d62bcd9f50deb810420e456e80f535be7baa5c1d3087f5145690a4dcf284a106ba6f5903fc0f1ecb57a7b81485710c82edf7090cf382a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "925437b13c121ef97e09a3ab9a90ccba96896302f81c52697109dfc0987eeef28b9f1062981c61076b7b2d028bb6547f50401c1268d192570bcd05d5003c9bcf3845995f195339696e010981afa1adbc79857df2f72757eb4c72dd61944b68cfd1805bc248ccef6a20874add8029a8b9768d632e74fd03698d959b71b3e9e801280c022ba6d1b193cad60227a22fada2a0ff5f00b673e866127cc2da1c355cf58093fcc65580d2f1795c2ecae21ac5f0bb5737d748dbe3f83d26bc5194b00a50250367fc687d813acb857acdd580aeef2637fa78c2a7ee2dd7543d4a40d37e49673aa073932dfb75e9d79c087fe757db4414d6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a840502c7c8a93e3a9722b1baa51b553df591b2091a842678e4c68e34c92afcb1099b3d3334e247aa2acc24e03a32b438dec4ffa644f114ff50e3683d695562754134c73ffe785f1a2c87591a50239402d6302c30c8365dd8f50dfeb5c2479f760eb119f31686e29ae973b46ce646463e1e56c0f8a6252b85d83bfd17fa22ce98a9dc2880db8fe277d6f92cd4cf7cf73cd930c9e33cf61395a36548b31ca1f8b27dd43100fe9df2884a7b384f14bf7ccb69e8a8b21884012058c11e3e1078727e452dbbc49c26db558c3d00032dffb21ae2841a186fc66d5bc5243ddad577727fbee6bf8c2d0af778773a1b5250e875483bca9c0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "8e474a9a84ca66665afbe283ea1dcc50e9a4e962a8c4a57aae5531047a062852db6b2a0622fb46cd62be1be9136a41834ce55ea5676142415b7c3ad60901a365df3197a375d9b2d78eaab078eaa1df2e0bce6e5f6c983a73f15d8275ebc31867a1b85abad097742e6213841ea0f2c96ca9860d73a4908b8544de88c82e12a32f38c8af1434c720a82dac08152ec7b3acae5482664a68ef92a5eb8e7c27a45f2750c0b4e7f057d6fb3bc36b07ea16735e12c14d0c1ba4dc5f6788428f036b4e5e4fe59766e80f864d11962f02805c0ddb7f9705faa0e2eae4d3c7f1b44af42baebe8b079bc063bfe14638a126926c9984210a2b932d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "c39669d1c430c3e2c1724f007eabc83ab5965414fbcb96c5496285529885cdc7fe1e499d7a10f697b7d6b1d96720481ef33758100b1237aab8d204cdfecfc3324ec5232c18c95e427a16ccfdd2755850f142e67f61b5cde4a4b17b2427ce216dd0021edb094c78321a6e73a120da59e11188064db3432b30942b5caf3d8692d4762fb64b0a725c097d747366cba193de4651e92de640911838c351a43e85a391d85638b38a85c7083ee02e41bded091399a77851ddd026ac2d8cf11f8b07883d238f7e1e19acb2ef215e1d4a033cca51d7d7ff132bb89cfcde2693b3a41efd5123a0f17a64d7e0a6d2e5b77283e99ab1c69fcc6d20e0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "7dbeac7fa7003c93db93ad5c10e1c5a7d1f3d25df52edc39192ad115a9aa142986803a35912edf5568ff4d35a8a68a2db44d5c2ae93c7239198c642dc0732e28f703dbdf4b586a3ad2db363fe17c27c77e08344cd8fa36db95665ca974b5a0613f3eb584eb6b371ef1432d39edbed3ef88104d0664a006b2b08ade648f90da57661b267ec637c147bdfec665bb05e01e4d607070b8eeddbfce52ab461b4a54d4c3c3eb33c6213eeb5581c7d752669d70ba1542c9f83a3e8e5445afc468306180268083aa7c0c471929dc70150d3886e2fdd8ffa1821f956b3eb1cb5d8870c36910bed17f32872a8c36e6df6a77d2b8ba67d0e367b71137"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "9e75cfd15638c15d60ea531b2806b51d3ae590e64d6aac611812992e870fba84f76c367f78c8b26de7033f87896468edc89d88a5ee582429548b620ec67388ee80888be6f513009777d9243dc6d71f3b3251418ff9d2aef57287d7e9d1a62437f54d39dec07aa36bb28ee45d3c7f050b8f9a3e37e233e3aa91711287510dd5111616c0fe19ce08390f6033408dfcc5ad37bb6af02e8ccf794e5609d5e16e971aa36e21304dfcdb4368131db4acf38f7c911368e4df2b42fb02068509e3a15b9d59b87292d684966e7492a1f46e2923a9a40324b0bec5f7d1751b41feb97def10447a278a062150bba4129e6ba7206bad86d4b6d7d98b06b7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "e6cd6a12f97317f3c1fc588b7a4f1afa8abde43821301514f2970b224af94a9032efa0c6f97a8434dd37bba19471faeaff3b8a8f9cb5a9acc71f00917563a8c835bb97e4fda77aa709a4e88937b852e957b01f0f2385b82db6327185a131efeca048f2a853ffe5b1cfc5310513efaef893f95360447acffc38cc409f7ab0485722aab359a37918c52019c86689dbb9a4f0f38c9917d76b22910ed656ffee07acefb88ec7f0809e7f0203fd3cd4a1e7527cce0c029b7c80852b86455cb9d87a6f0878f08b0d001afba2768f33334d81be572503b1cc3a0af7807ec41a4dfaad3a50fc96476af744cd7c49d919454c187d156799e583a8c74d03"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "02608e76c626822f416e6deb6056eba09a6898fd696174e39620d960e47b78de1fc006d8130521843c8f3e610a6295fe15950c8974b2f7b18f3850a257eae17269a0268ce18b321f480d96e2750e923bd32d6c05fafb4ed3eb49d45c02f2c5358baa0411743c96285bee23da543dd8e21ac15326f9d9eabd3c3feb98d91cc99c0322d52622321946a688e28180c1212e75461d205eaa0080ca2667c670747f8bb5b18ceaadcb4fbcf5ad8be2878030b510c6fcd564c848bb08b5b877da740e684d9d52654324067c8a32f90c8ef40a9ad0067b183d1c18f93d5437f08bf03e4a04cebdbf8a075e88ce8b95669b71dff7e40d384d20d1c06a31af"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "2f4119c21c013098b20b8dbd84b47fd5011c72df62b939746b7c8d496ab4173cdd2d8ff9952619fbcc86d1ef2777f17638de90c1644b17e27d7ed97da0074a2f530b2441eb6d0eb56eb46ce882105bf2ae3d956c4d7e5be803c5dab0ce7c55548306cb9105ab5d098288d8aeedc03cca581721ef1cab2e04e315cd7f8bddae7c9ac4afa865a15bbf558b8f4205a6fdf405d021b67a0326efda528149b1729c26b3b4d3869425f324b5f0865a6be0ed9dd04893f1fa2da06b0e5665fc317e89b47cb71fe6e673878ae4839fbbdb26fae94cf37583985b642186afafa3c896c55e9284ee2b7e5fde9596c42d5136a5024ce6f0c6ba5fed11928ef0ad"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "a270cd89ec091f4862974d10dca5a283b8c332f7b4a99527ad63fb86e1d4b64edc1281e5278d000c9c6f1bb5fca1d687f689ec64ab32d61b3f47a23c98ef70718cc1510b4785c2b56e3b619b3e5c184628e0c96255257b345a6c42a589fa245e2fdbd7819b8f0460fc371d683c37a468a5eb61bfd5338fdedb66d70ac110949a19b9e417b60d6fdf511eb41737c35ae15975f5a98125198f53214375ae8361f2d1a4d9df67c21067a676301a040e2ff99b7f9f4b7f27a5a2db82c56f8fdb366aeb3deaeff45d163c859ee2d60f11a16193a3b81f51ab9c268d53883c166fbf2af91f34735b170278a8d594c4489ef6fc530e2faa10e78c90274084b5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "3e4cc5a816a4eb2e2c4a7fa626ed70a7dd08bc3d8b3fe70ed007c76db3fc62be345d00107519a2f16c31479b9ab74553169b8a6a54c3e1bf5c142a946cba2d1cff48bfb4c4896209514a349c6367df2ade1d6b5848a4aad085db2e48ca933f9217a11ffd55f1addc12f20abfbd71382836df2283e739bd003031acafb7331fbe4baef9a166f45f504f6aae650e29733a3b8f15cf39c99506cfd1bf2bd7a70ad600fd27bf34a18a8b94be6e7ccd0d92fc004de9d3f06268878ff7af6c796d350388d28760e9930a8de562d4a99f5c7446520a186337389f3763305209212571f573d0cb26ab0cbddb0b09eec2112feffcde44dcc641d2396dbd1a31d965"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "f34675a5f4c344c1616dfffbe5ed963b6308a5409b7d0106a2a733117f9ad88923d33478d4d0f52058f03bf7c2da3f26221cc0495fe9edb16bd32682965f992d7e9a14daae5cd44f29d4dd92d0b4f1a893394c659c2a755231ab20e59a31aec6451d3b301d6e7a41027fb8a2520177094b7422575803e72e647de294a04c4f34f8e487036de84679f3c5f915608cfd15d565e24b8ae27acefcbf54b033a83882745f6418a217ccd0f8ae4e10ff04e67f57b36d94dcd5b442f6e36e452ffbf6ec7ba6490e079419252d54ab64c5afdde196d0b5c352ad70ce39b16791cccbb33d498d5a7ffd2ae2174b34b23f78e8972a5fa04f7ebe66203d681bb163aa18"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "65caea398636380c6955c7549491c91157776fa1a6514355837e51fc6bbc35b7bb8b44fe019c1be93ce474e810305e36e5cd445b417001cb2b8bba78af6fdc1c12b83e326a5d323752930c5fe879629d5f5772f872b3db4ddb1cbf43ef3115e344327b3dcba6a7d8c82511c74a70b12b405481e66dbd1b8a7a9cdab1d52bdcde972aba064915ceee02e7901e757d1470fabc32f9ab873508c6e243b956cac2d63aeb32b179f2cfab3cb4c2345dfb6a18c05b97f9e659c0020de22f85b5ceef470a5ad6e8597c8570a85be25d48d60151577f9a4fbe2c09862dd57ff734e156f66fd7107ccfe0e46193d2272ce6d6c0dfc0a81cef52cbd61d2964aea53922bb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "",
+    "out": "59f8eea01a07a2670f2fe464bd755d8cde620cb4bac6006556a8663d2d9625c62fe63b6b68adba279ab287c04d3de6c4c17e6428dff30e9b2524fea1e869e42485c03a9f48af40d12d5cba0d13abac272ee36efeb8bd098ce0e1da8233ef6e6b3e96c9e05a7fedb79ae44e698640e6b8f26c43674e2c32ef17b4d7b005554ec4fd8aa1dac0f975fc888bec5bd7a06fbf29ae09f2d37c5eb7d0f67c9c77d5caf7afe681ae336fb3fccd97ecdec0348cdea4787a4e9de4df4bbfb209eeb642ce8f92730d598a71c94259e648d0a4dd89079a06c4b463ba1d175476337d553b0401d2b6f0c32639e3edcdd8c225c61e0afa5cd103b5d26a56afe3ac9462df794dc0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "64"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f457"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e8c045"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a74c6d0d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "eb02ae482a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "be65b981275e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8540ccd083a455"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "074a02fa58d7c7c0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "da6da05e10db3022b6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "542a5aae2f28f2c3b68c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ca3af2afc4afe891da78b1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e0f66b8dcebf4edc85f12c85"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "744224d383733b3fa2c53bfcf5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b09b653e85b72ef5cdf8fcfa95f3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dd51877f31f1cf7b9f68bbb09064a3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f5ebf68e7ebed6ad445ffc0c47e82650"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ebdcfe03bcb7e21a9091202c5938c0a1bb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "860fa5a72ff92efafc48a89df1632a4e2809"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0d6d49daa26ae2818041108df3ce0a4db48c8d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e5d7e1bc5715f5ae991e4043e39533af5d53e47f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5232028a43b9d4dfa7f37439b49495926481ab8a29"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c118803c922f9ae2397fb676a2ab7603dd9c29c21fe4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2af924f48b9bd7076bfd68794bba6402e2a7ae048de3ea"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "61255ac38231087c79ea1a0fa14538c26be1c851b6f318c0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f9712b8e42f0532162822f142cb946c40369f2f0e77b6b186e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "76da0b89558df66f9b1e66a61d1e795b178ce77a359087793ff2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9036fd1eb32061bdecebc4a32aa524b343b8098a16768ee774d93c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f4ce5a05934e125d159678bea521f585574bcf9572629f155f63efcc"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5e1c0d9fae56393445d3024d6b82692d1339f7b5936f68b062c691d3bf"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "538e35f3e11111d7c4bab69f83b30ade4f67addf1f45cdd2ac74bf299509"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "17572c4dcbb17faf8785f3bba9f6903895394352eae79b01ebd758377694cc"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "29f6bb55de7f8868e053176c878c9fe6c2055c4c5413b51ab0386c277fdbac75"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bad026c8b2bd3d294907f2280a7145253ec2117d76e3800357be6d431b16366e41"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "386b7cb6e0fd4b27783125cbe80065af8eb9981fafc3ed18d8120863d972fa7427d9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "06e8e6e26e756fff0b83b226dce974c21f970e44fb5b3e5bbada6e4b12f81cca666f48"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2f9bd300244f5bc093ba6dcdb4a89fa29da22b1de9d2c9762af919b5fedf6998fbda305b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cf6bdcc46d788074511f9e8f0a4b86704365b2d3f98340b8db53920c385b959a38c8869ae7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1171e603e5cdeb4cda8fd7890222dd8390ede87b6f3284cac0f0d832d8250c9200715af7913d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "bda7b2ad5d02bd35ffb009bdd72b7d7bc9c28b3a32f32b0ba31d6cbd3ee87c60b7b98c03404621"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2001455324e748503aa08eff2fb2e52ae0170e81a6e9368ada054a36ca340fb779393fb045ac72b3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "45f0761aefafbf87a68f9f1f801148d9bba52616ad5ee8e8ac9207e9846a782f487d5cca8b20355a18"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3a7e05708be62f087f17b41ac9f20e4ef8115c5ab6d08e84d46af8c273fb46d3ce1aabebae5eea14e018"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ea318da9d042ca337ccdfb2bee3e96ecb8f907876c8d143e8e44569178353c2e593e4a82c265931ba1dd79"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e0f7c08f5bd712f87094b04528fadb283d83c9ceb82a3e39ec31c19a42a1a1c3bee5613b5640abe069b0d690"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d35e63fb1f3f52ab8f7c6cd7c8247e9799042e53922fbaea808ab979fa0c096588cfea3009181d2f93002dfc11"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b8b0ab69e3ae55a8699eb481dd665b6a2424c89bc6b7cca02d15fdf1b9854139cab49d34de498b50b2c7e8b910cf"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fb65e3222a2950eae1701d4cdd4736266f65bf2c0d2e77968996eadb60ef74fb786f6234973a2524bdfe32d100aa0e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f28b4bb3a2e2c4d5c01a23ff134558559a2d3d704b75402983ee4e0f71d273ae056842c4153b18ee5c47e2bfa54313d4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7bb78794e58a53c3e4b1aeb161e756af051583d14e0a5a3205e094b7c9a8cf62d098fa9ea1db12f330a51ab9852c17f983"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a879a8ebae4d0987789bcc58ec3448e35ba1fa1ee58c668d8295aba4eaeaf2762b053a677e25404f635a53037996974d418a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "695865b353ec701ecc1cb38f3154489eed0d39829fc192bb68db286d20fa0a64235cde5639137819f7e99f86bd89afcef84a0f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a6ec25f369f71176952fb9b33305dc768589a6070463ee4c35996e1ced4964a865a5c3dc8f0d809eab71366450de702318e4834d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "604749f7bfadb069a036409ffac5ba291fa05be8cba2f141554132f56d9bcb88d1ce12f2004cd3ade1aa66a26e6ef64e327514096d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "daf9fa7dc2464a899533594e7916fc9bc585bd29dd60c930f3bfa78bc47f6c8439448043a45119fc9228c15bce5fd24f46baf9de736b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "943ea5647a8666763084da6a6f15dcf0e8dc24f27fd0d9194805d25180fe3a6d98f4b2b5e0d6a04e9b41869817030f16ae975dd41fc35c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "af4f73cbfc093760dfeb52d57ef45207bbd1a515f5523404e5d95a73c237d97ae65bd195b472de6d514c2c448b12fafc282166da132258e9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "605f4ed72ed7f5046a342fe4cf6808100d4632e610d59f7ebb016e367d0ff0a95cf45b02c727ba71f147e95212f52046804d376c918cadd260"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3750d8ab0a6b13f78e51d321dfd1aa801680e958de45b7b977d05732ee39f856b27cb2bcce8fbf3db6666d35e21244c2881fdcc27fbfea6b1672"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8f1b929e80ab752b58abe9731b7b34eb61369536995abef1c0980d93903c1880da3637d367456895f0cb4769d6de3a979e38ed6f5f6ac4d48e9b32"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d8469b7aa538b36cdc711a591d60dafecca22bd421973a70e2deef72f69d8014a6f0064eabfbebf5383cbb90f452c6e113d2110e4b1092c54a38b857"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7d1f1ad2029f4880e1898af8289c23bc933a40863cc4ab697fead79c58b6b8e25b68cf5324579b0fe879fe7a12e6d03907f0140dfe7b29d33d6109ecf1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "87a77aca6d551642288a0dff66078225ae39d288801607429d6725ca949eed7a6f199dd8a65523b4ee7cfa4187400e96597bfffc3e38ade0ae0ab88536a9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e101f43179d8e8546e5ce6a96d7556b7e6b9d4a7d00e7aade5579d085d527ce34a9329551ebcaf6ba946949bbe38e30a62ae344c1950b4bde55306b3bac432"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4324561d76c370ef35ac36a4adf8f3773a50d86504bd284f71f7ce9e2bc4c1f1d34a7fb2d67561d101955d448b67577eb30dfee96a95c7f921ef53e20be8bc44"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "78f0ed6e220b3da3cc9381563b2f72c8dc830cb0f39a48c6ae479a6a78dcfa94002631dec467e9e9b47cc8f0887eb680e340aec3ec009d4a33d241533c76c8ca8c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9f6589c31a472e0a736f4eb22b6c70a9d332cc15304ccb66a6b97cd051b6ed82f8990e1d9bee2e4bb1c3c45e550ae0e7b96e93ae23f2fb8f63b309131e72b36cba6a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c138077ee4ed3d7ffa85ba851dfdf6e9843fc1dc00889d117237bfaad9aa757192f73556b959f98e6d24886ce48869f2a01a48c371785f12b6484eb2078f08c22066e1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f83e7c9e0954a500576ea1fc90a3db2cbd7994eaef647dab5b34e88ab9dc0b47addbc807b21c8e6dd3d0bd357f008471d4f3e0abb18450e1d4919e03a34545b9643f870e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3277a11f2628544fc66f50428f1ad56bcba6ee36ba2ca6ecdf7e255effc0c30235c039d13e01f04cf1efe95b5c2033ab72adda30994b62f2851d17c9920eadca9a251752dc"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c2a834281a06fe7b730d3a03f90761daf02714c066e33fc07e1f59ac801ec2f4433486b5a2da8faa51a0cf3c34e29b2960cd0013378938dbd47c3a3d12d70db01d7d06c3e91e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "47680182924a51cabe142a6175c9253e8ba7ea579ece8d9bcb78b1e9ca00db844fa08abcf41702bd758ee2c608d9612fed50e85854469cb4ef3038acf1e35b6ba4390561d8ae82"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cec45830cd71869e83b109a99a3cd7d935f83a95de7c582f3adbd34e4938fa2f3f922f52f14f169c38cc6618d3f306a8a4d607b345b8a9c48017136fbf825aecf7b620e85f837fae"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "46fb53c70ab105079d5d78dc60eaa30d938f26e4d0b9df122e21ec85deda94744c1daf8038b8a6652d1ff3e7e15376f5abd30e564784a999f665078340d66b0e939e0c2ef03f9c08bb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7b0dcb52791a170cc52f2e8b95d8956f325c3751d3ef3b2b83b41d82d4496b46228a750d02b71a96012e56b0720949ca77dc68be9b1ef1ad6d6a5ceb86bf565cb972279039e209dddcdc"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7153fd43e6b05f5e1a4401e0fef954a737ed142ec2f60bc4daeef9ce73ea1b40a0fcaf1a1e03a3513f930dd5335723632f59f7297fe3a98b68e125eadf478eb045ed9fc4ee566d13f537f5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c7f569c79c801dab50e9d9ca6542f25774b3841e49c83efe0b89109f569509ce7887bc0d2b57b50320eb81fab9017f16c4c870e59edb6c26620d93748500231d70a36f48a7c60747ca2d5986"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0a81e0c547648595adca65623ce783411aac7f7d30c3ad269efafab288e7186f6895261972f5137877669c550f34f5128850ebb50e1884814ea1055ee29a866afd04b2087abed02d9592573428"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6a7b6769e1f1c95314b0c7fe77013567891bd23416374f23e4f43e27bc4c55cfada13b53b1581948e07fb96a50676baa2756db0988077b0f27d36ac088e0ff0fe72eda1e8eb4b8facff3218d9af0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a399474595cb1ccab6107f18e80f03b1707745c7bf769fc9f260094dc9f8bc6fe09271cb0b131ebb2acd073de4a6521c8368e664278be86be216d1622393f23435fae4fbc6a2e7c961282a777c2d75"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4f0fc590b2755a515ae6b46e9628092369d9c8e589e3239320639aa8f7aa44f8111c7c4b3fdbe6e55e036fbf5ebc9c0aa87a4e66851c11e86f6cbf0bd9eb1c98a378c7a7d3af900f55ee108b59bc9e5c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ed96a046f08dd675107331d267379c6fce3c352a9f8d7b243008a74cb4e9410836afaabe871dab6038ca94ce5f6d41fa922ce08aba58169f94cfc86d9f688f396abd24c11a6a9b0830572105a477c33e92"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "379955f539abf0eb2972ee99ed9546c4bbee363403991833005dc27904c271ef22a799bc32cb39f08d2e4ba6717d55153feb692d7c5efae70890bf29d96df02333c7b05ccc314e4835b018fec9141a82c745"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e16cc8d41b96547ede0d0cf4d908c5fa393399daa4a9696e76a4c1f6a2a9fef70f17fb53551a8145ed88f18db8fe780a079d94732437023f7c1d1849ef69ad536a76204239e8ba5d97e507c36c7d042f87fe0e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a81de50750ece3f84536728f227208bf01ec5b7721579d007de72c88ee20663318332efe5bc7c09ad1fa8342be51f0609046ccf760a7957a7d8dc88941adb93666a4521ebe76618e5ddc2dd3261493d400b50073"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b72c5fb7c7f60d243928fa41a2d711157b96aef290185c64b4de3dcfa3d644da67a8f37c2ac55caad79ec695a473e8b481f658c497edb8a191526592b11a412282d2a4010c90ef4647bd6ce745ebc9244a71d4876b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9550703877079c90e200e830f277b605624954c549e729c359ee01ee2b07741ecc4255cb37f96682dafcdbaade1063e2c5ccbd1918fb669926a67744101fb6de3ac016be4c74165a1e5a696b704ba2ebf4a953d44b95"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a17eb44d4de502dc04a80d5a5e9507d17f27c96467f24c79b06bc98a4c410741d4ac2db98ec02c2a976d788531f1a4451b6c6204cef6dae1b6ebbcd0bde23e6fffb02754043c8fd3c783d90a670b16879ce68b5554fe1c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "41d3ea1eaba5be4a206732dbb5b70b79b66a6e5908795ad4fb7cf9e67efb13f06fef8f90acb080ce082aadec6a1b543af759ab63fa6f1d3941186482b0c2b312f1151ea8386253a13ed3708093279b8eb04185636488b226"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5e7cdd8373dc42a243c96013cd29df9283b5f28bb50453a903c85e2ce57f35861bf93f03029072b70dac0804e7d51fd0c578c8d9fa619f1e9ce3d8044f65d55634dba611280c1d5cfb59c836a595c803124f696b07ddfac718"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "26a14c4aa168907cb5de0d12a82e1373a128fb21f2ed11feba108b1bebce934ad63ed89f4ed7ea5e0bc8846e4fc10142f82de0bebd39d68f7874f615c3a9c896bab34190e85df05aaa316e14820b5e478d838fa89dfc94a7fc1e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0211dfc3c35881adc170e4ba6daab1b702dff88933db9a6829a76b8f4a7c2a6d658117132a974f0a0b3a38ceea1efc2488da21905345909e1d859921dc2b5054f09bce8eeb91fa2fc6d048ce00b9cd655e6aafbdaa3a2f19270a16"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ddf015b01b68c4f5f72c3145d54049867d99ee6bef24282abf0eecdb506e295bacf8f23ffa65a4cd891f76a046b9dd82cae43a8d01e18a8dff3b50aeb92672be69d7c087ec1fa2d3b2a39196ea5b49b7baede37a586fea71aded587f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6ee721f71ca4dd5c9ce7873c5c04c6ce76a2c824b984251c15535afc96adc9a4d48ca314bfeb6b8ee65092f14cf2a7ca9614e1dcf24c2a7f0f0c11207d3d8aed4af92873b56e8b9ba2fbd659c3f4ca90fa24f113f74a37181bf0fdf758"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "689bd150e65ac123612524f720f54def78c095eaab8a87b8bcc72b443408e3227f5c8e2bd5af9bcac684d497bc3e41b7a022c28fb5458b95e8dfa2e8caccde0492936ff1902476bb7b4ef2125b19aca2cd3384d922d9f36dddbcd96ae0d6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3a3c0ef066fa4390ec76ad6be1dc9c31ddf45fef43fbfa1f49b439caa2eb9f3042253a9853e96a9cf86b4f873785a5d2c5d3b05f6501bc876e09031188e05f48937bf3c9b667d14800db62437590b84ce96aa70bb5141ee2ea41b55a6fd944"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "741ce384e5e0edaebb136701ce38b3d33215415197758ae81235307a4115777d4dab23891db530c6d28f63a957428391421f742789a0e04c99c828373d9903b64dd57f26b3a38b67df829ae243feef731ead0abfca049924667fdec49d40f665"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a513f450d66cd5a48a115aee862c65b26e836f35a5eb6894a80519e2cd96cc4cad8ed7eb922b4fc9bbc55c973089d627b1da9c3a95f6c019ef1d47143cc545b15e4244424be28199c51a5efc7234dcd94e72d229897c392af85f523c2633427825"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "71f1554d2d49bb7bd9e62e71fa049fb54a2c097032f61ebda669b3e1d4593962e47fc62a0ab5d85706aebd6a2f9a192c88aa1ee2f6a46710cf4af6d3c25b7e68ad5c3db23ac009c8f13625ff85dc8e50a9a1b2682d3329330b973ec8cbb7bb73b2bd"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "167cc1067bc08a8d2c1a0c10041ebe1fc327b37043f6bd8f1c63569e9d36ded58519e66b162f34b6d8f1107ef1e3de199d97b36b44141a1fc4f49b883f40507ff11f909a017869dc8a2357fc7336ae68703d25f75710b0ff5f9765321c0fa53a51675c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cb859b35dc70e264efaad2a809fea1e71cd4a3f924be3b5a13f8687a1166b538c40b2ad51d5c3e47b0de482497382673140f547068ff0b3b0fb7501209e1bf36082509ae85f60bb98fd02ac50d883a1a8daa704952d83c1f6da60c9624bc7c99912930bf"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "afb1f0c6b7125b04fa2578dd40f60cb411b35ebc7026c702e25b3f0ae3d4695d44cfdf37cb755691dd9c365edadf21ee44245620e6a24d4c2497135b37cd7ac67e3bd0aaee9f63f107746f9b88859ea902bc7d6895406aa2161f480cad56327d0a5bba2836"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "13e9c0522587460d90c7cb354604de8f1bf850e75b4b176bda92862d35ec810861f7d5e7ff6ba9302f2c2c8642ff8b7776a2f53665790f570fcef3cac069a90d50db42227331c4affb33d6c040d75b9aeafc9086eb83ced38bb02c759e95ba08c92b17031288"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0549812d62d3ed497307673a4806a21060987a4dbbf43d352b9b170a29240954cf04bc3e1e250476e6800b79e843a8bd8253b7d743de01ab336e978d4bea384eaff700ce020691647411b10a60acacb6f8837fb08ad666b8dcc9eaa87ccb42aef6914a3f3bc30a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3a263efbe1f2d463f20526e1d0fd735035fd3f808925f058b32c4d8788aeeab9b8ce233b3c34894731cd73361f465bd350395aebcabd2fb63010298ca025d849c1fa3cd573309b74d7f824bbfe383f09db24bcc565f636b877333206a6ad70815c3bef5574c5fc1c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3c6a7d8a84ef7e3eaa812fc1eb8e85105467230d2c9e4562edbfd808f4d1ac15d16b786cc6a02959c2bc17149c2ce74c6f85ee5ef22a8a96b9be1f197cffd214c1ab02a06a9227f37cd432579f8c28ff2b5ac91cca8ffe6240932739d56788c354e92c591e1dd76499"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b571859294b02af17541a0b5e899a5f67d6f5e36d38255bc417486e69240db56b09cf2607fbf4f95d085a779358a8a8b41f36503438c1860c8f361ce0f2783a08b21bd7232b50ca6d35428335272a5c05b436b2631d8d5c84d60e8040083768ce56a250727fb0579dd5c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "98ee1b7269d2a0dd490ca38d447279870ea55326571a1b430adbb2cf65c492131136f504145df3ab113a13abfb72c33663266b8bc9c458db4bf5d7ef03e1d3b8a99d5de0c024be8fabc8dc4f5dac82a0342d8ed65c329e7018d6997e69e29a01350516c86beaf153da65ac"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "41c5c95f088df320d35269e5bf86d10248f17aec6776f0fe653f1c356aae409788c938befeb67c86d1c8870e8099ca0ce61a80fbb5a6654c44529368f70fc9b9c2f912f5092047d0ffc339577d24142300e34948e086f62e23ecaca410d24f8a36b5c8c5a80e0926bc8aa16a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9f93c41f533b2a82a4df893c78faaaa793c1506974ba2a604cd33101713ca4adfd30819ffd8403402b8d40aff78106f3357f3e2c24312c0d3603a17184d7b999fc9908d14d50192aebabd90d05073da7af4be37dd3d81c90acc80e8333df546f17ab6874f1ec204392d1c0571e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3da5207245ac270a915fc91cdb314e5a2577c4f8e269c4e701f0d7493ba716de79935918b917a2bd5db98050dbd1eb3894b65fac5abf13e075abebc011e651c03cafb6127147771a5c8418223e1548137a89206635c26ca9c235ccc108dc25cf846e4732444bd0c2782b197b262b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "96011af3965bb941dc8f749932ea484eccb9ba94e34b39f24c1e80410f96ce1d4f6e0aa5be606def4f54301e930493d4b55d484d93ab9dd4dc2c9cfb79345363af31ad42f4bd1aa6c77b8afc9f0d551bef7570b13b927afe3e7ac4de7603a0876d5edb1ad9be05e9ee8b53941e8f59"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "51dbbf2a7ca224e524e3454fe82ddc901fafd2120fa8603bc343f129484e9600f688586e040566de0351d1693829045232d04ff31aa6b80125c763faab2a9b233313d931903dcfaba490538b06e4688a35886dc24cdd32a13875e6acf45454a8eb8a315ab95e608ad8b6a49aef0e299a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5a6a422529e22104681e8b18d64bc0463a45df19ae2633751c7aae412c250f8fb2cd5e1270d3d0cf009c8aa69688ccd4e2b6536f5747a5bc479b20c135bf4e89d33a26118705a614c6be7ecfe766932471ad4ba01c4f045b1abb5070f90ec78439a27a1788db9327d1c32f939e5fb1d5ba"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5d26c983642093cb12ff0afabd87b7c56e211d01844ad6da3f623b9f20a0c968034299f2a65e6673530c5980a532beb831c7d0697d12760445986681076dfb6fae5f3a4d8f17a0db5008ce8619f566d2cfe4cf2a6d6f9c3664e3a48564a351c0b3c945c5ee24587521e4112c57e318be1b6a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "52641dbc6e36be4d905d8d60311e303e8e859cc47901ce30d6f67f152343e3c4030e3a33463793c19effd81fb7c4d631a9479a7505a983a052b1e948ce093b30efa595fab3a00f4cef9a2f664ceeb07ec61719212d58966bca9f00a7d7a8cb4024cf6476bab7fbccee5fd4e7c3f5e2b2975aa2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a34ce135b37bf3db1c4aaa4878b4499bd2ee17b85578fcaf605d41e1826b45fdaa1b083d8235dc642787f11469a5493e36806504fe2a2063905e821475e2d5ee217057950370492f5024995e77b82aa51b4f5bd8ea24dc71e0a8a640b0592c0d80c24a726169cf0a10b40944747113d03b52708c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "46b3cdf4946e15a5334fc3244d6680f5fc132afa67bf43bfade23d0c9e0ec64e7dab76faaeca1870c05f96b7d019411d8b0873d9fed04fa5057c039d5949a4d592827f619471359d6171691cfa8a5d7cb07ef2804f6ccad4821c56d4988bea7765f660f09ef87405f0a80bcf8559efa111f2a0b419"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8b9fc21691477f11252fca050b121c5334eb4280aa11659e267297de1fec2b2294c7ccee9b59a149b9930b08bd320d3943130930a7d931b71d2f10234f4480c67f1de883d9894ada5ed5071660e221d78ae402f1f05af47761e13fec979f2671e3c63fb0ae7aa1327cf9b8313adab90794a52686bbc4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cd6598924ce847de7ff45b20ac940aa6292a8a99b56a74eddc24f2cfb45797188614a21d4e8867e23ff75afd7cd324248d58fcf1ddc73fbd115dfa8c09e62022fab540a59f87c989c12a86ded05130939f00cd2f3b512963dfe0289f0e54acad881c1027d2a0292138fdee902d67d9669c0ca1034a9456"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "594e1cd7337248704e691854af0fdb021067ddf7832b049ba7b684438c32b029eded2df2c89a6ff5f2f2c311522ae2dc6db5a815afc60637b15ec24ef9541f1550409db2a006da3affffe548a1eaee7bd114e9b805d0756c8e90c4dc33cb05226bc2b393b18d953f8730d4c7ae693159cdba758ad28964e2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1f0d292453f04406ada8be4c161b82e3cdd69099a8637659e0ee40b8f6da46005cfc6085db9804852decfbe9f7b4dda019a7112612895a144ed430a960c8b2f5458d3d56b7f427cee6358915aee7146278aed2a0296cdd929e4d21ef95a3adf8b7a6beba673cdccdbdcfb2474711732d972ad054b2dc64f38d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b65a72d4e1f9f9f75911cc46ad0806b9b18c87d105332a3fe183f45f063a746c892dc6c4b9181b1485b3e3a2cc3b453eba2d4c39d6905a774ed3fb755468beb190925ecd8e57ecb0d985125741650c6b6a1b2a3a50e93e3892c21d47ed5884eed83aa94e1602288f2f49fe286624de9d01fcb54433a0dc4ad70b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "705ce0ffa469250782aff725248fc88fe98eb76659e8407edc1c4842c9867d61fe64fb86f74e980598b92bc213d06f337bd5654fc28643c7ba769a4c31563427543c00808b627a19c90d86c322f33566ce020121cc322229c3337943d46f68ef939d613dcef0077269f88151d6398b6b009abb763410b154ad76a3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7fa881ce87498440ab6af13854f0d851a7e0404de33896999a9b3292a5d2f5b3ad033530c558168fe5d2fdb9b89a2354c46cf32a0e612afc6c6485d789511bfef26800c74bf1a4cfbe30bda310d5f6029c3dccdedb6149e4971274e276dccfabd63bc4b9955e8303feb57f8a688db55ecb4b33d1f9fe1b3a8ba7ac32"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "23a98f71c01c0408ae16843dc03be7db0aeaf055f951709d4e0dfdf64fffbffaf900ee592ee10929648e56f6c1e9f5be5793f7df66453eb56502c7c56c0f0c88da77abc8fa371e434104627ef7c663c49f40998dbad63fa6c7aa4fac17ae138d8bbe081f9bd168cd33c1fbc92fa35ed687679f48a64b87db1fe5bae675"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7b8970b6a33237e5a7bcb39272703edb92285c55842b30b9a48834b1b507cc02a6764739f2f7ee6ae02a7b715a1c455e59e8c77a1ae98abb10161853f1234d20da99016588cd8602d6b7ec7e177d4011edfa61e6b3766a3c6f8d6e9eac893c568903eb6e6aba9c4725774f6b4343b7acaa6c031593a36eef6c72806ff309"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f7f4d328ba108b7b1de4443e889a985ed52f485f3ca4e0c246aa5526590cbed344e9f4fe53e4eea0e761c82324649206ca8c2b45152157d4115e68c818644b03b65bb47ad79f94d37cb03c1d953b74c2b8adfa0e1c418bda9c518ddcd7050e0f149044740a2b16479413b63fc13c36144f80c73687513dca761ba8642a8ae0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2d7dc80c19a1d12d5fe3963569547a5d1d3e821e6f06c5d5e2c09401f946c9f7e13cd019f2f9a878b62dd850453b6294b99ccaa068e542993524b0f63832d48e865be31e8ec1ee103c718340c904b32efb69170b67f038d50a3252794b1b4076c0620621ab3d91215d55ffea99f23d54e161a90d8d4902fda5931d9f6a27146a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "77dff4c7ad30c954338c4b23639dae4b275086cbe654d401a2343528065e4c9f1f2eca22aa025d49ca823e76fdbb35df78b1e5075ff2c82b680bca385c6d57f7ea7d1030bb392527b25dd73e9eeff97bea397cf3b9dda0c817a9c870ed12c006cc054968c64000e0da874e9b7d7d621b0679866912243ea096c7b38a1344e98f74"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "83bed0d556798f2b419f7056e6d3ffada06e939b95a688d0ec8c6ac5ea45ab73a4cf01043e0a170766e21395f27ab4b78c435f5f0dfe6e93ab80df38610e41158429ddf20296f53a06a017723359fe22dc08b5da33f0800a4fe50118e8d7eab2f83a85cd764bf8a166903bd0e9dcfeeceba44ff4ca4439846458d31ea2bb564645d1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ea12cf5a113543e39504123036f15a5bafa9c555562469f99cd29996a4dfaaab2a34b00557ccf15f37fc0cc1b3be427e725f2cd952e50af7970dda9200cd5ce252b1f29c40067fea3027ed686190803b59d834179d1b8f5b55abe55ad174b2a1188f7753ec0ae2fc01316e7d498b68ee3598a0e9baaaa664a60f7fb4f90edbed494ad7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "55266358332d8d9e68bd13432088beadf95833aab67a0eb3b10650414255f299e2670c3e1a5b2976159a46c72a7ce57d59b7be14c15798e09ed50fa312a431b0264d7a1396aa6168bde897e208ece53d2cfc83786113b1e6eac5e9bb98984abb6c8d64eebb991903254abc650c999bb9958a5d7937434b869bc940e21b9dc1cc8982f2ba"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4d6104ded730aefe02873f4c741232c8234a6d66d85393aff57fbf56ba6347666988dfc4d58f3cc895a0da598822edeee4533d24ec0ee292fd5e1ad04898ffbc1ff4bef14dec220babcb0f28fffe32a6e2c28aaaac16442bf4feb02917d18bb3a415d84fa9358d5a9852688d846c92271911f934181c30f82434d915f93f155a1ffbf0b125"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "eb5f579a4c476af554aac11e5719d378549497e613b35a929d6f36bb8831d7a466aa76de9be24ebb55543f1c13924f64cfd648a5b3fa90387315c16174dbf1e9a183c196d9bb8f84af65f1f8212429aadc11ef2426d07d4716062b85c8d5d2dff8e21b9e62b7fa7dbd57d72633054b464fb28583a56ca13ccc5ddc74dae942492f31731e7046"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ebddec3dcaf18063e45a76ebeac39af85a1adc2818881ccce48c106288f5988365cca2b4b1d7f037322da46840f42bebdcbc7193838d426e101087d8cea03aaff743d573eb4f4e9a71a2c884390769a6503874125d194bee8d46a3a0d5e4fcf28ff8465887d8e9df771d70157e75df3642b331d2778ceb32ceba868640171ab7a5d22eede1ee44"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "26d87ec70b57691e3bb359633d3ddba17f029d62cdfe977f5fd42274d79b444a32494d1c01e9f72d03cce78c806df96e93ea78da3a054209924ed765edc4d570f66168dc25ee3114e4017e387440349c8f0a94804761c3055f88e4fda2a49b860b1486a9609095f6250f268b6a4d1aecc03a505632ebf0b9dc22d0755a736faf7ad7000858b5864b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3880f5cc2d08fa70ef44b1f263fcf534d062a298c1bd5ee2eee8c3265806c4ce50b004f3a1fc1fa5b024aaac7f528c023c8181f67c6e1c357425dc4d573bd46b93a542afa3a19bdb140a2ce666e1a01f5c4d2dcd681fa9f5839b797813c394738d5ee4971386c12c7c117d17c7bec324b760aa30cda9ab2aa850284ba6fa97946f710f02449d1883c6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3317d2f452105dd3f4a96f9257af8285a80be58066b50f6f54bd633749b49f6ab9d57d45652d2ae852a2f6940cd5ec3159dd7f333358b12f502325df38843508faf7e246352d201280babd90b14fbf7722641c3601d0e458474439973c611bb5502fd0eb3078f87124ca7e1a016fcb6cfeff65f6a565985aca7122cfa8c5a11da0cb47797c5132333179"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f2c5c955d0224e784a46b9125f8fef8a5e1271e145eb08bbbd07ca8e1cfc848cef14fa3b36221ac62006403dbb7f7d77958ccc54a8566c837858b809f3e310ace8ca682515bc655d2a397cab238a663b464d511f02dc5d033dad4cb5e0e519e94a54b62a3896e460ec70e5716b5921bf8396aa86a60123e6287e34570bb01bdc602e113670bf498af2ff10"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "180e275205691a83630cf4b0c7b80e6df8fad6ef1c23ba8013d2f09aef7abade1827f23af230de90676240b4b3b0673f8afdea0327330055041741f65560d90348de696d34ca80dfe8afae582fe4879d4594b80e9408fb53e800e01ca58552b905c365e7f1416e51c080f517d6bbd30e64ae1535d59decdc76c6624d737868f49f2f719da39ba1344d59eab9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c517a84e4631a7f65ace170d1e5c2fdb259841535d88da323e68c0883e6af7b041cfe05908815a5a9d1b14fa712c2c16fadcf1ca54d3aa954d411240df331b2aebdfb65aced84d0b8aace56ec0aa7c13ec7d75ca883b6bcf6db74c9e98463c484a8262684f29910373430651f90ecffe18b072170e61ee58de20e2a6ff67b3ab00fccbb80af943f20b56b98107"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d1a56a5ee990e02b84b5862fde62f69ec07567be2d7ccb769a461c4989d11fdda6c945d942fb8b2da795ed97e43a5b7dbdde7f8fd2ff7154544336d5c50fb7380341e660d4898c7fbc39b2b782f28defac6873523c7c1de8e52c65e4395c686ba483c35a220b0416d46357a063fa4c33fa9c52d5c207a1304ae141c791e62ba6a7374ed922b8dd94079b72b69302"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4720b88d6bfb1ab43958e26827730d852d9ec30173ebd0fe0d273edcece2e788558984cd9306fe5978086a5cb6d37975755d2a3daeb16f99a8a11544b8247a8b7ed5587afc5bea1daf85dcea5703c5905cf56ae7cc76408ccabb8fcc25cacc5ff456db3f62fa559c45b9c71505eb5073df1f10fc4c9060843f0cd68bbb4e8edfb48d0fd81d9c21e53b28a2aae4f7ba"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f4639b511db9e092823d47d2947efacbaae0e5b912dec3b284d2350b9262f3a51796a0cd9f8bc5a65879d6578ec24a060e293100c2e12ad82d5b2a0e9d22965858030e7cdf2ab3562bfa8ac084c6e8237aa22f54b94c4e92d69f22169ced6c85a293f5e16bfc326153bf629cdd6393675c6627cd949cd367eef02e0f54779f4d5210197698e4754a5fe490a3a7521c1c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3d9e7a860a718565e3670c29079ce80e381969fea91017cfd5952e0d8a4a79bb08e2cd1e26161f30ee03a24891d1bfa8c212861b51618d07429fb48000ff87ef09c6fca526567777e9c076d58a642d5c521b1caa5fb0fb3a4b8982dc14a444732b72b239b8f01fc8ba8ee86b3013b5d3e98a92b2aeaecd4879fca5d5e9e0bd880dbfffa6f96f94f3998812aac6a714f331"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4d9bf551d7fd531e7482e2ec875c0651b0bcc6caa738f7497befd11e67ae0e036c9d7ae4301cc3c7906f0d0e1ed4738753f414f9b3cd9b8a71176e325c4c74ce020680ecbfb146889597f5b40487e93f974cd866817fb9fb24c7c7c16177e6e120bfe349e83aa82ba40e59e917565788658a2b254f25cf99bc65070b3794cea2259eb10e42bb54852cba3110baa773dcd70c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b91f65ab5bc059bfa5b43b6ebae243b1c46826f3da061338b5af02b2da76bb5ebad2b426de3c3134a633499c7c36a120369727cb48a0c6cbab0acecdda137057159aa117a5d687c4286868f561a272e0c18966b2fec3e55d75abea818ce2d339e26adc005c2658493fe06271ad0cc33fcb25065e6a2a286af45a518aee5e2532f81ec9256f93ff2d0d41c9b9a2efdb1a2af899"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "736f6e387acb9acbee026a6080f8a9eb8dbb5d7c54ac7053ce75dd184b2cb7b942e22a3497419ddb3a04cf9e4eb9340a1a6f9474c06ee1dcfc8513979fee1fc4768087617fd424f4d65f54782c787a1d2de6efc81534343e855f20b3f3589027a5436201eee747d45b9b8375e4294d72ab6a52e04dfbb2914db92ee58f134b026527ed52d4f794459e02a43a17b0d51ea69bd7f3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9242d3eb31d26d923b99d66954cfade94f25a18912e6356810b63b971ae74bb53bc58b3c01424208ea1e0b1499936daea27e63d904f9ed65fdf69de40780a3027b2e89d94bdf214f585472613ce328f628f4f0d56217dfb53db5f7a07f54c8d71db16e27de7cdb8d23988837b49b65c12f1771d979e8b192c9f4a16b8d9fba917bcf74ce5a82aac2075608ba6c2d485fa59864b9de"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5da68704f4b592d41f08aca08f62d85e2e2466e5f3be010315d11d113db674c4b98764a509a2f5aacc7ae72c9deff2bcc42810b47f64d429b35745b9efff0b18c58653461e968aaa3c2c7fc455bc5771a8f10cd184be831040df767201ab8d32cb9a58c89afbebecb524502c9b940c1b838f8361bbcde90d272715017f67609ea39b20fac985332d82daaa023999e3f8bfa5f3758bb8"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "71ea2af9c8ac2e5ae44a176662882e01027ca3cdb41ec2c6785606a07d7231cd4a2bded7155c2feef3d44d8fd42afa73265cef826f6e03aa761c5c51d5b1f129ddc27503ff50d9c2d748322df4b13dd5cdc7d46381528ab22b79b0049011e4d2e57fe2735e0d58d8d56e92c75dbeac8c76c4239d7f3f24fb56697593b3e4afa6671d5bbc96c079a1c154fe20212ade67b05d49ceaa7a84"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1d133170582fa4bff59a21953ebbc01bc202d43cd79c083d1f5c02fa15a43a0f519e36acb710bdabac880f04bc003800641c2487930de9c03c0e0deb347fa815efca0a38c6c5de694db698743bc955581f6a945deec4ae988ef7cdf40498b77796ddea3fae0ea844891ab751c7ee20917c5a4af53cd4ebd82170078f41ada2795e6eea17593fa90cbf5290a1095e299fc7f507f360f187cd"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5ec4ac45d48fc15c72471d795066bdf8e99a483d5fdd599511b9cdc408de7c0616491b73924d0266da34a495331a935c4b8884f57d7ad8cce4cbe586875aa52482215ed39d7626cce55d50349c7767981c8bd6890f132a196184247343566fc972b86fe3c5369d6a6519e9f07942f0522b77ad01c751dcf7defe31e471a0ec00963765dd8518144a3b8c3c978ad108056516a25dbe3092e73c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0d5e74b78290c689f2b3cfea45fc9b6a84c822639cd438a7f05c07c374adced42cdc12d2a9233a4ffe80307efc1ac13cb04300e165f8d90dd01c0ea955e7657332c6e86ad6b43e78ba4c13c675aed83192d8427866fb6484e6a3071b2369a46fba9005f31232da7ffec7952f831aaaddf63e225263531c2cf387f8cc14fa856c8795137142c3a52ffa69b8e30ebc88ce3bbc227597bcc8dddd89"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a0fe36f983259921dc2fa7d89002b3066241d63bfc2448caf7e10522a35562be0bfedc3dce49cfce2e614a04d4c64cfc0ab898873a7fc26928dc1927c009d12f6f9b7a278205d3d0057604f4ac746f8b9287c3bc6b929832bf253b6586192ac43fdd29ba585dbd9059aab9c6ff6000a7867c67fec1457b733f6b620881166b8fed92bc8d84f0426002e7be7fcd6ee0abf3755e2babfe5636ca0b37"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1d29b6d8eca793bb801becf90b7d7de215b17618ec32340da4bac707cdbb58b951d5036ec02e105d83b5960e2a72002d19b7fa8e1128cc7c5049ed1f76b82a59eac6ed09e56eb73d9ade38a6739f0e07155afa6ec0d9f5cf13c4b30f5f9a465b162a9c3ba04b5a0b3363c2a63f13f2a3b57c590ec6aa7f64f4dcf7f1582d0ca157eb3b3e53b20e306b1f24e9bda87397d413f01b453ceffeca1fb1e7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6a2860c110cd0fc5a19bcaafcd30762ee10242d34739638e716bd89fd537ea4dc630e6f85d1bd88a25ad3892ca554c232c9830bd56980c9f08d378d28f7fa6fa7df4fcbf6ad98b1adfff3ec1f63310e50f920c99a5200b8e64c2c2ca249399a149942261f737d5d72da949e914c024d57c4b639cb89990fed2b38a37e5bcd24d17ca12dfcd36ce04691fd03c32f6ed5de2a2191ed7c826375ba81f78d0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7132aa291ddc9210c60dbe7eb3c19f9053f2dd74742cf57fdc5df98312adbf4710a73245de4a0c3b24e21ab8b466a77ae29d15500d5142555ef3088cbccbe685ed9119a10755148f0b9f0dbcf02b2b9bcadc8517c88346ea4e78285e9cbab122f824cc18faf53b742a87c008bb6aa47eed8e1c8709b8c2b9adb4cc4f07fb423e5830a8e503ab4f7945a2a02ab0a019b65d4fd71dc364d07bdc6e637990e3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3e664da330f2c6007bff0d5101d88288aaacd3c07913c09e871cce16e55a39fde1ce4db6b8379977c46cce08983ca686778afe0a77a41baf447854b9aa286c398c2b83c95a127b053101b6799c1638e5efd67273b2618df6ec0b96d8d040e8c1ee01a99b9b5c8fe63fea2f749e6c90d31f6fae4e1469ac09884c4fe1a8539acb313f42c941224a0e79c059e18affc2bcb6724975c436f7bf949ebdd8aef51c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7a6ea63a271eb49470f5ce77519ed61ae9b2f1be07a96855726bc3df1d0723af3a703fdfc2e739c9d31d25814daf661a23558b50982e66ee37ad880f5c8f11c8130fac8a5d0250583700d5a324894fae6d61993f6bf9327214f8674649f355b23fd634940b2c467973a839e659169c773119919f5b81ee171edb2e5f6940d7551f9e5a70625d9ea88711ad0ed8ab2da720ad358bef954456cb2d5636425717c2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c5106bbda114168c449172e49590c7eeb827fa4e1a2a7a87a3c1f721a9047d0c0a50fbf244731be1b7eb1a2ef30f5ae846a9f38f0df44f32af61b68dbdcd0226e741dfb6ef81a2503691af5e4b3171f48c59ba4ef91eba344b5b697f261df7bbbb734ca6e6daebaa4a179feb17002823281b8534d55a6531c59305f6e3fd3fa63b747bcf0deb654c392a02fe687a269effb1238f38bcaea6b208b221c45fe7fbe7"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "597716a5ebeebc4bf524c15518816f0b5dcda39cc833c3d66b6368ce39f3fd02ceba8d12072bfe6137c68d3acd50c849873150928b320b4fbc31c1456679ea1d0acaeeabf666d1f1bad3e6b9312c5cbdecf9b799d3e30b0316bed5f41245107b693366accc8b2bcef2a6be54209ffabc0bb6f93377abdcd57d1b25a89e046f16d8fd00f99d1c0cd247aafa72234386ae484510c084ee609f08aad32a005a0a5710cb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0771ffe789f4135704b6970b617bae41666bc9a6939d47bd04282e140d5a861c44cf05e0aa57190f5b02e298f1431265a365d29e3127d6fccd86ec0df600e26bcdda2d8f487d2e4b38fbb20f1667591f9b5730930788f2691b9ee1564829d1ada15fffc53e785e0c5e5dd11705a5a71e390ca66f4a592785be188fefe89b4bd085b2024b22a210cb7f4a71c2ad215f082ec63746c7367c22aedb5601f513d9f1ffc1f3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "be6556c94313739c115895a7bad2b620c0708e24f0390daa55521c31d2c6782acf41156271238885c367a57c72b4fe999c160e804ad58d8e565edbce14a2dd90e443eb80626b3eab9d7ab75d6f8a062d7ca89b7af8eb292c98eaf87ad1dfd0db103d1bb6188bd7e7a63502153cf3ce23d43b60c5782602bac8ad92fb2324f5a79453898c5de18415639ecc5c7974d3077f76fc1df5b956723bb19a624d7ea3ec13ba3d86"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4bc33729f14cd2f1dc2ff459abee8f6860dda1062845e4adab78b53c835d106bdfa35dd9e77219eaef403d4e80488ca6bd1c93dd76ef9d543fbb7c8904dccc5f71509a6214f73d0f4e467c3e038ea639b29e7fc442ee29f57117740576188ada15a739827c647a46b0271817ab235c023c30c90f2115e5c90cd8501e7b286962fc66ffc3fe7e8978746168314908a41998bd83a1eeffda9d714b864f4d490fdeb9c7a6edfa"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ab12faea205b3d3a803cf6cb32b9698c32301a1e7f7c6c23a20174c95e98b7c3cfe93fffb3c970face8f5751312a261741141b948d777b8a2ea286fe69fc8ac84d34116a4674bb09a1a0b6af90a748e511749de4697908f4acb22be08e96ebc58ab1690acf73914286c198a2b57f1dd70ea8a52325d3045b8bdfe9a09792521526b7564a2a5fcd01e291f1f8894017ce7d3e8a5dba15332fb410fcfc8d62195a48a9e7c86fc4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7d421e59a567af70594757a49809a9c22e07fe14061090b9a041875bb77933deae36c823a9b47044fa0599187c75426b6b5ed94982ab1af7882d9e952eca399ee80a8903c4bc8ebe7a0fb035b6b26a2a013536e57fa9c94b16f8c2753c9dd79fb568f638966b06da81ce87cd77ac0793b7a36c45b8687c995bf4414d28289dbee977e77bf05d931b4feaa359a397ca41be529910077c8d498e0e8fb06e8e660cc6ebf07b77a02f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0c18ab727725d62fd3a2714b7185c09faca130438eff1675b38beca7f93a6962d7b98cb300ea33067a2035cdd694348784aa2eda2f16c731eca119a050d3b3ce7d5c0fd6c234354a1da98c0642451922f670984d035f8c6f35031d6188bbeb31a95e99e21b26f6eb5e2af3c7f8eea426357b3b5f83e0029f4c4732bca366c9aa625748297f039327c276cd8d9c9bf692a47af098aa50ca97b99961bef8bc2a7a802e0b8cfdb84319"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "92d5909d18a8b2b9971cd1627b461e98a74ba377186a6a9df5bd133635250b300abccb2254cacb775df6d99f7c7d0952653c28e6909b9f9a45adce691f7adc1afffcd9b06e49f775364cc2c62825b9c1a86089080e26b57e732aac98d80d009bfe50df01b95205aa07ed8ec5c873da3b92d00d53af825aa64b3c634c5ece40bff152c331222d3453fd92e0ca17cef19ecb96a6eed4961b627aca48b12fecd091754f770d52ba861546"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "802f22e4a388e874927fef24c797408254e03910bab5bf372320207f8067f2b1ea543917d4a27df89f5bf936ba12e04302bde23119533d0976beca9e20cc16b4dbf17a2ddc44b66aba76c61ad59d5e90de02a88327ead0a8b75463a1a68e307a6e2e53ecc1986274b9ee80bc9f3140671d5285bc5fb57b281042a8978a1175900c6073fd7bd740122956602c1aa773dd2896674d0a6beab24454b107f7c847acb31a0d332b4dfc5e3f2f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3844fe65db11c92fb90bf15e2e0cd216b5b5be91604baf3b84a0ca480e41ecfaca3709b32f8c6e8761406a635b88eec91e075c48799a16ca08f295d9766d74475c47f3f2a274eae8a6ee1d191a7f37ee413a4bf42cad52acd5564a651715ae42ac2cddd52f819c692ecdef52ecb763270322cdca7bd5aef71428fa73e844568b96b43c89bf1ed42a0abf209ffad0eeec286c6f141e8af073ba4adfbbdeda253752ae36c9957dfc905b4c49"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "329377f7bf3c8d74991a7d61b0cf39baff5d485d79751b0d5ad017d23bec570fb19810105bab79ab5acb102ab972165224d4ec888ec7de5148077fa9c1bb6820e0d91ae4e2591a21fec2f820606ce4bafc1e377f8dc3a5bd1a9e2772a57abccd0b757164d768872c91d02789545ab5b203f688d71dd08522a3fd2f5bcd7df507aebf1ca27ddff0a82afb7aa9c180008f49d1325adf97d047e77238fc75f56356de4e87d8c961575c9f6362c9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f7f269929b0d71ea8eef7120e55ccba691c582dd534692abef35c0fe9dec7dae973cd9702e5ad420d278fe0e653fdcb22fdcb63148109ec7e94f2d0750b28157dd1764376ae10fdb0a4aef3b304bd82793e0595f941226a2d72abbc929f53134dc495b0d65ced409914f94c2523f3dfbbdeeac84ae247ab5d1b9ea33dce1a808885a55be1f3683b46f4be73d9b62eec2585f690056858dfc427aabf591cd276724885bcd4c00b93bb51fb7484d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ac022309aa2c4d7fb628255b8b7fb4c3e3ae64b1cb65e0de711a6def1653d95d8088871cb8905fe8ae76423604988a8f77589f3f776dc1e4b30dbe9dd262b2187db02518a132d219bd1a06ebac13132b5164b6c420b37dd2ccee7d69b3b7fa12e54f0a53b853d490a68379ea1fa2d79762830ffb71bf86aab506b51f85c4b6a41b69325c7d0c7aa85b93b7144489d213e8f33dbb879fce22849865337b620b155cb2d2d36a68832889e30194d36d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d009c2b78a8f02e5e5dbb586ef71fc324b375092e15913ca1a5bfd22d516baadb96867bee3562e77c4a4852344a1a76c30728be5e22400b4cc41711f66754c246a520498d8c24f0205b9c873748dbeb67fe1ad099ad04cf89f4b517f0aa481136d9f6de2d727df01c6aa4099da59d4382b51e25fd47c33d9842c32b62331e50794bfe8b61b3ba9de1b8b704779c6d65edff3af00f121ab4a7ea384edabe47c6d0098a48991f387ca4444135ec59d46"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c00bab36cce69899817d1425016d222d7303197ed3e3fdcac744705e7f178a1ac745968900f69299163e19b3161f3e0a4cc55aa2e4e71e0ee6ac427d1f4d14e063f68d303ddfbb18118335cfa7a6a90d99c38319ee76f7a884846a9e0b68030bf28e78bfbd56359b9368842814da42b04cb0e307d5d846dc22f049147bae31b9a956d17676a8cc348dafa3cabc2007a30e730e3894dddf9999fb8819086311f0703e141613ed6dcd7af8510e2dc435b0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c9789152a9fc29698d49ed95f09bd11b75f18a8c5615a73dbe54ae5e550027fd0ae6a8b60667040c1b12de3d1ee3f6bf061c78c951a3210effc912e19f482dd4de152063c588c44903bc11761706fd935afa040df085b08144d83d0dde32b46ab52f4fae98ac116c7ff11d7f553450c2e37b9c5f0b1dd9e0b8640a24cba6f2a5246c41f197f46e3dc8a29131c79bef3351c6e277a0a34442274d546ccd058891277473d668420f121750d19cd684267405"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "06a15a0731ce52557e368bcbaa11ef3399299e36fb9f2eda6e5726907c1d29c5c6fc581405ba48c7e2e522206a8f128d7c1c939d1132a00bd7d6366aa82724e968964eb2e373563f607dfa649590dcf5589114df69da5547fef8d1604cc4c6de1ed5783c8746918a4dd31168d6bc8784cd0c769206bd803d6ca8557b66748770402b075ef44b38157d4c0da7c6281725a2065d087b1f7b23455fa673bdeeba45b983311c44eabe9ef4b7bde3420ae9881863"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d08aacef2d7a41aec09473bd8a44f628e15addb7b9e5b77a1e09c8ab4942f379a0bfcb324d580b774666f18ae78dd36710824ff12393f059068fe4b559c53662c2b0e6c69e23785c8f32554e837ec1714bee902e60737b639dd933af4f68cb9d7de77e1f3b28e5b122891afce62b79acd5b1ab4ba411662cc77d806449e69c5a45a143b742d98ac84a0826d68433b9b700ace6cd472ba2d58a90847f42ce9c43f38ffc017db4bf40450b2eee1f4594dc740c0f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6a6058b0a498b7ea76a93c646eb9b8629f0cba4a0c726420c5f67ba9b0412cade356abdf0a4fb94384bad32ce0d5dd9e23dcaae1d6f28ff8683616b30f1392890c67b3a2c04b360893b801f127e527e4da82e239f4c878da13f4a4f1c76db07190e77ec123995168102fb274434a2d1e12913b9b5cbab4aacaad2bd89d88b3ca2b8e60dacf7c22c9379097ff60880f552e320ca3b571994f52534470feee2b39e0dadb5cd88257a3e459a4cc6f12f17b8d54e1bb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "adeced01fc5671531cbb45679f5ddd42b3a95151677b6125aaf6f5e8f82fbabaa5ecf7c3552c2458587224f0042870f178f5fca5465250e75d71352e652eeed23cdb7f915f5ebb44099b6db116ca1be45530ac8ed32b7f161d60ed4397ad3d7d649ae6bf75ca5bec891d8e595605be9764f3a03965e1fe0eaffbf212e3df4f0fa35e08ff9d0091e6d4ac4748edfe43b611085a6ffec163014655fdd839fd9e81b63b1fa8cae4ec335ec343289758e389a79ceedfae"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d014592f3a83ba40af366f137c674724916c3cdd3f6cf9d4c5c7c8d6d51ebf26e315e2c12b3546be56fb52382904046ecbd2f5b883aa4ff473de6f0c26ab862c3fa34bf3d880cc1911ce39a4088c6617c179dc5faf68a2c488bbde12d67b50f73abcfab0e3b062e68c95363e11f5f1de8ec36ed01ea21442518089045df67d346135283ad5b3fff80cf57f20876849f6db9fa139728358415a90610f69ec720fc92d8234e3e122551e9df2c644c4a2c4e3734d07de8e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c0d0c37838873ba8757d6e41b409605043bc1635edcd731219587676d94217e9f0ab44b71de25000661ce7303b7015f45e6eaa7b7ebef92b8f4a34c902c908d2172185505fa33aca5a41be83079316cdfdd430fc2c45f505f85d867e6d516f7e1bf19c001d9f43018968aab65ec031b3801399231c83ec9e622dab5629922a6b424cab938c135ff7310501c2c02971bfd2f577e25904d1a618baf0859f77f4e8b1d0cde9544e95ec52ff710c0672fdb3d891feeea2b017"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "7022e7f00902219ba97baa0e940e8ac7727f58955aa068c29680fac4a16bcd812c03eeb5adbcfe867a7f7c6b5d89f4641adb9173b76a1a8438866f9b4f640ce2aedf5f1080c890bcf515b4be4e3e512352f1e5323c62ec46cb73f3d71be8235fee55a154763f7c3f9aeb61ffd28f4cd93d3310f608e2133586bf1ab3f102de96f64c68a4668de8acb2a76a7ce0cddddc8fa3df5e9d230823da16ed9ebb402d36e38e6e018795e5a71517ecab5f9ca472b9ced8ff69d2d195"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "acaf4baf3681ab865ab9abfae41697141ead9d5e98523c2e0e1eeb6373dd15405242a3393611e19b693cabaa4e45ac866cc66663a6e898dc73095a4132d43fb78ff7166724f06562fc6c546c78f2d5087467fcfb780478ec871ac38d9516c2f62bdb66c00218747e959b24f1f1795fafe39ee4109a1f84e3f82e96436a3f8e2c74ef1a665b0daaa459c7a80757b52c905e2fb4e30c4a3f882e87bce35d70e2925a1671205c28c89886a49e045e31434abaab4a7aed077ff22c"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "84cb6ec8a2da4f6c3b15edf77f9af9e44e13d67acc17b24bd4c7a33980f37050c0301ba3aa15ad92efe842cd3ebd3636cf945bb1f199fe0682037b9dacf86f162dadabfa625239c37f8b8db9901df0e618ff56fa62a57499f7ba83baebc085eaf3dda850835520344a67e09419368d81012168e5de5ea45158397af9a5c6a1657b26f319b66f816cd2c28996547d697e8df2bb163ccb9dda4d6691dffd102a13667ab9cde60ffbfb872187d9c425a7f67c1d9fffff9276ed0aeb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6a52c9bbbba454c14540b2be58230d78ecbeb391646a0c6fcce2f789086a78364b81ae85d5396d7cfa8b46bda41e3083ec5cf7b4c47dc601c8a697df52f557defca248506dbebab25657f5a561d09625b7f4b2f0119a12beeac087efc9d350a735c35d2431c1da7dda99befb17f41a3dc4da0f00bb95366be128538ce27763d81f832fe3c1d4efc07b5b08ad8dc9e65fb5e48546664e18cb2d3bb3fe1f56fa7aae718c5e3bbdeaf70e15023f6a25b72a2d177fcfd04211d40664fe"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c3c4d3b31f1f5f9538923df3478c84fffaef411520a542da9a220ee4132eabb9d718b5076fb2f985485e8ba058330aed27ddfd3afa3db34aa60301088caec3d0053828c0c2bc87e2e61db5ea5a29f62fdad9c8b5fc5063ec4ee865e5b2e35fac0c7a835d5f57a1b1079833c25fc38fcb14311c54f8a3bd251bca19342d69e5785f9c2e43cf189d421c76c8e8db925d70fa0fae5ee3a28c4047c23a2b8a167ce53f35ced33bec822b88b06f41558c47d4fed1bfa3e21eb060df4d8ba1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8d55e92136992ba23856c1aea109766fc44772477efc932b3194af2265e433ed77d63b44d2a1cff2e8680eff120a430fe012f0f09c6201d546e13ad46fc4ce910eab27bb1569879abed2d9c37fae9f1267c2216ec5debcb20d4de58461a621e6ce8946899de81c0add44d35e27b7982a97f2a5e6314901caebe41dbba35f48bc9244ca6dca2bdde7306435892f287036df088633a070c2e385815ab3e2bfc1a47c05a5b9fe0e80dd6e38e4713a70c8f82bd32475eea8400c7bc67f59cf"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5016284e20362610fa05ca9d789cad25f6d43263787e7e085476764ce4a8908ce99b262b375e9d106170b1bec1f473d5e777e0c1896533040e39c8c1465e07907ef5860e14e4d8310013e35f12090e0bfc687474b1f15f3dd2033a0edac5246102da4deec7e188c3517d84d9c2a0a4497a4c5f82a30f1ba009e45ee6eb3ab4368c720ea6feee428ffd2c4cc52debb8d634a64176572c72368f94a66689f23f8a01218f532117af5a8060d140e7ca435a92882fcb5630ebe14a4805f1dc83"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "05456ec59b8d41bbd736727976b96b38c43827f9e16169be673ff37870c2ecd5f0d1ea1a136be4cc7b047a02a4421d484fd2a12ece418e42ee391a13a0b1df5a0162b29ab70d3fe3e04ba6ab26b37d62b7cf05a5e2f033611bf970b8e1f30e198e483e740fa9618c1e8677e07b61296b94a9787a68fba622d7653b5568f4a8628025939b0f74389ea8fced6098c065bf2a869fd8e07d705eadb53006be2abb716a3114ceb0236d7e916f037cb954cf977720855d12be76d900ca124a2a66bb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "eb6f60b83fcee77060ff346aaf6ec34d82a8af469947d3b5074cde8eb26566eb1fa039bcc707738df1e95869bd827c246e88436f0614d9834ead5392ef376105c4a9f370071cdeaaff6ca0f18b74c3a48d19a717253c49bd9009ccbfdd5728a08b7d112a2ed8dbafbbb46d7a75dc9a05e09bfde1a0a92d74a51887f9d123d7896e9f9d0057b660ed7d55454c069d3c5260411db4cdc67e7b74f680d7ac4b9dcc2f8baf72e15e6b3cafebcdf449a6436ed2c398b675f79c644747c57553bf7ea2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "187a88e88514f6c4157c1ba40b442baae1ae563a6c989277443b12a219aa484cb9fa8adbb9a29d429f50155321b15664926317477079c7060dfdaa84c1d74bba78892c34e6f21ad35208d2ae622012401696bff5cd57b6485944b3db7b9071fa5f57fbfb1085d91bb9cff5808d662cdc6c8157249478262c44b7fbc397ed42a4977b202e817717bfccc9f0467294062313f7705251ed09573f16d23429361fada259dfb300369c4198f07341b38e84d02cdb74af5de6aab1fc2026208ea7c418c0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "be31bc96606d0fab007e5caeded2f1c9f747c759777e9b6eef962bed49e45a1d4fc993e279d024915e600865ecb087b960584be18c41114d3c43f92169b9e0e1f85a0ebcd4e196376ccdc920e66103cd3b1c58407d0aafd0e003c4e341a1daddb9f4faba974362a32f35db83384b05ae8e3322d728893861afd8b1c940de5a17f691e763ce4969b6d94f67fb4a0235d100225bd8602f291388f0ca4a568748ad0d6040f1262eac2aede6cd27419bb78a394c1ffad72c262be8c3f9d9619d633e51d0"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4d83d85ca838b4518588f2a90228a4dd18f14dd5b4c012d26298a97d848abbd825d221d02cceb6e8c701b4ad00e1dee4889b5c533e4bb60f1f41a4a61ee5478be2c1b1016c30345afd7a5253668260515e70751f22c8b4022d7fe4877d7bbce90b46531507dd3e89549e7fd58ea28f4cb23d33662bd003c1345ba94cc4b06867f778957901a8c441bee0f3b12e16463a51f7e50690356971dd73a686a49fda1eae46c9d54fba262811d698025d0ee053f1c58591c3bb3cbde69de0b31549ef5b69cf10"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "cdeb07d36dc5f9a1cd717a9e9cca37a2ce93caa298eee63571f7d6c5fde2a11c666cf53cf2dcb41ca2ea2319e7230ca68e38c647905928713a13982bf47fe33d7095ebd50b2df976208920a43eb2e29b942f32467403c45cea18bf44e0f6aeb155b48a8e5c471fec972a9d62f7ae093d2758f0aaec7ca50cb4725bfa219f1a3a46ad6bde7361f445f86b94d66b8ece080e56c510250693a5d0ea0ae87b4421860b853bcf0381eae4f1bf7c5c0472a93ad18407bc88475ab8560d344a921d3e86a02da397"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a598fad52852c5d51ae3b10528fc1f722e21d44fbd42ae5acdf20e85a28532e646a223d27fd907bfd38eb8bb75175636892f8242877aab89e8c0824d368f3339ce7a82aa4e5af6db1f3b588a4d667a00f67bee37cfd2724dde06d2909fb9e58d892f4cfd2c4ca85acdf8256f5458b030a6bda151154ff2e6d7a8da90b54a2884c8a99fab5a4ac211ff23dc0975f4f592fd1b6b9dc7783bdcd2d4ca4e68d2902f2013e122cb62e2bff6b0a98ec55ba25837e21f1cfe67739b568d43e6413dab2bd1dc471e5a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "17b68c74c9fe4926e8102070916a4e381b9fe25f5973c9bd4b04ce25749fc18931f37a65a356d3f5e5a1ef125d546f4f0ea797c15fb2efea6fbfcc5739c564693d47adeb12dcb3d98a2830719b13247792cb2491dca159a28138c6cff925aca42f4fdb02e73fbd508ec49b25c60703a7595a3e8f44b155b371d525e48e7e5dc84ac7b17c52bf5e526a67e7187234a2f19f57c548c70fc0b27183df73ffa53fa58b658034c896fa791ae9a7fd2620f5e46ce84c842a6e60e9324ae4db224ffc87d9617cb85ca2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b9e4267ea39e1de1fed0579f93bb351007c9f8fcdd811053fae33f09e2753d7428f04e1a9efcd45ea701a5d87a35b3afb2e6b65365dee6ead0bbb611b7797b212ac688653f542e604a39df277f12514ddfee3b4e27b98395c2cd97a203f1f1153c50327965770802ec2c9783edc428271762b275471e7ac65ac36523df28b0d7e6e6ccc7674268a132a63411fc82c0738dbb68af003b769a0bf9e6587b36476cb465350fee13f88ea355d47ffac7b0f964f4139db11b7642cb8d75fe1bc74d859b6d9e884f75ac"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8ca704fe7208fe5f9c23110c0b3b4eee0ef632cae82bda68d8db2436ad409aa05cf159223586e1e6d8bdae9f316ea786809fbe7fe81ec61c61552d3a83cd6beaf652d1263862664df6aae321d0323440430f400f291c3efbe5d5c690b0cc6b0bf871b3933befb40bc870e2ee1ebb68025a2dcc11b68daadef6be29b5f21e440374301bde1e80dcfade4c9d681480e65ec494a6af48df232c3d51447b9d06be714949249c44c43cf73ed13ef0d533e770284e51369d94ae241a5fb2f163893071b2b4c118aeaf9eae"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4fd8dd01012bb4df82bf42e0683f998e6f52dd9c5617bae33f867d6c0b69798cead8179346d70acc941abbbdd26e3229d5651361d2252c72ff22db2938d06ff6fc29a42fdf800ae967d06479bc7bbb8e71f40b1190a4b7189ffc9a7096cdb76d40aec424e1388e1eb7ef4ac3b34f3f089da8fda7d1927f5d775c0b2801d22dd1265c973158f640cec93edfed06dc80b20ef8c496b98289d54d46ccd205951cbb0f4e7daeb866b60bacb483411e4382b6f04d472843186bd0e31fbaa93e5c901ec028efafeb45fc551a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e9ee1b22b04b321a5fdd8301627011f583887d77560fb0f35552e207561f81e38ac58a0d0aeaf832d1ee72d913720d01f75574e9a321864fe95f4d0d8f0b8db97649a53e71e940aede5c40b4b9105daa42a6fb2811b61209247534cbaf830b07abe338d75d2f5f4eb1c3cf151e9edabe2c8d5f6fff08fac1495ef48160b100d30dcb0676700bcceb28723a29980ab0766a93abb8cb3d1963007db8458ed99b689d2a7c28c788743c80e8c1239b20982c81dadd0eed6740c65fbc4ef15c7b5569cb9fc997c6550a34b3b2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ec01e3a60964360f7f23ab0b22e021815765ad706f242265ebc19a2bb9e4eac94393952dcf61aae47682671a10f9165f0b20adf83a6706bfbdcf04c6faba6114653a35584267267873291c6fe7ff5f7695243143421509502c8875aafa9e9afe5be5ef2c851c7f35d69be5d3896000ccdbbfab5c238bb34d607cfe2d55d748880545b4aa7ca61137992925189025c62654b1f20d49c3ccd75aa73ce99cd7258dabedd6480a9f5185531fc0118beb68cc0a9cd182f6973287cf9252e12be5b619f15c25b65c71b7a316ebfd"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "db51a2f84704b78414093aa93708ec5e78573595c6e3a16c9e15744fa0f98ec78a1b3ed1e16f9717c01f6cab1bff0d56367ffc516c2e33261074935e0735ccf0d018744b4d28450f9a4db0dcf7ff504d3183aa967f76a507357948da9018fc38f150db53e2df6cea14466f03792f8bc11bdb5266dd6d508cde9e12ff04305c0295de29de19d491ad86e766774bb517e7e65befb1c5e2c267f013e235d8483e177214f89978b4cdc81aa7eff8b39f2825ad3a1b6ac1424e30edd49b067d770f16e74dd7a9c3af2ad74289a676"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "00e40f30ae3746edad0f5dd03d0e640933cf3d1694804c1e1ed6399ac36611d405196ee48f129344a8512feda16a354517871322bd5d9c6a1b592933eab531923efb393ffb23d9109cbe1075cebfa5fb917b40df028a621460ff6783c798792cb1d9635b5a6f84ec13918fa302924649b5c7fcb1f7007f0d2f06e9cfd7c27491e565a96c68a0c3644f92cd8f38857258c33801c5d537a83dfe583cba59d7eec7e394199c0a2660a62fabe3ed2099d57f315a6cd8de1a4ade29d977f15d65759cff433e5ac0c182aef3761163e1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3c5ea24d0d9b618294a263f062b2414a722be4eb10dfc346a6ec3b821d7396eba61cd6ef33618b04cd087a811f299d4606820227f16000d7c839062b96d3e3f59cd1a082448d13fc8f56b3fa7fb5f66d0350aa3b72dd7c165d590282f7da2e12cfe9e60e1796122bb8c2d40fdc2997af634b9c6b127a893dfb3467909378300db3da911be1d7b616bb8e0572433e65527e15d936500a2c60e9f9909dcf22ab5e4b6700f0238c205b4a813626fac3d945bab2637fb08203044a73d20c9a3fcf7c3fc4eb7807c3276dd5f73ce89597"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9271aeeebfac46f4de85df78f1bfd36136aa8905e15835c9e1941176f71e3aa5b1b131843d40479735e23e182a2bd71f66f6149dccb7ed8c16469079dc8590bbf165374951785f4531f7e7361de62f936cfb23a2b5bdf186632e7042a0dd451fdc9b7208f923f3a5f250ae590ec348c63a16c3aacaf7379f53b5dd4152dcd40d23e683e2156e64c592ffc07e2cd6bbeebef4dd590b2f6b2bcbf08fcd111c079f5c4033adb6c17574f8756ecd87be27eff1d7c8e8d0324438d59ae171d5a17128fbcb5533d921bd044a2038a5046b33"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4e3e533d5bcb15793d1b9d0468aaee801f32fdb486b11027183553a09ddbee8213924296f2815dc61577297459e834bf1c7a53f87d43782209e589b8295219ba7073a8fff18ad647fdb474fa39e1faa69911bf83438d5f64fe52f38ce6a991f25812c8f548de7bf2fdea7e9b4782beb4011d3567184c817521a2ba0ebad75b892f7f8e35d68b099827a1b08a84ec5e8125651d6f260295684d0ab1011a9209d2bdeb75128bf5364774d7df91e0746b7b08bda9185035f4f226e7d0a1946fcaa9c607a66b185d8546aac2800e85b74e67"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "b5d89fa2d94531093365d1259cc6fe8827fea48e6374c8b9a8c4d2209c280fa5c44958a1847222a692a59e6aa2696e6cdc8a543dd89b0ce03bc293b4e78d6ef48e1839694ccd5c65661143095c705b07e3ced84a0f5959114dd89deb956ab3fac8130eb4a878278205b801ae41a29e34146192308c4e759b374757b0c3b00319bce92a1b95a4d2ee179fd6714ff96155d26f693a5bc973f84ac8b3b91e3926276297532d98b46992a3f104c08100bf1671c43134bac280c617da711e90a0100137525375ebb12802a428885ae7fce6514a"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "40e3d8048fc10650cb8a7fc2e7113e26dec34f9ca2d5129cd10a8e8e44d113d61ee48c7d003e19fd307fc6debd70feb30243f298c510ccc4418355ce143066f067ad7c6de7288c3080e7ad46a23c8d34deb55a43e652fe90444ad3c57d3ec1e1c489d63ef915a24bc74a7925a0a7b1e1523f21ca8fee78df24e3d0a68d0013423db97c280799a0618229c0f2c167289a891e5c8d6661ab21285951c31710e3b5fe55f6347fe16d9b40507948a59252efeb616df83e5c098b07d0a7247cd371daff0e50491c582503fd89f79ba94d6af9ed76"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1fa444de01dd3901e2b4684e3d7a799ffa02d85afd35fb30fe4c9d672837bee6dd8a3b8608b4bb5e589220ad5a854f46b46e41c6d57ad124a46beab4169ff69fee7e3838a6165e19dad8eb5d7bf53d4edd3cd2769daf219510a02fdd2afe0c0e1da3cd30fcd1aa88b68965586f07a25a1720fbd90a096ea30fc8e945e3637d7857c8a9c0ab4154ffb2000e57b5f9adfa4e4eaf8065bc3c2b2e75f495963325588785a6ce417dcddffd299873b15dcccca128d63cd4eeeadb64cda28099a9ad7c80d34844901f26b88b00b9aafeb2f90286d29d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fde0a0d9d813983bd1f55cf778a003a2023b34a555322ab280584537bc6bdd844d22a7d6066c18da83ec09f3d8d5a1aab4be0d5ce19b436052f6e259a4b49017a1f47f1fe2bf115d5bc8599fb216351c60dd6b1bedb2e6f4dcadf424b833501b6f099cbfad9e2290680fb69c25032b42a6274f7cb9b5c5950401354838a45f7cb77b95bf54718e2f3d3d9fb91eb2311903980277396398d9736d8e92fd838594ac8a537c6c529db5a8a4f89290e6ba6f20ac0e5ed6fef40901d0e0e8e3e502990811f9acaae555dd54eb1bcd96b513e2fe751bec"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9f8e0caec87858599f5ab29bff86da78a841a918a023a111098687ecdf2747612d3f3809d9ca400b878bd4f92c43a1004f1c17c7f19a3cd1ce449bd2b23aff551623c37dd8c0be56bf3fd857b500c2b9f9ccea62481944090a3cf3b6ee81d9af8eeb60f65ef150f9fa4d3ed6ce4762d3d4f174ee8ccd460c25cafac0ea5ec8a6a4b2f9e8c0520cb7061155e532cb65f188b01e4b9086db951f504b060c296b326b3fc1c590498ecce594f828f4a10ea416675720ae505295d38a791bd0e93f428448a8f4c1fc0af53604a9e8255384d29ae5c334e2"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "33d1e683a4c97ee6bbaa5f9df1a88cb53b7f3c157b6045d70a56fda0ccbd3a1fa1f049cd564da072b53f415bf5fb843771c1d2551fd075d33377362b2f7c0645f9723123d11975991db8a2b518f02e2c7c30342a044754290bae2c77496d755e5981f12e6b0a0174280b958bf11ed628a9062775993ced04bf752ea8d165e3ac2177d7cd1b9371c44efa98f0b3e68602a839d384eec007979f46429dafb138cbc231ad928a9f65f7d66fac77416395e8f1debaaf76ec2e4e03e8674102cd26f614739f3ec9f949033df1fb97e87c2326d65aef94ed5f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "180048f09d0b480887af7fd548a85abf605440c1ddde6afe4c30c30670233f7bf928f43b4681f59279ebbda5e8f8f2a1abefdee129e18ac60f9224e90b38b0aabd01308e0a27f41b6fb2ee07ee176ec9048c5fe33c3f7c791469c81f30e28170585b9f3e7e3c8c2e9d74370cb4518f13bf2dee048cbd98ffa32d85e43bcc64a626b40efb51ce712925fdd6fee006dc68b88004a81549d2121986dd1966084cd654a7c6686b3bae32afbd9625e09344e85cf9611ea08dfce835a2e5b3726e69ae8a76a97db60fcc539944ba4b1e8449e4d9802ae99fae86"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "13c0bc2f5eb887cd90eae426143764cf82b3545998c386007cca871890912217aa143ac4ed4ddb5a7495b704aa4de18419b8664b15bc26cfc6596a4d2ae408f98b47a566476d5802d594ba84c2f538def9d016661f6404bb2337a3932a24f6e30073a6c9c274b940c62c727242e24466084a3ea336365d71ea8fa6499c0ea8d59eea505f1126b99c795023c4963aa0d99323d0391e8701110edf551b2d3799e1063ca443f1add162156e445502ca1a052fe70c289838593b58839fc63de128a03e2bbf389e22ae0cf957fd03315ee407b096cc1cfd92dee6"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6f1eb607d679efef065df08987a1174aab41bdac8aece7726dfa65805d6fff5b3d17a672d96b770dc32165f144f0f7324822a5c87563b7cd9e37a742ae83ef245d09006d91576f435a03476f509ea2936636232f66aa7f6cdf1ac187bbd1fcb8e20f8791866e60ed96c73374c12ac16795e999b891c64507d2dbd97e5fc29fac750ad27f2937cbcd29fdafccf27ab22453834d475f6186eaf975a36fad5c8bd61c21da554e1ded46c4c39765dcf5c8f5ccfb49b6a4dc562c919d0c7d8940ec536ab2448ec3c9a9c8b0e8fd4870cad9de2577c7b0c38563f355"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dcdd993c94d3acbc555f464871a32c5da6f13b3d5bbc3e34429705e8ad2e76393fdd96a69a94acb652f5dc3c120d41187e9aa919669f727c4868013b0cb6acc165c1b7706c52248e15c3bf81eb6c147619467945c7c48fa14a73e7c3d5bec91706c567145342a026c9d97eff97ec672c5debb9df1a998083b0b0081d65c517b3e5634c95e347e781aa30ca1c8af815e2e494d844e847fdcb41622894a518dc36571123a40bfdbe8c4f4cff44d83c61dd9dcd24c464c53b395edb31efee9f3aa080e87cdc3d22d613ae84a53c9249c32c96f9a3bc4629bb126a70"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "49971f9823e63c3a72574d977953329e813b22a8387cd13f56d8ea77a5d1a8a20012632d1d8732bbcb9f756b9675aab5db927beacab7ca263e5718b8dfa7b2eed9a91bf5ed163b16139d45f7b8cc7e3f7bdda6202106f67dfb23b7c315ee3e17a09d466b1e6b13e7c7428184a979f5358667b4fa8bd40bcc8ea46058db44587a85377ac46bf155136c09ac58cb6c27f28e17028c91e7e8f74d5b500e56293b316974f02b9d9ea205d9b6ac4cfb74eb8eb0c944577fd2f41316368307beab3e327bf7dbaa0a4428836ec4e895dea635234abeaf113ceeadac33c7a3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c57a9cc958cee983599b04fe694f15fb470fcbc53e4bfcc00a27351b12d5d2434444253ad4184e87b81b738922ffd7ff1dc1e54f39c5518b49fb8fe50d63e3935f99e4bd125e8dc0ba8a17fd62de709339a43fabe15cf86d96a54010112170c340cfac4132182eed7301402bc7c8276089dec38488af145cb6222525894658f03501204b7a66aba0be1b557b28a2f652d66f7313ed825ecc4d8596c1be7420d4425b86a1a90a5b7f30d0f24e0d1aae0eb619ca457a71699e44be612a4011c597ee80b94d5507e429d7fc6af22579cd6ad642723b05ef169fade526fb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "0568a672cd1ecbaa947045b712e2ac27995392fbef8f9488f79803cbee561c212287f080eca95adb5ba42739d78e3ba667f06045d87850d3a0499358649caa257ad29f1a9c511e7054db20554d15cbb55ff854afa45cae475c729cea72ede953522031865bc02b95589ed4d9841c552a8cc94904a93ed09ed77222f6c178195056be59bc4e96a815adf534e6b466fb47e262ff79c803c157a21b6e2269c2e0abeb494113cd868d8466e82d4b2f6a28b73645853d96bc9242515d803e33294848d3fe42fdff68da53c03491636beede47ff1399dd3d54a5e914d55d7adf"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "3f19f61a4cd085796731ac9f85a75a8bce77031932c31762d87d8b8d07b8bd19ff78d6b7d1bd1e87f3a4f41aad03b6c4d17a6cbc86be55f7c8b88ada047bb04f8d49f1c34bcf81cc0f3389ad01a758fc7eeb0072aa9ad1481992bfdde82e438e75590a4423832dfbe3756e2229ea873bc3606e6d72174cb2163bf40b5d49c81009dab85ecc03e311351bbf96e32c030a2b276a7698cb25bc2c967acb3213161a1fdde7d912cd6a804490f8056c47da1333f6e35c41e749c2c23919cb9af5eec5652e6e072b034fb1682e9aaa194a9c0bd456ea0b008d14dbce37967a7a8e"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "705f98f632d99d3651793825c38dc4deda56c59eac539da6a0159c83131cf8ab6f2ee0c3b74111fde351f7aa1a8c500a0cecab17c212d2c58ca09eae608c8eefc922b9902ef8d6832f799ba48c3c28aa702b3242107edeba01daafe424406a3822965056cfe8783455a671e93b1e2eae2321364f1871471c82124df33bc09e1b52882bd7e1c4c7d0b2f3dd4a28c2a002a43246768af0700f9659de99d62167be93177aabf19d678e79e9c726ac510d94e74873eda99620a3961930cd91937c88a06d8153d64fd60da7ca38cf26d1d4f04a0df273f52127c53fdc593f0f8df9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ea6f8e977c954657b45f25480ff42c36c7a10c77caa26eb1c907062e24fbca5aebc65cacca0de10abea8c78322f08672e13d8ac16996eca1aa17402eaea4c1cc6c800b22dc18cb8d620192d74bac02c07b5cfa61e513c7f28b7e29b9700e0e442720bf4c669d4995da19d19f841d9eb68cc74153592591e3bf059ef616b95305aa453b32fe99a91afb35bd482cf2b7aa42702837a53be3c38883d2963020e347556f841254ec6b85854485fe8c520b05f2ea67a9bf3981555c20991e2bacd4db5b418228b6002d8d41c025cb472bf5443aaa885974a408ea7f2e3f932c600deb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "408190134ed06556811b1af808ab2d986aff152a28de2c41a2207c0ccc18125ac20f48384de89ea7c80cda1da14e60cc1599943646b4c0082bbcda2d9fa55a13e9df2934edf15eb4fd41f25fa3dd706ab6de522ed351b106321e494e7a27d5f7caf44ec6fadf1122d227eefc0f57aefc140d2c63d07dcbfd65790b1099745ed042cfd1548242076b98e616b76ff0d53db5179df8dd62c06a36a8b9e95a671e2a9b9dd3fb187a31ae5828d218ec5851913e0b52e2532bd4bf9e7b349f32de2b6d5d3cdf9f372d49617b6220c93c05962327e99a0480488443349f0fd54c1860f7c8"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "5f9e5c6f38573a85010a9d84d33f29c057003b2645e3ea6f72cbc7af95d197ce6a06b13fea81722853e6991791b8b15091cd066f5ed913592ed3d3af5370d39ba22beeb2a582a414b16824b77e194a094c2afdcc09aa73ce36f4943cca5ae32c5017dc398801dd92a47382d9327c9f6cffd38ca4167cd836f7855fc5ff048d8efba378cdde224905a0425e6b1de061fc951c5e624a5153b008ad41160a710b3ff2081748d5e02deb9f841f4fc6cf4a15153dd4fe874fd447482696283e79ee0e6bc8c1c0409baa5ab02c5209c319e3169b2476149c0c6e541c6197ca46e004eef533"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "218c6b3508aec69574f2b5039b30b942b72a8349d05f48ff945bbbe5c8957d5a6199492a6bf54bab821c9377e2edfa4c908384664d2c80112d5e805d66e0a551b941021be17dd20bd825bea9a3b6afb1b8c605805b3bda58750f03ea5c953a698494b425d8980c69f34d1c3f6b5866e8717031152a127215c256e08873c21b0f5cc85875d0f7c94601659150c04cd5fe5d381ba29983a2d94fcd3a65a94c53c7279cd000dddd4253d8cff8d7f6ace10247fe3bc30d63ba4bb54f557b3d22a3924369430d71ab37b701e9500bda70b5a643704858beed4726a889b6c9c91584194c68f1"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "dac26aa7273fc25d6e044c79fc2bfa46e59892a42bbca59a86826c91e76ab03e4bd9f7c0b5f08d1931d88b36ea77d94f7ba67cd4f1d3086e529427201119096ae066ae6f170940830ed7900de7bb9d66e09788287403a4ecc93c6da975d2fb08e918840a236c15f5d3a8f7375c2eeebbf6f01a6e7f29ca2b8d42df158414c320777433663c59fdcd1f39ca68e3473db721be7ce8c6dba5fddc024f94fedb286b0477581d451313ca8c737484daf60d67f9b2d56d4bcc271f7e9ae958c7f258efbc74d25753e0516f28282461941bf2dcc7dd8c7df6173b89760cefcac07190243ff863fb"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "c46e6512e6797cc7a54254a1b26b2de29aa83d6c4b1ea5a2786fbcec388270625b12635eae39e1fba013f8a65219421bca8b52a8ddfd431cda60299bdf160734d5a7450ec79620058522702174ae451b9bfa7c4a455fbbee3e1d048c7d4bac5131018228f137c8e130440c7059b4f15eaa34ce872a851a16ce86f982df78a00be4d564da2003a450ddee9ab43ea876b8b4b65c84f0b39265fd5456417afb5bc54997c986e66fc222f2123ba5e719c4d6b9a177b188277df384f1125821cf19d5248cef0be183ccdc84ac194506f740ed2188b2689ea4c9236a9e9e3a2fff85b6af4e9b49a3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1ccd4d278d67b65cf2564ecd4de1b55fe07adc80e1f735fe2f08ea53fd3977323689122c29c798957abaff6aba09bdcbf661d77f4dc8913ab1fe2bef38846166e3834785e7105d746484eff8c656af5d8c7854abc1c62b7fadb65521dc6f793d978bda9838eb3800417d32e8a24d8c8cb1d18a5de6ca79d9e1b0ff9aa25e6218fe944cf18666fecc1e31334b390260dbe0997539e1b02f6366b2aea4f4a21efe04f4b97568fcb39e59919d5ebac6543d5d0f48fc66b923c34aac377dc95c20329b837b6ed5e8d9a3d2089cd0d8f025658006ff41cbdaccca618822ca590ab155253f8bc1c7f5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "9875209588395ee3c9fdd793fd48717cc84c8c3ea622b2ccc4a1be4448e6034b7810569855255031f10be5ffd714b05f9ce01972d712d40abf03d4d0ce175813a7a668f761324996093fc2aa5912f7fc2abdadd8775d2b4d9ad492216293381460ed8f6db3d641d1525f4242c348bbfe504c704f215dc461de51b5c75c1aae967936963848f16c673eca5e78dfd47eb19001d52d1bcf96c98956dad5ddf594a5da757e7ca35f2f69803b784e66ac5a58b75c228b8266ec592505e5d1ca87d81225738855f15bc0914677e81593fd409e77d159f8a908f67788de9eb06c5561547aada96c47c535"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "40c90e375e366f3756d89091eb3eed9fe0fbfc5638700af4617d358812bac53124a2205dd6756456787d49cd6a35e302479a0992288f47532e4ea7ab62fc5ad5adc690a5d9a446f7e035ad4641bd8dae83946aee3338ec984ccb5cc633e1409f2531eeffe05532a8b0062ba99454c9aeabf8ecb94db195af7032bfebc22912f49d39330add47ff8fa5720612d697f0b602738930e060a1bb214efc5e292224cf34e29deaea6b1b1ff847e94ecc997325ac38df61db45d82bf0e74a664d2fe085c20b04c39e90d6a170b68d2f1d373f00c731c524456ada73d659aaac9df3191a7a3865083343fc13"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "e8800d82e072210ca6d7fa2472028974780b76aad4bcb9ad362422dd05ae3232668251d164daa375a43b26a38cce28dbeb3dee1a4a579f70d0fe7febb29b5ece8aa836e050fb3d188c63aa9c3c0da6c717d86458a6096b5effceb964efdec7035960c09ccd10dea3c5f1c7f9f478d5887ebbe2e15c5ff85dbacbc444bb951c4eec7abecb89ed80187e409e2972ffe1a5f01562af109f2cf09471cf72cf83a3bb8f4e2ef38ed0e326b698296394e5b2718a5000c01425708e8ad0461e62462d8819c2377f13ab1be2c7c9f33dc06fe23cad27b87569f2ce2e56e4b2c60c7b1b3d370841d89ebdc1f192"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "796d6d1447d5b7e8c55cd8b2f8b7010db39f27565f907e3fc0e464ea2d4bb52b37f10e7c6dcfc59231b9cdee12c32aeb4adbc42b86e86eb6defb5b69e6ca75e1f4d0dae3e124e5a1b8b6697f7e10b0403f1f0a5ff848eef3752837a9ba17780f16a9a709188a8d5b89a2fa74adb2e651163b1c2b3d261e225c9158dcd9eb7ac3d6704cee290cdff6bcb3cb90cee030aa0d19d4693655c3c30ac6fc06d2ae37787c47126d57ed9a6bef5f8a6c56859aefc08755739a95aac57a4dd916a92ba9f3afbf969df8085949615033365c751a9a3e1a18cee98a69d22e64009bebf8307169b6c61de0617ecfafdf"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "4f9057183566153cf337b07c3f5556006de54c56b2a1e5326c07aaeabd1886ec6f1641358925db232b2f0dbf75229c796a7395b2f934c1f99090bec1123f3c841b1cb3c5b1ec42ed5408f2940f0c48a9470b852c46d6557853d459cecd2c32bbcd8ee21fa11e385eef0857cba4d8545a61b52a484cdd779db4739fbc7aa9860dcabe0488b98fa0b60c3f7d6153db279000a52ffb573dab37d2ab1896a90e5deb7ac6bbe56239085c325d83a917dc6e8a448425b718c2356b9f3066163555ec444f372e184e02c8c4c69b1c1c2ae2b51e45b98f73d933d18750968945ca85d6bbb22014b4c4015262e3c40d"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "79dcca7d8b81a61359e4aece21f3df7b99518ce70bd2f57a18bab5e7114af2add0a0cea7f319d69f231f060e0a539d9a23fb3e95451ce8c6340cfb09edf931df84203a39226dd9eb278f11b691ef612585b973daab373e65d11325898badf6732100371fd759960fa8fec373268421d28bffdb9b12a430b92fe4b07566ca0c89e616e49f8fc75ccd9cdc66db820d7c02e109aa5ed86b89770262918a518f90a2292f6b68d68ae03992e4259a17a23c84ec2a417f082b5abf3a26e44d2278ecb8ba9456965303a75f25394d1aaf5544590e74b14d8a4cc4050be2b0ebcfe4d2db6b12a02c68a3bcdda70301f3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "848755dc31e25e9a42f9ec12d847d19f292c14c162c9aba49e972cb123b58b8e57bb263a923929833373858594ff52dbc298dbbc078599194e4c07b0e5fc1e10808bbacdb6e93c72b333685cf961f28eb0d5a395c63266b01f130d25db384b356e5da6d01042fc2359581b89c63b3bb2d1ce897fbc9e83fe85d9666cb60e6a8c657f70caad5387b8a045bf91095606802c8424ea8ac52ef29386dc46183378a5fcb2cb927428b8c070f1c42aafd3bc70ca25437807696a46873cfeb7b80ba2ebc3c4272443d445e46343a1465253a9eebd532a0d1d2c18264b91ff45159f245404ae9335f2af55c802772426b4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ecaa6e999ef355a0768730edb835db411829a3764f79d764bb5682af6d00f51b313e017b83fffe2e332cd4a3de0a81d6a52084d5748346a1f81eb9b183ff6d93d05edc00e938d001c90872dfe234e8dd085f639af168af4a07e18f1c56ca6c7c1addffc4a70eb4660666dda0321636c3f83479ad3b64e23d749620413a2ecdcc52ad4e6e63f2b817ce99c15b5d2da3792721d7158297cce65e0c04fe810d7e2434b969e4c7892b3840623e153576356e9a696fd9e7a801c25de621a7849da3f99158d3d09bf039f43c510c8ffb00fa3e9a3c12d2c8062dd25b8dabe53d8581e30427e81c3dfc2d455352487e1255"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "23a3fe80e3636313fdf922a1359514d9f31775e1adf24285e8001c04dbce866df055edf25b506e18953492a173ba5aa0c1ec758123406a97025ba9b6b7a97eb14734424d1a7841ec0eaeba0051d6e9734263bea1af9895a3b8c83d8c854da2ae7832bdd7c285b73f8113c3821cced38b3656b4e6369a9f8327cd368f04128f1d78b6b4260f55995277feffa15e34532cd0306c1f47354667c17018ee012a791af2dbbc7afc92c388008c601740cccbbe66f1eb06ea657e9d478066c2bd2093ab62cd94abadc002722f50968e8acf361658fc64f50685a5b1b004888b3b4f64a4ddb67bec7e4ac64c9ee8deeda896b9"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "758f3567cd992228386a1c01930f7c52a9dcce28fdc1aaa54b0fed97d9a54f1df805f31bac12d559e90a2063cd7df8311a148f6904f78c5440f75e49877c0c0855d59c7f7ee52837e6ef3e54a568a7b38a0d5b896e298c8e46a56d24d8cabda8aeff85a622a3e7c87483ba921f34156defd185f608e2241224286e38121a162c2ba7604f68484717196f6628861a948180e8f06c6cc1ec66d032cf8d16da039cd74277cde31e535bc1692a44046e16881c954af3cd91dc49b443a3680e4bc42a954a46ebd1368b1398edd7580f935514b15c7fbfa9b40048a35122283af731f5e460aa85b66e65f49a9d158699bd2870"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fe511e86971cea2b6af91b2afa898d9b067fa71780790bb409189f5debe719f405e16acf7c4306a6e6ac5cd535290efe088943b9e6c5d25bfc508023c1b105d20d57252fee8cdbddb4d34a6ec2f72e8d55be55afcafd2e922ab8c31888bec4e816d04f0b2cd23df6e04720969c5152b3563c6da37e4608554cc7b8715bc10aba6a2e3b6fbcd35408df0dd73a9076bfad32b741fcdb0edfb563b3f753508b9b26f0a91673255f9bcda2b9a120f6bfa0632b6551ca517d846a747b66ebda1b2170891ece94c19ce8bf682cc94afdf0053fba4e4f0530935c07cdd6f879c999a8c4328ef6d3e0a37974a230ada83910604337"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "a6024f5b959698c0de45f4f29e1803f99dc8112989c536e5a1337e281bc856ff721e986de183d7b0ea9eb61166830ae5d6d6bc857dc833ff189b52889b8e2bd3f35b4937624d9b36dc5f19db44f0772508029784c7dac9568d28609058bc437e2f79f95b12307d8a8fb042d7fd6ee910a9e8df609ede3283f958ba918a9925a0b1d0f9f9f232062315f28a52cbd60e71c09d83e0f6600f508f0ae8ad7642c080ffc618fcd2314e26f67f1529342569f6df37017f7e3b2dac32ad88d56d175ab22205ee7e3ee94720d76933a21132e110fefbb0689a3adbaa4c685f43652136d09b3a359b5c671e38f11915cb5612db2ae294"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "af6de0e227bd78494acb559ddf34d8a7d55a03912384831be21c38376f39cda8a864aff7a48aed758f6bdf777779a669068a75ce82a06f6b3325c855ed83daf5513a078a61f7dc6c1622a633367e5f3a33e765c8ec5d8d54f48494006fdbf8922063e5340013e312871b7f8f8e5ea439c0d4cb78e2f19dd11f010729b692c65dd0d347f0ce53de9d849224666ea2f6487f1c6f953e8f9dbfd3d6de291c3e9d045e633cfd83c89d2f2327d0b2f31f72ac1604a3db1febc5f22cad08153278047210cc2894582c251a014c652e3951593e70e52a5d7451be8924b64f85c8247dab6268d24710b39fc1c07b4ac829fbda34ed79b5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "d7314e8b1ff82100b8f5870da62b61c31ab37ace9e6a7b6f7d294571523783c1fdedcbc00dd487dd6f848c34aab493507d07071b5eb59d1a2346068c7f356755fbde3d2cab67514f8c3a12d6ff9f96a977a9ac9263491bd33122a904da5386b943d35a6ba383932df07f259b6b45f69e9b27b4ca124fb3ae143d709853eed86690bc2754d5f8865c355a44b5279d8eb31cdc00f7407fb5f5b34edc57fc7ace943565da2222dc80632ccf42f2f125ceb19714ea964c2e50603c9f8960c3f27c2ed0e18a559931c4352bd7422109a28c5e145003f55c9b7c664fdc985168868950396eaf6fefc7b73d815c1aca721d7c67da632925"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2928b55c0e4d0f5cb4b60af59e9a702e3d616a8cf427c8bb03981fb8c29026d8f7d89161f36c11654f9a5e8ccb703595a58d671ecdc22c6a784abe363158682be4643002a7da5c9d268a30ea9a8d4cc24f562ab59f55c2b43af7dbcecc7e5ebe7494e82d74145a1e7d442125eb0431c5ea0939b27afa47f8ca97849f341f707660c7fbe49b7a0712fbcb6f7562ae2961425f27c7779c7534ecdeb8047ff3cb89a25159f3e1cefe42f9ef16426241f2c4d62c11d7ac43c4500dfcd184436bb4ef33260366f875230f26d81613c334dbda4736ba9d1d2966502914ec01bbe72d885606ec11da7a2cb01b29d35eebedbb0ecc73ed6c35"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "fd993f50e8a68c7b2c7f87511ce65b93c0aa94dcbdf2c9cca93816f0f3b2ab34c62c586fc507b4900a34cf9d0517e0fe10a89d154c5419c1f5e38de00e8834fe3dc1032abdeb10729a81655a69a12856a78ca6e12110580de879b086fd6608726541cfa9616326bdd36064bc0d1e5f9c93b41278bff6a13b2494b81e238c0c45aea1b07d855e8f3fe1478e373bd9d3957cf8a5e5b9003386793d994c7c575cff2322e2428cbbaa4f47560316ae3354a7478842ff7cc5dcbacb6e871e72b36f06d63a9aaeb9044cfb7974afdc238a5816f537dcf33ee40b4e1a5eb3cff2402b46d548264e133008d284f11b7e4e450bc3c5ff9f79b9c4"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "8df21892f5fc303b0de4adef1970186db6fe71bb3ea3094922e13afcfabf1d0be009f36d6f6310c5f9fda51f1a946507a055b645c296370440e5e83d8e906a2fb51f2b42de8856a81a4f28a73a8825c68ea08e5e366730bce8047011cb7d6d9be8c6f4211308fad21856284d5bc47d199988e0abf5badf8693ceeed0a2d98e8ae94b7775a42925edb1f697ffbd8e806af23145054a85e071819cca4cd48875290ca65e5ee72a9a54ff9f19c10ef4adaf8d04c9a9afcc73853fc128bbebc61f78702787c966ca6e1b1a0e4dab646acdfcd3c6bf3e5cfbec5ebe3e06c8abaa1de56e48421d87c46b5c78030afcafd91f27e7d7c85eb4872b"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "48ec6ec520f8e593d7b3f653eb15553de246723b81a6d0c3221aaa42a37420fba98a23796338dff5f845dce6d5a449be5ecc1887356619270461087e08d05fb60433a83d7bd00c002b09ea210b428965124b9b27d9105a71c826c1a2491cfd60e4cfa86c2da0c7100a8dc1c3f2f94b280d54e01e043acf0e966200d9fa8a41daf3b9382820786c75cadbb8841a1b2be5b6cbeb64878e4a231ae063a99b4e2308960ef0c8e2a16bb3545cc43bdf171493fb89a84f47e7973dc60cf75aeeca71e0a7ebe17d161d4fb9fe009941cc438f16a5bae6c99fcad08cac486eb2a48060b023d8730bf1d82fe60a2f036e6f52a5bff95f43bbe088933f"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "f4d84ed3e564c102600a795eaa9b1eaf4ad12f1a4deca1d042a0a2750ddf6201db03073d8bf553cb9dde48a1b0083827a609f7242b86584cc180964ae794b12ce55661e00e36a6ba4dbc389e6a5a85f1b45df9af7ead1b0a54db56e68639b9d438a91504e82c35d40c7bc7e048a53ac0b04accd0dadf4ac9884b0ca0e3cb5ba4336e3581be4c4760a553823ffa283a1120d4e145af56a59f2533903650f0b9e9ad9fe2e8a3c3c3dd03a1fcb709032c8835324839c735b0c051d0cbd8b5d867617c11023432e4bd275d3d0eb98a0b6cf58071a5b712922f2bc751ac7c2588c447444cde2f37a8ea5ec126425bf517e0d17c9e2999f52fee14b3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2ccea21bac9c2b70d3923309cbf2d7cb7abd1fcc8b8b002688870a80029c62397350c3c898194e5deea360bb963d26d485cb7963f8167586976ec0556950b2e86135f4a2800991ce8473bfd44a3c5e937a48b5e355ba5141bccf2131a83988d9d2a9e8e7635a956105b3512c05ef708139ced51d7a4e204c12d8a49a21e8dc6de2629a2fd092326885d9f218745fe09f6d91fb6afce250a30a63689534b6be1f26899ffa3767d835cf586aa47776700f94241bc999b1e3deefe188f37ff734f5f16ee6a00914323dc7b8a143c9137cdcc5cd08ae9566f04bb2941532674c97dff6ffa5ce3405ef8e5d27ec403114253dd6394c0167d72a0044c5"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "2b681c6398aee63bf862770341648bbcd31d7de7903c5903fe3d9469311320bb24d914f2af0cdca199c97214c7c679dc32a2800ba484a03c010ea6be3bb9f2c87e30a98b606050b8a3f297f12b8f92caaeceb3e844652115934874e0a1ab093a73d759b53f6a6c3096940dd22c2bb96ce6820a7b9c6d71a208de9892aa6a7209b0fff56a0cafea52b952cdd6f5752cff3309d448800b4e4c878aa595595b56b12b83fcd6ca89520c7da664e449d7b4438fc455888aad5de0fad9a06eed14afd3513b5ebbffe01775549b701181bd26370764f56eba52fdb24286ad1ac0f5418a7c429f7dfc7f3168437fa8eed7a2ed7c723a485e4c3ed14dea2e07"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "aadfd505a89f4aade2c3018258a7e039401b1fc6a7f3d87910dddbb880d372ec8a13c70d92245de5b8e5f9a285c33b99dc82fa2b22decee72b93a72211656ad7a52696c8e570f78be28c0e427a371dafde856e8d5ed24f83b0660b51e7fac05d93a8666dfde6def59af863f80f3e5f6801182c87422203df390dcb736b8f830052a8832eeeb0b4e27e732aaf793d166b5a3ec7745aeef3766937c2b75a276bddd145f6010c29d035e343e267cb2d828436876ec3a7ebe3b6347d4172f7a99d6821ce152e039e53deb33340b324c7f068ffb94b3cde35a8eaa12d15c3806a7ad0acec3e8c7078c1d32a28fd3eec9f32cb86e4c22166ff69e83785e851"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1605b8cce529a9d6262fd4390d9e4ae5e14e0adc0ec89b028ef68dd0f373ea259aaa96f2967091dd0874c0105385e9e6da9ca68297c31afa44ef834535fb302ce5b4e49edacbbdf359fe1228a8172495b3e57014c27edd58b685110980056c50c398a64f4923f2d720b4df16d75cb36b4233660694182099c35028a972519c24764fc94e18e582b24deb3491535fc06b83837c7958522800e822201d694af0bd0aa3834e17d4b1ba36f470905ae5f8bbeeb6c4c8604d8af02baa347b07086d6989867ddd5e8e8ed7740c3469bfa2810519c55c6add1332c4c54ee9097961d6741cb12a09713a0d07645f784f42f5ad94b48b836b34263130b0483f15e3"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "ff9c6125b2f60bfd6c2427b279df070e430075096647599bdc68c531152c58e13858b82385d78c856092d6c74106e87ccf51ac7e673936332d9b223444eaa0e762ee258d8a733d3a515ec68ed73285e5ca183ae3278b4820b0ab2797feb1e7d8cc864df585dfb5ebe02a993325a9ad5e2d7d49d3132cf66013898351d044e0fe908ccdfeeebf651983601e3673a1f92d36510c0cc19b2e75856db8e4a41f92a51efa66d6cc22e414944c2c34a5a89ccde0be76f51410824e330d8e7c613194338c93732e8aea651fca18bcf1ac1824340c5553aff1e58d4ab8d7c8842b4712021e517cd6c140f6743c69c7bee05b10a8f24050a8caa4f96d1664909c5a06"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "6e85c2f8e1fdc3aaeb969da1258cb504bbf0070cd03d23b3fb5ee08feea5ee2e0ee1c71a5d0f4f701b351f4e4b4d74cb1e2ae6184814f77b62d2f08134b7236ebf6b67d8a6c9f01b4248b30667c555f5d8646dbfe291151b23c9c9857e33a4d5c847be29a5ee7b402e03bac02d1a4319acc0dd8f25e9c7a266f5e5c896cc11b5b238df96a0963ae806cb277abc515c298a3e61a3036b177acf87a56ca4478c4c6d0d468913de602ec891318bbaf52c97a77c35c5b7d164816cf24e4c4b0b5f45853882f716d61eb947a45ce2efa78f1c70a918512af1ad536cbe6148083385b34e207f5f690d7a954021e4b5f4258a385fd8a87809a481f34202af4caccb82"
+},
+{
+    "hash": "blake2xb",
+    "in": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff",
+    "key": "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f",
+    "out": "1e9b2c454e9de3a2d723d850331037dbf54133dbe27488ff757dd255833a27d8eb8a128ad12d0978b6884e25737086a704fb289aaaccf930d5b582ab4df1f55f0c429b6875edec3fe45464fa74164be056a55e243c4222c586bec5b18f39036aa903d98180f24f83d09a454dfa1e03a60e6a3ba4613e99c35f874d790174ee48a557f4f021ade4d1b278d7997ef094569b37b3db0505951e9ee8400adaea275c6db51b325ee730c69df97745b556ae41cd98741e28aa3a49544541eeb3da1b1e8fa4e8e9100d66dd0c7f5e2c271b1ecc077de79c462b9fe4c273543ecd82a5bea63c5acc01eca5fb780c7d7c8c9fe208ae8bd50cad1769693d92c6c8649d20d8"
+}
+]
