aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Gierlings <[email protected]>2016-10-08 20:45:53 +0200
committerMatthias Gierlings <[email protected]>2016-11-11 12:52:26 +0100
commit8b06b4fe5fbe189c7d5250becb189bf2b87b9013 (patch)
treec73fbb3bf4eddcddf1d3f37983799d80204e8f2c
parent618f890fd7ede74c728612ca8bc590c72ee353f1 (diff)
Added Extended Hash-Based Signatures (XMSS)
[1] XMSS: Extended Hash-Based Signatures, draft-itrf-cfrg-xmss-hash-based-signatures-06 Release: July 2016. https://datatracker.ietf.org/doc/ draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1 Provides XMSS_PublicKey and XMSS_PrivateKey classes as well as implementations for the Botan interfaces PK_Ops::Signature and PK_Ops::Verification. XMSS has been integrated into the Botan test bench, signature generation and verification can be tested independently by invoking "botan-test xmss_sign" and "botan-test xmss_verify" - Some headers that are not required to be exposed to users of the library have to be declared as public in `info.txt`. Declaring those headers private will cause the amalgamation build to fail. The following headers have been declared public inside `info.txt`, even though they are only intended for internal use: * atomic.h * xmss_hash.h * xmss_index_registry.h * xmss_address.h * xmss_common_ops.h * xmss_tools.h * xmss_wots_parameters.h * xmss_wots_privatekey.h * xmss_wots_publickey.h - XMSS_Verification_Operation Requires the "randomness" parameter out of the XMSS signature. "Randomness" is part of the prefix that is hashed *before* the message. Since the signature is unknown till sign() is called, all message content has to be buffered. For large messages this can be inconvenient or impossible. **Possible solution**: Change PK_Ops::Verification interface to take the signature as constructor argument, and provide a setter method to be able to update reuse the instance on multiple signatures. Make sign a parameterless member call. This solution requires interface changes in botan. **Suggested workaround** for signing large messages is to not sign the message itself, but to precompute the message hash manually using Botan::HashFunctio and sign the message hash instead of the message itself. - Some of the available test vectors for the XMSS signature verification have been commented out in order to reduce testbench runtime.
-rw-r--r--src/build-data/policy/bsi.txt1
-rw-r--r--src/lib/asn1/oids.cpp4
-rw-r--r--src/lib/pubkey/pk_algs.cpp22
-rw-r--r--src/lib/pubkey/xmss/atomic.h51
-rw-r--r--src/lib/pubkey/xmss/info.txt46
-rw-r--r--src/lib/pubkey/xmss/xmss.h15
-rw-r--r--src/lib/pubkey/xmss/xmss_address.h409
-rw-r--r--src/lib/pubkey/xmss/xmss_common_ops.cpp70
-rw-r--r--src/lib/pubkey/xmss/xmss_common_ops.h75
-rw-r--r--src/lib/pubkey/xmss/xmss_hash.cpp88
-rw-r--r--src/lib/pubkey/xmss/xmss_hash.h166
-rw-r--r--src/lib/pubkey/xmss/xmss_index_registry.cpp82
-rw-r--r--src/lib/pubkey/xmss/xmss_index_registry.h109
-rw-r--r--src/lib/pubkey/xmss/xmss_key_pair.h52
-rw-r--r--src/lib/pubkey/xmss/xmss_parameters.cpp179
-rw-r--r--src/lib/pubkey/xmss/xmss_parameters.h125
-rw-r--r--src/lib/pubkey/xmss/xmss_privatekey.cpp188
-rw-r--r--src/lib/pubkey/xmss/xmss_privatekey.h258
-rw-r--r--src/lib/pubkey/xmss/xmss_publickey.cpp93
-rw-r--r--src/lib/pubkey/xmss/xmss_publickey.h273
-rw-r--r--src/lib/pubkey/xmss/xmss_signature.cpp96
-rw-r--r--src/lib/pubkey/xmss/xmss_signature.h128
-rw-r--r--src/lib/pubkey/xmss/xmss_signature_operation.cpp112
-rw-r--r--src/lib/pubkey/xmss/xmss_signature_operation.h107
-rw-r--r--src/lib/pubkey/xmss/xmss_tools.cpp32
-rw-r--r--src/lib/pubkey/xmss/xmss_tools.h111
-rw-r--r--src/lib/pubkey/xmss/xmss_verification_operation.cpp128
-rw-r--r--src/lib/pubkey/xmss/xmss_verification_operation.h99
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_parameters.cpp130
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_parameters.h129
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_privatekey.cpp80
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_privatekey.h265
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_publickey.cpp66
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_publickey.h337
-rw-r--r--src/tests/data/pubkey/xmss_sig.vec80
-rw-r--r--src/tests/data/pubkey/xmss_verify.vec135
-rw-r--r--src/tests/test_xmss.cpp72
37 files changed, 4412 insertions, 1 deletions
diff --git a/src/build-data/policy/bsi.txt b/src/build-data/policy/bsi.txt
index 8e6012c64..f1c40c9fa 100644
--- a/src/build-data/policy/bsi.txt
+++ b/src/build-data/policy/bsi.txt
@@ -40,6 +40,7 @@ ecgdsa
ecies
eckcdsa
ecdh
+xmss
# rng
auto_rng
diff --git a/src/lib/asn1/oids.cpp b/src/lib/asn1/oids.cpp
index b07e8a8b9..fb2aa0043 100644
--- a/src/lib/asn1/oids.cpp
+++ b/src/lib/asn1/oids.cpp
@@ -1,7 +1,7 @@
/*
* OID maps
*
-* This file was automatically generated by ./src/scripts/oids.py on 2016-11-03
+* This file was automatically generated by src/scripts/oids.py on 2016-11-06
*
* Botan is released under the Simplified BSD License (see license.txt)
*/
@@ -98,6 +98,7 @@ std::string lookup(const OID& oid)
if(oid_str == "1.3.6.1.4.1.11591.12.2") return "Tiger(24,3)";
if(oid_str == "1.3.6.1.4.1.25258.1.3") return "McEliece";
if(oid_str == "1.3.6.1.4.1.25258.1.4") return "Curve25519";
+ if(oid_str == "1.3.6.1.4.1.25258.1.5") return "XMSS";
if(oid_str == "1.3.6.1.4.1.25258.3.1") return "Serpent/CBC";
if(oid_str == "1.3.6.1.4.1.25258.3.101") return "Serpent/GCM";
if(oid_str == "1.3.6.1.4.1.25258.3.102") return "Twofish/GCM";
@@ -309,6 +310,7 @@ OID lookup(const std::string& name)
if(name == "X520.State") return OID("2.5.4.8");
if(name == "X520.Surname") return OID("2.5.4.4");
if(name == "X520.Title") return OID("2.5.4.12");
+ if(name == "XMSS") return OID("1.3.6.1.4.1.25258.1.5");
if(name == "brainpool160r1") return OID("1.3.36.3.3.2.8.1.1.1");
if(name == "brainpool192r1") return OID("1.3.36.3.3.2.8.1.1.3");
if(name == "brainpool224r1") return OID("1.3.36.3.3.2.8.1.1.5");
diff --git a/src/lib/pubkey/pk_algs.cpp b/src/lib/pubkey/pk_algs.cpp
index e7d744ae9..7cccd0168 100644
--- a/src/lib/pubkey/pk_algs.cpp
+++ b/src/lib/pubkey/pk_algs.cpp
@@ -52,6 +52,10 @@
#include <botan/mceliece.h>
#endif
+#if defined(BOTAN_HAS_XMSS)
+ #include <botan/xmss.h>
+#endif
+
namespace Botan {
std::unique_ptr<Public_Key>
@@ -117,6 +121,11 @@ load_public_key(const AlgorithmIdentifier& alg_id,
return std::unique_ptr<Public_Key>(new GOST_3410_PublicKey(alg_id, key_bits));
#endif
+#if defined(BOTAN_HAS_XMSS)
+ if(alg_name == "XMSS")
+ return std::unique_ptr<Public_Key>(new XMSS_PublicKey(key_bits));
+#endif
+
throw Decoding_Error("Unhandled PK algorithm " + alg_name);
}
@@ -183,6 +192,11 @@ load_private_key(const AlgorithmIdentifier& alg_id,
return std::unique_ptr<Private_Key>(new ElGamal_PrivateKey(alg_id, key_bits));
#endif
+#if defined(BOTAN_HAS_XMSS)
+ if(alg_name == "XMSS")
+ return std::unique_ptr<Private_Key>(new XMSS_PrivateKey(key_bits));
+#endif
+
throw Decoding_Error("Unhandled PK algorithm " + alg_name);
}
@@ -224,6 +238,14 @@ create_private_key(const std::string& alg_name,
}
#endif
+#if defined(BOTAN_HAS_XMSS)
+ if(alg_name == "XMSS")
+ {
+ return std::unique_ptr<Private_Key>(
+ new XMSS_PrivateKey(XMSS_Parameters(params).oid(), rng));
+ }
+#endif
+
// ECC crypto
#if defined(BOTAN_HAS_ECC_PUBLIC_KEY_CRYPTO)
diff --git a/src/lib/pubkey/xmss/atomic.h b/src/lib/pubkey/xmss/atomic.h
new file mode 100644
index 000000000..485728d54
--- /dev/null
+++ b/src/lib/pubkey/xmss/atomic.h
@@ -0,0 +1,51 @@
+/**
+ * Atomic
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_ATOMIC_H__
+#define BOTAN_ATOMIC_H__
+
+#include <atomic>
+#include <memory>
+
+namespace Botan {
+
+template <typename T>
+/**
+ * Simple helper class to expand std::atomic with copy constructor and copy
+ * assignment operator, i.e. for use as element in a container like
+ * std::vector. The construction of instances of this wrapper is NOT atomic
+ * and needs to be properly guarded.
+ **/
+class Atomic
+ {
+ public:
+ Atomic() : m_data() {};
+ Atomic(const Atomic& data) : m_data(data.m_data.load()) {}
+ Atomic(const std::atomic<T>& data) : m_data(data.load()) {}
+
+ Atomic& operator=(const Atomic& a)
+ {
+ m_data.store(a.m_data.load());
+ return *this;
+ }
+
+ Atomic& operator=(const std::atomic<T>& a)
+ {
+ m_data.store(a.load());
+ return *this;
+ }
+
+ operator std::atomic<T>& () { return m_data; }
+ operator T() { return m_data.load(); }
+
+ private:
+ std::atomic<T> m_data;
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/info.txt b/src/lib/pubkey/xmss/info.txt
new file mode 100644
index 000000000..a92b06beb
--- /dev/null
+++ b/src/lib/pubkey/xmss/info.txt
@@ -0,0 +1,46 @@
+define XMSS 20161008
+
+<source>
+xmss_common_ops.cpp
+xmss_hash.cpp
+xmss_index_registry.cpp
+xmss_parameters.cpp
+xmss_privatekey.cpp
+xmss_publickey.cpp
+xmss_signature.cpp
+xmss_signature_operation.cpp
+xmss_tools.cpp
+xmss_verification_operation.cpp
+xmss_wots_parameters.cpp
+xmss_wots_privatekey.cpp
+xmss_wots_publickey.cpp
+</source>
+
+<header:public>
+atomic.h
+xmss.h
+xmss_hash.h
+xmss_index_registry.h
+xmss_address.h
+xmss_common_ops.h
+xmss_parameters.h
+xmss_key_pair.h
+xmss_privatekey.h
+xmss_publickey.h
+xmss_tools.h
+xmss_wots_parameters.h
+xmss_wots_privatekey.h
+xmss_wots_publickey.h
+</header:public>
+
+<header:internal>
+xmss_signature.h
+xmss_signature_operation.h
+xmss_verification_operation.h
+</header:internal>
+
+<requires>
+asn1
+rng
+hash
+</requires>
diff --git a/src/lib/pubkey/xmss/xmss.h b/src/lib/pubkey/xmss/xmss.h
new file mode 100644
index 000000000..f12871672
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss.h
@@ -0,0 +1,15 @@
+/**
+ * XMSS
+ * Includes XMSS headers.
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_H__
+#define BOTAN_XMSS_H__
+
+#include <botan/xmss_publickey.h>
+#include <botan/xmss_privatekey.h>
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_address.h b/src/lib/pubkey/xmss/xmss_address.h
new file mode 100644
index 000000000..438059cba
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_address.h
@@ -0,0 +1,409 @@
+/**
+ * XMSS Address
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_ADDRESS_H__
+#define BOTAN_XMSS_ADDRESS_H__
+
+#include <cstdint>
+#include <limits>
+#include <botan/xmss_tools.h>
+
+namespace Botan {
+
+/**
+ * Generic XMSS Address type holding 256 Bits of data. Properties
+ * of all three address formats L-Tree-Address, Hash-Tree-Address,
+ * OTS-Hash-Address can be called depending on the type currently
+ * assigned to the XMSS address using set_type().
+ **/
+class XMSS_Address
+ {
+ public:
+ /**
+ * Distinct types an XMSS_Address can represent. The available types
+ * are specified in [1] - 2.5 Hash Function Address Scheme.
+ **/
+ enum class Type : uint8_t
+ {
+ None = 255,
+ OTS_Hash_Address = 0,
+ LTree_Address = 1,
+ Hash_Tree_Address = 2
+ };
+
+ /**
+ * The available modes for an XMSS Address:
+ * - Key_Mode: Used to generate the key.
+ * - Mask_Mode: Sets the n-byte bitmask (OTS-Hash-Address)
+ * - Mask_MSB_Mode: Used to generate the b most significant bytes of
+ * the 2n-byte bitmask (LTree Address and Hash Tree Address).
+ * - Mask_LSB_Mode: Used to generated the b least significant bytes
+ * of the 2n-byte bitmask. (LTree Address and Hash Tree Address).
+ **/
+ enum class Key_Mask : uint8_t
+ {
+ Key_Mode = 0,
+ Mask_Mode = 1,
+ Mask_MSB_Mode = 1,
+ Mask_LSB_Mode = 2
+ };
+
+ /**
+ * Layer Address for XMSS is constantly zero and can not be changed this
+ * property is only of relevance to XMSS_MT.
+ *
+ * @return Layer address, which is constant 0 for XMSS.
+ **/
+ uint8_t get_layer_addr() const { return 0; }
+
+ /**
+ * Layer Address for XMSS is constantly zero and can not be changed this
+ * property is only of relevance to XMSS_MT. Calling this method for
+ * XMSS will result in an error.
+ **/
+ void set_layer_addr()
+ {
+ BOTAN_ASSERT(false, "Only available in XMSS_MT.");
+ }
+
+ /**
+ * Tree Address for XMSS is constantly zero and can not be changed this
+ * property is only of relevance to XMSS_MT.
+ *
+ * @return Tree address, which is constant 0 for XMSS.
+ **/
+ uint64_t get_tree_addr() const { return 0; }
+
+ /**
+ * Tree Address for XMSS is constantly zero and can not be changed this
+ * property is only of relevance to XMSS_MT. Calling this method for
+ * XMSS will result in an error.
+ **/
+ void set_tree_addr()
+ {
+ BOTAN_ASSERT(false, "Only available in XMSS_MT.");
+ }
+
+ /**
+ * retrieves the logical type currently assigned to the XMSS Address
+ * instance.
+ *
+ * @return Type of the address (OTS_Hash_Address, LTree_Address or
+ * Hash_Tree_Address)
+ **/
+ Type get_type() const
+ {
+ return static_cast<Type>(m_data[15]);
+ }
+
+ /**
+ * Changes the logical type currently assigned to the XMSS Address
+ * instance. Please note that changing the type will automatically
+ * reset the 128 LSBs of the Address to zero. This affects the
+ * key_mask_mode property as well as all properties identified by
+ * XMSS_Address::Property.
+ *
+ * @param type Type that shall be assigned to the address
+ * (OTS_Hash_Address, LTree_Address or Hash_Tree_Address)
+ **/
+ void set_type(Type type)
+ {
+ m_data[15] = static_cast<byte>(type);
+ std::fill(m_data.begin() + 16, m_data.end(), 0);
+ }
+
+ /**
+ * Retrieves the mode the address os currently set to. (See
+ * XMSS_Address::Key_Mask for details.)
+ *
+ * @return currently active mode
+ **/
+ Key_Mask get_key_mask_mode() const
+ {
+ return Key_Mask(m_data[31]);
+ }
+
+ /**
+ * Changes the mode the address currently used address mode.
+ * (XMSS_Address::Key_Mask for details.)
+ *
+ * @param value Target mode.
+ **/
+ void set_key_mask_mode(Key_Mask value)
+ {
+ BOTAN_ASSERT(value != Key_Mask::Mask_LSB_Mode ||
+ get_type() != Type::OTS_Hash_Address,
+ "Invalid Key_Mask for current XMSS_Address::Type.");
+ m_data[31] = static_cast<byte>(value);
+ }
+
+ /**
+ * Retrieve the index of the OTS key pair within the tree. A call to
+ * this method is only valid, if the address type is set to
+ * Type::OTS_Hash_Address.
+ *
+ * @return index of OTS key pair.
+ **/
+ uint32_t get_ots_address() const
+ {
+ BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
+ "get_ots_address() requires XMSS_Address::Type::"
+ "OTS_Hash_Address.");
+ return get_hi32(2);
+ }
+
+ /**
+ * Sets the index of the OTS key pair within the tree. A call to this
+ * method is only valid, if the address type is set to
+ * Type::OTS_Hash_Address.
+ *
+ * @param value index of OTS key pair.
+ **/
+ void set_ots_address(uint32_t value)
+ {
+ BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
+ "set_ots_address() requires XMSS_Address::Type::"
+ "OTS_Hash_Address.");
+ set_hi32(2, value);
+ }
+
+ /**
+ * Retrieves the index of the leaf computed with this LTree. A call to
+ * this method is only valid, if the address type is set to
+ * Type::LTree_Address.
+ *
+ * @return index of the leaf.
+ **/
+ uint32_t get_ltree_address() const
+ {
+ BOTAN_ASSERT(get_type() == Type::LTree_Address,
+ "set_ltree_address() requires XMSS_Address::Type::"
+ "LTree_Address.");
+ return get_hi32(2);
+ }
+
+ /**
+ * Sets the index of the leaf computed with this LTree. A call to this
+ * method is only valid, if the address type is set to
+ * Type::LTree_Address.
+ *
+ * @param value index of the leaf.
+ **/
+ void set_ltree_address(uint32_t value)
+ {
+ BOTAN_ASSERT(get_type() == Type::LTree_Address,
+ "set_ltree_address() requires XMSS_Address::Type::"
+ "LTree_Address.");
+ set_hi32(2, value);
+ }
+
+ /**
+ * Retrieve the chain address. A call to this method is only valid, if
+ * the address type is set to Type::OTS_Hash_Address.
+ *
+ * @return chain address.
+ **/
+ uint32_t get_chain_address() const
+ {
+ BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
+ "get_chain_address() requires XMSS_Address::Type::"
+ "OTS_Hash_Address.");
+ return get_lo32(2);
+ }
+
+ /**
+ * Set the chain address. A call to this method is only valid, if
+ * the address type is set to Type::OTS_Hash_Address.
+ *
+ * @return chain address.
+ **/
+ void set_chain_address(uint32_t value)
+ {
+ BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
+ "set_chain_address() requires XMSS_Address::Type::"
+ "OTS_Hash_Address.");
+ set_lo32(2, value);
+ }
+
+ /**
+ * Retrieves the height of the tree node to be computed within the
+ * tree. A call to this method is only valid, if the address type is
+ * set to Type::LTree_Address or Type::Hash_Tree_Address.
+ *
+ * @return height of the tree node.
+ **/
+ uint32_t get_tree_height() const
+ {
+ BOTAN_ASSERT(get_type() == Type::LTree_Address ||
+ get_type() == Type::Hash_Tree_Address,
+ "get_tree_height() requires XMSS_Address::Type::"
+ "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
+ return get_lo32(2);
+ }
+
+ /**
+ * Sets the height of the tree node to be computed within the
+ * tree. A call to this method is only valid, if the address type is
+ * set to Type::LTree_Address or Type::Hash_Tree_Address.
+ *
+ * @param value height of the tree node.
+ **/
+ void set_tree_height(uint32_t value)
+ {
+ BOTAN_ASSERT(get_type() == Type::LTree_Address ||
+ get_type() == Type::Hash_Tree_Address,
+ "set_tree_height() requires XMSS_Address::Type::"
+ "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
+ set_lo32(2, value);
+ }
+
+ /**
+ * Retrieves the address of the hash function call within the chain.
+ * A call to this method is only valid, if the address type is
+ * set to Type::OTS_Hash_Address.
+ *
+ * @return address of the hash function call within chain.
+ **/
+ uint32_t get_hash_address() const
+ {
+ BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
+ "get_hash_address() requires XMSS_Address::Type::"
+ "OTS_Hash_Address.");
+ return get_hi32(3);
+ }
+
+ /**
+ * Sets the address of the hash function call within the chain.
+ * A call to this method is only valid, if the address type is
+ * set to Type::OTS_Hash_Address.
+ *
+ * @param value address of the hash function call within chain.
+ **/
+ void set_hash_address(uint32_t value)
+ {
+ BOTAN_ASSERT(get_type() == Type::OTS_Hash_Address,
+ "set_hash_address() requires XMSS_Address::Type::"
+ "OTS_Hash_Address.");
+ set_hi32(3, value);
+ }
+
+ /**
+ * Retrieves the index of the tree node at current tree height in the
+ * tree. A call to this method is only valid, if the address type is
+ * set to Type::LTree_Address or Type::Hash_Tree_Address.
+ *
+ * @return index of the tree node at current height.
+ **/
+ uint32_t get_tree_index() const
+ {
+ BOTAN_ASSERT(get_type() == Type::LTree_Address ||
+ get_type() == Type::Hash_Tree_Address,
+ "get_tree_index() requires XMSS_Address::Type::"
+ "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
+ return get_hi32(3);
+ }
+
+ /**
+ * Sets the index of the tree node at current tree height in the
+ * tree. A call to this method is only valid, if the address type is
+ * set to Type::LTree_Address or Type::Hash_Tree_Address.
+ *
+ * @param value index of the tree node at current height.
+ **/
+ void set_tree_index(uint32_t value)
+ {
+ BOTAN_ASSERT(get_type() == Type::LTree_Address ||
+ get_type() == Type::Hash_Tree_Address,
+ "set_tree_index() requires XMSS_Address::Type::"
+ "LTree_Address or XMSS_Address::Type::Hash_Tree_Address.");
+ set_hi32(3, value);
+ }
+
+ const secure_vector<byte>& bytes() const
+ {
+ return m_data;
+ }
+
+ secure_vector<byte>& bytes()
+ {
+ return m_data;
+ }
+
+ /**
+ * @return the size of an XMSS_Address
+ **/
+ size_t size() const
+ {
+ return m_data.size();
+ }
+
+ XMSS_Address()
+ : m_data(m_address_size)
+ {
+ set_type(Type::None);
+ }
+
+ XMSS_Address(Type type)
+ : m_data(m_address_size)
+ {
+ set_type(type);
+ }
+
+ XMSS_Address(const secure_vector<byte>& data) : m_data(data)
+ {
+ BOTAN_ASSERT(m_data.size() == m_address_size,
+ "XMSS_Address must be of 256 bits size.");
+ }
+
+ XMSS_Address(secure_vector<byte>&& data) : m_data(std::move(data))
+ {
+ BOTAN_ASSERT(m_data.size() == m_address_size,
+ "XMSS_Address must be of 256 bits size.");
+ }
+
+ protected:
+ secure_vector<byte> m_data;
+
+ private:
+ static const size_t m_address_size = 32;
+
+ inline uint32_t get_hi32(size_t offset) const
+ {
+ return ((0x000000FF & m_data[8 * offset + 3]) |
+ (0x000000FF & m_data[8 * offset + 2]) << 8 |
+ (0x000000FF & m_data[8 * offset + 1]) << 16 |
+ (0x000000FF & m_data[8 * offset ]) << 24);
+ }
+
+ inline void set_hi32(size_t offset, uint32_t value)
+ {
+ m_data[offset * 8 ] = ((value >> 24) & 0xFF);
+ m_data[offset * 8 + 1] = ((value >> 16) & 0xFF);
+ m_data[offset * 8 + 2] = ((value >> 8) & 0xFF);
+ m_data[offset * 8 + 3] = ((value ) & 0xFF);
+ }
+
+ inline uint32_t get_lo32(size_t offset) const
+ {
+ return ((0x000000FF & m_data[8 * offset + 7]) |
+ (0x000000FF & m_data[8 * offset + 6]) << 8 |
+ (0x000000FF & m_data[8 * offset + 5]) << 16 |
+ (0x000000FF & m_data[8 * offset + 4]) << 24);
+ }
+
+ inline void set_lo32(size_t offset, uint32_t value)
+ {
+ m_data[offset * 8 + 4] = ((value >> 24) & 0xFF);
+ m_data[offset * 8 + 5] = ((value >> 16) & 0xFF);
+ m_data[offset * 8 + 6] = ((value >> 8) & 0xFF);
+ m_data[offset * 8 + 7] = ((value ) & 0xFF);
+ }
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_common_ops.cpp b/src/lib/pubkey/xmss/xmss_common_ops.cpp
new file mode 100644
index 000000000..dd139a349
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_common_ops.cpp
@@ -0,0 +1,70 @@
+/**
+ * XMSS Common Ops
+ * Operations shared by XMSS signature generation and verification operations.
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/xmss_common_ops.h>
+
+namespace Botan {
+
+void
+XMSS_Common_Ops::randomize_tree_hash(secure_vector<byte>& result,
+ const secure_vector<byte>& left,
+ const secure_vector<byte>& right,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& seed)
+ {
+ adrs.set_key_mask_mode(XMSS_Address::Key_Mask::Key_Mode);
+ secure_vector<byte> key { m_hash.prf(seed, adrs.bytes()) };
+
+ adrs.set_key_mask_mode(XMSS_Address::Key_Mask::Mask_MSB_Mode);
+ secure_vector<byte> bitmask_l { m_hash.prf(seed, adrs.bytes()) };
+
+ adrs.set_key_mask_mode(XMSS_Address::Key_Mask::Mask_LSB_Mode);
+ secure_vector<byte> bitmask_r { m_hash.prf(seed, adrs.bytes()) };
+
+ BOTAN_ASSERT(bitmask_l.size() == left.size() &&
+ bitmask_r.size() == right.size(),
+ "Bitmask size doesn't match node size.");
+
+ secure_vector<byte> concat_xor(m_xmss_params.element_size() * 2);
+ for(size_t i = 0; i < left.size(); i++)
+ {
+ concat_xor[i] = left[i] ^ bitmask_l[i];
+ concat_xor[i + left.size()] = right[i] ^ bitmask_r[i];
+ }
+
+ m_hash.h(result, key, concat_xor);
+ }
+
+
+void
+XMSS_Common_Ops::create_l_tree(secure_vector<byte>& result,
+ wots_keysig_t pk,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& seed)
+ {
+ size_t l = m_xmss_params.len();
+ adrs.set_tree_height(0);
+
+ while(l > 1)
+ {
+ for(size_t i = 0; i < l >> 1; i++)
+ {
+ adrs.set_tree_index(i);
+ randomize_tree_hash(pk[i], pk[2 * i], pk[2 * i + 1], adrs, seed);
+ }
+ if(l & 0x01)
+ {
+ pk[l >> 1] = pk[l - 1];
+ }
+ l = (l >> 1) + (l & 0x01);
+ adrs.set_tree_height(adrs.get_tree_height() + 1);
+ }
+ result = pk[0];
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_common_ops.h b/src/lib/pubkey/xmss/xmss_common_ops.h
new file mode 100644
index 000000000..74ae52a78
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_common_ops.h
@@ -0,0 +1,75 @@
+/**
+ * XMSS Common Ops
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_COMMON_OPS_H__
+#define BOTAN_XMSS_COMMON_OPS_H__
+
+#include <vector>
+#include <botan/secmem.h>
+#include <botan/assert.h>
+#include <botan/xmss_parameters.h>
+#include <botan/xmss_address.h>
+#include <botan/xmss_hash.h>
+
+namespace Botan {
+
+typedef std::vector<secure_vector<byte>> wots_keysig_t;
+
+/**
+ * Operations shared by XMSS signature generation and verification operations.
+ **/
+class XMSS_Common_Ops
+ {
+ public:
+ XMSS_Common_Ops(XMSS_Parameters::xmss_algorithm_t oid)
+ : m_xmss_params(oid), m_hash(m_xmss_params.hash_function_name()) {};
+
+ protected:
+ /**
+ * Algorithm 7: "RAND_HASH"
+ *
+ * Generates a randomized hash.
+ *
+ * @param[out] result The resulting randomized hash.
+ * @param[in] left Left half of the hash function input.
+ * @param[in] right Right half of the hash function input.
+ * @param[in] adrs Adress of the hash function call.
+ * @param[in] seed The seed for G.
+ **/
+ void randomize_tree_hash(
+ secure_vector<byte>& result,
+ const secure_vector<byte>& left,
+ const secure_vector<byte>& right,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& seed);
+
+ /**
+ * Algorithm 8: "ltree"
+ * Create an L-tree used to compute the leaves of the binary hash tree.
+ * Takes a WOTS+ public key and compresses it to a single n-byte value.
+ *
+ * @param[out] result Public key compressed to a single n-byte value
+ * pk[0].
+ * @param[in] pk Winternitz One Time Signatures+ public key.
+ * @param[in] adrs Address encoding the address of the L-Tree
+ * @param[in] seed The seed generated during the public key generation.
+ **/
+ void create_l_tree(
+ secure_vector<byte>& result,
+ wots_keysig_t pk,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& seed);
+
+ protected:
+ XMSS_Parameters m_xmss_params;
+ XMSS_Hash m_hash;
+
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_hash.cpp b/src/lib/pubkey/xmss/xmss_hash.cpp
new file mode 100644
index 000000000..15cdab509
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_hash.cpp
@@ -0,0 +1,88 @@
+/**
+ * XMSS Hash
+ * A collection of pseudorandom hash functions required for XMSS and WOTS
+ * computations.
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/xmss_hash.h>
+
+namespace Botan {
+
+XMSS_Hash::XMSS_Hash(const XMSS_Hash& hash)
+ : XMSS_Hash(hash.m_hash_func_name)
+ {
+ }
+
+XMSS_Hash::XMSS_Hash(const std::string& h_func_name)
+ : m_hash(HashFunction::create(h_func_name)),
+ m_msg_hash(HashFunction::create(h_func_name)),
+ m_output_length(m_hash->output_length()),
+ m_zero_padding(m_output_length - 1, 0x00),
+ m_hash_func_name(h_func_name)
+ {
+ BOTAN_ASSERT(m_output_length > 0, "Hash output length of zero is invalid.");
+ }
+
+void
+XMSS_Hash::h(secure_vector<byte>& result,
+ const secure_vector<byte>& key,
+ const secure_vector<byte>& data)
+ {
+ m_hash->update(m_zero_padding);
+ m_hash->update(m_id_h);
+ m_hash->update(key);
+ m_hash->update(data);
+ m_hash->final(result);
+ }
+
+void XMSS_Hash::h_msg_init(const secure_vector<byte>& randomness,
+ const secure_vector<byte>& root,
+ const secure_vector<byte>& index_bytes)
+ {
+ m_msg_hash->clear();
+ m_msg_hash->update(m_zero_padding);
+ m_msg_hash->update(m_id_hmsg);
+ m_msg_hash->update(randomness);
+ m_msg_hash->update(root);
+ m_msg_hash->update(index_bytes);
+ }
+
+void XMSS_Hash::h_msg_update(const secure_vector<byte>& data)
+ {
+ m_msg_hash->update(data);
+ }
+
+void XMSS_Hash::h_msg_update(const byte data[], size_t size)
+ {
+ m_msg_hash->update(data, size);
+ }
+
+secure_vector<byte> XMSS_Hash::h_msg_final()
+ {
+ return m_msg_hash->final();
+ }
+
+secure_vector<byte>
+XMSS_Hash::h_msg(const secure_vector<byte>& randomness,
+ const secure_vector<byte>& root,
+ const secure_vector<byte>& index_bytes,
+ const secure_vector<byte>& data)
+ {
+ h_msg_init(randomness, root, index_bytes);
+ m_msg_hash->update(data);
+ return m_msg_hash->final();
+ }
+
+XMSS_Hash& XMSS_Hash::operator=(XMSS_Hash hash)
+ {
+ std::swap(m_hash, hash.m_hash);
+ std::swap(m_msg_hash, hash.m_msg_hash);
+ std::swap(m_output_length, hash.m_output_length);
+ std::swap(m_zero_padding, hash.m_zero_padding);
+ return *this;
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_hash.h b/src/lib/pubkey/xmss/xmss_hash.h
new file mode 100644
index 000000000..da059fb7b
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_hash.h
@@ -0,0 +1,166 @@
+/**
+ * XMSS Hash
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_HASH_H__
+#define BOTAN_XMSS_HASH_H__
+
+#include <cstddef>
+#include <string>
+#include <botan/assert.h>
+#include <botan/hash.h>
+#include <botan/secmem.h>
+#include <botan/types.h>
+
+namespace Botan {
+
+/**
+ * A collection of pseudorandom hash functions required for XMSS and WOTS
+ * computations.
+ **/
+class XMSS_Hash
+ {
+ public:
+ XMSS_Hash(const std::string& h_func_name);
+ XMSS_Hash(const XMSS_Hash& hash);
+ XMSS_Hash& operator=(XMSS_Hash hash);
+
+ /**
+ * Pseudoranom function creating a hash out of a key and data using
+ * a cryptographic hash function.
+ *
+ * @param[out] result The hash calculated using key and data.
+ * @param[in] key An n-byte key value.
+ * @param[in] data A 32-byte XMSS_Address data value
+ **/
+ inline void prf(secure_vector<byte>& result,
+ const secure_vector<byte>& key,
+ const secure_vector<byte>& data)
+ {
+ m_hash->update(m_zero_padding);
+ m_hash->update(m_id_prf);
+ m_hash->update(key);
+ m_hash->update(data);
+ m_hash->final(result);
+ }
+
+ /**
+ * Pseudoranom function creating a hash out of a key and data using
+ * a cryptographic hash function.
+ *
+ * @param[in] key An n-byte key value.
+ * @param[in] data A 32-byte XMSS_Address data value
+ * @return result The hash calculated using key and data.
+ **/
+ inline secure_vector<byte> prf(const secure_vector<byte>& key,
+ const secure_vector<byte>& data)
+ {
+ m_hash->update(m_zero_padding);
+ m_hash->update(m_id_prf);
+ m_hash->update(key);
+ m_hash->update(data);
+ return m_hash->final();
+ }
+
+ /**
+ * F is a keyed cryptographic hash function used by the WOTS+ algorithm.
+ *
+ * @param[out] result The hash calculated using key and data.
+ * @param[in] key key of length n bytes.
+ * @param[in] data string of arbitrary length.
+ **/
+ void f(secure_vector<byte>& result,
+ const secure_vector<byte>& key,
+ const secure_vector<byte>& data)
+ {
+ m_hash->update(m_zero_padding);
+ m_hash->update(m_id_f);
+ m_hash->update(key);
+ m_hash->update(data);
+ m_hash->final(result);
+ }
+
+ /**
+ * Cryptographic hash function h accepting n byte keys and 2n byte
+ * strings of data.
+ *
+ * @param[out] result The hash calculated using key and data.
+ * @param[in] key key of length n bytes.
+ * @param[in] data string of 2n bytes length.
+ **/
+ void h(secure_vector<byte>& result,
+ const secure_vector<byte>& key,
+ const secure_vector<byte>& data);
+
+ /**
+ * Cryptographic hash function h accepting 3n byte keys and data
+ * strings of arbitrary length.
+ *
+ * @param randomness n-byte value.
+ * @param root n-byte root node.
+ * @param index_bytes Index value padded with leading zeros.
+ * @param data string of arbitrary length.
+ *
+ * @return hash value of n-bytes length.
+ **/
+ secure_vector<byte> h_msg(const secure_vector<byte>& randomness,
+ const secure_vector<byte>& root,
+ const secure_vector<byte>& index_bytes,
+ const secure_vector<byte>& data);
+
+ /**
+ * Initializes buffered h_msg computation with prefix data.
+ *
+ * @param randomness random n-byte value.
+ * @param root n-byte root node.
+ * @param index_bytes Index value padded with leading zeros.
+ **/
+ void h_msg_init(const secure_vector<byte>& randomness,
+ const secure_vector<byte>& root,
+ const secure_vector<byte>& index_bytes);
+
+ /**
+ * Adds a message block to buffered h_msg computation.
+ *
+ * @param data A message block
+ **/
+ void h_msg_update(const secure_vector<byte>& data);
+
+ /**
+ * Adds a message block to buffered h_msg computation.
+ *
+ * @param data A message block
+ * @param size Length of the message block in bytes.
+ **/
+ void h_msg_update(const byte data[], size_t size);
+
+ /**
+ * Finalizes buffered h_msg computation and retrieves the result.
+ *
+ * @return Hash calculated using the prefix set by h_msg_init() and
+ * message blocks provided through calls to h_msg_update().
+ **/
+ secure_vector<byte> h_msg_final();
+
+ size_t output_length() const { return m_output_length; };
+
+ private:
+ std::unique_ptr<HashFunction> m_hash;
+ std::unique_ptr<HashFunction> m_msg_hash;
+ size_t m_output_length;
+
+ //32 byte id prefixes prepended to the hash input.
+ std::vector<byte> m_zero_padding;
+ static const byte m_id_f = 0x00;
+ static const byte m_id_h = 0x01;
+ static const byte m_id_hmsg = 0x02;
+ static const byte m_id_prf = 0x03;
+ const std::string m_hash_func_name;
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_index_registry.cpp b/src/lib/pubkey/xmss/xmss_index_registry.cpp
new file mode 100644
index 000000000..f7f4ec470
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_index_registry.cpp
@@ -0,0 +1,82 @@
+/**
+ * XMSS Index Registry
+ * A registry for XMSS private keys, keeps track of the leaf index for
+ * independend copies of the same key.
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/xmss_index_registry.h>
+
+namespace Botan {
+
+const std::string XMSS_Index_Registry::m_index_hash_function = "SHA-256";
+
+uint64_t XMSS_Index_Registry::make_key_id(
+ const secure_vector<byte>& private_seed,
+ const secure_vector<byte>& prf) const
+ {
+ std::unique_ptr<HashFunction> hash =
+ HashFunction::create(m_index_hash_function);
+ BOTAN_ASSERT(hash != nullptr, "XMSS_Index_Registry requires SHA-256");
+ hash->update(private_seed);
+ hash->update(prf);
+ secure_vector<byte> result = hash->final();
+ uint64_t key_id = 0;
+ for(size_t i = 0; i < sizeof(key_id); i++)
+ {
+ key_id = ((key_id << 8) | result[i]);
+ }
+
+ return key_id;
+ }
+
+std::shared_ptr<Atomic<size_t>>
+XMSS_Index_Registry::get(const secure_vector<byte>& private_seed,
+ const secure_vector<byte>& prf)
+ {
+ size_t pos = get(make_key_id(private_seed, prf));
+
+ if(pos < std::numeric_limits<size_t>::max())
+ {
+ return m_leaf_indices[pos];
+ }
+ else
+ {
+ return m_leaf_indices[add(make_key_id(private_seed, prf))];
+ }
+ }
+
+size_t XMSS_Index_Registry::get(uint64_t id) const
+ {
+ for(size_t i = 0; i < m_key_ids.size(); i++)
+ {
+ if(m_key_ids[i] == id)
+ {
+ return i;
+ }
+ }
+
+ return std::numeric_limits<size_t>::max();
+ }
+
+size_t XMSS_Index_Registry::add(uint64_t id, size_t last_unused)
+ {
+ std::lock_guard<std::mutex> lock(m_mutex);
+ size_t pos = get(id);
+ if(pos < m_key_ids.size())
+ {
+ if(last_unused > *(m_leaf_indices[pos]))
+ {
+ m_leaf_indices[pos] = std::make_shared<Atomic<size_t>>(last_unused);
+ }
+ return pos;
+ }
+
+ m_key_ids.push_back(id);
+ m_leaf_indices.push_back(std::make_shared<Atomic<size_t>>(last_unused));
+ return m_key_ids.size() - 1;
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_index_registry.h b/src/lib/pubkey/xmss/xmss_index_registry.h
new file mode 100644
index 000000000..5dcb6d31b
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_index_registry.h
@@ -0,0 +1,109 @@
+/**
+ * XMSS Index Registry
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_INDEX_REGISTRY_H__
+#define BOTAN_XMSS_INDEX_REGISTRY_H__
+
+#include <stdint.h>
+#include <cstddef>
+#include <limits>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <botan/hash.h>
+#include <botan/secmem.h>
+#include <botan/types.h>
+#include <botan/atomic.h>
+
+namespace Botan {
+
+/**
+ * A registry for XMSS private keys, keeps track of the leaf index for
+ * independend copies of the same key.
+ **/
+class XMSS_Index_Registry
+ {
+ public:
+ XMSS_Index_Registry(const XMSS_Index_Registry&) = delete;
+ XMSS_Index_Registry& operator=(const XMSS_Index_Registry&) = delete;
+
+ /**
+ * Retrieves a handle to the process-wide unique XMSS index registry.
+ *
+ * @return Reference to unique XMSS index registry.
+ **/
+ static XMSS_Index_Registry& get_instance()
+ {
+ static XMSS_Index_Registry self;
+ return self;
+ }
+
+ /**
+ * Retrieves the last unused leaf index for the private key identified
+ * by private_seed and prf. The leaf index will be updated properly
+ * across independent copies of private_key.
+ *
+ * @param private_seed Part of the unique identifier for an
+ * XMSS_PrivateKey.
+ * @param prf Part of the unique identifier for an XMSS_PrivateKey.
+ *
+ * @return last unused leaf index for private_key.
+ **/
+ std::shared_ptr<Atomic<size_t>>
+ get(const secure_vector<byte>& private_seed,
+ const secure_vector<byte>& prf);
+
+ private:
+ XMSS_Index_Registry()
+ : m_key_ids(), m_leaf_indices(), m_mutex() {}
+
+ static const std::string m_index_hash_function;
+
+ /**
+ * Creates a unique 64-bit id for an XMSS_Private key, by interpreting
+ * the first 64-bit of HASH(PRIVATE_SEED || PRF) as 64 bit integer
+ * value.
+ *
+ * @return unique integral identifier for an XMSS private key.
+ **/
+ uint64_t make_key_id(const secure_vector<byte>& private_seed,
+ const secure_vector<byte>& prf) const;
+
+ /**
+ * Retrieves the index position of a key within the registry or
+ * max(size_t) if key has not been found.
+ *
+ * @param unique id of the XMSS private key (see make_key_id()).
+ *
+ * @return index position of key or max(size_t) if key not found.
+ **/
+ size_t get(uint64_t id) const;
+
+ /**
+ * If XMSS_PrivateKey identified by id is already registered, the
+ * position of the according registry entry is returned. If last_unused
+ * is bigger than the last unused index stored for the key identified by
+ * id the unused leaf index for this key is set to last_unused. If no key
+ * matching id is registed yet, an entry of id is added, with the last
+ * unused leaf index initialized to the value of last_unused.
+ *
+ * @last_unused Initial value for the last unused leaf index of the
+ * registered key.
+ *
+ * @return positon of leaf index registry entry for key identified
+ * by id.
+ **/
+ size_t add(uint64_t id, size_t last_unused = 0);
+
+ std::vector<uint64_t> m_key_ids;
+ std::vector<std::shared_ptr<Atomic<size_t>>> m_leaf_indices;
+ std::mutex m_mutex;
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_key_pair.h b/src/lib/pubkey/xmss/xmss_key_pair.h
new file mode 100644
index 000000000..4d86f1766
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_key_pair.h
@@ -0,0 +1,52 @@
+/**
+ * XMSS Key Pair
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_KEY_PAIR_H__
+#define BOTAN_XMSS_KEY_PAIR_H__
+
+#include <botan/botan.h>
+#include <botan/rng.h>
+#include <botan/xmss_parameters.h>
+#include <botan/xmss_wots_parameters.h>
+#include <botan/xmss_publickey.h>
+#include <botan/xmss_privatekey.h>
+
+namespace Botan {
+
+/**
+ * A pair of XMSS public and private key.
+ **/
+class BOTAN_DLL XMSS_Key_Pair
+ {
+ public:
+ XMSS_Key_Pair(XMSS_Parameters::xmss_algorithm_t xmss_oid,
+ RandomNumberGenerator& rng)
+ : m_priv_key(xmss_oid, rng), m_pub_key(m_priv_key) {}
+
+ XMSS_Key_Pair(const XMSS_PublicKey& pub_key,
+ const XMSS_PrivateKey& priv_key)
+ : m_priv_key(priv_key), m_pub_key(pub_key)
+ {}
+
+ XMSS_Key_Pair(XMSS_PublicKey&& pub_key,
+ XMSS_PrivateKey&& priv_key)
+ : m_priv_key(std::move(priv_key)), m_pub_key(std::move(pub_key)) {}
+
+ const XMSS_PublicKey& public_key() const { return m_pub_key; }
+ XMSS_PublicKey& public_key() { return m_pub_key; }
+
+ const XMSS_PrivateKey& private_key() const { return m_priv_key; }
+ XMSS_PrivateKey& private_key() { return m_priv_key; }
+
+ private:
+ XMSS_PrivateKey m_priv_key;
+ XMSS_PublicKey m_pub_key;
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_parameters.cpp b/src/lib/pubkey/xmss/xmss_parameters.cpp
new file mode 100644
index 000000000..5a106320b
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_parameters.cpp
@@ -0,0 +1,179 @@
+/**
+ * XMSS Parameters
+ * Descibes a signature method for XMSS, as defined in:
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ *
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/xmss_parameters.h>
+
+namespace Botan {
+
+const std::map<std::string, XMSS_Parameters::xmss_algorithm_t>
+ XMSS_Parameters::m_oid_name_lut =
+ {
+ { "XMSS_SHA2-256_W16_H10", XMSS_SHA2_256_W16_H10 },
+ { "XMSS_SHA2-256_W16_H16", XMSS_SHA2_256_W16_H16 },
+ { "XMSS_SHA2-256_W16_H20", XMSS_SHA2_256_W16_H20 },
+ { "XMSS_SHA2-512_W16_H10", XMSS_SHA2_512_W16_H10 },
+ { "XMSS_SHA2-512_W16_H16", XMSS_SHA2_512_W16_H16 },
+ { "XMSS_SHA2-512_W16_H20", XMSS_SHA2_512_W16_H20 }
+// { "XMSS_SHAKE128_W16_H10", xmss_algorithm_t::XMSS_SHAKE128_W16_H10 },
+// { "XMSS_SHAKE128_W16_H16", xmss_algorithm_t::XMSS_SHAKE128_W16_H16 },
+// { "XMSS_SHAKE128_W16_H20", xmss_algorithm_t::XMSS_SHAKE128_W16_H20 },
+// { "XMSS_SHAKE256_W16_H10", xmss_algorithm_t::XMSS_SHAKE256_W16_H10 },
+// { "XMSS_SHAKE256_W16_H16", xmss_algorithm_t::XMSS_SHAKE256_W16_H16 },
+// { "XMSS_SHAKE256_W16_H20", xmss_algorithm_t::XMSS_SHAKE256_W16_H20 }
+ };
+
+XMSS_Parameters::XMSS_Parameters(const std::string& algo_name)
+ : XMSS_Parameters(m_oid_name_lut.at(algo_name))
+ {}
+
+XMSS_Parameters::XMSS_Parameters(xmss_algorithm_t oid)
+ : m_oid(oid)
+ {
+ switch(oid)
+ {
+ case XMSS_SHA2_256_W16_H10:
+ m_element_size = 32;
+ m_w = 16;
+ m_len = 67;
+ m_tree_height = 10;
+ m_name = "XMSS_SHA2-256_W16_H10";
+ m_hash_name = "SHA-256";
+ m_strength = 256;
+ m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_256_W16;
+ break;
+ case XMSS_SHA2_256_W16_H16:
+ m_element_size = 32;
+ m_w = 16;
+ m_len = 67;
+ m_tree_height = 16;
+ m_name = "XMSS_SHA2-256_W16_H16";
+ m_hash_name = "SHA-256";
+ m_strength = 256;
+ m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_256_W16;
+ break;
+ case XMSS_SHA2_256_W16_H20:
+ m_element_size = 32;
+ m_w = 16;
+ m_len = 67;
+ m_tree_height = 20;
+ m_name = "XMSS_SHA2-256_W16_H20";
+ m_hash_name = "SHA-256";
+ m_strength = 256;
+ m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_256_W16;
+ break;
+ case XMSS_SHA2_512_W16_H10:
+ m_element_size = 64;
+ m_w = 16;
+ m_len = 131;
+ m_tree_height = 10;
+ m_name = "XMSS_SHA2-512_W16_H10";
+ m_hash_name = "SHA-512";
+ m_strength = 512;
+ m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_512_W16;
+ break;
+ case XMSS_SHA2_512_W16_H16:
+ m_element_size = 64;
+ m_w = 16;
+ m_len = 131;
+ m_tree_height = 16;
+ m_name = "XMSS_SHA2-512_W16_H16";
+ m_hash_name = "SHA-512";
+ m_strength = 512;
+ m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_512_W16;
+ break;
+ case XMSS_SHA2_512_W16_H20:
+ m_element_size = 64;
+ m_w = 16;
+ m_len = 131;
+ m_tree_height = 20;
+ m_name = "XMSS_SHA2-512_W16_H20";
+ m_hash_name = "SHA-512";
+ m_strength = 512;
+ m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHA2_512_W16;
+ break;
+// FIXME: Uncomment once SHAKE128/256 implementation is available in Botan.
+// case XMSS_SHAKE128_W16_H10:
+// m_element_size = 32;
+// m_w = 16;
+// m_len = 67;
+// m_tree_height = 10;
+// m_name = "XMSS_SHAKE128_W16_H10";
+// m_hash_name = "";
+// m_strength = 256;
+// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16;
+// BOTAN_ASSERT(false, "XMSS_SHAKE128_W16_H10 not implemented.");
+// break;
+// case XMSS_SHAKE128_W16_H16:
+// m_element_size = 32;
+// m_w = 16;
+// m_len = 67;
+// m_tree_height = 16;
+// m_name = "XMSS_SHAKE128_W16_H16";
+// m_hash_name = "";
+// m_strength = 256;
+// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16;
+// BOTAN_ASSERT(false, "XMSS_SHAKE128_W16_H16 not implemented.");
+// break;
+// case XMSS_SHAKE128_W16_H20:
+// m_element_size = 32;
+// m_w = 16;
+// m_len = 67;
+// m_tree_height = 20;
+// m_name = "XMSS_SHAKE128_W16_H20";
+// m_hash_name = "";
+// m_strength = 256;
+// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE128_W16;
+// BOTAN_ASSERT(false, "XMSS_SHAKE128_W16_H20 not implemented.");
+// break;
+// case XMSS_SHAKE256_W16_H10:
+// m_element_size = 64;
+// m_w = 16;
+// m_len = 131;
+// m_tree_height = 10;
+// m_name = "XMSS_SHAKE256_W16_H10";
+// m_hash_name = "";
+// m_strength = 512;
+// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16;
+// BOTAN_ASSERT(false, "XMSS_SHAKE256_W16_H10 not implemented.");
+// break;
+// case XMSS_SHAKE256_W16_H16:
+// m_element_size = 64;
+// m_w = 16;
+// m_len = 131;
+// m_tree_height = 16;
+// m_name = "XMSS_SHAKE256_W16_H16";
+// m_hash_name = "";
+// m_strength = 512;
+// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16;
+// BOTAN_ASSERT(false, "XMSS_SHAKE256_W16_H16 not implemented.");
+// break;
+// case XMSS_SHAKE256_W16_H20:
+// m_element_size = 64;
+// m_w = 16;
+// m_len = 131;
+// m_tree_height = 20;
+// m_name = "XMSS_SHAKE256_W16_H20";
+// m_hash_name = "";
+// m_strength = 512;
+// m_wots_oid = XMSS_WOTS_Parameters::ots_algorithm_t::WOTSP_SHAKE256_W16;
+// BOTAN_ASSERT(false, "XMSS_SHAKE256_W16_H20 not implemented.");
+// break;
+ default:
+ throw Unsupported_Argument(
+ "Algorithm id does not match any XMSS algorithm id.");
+ break;
+ }
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_parameters.h b/src/lib/pubkey/xmss/xmss_parameters.h
new file mode 100644
index 000000000..eb5ff4422
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_parameters.h
@@ -0,0 +1,125 @@
+/**
+ * XMSS Parameters
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_PARAMETERS_H__
+#define BOTAN_XMSS_PARAMETERS_H__
+
+#include <cstddef>
+#include <map>
+#include <string>
+#include <botan/assert.h>
+#include <botan/types.h>
+#include <botan/xmss_wots_parameters.h>
+
+namespace Botan {
+
+/**
+ * Descibes a signature method for XMSS, as defined in:
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ **/
+class BOTAN_DLL XMSS_Parameters
+ {
+ public:
+ enum xmss_algorithm_t
+ {
+ XMSS_SHA2_256_W16_H10 = 0x01000001,
+ XMSS_SHA2_256_W16_H16 = 0x02000002,
+ XMSS_SHA2_256_W16_H20 = 0x03000003,
+ XMSS_SHA2_512_W16_H10 = 0x04000004,
+ XMSS_SHA2_512_W16_H16 = 0x05000005,
+ XMSS_SHA2_512_W16_H20 = 0x06000006,
+// FIXME: Uncomment once SHAKE128/256 implementation is available in Botan.
+// XMSS_SHAKE128_W16_H10 = 0x07000007,
+// XMSS_SHAKE128_W16_H16 = 0x08000008,
+// XMSS_SHAKE128_W16_H20 = 0x09000009,
+// XMSS_SHAKE256_W16_H10 = 0x0a00000a,
+// XMSS_SHAKE256_W16_H16 = 0x0b00000b,
+// XMSS_SHAKE256_W16_H20 = 0x0c00000c
+ };
+
+ XMSS_Parameters(const std::string& algo_name);
+ XMSS_Parameters(xmss_algorithm_t oid);
+
+ /**
+ * @return XMSS registry name for the chosen parameter set.
+ **/
+ const std::string& name() const
+ {
+ return m_name;
+ }
+
+ const std::string& hash_function_name() const
+ {
+ return m_hash_name;
+ }
+
+ /**
+ * Retrieves the uniform length of a message, and the size of
+ * each node. This correlates to XMSS parameter "n" defined
+ * in [1].
+ *
+ * @return element length in bytes.
+ **/
+ size_t element_size() const { return m_element_size; }
+
+ /**
+ * @returns The height (number of levels - 1) of the tree
+ **/
+ size_t tree_height() const { return m_tree_height; }
+
+ /**
+ * The Winternitz parameter.
+ *
+ * @return numeric base used for internal representation of
+ * data.
+ **/
+ size_t wots_parameter() const { return m_w; }
+
+ size_t len() const { return m_len; }
+
+ xmss_algorithm_t oid() const { return m_oid; }
+
+ XMSS_WOTS_Parameters::ots_algorithm_t ots_oid() const
+ {
+ return m_wots_oid;
+ }
+
+ /**
+ * Returns the estimated pre-quantum security level of
+ * the chosen algorithm.
+ **/
+ size_t estimated_strength() const
+ {
+ return m_strength;
+ }
+
+ bool operator==(const XMSS_Parameters& p) const
+ {
+ return m_oid == p.m_oid;
+ }
+
+ private:
+ static const std::map<std::string, xmss_algorithm_t>
+ m_oid_name_lut;
+ xmss_algorithm_t m_oid;
+ XMSS_WOTS_Parameters::ots_algorithm_t m_wots_oid;
+ std::string m_name;
+ std::string m_hash_name;
+ size_t m_element_size;
+ size_t m_tree_height;
+ size_t m_w;
+ size_t m_len;
+ size_t m_strength;
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_privatekey.cpp b/src/lib/pubkey/xmss/xmss_privatekey.cpp
new file mode 100644
index 000000000..18d712a5f
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_privatekey.cpp
@@ -0,0 +1,188 @@
+/**
+ * XMSS Private Key
+ * An XMSS: Extended Hash-Based Siganture private key.
+ * The XMSS private key does not support the X509 and PKCS7 standard. Instead
+ * the raw format described in [1] is used.
+ *
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ *
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/internal/xmss_signature_operation.h>
+#include <botan/xmss_privatekey.h>
+
+namespace Botan {
+
+XMSS_PrivateKey::XMSS_PrivateKey(const secure_vector<byte>& raw_key)
+ : XMSS_PublicKey(raw_key),
+ XMSS_Common_Ops(XMSS_PublicKey::m_xmss_params.oid()),
+ m_wots_priv_key(m_wots_params.oid(), m_public_seed),
+ m_index_reg(XMSS_Index_Registry::get_instance())
+ {
+ BOTAN_ASSERT(sizeof(size_t) >= ceil(
+ static_cast<float>(XMSS_PublicKey::m_xmss_params.tree_height()) / 8.f),
+ "System type \"size_t\" not big enough to support"
+ " leaf index.");
+
+ if(raw_key.size() != size())
+ {
+ throw Integrity_Failure("Invalid XMSS private key size detected.");
+ }
+
+ // extract & copy unused leaf index from raw_key.
+ uint64_t unused_leaf = 0;
+ auto begin = (raw_key.begin() + XMSS_PublicKey::size());
+ auto end = raw_key.begin() + XMSS_PublicKey::size() + sizeof(uint64_t);
+
+ for(auto& i = begin; i != end; i++)
+ unused_leaf = ((unused_leaf << 8) | *i);
+
+ if(unused_leaf >= (1ull << (XMSS_PublicKey::m_xmss_params.tree_height() - 1)))
+ {
+ throw Integrity_Failure("XMSS private key leaf index out of "
+ "bounds.");
+ }
+
+ begin = end;
+ end = begin + XMSS_PublicKey::m_xmss_params.element_size();
+ m_prf.clear();
+ m_prf.reserve(XMSS_PublicKey::m_xmss_params.element_size());
+ std::copy(begin, end, std::back_inserter(m_prf));
+
+ begin = end;
+ end = begin + m_wots_params.element_size();
+ m_wots_priv_key.set_private_seed(secure_vector<byte>(begin, end));
+ set_unused_leaf_index(static_cast<size_t>(unused_leaf));
+ }
+
+XMSS_PrivateKey::XMSS_PrivateKey(
+ XMSS_Parameters::xmss_algorithm_t xmss_algo_id,
+ RandomNumberGenerator& rng)
+ : XMSS_PublicKey(xmss_algo_id, rng),
+ XMSS_Common_Ops(xmss_algo_id),
+ m_wots_priv_key(XMSS_PublicKey::m_xmss_params.ots_oid(),
+ public_seed(),
+ rng),
+ m_prf(rng.random_vec(XMSS_PublicKey::m_xmss_params.element_size())),
+ m_index_reg(XMSS_Index_Registry::get_instance())
+ {
+ XMSS_Address adrs;
+ set_root(tree_hash(0,
+ XMSS_PublicKey::m_xmss_params.tree_height(),
+ adrs));
+ }
+
+secure_vector<byte>
+XMSS_PrivateKey::tree_hash(size_t start_idx,
+ size_t target_node_height,
+ XMSS_Address& adrs)
+ {
+ const secure_vector<byte>& seed = this->public_seed();
+
+ BOTAN_ASSERT((start_idx % (1 << target_node_height)) == 0,
+ "Start index must be divisible by 2^{target node height}.");
+
+ std::vector<secure_vector<byte>> nodes(
+ XMSS_PublicKey::m_xmss_params.tree_height() + 1,
+ secure_vector<byte>(XMSS_PublicKey::m_xmss_params.element_size()));
+
+ // node stack, holds all nodes on stack and one extra "pending" node. This
+ // temporary node referred to as "node" in the XMSS standard document stays
+ // a pending element, meaning it is not regarded as element on the stack
+ // until level is increased.
+ std::vector<byte> node_levels(XMSS_PublicKey::m_xmss_params.tree_height() + 1);
+
+ byte level = 0;
+ XMSS_WOTS_PublicKey pk(m_wots_priv_key.wots_parameters().oid(), seed);
+
+ size_t last_idx = static_cast<size_t>(1 << target_node_height) + start_idx;
+ for(size_t i = start_idx; i < last_idx; i++)
+ {
+ adrs.set_type(XMSS_Address::Type::OTS_Hash_Address);
+ adrs.set_ots_address(i);
+ this->wots_private_key().generate_public_key(
+ pk,
+ // getWOTS_SK(SK, s + i), reference implementation uses adrs
+ // instead of zero padded index s + i.
+ this->wots_private_key()[adrs],
+ adrs);
+ adrs.set_type(XMSS_Address::Type::LTree_Address);
+ adrs.set_ltree_address(i);
+ create_l_tree(nodes[level], pk, adrs, seed);
+ node_levels[level] = 0;
+
+ adrs.set_type(XMSS_Address::Type::Hash_Tree_Address);
+ adrs.set_tree_height(0);
+ adrs.set_tree_index(i);
+
+ while(level > 0 && node_levels[level] ==
+ node_levels[level - 1])
+ {
+ adrs.set_tree_index(((adrs.get_tree_index() - 1) >> 1));
+ randomize_tree_hash(nodes[level - 1],
+ nodes[level - 1],
+ nodes[level],
+ adrs,
+ seed);
+ node_levels[level - 1]++;
+ level--; //Pop stack top element
+ adrs.set_tree_height(adrs.get_tree_height() + 1);
+ }
+ level++; //push temporary node to stack
+ }
+ return nodes[level - 1];
+ }
+
+std::shared_ptr<Atomic<size_t>>
+XMSS_PrivateKey::recover_global_leaf_index() const
+ {
+ BOTAN_ASSERT(m_wots_priv_key.private_seed().size() ==
+ XMSS_PublicKey::m_xmss_params.element_size() &&
+ m_prf.size() == XMSS_PublicKey::m_xmss_params.element_size(),
+ "Trying to retrieve index for partially initialized "
+ "key.");
+ return m_index_reg.get(m_wots_priv_key.private_seed(),
+ m_prf);
+ }
+
+secure_vector<byte> XMSS_PrivateKey::raw_private_key() const
+ {
+ std::vector<byte> pk { raw_public_key() };
+ secure_vector<byte> result(pk.begin(), pk.end());
+ result.reserve(size());
+
+ for(int i = 7; i >= 0; i--)
+ {
+ result.push_back(
+ static_cast<byte>(
+ static_cast<uint64_t>(unused_leaf_index()) >> 8 * i));
+ }
+
+ std::copy(m_prf.begin(), m_prf.end(), std::back_inserter(result));
+ std::copy(m_wots_priv_key.private_seed().begin(),
+ m_wots_priv_key.private_seed().end(),
+ std::back_inserter(result));
+
+ return result;
+ }
+
+std::unique_ptr<PK_Ops::Signature>
+XMSS_PrivateKey::create_signature_op(RandomNumberGenerator&,
+ const std::string&,
+ const std::string& provider) const
+ {
+ if(provider == "base" || provider.empty())
+ return std::unique_ptr<PK_Ops::Signature>(
+ new XMSS_Signature_Operation(*this));
+
+ throw Provider_Not_Found(algo_name(), provider);
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_privatekey.h b/src/lib/pubkey/xmss/xmss_privatekey.h
new file mode 100644
index 000000000..064d899a8
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_privatekey.h
@@ -0,0 +1,258 @@
+/**
+ * XMSS_PrivateKey.h
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_PRIVATEKEY_H__
+#define BOTAN_XMSS_PRIVATEKEY_H__
+
+#include <cstddef>
+#include <iterator>
+#include <memory>
+#include <botan/alg_id.h>
+#include <botan/assert.h>
+#include <botan/exceptn.h>
+#include <botan/pk_keys.h>
+#include <botan/rng.h>
+#include <botan/types.h>
+#include <botan/xmss_parameters.h>
+#include <botan/xmss_publickey.h>
+#include <botan/atomic.h>
+#include <botan/xmss_common_ops.h>
+#include <botan/xmss_wots_privatekey.h>
+#include <botan/xmss_index_registry.h>
+
+namespace Botan {
+
+/**
+ * An XMSS: Extended Hash-Based Signature private key.
+ * The XMSS private key does not support the X509 and PKCS7 standard. Instead
+ * the raw format described in [1] is used.
+ *
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ **/
+class BOTAN_DLL XMSS_PrivateKey : public virtual XMSS_PublicKey,
+ public XMSS_Common_Ops,
+ public virtual Private_Key
+ {
+ public:
+ /**
+ * Creates a new XMSS private key for the chosen XMSS signature method.
+ * New seeds for public/private key and pseudo random function input are
+ * generated using AutoSeeded_RNG. The appropriate WOTS signature method
+ * will be automatically set based on the chosen XMSS signature method.
+ *
+ * @param xmss_algo_id Identifier for the selected XMSS signature method.
+ * @param rng A random number generator to use for key generation.
+ **/
+ XMSS_PrivateKey(XMSS_Parameters::xmss_algorithm_t xmss_algo_id,
+ RandomNumberGenerator& rng);
+
+ /**
+ * Creates an XMSS_PrivateKey from a byte sequence produced by
+ * raw_private_key().
+ *
+ * @param raw_key An XMSS private key serialized using raw_private_key().
+ **/
+ XMSS_PrivateKey(const secure_vector<byte>& raw_key);
+
+ /**
+ * Creates a new XMSS private key for the chosen XMSS signature method
+ * using precomputed seeds for public/private keys and pseudo random
+ * function input. The appropriate WOTS signature method will be
+ * automatically set, based on the chosen XMSS signature method.
+ *
+ * @param xmss_algo_id Identifier for the selected XMSS signature method.
+ * @param idx_leaf Index of the next unused leaf.
+ * @param wots_priv_seed A seed to generate a Winternitz-One-Time-
+ * Signature private key from.
+ * @param prf a secret n-byte key sourced from a secure source
+ * of uniformly random data.
+ * @param root Root node of the binary hash tree.
+ * @param public_seed The public seed.
+ **/
+ XMSS_PrivateKey(XMSS_Parameters::xmss_algorithm_t xmss_algo_id,
+ size_t idx_leaf,
+ const secure_vector<byte>& wots_priv_seed,
+ const secure_vector<byte>& prf,
+ const secure_vector<byte>& root,
+ const secure_vector<byte>& public_seed)
+ : XMSS_PublicKey(xmss_algo_id, root, public_seed),
+ XMSS_Common_Ops(xmss_algo_id),
+ m_wots_priv_key(XMSS_PublicKey::m_xmss_params.ots_oid(),
+ public_seed,
+ wots_priv_seed),
+ m_prf(prf),
+ m_index_reg(XMSS_Index_Registry::get_instance())
+ {
+ set_unused_leaf_index(idx_leaf);
+ }
+
+ /**
+ * Retrieves the last unused leaf index of the private key. Reusing a leaf
+ * by utilizing leaf indices lower than the last unused leaf index will
+ * compromise security.
+ *
+ * @return Index of the last unused leaf.
+ **/
+ size_t unused_leaf_index() const
+ {
+ return *recover_global_leaf_index();
+ }
+
+ /**
+ * Sets the last unused leaf index of the private key. The leaf index
+ * will be updated automatically during every signing operation, and
+ * should not be set manually.
+ *
+ * @param idx Index of the last unused leaf.
+ **/
+ void set_unused_leaf_index(size_t idx)
+ {
+ if(idx >= (1ull << (XMSS_PublicKey::m_xmss_params.tree_height() - 1)))
+ {
+ throw Integrity_Failure("XMSS private key leaf index out of "
+ "bounds.");
+ }
+ else
+ {
+ std::atomic<size_t>& index =
+ static_cast<std::atomic<size_t>&>(*recover_global_leaf_index());
+ size_t current = 0;
+
+ do
+ {
+ current = index.load();
+ if(current > idx)
+ return;
+ }
+ while(!index.compare_exchange_strong(current, idx));
+ }
+ }
+
+ size_t reserve_unused_leaf_index()
+ {
+ size_t idx = (static_cast<std::atomic<size_t>&>(
+ *recover_global_leaf_index())).fetch_add(1);
+ if(idx >= (1ull << (XMSS_PublicKey::m_xmss_params.tree_height() - 1)))
+ {
+ throw Integrity_Failure("XMSS private key, one time signatures "
+ "exhausted.");
+ }
+ return idx;
+ }
+
+ /**
+ * Winternitz One Time Signature Scheme key utilized for signing
+ * operations.
+ *
+ * @return WOTS+ private key.
+ **/
+ const XMSS_WOTS_PrivateKey& wots_private_key() const
+ {
+ return m_wots_priv_key;
+ }
+
+ /**
+ * Winternitz One Time Signature Scheme key utilized for signing
+ * operations.
+ *
+ * @return WOTS+ private key.
+ **/
+ XMSS_WOTS_PrivateKey& wots_private_key()
+ {
+ return m_wots_priv_key;
+ }
+
+ const secure_vector<byte>& prf() const
+ {
+ return m_prf;
+ }
+
+ secure_vector<byte>& prf()
+ {
+ return m_prf;
+ }
+
+ virtual void set_public_seed(
+ const secure_vector<byte>& public_seed) override
+ {
+ m_public_seed = public_seed;
+ m_wots_priv_key.set_public_seed(public_seed);
+ }
+
+ virtual void set_public_seed(secure_vector<byte>&& public_seed) override
+ {
+ m_public_seed = std::move(public_seed);
+ m_wots_priv_key.set_public_seed(m_public_seed);
+ }
+
+ virtual const secure_vector<byte>& public_seed() const override
+ {
+ return m_public_seed;
+ }
+
+ virtual std::unique_ptr<PK_Ops::Signature>
+ create_signature_op(RandomNumberGenerator&,
+ const std::string&,
+ const std::string& provider) const override;
+
+ virtual secure_vector<byte> pkcs8_private_key() const override
+ {
+ return raw_private_key();
+ }
+
+ virtual size_t size() const override
+ {
+ return XMSS_PublicKey::size() +
+ sizeof(uint64_t) +
+ 2 * XMSS_PublicKey::m_xmss_params.element_size();
+ }
+
+ /**
+ * Generates a non standartized byte sequence representing the XMSS
+ * private key.
+ *
+ * @return byte sequence consisting of the following elements in order:
+ * 4-byte OID, n-byte root node, n-byte public seed,
+ * 8-byte unused leaf index, n-byte prf seed, n-byte private seed.
+ **/
+ virtual secure_vector<byte> raw_private_key() const;
+ /**
+ * Algorithm 9: "treeHash"
+ * Computes the internal n-byte nodes of a Merkle tree.
+ *
+ * @param start_idx The start index.
+ * @param target_node_height Height of the target node.
+ * @param adrs Address of the tree containing the target node.
+ *
+ * @return The root node of a tree of height target_node height with the
+ * leftmost leaf being the hash of the WOTS+ pk with index
+ * start_idx.
+ **/
+ secure_vector<byte> tree_hash(
+ size_t start_idx,
+ size_t target_node_height,
+ XMSS_Address& adrs);
+
+ private:
+ /**
+ * Fetches shared unused leaf index fromt the index registry
+ **/
+ std::shared_ptr<Atomic<size_t>> recover_global_leaf_index() const;
+
+ XMSS_WOTS_PrivateKey m_wots_priv_key;
+ secure_vector<byte> m_prf;
+ XMSS_Index_Registry& m_index_reg;
+ };
+
+}
+
+#endif
+
diff --git a/src/lib/pubkey/xmss/xmss_publickey.cpp b/src/lib/pubkey/xmss/xmss_publickey.cpp
new file mode 100644
index 000000000..4ec33e5f3
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_publickey.cpp
@@ -0,0 +1,93 @@
+/**
+ * XMSS Public Key
+ * An XMSS: Extended Hash-Based Siganture public key.
+ * The XMSS public key does not support the X509 standard. Instead the
+ * raw format described in [1] is used.
+ *
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ *
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/internal/xmss_verification_operation.h>
+#include <botan/xmss_publickey.h>
+
+namespace Botan {
+
+XMSS_PublicKey::XMSS_PublicKey(const secure_vector<byte>& raw_key)
+ : m_xmss_params(XMSS_PublicKey::deserialize_xmss_oid(raw_key)),
+ m_wots_params(m_xmss_params.ots_oid())
+ {
+ if(raw_key.size() < size())
+ {
+ throw Integrity_Failure("Invalid XMSS public key size detected.");
+ }
+
+ // extract & copy root from raw key.
+ m_root.clear();
+ m_root.reserve(m_xmss_params.element_size());
+ auto begin = raw_key.begin() + sizeof(uint32_t);
+ auto end = begin + m_xmss_params.element_size();
+ std::copy(begin, end, std::back_inserter(m_root));
+
+ // extract & copy public seed from raw key.
+ begin = end;
+ end = begin + m_xmss_params.element_size();
+ m_public_seed.clear();
+ m_public_seed.reserve(m_xmss_params.element_size());
+ std::copy(begin, end, std::back_inserter(m_public_seed));
+ }
+
+XMSS_Parameters::xmss_algorithm_t
+XMSS_PublicKey::deserialize_xmss_oid(const secure_vector<byte>& raw_key)
+ {
+ if(raw_key.size() < 4)
+ {
+ throw Integrity_Failure("XMSS signature OID missing.");
+ }
+
+ // extract and convert algorithm id to enum type
+ uint32_t raw_id = 0;
+ for(size_t i = 0; i < 4; i++)
+ raw_id = ((raw_id << 8) | raw_key[i]);
+
+ return static_cast<XMSS_Parameters::xmss_algorithm_t>(raw_id);
+ }
+
+std::unique_ptr<PK_Ops::Verification>
+XMSS_PublicKey::create_verification_op(const std::string&,
+ const std::string& provider) const
+ {
+ if(provider == "base" || provider.empty())
+ {
+ return std::unique_ptr<PK_Ops::Verification>(
+ new XMSS_Verification_Operation(*this));
+ }
+ throw Provider_Not_Found(algo_name(), provider);
+ }
+
+std::vector<byte> XMSS_PublicKey::raw_public_key() const
+ {
+ std::vector<byte> result
+ {
+ static_cast<byte>(m_xmss_params.oid() >> 24),
+ static_cast<byte>(m_xmss_params.oid() >> 16),
+ static_cast<byte>(m_xmss_params.oid() >> 8),
+ static_cast<byte>(m_xmss_params.oid())
+ };
+
+ std::copy(m_root.begin(), m_root.end(), std::back_inserter(result));
+ std::copy(m_public_seed.begin(),
+ m_public_seed.end(),
+ std::back_inserter(result));
+
+ return result;
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_publickey.h b/src/lib/pubkey/xmss/xmss_publickey.h
new file mode 100644
index 000000000..faa35d80a
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_publickey.h
@@ -0,0 +1,273 @@
+/**
+ * XMSS Public Key
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_PUBLICKEY_H__
+#define BOTAN_XMSS_PUBLICKEY_H__
+
+#include <cstddef>
+#include <iterator>
+#include <limits>
+#include <memory>
+#include <string>
+#include <botan/alg_id.h>
+#include <botan/asn1_oid.h>
+#include <botan/der_enc.h>
+#include <botan/assert.h>
+#include <botan/exceptn.h>
+#include <botan/rng.h>
+#include <botan/types.h>
+#include <botan/pk_keys.h>
+#include <botan/xmss_parameters.h>
+#include <botan/xmss_wots_parameters.h>
+#include <botan/internal/pk_ops.h>
+
+namespace Botan {
+
+class XMSS_Verification_Operation;
+
+/**
+ * An XMSS: Extended Hash-Based Signature public key.
+ * The XMSS public key does not support the X509 standard. Instead the
+ * raw format described in [1] is used.
+ *
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ **/
+class BOTAN_DLL XMSS_PublicKey : public virtual Public_Key
+ {
+ public:
+ /**
+ * Creates a new XMSS public key for the chosen XMSS signature method.
+ * New public and prf seeds are generated using rng. The appropriate WOTS
+ * signature method will be automatically set based on the chosen XMSS
+ * signature method.
+ *
+ * @param xmss_oid Identifier for the selected XMSS signature method.
+ * @param rng A random number generator to use for key generation.
+ **/
+ XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid,
+ RandomNumberGenerator& rng)
+ : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
+ m_root(m_xmss_params.element_size()),
+ m_public_seed(rng.random_vec(m_xmss_params.element_size())) {}
+
+ /**
+ * Creates an XMSS public key from a byte sequence produced by
+ * raw_private_key().
+ **/
+ XMSS_PublicKey(const secure_vector<byte>& raw_key);
+
+ /**
+ * Creates a new XMSS public key for a chosen XMSS signature method as
+ * well as pre-computed root node and public_seed values.
+ *
+ * @param xmss_oid Identifier for the selected XMSS signature method.
+ * @param root Root node value.
+ * @param public_seed Public seed value.
+ **/
+ XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid,
+ const secure_vector<byte>& root,
+ const secure_vector<byte>& public_seed)
+ : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
+ m_root(root), m_public_seed(public_seed) {}
+
+ /**
+ * Creates a new XMSS public key for a chosen XMSS signature method as
+ * well as pre-computed root node and public_seed values.
+ *
+ * @param xmss_oid Identifier for the selected XMSS signature method.
+ * @param root Root node value.
+ * @param public_seed Public seed value.
+ **/
+ XMSS_PublicKey(XMSS_Parameters::xmss_algorithm_t xmss_oid,
+ secure_vector<byte>&& root,
+ secure_vector<byte>&& public_seed)
+ : m_xmss_params(xmss_oid), m_wots_params(m_xmss_params.ots_oid()),
+ m_root(std::move(root)), m_public_seed(std::move(public_seed)) {}
+
+ /**
+ * Retrieves the chosen XMSS signature method.
+ *
+ * @return XMSS signature method identifier.
+ **/
+ XMSS_Parameters::xmss_algorithm_t xmss_oid() const
+ {
+ return m_xmss_params.oid();
+ }
+
+ /**
+ * Sets the chosen XMSS signature method
+ *
+ * @return XMSS signature method identifier.
+ **/
+ void set_xmss_oid(XMSS_Parameters::xmss_algorithm_t xmss_oid)
+ {
+ m_xmss_params = XMSS_Parameters(xmss_oid);
+ m_wots_params = XMSS_WOTS_Parameters(m_xmss_params.ots_oid());
+ }
+
+ /**
+ * Retrieves the XMSS parameters determined by the chosen XMSS Signature
+ * method.
+ *
+ * @return XMSS parameters.
+ **/
+ const XMSS_Parameters& xmss_parameters() const
+ {
+ return m_xmss_params;
+ }
+
+ /**
+ * Retrieves the Winternitz One Time Signature (WOTS) method,
+ * corrseponding to the chosen XMSS signature method.
+ *
+ * @return XMSS WOTS signature method identifier.
+ **/
+ XMSS_WOTS_Parameters::ots_algorithm_t wots_oid() const
+ {
+ return m_wots_params.oid();
+ }
+
+ /**
+ * Retrieves the Winternitz One Time Signature (WOTS) parameters
+ * corrseponding to the chosen XMSS signature method.
+ *
+ * @return XMSS WOTS signature method parameters.
+ **/
+ const XMSS_WOTS_Parameters& wots_parameters() const
+ {
+ return m_wots_params;
+ }
+
+ secure_vector<byte>& root()
+ {
+ return m_root;
+ }
+
+ void set_root(const secure_vector<byte>& root)
+ {
+ m_root = root;
+ }
+
+ void set_root(secure_vector<byte>&& root)
+ {
+ m_root = std::move(root);
+ }
+
+ const secure_vector<byte>& root() const
+ {
+ return m_root;
+ }
+
+ virtual secure_vector<byte>& public_seed()
+ {
+ return m_public_seed;
+ }
+
+ virtual void set_public_seed(const secure_vector<byte>& public_seed)
+ {
+ m_public_seed = public_seed;
+ }
+
+ virtual void set_public_seed(secure_vector<byte>&& public_seed)
+ {
+ m_public_seed = std::move(public_seed);
+ }
+
+ virtual const secure_vector<byte>& public_seed() const
+ {
+ return m_public_seed;
+ }
+
+ std::string algo_name() const override
+ {
+ return "XMSS";
+ }
+
+ virtual AlgorithmIdentifier algorithm_identifier() const override
+ {
+ return AlgorithmIdentifier(get_oid(), AlgorithmIdentifier::USE_NULL_PARAM);
+ }
+
+ virtual bool check_key(RandomNumberGenerator&, bool) const override
+ {
+ BOTAN_ASSERT(false, "No key strength check implemented for XMSS.");
+ }
+
+ virtual std::unique_ptr<PK_Ops::Verification>
+ create_verification_op(const std::string&,
+ const std::string& provider) const override;
+
+ virtual size_t estimated_strength() const override
+ {
+ return m_xmss_params.estimated_strength();
+ }
+
+ virtual size_t max_input_bits() const override
+ {
+ return std::numeric_limits<size_t>::infinity();
+ }
+
+ virtual size_t message_part_size() const override
+ {
+ return std::numeric_limits<size_t>::infinity();
+ }
+
+ virtual size_t message_parts() const override
+ {
+ return std::numeric_limits<size_t>::infinity();
+ }
+
+ /**
+ * Currently x509 is not suppoerted for XMSS. x509_subject_public_key()
+ * returns a raw byte sequence as defined in [1]. This method acts as
+ * alias for raw_public_key().
+ *
+ * @return raw non x509 compliant public key.
+ **/
+ virtual std::vector<byte> x509_subject_public_key() const override
+ {
+ return raw_public_key();
+ }
+
+ /**
+ * Size in bytes of the serialized XMSS public key produced by
+ * raw_public_key().
+ *
+ * @return size in bytes of serialized Public Key.
+ **/
+ virtual size_t size() const
+ {
+ return sizeof(uint32_t) + 2 * m_xmss_params.element_size();
+ }
+
+ /**
+ * Generates a non standartized byte sequence representing the XMSS
+ * public key, as defined in [1] (p. 23, "XMSS Public Key")
+ *
+ * @return 4-byte OID, followed by n-byte root node, followed by
+ * public seed.
+ **/
+ virtual std::vector<byte> raw_public_key() const;
+
+ protected:
+ XMSS_Parameters m_xmss_params;
+ XMSS_WOTS_Parameters m_wots_params;
+ secure_vector<byte> m_root;
+ secure_vector<byte> m_public_seed;
+
+ private:
+ XMSS_Parameters::xmss_algorithm_t deserialize_xmss_oid(
+ const secure_vector<byte>& raw_key);
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_signature.cpp b/src/lib/pubkey/xmss/xmss_signature.cpp
new file mode 100644
index 000000000..f31dcd8bb
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_signature.cpp
@@ -0,0 +1,96 @@
+/**
+ * XMSS Signature
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/internal/xmss_signature.h>
+
+namespace Botan {
+
+XMSS_Signature::XMSS_Signature(XMSS_Parameters::xmss_algorithm_t oid,
+ const secure_vector<byte>& raw_sig)
+ : m_leaf_idx(0), m_randomness(0, 0x00), m_tree_sig()
+ {
+ BOTAN_ASSERT(sizeof(size_t) >= ceil(static_cast<float>(
+ (XMSS_Parameters(oid)).tree_height()) / 8.f),
+ "System type \"size_t\" not big enough to support"
+ " leaf index.");
+
+ XMSS_Parameters xmss_params(oid);
+ uint64_t leaf_idx = 0;
+ for(size_t i = 0; i < 8; i++)
+ leaf_idx = ((leaf_idx << 8) | raw_sig[i]);
+
+ if(leaf_idx >= (1ull << (xmss_params.tree_height() - 1)))
+ {
+ throw Integrity_Failure("XMSS signature leaf index out of "
+ "bounds.");
+ }
+ m_leaf_idx = static_cast<size_t>(leaf_idx);
+
+ auto begin = raw_sig.begin() + sizeof(uint64_t);
+ auto end = begin + xmss_params.element_size();
+ std::copy(begin, end, std::back_inserter(m_randomness));
+
+ for(size_t i = 0; i < xmss_params.len(); i++)
+ {
+ begin = end;
+ end = begin + xmss_params.element_size();
+ m_tree_sig.ots_signature().push_back(secure_vector<byte>(0));
+ m_tree_sig.ots_signature().back().reserve(
+ xmss_params.element_size());
+ std::copy(begin,
+ end,
+ std::back_inserter(m_tree_sig.ots_signature().back()));
+ }
+
+ for(size_t i = 0; i < xmss_params.tree_height(); i++)
+ {
+ begin = end;
+ end = begin + xmss_params.element_size();
+ m_tree_sig.authentication_path().push_back(secure_vector<byte>(0));
+ m_tree_sig.authentication_path().back().reserve(
+ xmss_params.element_size());
+ std::copy(begin,
+ end,
+ std::back_inserter(m_tree_sig.authentication_path().back()));
+ }
+ }
+
+secure_vector<byte> XMSS_Signature::bytes() const
+ {
+ secure_vector<byte> result
+ {
+ static_cast<byte>(static_cast<uint64_t>(m_leaf_idx) >> 56U),
+ static_cast<byte>(static_cast<uint64_t>(m_leaf_idx) >> 48U),
+ static_cast<byte>(static_cast<uint64_t>(m_leaf_idx) >> 40U),
+ static_cast<byte>(static_cast<uint64_t>(m_leaf_idx) >> 32U),
+ static_cast<byte>(static_cast<uint64_t>(m_leaf_idx) >> 24U),
+ static_cast<byte>(static_cast<uint64_t>(m_leaf_idx) >> 16U),
+ static_cast<byte>(static_cast<uint64_t>(m_leaf_idx) >> 8U),
+ static_cast<byte>(static_cast<uint64_t>(m_leaf_idx) )
+ };
+
+ std::copy(m_randomness.begin(),
+ m_randomness.end(),
+ std::back_inserter(result));
+
+ for(const auto& sig : tree().ots_signature())
+ {
+ std::copy(sig.begin(),
+ sig.end(),
+ std::back_inserter(result));
+ }
+
+ for(const auto& auth : tree().authentication_path())
+ {
+ std::copy(auth.begin(),
+ auth.end(),
+ std::back_inserter(result));
+ }
+ return result;
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_signature.h b/src/lib/pubkey/xmss/xmss_signature.h
new file mode 100644
index 000000000..3194ad28c
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_signature.h
@@ -0,0 +1,128 @@
+/**
+ * XMSS Signature
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_SIGNATURE_H__
+#define BOTAN_XMSS_SIGNATURE_H__
+
+#include <cstddef>
+#include <iterator>
+#include <botan/exceptn.h>
+#include <botan/types.h>
+#include <botan/secmem.h>
+#include <botan/xmss_parameters.h>
+#include <botan/xmss_wots_publickey.h>
+
+namespace Botan {
+
+class BOTAN_DLL XMSS_Signature
+ {
+ public:
+ /**
+ * Creates a signature from an XMSS signature method and a byte sequence
+ * representing a raw signature.
+ *
+ * @param oid XMSS signature method
+ * @param raw_sig An XMSS signature serialized using
+ * XMSS_Signature::bytes().
+ **/
+ XMSS_Signature(XMSS_Parameters::xmss_algorithm_t oid,
+ const secure_vector<byte>& raw_sig);
+
+ /**
+ * Creates an XMSS Signature from a leaf index used for signature
+ * generation, a random value and a tree signature.
+ *
+ * @param leaf_idx Leaf index used to generate the signature.
+ * @param randomness A random value.
+ * @param tree_sig A tree signature.
+ **/
+ XMSS_Signature(size_t leaf_idx,
+ const secure_vector<byte>& randomness,
+ const XMSS_WOTS_PublicKey::TreeSignature& tree_sig)
+ : m_leaf_idx(leaf_idx), m_randomness(randomness),
+ m_tree_sig(tree_sig) {};
+
+ /**
+ * Creates an XMSS Signature from a leaf index used for signature
+ * generation, a random value and a tree signature.
+ *
+ * @param leaf_idx Leaf index used to generate the signature.
+ * @param randomness A random value.
+ * @param tree_sig A tree signature.
+ **/
+ XMSS_Signature(size_t leaf_idx,
+ secure_vector<byte>&& randomness,
+ XMSS_WOTS_PublicKey::TreeSignature&& tree_sig)
+ : m_leaf_idx(leaf_idx), m_randomness(std::move(randomness)),
+ m_tree_sig(std::move(tree_sig)) {};
+
+ size_t unused_leaf_index() const { return m_leaf_idx; }
+ void set_unused_leaf_idx(size_t idx) { m_leaf_idx = idx; }
+
+ const secure_vector<byte> randomness() const
+ {
+ return m_randomness;
+ }
+
+ secure_vector<byte>& randomness()
+ {
+ return m_randomness;
+ }
+
+ void set_randomness(const secure_vector<byte>& randomness)
+ {
+ m_randomness = randomness;
+ }
+
+ void set_randomness(secure_vector<byte>&& randomness)
+ {
+ m_randomness = std::move(randomness);
+ }
+
+ const XMSS_WOTS_PublicKey::TreeSignature& tree() const
+ {
+ return m_tree_sig;
+ }
+
+ XMSS_WOTS_PublicKey::TreeSignature& tree()
+ {
+ return m_tree_sig;
+ }
+
+ void set_tree(const XMSS_WOTS_PublicKey::TreeSignature& tree_sig)
+ {
+ m_tree_sig = tree_sig;
+ }
+
+ void set_tree(XMSS_WOTS_PublicKey::TreeSignature&& tree_sig)
+ {
+ m_tree_sig = std::move(tree_sig);
+ }
+
+ /**
+ * Generates a serialized representation of XMSS Signature by
+ * concatenating the following elements in order:
+ * 8-byte leaf index, n-bytes randomness, ots_signature,
+ * authentication path.
+ *
+ * n is the element_size(), len equal to len(), h the tree height
+ * defined by the chosen XMSS signature method.
+ *
+ * @return serialized signature, a sequence of
+ * (len + h + 1)n bytes.
+ **/
+ secure_vector<byte> bytes() const;
+
+ private:
+ size_t m_leaf_idx;
+ secure_vector<byte> m_randomness;
+ XMSS_WOTS_PublicKey::TreeSignature m_tree_sig;
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_signature_operation.cpp b/src/lib/pubkey/xmss/xmss_signature_operation.cpp
new file mode 100644
index 000000000..d223ddef0
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_signature_operation.cpp
@@ -0,0 +1,112 @@
+/**
+ * XMSS Signature Operation
+ * Signature generation operation for Extended Hash-Based Signatures (XMSS) as
+ * defined in:
+ *
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ *
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/internal/xmss_signature_operation.h>
+
+namespace Botan {
+
+XMSS_Signature_Operation::XMSS_Signature_Operation(
+ const XMSS_PrivateKey& private_key)
+ : XMSS_Common_Ops(private_key.xmss_oid()),
+ m_priv_key(private_key),
+ m_randomness(0),
+ m_leaf_idx(0),
+ m_is_initialized(false)
+ {}
+
+XMSS_WOTS_PublicKey::TreeSignature
+XMSS_Signature_Operation::generate_tree_signature(const secure_vector<byte>& msg,
+ XMSS_PrivateKey& xmss_priv_key,
+ XMSS_Address& adrs)
+ {
+
+ wots_keysig_t auth_path = build_auth_path(xmss_priv_key, adrs);
+ adrs.set_type(XMSS_Address::Type::OTS_Hash_Address);
+ adrs.set_ots_address(m_leaf_idx);
+
+ wots_keysig_t sig_ots = xmss_priv_key.wots_private_key().sign(msg, adrs);
+ return XMSS_WOTS_PublicKey::TreeSignature(sig_ots, auth_path);
+ }
+
+XMSS_Signature
+XMSS_Signature_Operation::sign(const secure_vector<byte>& msg_hash,
+ XMSS_PrivateKey& xmss_priv_key)
+ {
+ XMSS_Address adrs;
+ XMSS_Signature sig(m_leaf_idx,
+ m_randomness,
+ generate_tree_signature(msg_hash, xmss_priv_key,adrs));
+ return sig;
+ }
+
+wots_keysig_t
+XMSS_Signature_Operation::build_auth_path(XMSS_PrivateKey& priv_key,
+ XMSS_Address& adrs)
+ {
+ wots_keysig_t auth_path(m_xmss_params.tree_height());
+ adrs.set_type(XMSS_Address::Type::Hash_Tree_Address);
+
+ for(size_t j = 0; j < m_xmss_params.tree_height(); j++)
+ {
+ size_t k = (m_leaf_idx / (1 << j)) ^ 0x01;
+ auth_path[j] = priv_key.tree_hash(k * (1 << j), j, adrs);
+ }
+
+ return auth_path;
+ }
+
+void XMSS_Signature_Operation::update(const byte msg[], size_t msg_len)
+ {
+ initialize();
+ m_hash.h_msg_update(msg, msg_len);
+ }
+
+
+secure_vector<byte>
+XMSS_Signature_Operation::sign(RandomNumberGenerator&)
+ {
+ initialize();
+ secure_vector<byte> signature(sign(m_hash.h_msg_final(),
+ m_priv_key).bytes());
+ m_is_initialized = false;
+ return signature;
+ }
+
+void XMSS_Signature_Operation::initialize()
+ {
+ // return if we already initialized and reserved a leaf index for signing.
+ if(m_is_initialized)
+ return;
+
+ secure_vector<byte> index_bytes;
+ // reserve leaf index so it can not be reused in by another signature
+ // operation using the same private key.
+ m_leaf_idx = m_priv_key.reserve_unused_leaf_index();
+
+ // write prefix for message hashing into buffer.
+ XMSS_Tools::get().concat(index_bytes, m_leaf_idx, 32);
+ m_randomness = m_hash.prf(m_priv_key.prf(), index_bytes);
+ index_bytes.clear();
+ XMSS_Tools::get().concat(index_bytes, m_leaf_idx,
+ m_priv_key.xmss_parameters().element_size());
+ m_hash.h_msg_init(m_randomness,
+ m_priv_key.root(),
+ index_bytes);
+ m_is_initialized = true;
+ }
+
+}
+
diff --git a/src/lib/pubkey/xmss/xmss_signature_operation.h b/src/lib/pubkey/xmss/xmss_signature_operation.h
new file mode 100644
index 000000000..da84abdbc
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_signature_operation.h
@@ -0,0 +1,107 @@
+/**
+ * XMSS Signature Operation
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_SIGNATURE_OPERATION_H__
+#define BOTAN_XMSS_SIGNATURE_OPERATION_H__
+
+#include <cstddef>
+#include <string>
+#include <botan/secmem.h>
+#include <botan/types.h>
+#include <botan/assert.h>
+#include <botan/xmss_parameters.h>
+#include <botan/xmss_privatekey.h>
+#include <botan/xmss_address.h>
+#include <botan/xmss_common_ops.h>
+#include <botan/internal/pk_ops.h>
+#include <botan/internal/xmss_signature.h>
+#include <botan/xmss_wots_publickey.h>
+
+namespace Botan {
+
+/**
+ * Signature generation operation for Extended Hash-Based Signatures (XMSS) as
+ * defined in:
+ *
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ **/
+class BOTAN_DLL XMSS_Signature_Operation : public virtual PK_Ops::Signature,
+ public XMSS_Common_Ops
+ {
+ public:
+ typedef XMSS_PrivateKey Key_Type;
+
+ XMSS_Signature_Operation(const XMSS_PrivateKey& private_key);
+ virtual ~XMSS_Signature_Operation() {}
+
+ virtual size_t message_part_size() const override
+ {
+ return m_priv_key.message_part_size();
+ }
+
+ virtual size_t message_parts() const override
+ {
+ return m_priv_key.message_parts();
+ }
+
+ /**
+ * Creates an XMSS signature for the message provided through call to
+ * update().
+ *
+ * @return serialized XMSS signature.
+ **/
+ secure_vector<byte> sign(RandomNumberGenerator&) override;
+
+ void update(const byte msg[], size_t msg_len) override;
+
+ private:
+ /**
+ * Algorithm 11: "treeSig"
+ * Generate a WOTS+ signature on a message with corresponding auth path.
+ *
+ * @param msg A message.
+ * @param xmss_priv_key A XMSS private key.
+ * @param adrs A XMSS Address.
+ **/
+ XMSS_WOTS_PublicKey::TreeSignature generate_tree_signature(
+ const secure_vector<byte>& msg,
+ XMSS_PrivateKey& xmss_priv_key,
+ XMSS_Address& adrs);
+
+ /**
+ * Algorithm 12: "XMSS_sign"
+ * Generate an XMSS signature and update the XMSS secret key
+ *
+ * @param msg A message to sign of arbitrary length.
+ * @param [out] xmss_priv_key A XMSS private key. The private key will be
+ * updated during the signing process.
+ *
+ * @return The signature of msg signed using xmss_priv_key.
+ **/
+ XMSS_Signature sign(
+ const secure_vector<byte>& msg,
+ XMSS_PrivateKey& xmss_priv_key);
+
+ wots_keysig_t build_auth_path(XMSS_PrivateKey& priv_key,
+ XMSS_Address& adrs);
+
+ void initialize();
+
+ XMSS_PrivateKey m_priv_key;
+ secure_vector<byte> m_randomness;
+ size_t m_leaf_idx;
+ bool m_is_initialized;
+ };
+
+}
+
+#endif
+
diff --git a/src/lib/pubkey/xmss/xmss_tools.cpp b/src/lib/pubkey/xmss/xmss_tools.cpp
new file mode 100644
index 000000000..13e66759c
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_tools.cpp
@@ -0,0 +1,32 @@
+/**
+ * XMSS Tools
+ * Contains some helper functions.
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+#include <botan/xmss_tools.h>
+
+namespace Botan {
+
+XMSS_Tools::XMSS_Tools()
+ {
+#if defined(BOTAN_TARGET_CPU_HAS_KNOWN_ENDIANESS)
+#if defined(BOTAN_TARGET_CPU_IS_LITTLE_ENDIAN)
+ m_is_little_endian = true;
+#else
+ m_is_little_endian = false;
+#endif
+#else
+ uint16_t data = 0x01;
+ m_is_little_endian = reinterpret_cast<const byte*>(&data)[0] == 0x01;
+#endif
+ }
+
+const XMSS_Tools& XMSS_Tools::get()
+ {
+ static const XMSS_Tools self;
+ return self;
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_tools.h b/src/lib/pubkey/xmss/xmss_tools.h
new file mode 100644
index 000000000..07e36ea71
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_tools.h
@@ -0,0 +1,111 @@
+/**
+ * XMSS Address
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_TOOLS_H__
+#define BOTAN_XMSS_TOOLS_H__
+
+#include <stdint.h>
+#include <iterator>
+#include <type_traits>
+#include <botan/types.h>
+#include <botan/secmem.h>
+
+namespace Botan {
+
+/**
+ * Helper tools for low level byte operations required
+ * for the XMSS implementation.
+ **/
+ class XMSS_Tools
+ {
+ public:
+ XMSS_Tools(const XMSS_Tools&) = delete;
+ void operator=(const XMSS_Tools&) = delete;
+
+ static const XMSS_Tools& get();
+
+ /**
+ * Retrieves information about endianess
+ *
+ * @return true if machine uses little-endian byte order, false
+ * otherwise.
+ **/
+ inline bool is_little_endian() const { return m_is_little_endian; }
+
+ /**
+ * Concatenates the byte representation in big-endian order of any
+ * integral value to a secure_vector.
+ *
+ * @param target Vector to concatenate the byte representation of the
+ * integral value to.
+ * @param src integral value to concatenate.
+ **/
+ template<typename T,
+ typename U = typename std::enable_if<std::is_integral<T>::value,
+ void>::type>
+ void concat(secure_vector<byte>& target, const T& src) const;
+
+ /**
+ * Concatenates the last n bytes of the byte representation in big-endian
+ * order of any integral value to a to a secure_vector.
+ *
+ * @param target Vector to concatenate the byte representation of the
+ * integral value to.
+ * @param src Integral value to concatenate.
+ * @param len number of bytes to concatenate. This value must be smaller
+ * or equal to the size of type T.
+ **/
+ template <typename T,
+ typename U = typename std::enable_if<std::is_integral<T>::value,
+ void>::type>
+ void concat(secure_vector<byte>& target, const T& src, size_t len) const;
+
+ private:
+ XMSS_Tools();
+
+ bool m_is_little_endian;
+ };
+
+template <typename T, typename U>
+void XMSS_Tools::concat(secure_vector<byte>& target, const T& src) const
+ {
+ const byte* src_bytes = reinterpret_cast<const byte*>(&src);
+ if(is_little_endian())
+ std::reverse_copy(src_bytes,
+ src_bytes + sizeof(src),
+ std::back_inserter(target));
+ else
+ std::copy(src_bytes,
+ src_bytes + sizeof(src),
+ std::back_inserter(target));
+ }
+
+
+template <typename T, typename U>
+void XMSS_Tools::concat(secure_vector<byte>& target,
+ const T& src,
+ size_t len) const
+ {
+ size_t c = static_cast<size_t>(std::min(len, sizeof(src)));
+ if(len > sizeof(src))
+ {
+ target.resize(target.size() + len - sizeof(src), 0);
+ }
+
+ const byte* src_bytes = reinterpret_cast<const byte*>(&src);
+ if(is_little_endian())
+ std::reverse_copy(src_bytes,
+ src_bytes + c,
+ std::back_inserter(target));
+ else
+ std::copy(src_bytes + sizeof(src) - c,
+ src_bytes + sizeof(src),
+ std::back_inserter(target));
+ }
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_verification_operation.cpp b/src/lib/pubkey/xmss/xmss_verification_operation.cpp
new file mode 100644
index 000000000..20945e8ca
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_verification_operation.cpp
@@ -0,0 +1,128 @@
+/**
+ * XMSS Verification Operation
+ * Provides signature verification capabilities for Extended Hash-Based
+ * Signatures (XMSS).
+ *
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/internal/xmss_verification_operation.h>
+
+namespace Botan {
+
+XMSS_Verification_Operation::XMSS_Verification_Operation(
+ const XMSS_PublicKey& public_key)
+ : XMSS_Common_Ops(public_key.xmss_oid()),
+ m_pub_key(public_key),
+ m_msg_buf(0)
+ {
+ }
+
+secure_vector<byte>
+XMSS_Verification_Operation::root_from_signature(const XMSS_Signature& sig,
+ const secure_vector<byte>& msg,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& seed)
+ {
+ adrs.set_type(XMSS_Address::Type::OTS_Hash_Address);
+ adrs.set_ots_address(sig.unused_leaf_index());
+
+ XMSS_WOTS_PublicKey pub_key_ots(m_pub_key.wots_parameters().oid(),
+ msg,
+ sig.tree().ots_signature(),
+ adrs,
+ seed);
+
+ adrs.set_type(XMSS_Address::Type::LTree_Address);
+ adrs.set_ltree_address(sig.unused_leaf_index());
+
+ std::array<secure_vector<byte>, 2> node;
+ create_l_tree(node[0], pub_key_ots, adrs, seed);
+
+ adrs.set_type(XMSS_Address::Type::Hash_Tree_Address);
+ adrs.set_tree_index(sig.unused_leaf_index());
+
+ for(size_t k = 0; k < m_xmss_params.tree_height(); k++)
+ {
+ adrs.set_tree_height(k);
+ if(((sig.unused_leaf_index() / (1 << k)) & 0x01) == 0)
+ {
+ adrs.set_tree_index(adrs.get_tree_index() >> 1);
+ randomize_tree_hash(node[1],
+ node[0],
+ sig.tree().authentication_path()[k],
+ adrs,
+ seed);
+ }
+ else
+ {
+ adrs.set_tree_index((adrs.get_tree_index() - 1) >> 1);
+ randomize_tree_hash(node[1],
+ sig.tree().authentication_path()[k],
+ node[0],
+ adrs,
+ seed);
+ }
+ node[0] = node[1];
+ }
+ return node[0];
+ }
+
+bool
+XMSS_Verification_Operation::verify(const XMSS_Signature& sig,
+ const secure_vector<byte>& msg,
+ const XMSS_PublicKey& public_key)
+ {
+ XMSS_Address adrs;
+ secure_vector<byte> index_bytes;
+ XMSS_Tools::get().concat(index_bytes,
+ sig.unused_leaf_index(),
+ m_xmss_params.element_size());
+ secure_vector<byte> msg_digest =
+ m_hash.h_msg(sig.randomness(),
+ public_key.root(),
+ index_bytes,
+ msg);
+
+ secure_vector<byte> node = root_from_signature(sig,
+ msg_digest,
+ adrs,
+ public_key.public_seed());
+
+ return (node == public_key.root());
+ }
+
+// FIXME: XMSS signature verification requires the "randomness" parameter out
+// of the XMSS signature, which is part of the prefix that is hashed before
+// msg. Since the signature is unknown till sign() is called all message
+// content has to be buffered. For large messages this can be inconvenient or
+// impossible.
+// Possible solution: Change PK_Ops::Verification interface to take the
+// signature as constructor argument, make sign a parameterless member call.
+void XMSS_Verification_Operation::update(const byte msg[], size_t msg_len)
+ {
+ std::copy(msg, msg + msg_len, std::back_inserter(m_msg_buf));
+ }
+
+bool XMSS_Verification_Operation::is_valid_signature(const byte sig[],
+ size_t sig_len)
+ {
+ try
+ {
+ XMSS_Signature signature(m_pub_key.xmss_parameters().oid(),
+ secure_vector<byte>(sig, sig + sig_len));
+ bool result = verify(signature, m_msg_buf, m_pub_key);
+ m_msg_buf.clear();
+ return result;
+ }
+ catch(Integrity_Failure& e)
+ {
+ m_msg_buf.clear();
+ return false;
+ }
+ }
+
+}
+
diff --git a/src/lib/pubkey/xmss/xmss_verification_operation.h b/src/lib/pubkey/xmss/xmss_verification_operation.h
new file mode 100644
index 000000000..6759e3d43
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_verification_operation.h
@@ -0,0 +1,99 @@
+/**
+ * XMSS Verification Operation
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_VERIFICATION_OPERATION_H__
+#define BOTAN_XMSS_VERIFICATION_OPERATION_H__
+
+#include <array>
+#include <cstddef>
+#include <iterator>
+#include <string>
+#include <botan/assert.h>
+#include <botan/types.h>
+#include <botan/xmss_publickey.h>
+#include <botan/xmss_common_ops.h>
+#include <botan/internal/pk_ops.h>
+#include <botan/internal/xmss_signature.h>
+
+namespace Botan {
+
+/**
+ * Provides signature verification capabilities for Extended Hash-Based
+ * Signatures (XMSS).
+ **/
+ class BOTAN_DLL XMSS_Verification_Operation
+ : public virtual PK_Ops::Verification,
+ public XMSS_Common_Ops
+ {
+ public:
+ typedef XMSS_PublicKey Key_Type;
+
+ XMSS_Verification_Operation(
+ const XMSS_PublicKey& public_key);
+
+ virtual ~XMSS_Verification_Operation() {}
+
+ virtual size_t max_input_bits() const override
+ {
+ return m_pub_key.max_input_bits();
+ }
+
+ virtual size_t message_part_size() const override
+ {
+ return m_pub_key.message_part_size();
+ }
+
+ virtual size_t message_parts() const override
+ {
+ return m_pub_key.message_parts();
+ }
+
+ virtual bool is_valid_signature(const byte sig[],
+ size_t sig_len) override;
+
+ void update(const byte msg[], size_t msg_len) override;
+
+ private:
+ /**
+ * Algorithm 13: "XMSS_rootFromSig"
+ * Computes a root node using an XMSS signature, a message and a seed.
+ *
+ * @param msg A message.
+ * @param sig The XMSS signature for msg.
+ * @param adrs A XMSS tree address.
+ * @param seed A seed.
+ *
+ * @return An n-byte string holding the value of the root of a tree
+ * defined by the input parameters.
+ **/
+ secure_vector<byte> root_from_signature(
+ const XMSS_Signature& sig,
+ const secure_vector<byte>& msg,
+ XMSS_Address& ards,
+ const secure_vector<byte>& seed);
+
+ /**
+ * Algorithm 14: "XMSS_verify"
+ * Verifies a XMSS signature using the corresponding XMSS public key.
+ *
+ * @param sig A XMSS signature.
+ * @param msg The message signed with sig.
+ * @paeam pub_key
+ *
+ * @return true if signature sig is valid for msg, false otherwise.
+ **/
+ bool verify(const XMSS_Signature& sig,
+ const secure_vector<byte>& msg,
+ const XMSS_PublicKey& pub_key);
+
+ XMSS_PublicKey m_pub_key;
+ secure_vector<byte> m_msg_buf;
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_wots_parameters.cpp b/src/lib/pubkey/xmss/xmss_wots_parameters.cpp
new file mode 100644
index 000000000..b908afeb4
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_wots_parameters.cpp
@@ -0,0 +1,130 @@
+/**
+ * XMSS WOTS Parameters
+ * Descibes a signature method for XMSS Winternitz One Time Signatures,
+ * as defined in:
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ *
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/xmss_wots_parameters.h>
+
+namespace Botan {
+
+const std::map<std::string, XMSS_WOTS_Parameters::ots_algorithm_t>
+ XMSS_WOTS_Parameters::m_oid_name_lut =
+ {
+ { "WOTSP_SHA2-256_W16", WOTSP_SHA2_256_W16 },
+ { "WOTSP_SHA2-512_W16", WOTSP_SHA2_512_W16 }
+ };
+
+XMSS_WOTS_Parameters::XMSS_WOTS_Parameters(const std::string& algo_name)
+ : XMSS_WOTS_Parameters(m_oid_name_lut.at(algo_name))
+ {}
+
+XMSS_WOTS_Parameters::XMSS_WOTS_Parameters(ots_algorithm_t oid)
+ : m_oid(oid)
+ {
+ switch(oid)
+ {
+ case WOTSP_SHA2_256_W16:
+ m_element_size = 32;
+ m_w = 16;
+ m_len = 67;
+ m_name = "WOTSP_SHA2-256_W16";
+ m_hash_name = "SHA-256";
+ m_strength = 256;
+ break;
+ case WOTSP_SHA2_512_W16:
+ m_element_size = 64;
+ m_w = 16;
+ m_len = 131;
+ m_name = "WOTSP_SHA2-512_W16";
+ m_hash_name = "SHA-512";
+ m_strength = 512;
+ break;
+// FIXME: Uncomment once SHAKE128/256 implementation is available in Botan.
+// case WOTSP_SHAKE128_W16:
+// m_element_size = 32;
+// m_w = 16;
+// m_len = 67;
+// m_name = "WOTSP_SHAKE128_W16";
+// m_hash_name = "<MISSING>";
+// m_strength = 256;
+// break;
+// case WOTSP_SHAKE256_W16:
+// m_element_size = 64;
+// m_w = 16;
+// m_len = 131;
+// m_name = "WOTSP_SHAKE256_W16";
+// m_hash_name = "<MISSING>";
+// m_strength = 512;
+// break;
+ default:
+ throw Unsupported_Argument(
+ "Algorithm id does not match any XMSS WOTS algorithm id.");
+ break;
+ }
+
+ m_w == 16 ? m_lg_w = 4 : m_lg_w = 2;
+ m_len_1 = static_cast<size_t>(ceil((8 * element_size()) / m_lg_w));
+ m_len_2 = static_cast<size_t>(
+ floor(log2(m_len_1 * (wots_parameter() - 1)) / m_lg_w) + 1);
+ BOTAN_ASSERT(m_len == m_len_1 + m_len_2, "Invalid XMSS WOTS parameter "
+ "\"len\" detedted.");
+ }
+
+secure_vector<byte>
+XMSS_WOTS_Parameters::base_w(const secure_vector<byte>& msg, size_t out_size) const
+ {
+ secure_vector<byte> result;
+ size_t in = 0;
+ size_t total = 0;
+ size_t bits = 0;
+
+ for(size_t i = 0; i < out_size; i++)
+ {
+ if(bits == 0)
+ {
+ total = msg[in];
+ in++;
+ bits += 8;
+ }
+ bits -= m_lg_w;
+ result.push_back(static_cast<byte>((total >> bits) & (m_w - 1)));
+ }
+ return result;
+ }
+
+secure_vector<byte>
+XMSS_WOTS_Parameters::base_w(size_t value) const
+ {
+ value <<= (8 - ((m_len_2 * m_lg_w) % 8));
+ size_t len_2_bytes = static_cast<size_t>(
+ ceil(static_cast<float>(m_len_2 * m_lg_w) / 8.f));
+ secure_vector<byte> result;
+ XMSS_Tools::get().concat(result, value, len_2_bytes);
+ return base_w(result, m_len_2);
+ }
+
+void
+XMSS_WOTS_Parameters::append_checksum(secure_vector<byte>& data)
+ {
+ size_t csum = 0;
+
+ for(size_t i = 0; i < data.size(); i++)
+ {
+ csum += wots_parameter() - 1 - data[i];
+ }
+
+ secure_vector<byte> csum_bytes = base_w(csum);
+ std::move(csum_bytes.begin(), csum_bytes.end(), std::back_inserter(data));
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_wots_parameters.h b/src/lib/pubkey/xmss/xmss_wots_parameters.h
new file mode 100644
index 000000000..a4840c354
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_wots_parameters.h
@@ -0,0 +1,129 @@
+/**
+ * XMSS WOTS Parameters
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_WOTS_PARAMETERS_H__
+#define BOTAN_XMSS_WOTS_PARAMETERS_H__
+
+#include <cstddef>
+#include <cstdint>
+#include <iterator>
+#include <map>
+#include <string>
+#include <math.h>
+#include <botan/assert.h>
+#include <botan/types.h>
+#include <botan/secmem.h>
+#include <botan/exceptn.h>
+#include <botan/xmss_tools.h>
+
+namespace Botan {
+
+/**
+ * Descibes a signature method for XMSS Winternitz One Time Signatures,
+ * as defined in:
+ * [1] XMSS: Extended Hash-Based Signatures,
+ * draft-itrf-cfrg-xmss-hash-based-signatures-06
+ * Release: July 2016.
+ * https://datatracker.ietf.org/doc/
+ * draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
+ **/
+class XMSS_WOTS_Parameters
+ {
+ public:
+ enum ots_algorithm_t
+ {
+ WOTSP_SHA2_256_W16 = 0x01000001,
+ WOTSP_SHA2_512_W16 = 0x02000002,
+// FIXME: Uncomment once SHAKE128/256 implementation is available in Botan.
+// WOTSP_SHAKE128_W16 = 0x03000003,
+// WOTSP_SHAKE256_W16 = 0x04000004
+ };
+
+ XMSS_WOTS_Parameters(const std::string& algo_name);
+ XMSS_WOTS_Parameters(ots_algorithm_t ots_spec);
+
+ /**
+ * Algorithm 1: convert input string to base.
+ *
+ * @param msg Input string (referred to as X in [1]).
+ * @param out_size size of message in base w.
+ *
+ * @return Input string converted to the given base.
+ **/
+ secure_vector<byte> base_w(const secure_vector<byte>& msg, size_t out_size) const;
+
+ secure_vector<byte> base_w(size_t value) const;
+
+ void append_checksum(secure_vector<byte>& data);
+
+ /**
+ * @return XMSS WOTS registry name for the chosen parameter set.
+ **/
+ const std::string& name() const
+ {
+ return m_name;
+ }
+
+ /**
+ * @return Botan name for the hash function used.
+ **/
+ const std::string& hash_function_name() const
+ {
+ return m_hash_name;
+ }
+
+ /**
+ * Retrieves the uniform length of a message, and the size of
+ * each node. This correlates to XMSS parameter "n" defined
+ * in [1].
+ *
+ * @return element length in bytes.
+ **/
+ size_t element_size() const { return m_element_size; }
+
+ /**
+ * The Winternitz parameter.
+ *
+ * @return numeric base used for internal representation of
+ * data.
+ **/
+ size_t wots_parameter() const { return m_w; }
+
+ size_t len() const { return m_len; }
+
+ size_t len_1() const { return m_len_1; }
+
+ size_t len_2() const { return m_len_2; }
+
+ size_t lg_w() const { return m_lg_w; }
+
+ ots_algorithm_t oid() const { return m_oid; }
+
+ size_t estimated_strength() const { return m_strength; }
+
+ bool operator==(const XMSS_WOTS_Parameters& p) const
+ {
+ return m_oid == p.m_oid;
+ }
+
+ private:
+ static const std::map<std::string, ots_algorithm_t> m_oid_name_lut;
+ ots_algorithm_t m_oid;
+ std::string m_name;
+ std::string m_hash_name;
+ size_t m_element_size;
+ size_t m_w;
+ size_t m_len_1;
+ size_t m_len_2;
+ size_t m_len;
+ size_t m_strength;
+ uint8_t m_lg_w;
+ };
+
+}
+
+#endif
diff --git a/src/lib/pubkey/xmss/xmss_wots_privatekey.cpp b/src/lib/pubkey/xmss/xmss_wots_privatekey.cpp
new file mode 100644
index 000000000..f94ba3612
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_wots_privatekey.cpp
@@ -0,0 +1,80 @@
+/**
+ * XMSS WOTS Private Key
+ * A Winternitz One Time Signature private key for use with Extended Hash-Based
+ * Signatures.
+ *
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/xmss_wots_privatekey.h>
+
+namespace Botan {
+
+wots_keysig_t
+XMSS_WOTS_PrivateKey::generate(const secure_vector<byte>& priv_seed)
+ {
+ wots_keysig_t priv_key(m_wots_params.len(),
+ secure_vector<byte>(0));
+
+ for(size_t i = 0; i < m_wots_params.len(); i++)
+ {
+ XMSS_Tools::get().concat<size_t>(priv_key[i], i, 32);
+ m_hash.prf(priv_key[i], priv_seed, priv_key[i]);
+ }
+ return priv_key;
+ }
+
+
+XMSS_WOTS_PublicKey
+XMSS_WOTS_PrivateKey::generate_public_key(XMSS_Address& adrs)
+ {
+ XMSS_WOTS_PublicKey pub_key(m_wots_params.oid(),
+ public_seed());
+ generate_public_key(pub_key, wots_keysig_t((*this)[adrs]), adrs);
+ return pub_key;
+ }
+
+void
+XMSS_WOTS_PrivateKey::generate_public_key(XMSS_WOTS_PublicKey& pub_key,
+ wots_keysig_t&& in_key_data,
+ XMSS_Address& adrs)
+ {
+ BOTAN_ASSERT(wots_parameters() == pub_key.wots_parameters() &&
+ public_seed() == pub_key.public_seed(),
+ "Conflicting public key data.");
+
+ pub_key.set_key_data(std::move(in_key_data));
+ for(size_t i = 0; i < m_wots_params.len(); i++)
+ {
+ adrs.set_chain_address(i);
+ chain(pub_key[i], 0, m_wots_params.wots_parameter() - 1, adrs,
+ public_seed());
+ }
+ }
+
+wots_keysig_t
+XMSS_WOTS_PrivateKey::sign(
+ const secure_vector<byte>& msg,
+ XMSS_Address& adrs)
+
+ {
+ secure_vector<byte> msg_digest
+ {
+ m_wots_params.base_w(msg, m_wots_params.len_1())
+ };
+
+ m_wots_params.append_checksum(msg_digest);
+ wots_keysig_t sig((*this)[adrs]);
+
+ for(size_t i = 0; i < m_wots_params.len(); i++)
+ {
+ adrs.set_chain_address(i);
+ chain(sig[i], 0 , msg_digest[i], adrs, m_public_seed);
+ }
+
+ return sig;
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_wots_privatekey.h b/src/lib/pubkey/xmss/xmss_wots_privatekey.h
new file mode 100644
index 000000000..422d014f4
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_wots_privatekey.h
@@ -0,0 +1,265 @@
+/**
+ * XMSS WOTS Private Key
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_WOTS_PRIVATEKEY_H__
+#define BOTAN_XMSS_WOTS_PRIVATEKEY_H__
+
+#include <cstddef>
+#include <memory>
+#include <botan/alg_id.h>
+#include <botan/assert.h>
+#include <botan/pk_keys.h>
+#include <botan/types.h>
+#include <botan/xmss_wots_parameters.h>
+#include <botan/xmss_address.h>
+#include <botan/xmss_wots_publickey.h>
+
+namespace Botan {
+
+/** A Winternitz One Time Signature private key for use with Extended Hash-Based
+ * Signatures.
+ **/
+class BOTAN_DLL XMSS_WOTS_PrivateKey : public virtual XMSS_WOTS_PublicKey,
+ public virtual Private_Key
+ {
+ public:
+ /**
+ * Creates a WOTS private key for the chosen XMSS WOTS signature method.
+ * Members need to be initialized manually.
+ *
+ * @param oid Identifier for the selected signature method.
+ **/
+ XMSS_WOTS_PrivateKey(XMSS_WOTS_Parameters::ots_algorithm_t oid)
+ : XMSS_WOTS_PublicKey(oid)
+ {}
+
+ /**
+ * Creates a WOTS private key for the chosen XMSS WOTS signature method.
+ *
+ * @param oid Identifier for the selected signature method.
+ * @param rng A random number generator to use for key generation.
+ **/
+ XMSS_WOTS_PrivateKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ RandomNumberGenerator& rng)
+ : XMSS_WOTS_PublicKey(oid, rng),
+ m_private_seed(rng.random_vec(m_wots_params.element_size()))
+ {
+ set_key_data(generate(m_private_seed));
+ }
+
+ /**
+ * Constructs a WOTS private key. Chains will be generated on demand
+ * applying a hash function to a unique value generated from a secret
+ * seed and a counter. The secret seed of length n, will be
+ * automatically generated using AutoSeeded_RNG(). "n" equals
+ * the element size of the chosen WOTS security parameter set.
+ *
+ * @param oid Identifier for the selected signature method.
+ * @param public_seed A public seed used for the pseudo random generation
+ * of public keys derived from this private key.
+ * @param rng A random number generator to use for key generation.
+ **/
+ XMSS_WOTS_PrivateKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ const secure_vector<byte>& public_seed,
+ RandomNumberGenerator &rng)
+ : XMSS_WOTS_PublicKey(oid, public_seed),
+ m_private_seed(rng.random_vec(m_wots_params.element_size()))
+ {
+ set_key_data(generate(m_private_seed));
+ }
+
+ /**
+ * Constructs a WOTS private key. Chains will be generated on demand
+ * applying a hash function to a unique value generated from a secret
+ * seed and a counter. The secret seed of length n, will be
+ * automatically generated using AutoSeeded_RNG(). "n" equals
+ * the element size of the chosen WOTS security parameter set.
+ *
+ * @param oid Identifier for the selected signature method.
+ * @param public_seed A public seed used for the pseudo random generation
+ * of public keys derived from this private key.
+ **/
+ XMSS_WOTS_PrivateKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ const secure_vector<byte>& public_seed)
+ : XMSS_WOTS_PublicKey(oid, public_seed)
+ {}
+
+ /**
+ * Constructs a WOTS private key. Chains will be generated on demand
+ * applying a hash function to a unique value generated from the
+ * secret seed and a counter.
+ *
+ * @param oid Identifier for the selected signature method.
+ * @param public_seed A public seed used for the pseudo random generation
+ * of public keys derived from this private key.
+ * @param private_seed A secret uniformly random n-byte value.
+ **/
+ XMSS_WOTS_PrivateKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ const secure_vector<byte>& public_seed,
+ const secure_vector<byte>& private_seed)
+ : XMSS_WOTS_PublicKey(oid, public_seed),
+ m_private_seed(private_seed)
+ {
+ set_key_data(generate(private_seed));
+ }
+
+ /**
+ * Retrieves the i-th WOTS private key using pseudo random key
+ * (re-)generation.
+ *
+ * @param i Index of the key to retrieve.
+ *
+ * @return WOTS secret key.
+ **/
+ wots_keysig_t operator[](size_t i)
+ {
+ secure_vector<byte> idx_bytes;
+ XMSS_Tools::get().concat(idx_bytes, i, m_wots_params.element_size());
+ m_hash.h(idx_bytes, m_private_seed, idx_bytes);
+ return generate(idx_bytes);
+ }
+
+ /**
+ * Retrieves the i-th WOTS private key using pseudo random key
+ * (re-)generation.
+ *
+ * @param adrs The address of the key to retrieve.
+ *
+ * @return WOTS secret key.
+ **/
+ wots_keysig_t operator[](const XMSS_Address& adrs)
+ {
+ secure_vector<byte> result;
+ m_hash.prf(result, m_private_seed, adrs.bytes());
+ return generate(result);
+ }
+
+ wots_keysig_t generate_private_key(const secure_vector<byte>& priv_seed);
+
+ /**
+ * Algorithm 4: "WOTS_genPK"
+ * Generates a Winternitz One Time Signature+ (WOTS+) Public Key from a
+ * given private key.
+ *
+ * @param adrs Hash function address encoding the address of the WOTS+
+ * key pair within a greater structure.
+ *
+ * @return A XMSS_WOTS_PublicKey.
+ **/
+ XMSS_WOTS_PublicKey generate_public_key(
+ XMSS_Address& adrs);
+
+ /**
+ * Algorithm 4: "WOTS_genPK"
+ * Initializes a Winternitz One Time Signature+ (WOTS+) Public Key's
+ * key_data() member, with data derived from in_key_data using the
+ * WOTS chaining function.
+ *
+ * @param[out] pub_key Public key to initialize key_data() member on.
+ * @param in_key_data Input key material from private key used for
+ * public key generation.
+ * @param adrs Hash function address encoding the address of
+ * the WOTS+ key pair within a greater structure.
+ **/
+ void generate_public_key(
+ XMSS_WOTS_PublicKey& pub_key,
+ wots_keysig_t&& in_key_data,
+ XMSS_Address& adrs);
+
+ /**
+ * Algorithm 5: "WOTS_sign"
+ * Generates a signature from a private key and a message.
+ *
+ * @param msg A message to sign.
+ * @param adrs An OTS hash address identifying the WOTS+ key pair
+ * used for signing.
+ *
+ * @return signature for msg.
+ **/
+ wots_keysig_t sign(
+ const secure_vector<byte>& msg,
+ XMSS_Address& adrs);
+
+ /**
+ * Retrieves the secret seed used to generate WOTS+ chains. The seed
+ * should be a uniformly random n-byte value.
+ *
+ * @return secret seed.
+ **/
+ const secure_vector<byte>& private_seed() const
+ {
+ return m_private_seed;
+ }
+
+ ///**
+ // * Retrieves the secret seed used to generate WOTS+ chains. The seed
+ // * should be a uniformly random n-byte value.
+ // *
+ // * @return secret seed.
+ // **/
+ //secure_vector<byte>& private_seed() { return m_private_seed; }
+
+ /**
+ * Sets the secret seed used to generate WOTS+ chains. The seed
+ * should be a uniformly random n-byte value.
+ *
+ * @param private_seed Uniformly random n-byte value.
+ **/
+ void set_private_seed(const secure_vector<byte>& private_seed)
+ {
+ m_private_seed = private_seed;
+ }
+
+ /**
+ * Sets the secret seed used to generate WOTS+ chains. The seed
+ * should be a uniformly random n-byte value.
+ *
+ * @param private_seed Uniformly random n-byte value.
+ **/
+ void set_private_seed(secure_vector<byte>&& private_seed)
+ {
+ m_private_seed = std::move(private_seed);
+ }
+
+ virtual AlgorithmIdentifier
+ pkcs8_algorithm_identifier() const override
+ {
+ BOTAN_ASSERT(false, "No AlgorithmIdentifier available for XMSS-WOTS.");
+ }
+
+ virtual std::unique_ptr<PK_Ops::Signature>
+ create_signature_op(RandomNumberGenerator&,
+ const std::string&,
+ const std::string& provider) const override
+ {
+ BOTAN_ASSERT(false, "XMSS_WOTS_Signature_Operation not available.");
+ }
+
+ virtual secure_vector<byte> pkcs8_private_key() const override
+ {
+ BOTAN_ASSERT(false, "No PKCS8 key format defined for XMSS-WOTS.");
+ }
+
+ private:
+ /**
+ * Algorithm 3: "Generating a WOTS+ Private Key".
+ * Generates a private key.
+ *
+ * @param private_seed Uniformly random n-byte value.
+ *
+ * @returns a vector of length key_size() of vectors of n bytes length
+ * containing uniformly random data.
+ **/
+ wots_keysig_t generate(const secure_vector<byte>& private_seed);
+
+ secure_vector<byte> m_private_seed;
+ };
+
+}
+
+#endif
+
diff --git a/src/lib/pubkey/xmss/xmss_wots_publickey.cpp b/src/lib/pubkey/xmss/xmss_wots_publickey.cpp
new file mode 100644
index 000000000..aa0240be8
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_wots_publickey.cpp
@@ -0,0 +1,66 @@
+/**
+ * XMSS WOTS Public Key
+ * A Winternitz One Time Signature public key for use with Extended Hash-Based
+ * Signatures.
+ *
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#include <botan/xmss_wots_publickey.h>
+
+namespace Botan {
+
+void
+XMSS_WOTS_PublicKey::chain(secure_vector<byte>& result,
+ size_t start_idx,
+ size_t steps,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& seed)
+ {
+ for(size_t i = start_idx;
+ i < (start_idx + steps) && i < m_wots_params.wots_parameter();
+ i++)
+ {
+ adrs.set_hash_address(i);
+
+ //Calculate tmp XOR bitmask
+ adrs.set_key_mask_mode(XMSS_Address::Key_Mask::Mask_Mode);
+ xor_buf(result, m_hash.prf(seed, adrs.bytes()), result.size());
+
+ // Calculate key
+ adrs.set_key_mask_mode(XMSS_Address::Key_Mask::Key_Mode);
+
+ //Calculate f(key, tmp XOR bitmask)
+ m_hash.f(result, m_hash.prf(seed, adrs.bytes()), result);
+ }
+ }
+
+wots_keysig_t
+XMSS_WOTS_PublicKey::pub_key_from_signature(const secure_vector<byte>& msg,
+ const wots_keysig_t& sig,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& seed)
+ {
+ secure_vector<byte> msg_digest
+ {
+ m_wots_params.base_w(msg, m_wots_params.len_1())
+ };
+
+ m_wots_params.append_checksum(msg_digest);
+ wots_keysig_t result(sig);
+
+ for(size_t i = 0; i < m_wots_params.len(); i++)
+ {
+ adrs.set_chain_address(i);
+ chain(result[i],
+ msg_digest[i],
+ m_wots_params.wots_parameter() - 1 - msg_digest[i],
+ adrs,
+ seed);
+ }
+ return result;
+ }
+
+}
diff --git a/src/lib/pubkey/xmss/xmss_wots_publickey.h b/src/lib/pubkey/xmss/xmss_wots_publickey.h
new file mode 100644
index 000000000..e024c486f
--- /dev/null
+++ b/src/lib/pubkey/xmss/xmss_wots_publickey.h
@@ -0,0 +1,337 @@
+/**
+ * XMSS WOTS Public Key
+ * (C) 2016 Matthias Gierlings
+ *
+ * Botan is released under the Simplified BSD License (see license.txt)
+ **/
+
+#ifndef BOTAN_XMSS_WOTS_PUBLICKEY_H__
+#define BOTAN_XMSS_WOTS_PUBLICKEY_H__
+
+#include <cstddef>
+#include <string>
+#include <vector>
+#include <botan/auto_rng.h>
+#include <botan/alg_id.h>
+#include <botan/asn1_oid.h>
+#include <botan/assert.h>
+#include <botan/pk_keys.h>
+#include <botan/types.h>
+#include <botan/xmss_wots_parameters.h>
+#include <botan/xmss_address.h>
+#include <botan/xmss_hash.h>
+
+namespace Botan {
+
+typedef std::vector<secure_vector<byte>> wots_keysig_t;
+
+/**
+ * A Winternitz One Time Signature public key for use with Extended Hash-Based
+ * Signatures.
+ **/
+class BOTAN_DLL XMSS_WOTS_PublicKey : virtual public Public_Key
+ {
+ public:
+ class TreeSignature
+ {
+ public:
+ TreeSignature()
+ : m_ots_sig(), m_auth_path() {}
+
+ TreeSignature(const wots_keysig_t& ots_sig,
+ const wots_keysig_t& auth_path)
+ : m_ots_sig(ots_sig), m_auth_path(auth_path)
+ {}
+
+ TreeSignature(wots_keysig_t&& ots_sig,
+ wots_keysig_t&& auth_path)
+ : m_ots_sig(std::move(ots_sig)),
+ m_auth_path(std::move(auth_path))
+ {}
+
+ const wots_keysig_t& ots_signature() const
+ {
+ return m_ots_sig;
+ }
+
+ wots_keysig_t& ots_signature()
+ {
+ return m_ots_sig;
+ }
+
+ const wots_keysig_t& authentication_path() const
+ {
+ return m_auth_path;
+ }
+
+ wots_keysig_t& authentication_path()
+ {
+ return m_auth_path;
+ }
+
+ private:
+ wots_keysig_t m_ots_sig;
+ wots_keysig_t m_auth_path;
+ };
+
+ /**
+ * Creates a XMSS_WOTS_PublicKey for the signature method identified by
+ * oid. The public seed for this key will be initialized with a
+ * uniformly random n-byte value, where "n" is the element size of the
+ * selected signature method.
+ *
+ * @param oid Identifier for the selected signature method.
+ **/
+ XMSS_WOTS_PublicKey(XMSS_WOTS_Parameters::ots_algorithm_t oid)
+ : m_wots_params(oid),
+ m_hash(m_wots_params.hash_function_name()) {}
+
+ /**
+ * Creates a XMSS_WOTS_PublicKey for the signature method identified by
+ * oid. The public seed for this key will be initialized with a
+ * uniformly random n-byte value, where "n" is the element size of the
+ * selected signature method.
+ *
+ * @param oid Identifier for the selected signature method.
+ * @param rng A random number generate used to generate the public seed.
+ **/
+ XMSS_WOTS_PublicKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ RandomNumberGenerator& rng)
+ : m_wots_params(oid),
+ m_hash(m_wots_params.hash_function_name()),
+ m_public_seed(rng.random_vec(m_wots_params.element_size())) {}
+
+ /**
+ * Creates a XMSS_WOTS_PrivateKey for the signature method identified by
+ * oid, with a precomputed public seed.
+ *
+ * @param oid Identifier for the selected signature method.
+ * @param public_seed A precomputed public seed of n-bytes length.
+ **/
+ XMSS_WOTS_PublicKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ secure_vector<byte> public_seed)
+ : m_wots_params(oid),
+ m_hash(m_wots_params.hash_function_name()),
+ m_public_seed(public_seed) {}
+
+ /**
+ * Creates a XMSS_WOTS_PublicKey for the signature method identified by
+ * oid. The public seed will be initialized with a precomputed seed and
+ * and precomputed key data which should be derived from a
+ * XMSS_WOTS_PrivateKey.
+ *
+ * @param oid Ident:s/ifier for the selected signature methods.
+ * @param public_seed A precomputed public seed of n-bytes length.
+ * @param key Precomputed raw key data of the XMSS_WOTS_PublicKey.
+ **/
+ XMSS_WOTS_PublicKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ secure_vector<byte>&& public_seed,
+ wots_keysig_t&& key)
+ : m_wots_params(oid),
+ m_hash(m_wots_params.hash_function_name()),
+ m_key(std::move(key)),
+ m_public_seed(std::move(public_seed))
+ {}
+
+ /**
+ * Creates a XMSS_WOTS_PublicKey for the signature method identified by
+ * oid. The public seed will be initialized with a precomputed seed and
+ * and precomputed key data which should be derived from a
+ * XMSS_WOTS_PrivateKey.
+ *
+ * @param oid Identifier for the selected signature methods.
+ * @param public_seed A precomputed public seed of n-bytes length.
+ * @param key Precomputed raw key data of the XMSS_WOTS_PublicKey.
+ **/
+ XMSS_WOTS_PublicKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ const secure_vector<byte>& public_seed,
+ const wots_keysig_t& key)
+ : m_wots_params(oid),
+ m_hash(m_wots_params.hash_function_name()),
+ m_key(key),
+ m_public_seed(public_seed)
+ {}
+
+ /**
+ * Creates a XMSS_WOTS_PublicKey form a message and signature using
+ * Algorithm 6 WOTS_pkFromSig defined in the XMSS standard. This
+ * overload is used to verify a message using a public key.
+ *
+ * @param oid WOTSP algorithm identifier.
+ * @param msg A message.
+ * @param sig A WOTS signature for msg.
+ * @param adrs An XMSS_Address.
+ * @param public_seed The public public_seed.
+ **/
+ XMSS_WOTS_PublicKey(XMSS_WOTS_Parameters::ots_algorithm_t oid,
+ const secure_vector<byte>& msg,
+ const wots_keysig_t& sig,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& public_seed)
+ : m_wots_params(oid),
+ m_hash(m_wots_params.hash_function_name()),
+ m_key(pub_key_from_signature(msg,
+ sig,
+ adrs,
+ public_seed)),
+ m_public_seed(public_seed)
+ {}
+
+ /**
+ * Retrieves the i-th element out of the length len chain of
+ * n-byte elements contained in the public key.
+ *
+ * @param i index of the element.
+ * @returns n-byte element addressed by i.
+ **/
+ const secure_vector<byte>& operator[](size_t i) const { return m_key[i]; }
+ secure_vector<byte>& operator[](size_t i) { return m_key[i]; }
+
+ /**
+ * Convert the key into the raw key data. The key becomes a length
+ * len vector of n-byte elements.
+ **/
+ operator const wots_keysig_t& () const { return m_key; };
+
+ /**
+ * Convert the key into the raw key data. The key becomes a length
+ * len vector of n-byte elements.
+ **/
+ operator wots_keysig_t& () { return m_key; }
+
+ const secure_vector<byte>& public_seed() const { return m_public_seed; }
+ secure_vector<byte>& public_seed() { return m_public_seed; }
+ void set_public_seed(const secure_vector<byte>& public_seed)
+ {
+ m_public_seed = public_seed;
+ }
+ void set_public_seed(secure_vector<byte>&& public_seed)
+ {
+ m_public_seed = std::move(public_seed);
+ }
+
+ const wots_keysig_t& key_data() const { return m_key; }
+ wots_keysig_t& key_data() { return m_key; }
+ void set_key_data(const wots_keysig_t& key_data)
+ {
+ m_key = key_data;
+ }
+ void set_key_data(wots_keysig_t&& key_data)
+ {
+ m_key = std::move(key_data);
+ }
+
+ const XMSS_WOTS_Parameters& wots_parameters() const
+ {
+ return m_wots_params;
+ }
+
+ virtual std::string algo_name() const override
+ {
+ return m_wots_params.name();
+ }
+
+ virtual AlgorithmIdentifier algorithm_identifier() const override
+ {
+ BOTAN_ASSERT(false, "No AlgorithmIdentifier available for XMSS-WOTS.");
+ }
+
+ virtual bool check_key(RandomNumberGenerator&, bool) const override
+ {
+ BOTAN_ASSERT(false, "No key strength check implemented for XMSS-WOTS.");
+ }
+
+ virtual std::unique_ptr<PK_Ops::Verification>
+ create_verification_op(const std::string&,
+ const std::string& provider) const override
+ {
+ BOTAN_ASSERT(false, "XMSS_WOTS_Verification_Operation not available.");
+ }
+
+ virtual size_t estimated_strength() const override
+ {
+ return m_wots_params.estimated_strength();
+ }
+
+ virtual size_t max_input_bits() const override
+ {
+ return message_part_size() * 8;
+ }
+
+ virtual size_t message_part_size() const override
+ {
+ return m_wots_params.element_size();
+ }
+
+ virtual size_t message_parts() const override
+ {
+ return 1;
+ }
+
+ virtual std::vector<byte> x509_subject_public_key() const override
+ {
+ BOTAN_ASSERT(false, "No x509 key format defined for XMSS-WOTS.");
+ }
+
+ bool operator==(const XMSS_WOTS_PublicKey& key)
+ {
+ return m_key == key.m_key;
+ }
+
+ bool operator!=(const XMSS_WOTS_PublicKey& key)
+ {
+ return !(*this == key);
+ }
+
+ protected:
+ /**
+ * Algorithm 2: Chaining Function.
+ *
+ * Takes an n-byte input string and transforms it into a the function
+ * result iterating the cryptographic hash function "F" steps times on
+ * the input x using the outputs of the PRNG "G".
+ *
+ *
+ * @param[out] x An n-byte input string, that will be transformed into
+ * the chaining function result.
+ * @param start_idx The start index.
+ * @param steps A number of steps.
+ * @param adrs An OTS Hash Address.
+ * @param public_seed A public seed.
+ *
+ **/
+ void chain(secure_vector<byte>& x,
+ size_t start_idx,
+ size_t steps,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& public_seed);
+
+ XMSS_WOTS_Parameters m_wots_params;
+ XMSS_Hash m_hash;
+
+ wots_keysig_t m_key;
+ secure_vector<byte> m_public_seed;
+
+ private:
+ /**
+ * Algorithm 6: "WOTS_pkFromSig"
+ * Computes a Winternitz One Time Signature+ public key from a message and
+ * its signature.
+ *
+ * @param msg A message.
+ * @param sig The signature for msg.
+ * @param adrs An address.
+ * @param public_seed A public_seed.
+ *
+ * @return Temporary WOTS+ public key.
+ **/
+ wots_keysig_t pub_key_from_signature(
+ const secure_vector<byte>& msg,
+ const wots_keysig_t& sig,
+ XMSS_Address& adrs,
+ const secure_vector<byte>& public_seed);
+ };
+
+}
+
+#endif
diff --git a/src/tests/data/pubkey/xmss_sig.vec b/src/tests/data/pubkey/xmss_sig.vec
new file mode 100644
index 000000000..d12f1545e
--- /dev/null
+++ b/src/tests/data/pubkey/xmss_sig.vec
@@ -0,0 +1,80 @@
+# Sign XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg =
+PrivateKey = 01000001510ac05c24fb139572f8b0d82c0bc403b71cfe1d6551f7ed57046cd8cc62742af719f460378c13d422ba462b9b7bd57218d106e06778afcf9031065b451a529400000000000000ffc7f0003ec2f7c3ea0a6534b1ae2e48145febe7fa90c3b294b75dac6789d794c7c4f9ccaec934457266ef9770b8ecd94eac7f16f14027ef97c4885b4caeb32ebe
+Signature = 00000000000000ff8c7e5684680acaca206b403913e6f4e43d022e53d7ec4f57c2aa08e0b828852913f3b54af80b339cc1e049296c358ce48caa2c4329740eeccfb981150bd0452cafbca05355cfcaaab3eb224ff6bc5a7b152c66bfb7324553b0a9ff9fba90b157a51d0f50a37691bcb8039a358e3888f5c00348c6cedfeea8f0e771819815f1d6e5166299c70430472b8369e5867a443946aae33e3bea82b2d140c211a2578aafea9bb58c95c3e699315c6231c4c268d20794663a99dc32e338485c6652d466a246029a8e5ebe4c22e98f2729ea4d18f7a2ac38a3315633c2a327837932c831f3d1907ce66b416fe651f4aaef4d5d2ad35b1b0eca8e5cfab493b7aa4e9a249d9352e111c9a2de3788d12a34edb938cf24e2d06f4cdeb940c21e30ce260ae643e9c0432081236f80036394090be3b61ff7c9c60f5bfeaeaf5c89a75f0335dfe30cc6c5ccfd955cec9950d1f8f9f16cbf0f19864940ebc708085ee31963da9fed93ffe6b487416cca53c455dafcba04bc7cd971416e1ae165e020cf71ba21a8122b5df93082b64d59a7ff6f104c9a635791cddda116627b5d55da40eb425955e66245b54ef9c3662b281c35b59147ca446485ffb77068ca7c8aca5f3007d1155ca29ff6f880bdd93b23d0d2f0928a0a05220b6fcc4e44e76cea9ccfa96d3c92e7886a9bd2819c2157298d0da7625a545aef82299da772eade55e02fbb4df81943d49e0c313e981ae3b3a668a33bd779bfbe5d45e944879d120ef66066d5c248015166fbaf22d07d317a045b24081e0ce12487a1def0da8ffc745bb2ee56e3e5b2d9268a0acc83c52a729ba2692ca8e9656c07e64dcc054e65611c241a11d2f83279d77cac8cb16f850e1eb4fcfcf4b7e506f96895bb788185b3b8dc53f0b4da3df8b463b7af8a45058e54444f4c166a0e2c23b2307350ebdf956792bfb709d5f637afae29d358ece09bbd0be3b83ff165f66d0bec124ef3a314c4f64e2a3cf40237bd64f1efef11088b6a7c4fb28dd92eb26e08b17c7da2e5e789b05fa4a1dc625d26a87e2ee855522b0840e98ec62d76f275d0e3c99d4817a3eddf9c9ec5fe8b85f42cd86d61e89820e08f99e69ac16c37e11fa161c8842e6b5bce3290bff331be476b2155a83bc73887380db656d628765b3d5b8015c0f4c6fcd6cfb462e07897d9a26c655b61a89fcdae0a426e84fcf1679e55e139df68e367f25fe468db29444b4e3ca059dba629b9cb6df1d49f5a6d50bb1085661b47f24c659cb742f34566f6b8a8a6c4408aa16302cd640a9c2156d40c2dcc741b62495953b8ca40638d9d047e8feacc29d73a103cad0d44847f5f613340449d23b66d55a69fef4cdab551fc94af64e9604b94c91c8f7174c22b170c8fc81cb4fbf4aad557f3db89ae8f58e856e62043ec7525cfac71e1b3a44551a7604ed142db45452236e6536c59db9ffc400ac1f0134770da6c4e5ea130680168a7a8aaede85fc1c7769ed6738e37285741794b4e8210ee57094197cf8d527f61668f813fbaf3d0e5c45efb9e56da45c73d242bf4d02f23ed07bc738ed87a5949d2a1dd2b90625855a4ca4dfe2d7cb23c83f03caa82e8d283630b49ce2e9712ebb30088f51c30db985c6ae2c87cffdcbf5f83b0e7a7cb867e5f9f2a709243464674a4758216028ac95c9a9d0eaa751b1c165c07d031650df283d064b417426d0c266cd1edc839af118cea4e38748390a7d254e240e01607902922ec7ca0b9d3fe62552615d4192cccfec08fa7ef4dbb08728779dadc586644349e58515a3a513ee689699e043c6efc9dd698ca38be414197c87995d3ea1a5c46176a75dbab3fd8c6d66ac4214466302a9e57e4bdae367a0e7f55fc5e9dd5098ff8489655ad6df8d577da64163cba8bcabc3b178c50a1ad35efbc604664657c9c9f789bb8be4d70c695cca6b80e2e4138da750de37c2926210f736314c55d4732e26c3da1d92d2a54e3e2a77fc009f494d7cea23ec816a62cfba0098188f14587b7dd7f0da3ffd9841ec6afd3472a7c6b1574f3a30659ab78c0c876bc22f2bd878a6d29a223b8eb817f4be3bdd334549849b578ce5476d279ec0d526c7749c595a4c154dcab456f7ec9e03d11a35e4244e94f1a14fca1a5236acc645f87ed561883f87abe6fa8cb75bfa9e7c2d6a8fe71c087a321bcad9fd9a81e1f53cb808264dd703dde6bd43e32f34aca056add0cf3f51dc0d07160129990cb4a5e96d6b20f658b13756fe4dbc6cb06f10ff92798fd68c117a6d1e97bcabc7de3dfad1519c3741a37b74dc32b5820d8c1f1f47e9a634b05c62bbd28a60a4c82852dd2821ad65e7dd9dd822b77b417e4f5afb5b719b3237a674a875b76bf8eaf1f7db4ab9af63b3c6001585920713812fdc7fff02c4829a607d2159005b9f3b7e2459785162f5ce65aed264a127d6d6f8ed5c40a7652a8bc6dc3381dd1004e99aabaced2f4b97fdc338ac77eda3989fa77e14a3371345adefb62ab81b2946f7a9ab4c2ee740fe7bec8700e82c93b7686350bf2134bf3716124e4275cb05284b78f2f08a4cfba1b9a94efa7d0267cb373af7bb10f733cd4eec7ddba9c6a4dc32241b1d562f3e8584e49ae01420fad2255388dd8c296d7afb5e14e0a178a6f3ceb618fd169061d37302b42db4d4e9db95249ffad1bc87097b62814c79bb55d39726346ec17a5bde8e91f5b96158d55fdc5bdafd75436da2ceac5798c4ff277ba17f11a9a2570f406398b0a3d11ebb7b1c4370b0856d9686153133c0d73efaf8b67a56fa31c1eb507e22e5a5e83211fe6b12745671e32ba3c223b4099119f8307988063b1693dc71f0f5885b85e2a05efdb6419cb7fdc6761ba597d752a9ad0b0881bad28d77e1ca2ba55f92159723517205835748bbe057e2120f791261d51e76b21110b17ecaf223e5f463e8e5371a83e872154a592a6c60ec503f2edc56616b4f362fa5626646c4d0146fc33c9475f9fd87e510c4258aef6c41875597b6c09548cc30f2ed3605da62a40b6722a37fb0c6865e3400d3355350cf2cfd7e047760add6b2d56db98c42c8d3b2e95b4e5391cdfbf150a658c1e63d2550d86a0ab759d7700b2638fe04e2986a11561f9b3f7fdd683e3538ea7c7b7369b7ddb689a09ab53ed9c2eeffbcb5c0c424cd30e6b6c25dce71d7dcae4af834170212765942299818f28b64fc09d21893aba6735cc6be0091016c99e5b3812dc8da38972f9fb4c20c8902171c100935cfbf18f74c7aeb9b0304e189a69ad7fd3ecea8acb8600b050f2e3e9f0ba0c2349d9257a94cb1d8f1315ba050caddc6f51232a8978e43ef1359dcb3a421f9489703a85dab43a47df2998932ad1a983057d38c00041dc12a4c3488289185080f5697e34f01e98a47f2af8f0383cfdeb8cfce3e5cc976b6a024f789c15717678f6a47f031046c9010ed06f202035545bf58cc081f510a83ca29cc46a81bcd700418093191d1f6922e9672d69f55d7036daaec7490b72272272c72775ac686717b1e671b5e125e673188edc0a8249acc4a4fc3789e1
+
+# Sign XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg = 078a87923dec59ce843149f5e642a3f921e2e78543132f88ba637a09df0c16552a3037e3eeb3a30fda5df73ae2e0dd3821d1
+PrivateKey = 01000001a020196cde3a20c13477ce56de3a7a4381821ea50bf07f0670048a0e1736d22876575fa4f5404b393828f74776a9b9c73b0962069652b088432242e12cf75e170000000000000000ce1994bc37aedd7e21851001ec0f4296ecc3d389263e4e720d05effd60a20a41b90b7e2cc1647319b4b143ceddadadfb3e571be68f36acc8d6c0a0add41266f2
+Signature = 0000000000000000d3a842202db1812f8dc93387ea6a78d01211d00911d37678cad55cbc228b2da495c0b88593d505696ef3be99a6742b75a12555bbede5f788d4f4b7dae4e6c7da82faa2d7e60f836673bc0bae8cb75a6a94480970c90a412e49ae7b0cfa63025c1444a746c5bdcf9d8618cece33549043a98d05cba7673fb7e4f835e624b482e85b3b2aff7613cd58f1c8ff2b0e6011e02f5a3387708e8e99970eb0288afed53454df7804b583de58bb7b93041d6c395360d84a9b4c9744395c1f2b05acb932c7aa8279b6012e06347559a89e945bb140119d074c19ae0608cf10d622ed32234d3f739b2a8520288bd1aff00efc87b14f294837644eef5afe6c938229e9ef39c35032e57e36fdf82ca625f4f78e796b6e19ea0825333bf9bab8b280bca94b6858cde824db884f808f3ddc450290c3441ea4d32430fa701fff0d7e51c1ab829c1a67fbbc0776cc47e288e7ba539349741f9ebff591f40f47180a4438c998a73edd087e57325b4e308c2e1ea8097c9718f3547a0876789d0a808e1941fa5cde1523934b08d014ea974fc867efec161ca1591f29b4e34276fe045fbb8aa1fbb69a8693c438d47903b63cb6c9d15988c5025b0d84e1bcdeeef466f4b30373eedddb216bf1ac20e068db89a201706cd1f0b9781944889a71ca92f8b9a86d086ed63eb71b6412f0672a549268418b17f408723facc10a640d3977756f41b2934d3a76a64fe1ffb29456e9634d7b839e3b66a744ef0d4beef472a2817c5e0f10a91119371df30de7dc394219c95ccad24116991d53cd5b2059f48d6ffac08a5869c94866d7932ca97760d55ae5af8a978f91a934e21922f0b9be5227bb9e557d20f6d139d71160f29fbe23c0757e4e4eae8524a38b00043dade86aaae2f3bcff6e65f74410863b7f5e585443039cfa12dc17243049a4f9cc6b68ac0874a62f821519f027d5b658c3e8cb724fe469001c6de151a407cc48cb966fd5df819aea78f3c1b291a453490ead24767a97506d635029d5a1182f05372e5a7ca3b7440446733b500f26e3137ef5e01f145989ebbce7e72681cf3213b599b3d44e73b8fb2b06b63a12d59bc33820af834c9b48e1ffda08727a1a0d092900c91f3df1c2f74264271dde4546cddf687e5a3d7170db4f7db3ff913d96f3eb45f5cacd5400128838625e3c8f852f2b1071d53a6f73fdc7fc67a9fb007519250bf50d3ceec30184cbe4b4348b9d04eda3cca4de611aa9d9e21179f7057d5229fcb8c7599594fdd17b0dad86df88b1d92f29218f7aec8478980b58256d0b3f22a0a738f2a45bd1845ac44e20f18f5619d828e4874e430c0c5d36eb80f9ddd1766782c4e0eadf20c971941999cf3365e28022d13ddec97d9f6c7ae8e04a6e2b50711a6087ef607a14ed1a1245cdd07bebf086f65ca32cd258d4b9b9f93e914a1c493f6d9eca4470ef6655139e3b15d41486fd80e755379442827ce2f73bd1471523e0103ac6564e185f5f81dad524bfa91a311d919b86b4585a171ae240191eaa78320d44b4062bb1bd13f807db23fc2f9849cfdeb6e1023e234a07e88318f1af60a75e7f167be568ed0ebda558b5007a85c3154b6dab837fc9fd3015d4b262502b4518f16621e945d7fe2b5591326e4d94af0f3ef7c289027c8aca22c9ab658017fdf31610b8994c042c501c25f3c84d609d1a4a6c122fee6b63f735e28dcfe66640aa98c9b88594a8daecd724bf1bbaf847764347216ffaae0ac41eeba945dc74af17c463dcfac75279899deebe762f8f0858b2fa2a4e0c5c2de0d20658f0321ab6ecb6db62c67eebe9d3d04d53a987639a70f142250cc1565301f809e35decdcaf34480f139a07781f6b39d4dabe11dafd7c4baed73ae540394cf223ced39092382c26cd968e21a97bb374b466dc34c7b25a93b876b766728f385145d610a3e793d005c88bbc697090523b280b38225576220571e1e7615656583ecec3677627a6a1e298bf4377dc9196f6659ad6f3731d6ab1a7c8e6bfa4cf50550955ebdd47f0e42be07ef4a788669acb8f403be85eab1789000184bad8c2da4011c3fe77adac3bfccabd892bc2a4a08969bd0d01620cbf2a8664d656819cbe30c8d4f71efe0dd9185b9705e82846466da99d06184fb6b8023ae31cc2f1b3e9a967f787645204aa414df00b7ae9026fb9e28ba8479ee2b46dfbbb39ca86b5c360c9f5c512e33188ed2770cb8b03959288bed59011d63534f9094def769f85e9328fc11522fcbcca648ccab654850c34f245f157349ba460f621fee2bfe0b4e6d89e88ab6845e9bb0b6056e653fac558eda8bdd5a3e8c44649cde9b5389edf7c10a2114ca7c6dd2dabee1f4d9a695303a79b4f72c27fc82af6f0c26e9551ef3a489e4f5e2cd9647b75ba75413c41b61121fd7411099fd5ec5fbd87d2b4998af3e484b4b2909a881cf9989f89ae190704dad08ddadfd6687cc273e56a3b13395a942dea8fe26e3d7ec8b0880dc8c51fc850354aacb05bd175542080d0c87cea99081adf901920ea6327b761dea28b61951eaec23bc9dc30d32dd0ed4fcfe39f575803f874d72d71d48ce8f26d47b0cc74881c54f80f41db4718ec04faaadfd93af8b8a258527024658fb28d4f6983daa01558f85bf8c6120d355388c302516d1fda5480961799ac8b5e9b485bc579675f03ce604a103df21cd31add951ad0a3ae1ad1788444997eb12f78ba96e909c74543eb6d0dcafae60796632e6888e3b3d2eb6d6b733aa53c455c04473c2213494570f6c8ae04fef4307419a7d84c87ef8a9ca8dc62177d2bc09fb1362ecf7a6e879b51b0b27b5358356689289d09baec2f204adba0a20c05a5e7c59f10d4c9f0c349ed71b2d08cfafc96cb97de01fbc0484b2a05e93ff0ffc2c7ba974933e10aefafbf440c75cda179b6dc09afe81ae36080510621e77d526d677749b50250cd83eba1c7d9f8b594d711402b10430a22fb83faa2372c1d6c88787bf82007ba5fae0f3f17836f9b2d9311366e3506395f9a0ab17731f6f792c3fb7127bbcbcad9ab39a6e59cb7f0a2ee36e66644d41b84f5dc57d27a69cbd9beb840e5d646e4d13af0286e7d31d9ce93fa896889bac3f124dfa696af3d60737f71fdeb9c09f3d0feaa1fa698291a7474919388b7c014f022d239dccc6c760180bb34078de1f7bab07c46d7d9244cba43c3bbc2c4753868887c129cfdf2857a8e07d18ef99309b85fb08980f4258806d7a618502e3d9c2de7f33c3e267a53b7acb084797c9f346b33a04e32716fd0e85b13ef7796bdaa3dc46ed58a93ab61a516990c04be612f1c7e341c6267ce8b9326efd200b015d2f0c50b8d9cc0217f758659df95d86f2d3372cdbbcfe0a0e1a8719a46e041b9bed9d194b98dd74f3308a7f9c0a068bf554861083dac5b6a594fe83f9111547737fb2d4d712e3aa1bab6820fff37175b28f1a81b06619c99b5a89b0f2c155174c8137a63b49ce94801f0500e0ea53f26313e3dd203b74d409dcb46c2d4cc0c08dcfeefb89ac66d19c95a14feb1bee4a646fd911b
+
+# # Sign XMSS_SHA2-256_W16_H10 [VERIFIED]
+# Msg = 426e562ab69a03a893f56910a2aed2a0618da1e365167749e78beb4997d36dc054f34225797478a5153037d4154a90c88836eab69a7f6783237143fdedbdb6fba8aedfd98d3af16fa293660640163c0936ae072c0d38772013b0bbf97cf44b64c44acb62803a7b2b374da627e47a1135782f09537e873aaf5bb54676bb5195aaddf73b64fb9b32f3054829dc0dc0164e51e9efa8bb5e9daafd97a85f0b3591e8c06232e6e54a3606cdf93a05df506905fb69b7cdecf62145d5d1a97fcf055b69d35c07861bf3532cc9bc78058ef266d8c98dce0af755c84fcefa69468d4a9cee6effedda0e0263a87573eb3e1d9f765083c5fe5e3598caa2874d065360e7f254fe6e3c3acccfe63ab3
+# PrivateKey = 010000016b454996ecdc4035bd8c277df668b773c3dc6afcfc5e1f4c62d28a26d03ece20076fa56809e17727a0226e7215c8ff78df6c88da77886e971e1fd1178ee4f0cc00000000000000260ae58601b7ed1b51cadb82cc34673c4e9f0b147716fe311ca6d9a19152e494d2b5cb038cf9a718d96f504bf5574428ce1cf32d6917f8de9137ec2893c87f9a7c
+# Signature = 000000000000002610fd544f326c5da7e15e53ceb679f40e3a81679a52c21b19b853aaa28ca9ca2eb47df7633935bdd55c837e9f0db60b89c87257e81ceff03c8a9e03003c1dfbfbba9eb39807295ee9bd9e547d08830b216fa2e77581b68e52fe3aef3840266f7b3519bb544b2f52916470ed63edda5a1824208eb1d7b119ec769c2d29b2a8be9ba90a4fe1dfce08cefb86e89f83f5df957928e706fd981c07849412a3661ab3259b8fa055d3e1905cc339fcd0103ba14dc3ce179300f87110937bf1b5408c07756c181c0450605b3027727350201669b935d1d3c4dea5c7e26d09f54080f85784660a388b16ec76926c940b106a13fd9bd8eb23c5a441f167adc967dd9c7f0a9e24d92d8079e802ed0501d5bb7adc60e0c65f2ff3386dad2b56ad30d0c55db7b87d7755110ffc73d907857cbc7aa52515243ef46a7ed18c657c5cf753d377e487bf4bde69e854b2d86ce256b222c98d2f33015d35a01499aa253b3b38d9330db0ad7b5a9e292c24fe80491d9270aeb8c78af39ad23a330da48d388aea8c09e732d5fa989f1a1430ba8ede676a1afd10ca3a4ce3b4c0f22057289a254abfefe7ad053b0cd2632566823a6a077065c60abffdc8524236f0fad0bb5b1a189cf4bff9af7d98c46cacfaeacea51e1479a80b22ed48707f3dcbd39b8b90c759f71e96f110ef86cf7a1426d68327a3701c09e3b8d268999634389e947337d5a5a872349d8550f088d2a4b532d5697ca73ac037cbac462b897cd8edb3765657e21ac4363ec9d0d2e6869fe1925c69f3e01a31ac9b3ed16eed096e770673d429064c1bdbcc70f718c0063d072603cafc25a2423b8b93301ef0bca0c0db9cf98a17e4e1abf2ced0fa10f7e742ff5fd47e6d7a3db1019124e0f6554b2bd7418a0d7111bcfa9dd8258671437ba9b7ffd64c5befecfce7efb5cf2afc2c9a6aa1b7b2d44489aa925fec99f988037fe408c47e26c37449cd4f8b479ea1fb0abae9656be371d59caacf688a3b64b5343011c12829a897fd797dbe760507e2822811648f232aa4800921bb3366597746035478c0bf9d204287a7683c1b1e15beb7eae46080ba55d3010953bd6d550f8b8c1d450dcff3a3417432b669fd40fe8dfab7a96063e3f0a6f36149145ab517b19c9012e13d706ab36d4ff872616e980f65faf1bbc4536dde87204bbb131d515194c0d7432862c0a1ca0f7f3d980bd0e73ada2d6e39c9522a5a79cdad70f5ab0c6c17808ab001ebc3805745e482a8c902cfb3f7534005cfaccf4a919784d2eb502c58a3691fa59e309a1b431e61a59f86990de9fe4b94712f789ad5dde95f24dfcc6caf219a51537652b3f67abd4a1da339e6d1439a5158a318287679cddb73b4cbb67586dac3dd575f799664e159acb94f0aab39ae5b82ece20c687224205b471a7a069da56f65d641bce71ef5dcd9d8c8d33fcf3c9a49067569606cbd197f1ad258ef9e0c1fc0f1defee1471ab0c264fe44b1c53947ed61797ac565a34f936fcec393d31496e77de1f50d59cb39a4f34296e6f9a6381213aa6c217d0427b025271c60477dfe12611de06856c3a557bc0cc6848873dce62002ab642e71f2fbe39ba0b92543a4ba4cd65e48650aaa29a24aa2dfd6d4e391129b62b652ff388641c9e27b7549ea5a0d6030b771cae2d91e5286d0e3212cd4ba4d6598a5427acb776e95263e52a8d51a619aa7db1b7b427d0ead687d3f19d0660eb92c9e41803639c0fed7acadd00863769429398c64eb68a0f7a4df2ec10ba635afb3c6fe3c2aa7e485a53393ba795fb1ab8a3f9994019a8a8cf2e2d990a600c2d926344bb06255039e14bca295d5d3b2bd9825b0b5a8b61103c93d706b32f775921c81c4db37561c03453631ccfb6b88a369c4802cf9bddda1aa2594f89cb06b9cca577e5454405335bbaea0ac51a058d5b2ab4c8f75314e87dd4a03da9ddc2bb5f75812347c275d295558328ae4401c94ae02dc474c84553c3904579cd2070329aff5e6a058dd89e9d32f73c22aba010edc7d86183b1956c5a3269a51b1c235fb51276c6219488dd2fc35ac84e75161a51312885274f670d10b5aacd26359efcffaef5ec45bec67c093073436654f19c6bbfda5dd7fa6947066fe56fb4bac90003e1e14164a403f853f22f36db6080f844a110365b2ff38a4fd3d9b5797cfb762f56c398646e379eccace3ad8065a1fd367c45ace07f76890c48dcec31b64ed9de5b9bf104fbae0f4d398a16ab1c08d8a14d66ba8f76965ac3a34441e15e5d5968a00ea86c25f018735d09631a417041f23b9813b545bddc31aa7dcf3289f6c5d0b070309d9392838067b149a8ca68287b1d053ab1f39047cf60f7dc91ae402ed785471e81b1f88416eba375b0236563710cf55cbcee15a1c862e1643c83c31ab46e34c5263159168c37d3bad13fbf584a4eb3b45fae3d2c716cfdd26015330d1c88c8bad77b40b44c1bc675f64706ae15f8fac47382f0ec15f81d7a88308fa7d873acd162dba5152d27f2a521a2a312d25d3ab4f53e52b5945f2c590562f65f1c506eb6b81e7a53909f1780d76847e237010789dc9f08fa8028a54e2eb028d06e59ee67fc7f4eb6015a69c753d0773cc2c8c638daaa0687c47a7cb741ffb273ccf28c2d462917dbab117b634bfdaf2a3d148e42d029e6bca6e765078b3d63380edb5f1936d69c8722a5566677c1d71eb462d5817a5980bd21d13f9e744ba6d9d4c9d642ba843df7d8ef83378d22e57b5eb4936344a0f5c2ae3f873e632dd8d135582bda315a92adebc126ae1e6add37fad7b38d6b369aec81a1cf2502aa0298b6a342a7107340cc13959a312c194fd1b4480f04c07b1003233fb8d6a2553949c19fc8bf9a9ed77caae26be3ce1ef0ad5b8078c244f37848c0210783ce913533ce1119d26f4af4fa9300a70e1d7bb99a96fe7fa7b1eddfb79dd3ed9d398ce93bce212c26f5c4c69c3d8ea02c86fdda5c050ffa5db5bdceb21a86aeb67936b0c2f749a11890482586b43d4e6aff01f4b234f11510d13726422a3986f18c44cb6a74f0c0bfa49d5cb152d087356ad52194d3293dc730967dd788c617db5b4ee1402f87748353b35cdef71330768a5ccbeb675bb018f99a4a8932f2e0ade9cbe6f4bd3beae927290fbc2a483c6394bad8e8d2808d30f9659160a788e2a990f5999de917b2176aa83e7c036c97208a022404da013cd9af43e58c415e9015d18f43fd69b815247c1c2994ad6b39a291f2ecd9b7f7fbb3ba0020fabfc225e47eb71a70ddc922f8c183e1ec6c5e003041f7015c186b714e644ef1ab265340be3ccc57b6cf4f8e5429162804c52d58b9caa7cf7b6016777d878e1dda65c4edbb8ae6e6b4599f8f5b2f586a02fbc1ff4129fad74c0590a79f010d2de1072c46e0f103436233d59ca4cacf6ec70e36d9b99b90a4563f40cb4939a0d770283d4cc8c66dec6900264da7762930562c8d7c259fd6008564b78ee7d72476ed5751e001e187dc02b6396a335367d89fdac1b56139fb2e3845bd2e7596ecea7ca5f2519de6ea1c7
+
+# # Sign XMSS_SHA2-256_W16_H10 [VERIFIED]
+# Msg = 39324feb180aca683d995db187a075a910d0
+# PrivateKey = 010000012f4df507528be5a7c45b2d80349336869a33980aace2b6ba6746a12fd528a9acc2eab76bea069fdf6d066f1261acf2456da5c1d4f50b977078c9ce0124a90795000000000000010f16aab1b0d2dc9e595682bc8ec92a7a458898836631130918b67e71556a7388dd15b9901db169687c884731c812532bcc51044126fa96450b7ffba1eb1bc0e924
+# Signature = 000000000000010f63c3e98688224ebf136345d8682dbb2f0263ebe91cfa08a837db0667d75515febc012717f613508b8af6af740e8b022790bdf6ff10f4013a9a3473c6158094eeb6883e973272fd15a4606c9787d497dd4cb2c12991fd603cbd6b50f7a9c96edbb0db6aaa9690276ac0c75dd8e28476cae215ad0f4a1c6b46a7b60680b7b520899b2b4b38ff7aa81bd708fe1c6b91eb8ed0afa47724fb07269d3236d9d2f0bbbeb99ae89d4dcddef016d1f13636386f9ed82523b266069d423d74b5bfb3d8ff1460d94b75fe7f3a78592951b8fb502a8f3745a619e1e25599c03bae3b67459e96925509b9a1da4f72ac72d7b66d0410263431dd564bd5288bc68ccd4b74e37a6c24d1cc00a0dae17686e580e515918df41253ce48e3f31430b6fbc7e74e60b3aa09a4fe3efddc4dc44b25cdb20700e2e06e3800b27170bd07cd6d49801b5342bfaebbb9558dd4c3a84c9319f8a6e2b0a30fee11afd27ca0f3ea7ed83bb4c2bd7332c66d3ad9e02ed03f914d4f11a52b87ccc88486a6b9ec354a205b4a1b4268ec81dda640fc2206b9978ec393cbe3abc56960dde24b7ed2e35dd690d53bab51dfee64b907227d09b58a9c5292a7027e3b3a56c18a20c728a099e976f39e4da04412e2bd247ef382d38c92e5376f8023cbc9ea65cb954f49d2af52610de4985e4e13f4f0c491d8b35776f1a38799232004454513b156a34e4e8727020d15e89ae8204543ed361abb431fce8e53cddf03cd47074ab3706240895f15161b3b93c8a3d753ca27cc8308d16d17bdd208071b89fd23d38845ca4d8e3b56f704a601487fe5c2c03ae2ffa39f0bd23a599a27643e8ead65e4685a7789584399171fabbc69924b3de1c511177a38cdabc58b19b269bc764fb469cfcf1d96ba69c366874303b35d6edcc22f649412ce6559bd7eefa2c8e7b9c4828909a44f6c65b8ff45e3fe6d430b908551a11f2e391ab22f3f85b0ad11350dd3ce8cd6de5b33d429dc50e5e841f66c5b5b786698fdd48ccf79cbf12a8aaaf3fb6293128c81cbe8eff1ff81fabfc1f4f2b4810047224ed81bab52c3c6495699015550663b27c1dd6d19e5a4d9b91364a999ebbd9655b9d04426a9f03e775d4b7976e9c8c469de141f4cdf815f2ea95291c50f406d53f74f0a96cf5489d4458fbdc33d96b2b34b762af1db43403fd4b54fcc06de48ace3e258f1b42564cb0ffeda22996831eb0255db56637ab570e8b3cc613a2375405d5dc4420eac68c0714ab444672d96eae060b0b76dda6fe2be153d0c6f0c9a62504e2162eeea528574ef9f5bf61dc8f4d54be89b0da94fb7d1c3de5d6485ab7f2dc126c34483296e1deae012c193074f1a3af6ead477e2e8dfb04438068ca9d51f1c978ff4feeb48bf56ca9acb6f18422e5f318bc714d68260ccbbf2f752f2a00d49d367c346acb1d0107d30f35733403c15c7a4ba29ffbfad6dfaa7fbdd9eec459bcabc070a1cc7758947974f33b780929a7407c2cfd4b7db0be8a3cda8d8bcc14b0d4d74f53bd688e8f9b2408665e932198d3e2a6fe46825da26f59793545855cedaeae49e30040b03f7fcd631e76fbedd6ccd2d1ca69bcbb4e58515320ec1569448a7c558413d50279b0e031cef01dbb05bb9c7aefd1f411b99a7431e1871c8dbbc62c285af4a71c596169ff143f08c321d8a173e09ea851393581dfd02a4419cfa2e2b4a64251c4bb53f17ad04cf70e267172a9b02b20ec642031df2df8e32b7e13fce87558ebeb0d0bc15506c550ea132a9befaaae6b4ae5fc1f533702d0b3cef7874d3d248343947e81263d9506f96245ba54c726f36cc647f0e91a6a7ba21a6d20a472dfe8cb5a7ad68d010d63868a49fb4f52e4e03fd87fdd610c09547ea16b0780696352d9cd9539290bf21e576fb08ffd8eda011b8522a3b867123a8777ff959276dd3b7db82ae7a99e3307d304016f30d21068efd925a0877bf018f9be815ce6f1685bc021ba3c44ff993380bc3a943b358ee01e25c5ac52540e1fc935a301e7326e693f213dbc30393a9df86add34c046c734ae5bc6c80dd1268b45d891034206dab9e83117ffcf573f808bbf90ef14f5ccfd76bdf8e182ba1349312f22295e5a4cdbdf7abb77b5bf29275d9d56fd6a88452b46ca856a77db6d574afaa31b5e394f51cd0a072f7d5b5c6d62dbf84eb58b817bea78b9b67c89641103bea0ac4618d136ea6b695990538499f6735570548519791a6ee68abfcd9a0a7a5195384aa6da6152fe5aa608ddc0701391f328b4844cdf6784e1e1b30fe2467de6685dfcf8a6e7790aa0df1a97275c3e6846f669127330e44149a844a7704e348c4a1ecef3e75d975e370f369a0960cfbc0ff214d75f922108e8755c6fd6f949a18a9fb4b2467d7c3cabbb8ec91a3527f337f66c38877a6a99e5eec5ea288778d1fd23b5f244e11d3e77c959c9125a6a95b4cfbf6636a7e15e6cbf8eb0861db86dfe3ff3c9f8894875cfdb24c236b9f279a4143a6c3b57f730a4c1463a5d7b9e0b51d9acc114b428dd6713d4e86975458ff6f6eb1f972bacb9f11341b84f4150ac515e53189af17269a3de029ed423aaa2d39fc4f72341bf383c87abd106e365921fb58605ede45eaeb9d3419a8765cac5fc86649becbc78a6926ae7e0232c84dc279ec537d3ee7b4651dcece46539507893c5dfe0622e5808bde192d1f149877ce84d6cc218c05eb4b7e5b963f4d5a0c7367bcf6bf2b19197f5dc4220cf8391ec1359dc5b930c6dcb941bca16ac3a0b7c7aa0eee21f802dc2e3c2523dc3a45dd73ec91db603a1cd790ef984a44f676f2cb8155f47472f3c6f88f0a1160c90becffa99c172b870dcad0222191d22617a7dfe5f5bae8802e35375c6f886fba1a94f29329d2facea7ee4f35d3b18f1223f275adbf8c93029b0c3d9fd71e89601676d05a2b520d6ea633ee23d2f477f67bd2930e736655b4cbe2b48c5ffd40854bf7c3718e21f568344087c3da77fcc488f06e25950628c1f6310b61808ea0e5a324aad8e740b76915a1859669e65ad07111a6cdc8b24a603b9e33d103dc451c7b8b2d355fcefb37aeb5f90e822fd12abb9cd29809f469408e73c331772900d0f35663b4e9b42a6928d50b6290a396e8e781f618a7cfff0c7ca361e0f821e82d838866a48eed0b00f74abe781472d2fd0965629b0ae83aff83f2a3a71afa3ee488a6c27a51e50f0e1dcdfed037c6099f1c5f637095e2e3657614af6a525e6d2163d89541dc351acac6298614ac8398f6d04a84b8150f780a1d351080036317ff618f24d60474f201903651165a415e6e3966544b6106cf706089779446b4e16e8db478d2ee6aa20f4be60cb747708aeb99ba01c1f5640d0ef2b9c1c5123380f3483033d0d191a1ba6329bdeb81a6d52734987cc25f380ac6f7c289c347c376f2383db4d5cf0afb6389757bc617fc803de5e47c5450f70ba45bf5587c03cfb0af7666c90957637e084f5719c6343ee5e1d59d54e1d0b3c9e2aca22b110829d585f5c63d701a8b7ad9b1ef0ad9b3842bb03f10795ac060
+#
+# # Sign XMSS_SHA2-256_W16_H10 [VERIFIED]
+# Msg = 458f4d30f1bd34d306092e2de2924c259c3bf53de876188f3b1fc0b194ef548b3a60f874b7536d0b402b8520e98c8fb722f15c653d1b4fa63df8d891cda1e747f8ab9490b5f0b1b0e9df7f92ef172a5c449d4a10911d765b14221c70f8d7a1346b60e0ab8b6dd00d2792761b74746de071c27a83338b236f592b6ae75ff672848b34a3ca5b2783dad72e7029891c24fb77972bb4a7f0481547e8ba4ca62a0c8443acbe7d815f257ebc8d51e0dbbf1ecdb7e48e31e2ceef7cbca409da63bd3b
+# PrivateKey = 01000001dee4083a3b5767939ba8f1c38e28fbfb57e9eb0654e0c8a68a62ff71f193604057e5ef288e7bf4513dc3da8807622e808fc7865b8ccae0c5b9005134536ca2f9000000000000002398b69617d0fcb1d4f2a14314e1c809e926c012c3c4f126171acf2eff00271459e89d37e6e96fcec8628c6588bf28997b64e7d1004a457fb3f36a038f1b3722e6
+# Signature = 00000000000000234960ad0896d6a6d95ea4c961144f7c30b5b8f73004233729c9ac62bd7470d2df0e65f17cb56952c3f04a1154bef64e8a28bbf371f49ef3862126b956109009b18e65d5cf334d06745c9c5d574828ce7e1a1d6ae1a03ba6875a847be9d7ec382f3f8e3806400bc989aa04e263dfdc12de93dc42cd2172197a273361f35ea015993ea0a2a0ff8ec86b29416501df9d380d6a844c80a1554e2903d8778d3c9909bebfba7853255e2eb377123c00cebd3fd487de40c5a241146320d4edaf51695dcaa1deed3db3bd4953a291ca704ecbeb2ba5994d5142d46e7fcc1e7fcfa2f126b685b491276259321c94b76b8309c5bb9a5957afdbe0ee992abf890bd748a7b28f9a1bc18734afbf2caf15c52a70f1e0aa83b9f606daa3fb1a4d66eb47ab3096149fdf61d29f49b7f449fa30bda77d1efa2ee1730ee8835808ce92f7b4bd4c377ebc63ae2e4e73166eb4abbf5b65a81e0323be96ea48f4fadc81a3aaf8aea0a90ddb6a36078beb38e9f043ca92151872cf976a071d82c87af407400d3f275143eaab72639481effd4d6ba510d3074cea3efe9276f22571ab06719667d391c710453c7667d4b6a8d2f61ed3a62523ceaae011a165cf98f9c86438b764746283097658ba72dfb98637d9c9e3052061fa39bc45644ba4432b7b32cc1c862f7d6d3874a616cf69df43b8f06ba74bc5a54ef87732fb9730b2543332825bf5a35523fb2a18f1dddf51f0261b3a1accf4c72e4d38f4395c25a3cfc25074cc6631ff86c1ffdfb071f1423f67750dda8715d27af25c06feb8a6d24b93ab2b866a61dfecbb03280b62e227608735c15bb6e82f27a2b3b2136c8f1930a43f0ad0cda2255c87f2ccd7a97a448bc466060b69b4f55a84f6c715a8a6a777a9f550a15c44b8073f0722600cf78c50cf08cb38448af8727947903fe7380060af2fac486f282b1c67b500270a5600a24392e7ce8ddaa6326a6667fcd1345de58543028b5f78452e5855c74c2b94661e23edfacb8918d3412753ea42b50f51a63647821e56a9cc8d6f14e4cff470d1118025839da05209a130db48e8d72fddea29336295a3315a4cec58fbbe99132941c491ed1117939396a37826a89fd23f7ead3e4722ec9eced58ad8785f164dfe0a7934de81dedb972134105ca463ccd1dd0ca999c73ce8d2e3e11d30891f7a188c116d3eaacf8c27133b5aab26bc80e9a3446b2ce52ad977536006d8deda901f66bf7c88acf2e54077a6a2e91f3b1b17252777347b285a71b227f724157f56023ad8c7db774b74f1c6ad0be25f064f4d046b55b4abfdcdec65f15a16db418dbdd464033493e73bbf4db38a5b9ce63b89b91b59dcaecdf8354dcd1445f9cb6b2891cc52c8d07f90bb5bc472dfc53d8fc394d2cc23362c0583693b6073b1afdde3a191dbeae5f15a515b9ba7312f66ca48270b8677b71f069cb66d839ac58e050274ee94f9601d8d46692f6ad89cfd82036a8b3e9e100eae5c16741fef31c0be116555205c792365a934ac0fd4e473c55bb8f523139e04530acd43df6ae93c71e00ade65c67850f9693ab8e9c123ec791c3462a5037b4c979c126b8bc5fad839199a41e1c1de10e1af96c9b5f237b1f3c9c1d92d3ac543dc513ad17eae89aaf4e16e04c3ee7ce6e4259b794979b0865c5abcf524ce4fd301e495f81534a91ef4db2b257556c6ae6b820c54e6d3f41c632fc4596db73bbcedeb1ed76780cfb0982a466108e8208794d8ae27524e54b6779c4fefd860d20fb259df45d6226347e8aa9a795f16d23aa7066764ae257b54d4d12b870f74d85d3bb04778fb70f228f10528cae9395309b90deffd9129524606c21048a327720fb73c374016c236394ad76fa3aa0ce6ca4205ed5ecab94c62922554a3fcc37b98dded5f1b26a9efd5669a8134646dbede7b35e02defa8fda9ccbc43f9b7bf9a3c70c7e3cdc2059746fc69763a57d96b086b2ba115d130a0f31705b935c9e64582cf8c16f374879c09557e3ad502f8bdfab6d5c9ce9339848ff205dd6fdb683445a5ff44b2726e25db58dff826d710a342ef5321ce046a6d16615d349150f1977f5161f6794746ab6979a489926491cf58ecba0e5d5d705374a14528ed9fd6ad4be2650c3b5e66e7934faab1ee4036f9d4b8ee89c2b34801b116f14b4db2fa79af77f0e2a67bf8b7b65470e30285ba6262f98c5511805d074f33becda965098da5e56d8319cb15c5561d2993a5600c3ab267877113a2811d85532a04eadadfdf50c2100a7e0ae26af0d54ef7a6ab797337f32fdad6da0d95b0dbb494e4178370a36ba00d10fb035381e459660b397a540ba1095b3bd9965c7112ffb30c3bb90d0530b09a96dc36d2377bda88d9a9e48eeb85740804583f982b7a2dcfa3a9d1759438cf2306ab963f079f7d29f97a96f3d2b75e86e25daa56decf6e7efd71ccf90b948e2ae54cbc8552f67be7f61d99307bc1771d9c49f9e09905d8bf6f36eb013235450e0e181a6cfab34528a541080c0de5429b92ed7fdfe615f78ab049ae5f0b7549c4cd17b0ea48188f24c6f084dc3d48b26ebb06a17240a5301ab84077553b51edb6abc7e94e5791b05f7ab4daf4a903ae142befdb632dd7269931d56248812a658b62cfefe65061c51701234318c8f4ef9a82a4fc50f5f88ed4401d3efeb73d508ed049589ab8cf6b39aaf6b7a9de3bcbae1ce08aee769a6f68f1111faee2cafd566cb32c1b371b1f538f096565af6e17b71c383502c58b880b63f04b8b2a14c29c9c5e20240b8ea1c86a09de9e7d73a1064214361ca6ceaec15a7de139a467367be8968464711546da6d8cea3d00bf2377a503b52ba104bb0059098a2358613fa5d0dc99619049bec6a8d56b245e544eaf1cc82bebeffcd8dcf9357c25f62213e18e6b6a418c1877c13133653beb1249cad10f7669bdc3cfbb7fa3881c0d42c73b2fc864161c56ae9a12796f885cc3d2a2d5edc07d668d06373342392fc036a3baa509486fa392b0c26d9559b23aad32257ef46a3cc5fdf412e5679f91506bc090506a8d1ef589630e5872ebbbf712deeba493966804415d692dbb1bbcfbe3100a738833bcfa6c3405199c965750da0e0c05f7d81ffd570891b9d543362c3c61a0833d18ebd70d696eedcd2962ea5b5b0955b6031e5da0f52d99b80ea6b88c53ee458f2cc4b052aa99b1aff189b0990614cd07622f59358509b22f7da7a830a0d4475fc103b6fc12310d056eb7eb2e1430d53119a5205616194451a65d06b3dc1d898786b2d7d02f62f6948f3bb54ede5931f811cc501481680d20f16763ca232a8edac6a1432c81680bb06e89210b957efb8072bf463b3b5616143fecbc12fb09a367b82512dc2966ed33f795b26f37d7a46a7f5a4c0243e73879eced6149d51146f49b25990d72188d262e42c0944df092c18925c0ab09e2af6f1d828c35421e45bc3e89222f58cf6e6946b1e74d7175989f3ec19c038faf22ec0c14f3004afd1de8a44d048b33887c2c4a634378820601e596d277f72a427d54a1e3b4f5f6c8df0e
+#
+# # Sign XMSS_SHA2-256_W16_H10 [VERIFIED]
+# Msg = ebcc54f09738db1c5a24e315a7280d4cd8c266ee1024d3b32851fc49b7ce05c2a43eca9bb7d584635eb2ed538d86d773f4bcb87a3df6f595bd1e5b4c8b03a70c7bdea8f441058b133dda4f409f099a9b68b6dfe96de5ac6869ad5aaa9cc8630201c8df17f75202ee3069e5f912a88e0539fb0b04d487949a1f5a4ae192e18c24f1fe24dce1ba1c00c3bcf703a547f336594f87d1d2ca98a9096d4da24725601b1752e7d7f1986d9ea7ebc4caf50169065d05997ea6dc1e6937c1d7aad19682b10b56f8ac4c148122f9e906ac21aa0c3237b41f362cd869e9d25216c466f4d2a885296bcae2f02ea3
+# PrivateKey = 010000015be1f58a08d77dd7272a768e065da87a51c1119d1220e0ab474e77d48546e95a26b9b3ea21f56e72f7d3f49d74d9d4b026f02f987f8c14decc283b9c6e37d3a500000000000000e154c8755dae5e932b1efce973da5aac03f73a9a9eff7453318cfcc103fda6e9e0bfc398c78caf8b70f75ad1e0880c62adeeeeab4369e62a984a5f51967c215e60
+# Signature = 00000000000000e1c08cb6ec79295b5db6e3e243fcb273ff3beecb9e7973cb6a2981907273d4f8a5e796f071791ad5c7f9842679fbb7bb7f99db19af2f29de4ac70bd9f31e5b1bb38ca3a4a1444ef23cd46ccf998d637804137a59d30c6f2b141d01e9a0a7826ea3f38ed55cb302e97e71edfcc4a3e88a077427b39d0931403d4ab794836cfebd4206c488b829b4ae56c35eceb96974c3496a5b8eb590bb7caa53d824455ef381b02b09133160ca007f4c7c0854e6fcd92842731583b4f0e73f840719a43f45272a6bac1a66df28f8863b566cfcdc7daf51488c6240ce49760394a7ae66719565f030900df8a0cfd234e47144abf73b0dc4611880adb91bfccc6002cbc98ae543adf71ce7c8b6b9f6bdb3d13cbbd4c2f85faa7455c5634ceebc7a23bc4b7a7a1dcebbfc32a8b1efd1ae91dae2b6828e178d92f8736304ae84e07ccc2de6e060dd62fa523d355584cb0a9087c3d71d2c2bcc56301da7533499f934e88cb7b519a7e5dce8b278407bfacd85133abe632bafb0dc0b6d3d0979229ac9904739f516e7c52ab18fe1e2804c73a59db242cd706a755ecdf8873b2c420a1e17904d507bea7a3d47df4753a9d3a32ffbe9ab1da86ae4267da164743d59991f0f67c7fe0daec886558be98a0c4a21178b666e28844569ac4d0278eda83bdc2904612f1282d5350896b6aa3714732ee90054f12a856194acdfac93f789a521e11a01eb6a867eaf8909f6e715b31bdf3ee4f8038b5a30589b659ab193eb039844233432a60f5e93d036fe71899c3a04424ea007a0f7e287ba741d9165ec4245c3fe367a229464d5a459567a08c065144e067f528a1a6127377dea663cfa0426785daa907a39968c496b156ea0770b6f0a0d363e7049878f6ba709d72d82d9d1d0abb8c31566ad5227450cd9eeae55e51b78d0068af91d3b2ee8b491600a86ca2e0e0ef1eab000032207000aa4dd72f7877ee314d436fd8188e5b920794c79c84924b313f0e6f5ea46ea5f37583c4946709c79c26accb57160dd3d2397c10318d9c39abe1f0388425db6e908fb628bbc8e55286f4ef2f47e02cf08ce10951899c47a8b644670927a1db63735193498d5b867a59577b5d19373dc17ed508d792165ec31822bba1e17bc6ca02420730bae568bd95bb1bdfba37f7720ef937c39c7257232c55a8cf33acad7ea1001023640c432b1c4f8bdf693bfeb121666685ec33545dff809d7d4973b7f7a51f57f2ea48042fbe012ac22bf7314c38996153e5c4d48e517bd48639625c2394972a5fc099aacffc4aeceab6803975be4cb06c07ae8e12c1cfc2136b7ef865ad53e46dd54d21e7b0b2cc075a735005a4d532235035ab9f983fc984e726b7d66e1b0a07b3075e2f1fff77bed62864d409e50fe6e8e803c39742075a6488f9093d33147e0300b0580324839fda11a716a04a27481f8ec6f2aacb31d324b3dbe486595b0dc4b092fd7bdf6a02076fdde875398f7f056f007d5c4340a13313338d635b8b2dd65dc1c57e8d0c430e25448058b74e0e787db2b5838c44dd3b467fc8fe2a8dd321742858484ffe1fb74b004dc8d0563d85fb3e92ba9dbf2c72354b395120e22507cf5ecefa9293a2e26cda592a8db60f4ce71637373132e8bc6c83ebe162bfd9269c8b6d31fc264a74fd5673ed2596d16244227f9a7b010290c754752e48f36a7eb4e45367c7f92d5c82cffc50ad92b9839018c029a17f330111fd25bcc412dd4cafb08dd7ebc2780d6492e14faa90c3bec74713651de039b17eb9770935ddf6be87917ddacf0bbd0222ec50a0fe81a9dadedf602b3034c14275fa49a3fcdefbac380d7a4ca9e3ece5bca19e783b57b71453298e39d548cedbe07b512d57ec399ea76d20e14d3709bd8fd5bcc6aa057308b73057cee4e86ba19812e19af12a37318767c6978cb9a61171f0ee7f2598cac49b3b838393a44afc792d86aac1299a88764852958d4e6f13bdfc2c34adfb0b2dfd522981b29f458b64c97e30cb43e5dd47a252005cd815ac5360227bd55e576cbb19294858a4a86effc7fd5eb486f2cec0cac6b3dfb0d43c0adda244d43a2e06b96cd21b9c1b583637643cc4b77538bcb5196cb7babc763af87cf13ffa954e247f2c7fbb87f089a6a63ee14f6d691ce5cec6500acee39c1bc06a51da4733602d50a84758f06a82e53f07a8e5cd2e280bcdbfa84d4d3804d0e9f38c8c4c5c614a89ae6d51a74c63b06a43d7952bc65a884ee4a8905f788da6f36d0790be4b8b4fa336dbb845afd9f332f32db794252c758f4c7f24629783829a9e60d693bde46bae958282247198e6886f58642415c2f1d2c035aa116e0a95126128ac4181531bd5a3abcd0009e34c003c71b1b4b394b488086bc269f285176352cf1a892925f76fe9ea3ffb0d72e9bad0e4c83477f9a72d922dc96893b74228d4afc1bbb08bd97d5b2f5a7ca33e73aefddad59ed9184f9dc7d1b3aa7b174ec81b7fed0159c1dce093c06cb1e2eea45381192c34b0e95f8716b115f5c59b76b39a1ec3b22e2b45f2c46686055c930a13224219fb3933a8dcbd8a2ba865f30986a965502c257b39853a903a1a621cf90302076a9b822616faa4bda00825ef1906d843745d58bf438d3f49847bf3f0fb6f3ed49db1eb774bcaad79c4309a66a317df0697fd31adcc07cdc690c79138b741a68e629fb3c3f7353e8ac36f5d07617fa93a7a063e0c8d8790555792af1125017907e6df4144866cf5dc4f926749443d086187cfdf249d4e14982a42b7c1051be2f851f9d475d1728863b49d3aa03625e86780e0d41751315d6aa55de7e4698056735a6465d36634fee09732c7a93215a2e05c2b602fdb3af68a410143c8f931296c3077ed7f3753ba3199f39436b6f8351ab65f57ae5bfbab6d809a5be7b740ac775ae25c19361342803a3951a49c202335c133532ee1eb3cf07fc98b5f9734241640ea083cfe4d8e0207562de6a13e40a654d9aa6e32a99beb44cf48aa68c5aabf4d8d5f52d628f6a05ef48d5c9ad7c1a1b4bfd9b15ac521021adc96382e2eb5357d14c933278c30b74c5092ca8ff4e36eeba2e6a1f74b8fe7aa047467d0a4a63f90c93c6a369fa6155627181e759cece0fd8fe567ba95b78770638e4220e3233a6ffacac9830eb85448c67f037667fdba4f802095b3d54f3b15c1048056ed754ef3126024ff6e6173e94fe5626ff64c79e5de6b60c391f77ef08e91094a76cb7c6a8abde6dc36b69863f6eb9104d47e91f237ae7373b3918cd02134fa8d8ba870efb0d444ffede59539e102846475ad8a71ea67c0cc177cf950c9437785b2491f070dd8fe6e34a4966f43b89186fbb21bd8ee2da529fee058125cf77115a4f657d1983782ecd5f5e2170ecbd15fd631e9ca668ea1d2c8299c103e13e4a447bc5a4aa114f9ca241e89c4d7d621f0453644feaecfd14de62773c0522345a9a91d7e438c164ccba2d3c7e0402aefdeee0bdb3e0d80db7aee9a10566fb06dcdbf9eea5cde7827e9e8c4be1a88c45eb763cb36f157611d307db92470254702f70
+#
+# # Sign XMSS_SHA2-256_W16_H10 [VERIFIED]
+# Msg = f2bf311ad45cc27c6d3263adea0b55e4c856d5202ee4c07f4b79da9c42387d70dd2d529f037bf4ba99356e8875f0c5075a0d89d1fa699710aa5151ae49eabee6b4704c28b45d27590ffcf23074cde0c00e52bbee5fcc00bd76c3efaf71368526c0fb7d30c3a71265b9480bd90e655670679936ae36b627e1bf83c621c3d1b5e36bb928b9c720e8
+# PrivateKey = 0100000175f30164efa8f83f3ded130ba833576e92429bc29e19f3e306f937f607f940eaf7791799b7c6dd9e096d4777ef9c1f247425039210a00e1bb5ab8f34c94fb98800000000000000afafce1eff389be71998c3a377fca8fe8c93a6c6008776e2a99bc84370e2603f4862ffe1e5683fb144a1cac47088931f9fddf25594043ebe9d64539b3e579a05d8
+# Signature = 00000000000000af5dd0dc911486e96d296d3d04b191f3d0a87ccdad28614b78d0f764b5ab5ec3484d7c601a3533f71453ccba2720dccf92f9cfbaaaa80268bb39c005831538bca339161ceb45bdec989ee3f1b57bf458a015da6327f9d0dee4c12a80597387bf8728dddd40fea699625dc99ef229e15d1ac3eddf82bc87bcf18ed9617479de47ffce788f81183994f67d41a68f75c330b228aa84210cb8ce3ec456cebfb0c936b85ab2d029579c8426eefa0e78384dbc9cf941fb8658afcb63d92db2fb19c387913f047dbdb5a6fc2f697f2f09f003e8428ee67316c8d82d88d1b491d8e87ba93e62107055af6f109c00eac4083dfd0bc93f0b34d8e6290c61047c3a37067ee6ae530fcee761ad93d5abce59b9154cab3ab8b2311faa7ac960f2173dfa89b73ea139398c963784605ae4253a0819c48d3ae005ce87c8055a7591886078901be509d8390466b2eec3b1f3439637ecb1130c273ffb637cd8a0c5a8a9720ad7c1d63f3c08143064845b150c47f55034c02bba352a38145a2c1942fc7dd5f0a52daf08fcbfceaf5fc4a8eb555d10b6f127ddbeb5d89fedf94bc5cef23ae674ab26da9f68eebdd1c90bf9b3826a261cc83020b864b61f0215214d625c23c6b075d9248cd5878cd14a016b8684223155b10288a0029eb3f1ec7430a509928c8d6d1e2aecb1176ea8fe7b5413e4152bb3528fcbd0ad6976ae349c10bd413b74cba663c1c8b30c104853ccbecc579acffdc76c6f3b291c95ca3f6d6055d82cc9e3a4ffaa70ea6c9150c67bc129d206211b76c1129c1a0008a8534722563bca8dcc4e87d96a1e064e701142ec0a0b72184ec8d1446cd1e4fd63694987f24ac79e2fabad9172fb5c2360c997318d695f1abaa10583c4029cbb0e60f033b443198dff7b43ab7017ec3186910ea526c3ad1d1e06aec9e7294f29e44d2c631b1611766df0688b65ae23c1108372f91db5b49e6a02328fc4f50397643c9a510dee5d784ba709362f09fdbfdb25b51203bce6c6c48c4e425fb83118a41f0850de9913eb8645bbb05c889fa61b4e7801ce3935a777d0f5241ad5ed38e3faee711c069bd7c0eacc26a9b7b9a4e59d8f8c909f2848b1eb10e985dd6b283d47df522635bb4d53b5492d35f70c17740cb0d5f1f9c7505d7445dc2e76819638e34fd08c7e530ff5a9b2532c589ea3ce1d455119498447cb75e5ce51c61d93230e1066d98eff254298ca5dc6400fe0ac6cbdd7e07d1a86417c5aa74459f251201bd214127f4615e4ada636006a3dd68b2fbe050c20d2abd2d05daac5fd4d88c8984afee5dc03f58c5fc12d7ae495bc976576685665bd479b4657fd530e3baab3c1f2b122793f91fbf653e158b376161ad530cbf06fee4d9f658c19695fb2f7d266cbb16546e03c086c263483da59ea45b3b2122cdb351bd36654a4e214ca12980035caf0b9a45a3e607602e7f2667a6c51ccc12b50ee0a361b361ec6da8a1e738f60fe6e0c0194eceed892cbdf74c43a6a14ecc9267390c9d6ce10c82f8dd57edeb7d60f50f81b7372a8b7049a08e5db7c1307d3a8c2823851e2e932be0e69544354ca699a9844e24c8382165a9a25e7cc7ad39fc99d1f841a49918c5a3f36d2338fcf4d31c6843a96136952b99ee6a53d650b86585ae64303e4c3f212a02c10503c2adc351ffeed6f3423f38816424dbedcb24d8b12539956c5ef4f70d1d3d32b9c15dd4dffb3e603861bd4e7031a5fcf466b1a08685277cee264e748dbbe19eb9f5f7ae24d1fc4dfd2419d2da95d9634d1a742bf0585d89c6d296503bf1bdcf85132dbc8ea8967f69e204db75a3d810bd775af54248fde8e4d8e65652de327d315ce21792d7969f266a9cfba12da6dcaa173ccfcb63a2e102b487ba32e1961f3b8f327c5f0fb74b16e64e4101d10584dc51e2b430f36a34d642ca74328f03c13e6b46fb65c18840244ca926d927fe87f999ab4fa2f88de789d2933835321729dc788b74ecf222ea6e909c6cca40843bb89a335aa435856df27ec1591818985a0bb0935a5d009de2994247f91b8a5a97952441665f509f0cbb6939796e2c8537d099f8471ec8b2e4510ac572043a4c3c3484eb0db7e36fe8ae05e57672bcbc15ee42c0176f0be46148ccd61a309a7c0444082290531260cb8f32e6a18f30a70081f59034c20decebad83339d43ff76901fe3834c52b36fd3c82049e48176d54acd06e17035c46214e2866b1a02ef56223173d016f761270f664e224e0612cfbeefd3d1478fd1a535de406e2a31acb65c4e7091dcafa8d1f4166817b51950fe496cfe9ce2d511d1ea6b514fde1b6fb69b60d72ede9052cf1aefb162ad460f6c1221201fc68bb6c7155914f08a0e75a57b6ede783ec1cc7a19a2fd108f791d2748b0ddbffff2ec7bfc1512d203c0934470b42bdef71ebbd736afb9a4c571c5eb2fe885f26d0f5f8b2a8201bb1af7244530cdb12a64a4c1d16721ca95c98c40ed2456fce3fe34fcccdc594d886794eee8dcfa9d31b040ca68e0891ee47535a38759c4787cff3d004512af6744ead66e142acee659aa2bc76eba1b3c49cb7db9d1757e2e2754a991bf9b083b78c6a286b2336a73815a3ef516e26f6a4ae0f0d3871810e927279b7fd909b22e9f5c2b5a72e59f1661dc698ea3fcb635005617329380f65e3e4e1ef05ab6cb3c05e22902176726415403294719329bcef1f21c852dd4519c19398303889ddabdbbcd810df4b64cf864e0bc29fed401db91fcf540c63ed753fe83165d19a8bd60d1d0759982868c34fd121d7360e8bf1d86a3ab09712f5002bb0c239c0b006f4e0e5e39576707c7d7293274df1897291a417e1dbfbd08a13cf736333f16acea7cb90cd14a335c9c9e0de8b37708647e3beff2f3d77f5db8c6129d31d4b597adcd757358f8523add98302ccc4e4595860d902af898818784c03e45bc8144b655ccc2d8228d6d804fddaadc0de8034a898fc59945bdaee46dafa9378eeaf8558df7b0d52b4cfac5239456075a269e40a06351d15ece2bcad7812ed8c5f95831d1bb967b48eb2ebba4a5ec794ff486988a2ae1ba700269f42ce4929ad7c0f2cee683587e520520b7587406fc81ef803891f5cdffd7166d5c4b2392dc2ded357f615bffb5a653eaa228525141c2b40bf05b96038e28c042aa27230b0ed6a2697bd2d9956d341b4a65f4cfd5cbf5650a591d4eae44b5ce810f4d043e06c050505cf825d960d8af3b134a7e4d24c7dd08990a65a1e0c281db1885e09d78e73d5f92fb0856b46b9d3a718b9d9e3653c14ce1b46d878478e0d2b1a2dd81419d81adc9db1d99d16a6493ba6327965581b05c13b219c13d502944991e3b6520a1cbf033d0ea4fe07cb3ff8791af9101f7fbcb25d5438ae4dc94c076579284c500641a2e1025e7dfd04d52a9e9d0d985839c718914ae971f6b725cc93074c7654d88013b11e54899a0c383e922c181ff46e8662d20db47bd3fae2585c32738edce1b8255e6cdef4baba1f807bc164a20a7cd98f4420fb29dc996908a3315c2e75f70935eda342aa
+#
+# # Sign XMSS_SHA2-256_W16_H10 [VERIFIED]
+# Msg = e1868d1872e71afabd6e51c6c154832ebd7d766da303514dc808c0ab7d7697674a03b161c813a4d33a634c70d1d50738d6fb41ee57a4df18a277efac4fe089f697987d7e9ac71c693c82fe6a2bae440a1f34bd2655d958408f7f7963654d12cb1e62b0668eb72c69ddeda3db8dd4b78c72bae5eac282809b4b0b93133984e19edaf96e07e1c0b542d6fbe58fe703adc786a460851e5381550814c8d0a73e294817d6ef343ff17d9bb7ab72dc3a76b538f7ccca6f154b043ac9addc84b8810f970b1c622abbcdb47a0092ed40d5f3b332773e9eaff5df050158e0ff74977074c5c0543bc92f613c4abd31c3366b904121de54212437151d91ea9220997ec3b2e6a8fc02a510a071374d761b23c0bc6e3540c5731a11c90a3f103a
+# PrivateKey = 010000016595107403cf900b50d100869665b8bcfc1cec30faaf4f3a22234df8329dfab1847e96e1775eff070b701b288f0fab9f8ded64b3875a65c83d3663e3164e9a9a00000000000001aea4fa1266f87447a1c6f007099ccec9ae4b6d942ad6df9f42dca8bfe864bb09b48438da1e2b2dc4e49deda9d2acad4560144877d1f89068cc265ff647a9ec73ed
+# Signature = 00000000000001ae776264b6f4ee232e3a85bb428ad854a0df286f3cc0d9f111ac92a959f70073f2d3f73a6daacd67a1dbd7ed6b7da4f6514041543847a4a53172972b74259d7ffdfe38358239c3c05eaa01971e09e1f7230ea1f03c299058889cd58645f302a41cdc186e07cedab9b46562ff712d188e63b119f85dbf672fbd04e4c59f59ffbc945b1ebe130ce51fe5c47164a97545f4e194c676e4067df41c3de9cab7424cb46b3837b8306b391ed83422be7c35d37c41bd50a27461b1ea2583c0d73393844cf966d9fbb4a7f43e5a47db9c49b19399adfb003ad39896c90b328be553ed76c4bbfbb3eb5014336be3c6c6452e3502633f7fadbd7338235fd97b2276a00ae4efaed8b19108d558a96575ad12dab0f227eaa42897b78a6d9572ae8aa365b06ee67f1a9e07ed34c9c1aa2a6dd394b0ec05ad3859813f9f6ca56c9d2ef92c5ce642b4e27a235b502a462010788557c7d90a169799dee0f6b63512c9a6d084dd3fb882c5f16405f6d15a5005516c66162aab9298780ede22c051766b3c5049b81626b1688e1509bfc4abca7bfa05611ab5af92d8301cfa776d69d53caa81afb249d6037e1b131af557da7af35d338d40cd98576ef21194eca258c3b92aea61da109d312188f4153f853fc439a954b98ba031e9a159a4a1cc736ad6e10bedc6add8e3beb1b7b7ffd0e867532cf102a4252ef6a7d395b1634242d178746c201906efc124bfe7ac5570b992ab4302c3f6fa5f5e3f0096fc6a44dc38efdf2f454795bd033939279409fe73ba40570c7409d4d34c885a45ff5d527c7f35043a75f0d45da0d15d84be4280eac39d283aea92464f0ec45bfda1c1a7dd868160fac9df0b3333776ae05d05a173a0eaa9bbd9fa7bb14149e7c1e5eadb72470ef00fe8fe91797d86a0ce384a07ccbf462d57219f59a69c47d66e5771e99fc03aa174b81592cf5e454e3bc40c48896c1ce2fd1d27d5be7c79dcc1bd725b87ba9ab80de30d18692c6079afddc08686b1fee29ef15ac5c4daf95fb42847491fe15c5e9b51caf4aa087e756882ad5aacc86c94dec16939ff5b0f27402d8ceb721227943190b072e9307f8b7efce380121df43acc1790c3d1c68b68622f21c3c0027b89f3a358c57a1f5a903de221927a41d60b7cc0bda4969622690cb39f4026f67922b0d6c4e007f6a62af2fe4b6df4ccca323a1a78e6c8bff43cce6fb922b9b8617cdc2f8cf6129447a7907bd2336241f5846911cc1e433807efe68901a467c6079c0fda49d8a3da591846c7d649a82c60368ed4766bc7cce01b34f6ec138e0d2d7ea4ac40bbcb86017ffcef16f850ac25638936a582c9139b6b0a2e1e42e06f79f86241c420b30be6f89c82490ebfe716f70a958549068df43b380a1ebf12005c0774a8136da2088103f0788a75e33c6248f830e834f28db4ecd32e4743d85ee8532440edf5291cae5288573f65b2c249e5ee19470062403bccb53560f484401f2c7c221ea5ef97238029548d6d8a29bf25bb7ea87b64a68557df17f3b19e53a39f2c3ad6212706ee824cff3ed5f6c569c30854f24ffae877ba20fb7b998dbcd01507586117c35ea73cbec6c8040bb0266d2327542726e8149d1883dabfd9d059d5319a9958180843555cd96038c6da9928826bd7e65f8f2d7bdfa29db822664319632a08880e0a918fae873cf8d9006783ca2e781fdba3a49de0d1642899082ef2a67654bef2bfcae14fe3e02240910eecc16ecc9b238bd827fa4bd98c49f9fd7e3ba9c06dee20cd6b5f8d7483a63e37376b506ccb4290a875cdb368bab408e130ddaca9d3ee5cc77356e2c58561630c703665192b6ca93fa80fc4922100d1e46f18305732c927940ddb6b2238f3373950f924f885231f7a4b36b0f60b24c0442a23ca43da8031ea968cf489bbac5d291d3cac0c93d932e3cfa5010812017e9122720c500885417e11b5492fecef94731689124b9a9cccee196072aa0159756c780fd1daa1f7372c1a8d00bfc195854d61f85dfa1eb0fef26d11c3c7103a444ba8a3c33d5479a06bbfb2df9d983f06dd8f34926af134b8205fa7e98852a5f0173eeb52260ccba9aea585d5903110f86ac1bf3cf69f80db1924c9aecca81971b4c8b7e2c572ac5de421c286a42fc194a415a69bc93fc3eeccbda2ba10fc1efa13bbd58d17131dea7b88e906a68ddc6565dca6390d1896174868104a035955360d57485e9d2f007c69695320d27e5c2df8b3dc1ee60ca6a4e6821f8d06f919d4546e7265824d31125cc67c1796c4f3f407406dcaf03e20a4d7b233718f9bd64eeb34528111a2690b1be92ae1b07dda10a3e5f77c9e700f3aa08aa8956dc3b86cd1e995d852f80bc85c5d4fe36f24d7bf63fcb5cfc7bac93e7818c32447c4d20042b2223366427382431fc9a649ed2a3ab8e221b59b34457db0cf5d2f7e085139cdb66134186392cb1c64b1f06d55167ad5f17fb1c6f0dc2066f21cef1a0607200a10a6b69166f111c1760235e68242cc53628fdfc35cf8313e04767523f3131b553c4e5dfb634f2666986b8d17012ec0289383c3b3adb74fe96ccb4ed35347ed768c181e5617ac1f18cb706ebd994e4da300193fc97fbb56a4006e3e950f0817fe788c52fe10ef7e68cf2158a82bf97387892869992f9b01bafc75b0f5f15326c892b2680dc0877f334c15fb987ff2f0b920d5f0cfd2df152e9760f51447de412b745de459af5d0a721dc4da98113b7a3f50bf39346065c7ab3a99b484449b9896b447a80b31ababf935576e43e3ff23bfe292e020272bdc0423d50cd5ff485c68600af6edd37b600eb0cf4d783377474982930abb334de425136675cac4dbe1edabc73b920f64f2e6a9c079170b931e159e17f1fc97cf7f91df75c5849c5f24a032d525fbe41e3b513b29d62bb915cb02b2c303a10f11bb650377f135bcad667eed33248649a818aabbed0ddc043c71a4c6ee9eb5dedf5db782846dab9c740a28119eff00965b3f99ee7738413872f055b1c57000dba085f793906656fdd334418400384585344b1cf197eef22484156d9b45438d0949001ca48bb60896617c76e411e12520cd7c3dc8bef9e4106ba8d6b71ae8fb9889ea64dd0c67821574222a1cb854e0e5599f0dd4c7ed703cde1223b9f6bf26c1b42e7f8e3caeeea3cd76bacf80a066c22b920d088195425014459d5a8378f0c4e702161f5cfdcf1cc070cc1fda4a784f3407f11bbdfc3a143e655aa3555a89811f1769a2d1804c4dd94ddd8cfc58077ea6505a89f59618e24987663e205f4a3444c9536e0ab4a085a3b17f95ae2a598553768a13a9bd43546babe97a8a8862cb0d8e6b15f5215de7d1b030ba6a3aff649af6b12002ff9c455a4e007a9735dd53f01a9d26a779d5307df3494b36cd4eefce69f215ceb2183a9eb21d865ab2b1f2f4d52553ea9bf110c2131e0bf061953ffb73859f71e706905dbc38cd0a75003af8ee3b6ffa6fd4b289c5668b7c903b13e46dd0dd9b0eb7bc8cf3aa8e3987403abd9cea6648d044872d41d575693a1c72ec1648
+
+# Sign XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg = 53eb75f30f59e6008480a5a6bfa28163922b526004a0476bc445b47cf00e75ad85b8f006d1ab92db3df6555a8de91a742303
+PrivateKey = 04000004c9167f17a269ac3bdb9f1fc78b64b6b76cf8040849a0509b14024d38a144babe40b1eef31003d5d4976b9e334e4d0bfbd796288336f5e43e7bc9781fcc6653526d950e6ca3caa839135dcb8e0815bb58c7f3984ee8c2ec5da5bd0ea0c0fc003e2cf0f7548290ac48b6acb8722c49943cc275e02e96ad3b57274e2febfdbbf6160000000000000000de3c00635237ca3d284b630bbecc13d9b689a096c29ca97ea5286bd104febfda730673754bffde5fff0e422b1559a915747fa1948a35acae38be626cccdd32950273a643f9fc0fb433b4b0e84e96866e84d324bbd75ac6bb3850f893f8ed2ce3f5b76e1faa9ae5db51598410d33d719d1a3ade983dc930e045e535e5b8114b7c
+Signature = 00000000000000009f6a7d656a7bfb887f6c70d7224c673b2d3676c7ecf318dd5ca8edc1beedcb190ebbbb531f77884a6ae5e47bfedcbea23e52c6a77fb9d29a8d962fbee53e8d3e995c989dc2854f1c9df441d1b5c1d3fab173210a5c49dcef89ce1d06a6c83eba53391fbc3d7c25154e2eb1f27bb780b6d4f9127fa158295afed23014333a8de65288cff94ddd480ad3538cff53623f57883099e1fdac57a4ec681bf5f12e75854d1734494843292119a3d9c2181997e8b22b9ae0458abf259dadaa04a8d6e9c10a8a79947d1686bf3ff3a5a299d0df49ae65ce5ad85832be92f4e6a2a2d43894325584fad7b80bb71a3e477150dc5a51bd422be97937fe33595f2864de232b3ed055beb31868819fb940378c380ddc40ec067da05580852be80da962e105e52da447464c86b57bd74b5ded5968fd53df6f6d943833dcc4689f118d5983eafda7e86914ef16d76a1a23c001818655cd5c09750506be18a3f5f76e667b17c898b81dd6503b0089845cb9c832846ca591f3b03e03d88ded3451ae3f00a490edea168009062924324e2449970d396aa5cb7f61b44eab48806b6429e615db73ebfaec72599049f7f395c708d0bdfb887b0b54073837d2d202eac2a5fe69040aee763130435e55143172a84e8e016a43e2acfaa94a8606c42e13ae1bbd823d291ceca746d98156335f147c5c1173a743cf172cf1ccdfb731b4f1f4c4f072c3e2c9f472a7842e57bbe4a054d9cdc65a958b5cf24ecdb1b8203fc3628b99968b797fa565c80cd35df2a56a486dafe42fafacffc5f236e7333350f70c3c998e20fc4e361dd1865d09f8a6299239a9713b635067bb453530f4dc59e5c20e2af203c3f590214acdb3f73fb128c3ffb71b074fa5946fa8012c6bb2605888d12c860b35ac2dab865fd7954c1dc26d74a586fbd2a7cde736cba907c5485f65540031ba8665da65a59d781520b24dfe20ac0e7777bf332ba81aa2e938f7d9c8953c1f3538ba204e86704b9928956a6348dc46e5b14e51c64b5e6e86d62563d15e8da02a21b1433f2466932174134bf6d82de59cce449f8108ad7d612922f24931dd2e4912e1ed40488f072d91e77120440a2ad6cf48e059080856044d8696cac7b44810e567d16d19a88a9b99a226e970533ddd47572bd7d3cb5440399a8bc0fc66bb988dc5cac60082de7e760481bb322bc3987a2e7f669b61916006be38e2873262ecd5b940ed9a5409b8289e064cec213b9c593feeb0f00887fc2bbcba97e3bc26d48a8c5e92e793359de780e2d39473779fef268557ad971d8e3584f09e6e2a477150e80569b0651f575b7ca455ff17586b985b6ee538c23876cb82b14c1637031a7f06f26e2ba6402ff84680aa484cb62ab7b94d4ccf9fd61ba948a7ecf7aa218162f6660b30880390cd4eccc27e8ef9466694583eead9ab3626b47d54eb0b9618de704da7c118f0c4f5e382ef85afa0c26173608ce7966cd695a54d369ce9cfa8ec17772f37e10cad3b69c3e7efbb1187948790d2e1f7cde4b6ed230ca5d6d9def974c40a0a93d5bbfde7f3376828c6df4b7dafba91ca99d978603cad8009ad8789eb577dd25ff742bb072255e4d2511c7aa424123c34b7349c0c3c20cf6ae10154a3948005d64a98d40533d12e505da6b44ff76dbbfde61b2696ac670d7dd4b13e2301787b3084af746191e94b86aec5132c0f555bab5a6f37e2b76ac3d0728dd72c9e6a8df2a61787a2d895b62b62b2c863da53ea0c7437533a9f63130a402e1a785eabad4ed3a02e2a5341ec4cbfb87d4b959e8094fedd137f0897ba0700a4f6df1d88a5da36273613aabc977d7902db1913a0685e1849e27796d394324da11ed073f98f7f0eab7e024afb0ffc15cbd345da31d94775d2f347a373391bf4a2ebbbe27ca87c3419784cf20e30449804ccc27f6e8957a5c4b87d3eec134ec2b274c920e9c36f0279d4781302788e83185fd1370127c3552e1ae9943d9f4f763cbb4dd6e481d41c4b475038cf117246bc07c67d34fe36e62cca0288abe0fb67caffd4d7898c1b17461fa306841f63d726718cc2e97cdef5a59fb0c6e297d956992f6f4389d255d0abc977c8476b3ac4f3cb720d66538c2eee105264d17a8c5552bf9abc1f7428d2f92c854aa6bda0a1b3d28ab32c852e3fceedd6d398b99a03cac5a1f0c04eecbe668290f81778a3d859af5f5e482926ee8d8d95bf37499ac1cf66e69717e501a19ac3ba05f1e648826eb06a1b4fc6bc2c364c75a599cc9447c34e15f178c7b540e33a06001b7d0063a3089f250eb3ec55bdf3b2d561703642dda9f9ad978a91a8c21da16b4fd71dd13ad359485195ba46e9d1d10381659b79fa451f6a1038321688a2e01a301c611501a6ab7ca312d5d4219ee6f3c2cd3db3c9c2721b246ec6e5e851085f2e5291f694dcfbd79c549435b0bdd04075d8e1a9f8ac5e22e33dc5acd4d45bbd60bdf54dd9235ef0c8d180ebfff3fbdb003f0bf0b68c4b7d34223bdf7e4732d1a8098bc1cdc97acf37d368a8f1446a28754a5c01d2ead5f6abd138e09c97eae39ecde00207cfae22379e8b1c596631c26d150023eca2b0b8182548821776421a63ccd97d1f1611c27891e30963d17fdf34c8f54948fbd315869fde935ce3e1197436d15c5225c32df5d63fffb85045216413d6e3fe06b07fe29a32b7b91f0b8184aadff05b8dda69dbe37b79a41893fd3f06c033e035e13abd5e56d66785dfe8c8c91ae74c6aa74a12bcbc29f2eff5b64a39d4cb65cfd9a7f9f345dce7aab498cc7ada830cefdb4c4e10e0596e98b4f51b2a9104d91e67b79a707ae93715828f2e15f9ee1fcf16b4b8f386262f890dae08ca72fdad828f9c3eddfca7642c3e0c4d3b3eb140498c4fb2332223214f97d74fc5ddba1ca09de848cc69254716ae14acd4e5948c3b655330c9a33741edcbedb3e6b1e043e2f6179441718a0d7c65e0b9cc8a4c91b6af8bf353a32591442c3bf3454ac1eca2c89a4736e694ac9c7d47f3fe595178e7e41c12df163073faabb647ede07e76da1fe99f6fd135e6e1e22cd7a1533aa32daa42f547909cb2b10bd6cc53fb070e56957d8e8e9a2c02313885498b213caa1e86ba23e387e718c2ef6667818188cd40e96c074c13ebdd604475a3b099af36f40b161c8bc72206157f2e730ec596d84f53eed976247ab16ec34166331664dbdf1bd8d1582261712fb77081bb643c78e0e3ad307313e2923c5e5070782cf77c8fcb5fbdb541c8ae9f622d950cd0c2d438fa12ac859e065ec7aa1cb093aabbfe43cbada0069b4964c4dcec9568397feba9b1d0f7e232401e974fea5307ac99852c8f3ca74df017fbf0a4b937a43dc3c526d8c29a2035e36204cb181dadbfda5886cb26a3fc23b70892ef860d407152cda75f44de85b8f03f2f2a577501cead9226d7fa38e4ba395b8dd9c31803903dd00317a836bc6ce4d24d0759ac628871bbbcdb594cf60f9c605b9c10930f3702b307cdb719c1aec50ea5f77b5ca2c437d02cc4ef9367514dae63a870cf7461b53b17652fb60dd253a62dbb3ffc05705278b27be32f770b5b4fc0c5cf8e3935d9def091cada556bc966532c814561b42cb6accffbc56f86d79911f12e5a0ef61ffbf4297aa613052658407c45d4cb52f50bc4672bc5d7637742a48bc52b2d86428d7b44d8eb69b1bcd1f9efa6030292a931d3d8d53003a3d49405744722b3890fcafae6c510049d67ae3cec30b202e4ad662103f7cc431f2ae584d30ed7b21a50124b20e8c2e6cf0b8d2fe9ab8dd03e6b380c11d24c067d84f3eaf880d238d6f56f19968b9e8dba2b076aa02ada64840ed81b33840f98e655fc6ec343e4c44d4867eb8d6fc12c3d4fd7918a62042cc69be8c92600b730a4e9f59c910fbbb830bb8456c3fead6e5d72e71b017038d5646b4257ae646b31da14dedc55b1b067c015715e3e457a94d5721d6a409224d079a1dc25f7910932a96d4117f9089a33f68fd1cdf6618d4945e6abdf056da941b3b732664cd9221fe4363ab1a1a2ce44c068820e1189b516e42d84abe3cec579b1ea94ca3b868652eb417262364997450a9c07ad6ded5a1c3c86d7194e24f4059296b2828b982f9d1bc55543af47c298e0615c774e12a0da5e27a1d953c81098144d48bffc9ad12d23d334f6f210cd7a5ac6d7015bb7171d4dd57dab0ac7bcf250d80bc0956d29505f341a0475274f12d3d9cce4ad80f1986ee90158a759b6cd42ea8e88a891632132f1962db8510e9f99a5546d6d7ffcc605875dee6094eafa65358b34494b318f33da3338f1a8d5c0004ea2e850c6036b9f641da88b85804c453ba691c2e193c4e9b315ff3b1ef7229857315d6b5ebe8ff10321009ade6bcef945671fb7898f4a4467f9623c0824390e3c7f611882ef8451df8bb2e69cf31588cc29ee8feb08723f4a50c4a97886f34c3758dcc39ffac6a89c4479e6532eae7778127808c78b0e73477f595d0773f7a5c5729966676ab224a94e25d29a49a66376e18448fe297f65ffaf9c108aab7bf2152dbbf6bd22fa121804393b1a36fa50e1742068b7178034acb0b4106c39c74cf2997f414a2772de0aac9832f71e9cbfbfd910082c963b4aaa3ba5ecb27720dd2868212eb94ebe54f24529bf882a99eef6388eebd4732a308d64d55cdf050fdb1563827a0672f3fa22565beed7e0a6e4f9605511e9f61f0e17b471ef1be3de9487b2dc98ff9337487edefaa697da6ce4f125e69733f9ac3cdd7cd4e1d72ab32fbe9de98df74f095528eaa02d27c679e8f5362f7a6fca579bd268ee59f98ac8fea58670142c1cbca1b9fd8f154897c6e9fe399202486f1371c798e09ea1a4c57d248119955be16606c75370a9fd7a5366ad063985efb9df0eb88450db3ebea7194af4a2a64b67d14451712ed92689c13f4c7bc4f5f6818e9f8d421d5769562a0b5b5d90bcc1383ad07ddaf81db9e7bb7bd68fbbb3e41265b15433b0efe5d1c231646ad2c238bfaf801bae8bdfa267dba0150d9797972c7f0f707c91d279f68a53f6ea950846d894737ea19b631fef45176ecdd4baa38c6e27d610aca190998c479eb5ac13fcce0a172c84b4ff728c0af73588d531ed7d93dee0392b9a76c04976061fdd7a35116880785d472de6ca103a1eb1d5e4ff5ebe2f109cc864870db27befecad46f581f2fc80722611fe17155c805daa5da37fd537b2b648ecc9dd667aecda87005ff17b9f96ace69ff68a99392e03a9a8d45d8acec91364725600c4987d91537ab29524c8e9361bc753c6b7571b82c0d7cb4202a6da3d3561564df172382aa27c0d933118d17741a58218e9477439df5fb79134508dcc1ffec43a9b619bed56524cc3b3483655194ce237f68db714a656ad5a2440d019ce27eacadd97b5ad1bd2bfe05ec21a1c08e33c0a423209841784d81f35190b9bc1ca74379920d4339a9439cadb9da5f382889062a36886206fec4aee142b8fb063e9341688548493d20e3746c399b7d40b48af356ae9ba9ded7842b0ffb57c2416330e1c66ca936e6a06e0aa316727810bf94d8b15219d6c3727e569413152d387380862ddcd466b88d84c2ebf2474fa56e9b123a65203aa69f91a6f36c7995b83fa1ab7462e90dcf9adc7b5036833d1d7363126a25af1632fc4f69fe931de37904098cbe9191f1a62001a6ca8511cb8fe4e27904c214e4651e7000fc7af6ae87cc001e3b5d05dd229a2812e51b8d95c74268c5680d0d99b6a911ac29580a1af80297b12eca11849d6182d755d907f1a309ac312d75c6ee772f3cab514c14e6ea3ce0545dccfd273db884f6e4f55c110ddaea33e6e241f638ad5b4c10f9ae30b040d33cc068d7fb756dcd8a55993eb3c8f8fbffa52efcddd8218f12cdf0405277daf7c2f62ff6b2124fd33c852c4bd81d507d8500f7ed6509d26392a8a9a780012926f4f1d1eb3d1fc1f5fdc78e9d683b0565608f3d5c98d466a9545036247285eb8f256369ab2b27e049a46b7bbd5b23239eaff912ccbf77a767ff4ed7227128dbad0c781b15c6e8d78899a9f6a73077f9588209eb54a0d3d16617d139caabc5191231aa00d800c789b9956f52bc578dafc9af4708b70fb99c191d59965cb52f51c6ea784c05d09d0b7afc28c2ac9c7590a5f0dd4f5b7e98049cb6024ce0ccb4ea919354ccba378661089dff22b9309517784388705a4b2c47b121b3e7ec5744d9f200115b46d6086c472daa9241d6f1e1898720d410c96939837dbdb3eb8ac0627e4197b67daeb53757eb33cf716ff14a6ccfa3519d310d96e877be2f47785b81e8520a4c84ae32c21a5d4bac69d4f4de72e2c14d46bf0d14e9b83c42e13e759e30097c5aff66357fadeadbc5d163a5b0f727debfb82cf5e143f7efa0068a975fe8a73656ecae67ebbc8b404ee4db438bd5437ee46357acc7e3522b9e966cd4ab7213ae38c17dae030ad36f77b26b60b44ea1e063d0ace0cde6d7e9e90ec6616b9792de90a4384b331bdaa87687886f516726c88d0beb82603b48e60f32f8c347f6f9de525c9e54069a8d02baf8e876ba0da72051188d140e7b2c8d73dd627003cfd1ef43de09811a29234b7db7ad4fab4d02da2eacca6e37917a7d9bc1191098c1bc11dfd51e3c061e4d7a6b6ed98cb387174dd1eed616c802a82ec4e9a607da2cf6a903eb2e43d16ee3e26ea287ba4408ab68c17566348b34887b8b569b304c490f9559a212b0c9e148d9dd826532f089e5b2adccc0e48ff5343fd3605282ebfdeba215e316e52a5851688ce42e30425dcd3e0245eefea1acf467d8b480d3831c205dec54c9e70928d772cac41d705742a54ca273706871594b1a41eccde4f79e7ffcbc2a5099fcca0c3e90b3607d049a467d041820e7fe8f7ae4585d2d84114594532ce4b6fde6dfe33ad2386d781d0f6bf45b54ebdc2509494ac99ebb684b6e01ee874b0db5f8e643e72461396563b62037e96046e5d1264bee0a082f460fa9d7f5601986ead823251d4a0097fe81414dea7c2ce183748e65cf87e6dab94fb411352fa4dc9cf45f0c1a3c8751fffd4b28279e06502a160401786990eebe38d638046d2411a1b6e881ba8a92a820aed27f78640a9fa6a259ef08a2890bcc4406deaf5a18b09d4cc74a6973ab06f54ea1cb3b0d90e26cedb070077f10b03798641682d4732005b2beffe493e4fb43d5c22fda2929543f8cc891e0c4e1342e60d393b957b03ca8cd7b756e21ee621226e26a49a0b234b7ccd5379a2adf10092f6a624beec4830ba8103d506968aa1cea06698cb62b279f49d8b3abb4f39f4cded31910dcade081ef96208b0b5fed144763d5ab92d615971cd2837c4e01dd35778429de67c117f184eadf420127ce75b8ec3c86a5dd049fd41948dd429ebcfb3783701db246dacee0e4daca304331f5eba3ed00c827988144b7a5b8ac1661cb4df73f96f29aa4906d429711360efa9425ef7798ae580e2e29bd4cde3af0f525fb2c82f9e11fa057d1ab5ca4905563773a32779f321ee31c3e10cc1a591398c8305208a273538590c9da3951d285ffe3e3d8c2652a43ec800e48788b83bc7acc15ab7590a39f0966a1decbb86065b386f7c8c4856eb62e5c57217f6f3add452b548bf918a2efe3affd6b0ebd76af79bee5a079c0c37bad9a8dd2d825b3d11190f45560f3730d73bc76cb7e69f18deb133ba95e7e89203e53e24cf4b3417a5a007cc06b1e49f17bb7550c06724c7ca33bf1c19e3e5d5128003acceb7d376588626d733d91e208f11bb0d2658ad9ca6ea9706e5ee6793cea592120f8d227da34152ab809872f5f3634f7e907de455275fe160282803f58b4d31aa2b53e012e396c27ff21de8fe4f7c7da6627f5ed905ea06e4f8db1b97892a91eb9f4ef730050ce1f848b74bb07ded84b09d7d9646b26bfd24d1268ae60fa9d2c82b50d909c4920c11f0d1aa29d94cf10ad519c881fc5492cf799e37b9ea66ec295181c8061eee7993676de8ed2e052ef966ae52826bfc829f616c2403ec9fee6edf2403fd7544f6116428f9b8f6715c76c4ffadd346dcbc6058eee70c8e8b010a62eef6e4c66c1cbdb44c2d08a800cfad168a55da08ff6978b118a89d939ee2392da2fe212126deb67982acbb304da6612c3732af17e18518ccfd6683850fa0635ad2ee517c5af624e5c9bc6fc793e8401a6f89ae80a11a22333a3569724617d4ebeceb8f4393af9c0712990b2b1c4b3414e681585d4a97de1d01ec3d4764d6162b7448601f93d676cccccf8e8c4a305beae3251cd69a1b2016a808823aabb22717d94e9e293ae3d724dfc09c8c984dfc57e8d01a38575bb3b3ab595b2d0dd046a56c2a2a4414620cba3677ce306505487e43a7f8cc6e18b74b5a2b423fbc493d88bfdce33c0953015abcd833017f0cdec9e2f416fba8c7d722079ffdfd6fe764861a30344c07a65f428c8f254e97df84e570b6872a093dc1e94d842f28252261893aed7e0e6015ebd482fe675960eece62477bc501fb9897803902b4fdab0d0edd5199a11a0d9868304a9ddbb24bbe7312ce2bd5bdb49c96e76fe582b88777f7b8cb2901260d132b2975e3a422c9136d4dc340d3d2cc7c31d651994a94a78d89308a7be031c0425398ebdc670864652648719e286e69dad6b116b99e797ba9e2a69462b7e9247ab7d73210f8d20abb8b0bb7ff76e9508b01d7dde80fa604d0526b389d41fa11c96269b14e1a4ee2f70b6aa60d92a694dfcdfff3f311ef3e249a85bdeb6d2c96bcf4d4b3b92bb1cef4cb75d9a966fc40588e62498392c043ba595f9c818d76f002269a08dfb05f26fd65d45b0e113658e4c8e401cd733768904a20f156e4ce155dad566a6f126647397107e0676a3f82623ca4c059b9c97458b7f96c005bf6e6ccc8df3134f387edcb0da17fc7a7c753a9e2ca008aab80e2529a284f03a1a34921694a37058e8cefa134c9a16a507e98d6f81a1f7e38b7c645dcd9ebeb89715a8ce8cebf4346f1ffc0d2842c4196572a80ed834977a716d33c2911f0b04b2f5b00af1b04d59120d00abb504f1337ea133ac6c79f00ae482985a109c4e0ef9f25169923994360790c0e741147363201455d8c1eb2c7d9b3057ff69294c2e8c83c2ce3d18ad0e8ce6746cb15ac0654528cad71f0c00d7bc372a4a9ff78e870ec6195ff8f18d2cd15bb649d6536cad645339c914f5cceca908854ff15aceccce29963891a8c866290f0167cd6472a558cf25f505f5ba3ae2668e0bcd10340250cb9626cb06c4c615186c3b648146155978edca2062097ef632f21c75942f80aec76edd86f105554a83916706562b0888ff6e7340aecd84f860ade4366fe91fd00cf0da19bf1829f18b5ab7c8692700ad0cdbc3b92c7a56da54252767b3c140ac766c8f8153059b91928568b63f3ce05c08be295174a974254ca9e47ca797f2a8eea73a48d5586f7e72122e03a8a13980d2bbb7a41f63d6e5287ea87cd70ddf01932afa95efaf4aee7d558ce4f54ddf7fc87bf3825d45a91bd47b174e5172568389071c523ffc13b770c52cbffb2e48be89ec4850881c299daa2e7545ae76055af8a7e7b3398ee6327c88d9109e7c5fc38c36f1731ea663b474f42eb9124802047c2ab10c52ff2dd36dad88f13c463c788acd35b705fadc78de635124df173cf7dad7e351714fbdca6a73d97701895581fdb496524c11a1f643d265e5d4806b226cce8461e690f53891f42c15d75556ff3e58d6d6ba5baac7598c49a132030a9a813e55d19ab9da89274e29ebfd29bfbe2d950cde6e0a03b999dabbe45f85a81c2077b2c1219fa6e36814f040aca077c09b5fb3996d0bda0fef0ae0f3135d7cb24f8b8a666d8c5f5137c35653a051b164b6e4514dade0c4efcc141210d1b01edc9b73ed4b9c28051cd42a0fb6422d0e3a50e8769eafc5e75c5b907ad9ec58d378f3381cdc738085c3c257593a6cc81091348057c8e5c92123e389e5504bb3985ff6813cc4be1b4ad3aa61e5cc2c58f97c8adeb6b18d7c58b778ef29d72ce91a99c2fd73743ab30191a8f1e1778ae28018475426f0e2e08613064b3c150ecf18fef43d1c9c2e65e889e910f677efb631e89732899321d37ad38cbd467f6b68938aa8834eb8c856211eef5a663c1529590913216324d1dc02dc2c1b2861dcfb55838505e444928c57b4f2eaf246d23914c0e1bb695e16dc001971214d0eb92881f79cf67e0d94320d0c651e66380805393d34279fbb4ee173505e0e5f9504e02a0ebfea90e4c6ad5726175878ad5f657b744aa26141be5e3bc3a7f19305bbbfa3c092b606d2911cd626cef1be7a2199739e781023189a1393793a66c18dae174610616f58e8de85a408fa9fb8f9feaa864ba2a8ec087f1e82cfb2a49d92cfe2685b28582265cec54710d23958eef77e038b4c7ddc76b19152cc12b7d29c9212fd492dc314a8e0658882d301020128072f11df50fd4306a053817ce8c6ca80cd90a5de5a0b2e6c63be565adbd16f17a38c65030032e7554f94568c2d2704256d1427b11073153b2c2d6dbc090401d10739fc731c0144052f3ea2d96b5510380b9be883d32fe5dfec8a6c9733928aca0040ae51f608d0808fb28d9829cc0f705ebc6db8d7e9295683cb6bac12570d827257f2babd4b35bcf4ff31a8c3687e403ea25590fb88e24e5ecc99c342781fcd664dd6fd32677fead1fd886d0215e7ea46ac12af289cb305c7bf5a70ee27b71997d423398d16c25f3260fcb01c46145ee82ddc4ebea7be9c1bd2046e5d9dfcbd5406cf007c4412e205fc805cd8670f7d4e1a5ea522e896f0556be8baa65e6083529fa261cca7d2e270d4d076325345f846cb0b45d507581f1b148460323d73762d85a4766cbadc7c3207d8f8ec8be8bf2c2e9b6c8dc82671e47d417b607d28ba0dbf09a34eb0b62120b007b6ad5ae73784141594a8f353174663852b749bedf0cee7a6cf2bd53ac735b0b9bbdbf1355930a330c6a20b53819fecee48564cce83e0cd98de9d42b372deb47184927d6899fc820569a2c42a25914420afa324e3d6a9de33f2025487e524c0c403f6ca23b0b65ac6b2106581fc523172e53fbf5499363577fd45b729b9562ed8a0e3e7b217243d87f79aefe8e239a398c4cc56a668f32957b43dbe916ef5effd33942da7f447c77e6f817a8184cfb87f13927c2b55e7c9828c2753e98893beac80a6231b0345abf1d18b9f3fb516bf2b714b484fe3e178c7909dabe12782f57218ecc09beb3ed208ce9a56b6a6555d48b34bcfef6e31534019da1599632c0cb256fa352996edf83078b8d8064e5da6092b85416fe9399cce22d9023f77e1506658f811d23f65083a9a42cb6ba54ff0fbe8ca54bd4a7dfe3847fbe55ec384ff84041c557a1d8c76fcda9fdc0cf7b52511cdf7c409da24fc59aac23313c4925c93ca9ad43ece4b5186afb48a6a25f9f73b7adc895d81a7ce8f0f76e0006da11d0e0299d317ac354adab4098e67a040354970f2eddb9bb738a519a80ef6e3dfb9141d883e48d8672fe6d5d3a6c35a8593a239cc220e977704ebca168a33776579fbdefd185a81a261ce49183a147c9982075c0ad6dd67a87f6ba8a2cb3708d5a770900802a010f607ef0ee240db4f0d39a5ad343f6b592634e367ceb4c28f608799287716da5839c2c51ebcb097371fbe7a6de3ec0d10fb1f78e65423a4c14a9f6fb35865abb7d66e6f46319ca86f8b975d02f554fb881e7a19d47df6725198560ea8aa7e2409ab9fdda1f6982b9b1924db3c06ded63733a7e24327dd3173e73aab8dfdf12b55516eecd24897e043e4d1d83321147c85387720c1111fad5e4f040b46bd14430870b6a791e3e4798e14e8b1e2a700fd6c1f905bd6eb13202c2a92f852e1fba9edce7e2b057b1420535348fbd92704b805e29c6756a7f31dc8317627e67daf0a859c0a195b642b765457fd613dc6aebbae16bb64c82d45e6c391162f49f418d58b42121ea91ad0ed36752785b3d452b7b749a594b6ab9cbd9524f859a472aa3e416198ca8fdb39ac82c407a0e4d156c20e1886e807cb223e1181ab233f1b534285b980d05a8446b166ab179f59e264b56117f8232ff048599ba2869ef66445e4b9c4b248aeeb16b84709a7461b6c61a6ae35bf309786b1c6484076407696199e692175dfc1deea37f5fa5a03eef3f9d9eb0ec3dbee10874739be2d403e0257829d4c08aab52bc1bc287d296f6c27f801b92ee2281a973353e6654c15aaf62d39795b475665bfe5c9466cd8a2c1f8e00f6b8cc83ffdaa79d0bcdfc9d7f79c6b9325853c943a2f2903e485fac4ed8683bbad93e320f16d117420314dca34b248ae1f352651edda74935536d442e7a483766b6b10c8ab951a3c32a0006f19a69e8e0dd5b8a49a852acdcdc4b9d05aa75d73bbe6ad16930ea0a26b9b0af00812dea14f8728f359a331737436ba9921a295b0710085ef1637ec44782c25302e606cecbdcde04784a4784b3111008502c1cdf740b0e5eaac70764e15a069ba6aaf10ea897291ac49083d309807cd784f1b06edc5813677a2218acd7cdc6a7811b6753fcfb80f051eed19117ad096b3d856284ad3330baeda697459e6b40e813da74205f60f181d7a94ab205bb6b0ecabfb225cda7da921c456b8c06c79a473afda3460da0a89a5c335a72ebed849f512334f792af3aa245319bee4506f2e86b00dfdac09aaae9104e772e8c958504031c15d2c337800ca200c624406cc88c6ad12d7b81f3cf2b8f2b3edd2e560b2c7e652aa438ad4fc5175e4c2dc2d9b39dda86a22345cf07585dda04ce82c0e43ca4be95e85e8b7f793e697083194c4f40107605e6abb76e5aebef04ede9812e075851befb7df1c03e981edee8cf9eeb516864841e70a4ecb94053668bbbda535a471a23a6f461
+
+# Sign XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg =
+PrivateKey = 040000044c6a338d4028ffac0a92019c63a2f1a2e371b4204971fa7a5ad30afe464da5f0763c2ac0890d378898489b9aaa2f81fb5d77664da20a44e49438824942862ee5f9fc9be605403805caf07c38fc0cabc5663a897435a4bdde1e1ccbcb6d52c9bbd6f2e964939842276a8d2668c136a56b5aed7cc2d93fe715bbf56ae6820a34fa000000000000015148befa363c4d64f9071c134d0a2ef31ba4b3f6ad716a53120aee865a34b6207ef0a4df6e4e608cca3a8afd34d10902c4634f082b3df0cd51e44df6c25de9538acee36c9b429bdf47e61cd5accf67a4c379bcf9fe78e611f14cead9db37c672fe3fea637b5ec409be816fd3cf8b9142f44e7116058d0a06bf6ca7aa1e5db9a82b
+Signature = 0000000000000151b768d3fe7f8566201e891afbcaf552228327854b5386df2cf63bb5af563aa98b8ce86ca627bc22ee8783ca340d144b278bf70b5c9c3a757dba95f482f71dceb4e716cb4efeb326e054ec4c8681c4ecbc98917d760b556f9749e21573efd883bfe0d745a2770166603484d345391782b23a31ff99d8c16ccf2f2822c50e793c6a8981398b314b99caf79b6ee83ea4f89186ac8fcd4ddb46b781b84c8b81168d9eb911744356162dfad5b330df656e3d450dcac6d91884f7c17782ae91377beed49de3a18c8a6a622144bf925bb4501a2d451080d5245862c44bcbeb8bcb381c88e7b9a1708cce578c71e9d1d36f38f235e05614aa346edf239cb342ae6e61de7e20e032d5c2685da71541bc742e7a1d41c656c11b90e9f02480b58b725412c9670c4416f068b304767c41916eb13c3d9cdc1ff1b3c5f2e844479ea3dd9e56dda9b32a89adece8ca707758c0674228642521891ffd855a23a5296ce0f0f8ca3dab681bc169d077cf67efeb5108335407fa9b83477773c3d5e5017182e1156f216ebe5ab2b32d69c6cbb76c93def98c68d82cb1ff554b6c4ead42017af25d5704f87f47e4da8ea432b4af92201b0ef4ba848321dda30f75d0b157fb6707928c14c9cbd2316cd02b6096050ed9270af9a6121631a3ca51e79235a6d7b77fdd105b68ce2289bc120e273722dfc91c59e66c4a9a71a85cc7e937199118ca477267d78649b16ce189eeff2aae10534b97f6f71a907a06f996a035f139a6ae8b8f9a6032a9f4d70af2dcad8b8138cbfb7ec6f41743ac4f6597cdb7100f5ba0dfae2afedc07b08b85462ad3e1759a1593c45ba935b66b04b16ed9de906e19f88a20020bd7561792a5bdb8feba3ebfacbeef3b6fe975de2dd5415981ea40ef4cbdccc9bc9099e730a2744e0d012e1148cee30d83705262c8c62fc2829a24547614302614514a8f5ff9aec0fd76772206c7a23683c88aa2dca3dc6ad63e2560c25f59e63ed09671dfb5244a8733a80c2c88d65c96e1e08d6c9d1da11d2a20df98a217d23a99487a71666ffa6aace87929fea487a7d403fc9b72c5ec276d23b8db4e6f933b1ef2a9dcec6c512ce27b7248e261dab4dd2b6c7f11555f77dfa1416dc0942e1b9c327e3c641e96f0e5899334bb6d2617f502d5ad3f518156281d85858f3433d27c747e9d781895cbcdd0e7dcf01c3bf0bb7ce270f4361b0727a26d529dd1694676720d0ef24650b392ddf68ba17d1cf247d827d9743eede39f5ea7a6bd90d7593e4acd4e48925e0e0bbcc1df9adb810cf2650bb21ce1d6d10d6b1d3e259effda3bf05bbb2e6be4dee78d77573cbc9674336b3e59701a851c1dbf314152561a679d9881df9d116d64a15e3740a7a68ff27ed41df868d18014979d6046e86cc96f60573f7cc07c38deba1c4c53cfc89481aee5adec7656afe6498f1693b244ba0b031493b3f16c45b2fd90abc5fe6d2ae3d4cc312ba56af718293a40598cb463ebcae9b06479f2fc868899ff80d97e4c30e8c9a806349c5477ab26cf61fc791c3a418a50f2ae6387b28e4d45b4aca32ab206af6b2426558799cc383c2ff2dc24b04c37dac4588e09a98af0a4e8a9a4fb79650e57612158a506d56f5ca37023e394b14ef45b8f1c985f0e1fd4186e1c7f4b5b12cd6a3caf85860f362c2d0d275e9e2dbb9836893e465fcd17d7c72778c5e5de114cfe13deba3109034a3a4d7ea3b6f6781ce32b724a13c2b4b84d267b51008b59169b15d0be63e360122a983f40fc9ecf9dda1f2fd63f2c3f6758bb22a13e42ba0757e31aa9f57e4fcae4698b3cf7764714ef71cae28a022d83821192c9d95d6b40ae0d830f8978ecd9e15e5777afa2ea221855b612c5861555d91f0931b50579d7244c6ea7fa90c9c156e98adca51d14708650a2e605b781bfe9ff2f41852f94c5b3440292e35feea9eef38154e412389cb8dbdf94daf29d7f4a6fe4846e197a10eaaf4e5ea1dc29c0425b7fe23fa70b64945748f3d9893480b3b3b7ae66ea480d17079c77d7f19a770bb765c4c0604ff88fae1bbe5be7bcd30dc7fe1b850e97972de1972ba27059f26b26d0d019a080a3b7b4aafff16f1ff00618e00c92fdf6a0e581e994b76f11be720fdf069c5f67c8b003db3fd3f7bcd9e5ddb01c3af0c3e4de107a1263a0ca0cc0bd4dcb89c3cbd6c384cb9ee0a9bee1468297371a9343cb786dab8903aa40920478c2ca86c123cfa83ac59a3a9a683cbca08f7ed3847ebf93bde8fff6e69050ea044986a86321b928c811d12770bf03e7101a09b413002730c2df1d19bdc942cb0572c3155480349eb0dd373f2546bae4b24e73dfefb8234cb9a7d06cc2de0b60dea684abc4d7f8a10795eda3a4bfbf0fd5d3119dda8459df3f49d494f4c74ecd05b7bbcafd86bd35c1e5620341e845973698e9053b95002a8f4e41b326b9ce2127b9991f68ec91bea5d5a2aa0f82e631225dd07c9e3a76ece4d1704dc08d976e973a9d22c7cf710c31ab3fe962b58a55ad368ef257b1288861a5b15abb7d2590191cf99e5f3f8b95e0198a37ecbb25de7f6e38964346315b6a5850473df034e26b51034c7f8f2ad4749d97eb17780d19c1927818c611c052637b7fb04d54593ce4fc9dc5fe94e231bb4b93498ec813b02d1e7c7d6a026e93ec3ed44da80e698845070c3d3c86395b6e669604a2097712fb707c889023ee3adb99eccac74102b28620a1caaf193e1435333c30efcc313b818116597ce9b2b0156317b712983b90c042bf873a8dfee54cc156d8e6aa0acb351515c8142135f0fa7d6a81508a29f3f3b71a0db8cf6dee857d3954bc730e0b79800751160dcce0626f6f5e9a155d5720953e7ff70fe43f9194822fc3f54bfe870689bacae8074a6655babed78faeed94b033e2e44e85e7a071153fabe923955b308f9afebd15990f6b75e230e9e350765e8d95c0bfae33f91f37d32e8d6bf6374dcd311b6752859367c13a2dee77a6dc368433088eeac9deb633d48cbd14b54a7e6be5adf42bcac70f274973194c947de0a933c846000e2e82d305a4761d56373574ce71c57cba096ee424f70894e43d75854fb60dcdcfa0b12cc78b795f9d6666a8e416bdf7de9c7d3097114ee730e48916fe3d3bedf607b02d85898ecc7ac706521c2b0eec3621969fe2c5edf9470381e9ae41dfb14d60369be218540e681125d061d63c8e957fb36e5809d30454f7fdc1fba369a771c8a8cd2d3720c4acef1b11dbc715428f15dc8a2b3a4a8aaa58d67a98f940adad4b8039d593e8f21e99fc2c51ab74e8ecdacac4a618e921ec882c5a978101c78cf28e23550bbed417cba949e80cff013b814039da3dab7ff4bf5e25e2769ebabcec868e745879cbb69da2b09890726ee447e0bf1cb980c07035c8038cfdd3b5c59c3967af0dd546b4be5804a0b34c3f77a0adb47e63bbfa38d7acb97be797b3dd86f7def84c0dcffce4244275b8d638591c51d253f6f9d6896ce28957fb625f6836e8be38b76a2a638e28fe87c9ce317e3124bfe308740d1f21f4d0841efe1edb139448cc992fc17969ef1596cf51f65002a4bf0b8e09224d1f3a8025fc5a5c1429798e58f4f73fe689159b3f123eeead28a2003728c0a0a7caf179848ed6d9fe6b45b952b1da0150fd761fefb335cb0ffef8fce89808fe7cf5efeef0d99cd826d8155bbf1d5ada02e04aace23aec5f11a3785e3a3d5a4346e96cbecc303f83bd7c919ac7972d8e5ee36adec13b437fa179ccbadd3d35a378c3b031d28ab31be2883967541fe7cb18008418ae323b1cdfcaadeb02edbac831619d40a3b453d3f82fb8dd5d15da65f08560f853e523f4a91465c30e18c7ebb0ac299f10fb925421604a6a80597ed2690356017a808010fbd19d8ebb112403468949d63e9e42ffa057561f630e57cb7d87c755bb6f4d09ded6f3714f48eb29f1e0bc242fc71f81910958c2374ea1fc9574764fd1876a9f98361ba3830039e39f68ea9d2b8d6d68396132922e59e3d5e48f4312bbb839a35dc9942252f5361eb25225e4821d26a5e2729a230ef0c4405e76086cf0df4c0d9b9cfeb72443165ce3ffbfac1ef1120fe50c6bb693b95470bc635c6e7abaaf834f0847b4fb8de41fab028250dd13c3c55ca709140d52d067e88d61ec576f99ca5e0ff7a69285ea15ea2598bf5c6c98c74b43b3cc649d769c94fc2973756000b8595a86961745e6e525caeed177701e3ec653657fb4ada370ef51faa838de33b9335522c094a33bb82826d04569a645af72b53583ae6250d100f1729392f2d5c8f02376118a0282c4436d1d675b9aa16f3fe4032cd3981d4f467918f12c3c21002eb84253fb69eafed52dfd9f67f2baa8e52e4ea7108d66b26e0978dfd2664aea69c75d42d163f439e666cd7d1d582769a561c9b63af76df06719b5753c8f138254636769e5b511f8864af99a89cfe6bcf0872fd53f876f972ca32c7a223a5cf23ecbbe07d022b330e72a0b2d1eac618c8a396db5a057efbca48733f54538b0f6c22496070d1b914649be883ec23101ebf3c0dfdbea13c03d28e38450d3abebae2f215f6ddf3ad0373eadcbc8da54ab0be8b082b127b51cf73214899e390c085f60aa2fc68db1b1380199740f4e9999fb24e4ddb645a6894c63980f3b232624e21e42226e8cc97f51811bd0d46d817c96a96b03dfc42b271555dc01acbfc9e500fddfcbb970c40a97a2c3aa8bcba6721a7b9256eed83b3669bd8f882809bcb3e1173de48db97ae52e9af27ba19b34f84f75b0996dfb5761425fc5ec6b96f2ca4655a7d43dd5b2dcf4303ef2dbd4602f31d973d15a97c0466fa17f67c39da25fc2836a3b0de749dcbdcf96d691e650ec49848c5723c6c362419d488a7630d111a9eb41d4f2538c4092c9e8e8f11b719e4fba7d655cf80acfa537471029d02792f0f9749c2b2799afaef8267fe48ed8c5af2d5495a666badcbc3822d60baa4d7d7c51ba293eefbcde42cdea670197009bc8886da5ec19d405a910f5fbfe241555ae2b811aac6ee03bfa413bfda240f8615647dc1bf9759ace8c8c62f5946133be71b0292b6ca0af60e6498d63061675d8b09a3cdff770485037cce60a4fcd93afec6b61e49ad2668ca5c3202035372674b20aa773c11842cfa18c982b450a9adf9f471377a38c63aeb35c2af1710df4be7c69fb023c103de8f30c4daafd0c85c65627e67c96d8b624e8cefc69607230f3ec2476aa3ddb0ee432d0768c713d82581ce5d7d4073305e73ddd503107e89d230f15423fb3d0f92c7bc5fdd53bc19ab681e4e7cc1ca421b8235f5170a9f7d9f7a669b1ae60e7c428eb69334f061100aabbc87615b12f149844144c0aa8c2428c7ba373b15a68273202c9384ae3e01c6c78b160009e54eabd7fe658aaa676354f3771ca69acfe2d2be746632868f7f66a5bac27e0fda9b76e6fc34ecd180e579563f809e3fcb84cbcc5a21eefbb33f7fd46b4873433b22efdefc4ef8b861c5090225d836b93931ee8118e8a7d08178d697c05d2ccfddb8fca05d81fac5f9e20bcb7b2fee6d50d818475d02178b1181944a5d6e6b78735d1ba3c0efa894f817a466b2e004d8687624905e65f9a90e34eeac63d9492a87b9f043b8f1974d7a25606f4d26bafa4d8c7d4106d88a77ed4f88ebd32cd2c60bea229a5f615db12c20725ee7e0dcac27559b6c8f74d4c66fbd29ddda1bf76d3fc6eb8ecb9916e3113e52d6e0366ac9b0c2729aa67ba607dec0ea5a4da91f16656b1d6a705932bd072b257ae39a43c93b48d722c091d91adbbb0e68521b9d4e1a45061176d592a86605035e3c27ece89dbd57203fd3877acb41c58be4969cbbb8e1ed4d17408f138f81ffe85d24390f5cc40d562a0b93bad1b3d38ef1d4b20f9a75a9488d370db9cbbb77e5e85d8a57f965cc03c1e794f73815da18a9c73cc313a0b071aa20677742047aa8f1a34aeffc315a958f3c0501cea4f34cfb8e9768a90ad0d0960e6168eb5787e073b682c8058de75b2c62ebd099471cd21d553e8e1f25fe989a523916a0d02bcdea4db2e202d381a1d9b4e87537d5de8bbe5d29949447d334c70a2024f638724b3245853b64e8e0abde5a4a2374a736ad57695deb7fab4d295d84d18d7689ae1fa2e6ff2fb942301789f1bc898c45ff430fb45dfffb773e1ea7457b6c7fe41668319448fa907c9228f724cb4b91a971dd6e2cae04a2c82341136320a11ea47b605e08ac063ad171bd2b6c115ca3d9da6f9597846398d73c1ba408eb8df9e5f657ac549d2459d3bf480bcdc9fdf6441f3df6398c80d914e41c80d4a06dde9208e5fbbad4c27a8abf1eacacb6c7deaeeb868c40e33a40e51413d3523fd13d60f0c63c4b77a6ad11d26c761b24d7197deb814ad39b908b172f57f70cea70326c3ccca9428535f6bafe629d5467afdfd29ad710f8374e2da76596e6223b289f53be384c6806126bdaf42578dcac72815362f8d896e54240d49186dbc98362bc4bbbbf719f4a8bf668e18184aa90173253ed9c876a15f5474d79115769178268fe7154118bdd38b82e980431c9ed6065566f2067b637ff91c4174c7b3cbd4fa0c26c721f0fbcf906e3a43f38bbe5538af4ee0018e25f6ceb7aa3f39771e67ec0ca51d5bb0cdd736cc2619bbc126bb644db40172cdb9e0ec0b52eabb7b794a7908a0e7bed23e76ae1bcf6e986dda8d7365193d74d34a07f7293a92aca8dcfd5d745bad5b04aa2989f85ea2da3596218f006dcbadc01ced007546b1825ad96018494e98444ededbb00b5d3633251452135a490e5e943d5953c0b27e3982f3d9d0b58037ed95aba76953bf169dc59583e1a17a383578d45f9e4c2a238694055c3a45001946618251b0dfc47c8396dcf2acf1db03ed1c16c0054d30b2fb269277a2c26dec94652b065ae7a3a275a3cd81e554483e3cb564160058df7c5859067062020c65e2b82422e44b6bf28dde736245e32706c3100cfd3ff40691f7ea68fbde1779004c7179ad8c763bd067c30983ba0701107f706016a002cc8b2f76467e34f028559717aac06f44f86c0895d04639ac42f651b9cf18367e2f7ed1a62dcdf68bd2bacacf9d5165c27a15b6cfd1a574da9a3cfc43550e6c8e1f8edee9e9a54234285a8e2e2fb90e4b16133e24ba015d78eededb848e07e924501b0bcb6394c41f0f034ba62274703e294d6e3e1430f71301c9af00caea322133a9d0a124ea77028e25aeae7efd39b5d096188218fc49d8913a7fb3303b57160281084cfa0550dc28d6e98a3879d8ef5e5f81b9ba5a807908fa315eba2825544421197436a507d6f651f69f6c13b09887f9cb35e2496ea0de2a392f319a78aef51763ed1fb6b4befe33489037146762440fc523f462485519dd48d153e97271f5c562b1e3c540910397c39d3ab833a25c144b39c34188b59fdd590d2baefebc23363814a67d253be6c75bf2371dfb0b2d0d96354b24e857115decbc41adf7a53a44e18684c3d2bbcf7e4d2013630173780f046e087c141f8cd90a30cc1a58bb66d71c1699c12bb44c7523e74bd5b743c0508ad663463636054ce257de589135b32944de857cd1b5146f3e2e13ffbb9fc186bda2bb3562870e89d5a3936a4f5190b920c87c2c48bb210dcb72979658d6e4fc3bbcc2a871bfe32d20a87d76a8017375e8bcdaff309e66000d58d3a7081bd94d121b294816782a18fa6048ee51f497d41cde32daa42654508ca0d5fc67930983347d9e6c4e9bdcf4a029740199a80e859ec9fdb7b634deeb6e48b9819d0f5870c89905f4ef3009575d964bdaa588aed4db46424bbe288a145e3c87085a2da3028b044c468a9928e9e7429c4ef39fa4d773d8571af0d0ce64de12ee802a5664c359488ca16f495663a5c74344dd41d7005356200b992dba4546738cf77154e6e66ad29dd9926a142734772218318de087d9330ee0c5c8d56cb830d722be18f5941fa684331602750cc71165c746106709b0c8d1189b7b9bf11fab404ef0a18f255b0bce9522f4cc53c44bdaf0de8f6c20f908cfee22464f7bb49068c9345ffbcfb7fe238e8e65a167d2b60b24736fe4c568c5d73c221ca88d942c967b40ebca6b172f73b86bfd360d7e766a23f87c7e27670dd7b9c0c5e6896cfbacc84afeba25e4a08034b34b3544d2fa7fc12cf51f39bd7efb8ebfeb55124b20cd6c915a2be889fb0c341e72c97dc9db3b7600ea9c39a430ea636c81fe83e5bb0404fd846c03b26577b31ace88b794ca939f228d4371833fcdb0e5654e1829259e8089642458672289d4e7022628e0b040af3f357a98880b52183eb078efc1d5e99ded90e5f010fdadd1cd125670ac68c9412cafaf84f652fe660180049929aaea7d8a5783c915e6ff1177f16dc1b18198a13b74cda6bf5e2b59239a7ba72f25362f594230b2f78000dd10c513fa193d6634c266ba08fd0a8472985e1c2f1bd4e284673703e5ccf4db09a36eb8c68b233b8b03d65ba158e70fbdf0258b335d21df1309558f6b06431027ceb5249a727fe77661701d16660342cd626980ef7f2854a71c5ad6e07a68ce6bea0fff62e95c9990c3b2ae97457c9c8d4fac6cbc98c3f942d1f24c1d04dcd23777d0939d10fea57f465311bbe30b38dbfd3aa2f1f3204636c799020288b27085ed5b532e32b9aba68a10c9e44685a4f51f90d9f0a9c8c479fbafcf5e97dc60b2f0c70532c894efeea6567a3071c38f04f53a29999d55e579dc678c406c68dd8b255cb4bc0c3d502fdab8e52b997f1d8d8e9e85b7cc09e5b9ba117ee1a77e4937485d746cb035cbc0c3df13a3239f46deea6b08072c0dee26318a29ee31e72e099250ee80d7c19b05f75bbcc436a7b2547a7fe77c7b57d37982edf01e3b66437739b51fb14864d822b43a3b15774dc9b6b065dcbc698173964a7e2d484a2e22b3393117dfcef6417ad31b06b559ba6d045774e2ff4d1f81d77d08187bbe93244794f039e825cddff0ec0a4ed5e5c9a63620e8d0145435db53ae54a596b97a3e6d5f2c1199c6e8cbc843cbdee13269bb136d6f93ee06b1d68890a3fd86362b6d08fb2f068cd7f130e59c302f7063d72608fdd2cad0dc4fd4e677a3cb293769d3d0f8716b315e69dc9f4c8cb60009e247b135534b2c1bd8177b8ad132ac1433ceb1f2eb92bb8ba93b45948b50830f8742cafa3e90d3172dc58c1f0444fa0950c153d7083dd0a8901bb4ce131cdec6e3f73539dd0833fb430d1207aeb2d22ae8417bdd780cccbe4d8b6deab4e051786ad114ee2dd8bcf0252833f28df33896ad31f4aeb17d026d3d583eb1f6cdf6f241b40be69776453571969c7c1801ba129f2a740c3ad518bb8092122f97a1ab18ed9740b8acb879eaaf869c7ad8add946ca2b4a427131a7b18059fd52b32998b9651f95ba7a962b5b5c33e885a86f87584487d1584adb33827547260964f4a816f2e2d0940d6cd7a1f5941f3f5b1a7ddd2ce8211a1c80fe5be78e288f1ea263c72297c9590d8ca1dafbbbd1968ebb8663b54b6d31a142d87af5aaea94c368624a68db8e09a804d21a2fae7fedbd79386977884600729200ca79cfa3b1f32fd9ee1f2adf1405039902f71e9ce537cdf80d61a53d4529f320d634349aa45ffcf9b0708bed1ef5458247c378413d17e08078ef114ac2f0411b7c3ce6e061a97b9c98336f374f0e0dbd84668fd52f9df5f86ab7446b08445b3fcfa2ba98b89e7c1f20e857db02e1bdc109c80355596839f366ec22e9dc553d925aa3e1d3495b3278558b1c319b4fc64ac03bc7bcdf9e3aa05c2aabe04db2609598b1b1c7fa91889d278b18eb19db05f2a77dbeff5f3aec80a641b69fe3abea4921d8a6d2f723a97f7950a84958c5976dea6864e673086ec6ba16603006263eebfbd51b47b4815bce651943f5ae8fdffe0a2dc7105c38b005ed2880aadb507de9e2a46394f1397765cf758ea85178522b7167b3a45c39e9354ea7586d3a36eac12aa8a49850b2ac66af649326cb5e42a26626ffc3744c59b12ecebc9cc076d39463714595cc2e27ff9a7049cf8e2cb76996d04e05f57cf8e7803b38e97d24c8092bdabb57f46b429fc71308af2e1b73f8053fcee621088c97faa2c373fc7c4bbc46da3e444789b8dfd9fa99bf87a629c22df163768721d20cdaf18109cc5c82e1a29bf77b7e270b483e631f9aa86fbb480dc59b21c1042ffbe19a45c1949e6b4b3adee303edd8599e04e791c67dc037c5aa3e9fa814002dfa2fe4c2fb129d1787bff913ebc0196a888f5a40ac71d0707095dcd0aae2c4cd435d74abca5600c80ac5b350da5ffe26ad84634aa3c7941506eb81aca8d25a26bb00d69f73295c87f67271df4649dc4bc3d543e99fc72b1afdec923d33da57e4f84c214b884182edf9157b34583892ac487f8aeb3c4b11e608cbc96aa9ae48259d361151fc2b07d19d9a8568044f498afe4fc871c287f4b7b3e24026d894859c534f07b448597900f726f464c9015aae836dd5e073c9fdb7090a446db172e3aba162508e52586a98a1ea571e8a7d6fa28cff1217a732f7cd4ae2a475ec565e0916f1cf0dbce91e8c1a2d41f445978c3fdf9f53502e2bc175f661e9255a878f1d968fee4e4194befc10682a1769d303a4f6deb7836da47931329612c42ff88f80b2be2e6617417f61aa06ace50404273a5645cd7b18406fccfa1243eb866eb6c9ae7a799b060f6c0fb606b35462e77f0a14ce2ff4a387070894f9aa61171f8025ba5853c492a6cfcb6fc1572601b8c055e490545cdc018b109d526a79d8771d3afbea4a52e68293ad16769bfb93a48ba1a64b978855eeae46bf8d9c6c3ab027c334322a6942a1a94b2b812d5d4d9bf9cf9d67d75028ebbba6ef06a74dcb1244b5e7a250d75f8d4d8ac323b08f57dc3191548db362cdb7892a0fd4c5fd47ae4112c700fc9593224b6b2d97b2ebc851d687d8ff49ca16267ba8726a098176412d63c391883709c231f26c0e021d8bba281ed5f83b6462da925ef57479ede0ee297d3508aefe2f2a6b4bc38bb25915f6946ea5493f689d352eab76b19ce05f1c2dcf343160268f5be3539b6ce6f3a1b8ff5d7d57378f5685a357ea58c9f70f50b662131b15d12a365bb07ca27a767be85a8526bb9e6b874317e42e88584c1f2d47b64ed693a6ace208fedfd06f0f9bc6595a155f8739a1b4b1f9c53461e29a60c0eb0e04aa1e91c36f65df52ddd0391751ecc4827426c14023aa0887255f85427a64c57f694f60b77c0f7af61dc448f25c280b13e936c48e7746d15d28b669afb4ef053969a6f162f61c3ab3bca69d8e79aec711512ca1b6af811755e102945bd76d3969153a6bd9c632e82d628473641473dd2f1b709df709ddc460dcee916f301554f50c351d7c6fdbfb9b2b3c20a66d3e4b4cae777b406edbdeab3d88dfaddc48536a16335ac415dafabc43acb44f3cf558f7b9a8940ac9590f649041ef498c02fd84bd7d8c3730429baebf3b19e72cee25f4a453d00b773f411ea244f8eca32e66dd81adad8370c4fb4b1ea912a24cc2de78f851cb989d4436427f421e3b7859cbc79cb3eac59726b734c288a04045bff3a87c43f9ee57388428496e134661f3ff1795b73c65a76a455e86d5a430b52899639d9ae65096d0d491b93e47fbcd493455655f19ce92c17f48bc7209d35fabad931aeb9e842935d4f9d0b00ab420830a24b79f7aed70fa517bfb71e1a311396857b060f455ec79fe10507680d0fb0ed73734cdb6ecaacfd3089d04f860a0d2eff4bf2d7cba7eecbab13bab03a067808473c658c41f3a54eb59e547e8eed24ec6f9c2535f6fbc11e02bc14e8a4b0ed887f014cb186ff25c74f7208cf90140d94aaba19bfce203cd58412995572b8ab630d3795b25452effdb11717cbe9a66eba3f4b4f7c5a20d2ee87c2922cd3a58ffbaec5a0be2ece32b6c514da3f25e861e5bcebdfad31d5f68ad0374e3c7615a44897a277201d3c1602d9409da81c34be710034a5cf36967e0119b368b78ad0c768c82baec16940eda90083d69b3e9085d2d98eb95709f808d885e201f751eecee6d62373495af92d520d564146f271cd3259314659d289bd6c3dcccae19d08f19192b1f1cf9f1523f67886a061f08ed8ae3cd40dbaac2ee0b21bc795a70be0bc3f8b706e5e694f3275792f5c87592fbb8bd3a4fe74ab741d0148d223cdd5f73d86997fa9c80e23676a9bb4a6eb813d444f4d2a6126fdda015db860acf03b724b0e88b3575d62dfa1a6993abfa0fa3f761b7637ebce1a1edddc2b24e776bc8589ac024f640c6d5881683830b37c59b4b7e71c4d4a02f9369410c8157cd7946b237f5a4831999837d8580464aecacabdbc30764f056490bb5b7ac3fecb589dd66e3d23a58c30376cd9cbf9d30c025ec4cc898c0c63ef622cdbfa00539375d944f6cd3e557fca2dcac0d7a501438ee347ae41d5d2ee20505b728e84bf8eb042546c4a3f834db631903e52dfdabe4d80945b8686f2ffd3e995587e0ab78d4523877ee17deccbfa5739b00bb21024cf007aef610eadea09b6625d208d682b3240214b88bdc74522b047387f95b393a699d16281312b13a5d33d382d26e31fa698c0c0c5bb9394496d29a28932a4af2aa05768f1053540870cec1a2f67589221d899089ae8fe84a8964cfb3d4b31fb6d4a4a12914d78f27e810d0edfd96603ec7da581194432bfbbd68a3a8ecc13b97ebb6c026e065cf73f2204aaf96563b526d2919154e6d127689e738a8f4b2682e82deea6fbea2dbd94bfa904959cecfd0d63c591e8306cd67a34366e6f6af2550eedbdb21365320d7978e0554d2822498b07ec95e6836a4726cfbf36924f1a166550bb88d4e1b9d4e69c0f179cfb7db53ffc0befc613adf15ba016b19630fbff2a171dca7b4957b244289afbd
+
+# # Sign XMSS_SHA2-512_W16_H10 [VERIFIED]
+# Msg = 426e562ab69a03a893f56910a2aed2a0618da1e365167749e78beb4997d36dc054f34225797478a5153037d4154a90c88836eab69a7f6783237143fdedbdb6fba8aedfd98d3af16fa293660640163c0936ae072c0d38772013b0bbf97cf44b64c44acb62803a7b2b374da627e47a1135782f09537e873aaf5bb54676bb5195aaddf73b64fb9b32f3054829dc0dc0164e51e9efa8bb5e9daafd97a85f0b3591e8c06232e6e54a3606cdf93a05df506905fb69b7cdecf62145d5d1a97fcf055b69d35c07861bf3532cc9bc78058ef266d8c98dce0af755c84fcefa69468d4a9cee6effedda0e0263a87573eb3e1d9f765083c5fe5e3598caa2874d065360e7f254fe6e3c3acccfe63ab3
+# PrivateKey = 040000044dd18664495e800065f24eb4de5c87d19990112886f580eb9ebaab438b880ca702f1de60accd27568c5d915784c8f54461c342bb1615eb1566f6fb19f976eb20183e77c32d9d88aef58b989144a09ef5d1e6d37927865642073b98fb89536eae452b0640e1d0d9149c8b485362281a06ef1c8d0cbfbcc79e0a639472723c40f600000000000000e1d13d4dda1e62bff4d0257ec71945303e4a7c4873cf6498340fbacecf49943fedfbea8d9d270926029cd363a83d46c8f8319363bf78ceb720952e8b173c79eb338342e1b3e757436dfb0db1c42feba0cb03bac504153d4d60edab3782c0b1c288d56dad35ea518867e383af74167cf2e8fa31a6bb653264fda1df6e6ed8563b13
+# Signature = 00000000000000e11e3621289519006ad950f59712da0b50814d01d8c5c71204ab07f292595226b8cfba6d9f6f368fc2ee0835659941b0404fc8042b29e75f6ca61c7875eb3528cc3686229bedc1ab3d359781d344425944769b1c91e112873d6a4ee96d4eb7a44adfd69597bb7c7ebee7cab5771695218e80a9446824e48eaa818c75cfff8b670feaf2ef303103f41d2a062e5cbba622c4c74087dfa5b413419a5427b22e5892b9cb36627a0ebc0f74eda32e28f5632f6b796c5872aba88f78a3ea5439e0d23bef359306ec92ef3e0d2235817848c99533909fd23d06d7cab56e12578d88d93c2cf592a63e6132f03e5fb333deb370479e504982105b8b46ac26632d3ba5d8bcaaef0842c3c49c0e51f3f6b4d0039dcbe66d218d146475fc8fd2d2072be8ae28403bef6d2319c73a9c5180114cd23c21869678c87201a8410051aa975d9de3920895ff373a08b4bf967f24a5c356f32fcdb5b3d5d04e871d4ba77ded906918433f894af09a88b53ed13e0e5283dd8d8cbd6dfd98d8308ac382e29ac13a0ac3ebd5ce0aae9b92dd060baaeaf8592f67cfca6a8ffd9b88bebd622b605638dbbeae1afafe127aa70744fd4b82d83d78ac5e488655bb1fdf70963a3f23ff5e5ad0667f838b447b3f0de6855a182892f5bb012a3c8c3fc90b524c17eb06b73dc6ad79d2ed5946f93d759a4a2810cf6fbaadf74f83fec55ac690b51bb8f58c9e1f038b900ca561e79cf9e2c23fc174f4a50191cf739c43fcfe99f32e2310ce4fcdb5761ccee2bfad16f9a2b22f24580d1fe48a1a4dee1b425fce3bb36ba497936e2aa4f1fbb9b5743b138349292860404e43e17491366353a18d6d3da29e638713969ca93d8c4ac1d81887cc4dd6ec49ce802cc4ab61ce427a923ca99fbc24b542acb6ee7b7cb33f233f04ba537fa93f8171393d367377a8b826764ec17dab337e8d8dd22eb5f5c1ef723b99cada4fd019cfb541c2c9f188d4689d5b853dfc37548638f63d5355cb56bddebb3b90a60091c6aa62d964abcf9d65fa08a863c2c4766d173f207c738c234f520909df228d86747af74d8fb8ad17b97737bf989e928c684ecca388e840ee83a6ca0a726c5ef92e66d35c2772c7eb8662fb12224db27d491a1752d9ed05267c3760988b82f4cde5b711f41174a39114488f1f106f0fdeb382105cfc84661e32a950332af2741372799282ba773de7e48dfb71fdbd6bcf01582f348e8fb90ca3894605b272412588f20626ba737fff857881592890731c0fa427a3c53e836bd6f0dc6376860dc9c793107053afbedc83847625ac6b5d1c8ea9da1f55e51f121b76b6bdacb9cdae2a8f2947e53ae7df392c4d72cd1965956177406ba797ee5d7c86cdde3ad6a0f1d23d376de2acd1f5704e40836ddf7ae8e44d0aca3b128adb2b79139bef6900afb0ed4f1c0b6926da56d40dd3c81147584e0d3e35e9ccb8077a86f251021ea66456b4c7e8ea66a586a4de4b3dbd331c7c318dc9c90893193fa65a311ee05bf8b6c40e51dd668ac59a7444b0e35475ddd25d92a5cc5cc31fba8b3ba7e351cf5793ab0260a967c525f06fc4be8c869c7078e2886d94ac7a647a8d63ca3e68e71737778f06c9b63046c4ef36dd0cb57d67e3c6099af449cd0f90018b3089aa73c6c3596fb02bafd97ca4c0454ca9e36ee0f02a858a97c46d1219615b5671546f50107974a279df559931e248da1163fe7c720f9544b3fc83a1bb579eb6f4fe200a714df473aed2920bb2b815b648816ca14afc92b0fccdcefb068d56ac74673fedcb8310417be52502717e455a81dee2bf4422d11277019f51c002dd24c6a2cc815edb06f32090c065a349f5cf17fb7048bae7430888ee2ef1e14ed6156ea42bf4bbf67b69f5df1a347f745928d1384dd923dc2a02c6b6f6b769db5135ee397b62b503999234787b8dff6f81251968f8f1e9b2b4d1223183a9a58aead3f3a32175defdb54346cddff58274d9bf4e6b8b29f85d527f312fae0fd8ab75e0f0d5fa02cf3ec10b0e102dced77a55965428405c1048221f520efa29aebe18604b730a18d7fb440f15d571a80e683b965db5cc47ef96941c7d10ea94521160cd160e18eb6289d5c59da4f27c30aa379b9b2f21b722a9d25314e9ed3477122fa6ed2b5c510f9a7ffa1d875957ccf7f7beef0f0e565ae773b6afff4c61501dcbe9e1482f330593c1916088b61178959c045f16c757601e33ec4dd4ae8b026216f5ce5098f3447af82a61cc65c4a1db1bf63187c681941797c1b17e9e20429811c3e0e8ff02aa68d4f002ac25017bce24d765d330bedfec3adb1ff0763b239260c4efeff33d839b7357cd682362c83802b8ca11c769cded6277e40979f137e1e30c53e0cf0012c7ae556a327d63c64aaf20ffcb9e919e8a516c671cca02fd0223d2482f98ce275f2274f132f7e6e7ad3fc012de20cab3ebe4594e0134ffaaa1de3661e1f1fa49e75fc54614798960e587690184f0feeb5f1434b30858e64b4f50af28dd7f6e7ce65fa4979bd1d1f9ed8ddbff99ef0ac3b62c6ed76b54a886067559c24a92b28eb5aa61f5bf65f38b08bafd9e457d88dfbaa56648c430917b5e7c6522bd471b14587f680466a37cdb8eceba616533ce259b77e167e2a3ee891b8890661cc976ef720016dc872b799b17ea22ac483b7fc6cc896e9a6844a258144cf936c47153e03569e0e2b1ec52340f36a14326b6b07a9479c4739124e257080a26ba42c522af561dc4b54092e68951ffe81cdf9eb286b38e27f347579c5400898d22ae987b5a3a6e2b0fd6e0b407d63613ea87be010efcfd43e83a4211da735d530ce6156e270a8735ecc0cf9f5cedc99453720cc5c7802369b73455276c1850f1ea7d2bd795b6cb61a00a04f6d713575c7fc000627deb07d5e1ae70228222fd65fdd2995c994b579709cfa51f1b04c06aaac3fe3dc06cb1d9a31e9992005bf7079c4d2dfd69504addf3e76c833de8fac7b8123a0f3d89e7064abcca1fbba4ab30768525d66aea8e72d2a686234654c9ae2198f1962d9c2cb7c1343b4355575a055f81a9a0f613e1946f3b44dd12bc40dfed86b73c81c8a3bfc2e310c75e53af5e0438b85ff10d5461882ccc90b475d46cdf5b79eb5685732e3d75cab867327d1003aee4d1325575319129f649a7442351e012e22d47a30bb7b247ac36718851d3d002f4344254eda0b5f500d26f41030febb5b8cce640a22950a876cdec7702a0fcf3adfb513b27b4d795e1d105068704f5044cc00c17ed6f7e10b96a4f0c85d0ed3c9b7c2d9c12c9c8634a1e22863f84ffaf5f974fba95bfc8f8eaaae20e929c7193ec0fa6f217219b84d6b4b57f239e8954947e60c496af4ba34f8636e41855c1380479da3e8a04c2b28a7eb8039388933d9c4afb20ee8208a827a3cfb72dc831cc230516be52be351ca541c36b651870b603349f7bd7c69e5ec8c1baeb661b958400a2dcf1f0530855013c5b0d313a1447030fc702e1e24cca65d748e88c32da0c6944c21ea98fbad3742fefc8513d97d3534776c164b5f459a6bdf74f9bae59be6bdeb9499e045e60bda1308434994c2913dec07999d6e3555b78eb266a568ef460c94a038bff85c70a40ea43da29b7ae2c99e6cdc8bbcffd4ce7ce3550da17453b521c66b86945d5ec2ef19988fa35ee25e9f502dd43e5cdbaefe74974297274d0f7e5178868c7ee2c28efd7b661f7496180cad0cdf15c9623048b9f3d3891cfa8a2dc5369cc61eb0cb43d6eb9c0d87c110c774fad926fa116850007e0b5915e0a12dd42a4a9339f4acaf4bda00725655ce7e6b9e18a518f48f97b7c733c8877184b5ce1ec2a77e89df21f35ab51c73e9bc3d7e092da99913405b38b70d1629846f7d7d8c92f921d5ccc08c138b7c93b52d75641da814dbccc57a93e691c48d7b70c3f282503d2d5f9ad4bf60efbd5961f5a7167cd3a3c37bcab273164628c236a9efab5afa20c81d9d7820701f9a301cd22ad891d854fa161dd8164a2a8914bd53817339bcbefa4300e9f16fcc105a27f769c22170873841a5e97b443a8cd835e958c5fce5b81109b073023664f069ac4f57bb9b80b8693b214d623ced692c350d731dd936f6acb834527be6f5873ce1d1389b78e0d35f14a2f907548c0d5cd407ccdb3f899e193da7c5a42c5fb108befdd1cb9f534136379847b80a77154ecea153f6930d251452a3fcc5352cb38796f80ba1a1b2a6568b295e5931fd02a2bc95182b8620207a7f7ef5de6bacb8d2f7eff14424bbd2732f1d510bf7a3a644e33ae6a6ea9786ec4a9ce3ae5751c9cae3c52f8b890037909253e30b94bb937ac3590e5e7f99cca15ddbb4cd788c7bae1f82370df86d5d8b08ae4b4dbe781604ce00fc5234c7c10424d8a8426543cf35a4a653f9cf25624e79ff5964720b92a44e76b2dbb01aa4ce14b85f6affc8afe47d361906d8d7b0863e9916a9c7202f95f83e59acea0cca4400938822e27c4d91d9deead8e7ef9ca6d73a69f5e260fe200a0d076c26482522a800ec0f7ec13da2f6ef4fd9bdc9c5108f2acbb6edd9c27962376af42dadab18b6626363ca3bd8e37f4143a5a6aa32477952d43559bcd282cf448bebf800f0b3e9806d6a83fe6069879925c0fbeeee431e6fe343665c3e1fd04433eca97d59b973a317b92bc1240e28a76d6871aafe734a99f2232802b831d7335d22427feee436417b029787b34392fc2016ee13777e591d87ff1b2a477d856eed6ffa2c458c26008ca03582a562a2539fcc7c089af82e475500de124be35322dfaef12fd6f983381020b6ab876d5f8883f93707836feefea74b06e18e46a234448d886a0889e57b2a68ec7781b6ca9f34f71785fd68f213cb3fa911bffefcfe7dbc8539b385b2f1eb198ec2f1f6a04a27cb3540d462fc66584cffbd450566a04e6c49337e9b875f7b38bd5ca98b194e34f1ea84382e8c1be06665dc154d5ed3b6b4bf9d43d8d1d24f3d9e11a05e43bdd7986a6180666ad83d82ab321d6ed8cf29560b95dc0704014998f0f5caee267bb130923cc19d6861165e994ad4075d36117e75e2e82f1f54f4487f671e9889ba9a94493f660a478dec7c4e351fbd4867890243a31222a0f15fe4df3c275d576ebdf9c3e01c9241dfd43162e173d4b79f54e139641156e23bcf6004470a136df74a0ef28ffe857bda8028a186e4b2a94fc9a304aebf73fc3f3d98807f7f4848cf5a6fd60b61146a8d669385352189202c83c78937e54e8bd94f92d0c593beae5715d4f67f045c5cd48990813dfc378517f9c193758294b2429641e7caf987c60e2223626c7fbfd4249f01efe16859208242f32298e1eaca879ce32eb28a4466d3eaf360022e1bfc98e3f09d8364c4aee1b8b0b19ce5288aaf852214611ed39db9d19a0afe9918d01f1f0f59513280075b6d1809f39ee92b4f28810a91b18f47fb5de73e52f21017293f6da8126373178ca91fbc6778688347ac41f1752689e528d851a42ff2c1998f5d43a5b79b72a2ee236c810e358361f5248bc93577626e9087e475ac9912d6811afd51e3164d376aae8f1c389c37061dcb1ecc112ccc232508335a8b52d02fbe5d727d13a090649e8d20bc374092a7c2ee9aeb5bb55668dd18c45060187a4ab6cb5b5b87cdaf3cee56ee6c1f20a59d4f530fbfabffe025b6de74e7354d7ca87ca7f5d51ad5a977bf4d78665e0aa3295414c67d9a9aa6edb8f3355cbf42b862ef14940d8d457e7cfb31c81d0193a95206caca62809fcb998fdaebbb872ec8b5f6759d96f085bb7d8f34e04d652e2233c6ad7ce1f02bee19179cee022a8e0636066aae39f6f1ff86986cccadd19e0218f4b2c5454f913aec789c4c59049e83b58769aed6ae93608c2cc0b3fcc2f02498b44523e053d7e5af4770a0c829290378412f825e9f093fb9ab631dd5d1aa2dcd4909c0bb58fa48cae186ce39166f0c1c02cb204e0f13aa63296bbe17faa62fa7bda2b0dded11d26d5b0534ab8d5ab1c6b66ad09f0b2a3e75de9e34a0503f4993f7e34acc65a5799d647d04e7580c0a4dfcf8583353526c00031460ff6efc1be513160ec9d9a4e41581ce14e0a6021544f5b3766ca89e107304531ec5782172e8bf1084e19105be56270018bff2fbb82a4ca0def5b7eaef885e484e2c6e75df0abb5fdd27f5dee7f6681f9165e26c5a2333239be83373a992a8624ae7fcca6772200061246dd1d985b67c18d2e72803990a19e92f6f497347c0fed4245df234a7ca0fa3b06c07feb4c6589af661cff2c008de6af3c7c212798a4051789a958db0c88b83b15a148e64be94f3675e9011841f932e39007224fc7c8f7fbb1740f87f6f0d1fc8be7196276eec6bc4a42ec7b50ee5ce9add0fb3f927e7e4691b875fb5ea7ed03fdf38588a3b140fdeb0d2d26915aa29eb2e8094945987e52bc3957b3f36e471c13c5d7734c731b1a4e9fc44bac2388b4712add69e13e346b43f5b01490a1e03df8dbc8c64e54bda8a1cca814e577059f14b6abc97288d804e43fad940429d74e72c24ba9fc5588afed3f76fea0f69e7d3f9ff59ba9993d837fc328d86bf6855abd74ec68beb7030572977345264f97caafdf1eaab05d3fc58858a3080a8e1140ab258d7f51fb52899f5ef277f4e860891a66fff68cc9c2763762df2614a84b2412df3cac2df2d21ebe506f6b5cc4b514c2cd4706044e7e63b944b70daa84edbf4efbf1e1b741c47ec6505c1c5a1aec2f93a8c4869360e906f8c628ba5e4b89babf7fa2a82889560a7836ff3a7141286b41ef3a17dde6e32da687936de726f06378d1a0cdeaf9a2497040ebc76fdb97bf4eee02b3d9a1ae078f8bc5d66adf7369fef2a0f63293319c015926db0c80f70f00a608aab37afa3efb817fd24edb4cf6cae4a731f8bf0dc73c66cbedbaf544f701913b95cc2145484426ab3d8819bcfa734dcbdea07a4087e2b65f5c505f5d37f88c56f2b0d2fb99a7161f4269d2a60e8b6ad4e526591ce7b65bb52cb949ec9ef619e30ad80bf5046bbec8ef8794287e4f0acf887b9760d4787ce5b4d506b00368fd74a468d9285e84c5c5093f7432ddddc3d5a5121d6b160a7656c7f36edd758769ed1ac919f47b1258a0380688b708db1e4c4582b4c6b8e3a8a3e7ab99b28079d6c8a93c2538ef2d4d205d0f1e133f50c0696ec1c786b05f42c6adc2e64b858cf8d1791d612376ac8fcf5cf2333f5ab39b56de3c9159278a603be24c933df82d8bd4aa17861fdfef8b717dad790fdcee625b09961bb9a830683646c01be7fb3e7927baf45b88cdf8fdbf4dfe83ef449236343a9d588fe970b0178ff7e0e1ddbb3f27c3d235ee55ee70090e12a9c1af5065fa671a6ae614c9b0ed05323576cfea191f97138293cc99af17a55d1020dfa2679776a2396d6f8ad85ceeecb73adee03dd0b0667b20543c3e4004c255d89f0c19560d57e693e2388e3fc902f9f2d856df808aea1f4dfb4855aa5a50fed7ddf99cc1fafa44bd2cd32bdfa63d1a91fbfb1504e72f0ef122ba081531c4a198054efe0732f653471832b2930bbe26a83b4c1dcb3c95269d69f124db4c3fab8b140b951f0380a0c6b002faf4d38dcfed84e9bc361a9387364c3f55626d76dbc7c83f32fdfcdbbe5c445cbfb16bc9b10a9a2ff0a0fe6a6b88b08ade1b142a0e544012023d1d2cb85cf2667d5f79a2355b39248dd9f27741e31a7e608af22a4ba529e5d903e867fb35cc93e6c57ad5dbf046977da331fca2d96b6cd3fdf08f4709203e1b586def9fe3e34c08ba8c21eedc88c1ee6032dad640392ee70ca60b5a3904590784856fbe977fd3ea02f8f3bd32c91c1f9890b59e3512abff08e576caa0fa7945411c67a0aede6f5aac477604048c7aba1dabeea89a205188f973a87ef6af8845498e44853d2453df54b67e63e6b05657bd04ea8680f7efce289bbe234d4ade6e2c5e6a616c1c58264eb01368f6f8714dd013892cf761c2d1ed379ed2f67fe351342dcd8a0d9237282539e0e1f49c09d6d33b49f8735b011bed834fdc6dace26835d1137f2046d9833d2044571cdac0004bb4e47109b1591ead8fc7a538e66a0a8629540ba84726f7532420454b5efccbdea2a98256fe80d20e2c3a7b2063c214b6c020c55fca434010246da3be221576d927965803e93842b088a68fc86d12392aceaced959860cddd60678e7330c11e03557e209e161ec40f8b652adbfa591525477eb9844ddb562b7ac5ed909072a84fa9c62fec1aa93a297fd72a9f662125f922ff622d1ed74da2e5ba44aa513c57950b6dc13a90119429d0af795929c3a044e0449859a91b5b0297ad45a3577d4ecfda0f4f9b97d20651eb886f36051a03477d2c057af64ef4d83a8247669460db796a0a284690e1d3585650930e833e79586ff7cbacf70d5644ca81f1359b0618496ed83f84175f8b2f7ef1ac519b915adec7a22b69bfe160dc8cae69b44147d98c9a962d9d23fc2863777b872aa6f7dfd5b61590575e3e06e4235c92617e840ace86bd7748f8cf6a140cd24a1206ecef694aa73f84357e424b9b6b14342c9444c0c61a2cfd57bff35cb8822fdf4f4602be53f07255b3649eb35e44a04596e3d14802010ef4dfdd0293610e81dfd9b16663ae63549f1748092c3597e3e34b8098b4cef0b4b61764181087663e794b4f47849a67430d31cf68521521d6abe1fe6bdfccb00a9439e76d69c34aa7a7c40013343d4bc536dbeb78559ff049a2911f9e8407f66866ef51d58f3105e93e4427f0fe673dfb319a2788720b2b3942cf0caee1e7d3da7aca3142b2385a123cea6523ebfe44fd14591d062e9b69407bcb91ea3dde2e660ca3e69da3ef2cd9ec062c6c394e67319e27d856d460bb02791dcd1cc04143df592527b88ea4e5d813cb980a430631ed77a7a445b9b298717c2b9b5deda51a2c25a4aa4c81165cd786c2a8f47a85a8a46d3897d240591ca147b0ec73d2a948b32454f4ba79ab0cb69203f5b7b797eb63fd44f754990f1b0aa5b4054651c978dd562417d73d468f7fcc201c0155c7990483f50da15f15f5248ea3edafbce3346d9dca9e34d658bd29d7bc57ffc2c96886408cad12562c177c2931017e53d933801c42a7a846cab05301a1df67b1cfecafafe4ea5a5379506c69a328798490ccfac7804fb286bf1fc4ef83419ca391b5372e5f800d7cad6f2a182889e4a168b02bb888a8147d6cf827ba1441a179439b7269a45dbb4ce9855d2e2a307bc143d7afe38435b8fb307d62dedee377a5ba1e645f427cf0d87f0ab00d7120c22a21e1eb949d503a4669ab0c31e7e2bce2a340212a88e04729032a33c65e746b72699f637e935dae13227884ee9fbf79c33e964df5139b9cfc78e71ccb2a4086a88c66eb053eba503a538ebc25778b1e989b49d5edbc0c4d421790411155883fa09a9cf5d9113de2baaca8f29fb46f7c4c6289cf311ce1ea151d221e3bd6fc4214b0157b99053edca1b420ed9592bde0a4bf88af15536fd8ab43678b9ad80393f1c08340baffb9fbf9ae8bd7233fef8a805341c8cd826a5c6c935e3c70d33164ecdf6feee450285207c034e2065cefe6debce1e8411908e760d8948bd38a79e03879be5c5df18a3a0a2435d33ac146a3f66e198ee282da37435f809ca93a20f9a0260be9b17913fe0ddb3a50f1d58612d86110568f95d508353173e56c400970015218c017c4a500d18c1b960d28a6903c0a839dafa932ae7400b15a773af60fbbea73247d3d22d00c34cac86c608d78a6408383a719c10f20d601893430faa4ebc9bdde8a531c5d43c45dc0989a7f5eaa7c14fb7618c2d90aee5bcc4c4d1b6bc32ff108fbc0710c617fafb788c650dd3b8d233137277fe13f134bd667add16e199991be83df9f827df39472eab2d324d85d20dbaa6fd80fd1156b4cfdc6aae3c6c7bbd08d8402291f1829c3b231de6e6d52ee34c9c783c9bfcdd1fde2b2992d9d279431c5fe9da72e7716940a7edc7bfd762e94b895e78d549d6c8641c8d0ffde41b325ee34dd756007ada9f0c11385f73c3ad3c2f3b11f5ec12247ebc419b2842496cfec4ae8a3a50ec069717e7b13c997d77dbc8cc87435f9d6a49ffa3ed81d3cb793fa43c93ad5010c8bf0559abf55735c5dfde98be5a36e734d04839d875b6663dd60ed67dc83758b82c1798343830870e4e8ef325a8a52b9ee95708d072b0a75b57d6b20de7b571426cef8d09d850beec79dd32ac83328a8693c9f051e5fb48322f0e647c043c7f683f93cff5ec4f27de46dba9e0e08b83e9116f6d312747ee1b19dec6d1766b5c55c1864c24850d861b0748f311716d91aaca6af22be61cc0d68a3c164b5177047c91f5b8a3da5418818142c17b1cdb640d98d967725658dfa53c24734b6bea75ba1cdfe3882eaa7827f0551f3262a22e35e9f4a757c1388f6bfd06bfe216818ef44e79ca36e8a4f99ce84da7450126b7065cff249646c376da7a4d6eb6184fdc26cbacd58b23d308aea4e08dd690df054fedbbc9e654b4815d2d4dfd6a0a4be8135e990395a9826eb5c06e043790d0024044c114d835d71afb5a919871b062639f226c8e4b3391a7e4c33dac007d5f32e28bee03738ef0ca429132e6ce5203f8585f799e9c29f98e5814d5eefb2780f92159cdfdf9ef56f7a5bc9327b69cb199b6983ccc85316f9d477498e9773ff15b27ba3339efd5366723bc2ffa1fd5186976894b5d3e74f65f2bf047d26c0432666b54a6de33543d1598aff6a39e0f4a1f778615031fb8b488ea3076cc56851d383107bba22c8982c1cfedaca2be3ca7a49b51e54200f5369e316aad4536aec02d4d07586a071568bf3aac01d3d8b12d16512dcd29e3c9765a7a6ef5df3d73d3771a10b1c6acf2fe0c0b668ed9263bc57717190c789943cf17b74cd2bed7bcafb34d0e7d023913d383e2482e61de715315f45ed4185cdbdbb17b326949c5624c1bd8daea24284b5bff8b83760437fe10d50658ef3a2f9fbd977ab900ad4d44ed36da833cc3f65d327c679c3470910be5e27a46f2c348e4367308cb54e054a06ffd3f90936060d595c76b26ecdc21e44398429a8d1a0076d2d09a0dd94d4b134871fe6e2fe6cd995629981f53c17e27d0f0e7068462a59bdc373c4febe11911f1aa56493826a9670aa8966d7d122e7a9b14db8931783daf51cd23aa069a53a7a5512c35e6dcd1ead74d28042b25d3b0cd7b20e6180ccd5ed34c3c34c89af5e0dba253faf220fcea859e439a0f0db24fbab776ab01f2e08b8558e857244fbfe21659560197a3ea03365ed502fb5dde82143d32ac1087604d90175f2529660a2ab2df99b965952700554305945118ee42a61efac8c2a714a1b780b9684705450e63a90b3618aa820c060de4582beb1c49a8d5e8d20eca842b407a431ac0dca1fd2791281d690a71aea3f0155f22cf3550a771f7017db3ba263f236dcd8b1e77ae759f84c6ef03d21726f710563c0520a9d2013ceb5e2a6e85ec2c38c7f14aa865e2879c6df45fed4bdce3e41a8a07db90060cdd7657bfa0b1b9abb6f5070f8ada6c297d13700a87f552519154e0c07fbc1ac7d36c0ef74e2e519e9eefcebf9fd2f5323cfe932e549e8fde948a522a335d22bc668def96c1d21da4e7afcb61815f94e73603641c0ab67252b70a66e7451387a743358b91330d5759a2b14121551ecd4c3af0083fbbc75ae0a25ca16a0fb90f522a7926e3c7dc777e992945cd9c8d8ab626a19d2140159410596fa33209ae0ed109a82a569e552926a882100f764ae52f4fff90a26efcae5c74da90cb2ff3ccf4b84101d5bb36e720a982965b0c0792fabadefc8b3fee4c2504f761a1f869572ae296e301067aa1689f38f81a48b6e40f2e9bb68e4db73e8b634b7b34f6f64f407aeacf9fb5250e6a83eff91ed82a62b46fa6e98e1e7cf33560b706a3355713cb88e9c771956507ad3b7212a56c99e5873a233bc7e35da82acdc4415a729483ee770b071d7acd9b781f12c693da9378d645788d5dbff9055b0ae767174414877826fa27d44a65fefec4a94eec3dca385f71098b09d0ccf728edc6e799e3eb0870812df9285014b8d15832209475d633570d63a08c9f0e0849df77a8b10d0e7502a660248ba4878aca7591c3cb7069d0f5741e81fad3003516ffabb4beb207984980f49b0277f199199638810834eaf41dd2735db5f32d6cd8a9ef187afc396bbfb6f7dde1522348853f596800a53d5a75fd3e455cd7be99ea6bcf2e73006dbeabc43a57ae2266e17d1d966c51e29da98aa302faf82ececf31127bb7875390b269a6bc754adfdbaba819943637431efd86a0b02a1509190b6b3c579fb234119fcf5f342fd67cf458f30387dd7ff0229bf713a6550364b1e0cedca6e47f46737cb81476156619db8f636ad0f41ffdea30068732be6ef6cfeaa5d96d23c10a355c31be0a8c5614f9a5a1c26431655945ba6d7155b80fa38e67e762c8b2dd783e92e59bdc033e558d965f9060541e5d2ee27b42b213c87fa741329fd92fb8a3cddb4514b475057f2aa9685a2a7e08f706d198793bac3610d091c11139eef3630a76d98dba96a873a1b38cc90bdd4370ca9443cd66ef6111b17bd36cb01c5b55cf166f5e1d297ca2af47a786a630c2e7eaec857e86513677461c902d15e4b89e7d084ee67e2eab7b79798bee060ad6c95f69d978d698a63bd0bdf8e10f2e082155502c4e85fd913e8a7a595564c53bbf0aade4e97fc626379e7f80083f1db1dd240354798047572d67bf42f9a6bba0d6e1b7a95bfa0b0de59dd249600ec289ae6dd1d7239dac3e5125cf67ae16559959df2460ce3c73c406c10e9e72955a8964add825e4cac10826792b9ead55b0bba04c54b5a81d15b2d3cca8198866a96938daeb5f5f3f1fd64fe332f62d241f0b940
+#
+# # Sign XMSS_SHA2-512_W16_H10 [VERIFIED]
+# Msg = 39324feb180aca683d995db187a075a910d0
+# PrivateKey = 040000041f1c582dcf6a3a7133a47f3a7146605b9cb4a049781a327ad38dde5f26b177267b65277a3bf86f07af5f2dfbe1132d315f7e2aa0b3c2657be7825f6126573bbfbbe58d6c8e63d95e5c2edcfab5077810df3521abdd172051672cacafde4b2f73c605d66c94aade3cbe188856e236e924f49f866603638cdb1af5ca27496b635e00000000000000c053eb6d680e5d29226188aee4a0e1cfd363e9ef9af143dfe9081065707edff5efb68f4d0abbb0c3121ce18c32cd398b673d43e449039fa0f270d75772fc7a6581ef44a1a145002ec7dced7f7d76dd64c1628c52f59483595bef40d15951234a4cad10130a6fc9e7be663c915b6012f7577b06f119b68e70bb598679600a2a4c17
+# Signature = 00000000000000c07ac80f5d8163c8931e61c3bcca6f26c60d7717dcb7e8b1db104a2089eff3b08fcba4cabcee7ae55166153abfd5b024d6d268c75db43538864696e479f46e5e942635525fd811efd5cdad2f74dfe0104f191cee8201bc6980f80eba509172b1d757da113c80d1153ed5188f74a7ec79a6fb82f4789d3c992b2f84f1638522f7252cb619d96c9ea6a34e4799f65eb8668b18f63a9d20aed73683c94e1c20c657fa3b0493a823dd3c244fa4adf51a1eb3d72ca3be7871d7d09856e3cbc67e569a1ac96b9ed165a3f85501473d8141f8f9fa514f6feace4087695a3d3af38829146498d14d071f7f88ec455a0eaee12ae182fc788ad4c0b252727431e5e2200e181e4a5b2b229d5da3f4b266fa32dd0b61802736e5ed176ecd5d6ed826058bde29b834789bf01a1746a219222309f671e31a3528ac1346565e6718925d40245ddb22eb81989e9cd2f1b6d91a8793b862d54e88fd5ce2690d4874f7b59dd29065c9c8e9021368e9fc0afe0490b35e7f02ead1c210a005c862fb3d5e49b36a61d009f585707f99a9f0b38dcf49006f95e48d06714064255dcc3a16b17d3ce547e7c004bdfa2a9556327e85711fff1132f3127f48443e08212913e6414548ad94fb449e0d128a9a4d9f4214c05c7c14238348aaff0fd84425e0352b322d3af15c0b3a9818583f1c92c050190001767c4c8e23b02e9574ef26e1c25f826574f074ebfb6248929d0366382f9d144d629382ed76ec81c8089218312ee59c9d8c0d6790774e7f8159143e87be94e56e55fd45ce5c8242f57c59eb7e08f159e2c04da64d03423cb39bb17665ab8bfcedffa7f2c5ec378ed88900cc2757897410b884bbe18a0f2d3236ec96b676fc2ace407194469621cf12f6c498d10d733610b996ef90b499a24a8b58e1a90144fdd6918d7fa7cc8ad74efe60847dda0258e923bdd11d0f8979d6396d9ff5d557788a541d9c1da96cc477400445a978662fee7d2a300a6f88d183d8e0b7ff5669ba98cbd46212c6d7edd8480fb8b924e23052b1bdce728c20c0530889c8d8361f85bec913c13b040b3a4ee8dee462add931c3399122d55d73471210b779dd04ef8feb63d33ee8d5dbad615aa7aef5f1cdec32811b6543392264b088b250fd450ddc950fd68b92a41652134aeacdf1607ae2360b9e84ad71d4637bc01d773a0c31db317289e02f05fdd2b16841123740fff8c9af4f64185b8929cb5d4c2350f511fc2dfa1678a073144ca18850d2493c7dd00c506324fbb777d6805b2f642350d375db002655d475f8c572b06f88a12789d6435e0a65c7579caf579739889a1d016f07b3b04584ff420acf17a0c364f65e31a04b2a17cb5cbaad072d251563bf68cd705a40546df1b786ff385208df89c9fc902afaef48cc563f146f22d55d69901869158f03b873b82afcb85a2a3b4455267de0233b187f5bed3e3e517311f1105ca732a0c432952766fc773e1301f98dbfeff32251454957c88c4ef82a1ebc26b4b2f98abd7ede151ad07777aac773adb283b9e7e822ede6de05e20533e69c686356b633447cb80905821aa45dcf7b66f9c95c70895e1ddaf811d2d888b6a9f5656a9124016f46581ac8a3d1cba0c747a5814d342c268a63c895846aa18f5ac29ff5abcbf88b081d432fd45da50e24455fa89556dd1c713cc4d374ca7555d02ce71626e9157e72807babef33d24c0cba9f9dadbe0a177fe2fb9d6cf6f7727762c43f653a57d96fcc91318a62a1edd6030c834fa6a39859e66ca7e7036ab744ce0982951953ff737968966d953d56842b9440251b4a56020671064d0d8f873b5d0ed9b4527d47cbabdb4e99a780ba258216822ee9d698427b0efee8916c11a2fc6a6183a8635da55a7c6014390f098fac0cda645a56f5ace35c751580ab1ad148fd07828f155239a4a58955e094c5325fc008c537096911d11297ad3e1622d563e016287c8fa4ee88670d359eab82bd6418063b16fd5e05ffca79079a5e3bb4e57175714f2b60d95387a23b11573107c96bfcec03a7bf11d55fdab53337f8112bf17b61b32042c647d1f34b50240cd8a9fecbccc4eddf66b067a16bfc0528cbf9b5c6e767b2b2eb9db36324350beb61a3c79cf00aa2f80f078d1cc5017b080e13b58e0b453c2bd0dff95d42ea532601b4801625fb0d1170b4eebaa76699f449ab8546209c1bbb6762b6e542ce1c6396f090f8681c7ffa96b198c7aea187383bb05661384fdcfbd7501e7d8b6c2fc8280086de2f59110f496aea24835da2765320303a1e39e0f1a17f7ecfa155931bfb66bf9d68642d8b466ad8543df07925e40127efd75c29ee192adfe2fd0a317c7e609a86c8bf8a6a4235eba4e8e458ce9f37604d5b93ae5ffed9b3e05a5a7945897e054085d53e7dcf29a67376e0df3a6ec5957ad469d3f605e71b04c3581560ea1df3d5f1ae26aacb48af709bf5253498b7023009c631212eaf8541cda822665d3791fa8191c8137db1a9e39f861d9ccb27d9958b0ecafdc00baf982de74abdc519d042219fef5520d36f9fa609f8d3a1dfc5858b3c4a2630ed9861e78714489eaf8afa6968f6f95292d313d313d6f9c785e3b58f98f38e81754d8d9af0b2c1da75c541042798b67eb2ba2f76a079d49f599c08ac8330ca7b9266cefa4fa2a3f9de24c690e8dc2e7cb6366c881fb360d5d3ba15a140bec0bbbd006985c5e89c85cd1fc30f42a80bef55fc7e08fb3a17bb9d0837d54ad46825e8f2890c3447a37a06e91cf6e5d509cc6928f131cd8d72930891c12878693b9848a14f4b00305e9c55b414f91f99adb0c911179933a84295d05cc9f3ca637f49ee5b23279b7437d953cfb4690354907a730f4c9d3cc9334a88d951f5009279e0812effb6f6d0bac284674eb18e07be1e004cb61215bc41e30862a4f1be19c1cd17413a05dbb5be6cd9c915000dfc4c23ff082e659dcdb7a02879b17f1428e565556e9f91f46d4087347f26bf5652fe096fd79406e8c240a4ce7efed953bb90fa6c468d20b6a66529024e59598330151525daf6a4e101fbebaa1dbb6f19f4bc1c54cf1d09c3710f9365f7a879510042218f22a0ebd05a304d33ff3e69a04d399c6f31c207d8797f7854a6004239ad3b4e1de32306979a98d62cbdcbe9240b07f0f9ccc9c85b8bb2b7dc8615dfbed6b1aea086055d2731b829dd994e348148f23b75f8f8ff6c80ca731afbba7db5b572a4e31dfdb7cb19a14e2576e48d498b95b8b43ee4f029a694b644516568e9c1a576582197343a56a13c909fddaedb7eec91d552f071ee208dfe3685fde6a924a20a913954a1919356bbb1df549ad451759e4b231af8b4b05827ba94dc3750cd8239a51823911fb5ea51cc013abb9379c1164d50af871834f2c272da5239b1b8822c454dba30ac720a8084d9c3cb324920aa18c12cccd5d532300e020840f79f5a6f739a06ec77e5e5fea2d1478ac45516564213bd9d5bcae9e533ae51d443971912a1053a13ecbe2106fdd3a93938f1c5c263dff5e50ac59a8c7418b5071ff7de2ea0c90cb73bfb9b6bea54c266fba41b963fd33bd5bb95e5661e3fa2d21c9c9f60f9a9c6fd82c5b91e88398bd144012abd011c105272dd3f41eb81784c49144a2b46a4fcb2e241021d58b819e14bdf610b37f6edac980689338520d2abf57a8a42d9e34a08ad26491031c22172890a7f999f6447c3a788e08b332fe6210b7597e9bbc210cc540f67a946ccdf052888f2cebfca9aac53a9151c93f249c6d6a23c272a37c47e0cf276e580f950769aae133f71b84768b4c4ccf0ff3de463d6736bc2fdd86c892acbc415c412f5640c2ababe9372d4fc942df7a65b08bde25c443a71f096a3ea62fac6067cdd9dfa63f821cf6e7f575fa19e6a2096676dd267132db79e3e2e55c25a02d79d0fbe3ac328a6c4c0cb9ab177388c000f5cefe9adfa6ed40cbe99885aa45134383edbe2c86f247c46cdbbef93a023ff060f45272e051feb9c6eeb6597c36f80ecbe1b5b8cbf77c07f55078e085b47d82bf75dfd25d1f432be9330fccfa67a27063c910e37bbe1e92b46ab3e8d6320240e519f414ecc302603765db5c9a1c1eafa9ba18d26e212fb3f274000aabafda9a1ae28eb8c7ca972d3c20fdd07deb724cf5dd776edd4abd8d39ace572093f02ce835cbc35b03fb2d3f9e4ac384324d8fa96e14dfad179f93a224cdf7232f2f2843a9675803bd8bd89fc35248ebd792c673791c2a602611ff6d54345269d57bbb9514a5cf144f91e9ccc879bbc21023891c0bcabae4215521d613a538d5924878b3eadfaff7b7cfe6af56bda4981323ad7a78a46a415fac1e51ceba9719c535bdcff92e45da127254006d6b7dd20fcc3862800e7b3f876684d82d1e778f0054d6e7f2e8d1b15e5e83ccd15e3e70834b9eecc61ac2f76125c5131b1788e9c44ef7cdefedc40163cf6c9daedc93c09964e9d2035c0f7303769dc20f9ef6c4f7dae9b50e10baca7f129c421b4a8ad8fa9f41a523c7993723f40b57fe06215ed5dfec30c88ae7c12dddcf7ec3dd45a61687f5c25e6f28ce616d303449a2c285efc873f6ea89d2764f6e40692ba654f5227bfd93674199b66f211c497b1bdad310d8aa952d100734f0168198ee008604e298b26dad82d35bc52c162b8639dc62df288d767b7a03f18932ede9997b1828fb478d60351f00a15fb4aa2e6fc5b6931b4f104dfde35757b83edbd6152463236250cd41ea638b969bc5d24abed7b2dd31e668153d6d26925974bd1b673c8db03aa0e8358ed06121db5d530ca92986fc3f48d34eae5edd69bbf856bb4b65cb83f930c62e2bc34d24668c4d85ea0e75efa3c29b2f8507fda199cc55b363bde11641f919b37471f1102ada6f52694e943e2bb03695a4f3d73e2100852e1ac46bedce1fde778ff383b1f323ad66c72466e35d370c61d1cc2a0f92b9fb21b2c82a32df201dde74e6a95b12d5d80e6e4c1ed19e279ed41b92a3517234025e8eb524f1b811aefe7f9e7a9179ce917a2806036fdc005becc5929b6ddec574cfad3f3437a6a712e67d05f755ad159e43a5767f92a5d696218f85f48509b24c72a48bbb1c22840c3a1361d56495a857ce55f7315cafdbd546f4d14c5bbfc883c280d945c99bcc54a60dcc85b23fe6da642c9fe4b9ec42e9c863001442f0c000714d5bc99bdd2f5e45141029602b65d5baeebd9d561f7668e2a6c4f195db546fee9f9c8521a84a7849ca243c54265f833afb63bb2dc68bf7c1db0b8cd61e3e9e6fd75f5dea5d4a13d63bcd0c47372dc29f34ca9a3b41904a914c045a0aa212bdc8d0d675e7031f4e4e5e7f003ac855601be4f996795c658d0be5b3322b3309b41f27a902eed8d53614546a444e7366eaf84b14ecf63a0526ca6d7dc154483ffbcdba85d87c7284c3517c3862bad201fe96110726d05e1f5361168cf5c2330a62a8220ca32b502a70432bb172d25789909a4be7ae5d51a8182b96eaffb546dbd7769d18ea533ef49a73d414756df4c2e77b0f41a214454189ed639ee72d305af83bd3ae1f3edf185532825c76aa5843f0138ebe9e18b288eb26374a28046fa1a8c9fb2b34d5a832ba414f9145d128e337ef4af0482b4fdd933b02665622860d03d1d2b7480b101b834d1bd63de045a9ae43d5d764a4c3616101fdd329e83816f5dd8329e8187b28e9c142456f62761fe1476c88662dffc945c6385769bab24bb923451931ca12a7b67e67f9b4646ffb3d42a01cd242d230b06e52702efa52c7855bd1dfb38a340feb1b96fb8fc6b98ef0a7e3d5e282fb6b06729cc128d73ecbbe6bb20e524e639e872f3a0640ad75ad85481c8fe17eb322f21293268e45a4bb8563e4f674a0de907671bdff36a2918a2bd3788c9f2fbd933e9b0e14a04463c0eb79f21b310c201ad30b357b33b68ce9e59d1346c356c286677af06cd09b9d0ef7cf60d5e6f88c77aa3a09adb28c21b88b8cb363a0c03666f9d7c2981472e36e803b02ee843a654de48a64432453bb96538a080d2fd00100d2ed93a7c3036f026407b723241375654194184c6628b1087b4e2ef4570bb8baa69d462fddb30505a11d0045d0d326b0b38f5655d887a8075689fea2edcfb7f498f94d1814f9453741a786142a89cafdc367f4376cd07e80db78ed3cbb8b66b5231d189ac3b1094e8584221009d79777831760bd706a7c4b4aab7eeec54540dc4de631f12c594e4f6b37db259b7b32a6ca5c4e6978260028b156a3dec5e90ba62ce2de322fa8b4566309543eb6be3cb198bf858eee50b5c2b20b3f1b6c050ca216890e4e45c3220ef0cdd655acfd5a53e9f10a99fc74058946403619911b01f04af0da6a0d197024d580b467b0e3be16cb4584780dd8c87a4604afbe3ecb4f5876af73e64c6ab339cb6f258419808fcd09bbbadb3074006d05cf3af5c475cfbeb6d15a508cf531b27ca9ca136dcd200b653838208ede74b0ca9feaadb8d378429dcae1d326c02cd0ae8bb606c71c503cbdcd0b1c0a846bdc314fb0e6ebe4857719b452425406fe481b9f8abccc8a2c78e086e28def54c8a3eabfe6ec210e991d4419a315cc73be2ce14408cc0b5f16dca83fb340dc46912414fce7159fe6884e23eb7de764c1e4cfbf6cb780e34792161afcef6a14ec0c04a7929e9916852f8f60b35032c4be884004f0877df79aa8c6cdeae377e95c4829b00a94c3bc9bd7e1b17cc15cb87b80ffe6ae8b312ebc8c057c51d0f885871f9c280ac2b91425c866e845ea4413b862df579f88166c28c0bc5aa76a519adf8dd9d66d0715d935d63dc32ee3c144db49cafb2f832c7040ad504bcc2fca3d0a952a5974428305d828cdc2e08115747b8a7018b1e39b5b6cd8595daf3efdb9abc2c6b9b99c438b8163429a8bbea5935cdc04f0e7f13c65a4595ac744e762f4010465492aaca9f65854dface6fe37495ccb5c6f83cdf7553cf2f30a2f0d8c06a8bd48dd9a633d089cb73598693ee945c21b45a83bd5cd4aef28c4671fe14ce2f58fbe31f4d284d8593035d2cdda738532c0a651842a37fa668e012c3ebb4c49f5663a8b3276e9990fd08871866f2cd49f7bcffa48dcd429ca3b93d3f374dde42c53cb88684e806ca3cd622dc7d96fcc9df01f3faf3b76ecbca4b4d954c3961167175608a7c687d7638d008cae8c462b12b4394c36294adc02c2e80aa3e8a70423c8bb9fbad570f1f4e7c4042518b8e1b1e78515b143cbbcd58a31305d98aaa65fe0264eba70df9d8fc0a07402a28517a49ac5cd194e130f18daa44645954e038bb945d82bb4561d59523bda2d3d6b04d31e06521e5cfb3d47516104260720b7f390e0b180f0ad4127f686f3793352d1d3ff079cad1faee065b9e74749a7e67b67eb83b182d3af506cc9d1f8525d12600ff09ff7117dca4d2373a8b4ac5d63017acd62768152ac8f8b06c2e0a87dc4f18ca56549a1989bfbad3c22e4073e4b677bc0f6e1fa11aaa9d566d70e2c9723dde582b2f4b4cf2157a93c784fee8450270431b2a27e4a9ed9c9142808d008c9cb9afb3055dc3763f839ba0b55ced7eeaba113c5a535fbc8062b3a64e5e63bc8b7742a264595d3a29eed61ef599bf320479c2dafd5f44b79937f696d95ed4a108bb708ac5e3f4051aad1393d90d0f8922e4701fe4d791506da2ac475977347222000c17068b30a80eb0ba0461fbe43a9f74f428ea88eb683885baeb65e32229cd56a3d2629560c81963fb54508f74400e37839e32b33edce7e16cc4e6d3d11ba1f4a5d1a63035490311b22cc3511cbf453ac082d16b49a148e1c0f6d77908d98e148e52effce082db04e686d71c3e9ea0a6a8240f18d413be76ec96307f5987836ee04240618001cd309fb86d4d4e55b1617314413948a200cf07804857187554cd5dc8008fa634c879f3831f9f2d81f5296d6b5bab68ccce7c3aa315663c40d4c48c88c65b2b4bfef0296f1c97d0df6874aef21ef8ab734ba842df112fecf8ce8f32637344ce5982d2a13d0c87ca45e42770ca454d60e9d469ee1be3676ad0f10364b02129652050cd720a6b5261d1b2b56f76f7b0164b873dcc1535e105d584363f01bb72a6e128edd9c4ad845a7aa5ef4c40dd73c766f59b14374fb89af6e56143ed8d88578b919eb1aaf04014b1319a2a655ea19e793f89a611adaf76b363e46be6f5fe6342a0015ae594218a85f36aa759609bc9ce364da88bae1c59db42d3a7c8e2798700f1c0da22f2f888c61d1d1b694db20bf76202e9bc8ee681a2a6b5b2ed4ff30a61c1e9f3633e8060246745f91467dc5a07b8c7b0a650e4ef6f30b74a507190809b7e82829049170b88dc0cff6e3e5ae9fbce1a1ef6a9c211ea4d808bf0b699ebc5cbdfdd789ccdc2e01efc9a11b5dda7e0e7cce0c2ba8612900a901c127887e23fcff0134f4a7f103bc5deba8dd85d7199a07f10bbade267536b9a3c2f19d40341979a770dcb00a2b589d6c6a01461f4d44682037a339471b56e24f95abf1e361466068d2fdf2203597e813357a1438a7c27a1ea8fa8bee0ed6a820ceb209a3b3bf36e843e7ed13c9cbdc2407fc2d4b490bb0085358eabb1417940c5a4d27101c8f6231fa78aa9211826533218a300f894084bdf951825da353483ec3ee969be8e08759ca4e08790e86f4275f25847fe7f9fdf3d38d4a9a4cb4bedc33fe59c4a3c9c09e10e6f8216a933d6eddebbade32a88cd9e326e93896256a147ed7fd730eb4a1d5ea44c052485048cd9cf2c9f036e9cc03f517f8b6682ceccd5b02d562f7170508a717396808a1ede7c17a64948de87decb954f8f066e6412784a61e1e3d6d7fc57b8aa75cd643af60bea57fb6ff405a12e52ac1c21e3061dd2b12a9406dd957a0adf660e43d0a22d1e748bedf5d8b6f69fb0088ccbd947c9c9be3d9abd01c318e91cfb6f7989f8c0ba5984b6458dbc838c545940d3c5db1be2ae85a49466c79f766e52f8a41b902dc7604fc5c7cee438c660287ebd725605318712ac0f8785e31df7bf785ad4b680baa7380c99d502f69374727ce333004a2752e365fde31a474048f829bb7a84a308f9a1d4d947c43fbf6f8450b6a1b6cebcc80f8791eed92435da46df1f1217204e821134ae6e2458cda64b751d940c145773160686fe1deee7a8d6ad5bda3d2397e3096e45c3bba6ed729bcba3a7f12e1d9f7096ed1bb321113d4846ddeb1e096d385d10699dd0d97d15b5d272542c9734f4f2d914cc3a0364ec72649f18d25eaba2d97eadf202dbb5f9040c7f1ce3f45fbd5134a3d681e53d03c1fd0100095637b7d7e3e74db03e8d897245273381d1e4905ae5d75844cca4459690926e75adece721bb8789d4e4022503ac63ac9d2b466e6c43fa9c5b98bc080379ecdaeaa6331545cf7914caf484c6cae050a52eadd9bbe7aff6b8f14f54573fcd6ac59213097e5bdfac591f853249296eb915c64e6854b428cefe1e1aade1ab0a33be68304b04dbeffee3a41aa232eecad90ef70e9a5b1482f34714b61cfe8fe084fb7f8b90377cf34264723dbbe36f52f26045dda94e8ff6960fab0652243829fb4dfd2a1c435ae6aafc1ba8b6c7f7372d95a72e9f05b605b7dec2c5000c332a19eb06fd5d2484bdbd302f21dc148bfdfe3d2d8bdd3351b4405df61401b0b4373d0571ab89565b496e1b03a36d9deea0299ba45ded0b840245c1e8d1c8096bb990f00924c1bec923b823695c217e07803a43da8ae62a388c5dcf37baa023336923ca57bae2215f3c9345a000ffb679c1880d883ae699607018ac6753fc50d96acfa6a49771b05db76d095ad1437f1c5a7b2c6663952aa36590851893b6ffa5602164e50ab81d928b39152046d6a722b6d45ce1df7f49cce300c84763471aa0733cc598775fdde14b160c9f53e076210deaef6c89912ec46eb1082717bf880802d1c491a34bf4cf96af41c7f002cda0ede4c0f0671e6138ff1ddd214dd649b483ba12b90a5c254db37a98243b2e13c8594c71d1d5e24689c803a4a677c71839cdbdd5e7126fe5c05fe3d3ad42c27a07f000adc85a045c708f7a5cdcfde27fed6d1485513533c73300696d29eea02954ce79fd0c4418d88061461f03db2eb8c34e7c17ad5d25e37c404f2b09cd6ce875ba112349aa6392a9f4758021d37bc0f4f61e3f190bcf95abcfb548796eee2b9f4f102180e173b562955065ef53b3a349bfde51545c9b92cc25527374f7aae184845df9503b8ece53cef9502e545779a55154aac69b6736a59d2ad2a1e635e7ebba6e36998a211a81e93d1f689131e3a7081d9185737e66cd02ee453d7018aa83c8f42f34c7e332c6888e688354cb08d3e702237f3e17bb6ee835b18aa8c8666215890fcc05ff03edbd335f34982841f0c3e8ca592f5f9f26a8bd4277955078fe81d8b660eb958d3967e6e8fdc72e927acfe55fd57765949d4248ededaab2723b16ca45e9d3ed592cf62a5eaac6ad05c72eae843cb92b07c89cc01b54f919bfd2c08da13919ffb6c2f75b3a6444d7760e5d4b3ac0f938976bf54bcee821fdb1033f907daf21eae80375301eb5e18b6f3cee17bf5e86a9006299c4df79fafe59a251a8e0e1b47cace83738bc50d5759bb4fc7c3e380b0e5b6407767957e561f510d23410a034c06554f4ad40029d8a24c7a853d3946718a1d816b6814d4221ed5f1f5fd3b0bf9f9bf47018ded6e75355882447fd1e295ba2ec53511fea852ced5bf91c534676ab2f5c830b3d004d090e923cbbe5c4981fd6e9b6a4a680c694f7627e2624028df9e1755b98a6c9f69dec208d4e99cbfc6f3c5bd6079eef287c9ea5e71e5f9236fb1c6e42b1159ff8d085b6b0a8185a326de201a62ea9e7c6c5ecdf99dbe4b26a68ae6df8fd29c9ec104d42806eb71e4968fa50ea0b6a0d22097e698b00cae47bb5fd1207a44e8a5a091200f78760f36a1a2c476dd61009819a737571ac34e32c80b165cb682bd3473875d8da407e630b6998c64ec5cb7576b705c3274f3ac770ce1693e54778577d5dca29fd90d4f8e17c4b9bc98a0a8963560004b65dbce46ffc47b7d74662c2670beb54c3cbdff965ff7f62b721bc370b80bf3af92385043bcc35f17a16c80c28e06b11da55124d42d927da84b83c79a45afc6111b0dfc43282f25f0ffd5ea5bf111f6dd24f7ab664469ccfc42108f91ff2358aa39a46d8afa8c95d775f77b6ae58217d84bd63f8c36da2eacc4c413da70c49e53a177a6c663c3fc37974cc5d6125b732aac59bdd44880995724fc8b6130ec085d01b11b92dc663220e3df3c9561a8767ba55f55e0a80d43a7a06ab0375530513b0f18de56320456115d30a3af40a4e0edcbbbfcb3ad9c69094938b50b5095700f27fac981167ea75ef154c9d3387c33385d000c52a934f02a64a0da463084bd675a1ad62838c7099ce46bf087bf5e82d44df1b1b8c3e371fc1e316abbae9678c20a9c4f7b1a6c28ad9bc1990b77df1507f227d8e1c1ecd3174faf27a2b56c1bf9a5bdfbe5c5b74431c607ca8bc55758513147e5d88f9ceb60abe2a026bba7ce2319987fa856b7866a67b8da2a27f4ac7fcba1678079f5d3658599f0d599a36e766052f3b53be43c946201390b6e4ce4a9c97a53ae69f85ac3ade8f60d681fd0a1582815d94c297e9e25e5a7b0e3907c5b62f08aa36e9b069415eca83742148db9515ddb5eae4ad6fad1b685c43b2824b7cd45eeebb35375b30f5e1e22ac9927eb4d02c06e45fb43e8ca59c1e9b0a7a2d3cbbec7ab5dc4492dfb2a7a1227b27930238a83d722ebc7c312565270f477371a3b302b5c54b748cd3137239e7852fdbfc6cea8fbfca4d727508600b0819d4795c3b2cee6fc6b73d74814f3ef4901265a9cca4117fcb57b6942c8272483a6b78cd57b37913bb86342c14a766f59b78acfe76ddf6b6735f19523a634fbb0ff190e68452fe2d544f4bbf98042e085d0303fd34c5661dfd4df82f78593d86731e42b4e829645559ab13f0a327f2dafb5f4b4bcaccfcc74224ffc5f7351b27faa834dedd30ca20e9e9a51c042f9daac07cc04670d5dab41a629c474209c30343bae3a86e50efba6ce500f5a40ad4fd5b6bd2d121445efd07dbf807d2366f8e333ce558981e24084b6ba48978d272928d0ac8560dd11805d1bcb8475e5a7635a63977678f6a623a52a8738792117f81af15ab3f44fd4ac639938c2b2eb15e4cca2369f9ffa63a82ffc1fccb5afd2453931511f96192337ecffa833a5ecd57abd4113a9738ae0ec60e143ac2eaf3c7e8577f4a58f899a56b20944e06f3c65ad6807f0dbf0fe1f50453319be3d1709f2143b6132cf9afbeb6d13a1d529ee4daaf5c9e1878f7f1375d0aa002ce31eb2c278ef4ac13c7db71955e9063a2dc0df214fed647acadae32e52bd53d5c8077853d4c2b8fa95e16d3c8db29857bd756b0e7ede146b9d3ece241781c6ce27bc5eb34a1c832ead7e13f397b149d6a752de6ec9ecc244b5bf2e607c0a6b5a5240e7c42a1f82dd7c9861bc6c6d4ec8ae02aafb61daa581f69981c325cb585298c9eb50741c5c2fcd0d2ed14843e9aa7aecb56949eb18c3fa934706f44c5a2ee4011d3ccee76cd6a662ec6a3f0edbec78bec93601c3429e057502e71c44f92f0ce3e209f17573de5fc43e7c09696ce369bbfb721fc3fc717c87bcfdf563b096b525888b3fac92633730cb17928b0f8d5ca9762811bf2919b0f9f49168a143ab0cec8d2496f7bca4abef3091c0c84be1774b17c29f9541351c0247c8fdedd392e7845fd44ad89408e9bbdfae89c2a229170d36a6f76cf3ccb978ee759f6734e96fec615a7b96d8817fcca6c08bb221d7616ce69c1434c20f7f63e7dd490736f32cfbb6c5c7b8eee7dd2fc6117a40c583f9300cbc070ae5aebfc1ffe6dc64dad4029698bae7ce07e0ff4e65ada4037961bd
+#
+# # Sign XMSS_SHA2-512_W16_H10 [VERIFIED]
+# Msg = 458f4d30f1bd34d306092e2de2924c259c3bf53de876188f3b1fc0b194ef548b3a60f874b7536d0b402b8520e98c8fb722f15c653d1b4fa63df8d891cda1e747f8ab9490b5f0b1b0e9df7f92ef172a5c449d4a10911d765b14221c70f8d7a1346b60e0ab8b6dd00d2792761b74746de071c27a83338b236f592b6ae75ff672848b34a3ca5b2783dad72e7029891c24fb77972bb4a7f0481547e8ba4ca62a0c8443acbe7d815f257ebc8d51e0dbbf1ecdb7e48e31e2ceef7cbca409da63bd3b
+# PrivateKey = 040000046e4a6d6637da3878f5beac60b6c1f50d2ead77d52c307a70f4cbfae7c2a5ec538b8544760e9576adf6e18f966c07f285970b7f421424a4fc363866c5dd57eed70f9baed4191d5da899d6ce4c525ef1eceeeecc2c6daa114d8b42dbd03662f9589f6e307524e1186d3c327f84d4340a4a20d5789c1ab87be6eaec59afb366be2d00000000000000e96f19f560592d763a02fe03e4a94b3dbb6e9d1aae6e29763a33b080f5909f0c56b3e9149ebbf78a69ee7f11f11a0dd14ee7dada14ad06b0d25931ee403c3efe1fab5d67ae8fd98613204bc033ea316d396bb30503d4d8c2ae161741e2188e054db367c9c891c1dcf4084913c7f50c319960197b59bf54c88c408cead76864f777
+# Signature = 00000000000000e911b02ac54c4b3cbb8f89670e816c4f7af63be26aea2b501d11af871a6cf30ac924c4c5c226f74acbeb073b5d2c7f7207c08983ce3a6de4882f8c8bd3faf3a8941a0c3fa4b22e0537600b4947b6acb2962d50c0eae7593167052ea4cd177633897cdef7a031b1796087584ea9cf718161fd4576becbea7023855eb90fe3dfcd01c6dcd9c72c6878bea62cde73295a8db3638883063906f4d0194b6c8eaf74951d1ac559a71c1a5df4b4997d4a1a56378a7c86da704541db582f0d40d599a8aec84b2c99e53ea240212a54eced595fcbcca52238d12b165e0dace6915adcf968ec380677a9da7aa959218bdbed5d1731cb7682698499f4f687bfad8cc8cdeedb14877b54016dd1280febd5f0eb1f380990cff055691b8200a8365bb9429ba74d4ecc56318a92ee80c81cc6a17fd406220798304e98579ce8ef6074a0a62e3a8f1eb852a63f734026c5eaac8347d81db26fa42901c86ab724e08fed83bc0c4034b6ea40dfb3a1aa6801ef25d68e01a1d23fd741068c48ea3f7cbdb2574123ea74de9e68cbe2333efd4a53105ca725396862e41f65076894ec0efd45e0f05f365c736d310752755676335c14e70f6ec81d8825b5b2f3bf5e64d330aa85c90d1517866b4112c09e392492d8c26604264c18a9636183a93613c78781835054ec9c29af7d26acb1d283971d41a10521f2c8b555b2844f7c9ae729e07e48cfc2149174df4981da386f46f2f87de610019cde3b417f681773c0783b93208cc9faecd450f6e3f5fb1ff00c0ce08f6617bb4044f5eed2f025b39a832078df89d7dc74c630e6818dff049c5349226c1203cb998f657e5429b6839e0461fdf02601a6a91b1c074dae8d08c1ca1383946671ff11202d8dede4c19a6d35d5acdf2e80737b5ee4f52ba234714610ab8aaadc59e39de56fcce521a3b31efecab9b36fc53da775bfb12f226ca36bb6e23d5db6c5efbb47e6a59ca1257ed34b86690b7cdadc592fc923237160c372ca241d9c5939c3ef0728062b2c821b6f73dc18b935adb7a5b5b26409a7ed3053301f9a53198839440b20ea9122907b446c39153b0e3ba4ac77d1b670eba38787b5b87e7bd386b6ef7b4f96b7ff1ce0690483672de5389f3f88bc4eb44d53b532fa463c15b86151a17b8309ab71966881657626d00f9d7a7000e7f6b21e1e7623594c57bd6098773b8fc2b27798acf35b2d7bc8aacf729951867021f1565a5e81c9dc8f2e89c870e448b3347dff6811c37b3bfdfacfbcc942fb8d0d51c0c5bfb9c30edf8a1f8cbcd08f7e614aaa2d74dc32627366a4ecdde0a747d13bdfa4bf9ce7591db22f09114686c6a4241280bc7d73c4900e80d1e5d4e382e3e58fd7b58db3bc0a7784d82ae9e4a4acfbd1dcce551560906e1339bc08f002fec171725f82418a109c1c8d4e626d4156c586a6dca7a2002a9dfecbb283a8752597a8adddc0a3875ac61c1ec3ffe3957aede825b2fc714c30ad7461d95df0f03bf12d8e486a3cabc1b455f4a462125b7ecf9a08c2dff0fa51474d620062172f8ff17a75f5c239bd4ad4ccd8dd2f63c80250817f84d4d55025cbb9ffc8fba279043b4ff665852d1b465a9a13bd0f4c4b11ee0a26f330de4f9f6381724a4799232cd8ae52ce9add0d5546b755b120ea31e17738dd7289d747d9f01efd163a20a62548a21bdb45ccdff9c66a08a636d70a220022cc80df1a3b62e397dd0e246433aeb5137df4c7679f53bd4219fb2145ed5b3aa2439f1bfef229bd73da722658761731fd15c793865d2ca84428ca3a62b653db45d56f4e13ea14a2f8d694273362e0a4a256902e26e04b81268a6c0019913e5eb602b0c01b62c981ea40d08b511ead9d95d01456ffbe851d044e308f13b4e3149756e0a59b5b1e6e7f6aced239cdb400aabdda8fa3d386391c9e32cfb4e28f1568683574b88d9ee4401de0241bca99d096fe48f7285053e6b0d01809752810553564c3e864547ebba9ee28906c07c9bfb7ad42f7e3572484b09299c0ea7d38eecbd5cf34d5b459a083192670cfc2130073af56e3cfb79c4441b02d40643b971b702dda1c33afc73c32b548feecb96dc1965aaa4344d2430370dbd383fcb8bdbe6042d1acdfbe486871fb06c4eef0b9b0a65a6d853efc857c4cd08562cf9448ec9cae460de15fd810cb2591d713844282dc7140e0781c4193693b0920426a94b87c011cc943c417b52e0862916c0f6cde68f9b1c9b8028b6ba5d59e74dd5c548330a99c3955b955bb9250a3eaf2c0de9afa240a46c947c3e9469085de51a0284fc942ee227dee85451721805db28521eeb370fe3eb361c0f21871293e7f656711e368be8e5960f89b57b8a4698e6647d9acd2b7b15ab5d545efb3b1e49b3c300820eaf2eabb46f9353a427418c7a2dd993b82ad7cf3d718b1b63ae750dacb1989f175c1d4ba2e036d6d1521885c2ef2483b339e782b3558179ee0ec23747741d7e2df416a570780ffefd975ce31741062e2831f05ea11fe7aa33876c7a0e47462f044f32bb0b5a280a157fdbd69a97593368d746c45dc5e9dbff026434abe289ff23e6a191934b65a658ac6ec9534d6475ac46e23d1f7aed0f0a720e91ec3d5d5433bfaafd1e7daab69ba208ef12ad0d1fc171549b4675b1aa83839698cec02f2fdc1ab9fbd7d74ecba43c65ce95fda376db0083b49d2f75660e5ccd4849a29a3eb1372509bff260db273eb35783c672c9e104d394f7537fe31fb38a648a983b2e156b8030d8b9469c385f669c94337e9d04ea7bd6418ba0f2003f27b7bc891df14e4b0ffe5fd09fd21a370b6300619d0d1876bed4a04c064c10aee05f3e2eef95a9a69eaefedde6578ea415e87c38d6d6d4a19c65785b6ee49dc1c541f5f18110b87baede45d6b1f3456516fa048f977228a230039bd0b960dfbf19912e11d8da699b4287264cec909d5e5260390288fa3c63dc97c8edd97f603bc29fac096ae9e12ac34602b303374e6a49335919fce12d369bfc7c01e9c370e9f01fa90ca69a93ae658c5160efa9b4ab5aef09aa06e6e39d8dbb27da9d572767d2bdf4432fd93c5d709a2a11fdbef51e25cba2e7c43152f22a46ac9b7067b6e85f113fa353d9cc775690da456bbd3974a75a7cfe51a338b97049129360c6f66c32ccd1a0419f545a61c1476f8115e29a1beed5292ec3973f80a349a9f6ac8a14c48ea46fccceae689bd343822a8826a11c215276c0401ee3ef1ba85e46852042a6f423802beba300b280ef6b4255601bf36f08b5e40c8ba39ad35865f5e042c0cd8aba36e7de4744a183a9af5029c52e0c8062e9c7a67a355906b879a6c2a3718104a47093f9cc972db4fe1a2cdc3a5685a9b0ad9e57e528a6f1c563db53a89b5508e91d4894a5f24d3cff90d8ba8fcebdca9e0acbb86e630d00b3ef53c3cefea0b1af6ce7133995dd96bdfeb10625a3647a20f57cfb4b781bd8deee1f98626a91d9569f86284083d04f86100d9e4ff4f38187db8671b2004f7d6f2fa1f165fdd7f36e839d45de519b36b95499e6772208296ca18aec725a94dadee275dfd835e8dd30327a68988e198c05744db4385f28893b3c1579e9b0ee8bd896be452f4d43497e66a9546a20250ff46f43b002e61cc64fb474e2aa338ac5b51114f48acfa7ccc963a2c26e260370e324bc04c1b1ad568c0f5a9df0703d6ad2141eaabdd2859e23a08646809f3cf94040bc42d3a0856d9e9939fb7319cf761cddb6570ec36d7157d2f2abf777697f39c42bbd17d33049bd7d1054b3f3c119933c6ed22ccfaa306a647acae6dc362dd6e94f7dc67e5ec16219e1ba92be21dd417871847d07300e63df90586708f7cf692251aa39d98792250b3fbc4b9c22cc3bfd008535d9efcc198ad9de30ad392ac7029a17ffcbdcf90d7616aa77c706b2536e1a9c0082c2c64095e862c441296b103f72b7aa40e119acc5c01814c11a16e0ab239c6b68648a789c40cdcab3bb6280fc9dcd65c1999caeb83c860e8b4219e4bcae4779578aa714ab54f9a0114faebb9c025998b48af7097f293f56986332947062a3381b0fe3f93b0908bcda36738b70c47ec30444b7c15d0374e60452e5a52599eb502cc125e94bad5218efd09ba1e1f5042342217e16faf0689481594e4bbfaf4bd63f228efa8bd11850bb1db143599de0d1725b21e5b83a76221dd0702ce08db15e1906e5dfdb6abe190fd187923f71bdcbae67656fc84bec2de59aa226fc6502a0912d89073ff1d30a7f1c2aff56ae10b7b4ca3ccb22cc6b5ab2e34a37f6b8540a45c60bf3350184ce41e6d48473aa4b99f71f44981b88154698bee65a377d591b33261fcbddbbaad09f667561a494845993f448f3bcbb08e196fc4d1559bcc444b72f8e80ac6f1dec3495f91a99a65525c2b1e3b17f0f8a5e8cfe064cd6d00d838385c95e347e0c5c38e382801763bca3156fab50ec3f09d70b544b8476cde43facb4ff19ddfbc3ec098780cff32826886d6a6e607f6cf291a0e947dd7d4cb79687ce76945f709819ad50d3b854e23bfa6c6e4484be49f64383b734526bef42a6736cdd833fa8d96985fb63b0359b7492b53f353000e2a422de85bd06dec599295f42a1cd31031b859e948f4ab94e44998ce85f1dfa487f223512a2bcc220c4f88090473b329b3bee662d106bebfbc21ff6450b119ca95e52c00a2770d6c56bce664ab5fefacc4c3b32b0bdd3477bfd8583be77e51ed5b9242af3c2b8fc04d478cdccfe2c6dc35d34b6dd3c8b749b46b6fdaa3f6dc0f129b55a346155e7954a35486edb3e4de3ad330f0cdd0fe4e4d9caff61239e1a775324a03c591eb2fb0a097cda1bda7aa5f00ad11fc42216dd78a0d7e2fd6b9d6543a02afcf9ae26a2d96c69cf06df33088beb56304357f1861349761d459601352a7563bc9d3b9e908215a9d85d3e96769ed6876eeda5a747b1da3582113fbeb6f61feb292357dafad225c4f9d4ea0b039c7603546bca5853be142372bcf1ec46bbebc50ef0d7dc2e46f089c4b00d48ec2b74227b20237e1249a6f5280415bbf105aed6695587d794566411c5c2a3541ef3fbffa8c2613ba794fe311ae9156a2c020dc4b91356633ce917b960b5255aec36f83734382ea89aea7426a668d6bf6af91094bb842979b5ee02a7b730f449480b4aeea419e9686a8d30d1f537ff77f1e916cc8642f0a71dc7e535e750a069531f30ec97b370a98433486ba1b74ee7713b88cf52d2216eccfd07716287724c9f665b3322e9dd11dd5ada7668d2a7b0214933ffc198cb033dcc0fc4c6166acb2a1269da891598172a1b6652d23a605c12745ff1637233bd7f7a4acb9026b58783281485e90da51a19b04d80504efc11bb13b76d64c52264f46ba74578166aa7f5d121d31e356fda41ee32753e3243b5be0ac01e86bee9663157a25ae160941a058a8d35705734368f7c2995144a3817634b82c2b96fe66080d31b93b35cb17924b293e6f3629f39a08ea1d36df97a6464da0bc83cf25596fe9c101c91a9eb2a530b0667a96cf6786839855d02c603939e4d7fab01c90de4bccb184073b2f96bd0b4a2fc6278a61a4c9bb581fbfe9b21601c098ad6ef4acd3e11fa6d2da8db6d910facfb278ffe3b4fe5b61ee5c780261f606ced2ddd8fb530c368e584fbab3bd3dda5846c63094b2e26a086d5aa2e66bb434459ce1819f96b73af15bcdc9e50b74568af1b7990a038c4cf26fb112635823245ab81f504d7dfab160c555763bb79aa335f087443491f3310e2b1b4eff8179a41d3f3250fac8320024bd8d8d20011e781db30cc09c55c1259aca3159a11e058bba27aa31c37c43ff9fddddcb103d185287617e02f2bbc34c18b242048709fee111735cf3afed460e04df94c2176d2343fcbef0606cf78bad866776163b828395f269657d2ecd6de24462cf8632a6a774394aab5ab35024d5993625036dd2a2a277ec3de117c8aa2cf986c13727b5098e9ebea6076f14328a5a40eab17ed80d354df6361554e6db4bf3e9b6588f1b6821d9f13092ae3ec6d0b93cde18bb174a1f02b8b87824220d8721240a7a31075a1fdf1b7c36eb3b8e22ec5fc6abc73e88315f1562835373ea763d54bdcdcde6c250e64d221b80aeff93688653233fd0bfc19299e7853b2b739dad4530a9ac2e3d0bdd5101cf383bd33fd077c40002d3c3572fc0f246db9d8c00072e3dcfb44538224e0a31eda35482f55d247d9adcb40eb8a93ef600cda05c7d6eea5b38321ee95ae33d24f8ddf672f6bbd80017841ba4e2bdca817a1a93f15e9a0d8e2e856d47512ef74995374d1ac74c76654b260067eb499f98fe7c9159cdc8c485b03e157306d6a76ef874570f3694eef32180ad9024af67bc2670f3e2492b87bf49b3b56aaf8a5a04c62e1dfc1c06355afcb96ca4561c88f561ec4d0ee7ee59ff986da49ed1b434c1049043f8b53007559fffa82437ffe74b52d5d82051e686f46e89ef1eb19cd22d31076d3c409e58e5bd5fc83bf4db0a7dae90f488ec10edf5a01cd40400ca48197150a4d4f1c6d1d40db683c037d4eb899210b75e2572ad29283f14ff95a98ee76ce57deb6487e4cf02515d294bf3837ae0235974148677e826c418655ea74e65fd78fb308a7da205fb5a126bf6787bd2b8050eebe8a770232dc9ce3cc6b4a8abef3848cb33f5fef83c9eb4ea5e52c11aa26b75276e2af8ba78f06e068d729bf7ea099e2e560f053c4a2f5a4d24c8d402304cf5aeddfccbecc288008e149d8604b9e83f621bf0043c2792efe9463e61155f6ffab9d5415b16fa792c54f1e4a3c6ee653c245b05693eb156fd221031dee983365105dfa8a6c4a6da41677cb8c6f462ee2b9a3f4b28db6171b0a75c21930e62ae74bb7b02ab9b6299802320c435cc0a1183f67cb3d8f39cc50c8fa754a93589a2cfe8c52f6b8030fcb37d38ab44c6efbf96f6103aca52a131032bbb06d1f8c8acd7133d776f6fc241f176b810598f705b7791fb1ef0697a2be2d44c87d83e3077b8462f9cfe3eff12189a944444ce4f6f990664cbad63b66ef3afd42bfcb6c3644856ac25774a5887e6c5c6095072038a199abdc4f7e48b712d0dcf5fad2c063d77cccd0334c828227b1c84e8d398a57d58c732e5ac54669d98d88363dceaec0240f4e8c409aa48f6c2cfc74d97da274d94bf4abf14e2fa65e96ace73f83ddedeed835c020e6a2fc70dfb489efdb34cf234b8337f8d7c056b4947978fb929d94c5219894fc1827e3a911af2c50178859b546c4c23dbf900ba2d7f90378d27820adac4061e026991aa1cf493cffee21cc1fbd73a6a4ff5792eba491f527f1364eb8bb454fc65bfc594bc9df9139bbaf87078ab45c7b722fc03136e793d9956a3edb71a90404028731284ddc18d079ec6f17d1777f2d8a58f07aa20c552ef1af25dd96d147bffcc7d5b810acc044529805b7f5e8b650c30d06f7b3dc022057286e90d28db14091bf036a4a7b3ca03d4c15716965b6be4c9483d347e31481c12346aa656681ab55bce2a68d78c39f42d96f43aa725963f2b10c2d88ca93ef3c9cdcba0b9a37417e2d06e6b82756ae1afb8294faa5d6ea1bea531661873710c23b45ae697154ce45185c7e5c89f74a0161620b0bb6b79c77f4c2d4ce5dffe39850e3361ee02acb9bae127ab7699f5c2e63c3047c30cba004860f03889ea378fa2f0ed481f1c3de681e3ca1a75bf46e212fc13a9838967263b283a7aaeb822859df5601f5a9c5fa85cb973ddde64078b76ef9af231497e810ad919d4a393aa377448f4d0182f38ac5723eabbf57bd77ba467946af83bb537703bcac6129ed025dee1d329c8f6027a274dfa6b286e592578fac97927361e33e54007d31fecf632f00402b48a124641e0edb48ad00c313c991da58d75aa83d30fe5ff1e23b1a8f4cab636b0d2e702b5e2a528a7ed181e74ae46d7acd3b52e05dd5c47da617040c950ecc4003e99db304e8557104f9c708db847a876beab07e51eaccdcb696deaf228802c4bcd7cb8a1a646dd19f0ef22e6c032880cd8f4b8c89c5289eca27b41f686c24a90f0ad92006febe932ec550ad706aea5aa872d20cabd22bf70c871cb12247b9a82f0490df9683ec72c2dd91dce433905bc38e2e79738330522e7b9a9dcf59c000d77503f347480bad1738e1e3fd855a12f08e8a17b5ee9ea2a17ded76f3d22287ba2e9e06a5b7402c46dc7c2cc2677499af64f23ea6697d0c8e3b0f39ceba58d25f7effa157d7be05b8652246384bc011e7ba41a9cf52230dc30627bc283adb5e14033b330ce312b3c38db84700bbc8b23cfa5810742e7780b928d4b189d6ceb54c749e8b92ac4196665de5415c5d68a51aeabf5fefd9af47ecebefe9e86000d6a738936cc085d6051528c195138bfea0b1035db80171af05c8f85399cbb7ec64643a9a5c15ee1a77c618218c1ee2ae7f81c215b725d341afa229a48942c7737cb716704387b3dbbd3b909f18221b77a9fc84b45c3fcf249811dd7b902a9b79cbbf0c9f14fc5f9bcf2632ffd16a361b9641c766471c0d1b358b58e20e4eea27562ea6d083979fcc2e7298cc83f73864100e8ccbe90b0612cf13973553ce6225facdee75f8423f5500dee821ca24761fd611ebe4429db828ac5d110cf5f7bbedc1f4db430dae6735a89977d68336d814967e98fd6a165ced3c8c1946fd9621a2a524dfad912ebe17c2edeef1715eb6e3c052e7f9ae2504dc93ddb80acaa6868a1fa470faca27f804041dfd3d1a3f033d8edcb23292cd95d1d831b993e859d68cd591587d14d779f71d1deec11d31e78155806d195cd93c0aaa96801152f60f60f83ceff61fb9b204139a7a4d2017731f1fa365be06ead041ffe4fda8a4dd78d83fd65bfcbb5096ae5c05ba1cfa42b6a576d4e89d8bd8b7ecd733f727c115b1c22ab78b77debe248a57c66077d624cd0c9740320534354b50b98e36c7bf34da4d5974616284fbdffda914f63777c8a798755a8de25cd1ccea0843e3caaa04475057a5089b95045bf060e7e9a31e9da715b75231c12b5f8e3c0ea5ec36da1d7f5acc73879cf17bbd5841969cfcf267f80360ed47875426d85460ae1575f343e0b6bed98c4522eddc1a68f3f4e5b0937e4043a217d29b8822f916d40904187d83886b0b59c2c8a3ecdc004cf3d0b42792b4c45d4a4f2bfabffc4e14699cb9785d8810597e372e6fde001afc598916313b9c65407e6b6b6350503def780664e6addd843492399ff0458984adab2cbdd899c8425ba0c87e257c62380ec50b51ce698c46653a11bb482aef1f278d3f93543107ffd293dcd7c7c754bece113f572f667dd6dfacd18b765110819342bc7108d3b3a4aa6a69f066370af22816901a4f987a70623e354c1fb911b3f75a48a98a65621175606743dd8a55fd2f91c0f6bf586aa2b3404443e55c2eedd3cccd74209eceb37da7f03a9b5b8a0953238e446f1d9586c778e36a45c7aa884357b6e5fabf20d0717a0de8cbae0465a747f693425f830ede29786486502dd0cbc0ae7685782c970230c5ce9565973b78a477b75ccfd13930af64d6c6a12bb8349f6a10f87744e2ba12cf05fa1e3f089d488452cd517cf790de663ded8d79e6eb7adf5e113e731b165ef9fa178807f6772b5278ae8d27961127a49174b1f2a2e86cdcbf4006a7c122b0b351af3dcc13a48bfdb6e5deae234bfbf6d96abc0523cb52f060f5edc1e5cf5756a067cca0c5c464156f3388a31e3d4ffdc72de75bcdfbba3f64692db5eca64bc8f24a97b9aea863b10851c5cb21a768e5abb1c571e80231fd6e5f65004dc0e12a97d7c88c561403bad19daffa1734fe20512cd2fded3e70fd3c65a2afc6141839248b05ca3b1b1267eafa090617c374d7b823e0ba7bb491614bb41a84479a1ff999b4cc0d4114d61b292724e63c378a9f27e5e878ba172240efe4089618d65c5f4f34c99d11b2710636cfd1ac938c8c5685cd008c591f42cfb22dd85c4dfdad281f1749f9cb7d27233e6bdc37121f7cd8597d5ba12474512ddd6cfabdc77d3b03dd82a02e256c88099fb51993ef1ec00b70d9dcd64990695c84cc1b649e86762010704653f0c6f498c965caa2266175c56874299dc83b5f43da59fbd2092867e2fd10eefc72cf063e2eee53c8dd043a09a19263eaccf123f2a4090cf4f5b287c049bf3edc2e553d9d1b4bb314b7810104cddaad4dc44c16dfd1109392638a9046d5a679ca0405ee1c22bc3b6c68eb4b915b05661007a5d356babc922f58a0ef027813be7bb79f8e1f42e869faf659cceffa7c847fdb3ae02a9bd89c76bd92363a287ccdd266e7da46e36aeaefade2d03e5eab8af755bbf4e4e4d206c874dbfaa558b8a5d7f34d0f57bc65decc1cdcc5a62a05bc0a596bfaa2321e1414777ad366ece6790c392796e430793f4f82aa43d022f24698b5b684e38a9d7440866cdf7fcfdfaf83ca9a555c659073a363ab0cfcbdc13361ea79f93ce08da7465d3fad32b8ac0a70d437dcd5a1e1212a1a946b9bbe72f3cebbec58c1fe1595ba0dda8babff50e6d8c0928490b28ff4bb2dc15a39ef617c2cf4ecd6d39b67af98ddfc98c121ce89fac795f00c20ca6463987e011a41153c40cbb51a9b03842ff774be0b7eb63ae2bc3c641a748b80eb52422aa26299f1d94f9db51f26f8c2484fa0d823b88261bc131c8be17bca2603fecb6d8d364c87b0269855257a37235f1ff93442a3106bf6d8dfaf42e93109df3464618aac53b0b8317682c29cd71206fb3ed9c3f8223a332a528ed16b81bc6a0d51c08c1a72a97e6629237f41bdbd8388c45f25cccdd1a5f139962b432234188ff02e781cd2838eb9ea31cb280c978a550eb524b89fd23652ab6a86666d68d4e705865b5e3c1dceadd3c44862bc037dc6656eda05cf0122333437407756337215ffb10920731fca8922baae1c72519488466e0d4dfc4ec946c3a2507522a9befa5d7872f5cea889336a209ccf308ddc9863e6f979412e526498163eb7eac429afef79d4f157ec03d11770dc20b106a2c7c3c17ad6b6cb976215b1788783f80447a50ab3855e4b7b271b00d29ca965fb0acf20501ecd5bf9eb319d2515f5e4398f6b803d25cf8f8b8102a9c9ddbf281b60e75a555130c6a0dddef9dbb681c85623de3c995fbc1ce77f90a6a720b4d5e01aec7a745d808a1c8e5e12d6e8b55b6bedd48954cfb642c12506acea06033d5a4889534b028e6e594e25d1377371233d3bde71c8901e7027cf34134e9d9958cbb65d0b401341d41acf677da26d6e586ccb437dcfec469970a687eaf117d777790789a4304495040bfb6b965332e87c2fbfd18ecac6ee22928f95e2af447b46c27c1aceb554e174dd5732b1438f090b5e721dd223b73b4ca9ace83d3250bb19cf1eddd5bf1d86e8a69a9fb6c4fd03f8b2b3c6df29701a9961a046a01f67654e2e16027f1670b5df9b5216339672d1742e6f907463772139b52c3810ff1f6ab40d02e3efbd9e3a9501f4fe3a1354fe5119697ab55d31840faac38686329a95374cf33a8753491e9774539054cfbe203d366e986cd21644e0801044347a1227462c39dd937b339fb27836a9f7cb383b5fdbfce93bb887152bd72b96577262267216d41b3fe09cc8ec386bd480e0c889377356e7ff59880df34d45f426188eca237ad2dd52e914283f298bf66dc718ab71d55226ef2b918502b47f5b521b4db005be9f63fa3c5da3015069b8be1d53ea3fa7b637c811ef9d8bd9b669fbdb37023d1881e124321f97435da9806ff075a470f9d83b524a0b1ca59da3d9e1ba4a6058279983d57f56dcfcbc8130f4384b53ab54afedee8efa9e225003850ba1209018dd928ac25c5c5b3c6fabc3e49c4f7d7d02fb02504bbd006c1e268e193d287ff9c210f48cc1edd6ca133ad4b03014d3ebe0af73aba5baa7891ee659aca93260e0755c115a394224b22b0a36e51d014101bf0d6610641f650dd3d11710af8d43f4329876ab8e0db6f2f3657238794b0850648279114af52454823339faec448edf0fa371659a8db7742a61461cf96264738ac719bef0ac530f4331efa20ca9dfbfba2a26b6e92c20191b48f993674028cf8a906a0cfeef4f8a689e1ff8e8ea185dd79547e9a90eb53b99c7c8a959eddfc358732dc4838eb1af1149f51581c8b9b7ef5f0dcbec3df231bf626c54597c93e8daba5607c70e5fea90098ddf3b124cc3deb1a38ea4c6000268e4198eedd1776549c85f857fc2841a1da8070dfa1aa8b1682a4a85462bbf94570c1a7cb240467283acecee2cf278f04c2b378241cb93038f52f96b0bd50ec53574038a3e94aeb2f59cf5cf0ba3607102f43f2e2105b4f3f6c84db66c4b4d72e38d489c0de9add996ba5cd9d67bda0f7f77f2db1288878ba21ede51cff61933dfb36dbd309a193ba4f42fcadd22eff3b67a780b37a1c42bb8ec017178a4af140998cda1d19daeaf72228e0423ab09727018b303bfea082b4dd6cb273d46c1416968fa85a4364eae48ab5a5565bc4404d3dfec74115181261443c95f64308849bc0c8176ece4ff4269a68a73e519f7a28a014780f31eef1923ab8462e88b2b6a0867a6bfe02def8c9c6332ce86c4f268aa0bcf238b60c802453e7ba5548a44102332380789736619a4ae399d998cb49fd6a81bfb9a57c96c138e4c537f593150b98840b45f0e6cdb3541e0691a805c1eff0203a14565d255f29d2c2c266f75df8a8c705404313c56615231f9dce6f7b89ec4f05a5f7131135ce27a2c8f8ae12ae642037143eabeb4b66cad4a70e14315dff066c5c8edc56902c4f3182baee957067f8dc640150fd6f982a2b0ec1db243b6abe5400ffe98ac190fd16d2389eb30090cd11bdb84155281fbc3574c701004c76f11be4b2276da3aeef8a65a0b627cf0cca01
+#
+# # Sign XMSS_SHA2-512_W16_H10 [VERIFIED]
+# Msg = ebcc54f09738db1c5a24e315a7280d4cd8c266ee1024d3b32851fc49b7ce05c2a43eca9bb7d584635eb2ed538d86d773f4bcb87a3df6f595bd1e5b4c8b03a70c7bdea8f441058b133dda4f409f099a9b68b6dfe96de5ac6869ad5aaa9cc8630201c8df17f75202ee3069e5f912a88e0539fb0b04d487949a1f5a4ae192e18c24f1fe24dce1ba1c00c3bcf703a547f336594f87d1d2ca98a9096d4da24725601b1752e7d7f1986d9ea7ebc4caf50169065d05997ea6dc1e6937c1d7aad19682b10b56f8ac4c148122f9e906ac21aa0c3237b41f362cd869e9d25216c466f4d2a885296bcae2f02ea3
+# PrivateKey = 04000004d18dcc8dd98a4940f455d2d52281632ab0ddaa1d46ec87917561042e6799492918c994b16a70bf6bcb2dd5fafea015be5fb24697fce355c726b5c71659cecaa65d5dee64b8382775b220032e6c992e3f5cbc3b7513809526457cfeabf3b9f3d5adef4a99e5c47c52ee63736f6d68b0addd4b45c9b47ce25c8c1612bb95962e3b00000000000000cd1202cb6d6097d86a0004eb6e133787f58bd3234f26f33e744942aa34c57b16b6b698a611f8802733f8f1af7cdaf6fc8510b8fc6f15958b3f31d3d8d394412fdf7130aed86eb8b301094b2992f28de77beecf0eeb689f177718d72311f5c0ddb8e81a292210086a11c1ee9f8b75e4c031473a45bb45e6445b97ff7f13507bc950
+# Signature = 00000000000000cdf9cd7c76cdae54ff5776cf6cd96276ee646a8b7b722cfcc3b6c2c1f94f83c28bf5281a8804528c58afe436bd2e9bc0743eababcb0cd2f27e9600e333ace5195cd5c566ad0bbcfb3b5698beb3a45fe4c5674c91be6e4e44bf3c0487d7e32579e978c5ac33f71c40b4e4173e31b7e740ced94e2f7d8ffffc02666d0ea61257519faae42f981925ea3b55813538b56b13aa88b132b92398cd563092f8b2766859ca30bd87c912154cdf570026d4b24aa7b5acfcff2271cc55f82d1ef456da55a80960cb1591219ee5766eba3e1ed4ec569a884bddb8e7edbfd96eb53d3e3c4f4903c32891dc7cb92544069ef641143262791889f463e93d89d1f249796fd2311ccdb7957782059fee04b4dc3c5c5be9118c74ebc0dfd9e430d0cdce53a9cc2912504037eb06f4f0272f4e6ecb0c5e2387fa0a6668cb587fe563d2063324ad84db8e65d5dd37c304ac29d49c62435cb570aba57baea34e7c9e8385569b71dd670e2b2f76949bef82464602f0b47e5f94239552ab4ea0cab79345683ec83763468bd10a09b9689752ffea94e56d2c53be074a377690caf68b580a7d93eeba293e83e859b879f074457b05f5c8b79dbf78a94cf0ceb4b3f24bf699adafd1ed871fef51688feb618abb9e4b3b2b6c99730c23612cb119f3b877690ffabee2109e3900d7e25ff5239aff0d9eca0c52b42fc0f0edbafe4619925d48a209e0d44453dd9205c5b31d20002ab7531212ac43585762d005689fcb5d7c5f829ddbf15c1a9501e5e3504f1cd8ec5da77b2005750b15653c3c8735973018add425b03ec0904d6205c48a9e4f87dd3ac55301849eb3640fae2b7a56c1e6e24c9facc6789038a6c30bde1627e8bfd504c10f979038c5a791da900e52da2dbcc902d79c78fd52cbc844b5f3daf7f5ad243153784e6da2730771ce8b438f0cb22d4a46fbaff3a892fe26c43dbdf5a22f17e5f0020fd360252f9f9bdbf11c0101be79371f686dc6e9781adf3b631ac3c3b53d15c43f4323d668ad748190aff45ea436ff6226aa97c853f994ce480b582ce05129730ce079a8ad2f04ed14e3bdcf40b4e4af92c14d8bd58008a97a7cbeb543b635174976621a8c32908bf3e9db3792d2d87f55699c43c9e0d2616c8d51a43fd35734d7847bdf2467dfa31108e476b8cb39e4a6dd38b2b1151d0d5f69d21770653737540fa94b0d45d102b5d42af7c4c0d0a55d74add9287982e7108def6a83a4c697a163cf8aed667f8f664a881e5a255abb452fa0fdf8cd4d2a3a55e7177e4ddfcd4d821343763d96470cace9628d650ee356b8554f803c21c83794c1fa7066d1ee32be2d5a232000abbb24df08403485c9b3f851cba3e2b58f03541d60c1af80f8453f25f70f55dd720becb4dc18ba821779413f89c0ebc2fd6bc2e30751b912d80af53b653acf7590fd567d438d471166e09793a5ed6a77f8b1e5de58681d72da9cf35a34fef3dd296683ca125b3f3ff6406f544543973601e07fbbd435f413a784327511e8f06e4234eb361281f18bf6ced8c2ce961743183adb4b279e05e413213fb80ef11cee93170776c58a91227f9b6d7cdfe1335de95e2788be49d55a2848b5f8e2b32f85eb3ed775be2526392deb7ee35ae7c51d26b1e246b0a149bcee99133be93fed2ffaf982d49fef82571d85aba6ee24480e7058885cc6232c92d6922a7bbd09ebfa9457876d4800b8ac86598c535dcf90801271010e048f1ad96a027e10d27d769fc1afa5d292fd3078d59c675d912eb3f37ad963148517ac8dec5c753f56d71d779f5774ecb1a730f4e0ae46d0740a92433de0711d53ccea7b561fb7a57754afb388c51c19986893cd71a58c96bbb0155130270f299b8d6237038b75f88dc6e7bc281042edb76daae36202896ebb8573d5fa6065f48e117264d0411b2d50136f1aebaa23d28c6cd97b640991a11103bfa5bf17abee2c19d105bf8ff1aa97b95a1e396814523d3f223c07b002d708b971d081b95be594515d462a098725e3928c545faa39a73810854b4801f20276365649f35c208e7d8a0a650090ec9029528e813bbbc4fcd9f5f0e86c649364619d717a0ab779750d985853cd375f39cdd5e6a7f51d36b747d6af746fc352b0bb462ccd99252768c533eb1011bb3b0213fd72b9210da8494d165674ba398d6c1559234943d4776da019dc49ec97517a59c4869fc4d577d2862a83b169e615bcd4bb6695be416334af499899bcbc4e10a96d57848926c7f990ed507c53acc083c6ce49fb45c737bd6b8e4ae66c1b49d70616b4e6b6878b336d9d502789cfb1463e01d471c1ac72973e4c05bcefceb1e5f1f1737a2f76d0a31def935a6d9f3d3c8023671510ccd0b918ae49a92956c0cc0297a78680a2e58a98e4ed7d9e62f7c62cc27b50ef8d370d199f7e5edd87bfb69e2e64023c9bf10805ab730df8325b1d5ad969b2191283dd0705b9118ba13ad9fd84e057adfe1e7636a08078cc6a6ef1210064bf0f9358efcc8af7a61c0fa599339e13a6df798be29c6b41ddcc2f2fa346912cdf18f33e28b5aff239c5ed01c4dc5a37ad9b029875e554a9ca945bba387ac949c122b384bac7656d5ac04c66a9ceeec2ff28d08560ec598c5b4458b79b461df4a9f49da50d5f7b088b27124d864288e6d77d29878e9164aad27cd271881ebc11260a6989fdff95fd732a7219408a002b57abc2e912cd19d99fd35d3a6627c1dc3de0a46d396f841f5a5653d2daf7c357a43d29afadd91d7afcd6e5e9ed116867845cc3326e140533b69fa715416ecca749c7046450114e084aeffc6ab5dd72fc347801ee571c59dd68a54d6149bbdb1a568e7852ca26d792300cdea8d97f6c3b7ba0e395aefd1e7db15e355a384a315b77826bbf59512be978f70db1589865436b737ec4d61cfb92d8cf3532dc012644fd94c2568daec76caa00c5ccdcdf9dcf5638bf2200ebdc20dbeb3d30e1f7e2117e1c3acda1f4f6f21df13c1b8feb3ec3f76765705e3fa8b758cdf16a51157a892d1b276e5a8efa0999869d684bf1f6a996a3cb6ec82cb95b08affcdd112df8598919c4a1400023b7877126c916dca1feaadcaff8d4594a78306d5cec3e6cf2a0ff1e99c053c830fc0fc5ea2993dad43ebb3afa382be573f3b902ab08560a64254cef57b55b96b0d0409291ee21a8d193cc35d418e7685b464df82dffa4ded6dd003cb3844f071c23de5a47bd833f7b9697b6e329314593a82f8a744ce2ce98d71cade5f35da2abb74a118235039f9b9bb58abe70c54fd3925421643faf375440d1f293a658507f05ea5a89c58257eecf04f0b50e90268c51904bb749aa5455cc62b9c0a28dd5adbcd9a3b0d94b84210fb637878be88c010fa73fcd1a92291ef8c6d59cbafa8c2bc25f3b2b6ee857e297f243972af0379a13435a0646f7956d771f930821706388a8366b55a4dc0e95e70a00d858743b9a908f74a482ef20061f199c4b918c6d9c5f5a2b901b6f53ba1672dd39b44bae28e4dfa024c83b16b8f8ca86264c2effa4aec9886f5ede4c2049a5d86436dcf8cd3a89c62d842111762b6ae0e54bc7ca27d2d33db37f23f9d0094ea9354a701a876e469451a5eec377477e90f07eccd1f8d255d93b81260058007a957d5eb977ca0dadf4be94ea02cfdabf3303e1c114885091a8b9b647106935cf0ddd129c7b2f307da12f44db07f0ff12ccdc5114628b178cb50ee520f56a05d2e3c57d202cd4efdf8887012e5ed5a76a11d21577df5becd0643d1ca82c6eff0c1718875bbf51e9d11b76d4b7f04551cc1931d2c76e52b06d3677ac3566ece11d543ac48aa75973d0cc01c4eab8cfcdf7a5992adf97400280531a2651534b2c7924d8743b7493ae0e317c7b43a9f2b8866200645e2f08f7bdb9027a4079f4bee5b24ada9b1bde6fb91fedd9cba3f5008cc1e2b9dc87d86522d637cb82f24eef7145f2e21378f0eaea14074ed559a7d81e442d09b7e1068e2e30cfdfc1aee3ff3c21b1f32e0fe5793273929a35d668e0de95b521ed8a75e1f71a9d8f276ebc5bbb912a8a6d1e81cf7d00d91c5c250b31308a996e4ebd4f2c61859dd5c0297d894c9994c166ad488e48ed2c752235b62802cd2a18e94fc222de4befba39bef14270be1784aaa61bc1ade7676d4d983bfdf9539904514a3c0104cf153129d107bd7bce8c5e5ff17af462d3f7b40b70ee2392825d917c341c2a431120720ceef564f0795bcfb2ff512a7c7350802a686f27553ad9100b5d758bcdd8c1c729e79c5850bf7c35dfe414433af5ba6bc91880a8f9d106b798ca105d27b6d9750b8b42c7cd11f7a9f728637e9d9dbc9298e4fb26ccbb28c331edaf2f3c69c7d05f33e031d0e3a26a8f07cbadf7677a5905e8c35590f576a516d2899390b0e7e597325570ba6822aa241dbe20e18d06722010f85c739e595369c3f7c3decf86d1d94b787f3ae1dbdfd0e0e6c1f2a793a8915cbf38d5c338d4c1423762e01fb32dc3304b90c20d464a669fafc16f5794c5f307b03684170a8331785b94fba4d9f8736e5c8dd97f897a56cb5b76081086221820cdd6655932faaab37fe3aeacbe96e9b061d62aa740a53392d41c494c99f6da4d4a51c4cee9f6bffc03c0f137c0f574875ad59de87dce9618714c560bfb565a28c5601feb6298b05dc965f5411ece6c17544843d726acfb62a2ca22c2490efdbcefe78eef8f45add217c7e269b0de3cbb66f43c232ca3870b72566337e33928d7dd0023be7ccdef4d37a7826d1aef86df86ee6b22c4c124a3cb9f592750c01cee83ef9f2e6a5ab4de084a5e2278fd1d91de96b263df3873fbd1fd0039d93e78d2466b6682249edc922798e1e35cc178193f61c220cebaae28f3d97d861fb7d48b2ec686306fd659c0c820434b4bde2f3c36fa248f4dddbd8c8647d87574ea6e72bade45d74b7716844dc56ab698b61817cc47c7c5627dceab25ee88ec67f50a750bfe4453bbab19552082ebd31e71c6c29301bd99a2f984ebb15468359767ac9ee42ea89cd5318ceeb2e3f912be37b4bea2a3e09326a63980f8313d7c72fe189a82307ca15b5d6656967fd0adc18da006243d312033925875c7978bbaac0612ce41caaf3679f7695962d432928158d1b85cc1d2c6a749c29725b43446478b9d6adbdc45698d76654fd5a0729c259617796217dbbde2b44174e586a351e45759054cd492cb6f349830f32d846a50296ac46dfcd6622904effb778a29410ec50239851a368de5a579d32c35c28e744a5fb26a3eab1353240818206a5ba9fa70d33af667847ad646ca5ed5e2ae87b976070b72cf2e564d77dbd847ea99c7b43d450dbbb3f0bc7fbdb24b1acd8f71b4e9eb32b1d227a735409e4982454a3dae1f09d1eaafc772e0de0c30156cbc0be10f680b5b8a5d6008b9ad68a9dbb564ccea83eaf2c7ceb6625e990c883c3d0262668bded045a4cfeaa262bbac139c97dd0c725616949b13649a0a998f54daed2c208ecb17da79b275357a4e01761af5c28a26d83461630fa249ee22bb5531c8c82208abf201247988871cce931fdbd10ff686939734dfa5d9ec96fab1e64a19df47758611337abe1e12481e8831b5b75905996ebfdafb08c8892552eb0a1db5e615e3450ac617138400bf220fa7f697ea9d40424dc57f7fddeb9a2a49bd3f7295b498b76788e82eec3959158b873faa16cf24c77c40e591019c81a488857517eed9bd988a75e7424d418ded49d9323404811c68099c7329326d022eb93b8d38cfde933b2e4573d98a009c9d60d4c68e9c053d9bcddc5e7ddff72c5a3c182296f28ca4e7d26687bb3cc33a5566bcd3ac9f5f697e72e85f47585e615a2817792241870ddd542fccf98fe930ceb5a71261015a464f7d07d569730d896d85ded7a0df2b6214d4e59a6b11a89bc09c1831dfce60a0cd86d133acf8a1c5c7590429f9e636596e65b57d3e0f7fd770b9835da221c0c7c41c57435d47d985f04ebfb176e1db5c9a2168e283106bbebc7cfde00e333a9ac81b41b364c13beae8c3cb05fa5d5d83ec109d0bdb00ba598a6692ca1835e36843059bb02ea7b9dbe10179f96790d7cfe4141c1d139309b40a4e3d24e8e4af99d9614ec260e444c9a87004cfbef3cf97939394d2142d51e32d1f5f96a190cc7cb46531140c950c2344c6d1244f06ac634547266236ca21c7f6d7157f5c4acc37ca0bce269cfd5c49246f8972ca8a6d5a0df02c4af9d503b279e1e1d6a54c0c76f226eb2db1b7b1a1805d8eb108bd69afd08a07e277df93f2155accd2bd3138fa1bccbe523bbdf2b89406af17d000d2db4e4ef452200b54a8fcb9d3d69c3017806d3463158beac09f2639483bfa4fdf18ad9b24b864b185fa8bf1c09ad3026448c447e60676b69d693bed841b4d31d8a3c66bc593ff2cbe80d4280a5a54d234d621cabf345ed2616c3e6f62b310e1605a5293491106b044d58d7ae3d337714b25ae264baf9d15ba66ebff792cf17e3f7c5ed39a4d868b1a8203e5db8b9abf3e0556b2a9de7efe44bf7c3b7b2730e1b196f19721ef3815c29dc5dcc1793faad2e1b364e7b9cc7058211d46c4971c1f3a47d0e045d87e80c8d10878968a89b85babaed1a5f0eac00af8fa43616ceac789ef44bbd2e3c5d19fc49c7e811047acaf51c3cead18fd4f4e46fd8e00678546bf75f1a59f8569563cd2c5e2a0e4a4abdf5910563d01be76d59b19f5681998a531248fdce07914f316abb2848b2f4bdcf1ab507d368b01cae071bca28bd09b0f6fb33f5ff5416432edb01c9110c9aa43c86011e3da10c86dee857a080dc9d6096ab96eec57801327139e406497d0b8d6d682e45fc7d28f43dce8afe221d054b49402b6d1261e59a722170efa84cd6ad95c431687de0e95f09f7687f4578a66cae36498490b4894d124ce4c324d358e31e5fc7b25f92cec9a526eedb2072da340b0520317ffd13b00f8102f1bd29c9ae1155de8c6f04c36fcea6d82f97d5fe1928ddedf7ecbddb89e0ef6cf8b2efa89de89984bb15cc3172d18a3a1b2543b906b91d72834240d72c1f3b86fe40603b484ae39559a4c97de4d8c837ee88572d364247cae598230d1cfc6c2fd28cdb53cd7e24eae6f0f6e5ef7a0a98118ff2d8cdf5222da6ae88704161a69bb7d8ad6311e4a9e6e04d5479d450b570195e3db7a632fdace0dfbd8c51429be216cc58a085f17d468192d4d964dd545d69c2a73175ed9bf92da8dcf71324cea477492c2083a294ad5c8b14338cce88e44bd1f176643265626b98852b490fbe8ab58c86d63937e7a4a72caa7300aecdcf458d7c21b8870ecb3b54f36e02a0cd4c423b4d36df6b42df81deb9ec27e588cf5ef623997c82272e5ca621a98f59fee8b36c822492629be262f2f5acbe65f5c3707f8ac1dbfe69d64494f3952a581764a36638183e5f03c0ccadbc00a8d524114924a1799fc0b34dd735b9099c0484d8008a9c9b1bf7ef685038f9dcdfc5d63f7966d944abfefd95fe68caf73d662b48827c5cde27cd77015caaac8cf1924daab905fd80d94c4aebbad7f8015e08ea24908746b5173f78b95a44f8bfe98c7741ddd0f10070c377b7f4e3c4d98a4abeae91f0f699a380a2d46e17e10b3da0488bbd6301a741bda1a66b4f5e62a72936c987962066f6bd4e5590209fa43c46c85d921718b6619367073cb2cb1419930d44bb7c6ce36797fd0c1be2c8af789b1f08ed4903b55ef546993ea275dd320105cd4b4660752c8eb15b6c2c462506e6a4292bb439c014289c2bfc5ec9dadf8c929f17c1dbcee8cfe8ba1cd58d72ef7c4e272de898c367650cf4d0b602b12d35847aabd3a2b6a1e4d7ff095797104c2de2613a701ed56289ffd846b89d90edcbf0fdb05d7709c3822f1fa907f33390114bd2d99bfa7520c501f530db275a0e08268bcda54eb1e16b0b7321564c425d2084c14af900288199caa2af3035e7a3c8e48b58268a30f3d92f161f4db4e58fd99dae7c90ad0e5c77182ff4ae4df4b32d921878f4c8472d483a749d39d5eac1051cc500108dac9c63ffa68ae0d5b72c826141422f8487939269b950627554612428fd832336f92b8ff22324ec66145b00b8da770340194cd024b5f9e117d37d72825b621ff50f6d384fb772fb5b209003af7d1e506f9aa90ecda16d3c342a4683fc4845dc38cbd9d788e21f4bb25b72e0ea8717f589f77a181fd0b68505934454704c3bac6390d9dd2fde84c5dcc9d54f1e45d22e0de6a922a781a3817225e2fac7462c62dfea3cc276b412b955da45a9bca36c53cfa44bab5c0e7d1f483101f812e425d11d84a52a4849225a0da73b1eb36426056a84f8be54c79d9af3375637066bf3e8599b86a6e7e8e3684c057ca3fe19df8ea30b893239cfc65fc8eb64ea78a56d07ea1320294c50990774804507eea0f1c83a6e224987d85a332068921ede8564b103b3cf0f56163887a6204fc12a86cde876db16e22586697052baa421b365c4e2efeb72cf4d0699110106eae111c8d23a2dd6eb60aef07f1ff42f59e51a7a8d77fc6bffd131651d9012dea78bb5b2ebd6698ec027787774e961ee11f317690badb9f31a20815a2ad9113b107c15781eb31f02a94be01d5a3da8b6e76c8bd70a3dca7f87d00ed746a2af8b8c87821a3c9dcbfe7274fa8cc3db711222348c6d9718287e22e6e310afd70f09c953922b9aa2256648b531dca37b763804d41d460451c5dbfacd0309fc3765aba713c8c5f8d12ef0cbe11b4a0450f8eae2910e4fb2b2922a2694dd18f8faad18cefc729ea23c11804ec2d82b9a5cbcb57ed06ce0db72621c19938018dd6a21f3a5bcd007ae730d4102dc832c32ea4ef54fe3c47a3561670d3b11f6e8393341ec045e8fe7d8bf11bbef22dcb2f40ba1b3efc4385ac522d8580d25e6392bd9cba963e4f6a54b112d543c255a8db2c1d2e16746781e6dfbab87d71ed73c3b62ace31a0a7236e39db2ce38872a64067b402edb4c86564959d94206d602d39284667cad76b4c7479a39c1ef97122a9dfa0e3e2633b8b9a3d8eb196d8831802b9b17f0a39071954e57301d2fadaa767d8da04d3344efe34a0efe42ec5c787ac8374fb4e9d6475d8fbd0f5de96d9ba79f9dc34436b7f257135af1e9a5978226ee342f08dfa1d6aca16815e5f75c571c4ed57e975ec09d5825fe53552a117d245219996df1d81490f7477531303f0bc8812732bf92837737acd0f3c4c03b9a744d613e28fddf1138e6378e47a097fd69f806b4d91a17a549debcecec08d342bfb32c7984f6cd7afbb2b4012b3555d2ff88c56e90f596b99967326ee5296f0afd403c31a0e10f86717aa8f6dc4e7949c5b9e203058e27e7fc34cca29507a87f72be7489d42ceed220b555ce014887c0f3c5c98aee383ef2dac0bfa98043f6fbac56afa1de332cf6cc4aa310c81fd44bfec49f1a19cc5e97cf733ef545f5af741ff63c236cb6e4cf154cef9b73b4b33d12336d73f3a548efbfa25042a58176a53640550c1c0195167f46a0cb2bd1c56da0f8ebd47ca58ef673ef2c9bff0e034237e61bea0316b1f42cb0686f72f76c29636c97053b87c7b9a3ca188e1b6b0915869f408f75e93cec7804bfc5781c2fd6c03b7860626c6f9975057c71edbc12707dd032ef1e742affa79eabc65ac9e89e6a6c7342f2246b2dfbea036b9f46539a8cefccb3f03a60a661aac87688393e5231b6e3edf5728d16c09663f2698fde94298e6152abd69fa59ad4f09d8a6262d4b941f8bb9500baa6399d2866f2b3996cdd996ab9d2041ae06642909dc2cb20957bc1e5a3e8d7bd4fb065aff6c9b07d13b2b7987784106295260436b7c370dd90cc0f4257399330f10392096f06b2d0a2fab0de3f804fcb6573af0a270930d156f578ac909920452ea5783a1da7e27d230185043022cce31d391bd12e924d1cf49f5069f8e6a1b337eea85cde4009d114f62e2e044b43460bfbef4c37c1a037fd13ef39813a23f1a3cff9c9aa1728d058f694b005d61e5ea463b97f54cd7e2de1a23803ad1d360429b431f0c2354844f89ec838c7d89d8f94a7fd0c46008f85634e4fba550c9feae3fcaee6f6b167972e592bfe81d6ce3a415f167d976de3dd9d33385e1e8843de43e7954fee4abe1a3f0247cb68db4c3898dd2b3f43b80d00d92d47bebd689b14056347fb189a6161d7447b472913752c94b670d2c241d3d7ecf0809905bee6f03ce378704c5d5263f33df65793469634000de17c82b1d19d7daac20db49665412f9af8921eaab729c058bfc5e2a77a1aa319f7e4cb6c474c4286eb12f1ece612cd5d4d5d44647bb1b91316a2ebbeca3f612243dbb9947821ec3e26b312ab995eaf25d5a4b51e8a44ce533673a88a78ec8cb099dd79ab04e9ec17d9a707b9044aff063e70aff4786f16ec16a220049037450e19e46f3e3f44fa416d84fdf13b7ecede25b7a928b453cdf95e923b5b2de5723b67749da7e49b6b24d767df9e1f1a4286565117cef6c9a9e942d0cab9be634b6838ff78ed90951c6fc8a74ca0323a28eea0a862528d4bb786b7b75cbf7e148e5d6930bbdb53545579e4cc5448dc242f8c75d801ba185a0f2b8505593c4503cbcddbd9010096238d07be7bd69e32046cd9fdfe715b1f4b90f3ce221acee8f06e283c5e6cd97208b3404383ba92122bd1fdf8d7cdc344c979ac1c9e898ae968e0d2dcce725f7d091cf81f88a8e67f655d2f9140d5604c7a7f70e6615e0698d25925c2f2d03a1e95471c091119d5cca6facc26367d69dc5e139e3d794c413a414f96552b42366669ff39203e11dcd12bf8a99d126a163a8d6c8ce9cb8fcacee6091c17b389dfbc9eda075e31532eb9f0a4127bc30cd63e6399fcec580bf69a32c83ac0c12bb75da9ddd9b15dece9b33f9ccfcceb80206e5ef327761db31a5f08c04d2602eaa964ba2cecd8d3f48a371993d97c70702e7e89498d8e1424f5f47cb8cb899aed3d19134f7eb64aa7cff9246ad205651150bfc580669b0bf191adfd338044552c02a8b6d49f1a230b434f2d8588ff897defe8cfeef9efd804e79422f35acbbb1a1b177905d1b6ebba7ccabf7e9b3a15369ba8b9f0a1af9b339e3dd7c578c8f1e2eb50f40dd0b5d6826af13e28b52fa7efecb4065f5ef9a2ba4fab5e6f67007c71538eaf12869cc371702318f122ddd5e3bcfef0e2808ed6c8ecce048b7a781afcf2791573872993e288c44f5f97a5858be541a98cec53d6dde784219d422da4365744b44907d78f1c78515d445a3a4689695505c3a666b26acea93f3923a445de708ecea60d7319cabb0e1bde3b9a4b70c7284c55191bfd0dad779d6e7482c09491e6525ecdc60b84a592e09ade84e964c117b7086761ddf0057d54fccf277ca6295fd5f3846ff1b6998bb07896bb97d825046de7f46981a196956b503e8468bccc9ae42cab48b47c7f7f9812af221d3ad0874c80a98df214f89887ac854b05071396d7eee591ccb8c1ac1d7f9f8445158280d908969bf40bc84bbf3108c24c1ea4b5bb68890292d37a399847b664a91b993397f1f1f8c70817f03f135d8c09413ce0568629bbef0fbdd3b2a4a2a933731111db63661132a0209066146b47ba1839cb98efee0c4c7450be477e492bea967c33faccdb0ed94cb8a62d7fa076ef10f6650ff26575ab2ce6896631e7f418da82cf8bd4223aeda497f0d1e11408210f8efd8e0f03fbda18800843ff13afaee2e968e40341cdfb702a9a0c19558d2f5e1c6efcc727aa996f018f7a12db35852e62dbd555d41a2337fdc08de80a758ddf35875b271da0616a4e9124805b167bf853ce8001c576d6299a933c7b32b11e5bd91fd655c503231e0db46256adfa36475efe1a91b7dc28f44c70d779bad2ec63a19294451042b882254d81dab229e2f5bb7aae578b3cd7a3dbcc6f1cf46f91d06c0cd5bd59d66a1c6e1ff45bedd32318dd35cc983970c404773687065bc5e42c44e14bd40917f07f0a3c6d3835438d86be565b7019779b06eedd034b0e58c406e86b83fc8e56063567fcebbf67a3ac030646ff997f24ab7f936866894bdbde9c9828544429234b58eb5a7018e41b8d0e7ea56cf8597c2f34468c23180c27f88ae58a6070ed2d2245f68b64aec9213479b86a70fec268480523d45d851438e6888546be307e0220dc12bf2d33569477cfc48718f9c623778dfea8939b5350652b2f417567078ff1f6ed54e4c9d807de800ef1d323d1e62edc595927d54e005cc805f8be221a00133543a1e35fb94415b8d7bdb413dad921b01f281a0cb30800b41f5c8b25732012163af434209eacb3e82b5faab06df02116352ca3f68a18b18fdb550a0f342c687fd7148d31b5c755810b1e4aea5c8ef7ef0ebb9eb26aec41411b121a9e00c309f5bfe6ccf574464a9f09515352a02c7f574ec94afe23104423f0809743cd375ce042b2a02b376c5ce3c114506ae40ce61a1e1a280d2c63d308a9a8c941a382e2c66fa2ec834d0642da3a20ab71b24d181e09899d71c5df5fee81527ce676462f83ece3cc23a5c6b65780da06aa5255ab944e91eab8db2fce66380fbb44cfd152049c1a90a4b507d463d8eb6f3e8fd3572ee8eff8ecd7fb0c415d827c7609afd5da0b542abaa53648c072c72106de6518bb6fa9c41dbb384b5bbfa0001818082b17fbbfc30eb50dabfdf1448f7701c13a5165dfdabd56147346fe9a94c2b6cd81ff88f974ce48cbe329a6c176525222dec428633016f11f8f85f311e776594678c31d3e0ee92ada1bedb3cebcdf7a0c56f51a3a3cd21adad30d9c66a4e470a3596eb8a5ca06686721f1166761ebcafb650288cda98887fcefdf91b61d4cddc777e2433ef8bb93641b61d3fc068c8df048c77c93142fb139111526e85d949a7502724ade29f02e410ba1e55fe31e3c06ae1
+#
+# # Sign XMSS_SHA2-512_W16_H10 [VERIFIED]
+# Msg = 7947c106e7e116b7e97d023498bd39ad62f38f2121e679410445647c6bb250066198e15681c2e887db6e04340e583d6248d00f589e91794d9182c1564e3591df95badd3b5c4badea59ec2c3bb4cc36f4287c709f3f588a9b7f2fcad52013f6e23bd35a681b9731dc33f417d1bc885e61edb535e1609e89dfba159bb31cf570ee577a5eb33271473bf67113aab4ebf9af841b2a3fca38606b4488adf61a3b6f3df95a9679619d10e60992aed38061294e969528cce7edee35acd6c3e66494a505edcbd4bc01b50fb6ab026e8cfeac842dccdd6281b9b701457474d44d571606842d2ae2231839ee0affe9ae7bb72456fb79e1e96d94998fbd7e7f68d2dc0be6951409d301fa2b7721f67b93b96afd509fdf755213b5a23c551c295f8a
+# PrivateKey = 040000046e51577e15b77d0d8e82adc6cac6dfb6f69d6454661497b8625a269f0ac5c4f58228016ebbfec3eb5df1f011ac1e945af867b4198c6e8040c9f0f1e7040909942b54304cea3be2319c106d78dadb0a3d46b86180ef0aa2bb976c9a05d7458c52e3f182859e51e3aeb3378c6d7ba0fbe59743f17d4ee90f0616003c567d3b9f3a00000000000000403f3bacb4c8ea367ec77d7bb3e8babef4b2c3ac6a59e489d56d969082b9d89f73770b19f0f727c1006783d6ac1e0befe13ea2b520ada00cc0b8f238978678f82f8867a6a15997ed18929bf045a778c2f6d1e73d648eb69f78a7090e3fc48c7879294b74b9ffd67989bdb83fe56daef38b14afd818f3d85241405b74b53d4ebd33
+# Signature = 00000000000000408536bcfb2a239d14ee95dc4e463d99a71851f9da94d719b6133c3f4abfcfc7729e9c673d45d8953c3be32d9aa4380605ca3629fbfb524d7dc2ef9ca10ea90350ff83c73c25b5dc537236fe97211e4202a7628d4813264eede8b864d955331d840f2e2e8bd7606f2a23bed1ccfc1926a974dd0944956c07085bb7775be11ea410dd243f5748230231c407f9b6a9e6899b63e7a6fd1f7f8d8111b64d2f1de59dd7a4c7b68f49bc09a60b2bd54159d325f0da270159008028102d3693955489645a05c98d6e994ec20e5b4eb9ef8a8b4a17a5a7fab4606cde0d22263cbb45a3923de8446440e38101bac42b394054b2ac48c5543d21635c47e342c7f0cf74d0ddb7b01f143c78b7646f6744eb491b6f2f1d744f83faa6c9c3be865e29d66bae00fff3c6d6fcfba4494343d928541c4c2711bb9b52e265858b55f0c73ec35df16934c99ea322210e6701202461a601a64fa60290ec3875860cf97feb5b2d47236d0e4e83c968b274b2e1a04849bd790bc53c22ad7e59be0ca1446745002743a2656e55204a07be4bfe1ae52345d83b016916f10c95b83b6bdde15954061a3a4959e82adec855267bd9cc9bbfaafe680a8a5d64d0c48fe5ddb6e101508261e4124309898ecedcde32c208fdb3515bf248ae9a10ed34e7a1eda5731e912d8cc1701c7f3e010e1a83f7190bfad8d91ae6ff91dfca2d7a713418ac4ce35cb3b1319be19e607de01cb5fd7b4d41ec1d06fdbd70eb39edc36cf283b72c0841ec6a62ee880e0e824ce40361884c87bb9f75cc06ccfa55655996cf8e118d2e4a2095368553d8844e61958c2e60e64e0055d490d307e2eef0fb7e29c477f4e7ac0049421118cbfd2d939049efdb111c46171dd9579b1d73dc2c50c515a1c391372d98166c2001da95cdf8add243e958f822caec18674b67a667ad6ea85660e1886daff5f1e8c1f805f9a234dfc02d6b597662816d7adf97542578f12b273aab5937481e1d015d95d65643153c5ab1046f39a742781f292d4a047758fd059d40e2b3e8ae9e06ef111c8b6ec82139b76d4ecfa11ad332c01c350353436f684b426392314e0bf230b111033877062571da2d28891e6bd7427d4ce6fefc6d9b7b147a379404d53944899836322491859cb32407bbfcee76db3df8556db6cc664890b9330249f329abd9c36fa0dc0f5e7727a120a50191e33c3a1368212a468e3be85a32293996f5a08e5417c1c5d04318ef14277174555c7d1e707f0fd569f47230619c88a7998f3be7e35e4fea49a96f0299cc61b9fb0d2ed237892b23db8b75be6a8108975adc078e4d167e131c0fa396668af438e9e0c7e93a2fabac7a0dc283fefe3295998ad141c9e3e61b49d53879df7a97002af7a4f45a44b6694beac2058386dfdb6262fdc9f527336f99433e301ad34e1deac7325c3f408e49bf1c8f168de666a380791a7eb58bb417f5416c3147ddd5a5280cbc5000ef176719e21667571ddb5b861bb568380256a4b8da6cfc9b935f82207cff0dfd9265dead2ab4ec0b0a3239106bbd2ce172bf437f993810fb3f4a2ae025671e2ee055135eb4ee6415f61d0383bcc69cf737e6ddf57f2e679561e57ff670eb9a27987e22f6e9131a051e905f4d3ab25e07a1ea4d6b966e034d69c5a9f4cca45b33115116f7eb53daae39844331c9913f993b93e035bd837e907303f27f93a3f8694e0a9d537762ae13792f531a8c12a63a9344a2300c0f688f1a0e6c1537807952b8c82648429bec3bd75a1c319708dfc4e06f751aa965c929144bc101a8842fb94fb430454aecdb7287490f2a10542eb265052e6c9992d927a5d0852c825fc394393c4e7dbab28ca73cbace5ccb71e64ac2603e2d2a68a108ca34f44e0ee411727cb5402e43db0cc258c5d41f1543b46e6444ea5c54282c884b864a1759223e48bd1b6b3fa86b694ac1763a5dc05fd0243885ba802bab5bed37ad9a8dc40d5d1a5febd0fb64e0af6fe991bc926ffd5b8a30306e37dce4240b3485887cabcde6c33a8f2eb8a2c81e978143cbdbd76b614b95cfe082a28bdcd9fbf7008f4c6aa00003b97f25b6e0d0d473cb2e82eb010dc70e8640f6290b17423e4e29c29306458c6f5b2b5cde1c065e4d412927faa593f305ea41a7d1c88c5c959b9a5a6442cf949704f72aa72edab199804cf6b49d554ec2d2cc23f54a1744472b39dadd3df68eaf17f83ae79f1af994b678749242f289b251205d196fa1a5fc6a96801afe302d149688f46d373a33d1c96f266f724c4c7adcb072cb45aaac5dd50c2a1e1d9794014337219a6d01cfbd680eebfd17b41eda6908af10bbf6f74dc5a7d774e2655c609af69e9d12b96ad6e4eb1e175af302ec2563337c80517250b7d3c767ce49023f3e823aa64f428a40f45c2de20162e78a33e8aa97f4eab318ad5d67d7f75e3ebdb78bc49bc0684753edfdc7a712461a9ba0bd1363a7a7065dc38f70b0d4daedd7227bf47c72515293b7239655f3ba80ba9afbaccd0fdf2b9954e24e71b10f6f9828b7dec051ec6fc7799c8bb94fee18ba796fc423aba274c9e1c920863cddaaad9b4a532f175e0da7c49626c2f128484b3cf8bf284831765a463d70fb3184bca54539f40c303a319d1101d608ff81ae1e75dcc3e635671aa22cd2ba344360d8f642992ee0e61b86d51b05e0f0f53fb8d35252887b7c49672a8f215f5f0767bfccb82ad5040cd6858ed74fdae114af2e3b8541bc627be6a6ed4c3a2ef08628f20197795bef92fa3d87e0db08156df39a162ac58cff2c7542fa263ce183032df1d1024cd6ea6f6f06124eb5147ea475e34ab5532b6dd7384a36df9734c24e84c46032f4185fd0012be6aacf83af1b1fbdadbcc0149e141a3d533b28410300930d6c369f37b42524c35850c1abb9a3e00cada31aa5300497fd66e64f135523da9d1673a53d95de6b8fa499ac8c3417d39a6352c0b4fe3d07569277870af1b6b50ca55888d6ad538ce1ffc38b11e451ee5b958ce06096d4cde8ff63e6b7e4da1da08fbc522c1cebd7b6ad60a00d7e3e432a08f6bb6a992fa1f0f06ed4e44754318ada6e8ba8126ea5906af9088f8056996fbaf528d91b3cd2e0fe5ef53b986a856a84735a2b586cf5dc098a032c8914a2d38faecf2f7c9e0275b44c8b2968b9cf279999a6be707bb8e6b69dbd9eb3760a70999f67639755a5383204283a48d83d97b40d7fbfce668c1aa4595caded17ead40814c6f1743a95e3022155b334a4d4b417502020f5ca6b961f2cf6abcda9a6c33464cf82a47721512ab96e6f54cf40a5c5dd7e6ca140c1248c9a25cd92fbf20968df33e72a263deeed0a6db05a5a9f5af158996cba120560d5da3d89c50e5849a5aa249ebe27aba0ce2e034bf81664c23ec89a002135aae204e3d10b933c42f648b61ee88c294cd7ea415cbdaab015aade49369cf7471ecd7c85758a8b5bcb8f4dc210b5ff589fae2d12a583c3dd906e5a4027e94236ebcc9ce1dd4a4e9f7432229637144aedd220b668ea3ff02b75f71735ba1275c3bd6bc9ec78627c418571266f15048560dc20f21f7eacfc8d27bac7afd4884a54062cc735538d41bd3d2ffeed922cfbb92b86bb740d03a7d0a0b14d320a5b1f8272b217bd101a813962e60588d72f3ab94a4a4a555e7a33df233e678a1e2d581f67c61d1ba0ee4a2882a2d643dc4237d0f904b9b4cbcb1b14c19aea6b468d9d0cc6a852faba8756699f2bb486891c8228de92fa0fba072c171f3e41409e66d58f514f8408ee37789a61a5b80676c4c87d9eb1a47331ffc271e91df821a7c84913ac3a53ba102653b22ea7e2db9d0eeb41d522578367adb846ea1b8618123381c3af5761c0b5ea03fc1ccf00be5b1d6326959c30af31dfd7f551c25141659663d32d713d479385ebd6e3b7162d49a23a4136d9c1ebcb8165a6021d2cd3729c74299932c54554b42f3d4b80dce3979b04da6c8ccfae876efc7ba1926b5d60d96894c52c22136be163c3ac09e9cb259528e81739c8f7da9d1cb8dea50501cec14a8cc7b0f56ca3376e6c857e9e59051f2ac002f3f9a5d74a45b600d76bb51402534843201b10ed0b15d02f5d278f90ec79627e2afa73cf21808474d6140efebf5f2fd06f4ea1e8396a79f6b287034be6ac064bef27f7f259cd0efefc194281d28a60fcb85dcf644d95940c31901c443a2cad5edd753d6186f62e81a1e9809416591cc0abc0caca178f3c589b576757aee6c21bb712a7e25e56093e2908c1ebdd6923395b62394a6d7a70c339abffa956f97361537e0a454dddaa1e9c7fb9f63a807d120b2d87117c7c7082bc9be0d0e27410d5dd95f526f26fbb6c2cffcd1c97575eae20397cc7880442778ea72c040c123fbf1a004bf280869da17d284a54c2241a7e5020108af3a040602b35a053d1ec7189452ffe10c28c71b28505cc238938cf3c95d368103c877660b750c991b4b0ba39295b58f9136169d06947f424429bd868ebd04463f23c6e5e636e279a4133ca676c905fa52597a9abb8a3ad918b071b7555daed52305647ca2fb1baa2fc9ec5ed55046e0a982122c326add501aeef46dd7a106481bdbb8d6547c18dc4ac5eb12214369cd29acd29cc2f7c608dc472553fce765fd9f49239e2d7bc99016e16f194e80f64ef036cf73ebfd7b627c2c5319262abeae5beeb47b138448c59662002f4c1533bcd513afdecb5e8372178f9a2e6ff855333e640ec276c2d9a80dd2aee6630d157177b0c61d0479c55453fcddcce8d2bb9064b1fa051f57a68e3934007c49cf408450a691da854e9eca31451d13ecd0196d5eb6c015ecc0edf636a1b1b3150e6ab7ccb57477e89262c3f330305a593190dad1e2f9b6c2868aafe221accb4cbae4e495ba52ec759a2b715dc1859b09c827f7fbe0dc64d6d943f49d5336ce2acefbe106ca6ee35703a00cd0f6351ff109b10dcf246aff865c750387381d76710d9bd489322b7ae0c64a8bd4cdf342abc69faf545e20a3f4e7fa506cca8cdfa4e4472f0032122bdd6e91935eda4956766af76e2b7251c00fdafda6c4608292778d2f41411ca817929c1359592f30cc1f51c17719ab01cb6596ca7ee6e7ee2b466b399e374e82d873e6fbde8a0fdf93b87f801e98ede35f0339fe9e294c25211541e9d6482e7623dc542513a15ab17704e1f297ed5c32d72b0c633e2c02c02d1315372d1d8a8b2123dfd8cd489e7eee1bd8fe8451d3e03a3d7c57fa9cc3ce192979f7ac214193881d19760ce80aa17bf50c4586c67136a35a6d2e495690df141a4c347ca5a9eb09ad20b050dd89f17d6746e1a34822bdbdfd4a825dc339d35bcf3f9afad64ab595b738dbb457a778d1995c18d03e6ed5ef6bffd8d9eb20a0d5c0fb2868b2c14e7974f8a10810b7736cb11eca51d3b2e06bd5a9169d80c57536528daef43d9cc9b15940996f25261fd9d35f3c81e66e23fe887a294be03aefa66536fc155b2c7bc8092e5d371c690cd9bd9b892e2c2ea0d2bc21cb7f4fe0339d2f6a625ae7fd403b56f9f0058b688f6d4f4eb66f28b9ef9fe09a9527548270dd6fefb7d9932c58b62f5230341a10bbaedda40eb57758b2dbfd2e442eb9976aa16002127c684e3d6e9b589861e3ab6bbde2811ddc8b9ea9b0e2a3e13b44c46cb691b1a984ce49b297814e45b264cdb96d07e3d27e7b3cefc9a35fabe881f43ab6bc277313bf15998cf6438bea4842268344074208af3802365d3a88d0d4e848cd16195a829634edd14a792b13e50d074f847a2eb682a9844ac158e41a0e0eb76a2cbe47ade99f560cfead1c0d242ebc734f8650b7b23f6f428b7f9181e1838fb513b9945ea0776de7d9fc1c9ac0b9db1293595c8c017aae82dcd7f7d1711c5d722e9a6fea9afbc9ec91c98e6d79799bbbb7f09c16d7d63675906ebaaa5bb8f9e4b9b5d172057743a533ebb94e33120f05cb71a6f7aa4e93e4fd223d7fb8ac6b76b63882d88eeda2c7c6ef06893dbe294488c6d8a5a0161ef0b8caa28323f38a1135d61d995ffd5942bda96f03beb07c71f77adbd5e09831444bfc733dd40143ae95e6b638bbaacae7127e485a7625c4812e6a9a9a24e0c2e9ba11c91cdbbae0b5c338138180c0831275563b4df82fdbdfa52de4a88bf158b7e05710ef077939a7a25bb55226cf5e466074218b6493fa459c70361ee90c3536e122ebbcfd7a1995181a52034248ff02c399eb0ab0fc91e85311622e97bc8ce8cea223411055d380f3e70bf513779086d411a477677ff9578e28a688befae362a69134d1ede0ae062e1b99ad9054d35c189f919b581e3f3e0614e0cefa70a092a8ad67650de27ab88a5098feb155c8bbc62b363235367882bbd3c0ec93063e223c511623656f1fa358b112f1799c42f7419f2dfe38253e67f8f9ec03bddf834228e0e7f5f6a4f18ec1ab1f3eef945b68d5e83731194ee567cf9e93f08bb0ba8e12d8a46eaaec95c82df8d2053bddf920277f3993b376f1502fe79bb12f383711893c2478c8ad4e85164ef69a6ead22722f87a7e234dd7ad425a134e0885b68dab30e3ca91d6038f988364e4ca0a7545f09e931b89baa77defd3131bdf1f37710856777be35a92a40a0af5fc382039f938a34a7901c7e9ef824e0033cc953621e9e4123e90a5772c57e0a370135e16c4422f90664f34738c049b34be0ceede32fb20a652d8c860775e669b7ed64e821f2eb75b839eb736923db90a2678ec48a4fdb8c94c12e0cd959bc4ab837e515435e11586206873d0518b57b6d0c98b44547a40f83625402ba5ba7a0cebbcbe74ea8e31aaa25c20328c7e800f39f13c32a190e3e9a1066b07f8604c05e553043008d80898674f3945ac463d2736eda415146d5cbccbfece91334a1fb53f2b73f582ad02a6e12a39730bd2fa834ace6558c8e795b57c9ed891ffb9e586bd21ff9b33db7701dd2ea6905c374805849dadddbd89c4a736804c8d79628ed21f9a3cd6c63460b1b5de423d97b9aef605cdab265304b6cfd8f98eb611045e96019ca88737446a3490c51fe4a353982388fbfb569153410a4e111919d07af328e1eba48e982fc77e034a6e477beac6497f527a73d79b3e9eeaade676b2f92b9e80ea9b972fb15e258d50748f3787d6abdb96c6aebf102cb26de6c75d4231e4639c8b274b3438ffe93b306bbc28474b164e738c5a4bb80b45108cce95b5d58149b17a1a295ee2ae0ffe34aba503f225b131746be95bc65b48a8b4f4e10af418071cc6b0ee48f6ff728569c480c5e377f39d03aa457b7e7f50002ac135e8d5618be6d48e9f0c0e79187de1c61c9748d9a27a435c16357507ae1fc45e7a890f9e11f0504e142e61fb64327951de8bffe0e2f16da75cdf623a1ae1f7e38fe3607678708a5f1a69ee88dcfa16b60b500b33d2ca72bfcab9bac3c9ce54f7744c3da744acb7aa4d463315772b8fca27a5a0772ec84eac4c346f4bdb367cb3344cc87bcaaae1a9b912bb064eeda6dbd258581aa7bea12f75fa232fde881a1c306fae7853e88fe7dd0508f9860b2f01eb4991c1bf5872d338b6be2471acb2b68141cbdcf16114a19e7abeb81025276bfb1991b926adcacaefe8938a207275bcfefc1deda87773ac1327afffbfb3281f99ca72f264320909752be2f04bb29dd68654a60d4adec1fdbc6a73e30b8ba6a6b3612ffc898ffa676fda72bc2d4a81b8321ea0ce71c629486e2a12e977eb304980862827f2a2ac395f8aae0ffb26f3077d3e352838dfcc5a033998776be72ffca81b84a8865d953ff998790f4059b90247e5b86733ebd7a59c29bf08d26b5f28921938514806bd20ed045dda03c2e24a3f392382c27109d7ffda8bf1393c562ac5dc2b47ff471aea7c1c0a1fb82a1cc69fec860a3784ad2ac260636291c26549165c1939bd57a815c828a41a53ae8a984be0150da536b319b2b292403eeb53706581aaa6ce0253758c9c069f5c49cfbef35fee723f75ee564bdf13098caf9f4b6c0bb002c3e63b96ca29043e2e633854c2840e5432d156d94777d225a8f1d1d73ad21475c93b8a28895ddac2a7c30ba512034cd575747de274c4fb98d2ba7ce93727aa6675b754486f912f76be1580c34c4c53b928ab020715fed5697484a4b7876dc74058e94c9c0c2f8ae4245e9367d6f646fb7197c50bc029283ffe5f6aa3ef84ef8eb3e8815a0668a0ff6864375e24ca44bd646bfd29cf79e67379744e5e205bd9e4ebba0a9be6a13b6a29a2ef16bc1e25dcfcb3a4cdcc9678edbb6f065f81a88fc1fa09070a017da1972c5e065a8221f867059c7ce98acf7ae9d1bd53197ea47343e4d369787af6855868cbbf2c4a564d85b5263c4837054572fe77981ea3f5de6c01f766516f7c383d84971d9b23e2130c513416715c5488cedea3218d1cc3078c25b122ac4bad5292d09265dd9c5f0a390ab6f4603ad90f612abec79eb11cf153ada2a5026f3620bb1a89391bdb3e4307a9a40bbbcf5bf3b32330180ff5d51c911b7b8751d789b4ceab40aaea73292c86453be32b93edb49d32bfe1e4ee79fdcdc4eca188143663b6276f2fb6d1106714007db830ff37e7d31cdc6a4fc1948b83b2851d4b39cb03f5fbe9ffb02ec6f427ff52718fd3f2211bbc646c57615066a7c2e05279e41905323222a2abc1b19c438fac7e4184589eec57e32e2b15d0a6eeaa48b0b9b23d5a828a9895367b27ee4f34bae5a4a022bb107e20385e91b0b4ef8a6fc2129d639734c589cb2a2dd1a32396fea21662aa92efe9e5e0c716cd127d5c9aa58b885fbd6e7376dfac7566ac5b8d411f5e3cebf829fa0d2815ba4ecdcdfea5da00ab2d50d283ac931f431ceb723d8a4046791f5a30e27d308f63485abb2fb4da6642b72b55d6e5b0c2d9d0c2b03814bb5e913df9c2447620b5e0293010e42eab83a270bd145fa1e55e28c43555f2ac543bae11b3fa5379ab0a24bc9e7edd6d5455c253308c591b23ea7897479be8276d31af032a08b17f0b68838425f120c419970e87adce4a26c9c5adef80fef2fbe1e89bf21230511a5f66063d9f91c9e2f312f4cdb6c5938071de055db977171552cfbe544745a4db23a52941bb458cd7d756afe8801716d649675d28ca39960c1417fdd65938f4f750ce6b05e8375bd627139b6f71bf4b4697b58fe1fc43a58e1f723aff56c25596ce7a2cb0f75a14b50ac95fe61df760a5094304203266ef9d98d129c6bf7300bf18dcaa40ad1ad66997865cd9e34a7a1d3955ef0bac6aec7d899c8d094deb26ca2ec833d556dad8d69c6bafbeda3ac8aea147d57b155332b6b7df8119b678df2fda1e332ccd2f3a5c44759cbfa1f1e520c0b1f0961b0a4312cb6b816a60f22bf2a7e2f944df1d8cf52b641aa923e72d9b27b2b27f516abf1058af013a4bb845cc0e9ee090864e32e7f8182b2186536add80960c18df22130615209cf46cb8c12ba308f2849dace1d4cb4a93883cf628f00efa00f3aadd4313cfaf235d6770767446dc2a4b2722fd844f50137c2ec4632a014c7f3d8f9cc4ac253d7565759ed452dc8e776f6fff3ac9b92e5f0f206f6835aecb84216d87b46bdec4d080e1af2353e1bdb9093eb4ff7d6e04f7a12515d5bd6d9173de9eaae4f701b34c8ba01ac4969bfa66a20537c61e966275751d16caf6385ab5d6028651a00d298b1cdb1f32a2fea570b742b65f4a2ff2ca2ea45fdd4d990b62a4d57cfea24005686d61cc4942ac04c2f986f7d45289583f4e13b99fa63c1a9497660529a8127b3c2fab71b07d620d99767efdab403883d1e196e3b5972bec6f92d88d4d495680434c3c6fa2a8a5edad54f73b66e5ec8019a64428e7e6c90b298eb2fd89beee9278227b484c0b42632d28fe75f704a86d1fd0dac0b5f8a34cbc61f8bbce2462347d3dc80bc9627bac910d9aa13317eae86ebfe313b3f6fbb77463258d267745567a1c7970c6538b32c0a4c468a1fb7b85bcf30612c56ba35c5d604b2915af7b8f551ea52b2bcf308f8992c8d4e9e3bcddbcfcdc89c237f8bce0fb54910f2291e9a54da9a150db36b3de7b2ad90793265b76f42ca67fbac540eaa7d05abb831ce7c11379c924c656e192661934f4f03da381aafed1c6697e28e348b69fc3295c39d13b475e71b186d9cb822d01eb157c22ae85271678ed6aecb8a4ec3ccf61cb23bde2efd6c4af6e962de8b98597b3f4ccab54fd052d6610c527eff548520949279a60aba81f30919d3fa0ec8de839a1dedd9964bf42999c1d10d79cc48361d942f8fd24f158cf87c4f933b24cc60190acd2b0502fbd1316f624c35f9f8e98bfb01e905c4ffb98eab344ff47ace508eddf340356773fe8c48c3179167aad53d3b3f5a2e0979c4483753ea35b1169050260283af9b65b08d7ff3a085108b298f6cf5bd34e404d510fcb70bfbbbc838c2fedc50137e9e1e95723dce9a9eb5d6202ec5565cfbbaba2ebcfb87592f6349435253756f666595c97b4c9104655943d5dfca268576c4a98d744034fa85b14618cd26126f3d111f8b764492a9469eb0247bf474750b5241f233d8481a5c34c7f0d61d13e930e989820e23ed31927fe0939e9d79420caf5ab906eff9a21809fe2a8206537100ab7658607b4eac57f4a174c601a198048d464229a151593a1f3b82ad54b59415fb8b7de3a197be87d19446c2b2ede81799fd7f2ae9e7dca3f24a0715b7dfe25d4c25ccd57fd20045fdca529b688782b5daf3ded1087a34b7a2364b91b35e309a3aa5e39ba103f43959b7a2b84e1523eb638ca65c73d2b88efd9e2575dc123cd9d8495f852cbae685d4bc3da0f716ee2cf20c268fa52e1a037b0b751464efa24558739d5d88130ef6aca542757ac17bfe911c40e13ea557ca5d70700843ee880d306bb6c0548a58b2cf7c9ef3e88cb19fccbf3f7f5fa4e18a81df03dcdf3e13e242b59222caa59494e3e6d35d036a5f404ab38c845d42a753d8c2a0f918587454d3634b4e0fa9f7f3ffaee1db09d95ee0908523247c138ac27555465e5539f110925c327afc8bc47d81bccbf1ee09e896bf5f887e3e2e346261fbaac3e40f0b6cfb4fd7750fb3e5641bb776c1b3358f5798da66a70c31fd3a9d1c0e64d8d50193b517a168a7e0d02990dc119305432cce667ec34feaf6a36c29aa8e6b892cf474465ae4580a20d2d9adb8a82b1dd611a4ddcb5ec1391068f9d9bb19515932c51e87fc46c18c20dde41dd873240ede20ea0446bbeb5638e724d8681cbe431aa61f6812dd5846d94c0f4f9b51e4e44c7f2cbe3a0fd934a48b6629fb8fb51446fe1234143e821ff25583408716542a29af32af29d875e1176370f7e354b9f77b52fb43f20ea71a780e226a0c1ddd3f9c126de1e10a410f0fc589c346fb9e297cb0b37c98c0ff6acc9141d90390c425dd84f61c8dbb13cee1224763808bb679d2c9b5024d3c9be987e0dbaadf0a89ac9ee137736feccb6a7c76de246456f312ffe0fac0f2d591927494df4ad9f1707ba6cbdf7d9ecedfa10f4bc79a9272fa8ea2231e0c0d3b20cd48b2311d08f99377685c4626177b73004272404b5462512b615389efd77b7bfa050193fe1d41b6e729a759ad21e52d2b642de3dfee08d786dfd88d4420f383a7defb666c64e906fc9ad1578d4f136b56c213e952e7fb814d0cbccb0ae22fae91189db96b57576395647538d6dbb547248493fbd0abfa590b9a16ebab65bdf8fbe0ad5d40c4857fae627109afee572753bcc142f563056bd425e834ba09f5ca4d0269a8ff51fc962b1ae31de39b59ec8f5ecaaa91ff0343737bc9055f5e6ccc1fef8cff795b700796e6d0310ce94f75c21f27e2d6a4589e85cb2c389af4c321429ac9467704e4d4ddb9dc971440c9b1865d93a3eca14b0d17f16ce68f50c7b62f2adbda64f7a0e68e6c5f017af31148880b9ceb35a95843463e8b30a8f97984b01798effde3cc6317072acc621d41923cd8309d75228804741100d9e65b7c0b07e48c9cc96fe6bf891bd7448bdbf388b3005748c5bc31e639172657cd6d16fbc3191362e49654cf3121ea214d5c8fc1214b6797ef7ba7955acc93c8b90e1a155ec55d14612601e983ed18cdb1032bdc80a71cead0840ed0310ef095ab57acf39b30c8f227ae67ae03880b6fc9ffb9a7df4b186af3c8256a152dff1628ff4dd2083df4de1d1c0de4ec998a5339f50fd3a505a8b85f5b2c2c3633fd9a553c4cb54a6213bb383a1114a72f152a79a8c59d3235345e06eb478eb26c86b942c5208419b852aabdc430caf3ff93df9bb91cffdcc52be6d8c11e7f2980758c9a89b584e9b23ca5b64278768818ad432150a8f165f9d2ca8ad6cb7c52c1cc1e342eb4102c16591283e2bab8ad46e9c3f58c58fcdb9a1f3be56ffcf07a48fefb5fa4af4e8b427a418943f047a549a636a0fe68566c7e6536b914630fe763c2bc5e793497a88e1aaf08c5205567160f86e751d24b5113437f4a2521b8c4d4c377c9a39fdc2e440fb8d14ff770d2caca272b4b69cf28a23bfea8bdc66a486dda3d0202fc53262e95ade84e537317b1392a2f39df5994c2814a253646a500ce5c4a5d8091c4ba6dd7de115a2585dc52c2423476e4a44263595e7d1a3a0f2d29fb9d3810300e0b8501f37063fe0b97a5c335d68530c0e353f181ff0d4bd2107bca5600dfa8dc777a73205789a259530fd7503a503b1ade5ccd2f2d530be189002a955e631fb8a04b554a15f4e5a8c69e769246f359158c6e68ddbd7195d680ab06b7dbb77d0ddbffd38ceeae6395b17b1d2838cdd488728d202267eb230bb3eb42bbde9b88b8f9b1e18e5296c4ddc45e9d0b72c565607223f4ed866c862ee6a2d756e0da7b55efdfeffd80aeff7cee4aff4babfe6dee23007525cd3b96257878f65463eebf236727fe5aa142888d36e5d9ca5184c058c7b789b358c088c040723
+#
+# # Sign XMSS_SHA2-512_W16_H10 [VERIFIED]
+# Msg = cac4ac80f64de363ea22fb8030e5cb2f78c3935ef64de6a7233ab9e02e538ea1df7c7c7cf1bd6eee499a0f14883305273766f909e6fc1a29ee3adc5cd53fb60cee3f90825b86563d
+# PrivateKey = 04000004c04666e9dae87ae9c9902e5dfb51b03456fe1cbb6f9cc3ee779d0ce84089d4f35481147e1a11e92db84c2e767364374f72d34e9840ed7e7c4f5b6796a28636299d6cf36f2d6c05ec409f11de398f4fde26fa01cf74d6d288256b0779317aed7d443d3a574adb8f71dca9f1579fc0ec022c757d0a22087d68a006983a0a92b2a100000000000001e39649cd8ffcbf4f2868c121507e0d55f37a4529585f8cd93730e37deb41cab3f89a602e4cc39cbfc39e5948906394c30a9b43e23d3fd45093f5bd3b93d49f1af038f9ecde211ba400d497c7053196cc8083fc53b9754537d3a0f7ff36013ffe55c025fd5740f3d5fbb68c17d90c6a9acf65926bc474762f69a1d4b5f5353a829d
+# Signature = 00000000000001e315eb14ee98eb907ae9641f8f7e3ce7aeac1ea1a91ec98e007a0d5373b5914aadbf1b53bab5d7cbf351ae26b13e31aed1b51e8779852cb608a056c024eda449bfc68e807ec0d78a7408e7f6e7bcbc83d77168ee64ebb558e552f9134ebb8692d58f74cca5348404432b84febf6726eff437b950adc6a4c31ac5fc59a45ef9af656933cea726b4300c63b6f86c9e3a531e8bbd4c70f9067f811e3e179bebcb551adda6b7598c292d69a2c00f514de0b27c110c3bee84fb4e3b3fb8b9e7fdc5a59584b7b7a7ab5afb8a9007721bbce79a80886fcae251874dff1df7d40944252bc70b57dfc53adddd5b65040eaae3d8c633cd1a169b9237e829657394b6c644fbbbbf26fc5b03cc6bcbb2ad03532b4b01d19f2e458cbc4a9a40026f19e0653856967ec3a8eab2ee2df7a09e2051c7a56b47c486bb8fdcf876d71b0196b1f4ea793563bbb36a79bc621abc804fd99e69681d36ec91f01b0178bb727045f492d794acab282067ef4765f557d885b12c96a0661bdeb0a0ea84c48d5a4ac1e687b85874ab75e1730447453a3bb9cf2830151321e926938a09bed1829f249925d2f76372bf1199749ae738ee5f52c10804a5ec07fa0da06d0d6a51353697ff2f070c367550327871bdc4cc58a059d3495f12558bb0480777dc6d1e8291d78dd511428967e6d42a4a5664389abaf08049668ee4a4fe23e3b8ce4f1317b7d49b091cd39cc8402759f9168178614a83dee3df22f730000e7781635d5f9dc67a780c5a505f0dc5544019f3488b3f5f370f41eaf62a917f3193bccb8001fdb8e271fae6a0d0e35fb56dbbfbf6fef6d6f74fd79ba1c64782217fb105d2559ce9603ad40d0cd690b7e65d0453c31900b71eac81ca7d0f3d038668228de6314a4d241e7572539f9e6c71672574454e2c5ccf04020c9f6466707477b0e9a0af2edc1224463a620622d1102e66ec5d8e8b5f1c6337134bfde6485f294c657e705fabefbd09195f255308c338681d2d4f52913fec03266c028e503ef2804e4fe82cb637b32aee1e9f12440db77576c04672825516c1a92e0a2efb51f0eeaff10f6f7b781dead230c4783ceae443c6bb81b67d85640b11d591ec724c870c0b66b93941004ccc7f1c362172dbd6b04cf2b94f60fabe026b5ebb4573f9f7df8879ff6840afd1df604c2b6180859c519fc3c77613500c64a93a9360dbf97ffeffa02e50d48f0c5057a07b10adfde525c687f107724b10f6994c2ffcaf0d11c3d031991a8b0dad3e913895604361bf9f7aff1057a356638af4394a5b884fec4cdd0aaf7d8a81cc30b3444a3c71cabe9af7e9d9e7c6d9423d8cb48f3ac84fb1731a23705cbab512d24d1f1854710bdeb2d2ad9b245aa0c40ca14506588958fc1f7bef1793b82cc45f066c878e0ce87ac98c17994cd04f2605494a42e8cf9412b21df8d2ff6301c1ce577ae80ae92b58674d9ad854b9554885d860f2d396122a9dad5c04764a9c872ab6392d06fe09bac33e79569a6922cc55f4ef981a50cefa2ba1d36122f195748ac929d28745ded5fc14a88ee751fb6dffcfab76daaec74505adfa633102e3724245e8a1eacc2f1fe0c89e1625b9ce2f027a2c560fa82ce72c3f19127a3048228a304439a52fbc062fcaa5482e04c5a203f52ce16c61013f0f3191e2f060a652b44e26316308b91b9951c434c1419b42675afa5e4813366bd93b3dd2dae6bbf1be7d09dcd390da7500b6edd4fc3974d150ddd95cefd576a3f4b385129969427d80d4de4fd61b679eda7bdaad43bc837a71ab936350627b0c019c91a21cc48cb8ccf2ae0c59123582d66a0db3d02b2941838a7be3a7113bba1873891213a1ad93624674a72e644e74348e44f18b703eae62093a61fbe1f0b25f37806d9ccbc101b8b39f46642880301fe70f2812a2e64fd333383a48c445df60d36d93e9cbe9f766a5c7e68e725346f79dea08c16ad52ae7ed0a2569083081e937ca630de2ce702110c4f0569b241ab893e44a6d5e5b140f997bed7e4e95dfa97d147d3027186e466cf92e1f2aeb8b7155f266e42e769fbca065348216206ce799ecd33b6c17fe4466ea0cb509b9d995f5fe833d5a56d891f565fcdc3905bcf20bf3dd225f85b9abe9435b9bb8e1bdee70c4ab219909b9d6f1b9cb88d2c90371553492c44a5547b1f5994df9b2d9e0e982f7b0293e8701f77ff757bb69a0f4b0f4f1ee689fac86c6cd8aa070371efb1d9a8f43725678af9763bd6a05e33713b56c22d5fe0a06d5a5bf3a5de22cf3283db49608c1c43e4b95597f660593ccd6cef8999589c8702a7d8ee21afc92446a4392f9321f127f813e568bcdacc2c19b7d278dc7170996057c417b3a7798b6c781d51fe7433bddf894e27cb37d04abdf723b74e17c003b85bf21c94b4370e0b88a4dd5da02e7a5c106fe467a03ecdd5018bf0ff030188711f2249ac852c2f7bb6cab0317c21ed43dffc9e0d2330de3e6dac657efe71aed6cd78139f7161576d510d73c1d3b97356798d94bc42f5a10e0f8e06b86a23f80626bb850862df98765adeff79c9fd7e1c73e79b5d0adbc49646551c62c97f9ba2d28f2336d16e22caeccedc8fda0ec1549e915b3f4f19eedf240d024128b15ffb2739fe695ade8289e4a902cb392ca377e25d4c52b9c39952a777c9e34e428e121f911415c20e47852c731c89c28b428b1f51ae086f6653fb359807b6d4d8eef97dc553f27f1d0354839783bf80c197b7f1c2e3073cdc2960472007f7d32fb28a1c73dca9b929bad8a57a01f2616fcac7d7c0d3e91b5cd1b8133df9b2ad7aad66b3871b660966e2157fdad041edf35de35823fe9805ac0cf3b707608d4a349fdf498b3eecf6d9c94aea9608756cbfd899f7faec884b03855e4695dcc33f73eb5bfba273e3d4f8d8b005f1a6ba73564c98f94a72c0d2999c9d6cecfa3978e2fea2c5cf996bdc20c99ed54da9babace79e0068744f778e82e24ce1a148a13a7d2d19fca6707245444575d9fbf12f6d2273f0dc8fc7295f9fef1ed69615bca302d6352a9b07d4ee639e2f9cd30c39951d9da90d66c9070dcc2b9869df2e376f1c820df3020aa87f37b496d26c9e8f4a78dd1a9ecc9df3e2fe9837032e9ef2cdf3ac26901cd2ecdbe1fdc59efe586e3288833764378f7e27849c0f48eb1171de414f5c4834eb694a76c7b5de4c93ad38c8b839ee8cbf0b4032fdd09fab4f8fcb967c94634f2f1c6e37ce78097d7143876c170c8d8a14e05ca3d06fdc281e89b7501e2378517b7a4baa48263ca290d65e8a1d8ef0407b8c1c31fdfb76c5427157b5c25258c2f0c45bdba632be85c7471b6814f15e13c5191440217039b134c3a5f5fb89dd7f40ba309090c2b453481add9d0d5600b11690add80948a72d0aa4079f070452e977759f34feb69e65e97b9f85da6107d6440eaee8b5de6375963ce993a8c8586fd4d6238299384e70b9d872bfe996273b712764c84ebec68320d3e26e567c6b3f48be2e715b283360f5d2be9a0bc8ea1f67ee52f864081389a6bc29ba61218a7f69554dd850227774e33f7b84361bdc4ad7d2fef325e078c52f51f68b45790bc9c51b63cedc4f273beb0238a68d0e8ffff68d999270f4f6586e144871fe9475908bb3d2053d5f73bceadc7db74fe08af1479b7b81b48b2f433a8a242cbe759441c3ef7074965e4ac6466c1c597d26c82c655c85ca800c16cb440b4064b46d3463e66bc577b0016aff890c623875d1f570cc2e91ed9e1aeb3487c500c4c59c90181bcaaf383f7afd631a5738d58300d9b370d3d9fde31e8a00cd14843fb73e7e1ac703c9c8c62b2447931415424e7e6516e78120b1b10caa60cc56d13efde82f2722731a13193586a5d1e38d7dbbee387a94eccc73877fe9131683cfca74e3b8cc8bee3ec5c3eecc3c1d492d19b7e9d1f3b004e6414047b065c81b81b11a7bef605290ab520119cbd030c0ab8bec99501f91a7ea901367f1871666da7478a34578bdf4d1ca26a5f5d39346f66e3101939eee61fb75a39a9e5cb973085fab324342cee75cc9048b8fb679a6cd8c7374d4cf7a004da89b04c63f77e5881f0223a2bc5a32e0f61a3102ffb389505be47daedb493ea86bff68d96993c65e0e12b7cb0ddf6a61fa02bd3bec1bd03281745e63b8d8e07098a1d3161da76c0bc953ef16c065b5f307cc9e51fccc933e19b44db3c7e762b105db6d87f5f85eb7ec62780f902a9515ac5c9cb66ee9a8d09230de2dbb486a51d850709d0484bc907d20c8f0885ce88fb939de487e489a0afc9982212b7b9f7e19380366d30ffb4de09eca23db901ca72112cb777ff83139ffd6e7bd0d87085ee5273afa624a8fc819064d081f988a703539160e0f8d9b169a82b4d8c7c8c0a1738d07981f1a60deca72c8f1385640eae51eaf53f329aff2d6f9ab423121aa673b5f10d72f578035e3cd085c7d27cfce0d6eb5a646a658a4567f4516e2520a10275be998d663bc3d1e4e122b067f551b3ad237435241da94afd0c07caf6ac622d14aa48845121cd923a2c584e7930bfa99588e76877501f39c601da9bc16b36dbcd6f1e87fbdc0f7cbd9298425b12ae6c43dc96d46195e3252f999d1b688548172b6c1fbd3deb8113954489450da2a3683f6fa389f1a2f8cd65ed586b07523cfc5af06bd164b6965c78c7cd2deceea56bad09287db7b32dc79b963dc6270e22f16bc564795a7d9918838daa70f9c7185024ee77af53471384e831ad76d116b5545dd97d7850fffbd360ca5792411483c9ccf97918dcba886191df30d826badd699f5a556212a964de95a61fbed1d39e16e5ce96d6640ad1bd497e1c4ad28e5b5fac8e4ba763787ae66a47ec8aaea40b17fdb53b19fa9962a018431a867dd718c3f098f4e10c7782ce45092c6ea93d2dd139bee66e1ddf44e5262a290f31be60dbc8b163c8bbcb0bea107340a0da4577a4093d789e6c6d463ce14d19dc9203d58d4f77511c3a9f1a1753b76317967574480968ec0e3944b8845d6e5068a194a29a7ad502c843154d30564cc2a46478954b1ba590fd7852dfa21efba1da63895d7094c8c4528c7cf5580ac01ce8b700fcd9f59afaf960f61ca858e21e6d9467c2177260d931638d500cf10bb6aa5383d0d028211876b2e3b904e115f9e944c18496dd61cf1fa690532ea083163eceaa308d76f63d14e8bb568f5169d16656780f5d23b8a64afc8fe80a8a0d168af4b9249da7c88a35acaf403d7578816713acacea6f69253ef5ef1a6102c0bb49b5b8dc03cc4aad1964224ba0531ecb2d1ad96dcadff2f75c8e6624aea4744695821d90ca9e5ebf05e0a549a3522029e18f00f6b559bf4f1b13194e37380fd7d1636a6ec82bc74583c9e4f6905ea07980cd6bd001a4987af019c6d634b657df54085ed72dcc718aeddcb293638c5b1fee237ccc1ee97c2ce72a4018148215f0a1ec148504f04dd79eb7eee9e909014e34ee69b758a71632b77470c54e904eca281043fb1076a5b3b0b2275e3b9abb4fb678f73095808db4a5b39f68220ffb92ca6ee8127dc715e3835102818e7a6841760459b7eb0a344ad86843ebc766e5089540ab92a1ac1037a85343214b18cf2f23b137ac5004e8a7969dc07d945ec7fb70d6820006343629149475ac1d19388135bdf0590d5926787299f68356546002c5c49c13c74d75b6e7b2245cbab31152e470615ccd5cfd91969bcda116a7d75a9241550e676f65e1b6a80bf324c58cdd7f9558818466e985c06d2989195cc9b9983e7c04850b645c6cb11e0ed220ec0afcbe2a94b3e7cde8f047216e562b8589964d7f8ccb6f1ca8d33b29b23257eeb48bd19967ce00e8278cbcdf0827877588263e4b978f62234b28f01b0a684e102e410e1d70e0625f0cdee3d2d45010f716d4689e7fa15d888d32dba8507ca700ebe80898dcdcb1229f4126826e60fbe2331bde2dbfa9bd900ed774c00d663ffdcdc874ddc727dbaf4c21a6b8b7182a2df087bfafdc6a44ddd95af7abd8c3b1c6f46d65ef212442ca960eedb49d439a85f2186f46022d7bcf578b25bcabcd4498ba209728c9ce517eb1ea79f62c7011ee17197b0877cddb49c8f5b17aff7bd2bc9bd63697b9ddefa5b5beb973c814257d3d2796b2165b8f8f9dfa3adfdb0a078dd7903c156fb714cc06f3f4883229d30492ddf3334be28a28f73b654d468c48bb27eaa32bfbaecd67a9cec4f17ffb68312eefdc60bb9c18e87cd219c74b3c6e9d151d4bf2097d373e7f8c60d7fef7d8a70aad84e33fe42915387ebd49310434a30f0b9ed47f7c213315a175899233168373e4e67cfec4800312adf6e1ad429d9a94ae3b3306fbb7ecaa7167c23bd50fa7bdbe1c4f0be4109cd94225dc97c793c1d75556230439c0d187dbfc7eb0f727c14e376f9e90076e6724edec606697c5de05b0560766d918dd82d7fc77e0def112d7dd2718545bee94b9da9aeac5001e8a6d91d85cfc1c79856d7a341a9ffc5a7900d963ac256aa3596c5989a441ee86dff184f856377771fb851510bd640db4ff53a48fe0bb93f018b5a1383c03fdb3cba36ad02f3f2aa275474b1b793b57c25b4a2c323051d75ae0cae3028a67b4b4077c0b8e34b625c628128b1eb32eea418b7306e1a7e47fcf36e787a66cc1560cd8a185acec8fbfe880be832eddf8497decfebe243057c7328f0a58b115bfe5a246ec1554c9c653fef7b0659bf2cc44b4bf319231ae5a4ef128f29b9705cc17808a699c1f88c4b5c02015eba1d4d6d622a07a5ca1f5397b2c5205d5d127974faf782132c70317f9e282a1c75f70ceb01c3c3971e1c9dfdaefed9dfeb5b50d11ed4a99303c32ec32204b00f7178c7dc188660cae8c7ca51d710f0e568ccf5b25e5e2f37bc76cac4723539c13b19326e73db67a3fecbadd9ad330264f22a03f65cce3b661ea6355d2dc118ab1f2a7347b18af0ab0f6ab46a10c8fc0bd88b0a32fc6f12c8606ccf4620a7e306f508c9415fda6d25720c3694e87b332aba99b1a259be27ebb7cb3a111abae11d79c311edd2c3ea82e3e83c0b35c1445c272acc5c94f5bc2cb4915ef978d6306eb8611f1628980a6979c0e6b5029dee52f05daad79dc4fd6ca4daaba9ec6e03e4c1a0ec0025db6855e374749a95e116b1bbc68aebf1f49c26dd194a1c9dcec9bebbb849cf1742c9d41508d77167984d69cb52a837dace1fca426c5b2a0587ba004a8f5a4ebc4eefea24276201a901daf8377c0191eccd823f13b2e4c51e61e3aee426a1b15a95be33d04ebf5426bcd01e0166cb15b03c534f757f45e889cd1683d024480f50c5617e4bbbd749d35c3036627c80d599411186b0533b8d8500c1b97b06bcc3a2dc2202fd25db4931985c2865b4517358d53bcf22255656b3a11f13287921878fe83e46fd5ccd203b937c7d4ee4a7580670d077dc2fd7c9cf14ec99d55ff44936c5f40242207776cc19b1613f56bd6c35d9e5ba6807e2cee0519c7d55aefce82e38d4738e508d1b025c23330dbfd283933088afd5e61f44f9461592fe9877e8dbb86b803472ae98ea3434bfa347bc40c41a991dfcfccdc80b0d070e7def92a326f67196e39d85be71f62873cc6bf0037f597bac5f8afa06d64ff9f0ba4846e8855c4769fb8db096689c16998ef5934aabe1c6c248ca031d0108e7640106d2a2222f2c2c0b32ce4314f404f364a51f1e9a264fc45d8b5d8e44b8278cb5f21e00aa68f6fd0b2c37bfdb34b51a49cb3a753ac9d7d48a5de2ba5a355d3c9cbf9782ecd3765820d5064672fa59cb414bac5d7c3fca2b0f49d80df3e5da7c064deb1f8d45ffe6db5118d1d31d0291a51781e16bcdd7e8846c0bce5a44d4e0e08f8a385e47c8fce494166ac84b7ba4aa690187a0c0f1c69cfaf1a04f8f4ed9dd7f76836ede92a35d2547d7fd4cc1adc3ece791366086b0a4742fecf8bafe557c3bda186cc11877f4bf0122a64d0e7132660d9638981742e52f38a1b97f1d0a269b012d008a2d3374cfc55c17c3fb607125d28c8d61046e5ad3df033936579706ba5ace7113a3bf232bfdf922f464b51acc2177a3710d7283240c79b17fc8ebb685a1aba2e4fdaa44663228708371c86f3eccb15f7c1e390825a621d80855ea74f8ace91a8d9f6ab64dcdc6403c15df8447be0f51d09c26ace86ac39cf2ff7807e0d3d5ca901b26bfc7674072e1929a6b11e68eceef8d7ea1fdf9ce4b16ab31c6676e0c00615bdad830cf26026b2b204812a7fef8db23eff207f115fe95aaeaebf190a4c599bc2a0e8ce858701785b8501183b3c33ba9cb208547ac800dfdb2693e5a9721d62a3b2e99cd4699c21c5d798a8e5a2208dafb6eae926a3e3caf67f707c83b7b8fefd40fbc719e58c986a62e8f26e9928b6169e8e0fff49f179bbc63064e7f6d98ddd71e424819d2bc5004f98093eac1acce6961ed3250ee3a62f59ec18d32235554fb22d95ad678640808ecd101562d4922687d97244b77ceca2b5f63d0c91cd32a3071c60be2498d958315c805946512024f45981f52ccb4fbc3da83618d652d6f73a60ca98379ea608c91747717e61a73511044c979794bb3df93ab23a594f2ce763504fedf205c425e65b12eae8e017d0d4fbb004695c5e409c259d82cb85f7f07ae8c1b6894a001d6f9489c8f676d38cb1af25d7aa975b1527344c3932d7475865f7b82ab1d9f170f5c43d1c19136938c7efd15fa943d7645e78a3bdfe071b47583569ffd672b33f9dafba6ce3250c22c6357c49c2aaadd2c4880349351af19de21c5e48de8ca91020b5cdef43d5e37a2c1fbe25afab36dcfef1248afcf5f24298f9bd2a12ff89e237172a8f40ed0662d20a38990b176ba5cd52f47ccb606d47c230b1b8f5063ea138e5019c165ed090ea733ef59284869094f9fd5eb438b48be91ff28104b862a05b494062b3fb58365e805b1f05cf6a56b5bec4e230613e0129348b5b6253cd2ce4318c1123aa8661899577ea44ed6ec7fccf11b662216e8227079a9fad041872454ab7e7cce282256e62d3430df18f1f81d86b011e1968ac1ad296fe2e857e6eb624219f3d5ac311a75c8e5b3288cb0fd200c9f5f7c49df3ddede95fef1fdaff5f599be6457f1c0156fe9714adb0b853e507a00a52b703a169284f5b5a503ce2d37e3c13f853e7f87120e68c323669fb6c0fa8f34e06498cb1d3590a8208e62f044fd930e196e031a71daf8d84120278a6d00528ec5440e61f4c1a84a9ae4391514c420bc9afed591adcfd02f96069a16b1a77ced3b62eea851df4307f829a46b4b2aa1222bed7a76cd463443c062d05d9e6b1b5413dcb0859f3fc25aaf3251cada740563801acabb4aae7e4fc98ab8e48475a904e005760593083e95f1eb452a9300bb31c6902a4366a4865234951498114a1987ae6cd1ce55489787462f98266fa7d449c3e2f2c0760f2bc939beec05bc0ca002ebcf29cd84ff74e5864543c5af07189d7fd66a0a1fa4b90b995e327af25690b2bb949e7d84b49363ac44c5046cd5e7776ea01b26a8624ccb065b7b12eeb9f1af123b4b098a632df2ddf3b206f421b267e2e33d57191066c302eec891248dc22441af82f64f41afa5cb9207d41095d63929b87a775842a7b5213e177b1b457e001176055e5934e9529a2feae343f3ea30738a5af949edcb7723d5a2025d63923e9c229b8ee256801ca029155aeefaa527bfb85650e3d97d673589199229a917624a102d791791d2a2f660f7a9c62c975c78094ba1c1829f08eb49cca90522889e33646b1142ceee64a3dd82299661792c862a39ba237752ccead65ea1cc61875503c71d2ead43c5fd88cca6a9b139d4ab4c9b43f74ef607dba5290b218f0bd50dba0d86efd5de3544a789ff0f2d9cbb62fc4d92e8cc95b06b512c4c01916574bd0e5619f8a26848210f6fb3ef1ff61e3f4237466fa9cd0232557372f1417790fa219a09a783799ad9c5482fdf156be7fecb2ff1cb202d8d1a06950296eb2924009a63b229c73c81d571c805916bbe1f817b6c6edbc98383958b793cfc485705ed70c6a0966da7a0a5e2750cb541b9a62ca7df7716ca910297d89b4749aae9f73ad2a876e5a47c9a066f21b96a010e6326a31a6faa375a1b7cf99f8cd3a80d687fcd45b7c580f0f4a8d7abc5ecc1b49f6914f349310a02e434de5bfc02a2e8b4811d53e8e782730bbffe2157d74cf39e9331d00e959c4d971e209058d8869a201fa35090d1796063ef863bb3e709544a1a119f6e29861a2605913d3890264efec5e3fdb7c074c469dc7319cf3e99086762902b0ac24b7dbb286efae5bf0a525935d694d39589ae5245f3af21f2d10ec38c85d74ec8ba684ffe45d3b3111247c5587d36edf357394d724ca8c2f02bb6472d093a26cd5be72ea0638d10ac9380655da08cc49ac47bc2fca4ffd3a0d331588d371dc8d18a12d0b1c9447b5ba234c0bc671337d66710e5feefbeb4d354f88266b41b2fabbae24e09c5e6d81394855c9dcb9ea4bf94b9850f948da4fa328fa621bfd148d54f879fa38f6b45529869f61a99d7073ce0cb645396645af8d294dc22f03f25db0bddaf0773e6c6ad715158a0040f4d90a91c8defcb64fe75cfd73405d4b0a7d9bced3209c02516f611f82123aaff020ba4af7140a0979953ad78df953d85f0339dd848673d419789ae9193ba398036519032a1018b1db1c0cd5adc9426e6d4276a6b205b972f9380359397a4e3243d4922dfdd9cc7ec6a79639da287c3f42c966182bb1f38a157abff75b40f430251af0c652842c492d28d0c23ddf0fc47f0ac6341bd4b7379af6ef24504742afb64ce9768649f07d9a7186ce84a8472f382c45784d9f70d2c44ea7d5a22782304e6238d4fcb17e0ba6cea961523a3a15f9e6437fa814e38d1b3e55ee5f0d9a9f2367ea4ef72e0af9de2ded6fb869d9210c04329474960763de9be5a91b16c79b64a11344890bad2beabe5a92fa19720c611f5669475ab5aca482c041e6fb0a822a1b073006c3c3718eb194ba9784ddb3142a5a32cabdad4cf5bf10ccd6a28a4d870194da88a7fc80257aafd57f08ecdda58239f4e29414bc88dd5e1e7d701bd43fa625916c7dc7a59f362f79152012b71acce949d018817b1761a93040732859a1a984b765aec20b6b0ea0d74d770ec4ca90e66b0808c7d713ada381b629b4e166ce8221d8a75f6c33815612e687ee65b5d478512545a54beea52995cc0503187b05950c39b16847950bcfb56d3e103ec73f5f48816f8bfe459765e8cf071e30a5f91401298625ade44efea2027f7914a3e604c4314a080b32d7530d2d6e5de0fe99eea43d13319b1fb20694334a90f1525ae7ae7a06228a8fafed67d1bd89f3e322196be04cac6bcb10fc77d4bd26fef75ce3b21026f6d30f2095f00820313c144591af411b26c8fefce9cdca1b3b48ddfe1d1d7a72fe65fc2bd3273e047985f60fc51b47f2ca01dc978f7ed519af58481b08e06840a6aa3035c460b10abd8499904eef64c573d5e131bb71fe2555eb0c5dcee9ba9acb2628ae33374ed061fc7af668033ce1291b7adf7db406e704cc1a8b15739110c5ae62d4a251f40815bc219edebb747d182ac2082399284d5edee2e63533ca0a23b904cebf5e8e16c854bf17355f8c6c684efaa680ef4747ae6868707da580e2779ab0c7c9b219065c409aa6210a341774de252aefd80e010484b870d1b5a5b1c0d52e36e4915265ebb23753c10570d4526b1f0e8078cbb79340300219ce9bca11b0e8f705822a1ff4060a37d4f4d39ae5572a13f51d2e501f9daf43f582ed4dcfac8c4b863200017571ec9d09bbdc5627ff69be08049595f4cc3b98fec92827268423515e34ab754078d7334ccd6317b123bed65c5c6d7af7a30f21778a3e97a7af184567bfd191b7b8d6608d0f0ef7e74b459dbb5f3c08cd7d9efdc2e59b8348ec5b9e90a5181aaf33b2da7431c367a216c590cc7d691746f65c3acfdd448577cd3cd25a96e0a3a635e61a3cfb451b50f09fb93ffe439326e3edf6738d2b8fcc5cffb9b2e346390b930da33d781306531a9f4efb15eb4b9ceccb39acf827a8bcd705c715c5cf39c4f51afd65ecb055ee33efb5a50c34222bfb657ead15c9974dd63638d94d489a91aec1417a297f02cf8f4c1927fa26e152ecb54f917c2e1bdfd8bd6d99118606f125a010f7d51c2de63e05cf4722515fdbe26560a062768aea2f4eb7c0706245eae752ecc02507fa930a42ebfa3de013468b3f1ab79bc128a0afbe8e26b4ca04857ebfd4c27a00287a65f1eae6851839140ad1171e01c3e209f6d5025f1b2e1fc20cfddcd85ac3e30bf4b2a3733046f63c2bb6e556d3a0221e6ec46a052026b96b2ab0adc7a66d086cf9fcdb2f95ce0e20459f683b32146b5b9f9815ae651e714af914241965adaf38d2e99a15c876249853d09e105e9be4d4695dc28c95e207200c8b3ca04dab410442ce37ec9e22c176a7e19f1507d49800b09be62dd243a94544fa93e4b5be327844b372500a8cd91b47c5629a92ae5e192b5fe92ac13457e8f2f9bd15f5905ec3cab2039c2dc6b38acfb6fffc7e0bf4186813868e8ab7e9929b3261f788eb9b0bd6700c519fa78b81add9d5bbf6d15db3a50ebeb8eb866a33c21202f4101e4076fbfb2ae8e083920758661119fd1ea68a249d4ff777ee3e86f0a5d70ef23f810968e50f0a0a55ea1385b4450f4cfde7660b08669f662faad44b8334d88046cea44d99941bb0e9be97391479b6ba4d6ebe58deddafff1f0a73c076482e7b08564fcceaac78ba96d10d9867771757308197cafd7a502ac1d454ef87093c8f9114433d78d4ce48dc1c8ee8a9641c1d9d95454bdbd97ad485679bf60fcff77d6f05859c5fcba60ff72c4a7a8028f89afdb5740515c640679040342e880e3f138ba3b
+
diff --git a/src/tests/data/pubkey/xmss_verify.vec b/src/tests/data/pubkey/xmss_verify.vec
new file mode 100644
index 000000000..e4993818f
--- /dev/null
+++ b/src/tests/data/pubkey/xmss_verify.vec
@@ -0,0 +1,135 @@
+# Valid signature XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg = 0d8a2b78908b8a2537a194af3b98de9355384accdd7d2e3b542e37dab55f0fbd8fe163e261d37074f7fcc3f4e7d1774cddc6
+PublicKey = 01000001c9802b0c3dfa2596ffde21b7b9abfed5094d7e936a96900ad7ca634ad7bffeade07f1a46e940a2630bb8da78dfeae742d5a9712e15459d9d51f2a22145f25be0
+Signature = 00000000000000001762b20507b3bf51231e50aa3bed990b93493fdec8040ae24043fc7d5a0e0d8744611ec5f883282695c4a181de84d3fd993e24749f6d855453a1507bc0703cc5645bfb281687fa9c9a8375c19dd51b0a62a5036e570a45fc1f3c89bdd1147dd200f3756b6c04634f7d2abb37da79555cd209975824d0363cebbab14d3419e0e99233413c6226e811a1cdedacce918c467cd468ba21a3bf2f3c549bf0d93a87cb0a7f6574d3db01dbfc5d61c8eb60b8b3adc4ff5d8d63d9f9e91d42c7095e66ed1d5bccc7965eda895350c727fe2c8a618d685d338f1d0eac13c41de2c5b3ba27553b60b48bb94b15adf8d2323efd85b2c438102aab7c230e5affb39ad425fa44a093b4f4b935acdf78d4590815c037ac8d3fc63edcd3b58532d24d7ef2d4253a091f43e51e0238d714a60c54b8e3309257a420ab43340ddc6bd8b43f75562ca7b3190a951a038e17a709607069d44aa039bd0ecf5af5bfab596d14f45f53503f4e8b38ff4b2ce13a3d7fec0ffa513efaf8f0b0320ea759fc86674d97b9a959722da668c57e96bb3dbd20d52f14fb8bcd7d130b8100b475268b6e5aba22029e41c7ec444f4002c5cbcb4c948936e07111dabe243c15bf4c1da2ecc5e52d6db94455edaab2f3f5393f4475845e94e2ecc8f02a9db7290d15563bd37e603f29848d36bb726e9d1ced80d9a7e6d23f89f074a2f0427dd07de7db479d2a5d1bf5b130fa0fb59fa21ae7d4e0d1653fecb9cc15bea0583401d582899f58e9a01bbf86471925245a24f7ed2404a686c9985710c580467e76625760ba4a56a1c72cae259acee23a58191931fed954af2778aaa3cf52aa83380abde5600eab7faeaa867875606a610d858472fe05f4c3fecbbc104ebc45c39cb2bacc70f444a697ccf845d31b0e06b3d399a13b25f51e0b01b005c80a974fbbd22da2662a1e2f7ed07fce73b4a2b2ae72df519a4fd30d8d8ce0cd14c8d570e35ba7dc87745d8742c89d47908e163010a4ebc024ffa73c3c026b8021ef2f9f155a7b8801b1018829efc24cecf1d1d3135fd987f3d15cf442b031a99bf069b8c9cd1d1aa6602cddf57723f718b19991ad58b8e87f5d7e67181bd730743b318336e882e50c95304c289c8efd08ff23ef7888fcde315a82fbb767e6be568d2f8588bc41b7ca3cca0dced1046220a69205757806c90cda9e43394c278f4058b759bb0373e240faef13c721560c06dfebc44eba270003ffa51996a6b3f464f768acc0f2c877e3a8d1e42b9a6049a570d768f0e9bebfddf91112101c751c73e15a4e9ed17310de7cb9cc65c3ee3648bdcdeb0de1c2a0edc241c8a2dad563955b72417f2f8a608ecb4b4680366b816307a7b63966f777a0106d14afad60222097eff9257707449827241c6b0b2dc44a32cfac9a5506f54310cdf2806e3017671ac062e91655ca6f0f9d3be4d95921233d77c8c86518b94c319bdf25009bde19d47d5cafa764f802e94f4fcd4063755d3bcc5a6224b33ed6a27d3839213d8804fb1d18e55c64fd070bd2833457d4fca8b78eaececfc7a7fad2bf1fb2f007bde785452562a4201ea524129685aa7d4a6d5063b12507880a0b0c39971baef9303f0f1227810f9f2457f1d1f390f025aaeffe518682739412c797beebe440e194f5ce7ed8a027bcea23552cc1a1c175f7b716117e0c2a64d4ce695b4b55f92d8985b01f6cab96a25476026f2eec69b83fb445875bf54df507159ed00d7b4c020cc526fddc55e73a01f7712bb8daabc14060f51b412439d08fc94e8d90985336b747f933ee4e174ba8e5dc9f049eaaad832f0c2088bb8cc17a95e1dc967994fc6536828300125555b383ea372a65ed9dd5e92348800d800a0ce0db784216ccd65abf173db327515f7a1e4cad57fe33ac3fc99c0ab80d09d31ecbbadc9adcddee61749388a162495a26ba903f1391e527cfef2b696f8fc42e0a0b3f89fc6f86df62dfe564cecd3f33392b1fa8e68cbeea386827db74ae65e15650c3fbb7d9208e2777c9e5b4a2fbc7f9a84037055709912c0db2196fdc8bbada2160ae677ee0b39cf2bc73653597fc51eeecc70ee7dbea5eaf8a2f9a41fcd33bc2d2c19aeda8d9f1200e8baff73a84ecf5c18fa44fc4827c8938c65a8c79afe26a07f5dc8ebfac1dafeb9d2d16cf5741ec7228e21eacc6e00d258c4b0d0e2c9ac9ffa849b09e1c35234f0608841d5b85a5643ffbf6c084534b503ea1a9017aa008f1c8faa780d6a3eaf5bb69481913156989a499b75480ca22b8d3bea6596100a87b23134d65272dab7770a29f8839d09344982b5d4121ac49ce052cdea7ce9668eb4f3db3c178daafc190327592e9a5a8720c583a7716f0ca51cee67621932c9628143eb40eb6538e378214d8371b1634d4f61a16f28ab147c83cf865248bb899444a32a101b92b49d1fa37e732bc3134026b45b30b57cfdd7754f5368ebe2761f0b1cd3f92542b85711d5c6d56086549709c198880f6c1eae322852ab4e7601971006967e0a869d6a0e764fdd870240862059f1532df541f3a60571c2d00da0d4b67c4002dce0e197970f8404eb19dc3f91036a716c285d5a543a818f1cfe85cd760d7168d3204146ad470f033b2dfb05e422434f36eae7bc46d7aa434240c578dc291cdca5bf2ba94832d37b8977d2401d3d358fd54b68f94b7108b48d96975608d9cc7cc2420911c2e17604efdf396b886f60a57278860d84f26ceb28a7a340f36f0bbf91451b4dd5a599eb661018dd6dd3870c510b251d65006f4e51d1909283c87e086ab3cbeed325a628fb8b885890bdc3062bbd6bbb3ebc59da5a906f347192d69fbb76333099d809456ad7a5fd4dc4e0e23f4473ca9167065ccd60a526fa88e550cb40515804465261df071cf8620ed13935a8bc77db8e231c2adb4a7fc1460b014afddf47466d00093882349aaefd7e20449fa2bff1dc215e0fdf65bbc2555bead769b624632211b05c098c932fa0d203fce526698caad71b897d7c7d297c59bd51dc816b00d03fdf10de774afe52655f14a5c00d9026fbc01878436b5560dae061d220cdc8ddfe5a81ab4fc497bda7fa989e589f3dc87514ff57bf59c099d1787363bf16ce81b1e0ef7db27518fa5ce332165ecea514f7720a84382b6f686a919178acc5bc5b46aba93d98f48e65b16a0c0e26c52b7c94319fa210920dd7cd095362032c6c60cc463b0b5f6eaf70c66f3b8bef88f2bba8b14f5c971b12d90dfdec5894a6b030c08a4e2d6094f5813d596b084f018e45abc6161a1d6755dcc9b1d2b8d2a4ec6cbc827267ef79ebf5647017f6843f6022d2de727fdbfe3e2ef74822684c027b9683e384e5f17f29ac85ccead243198d4e64db77515c2fec030cae5537715b5c579468d5f724d57cd3027665f55ac1a656c6985295aed5ffb5f83d7a294754ef6cfaca603933eb642f3e3ba9bbc2b9192b4a24c660470479c8bc2ff2bd371878be2a60bd3c017f6dbe5a4c7e7bd78278b629b57b909090bab7df5e763096974cd730da560de9a1bd0fdccfe9f5ef9
+
+# Valid signature XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg =
+PublicKey = 010000014dc6e78c10845a071e9ca6cd1ad0d49a955a6305c7071ef967efbfd317563fc493c6003c3879279fff396a7db158859ec7476a503f0b349b65ae2b01f7c73715
+Signature = 00000000000000ff3dcc74254edcfd0e54170dc8ea77fd8fbc6a3107ee2142634ae5f8e6ebdde04342fe40867000150779bbaef0018609d7d9f6ac2752f06e3504f3ab515913f236375401048841133ef08cd02d3c299c55bcc2a5da1d8e8afae90dd37ca42f386c19e75c197f62368e7d322a6b479265adeeb246474c240dad7cffd613db90de9e7fea2cdb0817d4f97746ee8c47fbd24a6e724391a35e36b7d2c023bd2f9a0377da244b1c528119d835e74e85232e7d870e994dc779cf3afc3d724cad973a6b040abcdb9e523e191891191bf3c35bbb1df392e389a36cf716d78ad7d309e0bd0b5afc0754d8b59711358bca644de8709a6d3e6a0e945ce8640b8719cca9587373e4644b29c16cb5d0559b228ba2908157c6fc01e4c9fb80f7990cadbf98f5ece46064dc1f5e5b1d6997eb60f41e0a5d5c1f61203d5fa8b210ba584e3d41ff07aef678372efc1a399f6fa2cd14bc0026697f3322a360b5dedc9019f92aafba5855f433c7393e9ee3f4f901ba8e86815ef0c0bbe48a7267f393c012250419782f966b59e2d20ffb0639604aed8a262432d4655fc4870aee16c3a9330be804d6ff3efb19cd50f26b41417595e4c04046e27f2fc2b8ee9e1b7ff5d57f6baae30dc12e71ad74a5699b0e173a6b7ad8be0c0cd63901dd289337ea7c895ae45649875e2ba9b31722bfc227d8224fd0d00acb6b3bbde01ee1f4dd5eb1c730361f8371e650e3bbc8768edf3c1af17398fcdb824c9e78bbac14b386e0a4358a901ec9bdf0b96201fb791ee8e1f5bf1e0dfcd879b4e33dcaa365e96d311fccaca30b024e4ae6f69381e691c81ac716a7afd0fe413259cd9c4e35e17830250e008150dde9b3e364b3535037bb7b3f69e10ad5bb448920c6abc6ed28bb086f15742ca9efc746b557fa8d35811d5e24a3c87a25c2eaacf70200bd2864cb7e016c607f119e0f19dfb4ab83821903b73888b305223c651a372662717756572c9ec3f5ca8e4f651c37ca090b94ba28f0b012d4317703d15f133fd1e87b65e6101b467fa409b11b54d841eddee638de08609e6b0f6f4f8e124049ea1a68767288d61db374c60a1e55c3594102fad6ee7620cb48ecb874a66917e6981774f9c05d641aba65b4ba6ade7699d6dd905e19c82779c6d3e12eeb38adcac55f7ceb22461ca1b3b97953ccb226514f34b60cad34a26212b205e52dc2bbe52457a729b04501d3d14d6d962a453c4a929fa6532b7972ce58b2d6d1879028f7d8031b19595e4b95ca3c7634f83e7828b009fac87ac0cf6eac2d25935e6807b321ab37846bee245d9a1c82c04ab42fadd35ccbcf4bdeb82b0f203e8cd6b4ac4cdd84e91e869cc6bf30d06073d63d8141a4f06960b5757223460b47a3c31b2b9f5383a0711d8a32ae26ec2719cc60dc42a7e0222f2b12b0d1c232630e77c90fcded01b0603b3286a1f0e04d4fd4b543c748875e7e0fc3fd6438366af05ec36b7841d99693f97c65a924656d580e34e8fdda922e7296c412a7780ed432676623051af946b9750baa31fc9ef0070e542fbf074bbd13513c26335fe16d2a885bfd7e66855049934a43ffa8c574b73cc44f4de42336ff1cc7f85f34cbdf97e8778417b519c3bddd33e9729e62298c3455dbd356efc0dcb3b41a3e00adabf62a6aa32239a22dec7338b1b489cb07cd02c1037e65a65127f5ddb26f527665f6f34b843cad78b11972aa14b384e290353eba7c70b5ed6acdbfd12a731881dd5233c1493f5bbf5e8703dbea39d65952dbd67b4b826d7f8a1171f994a934eeb845b3a27ae313c2553f560027be388c5da0b8bc0d79397b965275890ec2872b223de5701a82260675fed21129408b3cc4eecfd89a617eeb9514087815a74da8e4a573afbc4de0385dcc06680d851cea3805cedf31ed9990b93ba19f84dd07d9a4096bcc13c56ce02085678ebbfbde83714b99d1a1cb2bb3333016ee165af62f902763c68c9ed0826226b5bccbd41e948d9446c04a1a53f55e6f0d660b56cd0b35229eefded6a994306e59c3cc08e415d3959b3b9a3ef09bb1fc70119048febacaa4383927b2ac58c5cf0b39a63a2a8badfdf055d65c0d05d33a33a34a2abd99afc870fd7223c50f7b59ec64760c191fec955f45f8c20875b4ed2b3ff1ef6475ad080506f19b9963927234066ce0e7d0694295206f7669f0fa8a0680088ea4cea15d9486dadd3bccdedea0be8b06bc5926ab0fccb7cb7bf7563b18db0d28785757825f3aebc1bec8398513c904625ba3df8e9327da6ad70fc7656fe9b393e9de47ab9379105b12d573a9c8c4896dcec1b915f7f521534a84e0968c21f85a92de9c857b9de193547ca60fe7405878e79f61bb734acc4c2dd17d4d873fcf2417157538405a93414299be3cfe72a8d94f6b3eb1a9fb712ce46b4af0be8a368e6a8e07392b6ddcc37021bf65e29c306c468eb8753da38e74a1f8e295882e141f4a3b988d1d73cd40dad8d9db80f25fff54d2d047e98272b015d0ef010fd4f75fa492f0b4cdd87124fcd7820558d27cedc6daba8028e5320309e5fbaf63c3c44e9b2dbe2c84be529c10e72c690fbfe7b19ccea9a7e9c295e5667a14a5d2217140e131cba8ec9514b6ee2701e0d553558626d0133d5f52f1cc5b8659ff2d04ce731932ff3b4729a18f145a7997ff0627d4c16c56946afb0f8aaf9c7f10b841196a9fcad11b079f8e77f87f6018e19eb3362a7b57a4f49ca5c5a158935c59a0312275e6954ad18d9c8d8ba43aa1069e1603e8cad8a3c53e284e361987603bcdc7e0adf815a4b94898be36005e927934941e79d9415e36bf761c9f0a42a94834056f02ff15ee5a4266a219796d02b26b54e38c7ef6274b6b87bab1b8fb6a190742ae9be65fa716870fa147a1ed625c56e48e8747a3383cb37dbc03684f9ba976eacd08800944fb0159a3c94f6ec2516de52494e1ba0bc1981d340af5948b1770e4625fc227ccbbbeb49df2cacf633718136a081edcc69f8544c01913ae981a6d11eac42fc7203ca2d0fecc178caa66ff96d3d4b14c139f34ace0a927efb4ff7d6d6dd533c62a2bdbc168279731a8e953cb3957d3a640ab3030963542b6b4ad9cf375e03106f6467345c1ae9168ba9a4d2118b093b4528a878b78058cd2d9fc85ac7e3be64b0d9a1420487560709f220ebdf92f3e3615bc264c7bea2cb2218832ba5034995b2dbf7870688c9dde6e12622686863362d078046d7566358135f6962e574d6555f0c55f3831e989f4b435491b3562c6317fe4506c2fd7c65d0bdb7bb8fab2ac57ef636dfac6c00b5d8ace1191e5cbe3e8eb798fe2a9ed131637404968c770ad38de733e01c6d8e4cc9d0770ce8ad8182d8c5531c9bf9aef65bd2e1efab4de9ff5e3d40ec7f96709986f8b01b7fa69f7024a4e9e0d25949346a430033f91279f594cfcefa07cb93bc8118af2a813bc968cb271259859412c38639d51225b3c278386932f0c6ed47fa45c2bcc073d8c5d1d5bd6ee3c91e7e389d52db9a5f49bb3e5acb5f51ab7341cfeac31e53f8cb8bfe5e1a200ec
+
+# Valid signature XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg = 426e562ab69a03a893f56910a2aed2a0618da1e365167749e78beb4997d36dc054f34225797478a5153037d4154a90c88836eab69a7f6783237143fdedbdb6fba8aedfd98d3af16fa293660640163c0936ae072c0d38772013b0bbf97cf44b64c44acb62803a7b2b374da627e47a1135782f09537e873aaf5bb54676bb5195aaddf73b64fb9b32f3054829dc0dc0164e51e9efa8bb5e9daafd97a85f0b3591e8c06232e6e54a3606cdf93a05df506905fb69b7cdecf62145d5d1a97fcf055b69d35c07861bf3532cc9bc78058ef266d8c98dce0af755c84fcefa69468d4a9cee6effedda0e0263a87573eb3e1d9f765083c5fe5e3598caa2874d065360e7f254fe6e3c3acccfe63ab3
+PublicKey = 010000010c453405f86998e392032927cfea7d8163910d073e6876ac3238fb5a71bf4f853c7843609ac24f4f42e6a26626d09f9ae4efffa67e63f426fa959268b99d5fb6
+Signature = 0000000000000026b6fa65b27c437b4733b101638b66e794fbc71434e86c504045c9e63826080313cb9f1492b422497849c232d261b8e186402303eb5129853c7251d94020179c9408aa788572d9bca24cb5506d8f2cfd43179c6cc90a2fb84e15ed8006ebd99f3d0270ab03ead7cd0b0023252e75d8233d11d663e2977c4b9bfeda813c837361ae99963d0898c793c30ae933ed623feea77f8b99cb900363c7f308261d73b3203c603591b777351b594d2ccb2e08a8b5cacdab4e37e46f48d9ed8881bfae414f90bd5f842782b363bbbbedd802d97b77da22bd2059ec14e8d8f366fd64318e72540a892202fe7cb31fdaaa23a6f7d9ea55dafd2e5b281c3144fdd0c792139c67eefc4ea1aa5493e3cf742a37a3b26dd6818bb424ec3a21ec82e891cd7baf869c5c7c0c6225d3e44871c84292e63e28a8fd88e46513eefa9c7934788c1c17364a99d513465876282cec1d69cb471f7fd409811653c6d449d89ac8ece601a7b02732551969efec7e6e3a5ad6620d14e14a667bc60a8aac1af9f415e3d14ddaa7a54782716256208189d00e3ab612e0726b3f359222f4376a4d09f275eaf2a21a92fb39b0b46822a52beb5b57162d1aff889ccd84606875972164a97ed80a35bd80c04b84b9389e5486adf956ab4350fa609ebeb34e8d95d1737af2125698076d70a0b7e63bc740bb47a552c54acff2b09daeb063f861dfa7bcf4c4d4b12d673e99c83ffe09857c19bd3f1a5999ffae789ac9e365f22f44548f2f3a668c11ee177117b008b9a84a8b26869d95ebd60b6308cdd0299c4e9050ffa19808ec84388075d620311a80f1bb53b26780e68f515c3074395c4efdb1eb4e9aa62d8c5c1050dd4da170f2d5fb4a9b5b0f47c12e10576927315fb8840ca49b412e1b2bf34591b5f2827a8b8d9e69851f58fdd8ec99add99b424a713a9e146b5a208ed085582dc091b24f02576c9a0f14a07391ab8accc34dfff9c04f937231dfe728680803de5d361e9147cbf8447a0a91eb153e09e3414564cc8e464dce04db40763e9d88750a938b215fd398b628522de89327d1723bc475a3e95c132d69381305f4ac6025fc851470e1272564d4ecb608c435bd51df6bf18baa668d831c7f72ac884d817857bf10c673552c9522ca6a9f88ee2ea143fc7f2dd2002e909705b4b316a9642a8c0b2763f7ea0732327cabc070869426e37682b17a54ffb356e4ac47bd265ba5040d10da19e6d8c4415534948685e2fe5d65fc9b18f707b6cc0035206d9dcea18ed9e1e5654e20aa91366253848db46b3dc1bd2c25b464b56f584c67c8c52181bfab96a606a359bfc9787b95466b4d977cb678507d2107cf37d9310b7a486d9ea54fba77c03e58211434c9cc477fa81ccd7145e09aba1fa663989b35880320015530c7300cea6c7c12300db7752d0f292f2289fc894b2eb4c37f7bb7ac1bc25ee449d58fbb88c655ceec74eb2eaf8313b55b2827011021763b1a5bf155120841e7247d64ec9cb4911093dffb646f84167152713e1099d038e0abcb1a2735156216d8b8a4287a83e7df4df597db5985b3503473b50038d45dba22b2a2d28aaf6ff01a3f82df4d3cf1cb8255801970b9be896cb8f376ee4b6a00b625150d021e15adaab08f7241029b39540c9dd812adc7cde7be0e549a48bba4f9783af110cfe2a36ea18f6d9770e5c63b134538d2d6c9325f6c1b694b1a24ce3ec37127707a85a918df93f102c397ff1f813e8a4fe3b6ddbe6667622ba03253d6d1c653ea23c4e73bc302ffba2c76051c5ddb52d8eb5a52a8930093aa5d7c7498d237b9e8dd6c43ab6a5960cf325ad6234f90bfaf87c79aed0fedc9e6f2fe57ea7f5e880b5723a66c1450bc9f64e72f6e4a9721288331b7f000ceeda1399824519e7f3286426c070533375d8576d24de9424b3107037eb3655bcbcf78571265dd738a03fc4955805f41660d85f3c2bca9eee16482aa164559a021515dbaf7141b98d9457977452cfddc5cf0229ce67d965be5a5cebc47df419d4409313d12755c80bef738b9fb50c115bde411f0d14c43cd151db49151de2b9afb6e33ec29ef34a35787297408a2668462489f8e02ea757dfc6104895736af8beab13d699de5cc26555367858e472cef6015f087230ceed8ae2d61688ac3924eb59d9d6eae5d015f794b30b79bbe9cc9e118316acc8be7ab76c47635db57fba78e1fa70b271b1ba0e7584ef271f46df299f9ba1d95e732a7a25ac8c924383517115b262617fdb1c7166347a2af41d7ec9f428358e2b06ee45b16ce7fd4d1ce2325c341f691f75c0dd872af23940b1a3bd02350dd868dda3e5f5e8cba4bd6bcc49fae87b5169632c1518cbe7e7e6a14f36fa9756d71cba466537ee9aba3791266032be762e8a4d4faceec95dc9e0b28ba698c2385c375ac0188054be756357a469d21911056328c54f5c87bc8332c899814c4954abc4fc89a00530c1fb82b0910f560fe981964bf5be98129962346734176b87e6ce3a3884289c8b2ea509976d064dbb340ae792577776297a27611a9289f91ebc059459ecb3b31d606be7e4572876d0c5eebab29e693b795578047f9fa80b67cc2976a49267e5c2e42e1146e077db4bec536797131ecb1fe78e98dd33b49063e2cd4b550c25112cc436c4da4af6e41a2e69724c27eff6c027a5f0e3a20b1aeb10b8b407ba54aa6b3e224c0cc83d2e6c46f33ffae68474a189cf3bfa2b247acc7d1437d15574c35368deec12960f20ef178c77d3297790eecf0d1edc8eb77587773c418a8bead525dd47529e5d0582166a2b8dd5483ff39f2b1d31b2a264317e9583f6ad2fc16b53e874f4862a6ccdf17bd90d6f0519d8d7de7d72ea5e0e2300cd46f2181c261f098ec934679529412d678304ace8ee96edd4ad034ab154dad3877771626ff94a58e2718a18a8fd5420924a9a7972ee3efef1b7e6a61c08b8fa4af48fe9179dcd4efc852160b5bae2837e017e0944b1c0cd1857661fd18c694d463901edf9e753e16cd85bd8d1884c0c271475fe4f01797ea04a1ad691c146e1df60d7681f4a077474e5522c194f597ccd5fa074ff6964c69316deb68a6e3c59e022a0c2fab6c322b84210eaec647c5e6c07f7de89c99179c30431ca3285b76448f7e6ea0d3472655b9fa51036a572ed68b832821715e62b8047a15ed4b6f5a73623b725e2060b70b601bb65c432dd91e153d079f52b2aac7f1597a7e382cae151309bffc7c0f09ebd82c4067f44099d1d844478ce884d92af7205f379e4485d4390e9065488c63a6012f828bd32beddd5d0013ba3ba2045e52f8de951215722c9a5bc09b266e9b15ee01008000226ebf3092e3b4f0181d14cec7a9fae1501d32cac56535aaafcaec5788fac6a9804fad29cdb23b00d01e7b6d9ca3c94ace2f3d3538613d6b539987134c45de4921e915cb5c9663e375d44108207e7cd40a30ae617d8fec462ce546ba290826f947821ea861fe9e81cf6e792767b89fe4f4f775aaca3bd31d3939cf5a7b4395cf84157391dbf78225a1c7dfbd1a563b
+
+# Valid signature XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg = 39324feb180aca683d995db187a075a910d0
+PublicKey = 01000001048a2710a8767b85e8854d79bc9633c8e915cea2dcac106e81f9e9c4c6a79d50b972180c8f69f448e5b416158f9f24ae9b6e9a103484ef013f7344c6927ada71
+Signature = 000000000000010fb74af4660505cb5bb71305f25f9d1f2f356ec26cce71ea1e5150e3beb541c37c71c200bb585d97ca5d0367334fa9b9c8535ca4595736eee4f35bbd53d9d9e66e1fe2fadac7833bfe3b6cb45c7bd445612ea46f60d29d4b53f21f1dd492bc2d332f63d76bee910791b3b9ac6a737917ec5d3a5fa6290f3ba0355679498721c30430d0983c916ec75b0db1b16ee5e3494b8bfca8d96781d121189e6fed577cdf48baf3d5cd78612d7eb76d5669dc9acd7154a334a762af31055f7941a10efc3512983949ac35abba62ef5d0e210c341b6c70c837dd8ebb7598394ae19878c8a11e38304949b50371709ab0e62f004c164ebf100f99ae80929e92bcd6d2dc16517495643e1ca375eefe7e3e6eef99931da2eb82ead84352fd51364e119af838583eb454db46868a0bbd1ef786abf41f178e94215e94bf95652f68fec88ab3b8eb4651556f9fa877c0459416e6f24b4917c9d97f1315ad7321720034c9bcee34707bfc01b033ce9fd0e75957f364e7a518c9ef061bfc613e39d26c96cc6d2f94516dafa782bc1967771fe14bb28de778dfc3f127f166992bc13e0832e80acde4ee77810a1c44990d2dca56c3b6dfd5c09452de72705df40d96f082030100d9986b9b2819a405bfdebff50ba40efb6206bc96cbe8e9e0f0204c28dce7de7263df38f335223d2af48cb42cb7ec80e5e93894e517194b4103d4ab5e2194e1f7077a8a3a0b1b509c8c48d04b0b1a07714bcf41eb5f8a96f6baf2a54c0d0254643cc71071d9f02be94b1236a6e8ffeccb8c602dc04d135e40374ba493e73479aeddbaa09fbd18a9499dcb49db853b9b39f8dcfada54d2c0c894406edead657c19870d185f0debb9e5e03ae5cd93ff0f60d689a8892994ce4ba65312277ed43259ec9a83c3932332a7c57e75b6eae15f5d0627de0fa9f67640e25fee21b75e376ac95bc1c8a4c6eb8cc11c76f1f22fd7d07d7b35d5316a6de6488eccc16a6ffa4a7d57f4f2ff6c35025bf61d557290412fb74b18b9db50975f4b4f0a0d636fa317b633e4504c7614da510798850ffa1460d0f48f1e29cbf8f5b2e4b2056d915f66f32db958383c650f4fe501cad32f23f1196523eeb6f592c0a563f13539f66ad637f5697e61c5013b8c2c3b4ec350ae3e89005b11cc0e9b43c0e56c9e758b585114282015273e46ad34375ffc4a33ed94eef5e7223da58723a9f8f31338f1d80f45271226e5a5756331838021c7543eb940c25224c04b744bd94bfd62225723e9da77fd76cbe3adf0ee2cbd8b1dd9ab20472bcfbf8d07f606cf35e2cec6ee419bc71702cea32d7e5ab3d029582ad4604795f84879226916fa911d5fd7355bd60f05da7d03915f37d0e7fae4fe2c7da5f218a660194a443192bf3a0685153d20283dd2a4ba581a341d9dde3ef626ffc2f97a59dc5531826531b20b350c7e4166fc417c29d4bf12af09d6e2bb4f8db8519c477246271d9fa06b251c4f9f3d9cb3d98cf083836991e30dacef304d6911075ac1b197acab26902bf2e227d696ade6aa4dfdd35281e7f97f0069e24f1bcd0498514e115233fe93787b745a71853ab7e8ab414585343d848dab5c5607b8e89f379b9bdcd8485d66b7920827ddd4b2b70a4789bb29895af9acecae46a9160270b5518bbfb15a9d647a7cb1ff7bd20c5fa6ad3a36077444b0504b02309e34336f81081562f12dc0dcf93f0d7b4b77954114fe08319c8f912905314e8440039d2c088f778399c7104a01239931d84bb639701d5b93f794d53c713a6f7e6574803c46819851f3b6473736d89684c69a2eac49beaea4e335714bc99f8950d9142c59e3c9e93ad1f74457c28a62e9a445a7bd294aa0ad03fcc4944adc742c743a34fa37d421a32d461f1e31648155001a9f2010057c5274f13b4dfb1e0738e435c125d3d83796d3497a5e860e8ec8501ca976a375cbae0b09537b535645bc6810d7fca54dab6904fd88c6356ed4a3f12a71010db8f85382db284b91bdcf547fd3827dc14b04a0c5b02ad4df7039e779b4124bf0253d25faca04da5c1da7e9d8a1d9e7f7df6bd695df69f3f76ac1c8c3da40d85045d55e463de7d3db33237a4874be6b1ecbb10d7b18df9e979b18e18b5ab05ecb14321c01c59ecf5bb9842ed0b0a683aa7f46f5145371ce01a4dc5c0725054a0b906ea980c687387cbe4052001968482950ef891543f268450fae1b8fdc0d1b6656e252be12084b6377b5bfd3b04c19490beb6211ef877e9f4afffa34e79743509afd8e32d2103b49c39aa637c89ad44c07739294f0e34b2c5c40c3d8a7c36c42c62c6aa85d94544fab9d937ba48a3984aa5a52501e5b01651d0761148c6b4f574ed5513bd8ce35eafd84edbb8993850ecccd7b1ec0c26d6c2e42040d1419225836d25125c77d8d79dacc60b73855850a7152f3cbefcafd7982a6383584c682065234e7b1f414617661e21ab7ecaf6e49bc8a31cd495da2105962c97c29050f8490c7e2f5181aed2da3cd6381ca40ff45c0de62ae6827a95c19076afad17b5c3e29c1962b8a26fcbccbfba07e317ef38b2eb847cf1b2d01350b2338ee6ab2a936f48f0f18b5279362c8839a81381448e709cbfa738559161aafb4f02a0ec9823d0a9584e2441babbd99f7a3d04dc66ec101fc15d975574ae3cff12ae3907853cad7062471913ec86c9a631826c2bc01fa2243ea23823094abc22cd26b8d73db4f7ad847d1a1c27633f0d321a95fe469418963baa65e8140158c68413ac483d1db179da6114326ffd0c8496c78dbf3684daad8587b5fd889a9a78cfa5922e93f6f309f6451c2178befc4e57fc05f04699d01bb272a32d1a888cc7f6f8380e1f736f13e2333d09d96816199588683769786576f8cfd0b7131778c97729a45947da7f4c3564ed27949aa42c2fff70c09b6bf7091a9291cc48dfdbbf13261a55147124915c0ba992472618ef6bbb7e7f12ad5ddd5e89617c63feaf0113c99d548a9f5efd8c366e5b3354c45428b547cbabfae75c11ed91097f56d19422588023333623085ae7bc1c58c539ef0b9561d12d4126541a244944c1fee1d7690f0b4ce7842714f798806f731db6459465d1d5eb8a1b2b8308cbee60d880a5e258ef4dafed37023eeac5dab635fb4fee66519321a67596b2cf5c8e2e1e793ad51d43a65220879b0fb56da650ff8fc0f79f35fbd889bcb103e8b3733b80a6bdb3ec58aeee742bf295b6d6b5e2a34673cf64df71fa4c8a49fe2ec43742e0dbd80eff49d7bd33299e4b6b106ba40adab701dbd84a53e51ac35f1c4eaad4a0ae6b32741bd64c10ebe267a19f84f94467aa1b93a91880a4a607467203e03be604280a49767c8d6c1fb2bf0bde03912396af8d27e97374fa355bc8443e4c128ebdc4b360b7e7eb92f691fa576ab0ca91f781507c1648cc48c8b344a6c6073b4a918ab8a804cbfb731ff93513ee3d430692e7dc16500d471e49bcf87bf16694d5879f16b0ab2fa3c3d824e10482612c0415561744b6b8c547fa1befbdaa1b43c5f162bc5022c45f14eb2f5e0ac
+
+# Valid signature XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg = 458f4d30f1bd34d306092e2de2924c259c3bf53de876188f3b1fc0b194ef548b3a60f874b7536d0b402b8520e98c8fb722f15c653d1b4fa63df8d891cda1e747f8ab9490b5f0b1b0e9df7f92ef172a5c449d4a10911d765b14221c70f8d7a1346b60e0ab8b6dd00d2792761b74746de071c27a83338b236f592b6ae75ff672848b34a3ca5b2783dad72e7029891c24fb77972bb4a7f0481547e8ba4ca62a0c8443acbe7d815f257ebc8d51e0dbbf1ecdb7e48e31e2ceef7cbca409da63bd3b
+PublicKey = 010000014639bdb1988d68d1e5d8a40f197f8bf5452cca12fe6e802efdffd3aadfc10a30fd60f0911ef2e5c670beea26bb16432f850ba97326f016fd124c504ff2c8f4d0
+Signature = 00000000000000239a8c3a32baeefea0556a954444367714d5aaec0b6f06177ec591458a1cfc7634e0b13880a079a9903c7163386b98db8c4212dc4441dfa456fe8ee243e7170fc474f15c28d3b63119d97c366dddf7dabf03ed962d19d9f835cd0b2e7e437fa758b1392cb35e7a836443ef670d0aaa12aa5da63313c6a78d48ce25b57baef0b198547118acfab5c54c5ab49249b5d817e5ce232511aed05878e82b4caa11e0f473237338149a0cafcddf92b1576f8a6357afd1f3b7458d348cc1069b34020aba4767bcacabe7a49124e68ba96e4131480ab1151172af53c1b1d6b9964c2b2f94324b155df7a28b45247d0a15f1aa6020a4a67eee2193a54e969de1fafa0a47270583c3f4af5dfe04860fdd532e9b8688f9048db6427bdd8fd2426566602ab534b030be76ebc292bce8e3667df84bccae5653a4600fff0681dbbeb511b4e2bddcf276e70bc1f856c09e486e02820c9085ba3262f080fffdc73da2d3ec73aac1abcf8b1c09d9019538dc176e89c3368ced88eae6d955ba3bd76a5baa5d5037eb80a1dc6e9730713f06c442587d9d33a5c7785414c92632bdd0dab234e3822423a7f091f51be7906b6e69ed81f2c1d400b3c603569136ae589c5808fbe9a4cbe677b378b4a3e7906a336b11f0e6e917cba4b1c6ede0846b0ba4cc61942b8ad408328733f432bfdace672ebc8a123e9034b118c8101b54a703775cd80c1c33db8cffe7bc02a765cd084bd7ce44c63bb544d89e968d752ac9d558b62f4c01c4e557f9b4735900c0435d4a2e230e9b2a2f6e5fd05e5694f3792e1e422a5f8c4ba3f9cbf0c7888d4d57a1c6ae496731da5c6fd0c3c231fd310673af5db29318c92f48cf6177d5b7a6a6e9f77f571573364cce08c6b6b7c8d400c334edf1ced5d28c6527a87e4f5564ba11a7030f90b0538e14e791c2ed7b10e030be90b40103426b6dc612da739a2063e4dbbf876feea7043f6c755e638dc8b637f0cd60862ad20f7c93693d10ce16f9b0a09e6557943532813559ac747b4ebaf9e1e371e4190b06ce4d105222d736f019027768022fb8c691cce42e9493be96fc37b093cba4a25fc895f3d7d9b3a5899010b287a29e18d869adf3248d0b6a23c6e24c02a41aeb42d871761f6c9d3563984b7abb4a0219633ab3fc198181d5cb4814d8fa40d763e6292cbe52b22c7c491788e1040dba0f195f5d36e39f665c6847d5b9c8cd6a39444e302f00e957494191bf7a0e57cfdd2c6571bf30a995b6e756e05a9ae7781d50daa2a98138e5b503316e79c4554e833cc2fe4ed959fe4a19d2f784972a4f6160a78d1f2251e5f398b6006c65a61d68b21301ecc5d5714e8a01f75d40e00cbf2964645b2fe53659ce65e73ebd356f461488437a54f9db408623591379586bc44f6045b0b7425149260d2e5d26be9dbde8fae24dc191e89108b34c8d104a13b73a27cd15ab73b4656f0dc85dd7fde957ab3a63d54f27869af740cacbc78deb09ebbdbed3b22eaee6896892699316a45228497e5241a8137641f1eae8d25074c72f39009875abb2a720eb43cc0672b7c7a9b8c9b9c0b062ee77344a886648d62aaa1293e4ced1ad40a7eeb914d64354dace5d2876b4dfbaf5850f07dc88994fdafaf0c2d6401efb4e3ac75f6112bce3db18c77262e4cc094fe32fa6fda096e95053d8a33a144a5847dd1d67d5db63baee9e952ed20c67e923b70a06d212dd6fe678b9d84b37ee9200e058fc939562e385182fd5495b324c244e4d3d59616bd3731015692058b1cfaf65b8584ccb12574eeacc335f7eb303d84a7ee5852a60993e7bff1ec9f47723bca778262937c90c9f4c651af84b88d66887355882fe915a150d15f39cb1328c808a98f0f78d6f79516ff258cfbc235d733d5837cae4365790e1cf094c2d5d1bbc9d137b1a521dfb1b0f2aafa950c3bae5d4f238e85864c8d3e9d05fb054fad01724979a566a40f936df9606e2d55f4ba513d429800b129508abde28a6443bdbc427a3c21dc00343b84eb3fdc0f32969ce7fe1c8cec262ec7d5a9be6f2d07e788e43eaa05e06f47e3bd49dfc095f2b817dbbc5db9b9eced5e44a9ca7ba17c44c226665a5f97c5697adb1d67066306011f2bce0558ffbc2381b0cd30250087670815c605b3a60d8d1bf9be0bcc8896f6cc77c79f2c821835091d0d0e1b48ee24984b395e728cff8dda73a2cb83c53733cd01aa03c3f6799942a01356e78b5b5c4f9191a07cde6a786b6b7bf288600f19afeb90a4ef5e6ac433e0d59399434139b92c5c6474d28c8028adc76b450722bfe0dd2c6e2b4ff48a8abf5542b9ef75381ee2f39419080f55a26f5fcebeb10e8d979179a27a108866c494dca245b08cfee5a22fa1ff862e01e635cd1192495bf67538c45e0ef8f6b24fa47347eaf4f4ec2c55dd144e0a1ad28bfadda0bc344ec32274d038ad31afde99f94375d0f75638800aa7fd73a84ef4eb4190b1071b16536948336a32234abb17f6758d14cf89b4419ca04e02d64a2f060d9c53a8cd7b0387542bd0d6097739881aa9b6261827f4837366e4a9a47ce78f3c897a65417b94c33fbeeb4fd1b46f1549e84a26236a22e194a6d38502db9723bbd1368c79de84f5b3abffb1264a2a1e3698b3f62e40c22c0c0c653221e301c85de15449226764c493098d3959757dfd4daf6832c062364aa9c32b92e17a433e8f2f00b9ede63115332aee654cebf492f0888d690015e00e06061dddfd5661e28251a9d8e3b135ca8cbf9afb92a66e31d3639f5afe9dbc99157ed09da653b23689e64b87b93bbfccdde12212cded6a16351f2792c62a51cbe7b67ae5a4830252df97ac66aeec95562dd1ee0a004f7483bc171d463f1bd125b4f3f20e5517007e9b84ffb3602178b5e798d9e179fd55881151e13e5e6ba3c7875b49db54e6c19b1321df4eef0c2878665e52005c285333f91025c56752d51f6f7d5f3cadcb1e70c0d5a42fd42d059b164be984147fd546038178faff004aec1c4ef5c1580881a4a48592730f9c6c51759b37c9d12e6fd941f8a0ed1e36484b94478a2051cf953266fcc3ab37b5de4b8e187a67dfcb639f061341b946c09e270ada4dcaa70b16c013348fdecd782f488391c3f400bb44bef747f660ea419d132c2f812a43b8675ed3dc8a54eab3d29a5bdb26899fa4bda297bf4f63400b268d230a91b8c77fc7772d81cc56b163420039ac31c100209cdfe6174b52d8d41d0ccdea6cd45ae2ab8b9f13bcdbcf44495f5dd7ec827213e6460bf65530a2b805761369c95bf7ecd9cad67861b9746f6e39a7ca4428d8327be0c728ce4bce8942984b27c148e15913044e6c106571f7049d5be55f0d9760a14872f6f021e353f6035ca06a4477788ae662275a60c99600590f04873b5768b921b20462ed3ebfb79391c28b5659b82e72225e913516d751c0a638cabba544f589b71ee5259073cbb44835efabccde6578fbd0ee4e79e9b1ef7834656c1ce74f37fba61bb184b56c0e6354b588a558a5d7d1f95abf96732c72f6e110a3e979105c63ba78e03
+
+# Valid signature XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg = ebcc54f09738db1c5a24e315a7280d4cd8c266ee1024d3b32851fc49b7ce05c2a43eca9bb7d584635eb2ed538d86d773f4bcb87a3df6f595bd1e5b4c8b03a70c7bdea8f441058b133dda4f409f099a9b68b6dfe96de5ac6869ad5aaa9cc8630201c8df17f75202ee3069e5f912a88e0539fb0b04d487949a1f5a4ae192e18c24f1fe24dce1ba1c00c3bcf703a547f336594f87d1d2ca98a9096d4da24725601b1752e7d7f1986d9ea7ebc4caf50169065d05997ea6dc1e6937c1d7aad19682b10b56f8ac4c148122f9e906ac21aa0c3237b41f362cd869e9d25216c466f4d2a885296bcae2f02ea3
+PublicKey = 01000001e9e8f66300e3d663aab7e240665dfd0e5c6701dc1e1820f02170cc0527bbc38cadf2907057362f5c09284945ee2f6852a878517b3444898370de4c7f68e27beb
+Signature = 00000000000000e1c4d25ea7bdd84e7c95bdd1d3479df59f4050e1efac007ec6504ae2129d1c2c9e395de20ae2413476f3178edf23e7fe7d816cb958248ec2994d3a3302fa436648a26886c2745d339e95a199c85595ea4699b378a515f9f4cf14bcc49c5c5693dc3a07c5b3c019da848de6808d1ad430ae98c765fe80fc8486f42846ae1e34021c9f0ee12a97f1d9149e487b53bb95bc51eae5cdcd88976ac845cc3a806140b747f8ae49e43b641a79f6bfd62d101a0a9359f9084eec4e585d58b1e6fd879a075276aa24cb9a9338a7d12102237a4b28ee0308d3f2ac5859b8109cc7b98a58381451409367bf5d2760b8505115261b46dbf1fdb38835052f1cfb07822b8dc21c6312e692bc00d31bd4d3f63bfc9890e6ca5bc4a3f8ee66f44d8298e90f97ef2c433451dd0099fd17395614abdb1e952735c376a8d1b3c6b13d7c843a805e058ba87a9504ecc526e5f87f3945a98b84cb80d55adbd7f6835e3e32a1760b79bee355d59a7484cda1ec3634affc971322d199a189263207ed192b2a97f2a56e241df9bfde52913577f63a99f8ef42686b31a64c5f30e2fb717b4d8769660905b3d57bbf5e6114ee8e4a333bf7da7a44354849d6166c62da0b26e8ac662acdc9eacfd1a82298cd3e1ceecb90fd2fce0c8639cfe768885d1fd3b8de48b4e68daeab8a6a8ec569095a8b6d9bf1f72e0e78859bc7040cc8046ef767ff4ee3429bd6370674395eae75dd016abf7e1065655d77aeb47fc39282a25259e7240a800dcfc9f911578f702f045c531eda7a85e60e26cf109c92ef29ee860b4109d7f153d085b9662ba4632b1f24cd0d8df0342067fb0b7085c79ec30c05cca0bb3ec1f489fc5593194a6100750864e94ca3e6790476d642b1712f4196a191085fd4255bfe94ef581d931f29c8a4b4daf57fc9b91dda3c61e1d00e18f3ab74a2838d767aed7a49ab6463a0b868d5f4c46c6d7f95f531deda2d4db3e9e9c398990dc894a5743bda0556a753b7f6a54ce4188dad5db3357170d98dd687701616e2406db76f13a2a36130e6dd482fb7b991aa98f0426bd5d1a3f7eaf1e499bdc32c2bbc5b06eabffbe05615493916b0f9150ceb70a31670e9c382a789f588023b1b1fddd047f6c3436f382c924a5d7e6ad253a2fe7562f454162c07404db2afe16d57c91d9a185fcb53b76d4c94212243aa596554db71536e6177680c42cd11e61104628ea85ba17458038cea0823410cdf2d98169d2cf7d3cfe8a4cd5841b79b505281ae1288427df488ba17487053dc16ba4f03d027b834cded66eb12ddf4eed57912fa41f04f1055b4a5f9f9578308c7d8f3da60107fa901271ed11b04d94926860a1c8bf116c1edc90f653e4daf52603f6cc221a0ba305344bb551e1c08690efd45541d28f4fb93b6f27faa5152d7db141def2b13d1b02a0f28d92d3064727d42bddc012665fcc4e86aed43d3bcfaa0202099631d5777fa8f80ec287e286057a03630957aa1b76bb670a78312ee249fd7597a71585d30559e6ed65234e8a6aba43c79a2a9a43029234aad79c18e7e21e194e7484eb6f415544c44bf507b907b628f077766c346a06f0cfc737ef182f2effdb32f19057e272ec5c8298385e40895951207c6e4d1f2dd51fe4975d77325f91e38262a3b4653d1784a5bf1a427c76e438d7d5d6fbc08f4ed3d4f1ab0daf4a28d2b32bea5efbdf03c86685aee220eddeda15309b19ad0b73171d80a4f7648107318bfc6dd0f1add53873840a6baa0dd727c064ecc77a7a19e39ab6764fa21cd3f6603e68724f3b0a3478c202a57b7f79c7bcb52c4549546d6c273669a9dac9d8c411b71b7e9d45ec4661d1c9139daf05d0177c64634fcfa6e7e7dba1a5cc4c52fbb34501fb50185776a116df72911f490950075ce6317e3b41addd89a4c16711e3b488a0202baffaf15a00072b6fdd8e78c52a01b91753468049540f2ed76e6333fb80c0d1a49d53859b5b273170aa3b1bc991987c5f9b22732919861a0d9618b34e0dc0f6694b1e5b9bd981a82dc2885ebdf819bca75faf6e51dd9791f963184c407576c04a35281bfed681dbd23a1e53105242d257899721ba6b69d4a612735d1101d3112a9e99e2ca6140c8614ebf3312ae1663b1a539ce4526e3a3baa15cafabc98df07577d88c543ac0236da8e3327f6bc9bf59a4ebd2941accbe6d6890c4df99646ee84a26cb63f80d28b6f4a4f2d14ae159c912bfa9b9222914e47a55b468ee64b1043e62f09a151c195175b153d7356abe67ee54d09f8d5c1a7b384cc6e306e8ff55fdba90f726836ba373cef1d803044fc5e32f8af09f814e9cbfd55f01a942f27236042d11bcc9a09e93e785091b92b03303d69b7c249ab7003a39ceadbb7582a29062994fe936e711269106c0120d34ba05354e2a99af231f938c91b21ca711e86d46091a31465dbf8761985631877af3cfcd05b530124aa955ccd6622ed4b2509c667e2e402c9bce1d5c253a5467174b25759fe8f226f5409dc8de99d71d2628fd597868e5281e7319ad77980b12504cefa058b0dc5bb9027ba5037c7e967bb1467e9e93bb26982267d120dde9256c10e7749afb559f41bbdf322ffd98dfbd3dcfa29946eb3769ae742af4b86039f7512a308b94300b5282a4ab35a02552fc4958e318e92e62d60e9b65a70a239a7f9b67c8e84b15b9e14926d5056cce601a2c3c1dbcbfbaeef241e4f01bd88e48529f5e06d8eb6b2b5316562b30260383aed373b5ff4590c07183470abb34b035ae1164eba7f4c2ba7453a915c5b260b5905d7a6015f18181f61d24e28d0c09eddcb621fad5b6557457d99316a739a635d6d74d1ef5511d14210b4dae8169a7e44ad220fec3e641a20378ebb663758f275480854c51dfc66b1e12f690905c50ee828d1e6368691fe722ee982400c2a0ce5a8dae919e852154e83f586dbf9c8777faf687fc083786c4353a117bbaf000b51beb3683030b0a716f34034c533e6a76a45d45b7e2680911e930a31a69e85516957d2a5a911713dfaf52fa75dfdbcf4af0cc280f6b0e6f2b7835f67146f72555c8bbae0332cc6cb249ef9962fe0966a6e5567c8798963449f5a3d3efceadc005e00de5264d9427c30a6332c0fc45cdf5af855d740904940795eb20c526cad92db3cd76edccfcf6f5b0bb199824f69d4c7e37bfed862f3cfb8182a18ad0b889743482af08728fce463e8960a6f87130096261d7d27a16ef8747ec4146ac91ee3fd1e9823f3158e93870ecf02d7fdb7c4023b054ad2437c051a31efc6b3cdcb8ffe1dab7ec61125410130a94d893a25550a443e2425183abf7c1fa3d12716e26e2bd13ffedaf0b4564b3ccf77498832941f84cdd0c502c985e98726c6351380e41e9adf5a99059c3d5f48d73aa0456eba1847789d87dcd03a9d2f61f2986d3811685fb3ad6587da37d21224d315b5d4a9ad6f34e50872b283255a497c92292fb4aba03eab487c8310d39243fbdc03b6f793be4b8018d1e32b94f73db4be92faa03c96819596137840dff00b4686b92a5ea5c4aa
+
+# Valid signature XMSS_SHA2-256_W16_H10 [VERIFIED]
+Msg = e1868d1872e71afabd6e51c6c154832ebd7d766da303514dc808c0ab7d7697674a03b161c813a4d33a634c70d1d50738d6fb41ee57a4df18a277efac4fe089f697987d7e9ac71c693c82fe6a2bae440a1f34bd2655d958408f7f7963654d12cb1e62b0668eb72c69ddeda3db8dd4b78c72bae5eac282809b4b0b93133984e19edaf96e07e1c0b542d6fbe58fe703adc786a460851e5381550814c8d0a73e294817d6ef343ff17d9bb7ab72dc3a76b538f7ccca6f154b043ac9addc84b8810f970b1c622abbcdb47a0092ed40d5f3b332773e9eaff5df050158e0ff74977074c5c0543bc92f613c4abd31c3366b904121de54212437151d91ea9220997ec3b2e6a8fc02a510a071374d761b23c0bc6e3540c5731a11c90a3f103a
+PublicKey = 01000001608f3f4ee9ebf93c3a1fdf166926042701b7df1fd38a49bade3254a9f40fc054793e35ae8344eadcb817a9aab91213ab583edb4c2a6ed7f8b8113bab4c0b4fe6
+Signature = 00000000000001ae4b23183ad9ccb437c405321640d80a8627e3e072936006031e1830cd8236c58d6820e7a3d08d30d516dd0d6c539015685009579fc60e6cc493ad8830adf44ea6c4eac4542d712e02147cfcfbff33ef0a856b959df622a48d5d9cbed93de0f711eb70ea3450741e2fb3271a58507740f157a751dd4f37ea021734bba9913055b280f47dfaf574bb44d54541c2495dd9ace7f6d4c0966d968d0c2bd02a1b91ae45f4f6c5484ab74da19d7dc8f475b24f84f79888ccd3f880ab59beff67715fb0c96805e08e2a2ff725791cd435a153a7b115d5d47ceeb55f2ca5e74eed7971b6428bfb8ebdfe628bb11d5547d3a202ffaee65e5419f709de9cb518c1d3b7d288b6e4efa7a5b0374b357d824f02680f6b6a7ffc6b8981e3b9b7066ce62edb13d9cd0ae1d3913c625dcbbbfa2c738c62dc46736eaf4ced94f07a1b9f17cf762b08f4d023c7bb111abdaf9a1e0db284183337cadebcaba4174e0a267db8ac88cf205c7b1abcffa136095c0bd61a9f2a10fd9a89b8c6950a6df602caf5aa7998fd3e937809dc7f9c6bf3cee9727241453542c472737b64edffb471ee72256736f3e653248edcda38989c9903fe80a1e4fbfc126ac6ccb9fefe13b87b4e76638161554abb9a5fba843ee7ed97bb738d8bdc431f1bf748e24c883bedbd3f196bed94285b69bd11d8ed289edc2c9578bd600c539ce6105752d6d5e47401c9acaa9dd08bef85722625dd0650efe587b4ad847552902fbc6fa870e83d4d9ad8064607ed7ed6279ee202d7968bb4285c8d7ae2e3c8c2b4f0cee43601c44fca1155802ca21acc2699ea57e98f0cc52365132632aa946146ac631877c07f98af64b1ae1629433b007fa95ccea8ddc56241652758a2c92077087e166af2163734dc0ab9be16556e93d3fee5d598398cc4435950758ec22c4901f44627177355f33f760184273dd9aa77caf7d6a54a7318ff8d586cb3457fd08a72d63cbab4436951ba6d09567643c2b6fd860fcc500b7947336565e317b334bb268d28a73380f9cfb90ea3801ec01788fefad33b08b27cedd709718f0cb4e3c5acc14d63f629574a93c548a544acbe6cae470927143ae25c836804f9e12ab4ea820d9c0b5856959fefb9f746c42c743e2ecc785e28e0afefbab74e06433f3f3eddc3ef80c1243fecfa7b4f0fbdc640bd0ce6c342cb568cb7a3e8f2b39a2570ea982cd64609625a3a3deffad9053b4b432cc3eee364d4de5d040237c86fedef2aeca73be050b85dcae32d8e26d124ea9ba9e0885b302d7944237f697bdbc55ce51c3e15e9ced1175cabe53c6fec4f665682ec9519c990918434a62e1ef80e6c54eaf0e8ed2229763f497aefae28b830ab259143719719efbe145fd26974116fa0c23230d658bf69a7e503d2e8d70ff25dd4ac27538c1b5bcced95ffe9d23fdee6b083f038972f0468cd106f43d8238bbeafbd21aa5f3cc9b5fd28791398dff26fe7e108d9ae9f505746d41be44fdfe7d0cd2974a9eef5b943cd4f8bc98eb385ec8f71446772fe19408982e96e6ddea5326a965181eec3a1b9207be0088ad3169b8f29b1e89aa7d7b0da4c788e6dbb329d8067666f18690f125d117f4987bf9fec1f5a6da04a3efb5d56b99c2c6597e71102d3344b863722d164c217e4fdcd48a3d9cd212c9b17a4df5217c99576d2fcb14fa99efd37b4ae1acb00a836055de4e2fdccd8dfb22f1e756e456c10e194e7043b4cfd588f9e2e5baff61fb55c07e4091a7a00a0fdda99dbf3bfb1b0b816fcb0c12d8bf613588f4e6e2859ae3700325e73b0b93ebadb38658362a22cb2c4afd27d3b4336301c0d0972314c9d8f09be16a7b827f56e13704fec5296ac387184d694b4296b4f0499b0353be042a31456f693bdf52e1485b5c516d63db87c252934565c317f6da8ecc3db6c4ad6b120d877c9c8699d478bb20356ba566a3bd16ef20b57beb5a7d72106244498cb3742e79fae13889a1e31f138f883a788416d47ffd789706ba4c364d4118a56f36b89adb7551baafa7b4a8d683efd5cb19c8db28412bff9e2223a10a197119ab851045a941e9014c6532be5cbfba81f18ffe367f342e00c57b6da1e132c7cd8dd976ca8ea5ca9619db0cd24eaf706a17cb5b6ebdb712e281faa9470f97c283903a8cec94fa8854c6aadff95c338727103bda694120948b9af9aa9f4befe8a97c1051fb3fa01b147a7f59e7bbf4f0e1f0f623431385fd0cb05b0e4d26e8499676486d94d89d425c519a87ab13293a6c6a4d240eff93c0344bf4f6de1b152f2b4a2d09a8649dfd073fbe905a874df02bfb5de6ffc9b9ebd176b5c8d645bc7ab8d78686bb4f5a317bea9765cffc12d42266297dce3f4cad034d2dc207c9b9dc98eab98b06cf215ae2835f99e9ff1dd0bc4e8673f3ec55d2adf7455d7b47dfe3af62e608a53538650cd1a6a4fa2dc1623ada894d39a67f418861784a8eca0d1e850b5ea1466c78b4036eb7b579f55f2366cef7df790ba6406943a9f821b6cb618e1ea7199475a1900632d0450c7900ae92da47b42ab4fcd9cff9dd59dd3d1a69df470ab783471d4a30b5e200ff95111ff48b7a1431520bc0f861175b0203bb32d6485093314227503cde739c0c14b5d37a16641e0ff61ec41bbe92984a55d0d176160d0263059f2a88ef336b9131a17fcdfab2763259d293bf0ac2071a10aefdcd593459a4c161301559cf6c3f039c5c781f261474abedffb155053e02801dc9b175ed6621028ee58c551b6dd56b671bf5d4ce4465189026b682d1339e6dad7732c498c02f96614ef7d3df41ef70e22c6789e919bddaea3a3bd00adcfc3e4d01dfbf0e40fe6bf40e547f9b8e28f24b50d5e7c2c464a662235bfed1f150e121e56912b2c7fc09fd696da49d9496fcd96cfb36185be9b9011fbe40f013b2cee4ef9d25147005ad19e179dada468bb473e4a43f6cdbb0fdfdc04884d77f9c7cd0f9563c0252e7a0d7b374044e195bbb936d314478dca4c8e285026b4c0ca7655a3afa74d47182709766b0f6efa3f18cfb52d3f0a559df4b986a9f88a16250109098d3230e9bd29f9a9eed92e087128f64a58e3e73317605d4643ec076b5e8dd4837f459db039c58954d81f8dea78742014896c7636073d7df519472c9a1e304ce6fec058d9561b8f4e42fdba8f634427c51d947d73832e0fc808f3c0f37e11eac4f2da2841b423efb9d474c70f6bcbd7010c97fefe79797b9a1c9ff9e89abf2b9a0af02989c5ba6b3ff89ef2f9724b278095c189d9699480a117b175219249f23e9def6e34672752ddf3007c644e15bf319ee8bacca980dec063ee7853593058b591f2a2a3748c21bb51ed1cc17d2eb13d2b5f14f731a6be1dcf62f96473c5b460bc3884bfdc5dfb78d22539888e1528e40a5310245cbabbbbf39e48e42024cf2a44ad996e99f73aaf46041f9785415f779f02baf442756c9f4a220eb358a6d844ed75016147636e16e01dde46a45d05901e6708cb8f5e72d3fbf15c4a15c7982c8ce5b30b5bc1acddfca0e0288f4dca93ef716751f6
+
+# Valid signature XMSS_SHA2-256_W16_H16 [VERIFIED]
+Msg = 1c281fd8751cf07c937b53d5983b99965ab4ea03399ace872ececb00a38b883a21069b32fa4db96710c7b666044644ee4c95
+PublicKey = 020000024e878f70624ec389188f6dd012d47f5931de8b28ca8c6f48010d51cbbfe0e0ff8155dba28e73701e66e224e9a9b2e7a7434baea1a0342a8b28c12ce27452d9f9
+Signature = 00000000000000006a3ec2352f3bab2c336c0f26c6da0234e334bc5083c609a873d34515c4ad42fbab83013250fa7f3148c404bcaf6477e1f5d7acda8a64d84212a273b119ea9880b029da7e87d96a74be8ec99dc55a179d9e8be75a740a58cb8288fb4a2559137cb7dbb9878a81e1608833eab7469be1eff560b4b3fac5f7d72248f569350f5cba9d6d3c246cffc16efa0b711013662f8fbdc10ffd3bc64b4d6bd66f68960a61b671bb349e1d6a6322951cf8f6016baf32b1329a803deb7f291e518c8efab10ad6251fabe59ea55ac64dbfe4648000523579c9a99fa517b02554fa9632cfb1fed1e8ceaf0149fcd199b374267b945cde850f40e87fda6db5922eab3c091a441e5985d2d86241284ff47d04c0b46b4dce29759916a6c209e7a0dc951b634da7c2e3064ea57c797220d53e9b51f6f126a384a7931cbc58d5bee29f5fa98f9aaecf2e496b1bd6b8b60c6bc619ff0de99babd335dd49c181e07d19ce9ac8413ae3a7b3c67cd2245d67928dd41f967fd903ff0a63118a8cea87b252e34d15804e2574ddcae8ddedae6ff75d1e26f30b3807b4f42a446a02e3479cbe4e0867e46d0ae138349f8efce11d43b22951df13efadcd86edc81ba252c64ac9d572122e9f64cb28db9c185e82e939cb407424eb8cf5b012166297295ed6fc3e3735cbfbb959c530c1ea6768693dadbe1f0c1aaf8d944c6fbbf53d8526d22dc0c7e2b4a668cd764cb8aaebe9d6736e3a1ada624431f0b76506505c47106532fe4cf65ba009a22a3c3af771bd62ebffb2c3b69ccca6f754056cadb01e59cc7662e4cf9ab1c8f1d41e969358e0d8c88f0b979335366552c9fa977044d28afc8e91ed0f51a5c6b9d6656a4e51e57eb72d8a4195d9571f06789e5e7af7c9e7adc3c0c4ed51d7ec26a533cba6e826331b28471df217d6ab833ba5c8882c7f900d19e51a683120d72e989c3055e27f5f90a841c0fd7b4e235131f4cdd2b52b6f6df72745ed885ddd6e079c3470c9ffd827350afb7046abdb39ec70a9839966b1f6b3d425ada65aca0a78b866cabdec3d6e7235ebaba0664902191f0da0a55acf8048188dbbe9eaa457640d8c40d597bdd9c9d62796ff2cd97778448696714583333c179e1fc2e7143184eecae5eae895c640d35dc4659198abddd9ffd123aa7d51899932d799cd4717ff9ee7871e5d268268f84e8ac5a5f7f324886027767ab4e752da1b8e4ff693a6d03527f78224147590f73bf34c753df920f4e241f338194c66bbf1b376ab47553e40ec82921d9ab25d5c606c8f881c3c70b785368ce8ba9aee0c59d18d39c2974c50a6b266488a5a6c4524e0139c399f84aa2b69711fc42476eaaa1c10584c8e208e5d563eab1c0a19f52cf8a595f17db001e1d3049dd683c26e7c78349b23d4d1000c9ef8eecfec76440a2242921953fd69e772f0ca2c15e91cb3b1b191f9ede0c026f7cbf0ba8784bb26e83d2f4e0833e683d590cba7d0c9400180c396531de01ebfd2bcfa14866d75ced3ebe1b57c7063610baa651b7573922740b5b8ef88667c57f0199fbe418529465d7fdc45fa08ecaa08ddd6baa633b16df1639c099c51225b5aa4c73d3b42f8b3f1a2e882a420ef51838f525acd8dbad3cfbfe870fa7554b6142d4413bfd30c1bede43ad898ec1b40c8cb622552e59ed013c979b98893d9cbd6b9174db6b1966448bfa592ef838df0fa8c5800829576235047958bee7a9e10a6a76584f3054a2d462da72e56d61513db8ec16106b9817a6c8061ad5a6ba9fce07a955079ea6ea30ca51c6dd3901a182d4b9dcf7b8cda6c3419af210ab8c1ea4e5c20ab725809a0aeacc0c564e316e2b8cf5778dca097b42cfc16fa1e3a4b63a66a774511349122570ddaa002a6281a311fc4d8a3a82191255f2d1ab7e6d807fad840e6f68f98b87541696310942e597545b45e9f5e4d7f5830f49839637a35dbc61579304c176ddb5a1c2e8fb60ba386d0578a2f18b297af9fde20b122c21ddadbf8244ea91acf84b6ff6ccd5e3a3ff19e5cab1b467c2ade4e60c7eaf927c944c746a3619d95625d34170d2526296b7a8ff67895714217bb5294ff6cfa4118c2516f8286c6005e2fc57bc9f71ebb232396657ec3c327e64310e06b3a60790df0b146b5231b42834336484f661f86b9fff152fb99024233416546b006b0fd42ba59d0bee9a6b8c111a9f1fe9dc19a14c4b8019173fc0e92d3ff9f695cdbee185445aeffe41b68ec61b94d9236c8c5f54c45727e06ff49dd3bb42ce2e570945bd3cd5286a50416e5573e8d68079356cf61e77d344b2dd133aca828f7bf6d9d0905121af57b023f5fe0541efd6b633c9f04864d61c9096980d1619381ce8f51983a87aa4adc8e9bca920b5aedb8e23023d2d66a27a5764c5ce905e62c0f654ed549aacebce1d4434bf0bf400e267a6563b95cd8e94fe3ad119214d26e4e7a0396d7d7a76f80001a7353344c5cbb80461df9c06f9ffaf765be4d269417e1c877140a69c2feee996bfcdacb01a382ccddf6ec98664624421febe8cfaaf6945eafd6ab4b5e5b0a30e7444035521bda8c1b723f1f6fe9b814a5686cb20b08d397ff6ca077a50c96b2e7072162f6aa0f6995eb67218967a731a5e795b235934067d54e7755e32a86134c27c53d91948856571f89fc76ab9af9fdbf1c2da3e5c4fe01412bb9b7bff8303a9b223cb3646e10a261350340e9b06d5e26fdeed98ddb91cf7dec65ac82aeee673f610699c20701eed7d2f89664808ef016b4bf8e122e3df9033bfddec4a7cb217c60b846d516e7e46c901b395668cee42b43a9b9a352a71cc51ce730e97e384c322f5c4a603c81b29ffd7a4b86bd7316e2ca4f04aea84d9e00caea39e1a1fed6cc1e04b81e1ed7fd044cbca6743f9ad1bca69dd568b8c79c9a5453c9d43dc1326aca885dc76ee5b237da11b3e47c456ea6d133d86d6a52e3b3f3e06ccac040bfe5b37e80964f2a86bcbbeed905fc5d3862d7e16551cf1dc4fb163140e1ad6e04fa0d9663d6b973bf0068bf30d05b1ac8a4df193f2cdbcb46311d81afecd1e22d848004d21c0a95cfeebaf54ebf37673b5f5f324bdd7f2a5ea05735ba954e474f00e17b5649d1014431119360850f42a9dd267ae73755d038d9c708378902652923d3d6a730a8d89a298f035ece61374ab885a2bbfa05cda236388d1552d991b5b92040e4aafd97ee9980e96ecab55cc1100655aa02474e3eee9f91d3c9156503f2f444a3705e1acd53b26ba49a6f7826f3ac48125b49a2e8ddb6dafd2947617ed3079e1cce93a90446f133f6fb741b61e5d5c2eb9942f0a1a0d27218d45b946d57f77ed7e709a86fce2608ed3fd34f75b57bafd97fdf16f6597d6d33a3bf76409d374373de2a632fe40c06f15360cffdd9a14909aae05bed5bc07726642b8e843e3a360e6a0d47c8578d455349fe886051d424365136d75162096c7b8a069cf3ee6f8723be1c85b5e8ec75c35b7eacb34f8ef7084965a6058aa575c496e5862abb1ca84e84b69e4b246fc5d856dcbc441c294ff667ad56960d36b343c71e69b3f820810b6573a66f90d437ffe8e0207a048955ea9c9f4abedea18f9ce48297459a14fc4edf509cec25e66b7622fbc89a93c02a643ca52e4444459103ea1c6d6bcd5fd1df2321cc7cdfa5bdefb0dd94689721b0b907690eb79d91170a60677a87eafb83c986d762b0e768fa5870fc53518ed59036897536c37c7cf0f9315ee799f958cd0a0b693e0212eb95133cd5afcc0b8acf7f748ee8e47b17a323b379aed28d801d340f3c3acd15c3338c68944a993dac7d7aa11f181d
+
+# Valid signature XMSS_SHA2-256_W16_H16 [VERIFIED]
+Msg =
+PublicKey = 020000023e30eb8ca6d95296d17821eab7812699dc7ae1a3ce4277fab52bcf5715e2ede417ebc33bdf87d8db1284d4963168c1033a3b02aad245d8513e0029c64c098773
+Signature = 00000000000052f2d003a396bb2b952322b5c0291ca446cae0ecccb03b3994ba6d49de4565828662e9062f45f897f16efc9a9feefcdaaf2407014ee5fb457a894f200baf5750f61e8eec1f8ee647c6212c7f90f86a1cb950361ca3f682a95b20c11b173f91e8210477cda93eedf4638c94c43fdacc2867dab07e46d7c7e17375bb3ff3f2da9a1347cf0163a4a30bb396ad01dd7710ac69431c0e6b0183ce5163f70ea420ed2c4dfca9a7c5be382e86bfa906989305445e19a413d686a083de065bc8e5bf58be2cebbc2864fe7b89f4c2fc5ee9ba88973a28f5cb0ca3ac50d3e81f5cd14678ba7b019b817baaa1a7fd6b6ba2bcae589545d94bc458331c4b281d3ff56768af116cc12de7cb0e4be1ee46358a28e464a9d0e448197526e2b539cdc2042de6f6951914a8ac70b2fc74b7a58c099e97bbdc5506b9cbbc0e716ac005700df7c3ff0cbbe769f62eee44a70001e713e117d868b6a29a96480809eefac13512254596aba8bdf4b01cdf6473a74b4d5b46b9c48a4f56308db1a4f84672d494ef20ad07fffd09554fdedc11a466adebca9f2f4b9186eaa9bbefb332bf90e0e8fec05fb9e53fcc3be73de008275b3367182a0b8761b9a5cc826e92d09141d44d46676c44d4e92d43f165731dabad86aab623d31532c00ee75dc0a41f0d9960faa95042ea90db69b5e76c318d8865b69f32215eff609bae6c3a9ef53be5060896f0f6066e2756c8d8df9a3d89b9ef6122b825aeaf723af282f972dc4ea4f647b4dd5f80de4e0c356bcff7c790b8bac0888dbf3c0de43c1d725ca12c8d5f84e832818e90f2f68e411a00ecdc3fa72bbc917583a00674878894c6840b2efe9f91fe48bb78fbeceae658e8d4908a754386b36e60f8a249fe86f7f78f2a2e717127b310a4b812c133a1043c7ef7d74a93017f614ddf31c5c3bba958dd212d111c24dbbc378248963d8e2c27b4e69cfadecea53650ee4e6b58ef64d2a7379804f74da7c736ccde724795345ccea282c31bc88b9363895161d7dfc9f306a616a90001f4bbe03bdb0136edbe53d8e46badf558be39758d6c010e9335df7846b6a6d67372fef32656833fb9c248b47e712463af02dc5b9f7471b25362070712b2fa2c379d798e6ef590fdf989deb8ec0cc46381453aa6d11d80972f433a0318ec7bcf9c09b02e25970994d0b0e8473d0532032310d2379c7d0d9f7eafbb040a1295e955dda636147fc341a34163589d60b7436e0bd7409497df5cf64145c84247c578167e480809405e70fd513514a90bc7274a24b0e96f790c9e12fc0aed94b3a069547f1fe422c4276c10c433b8b3d6027dd7ca9cf58dc45c5138180191768449144d04dbbb834055533e90616e30276ea0d8f54b28ee0e78c682998d53c3fde48c59367d9e9123e4064d1df3320dcc3757ed8a4bf1bb41a5878e559b585a74565612a38c535b0a7d2c70386c029cdc906827620bc5d2a4d44d534a2ce7fd7c64bdd8ec8fc13d3ce60c801abb7c755733bba4a4bb5523f5bcaf89cd4be958c42cc57c331244e691f7dccb84728507cf1161c06122089c884cc8bc2ea210f98fdc59858f6a46225a18960244e8301d88bd5166affe0027ef507b7e8973e7d85f2c19db660f0bcac22a1aec600cf6c823e38d1e3088bba969211313d0afe8429000aab9161c27aa3c1a0af4dd433379c3319819c2395e41e4ca0f27ca4f6264c135fb7979e8097333941b8b5226e96a57d0b9a786d15d39198b74dc49368656c2ef4cc30002536ecee9895833883bd7e7fc33e4a0e3579f7c942463e3939d1adb4da7639685ab690f1065e1262fbd572230bbc18525910d8a591dd9ad628f46421a72b3b8a73f343d62a31da215a617b0d928b123242daf6608b3473463f53ebe089b66a32f37f4248730512339088e87221a035fb605afd8ed48b0eb30ad75eedece12e5c5c76498b278fe4bbaf7f233fe95efcf29ebb87ae891adf851af3af945af524cfaa05fa5c50b913acb4d1ece8c71c60f5513ee4bbb67c5422234e2371b5393348aaf1f0af5bac5534558acf81273bae97265231dbefc6771ca4556f16b4afecbcfaf3f35bd22af447ba3960a999b8c73a876db02ca54f85abf8830b772e5acca9e172fb6b7d9302e52d7bf2ac55867da091c658b3eb70107a9c55595df7942a29d8562214680607034bc89a39f7dd34befa6d77cb42ab6014837a30239d83b40478a7ba0eae3ae4efc150e8990e47d5032e2100f72afebee3ae13313c0a2d1d80a880f0edd3f36d2c454f082fc5e3f66949f0fdbe1857c3ef4179ef831b246bd3eeb701b8d0dee9c0dd848e80c36819670f56267d1fbd27dd060f674be9bea91bab7367b8622cd32177c03c2cc503453e5d71aab0291e16c93455cb294d2479ab9a02fc1695a76d47d445fcc19608aca014d7d4ea00c17aa31755269fc52676747b91c952bb6ac98525602a888370fa4d8ca35ab45f07d81a9bcd9bb84a8bde63b777cb2e4309203c74baced417b5ac343ac552990990e9ecaa89a2883f4293899198857ef2e3524175df7bc1c89ae76e1a1dc2bfeae4e66e35f9b482967fcf1037ddf4f0f8be4ac7756c688444d9e31f6c2e9df52d4259e43b5617a996a46123730ce15f086edd0dda0e01a2563930c32751b21584ec61785a1aa153d3d3d2656868cbbfbe6bc9ffeaefbed14041d83cb4b2b056fc26587e2f96d38df01f8819ebdc0749014026dfcbe40df123b9aa2f12826ede3a95a1ec1a732621b966d1ff236f34946e7cab66ace3099eccb29f5cf9c097b68193d3e7f2b34f909b4787f7bb577a72eb6a46b38cff72e869cfaf22362491ad4241f86bc3c30ea42d5d487754648c1751bc690dc93e45737406b1870c9418b921fca2be0ee3c4e2d4cee36323dd1cf7757c8236e7c01192540d9125b1c1fbc7cdaef5801758443456b577b49e7fea9d1ea9b877eee8d4010c029303361ab70a231177c95f6629fb3c4b2fc8ebf884ac621c769295a3c8bdee40c79bc96f40fa59ec9c5e2a2e16609253942ca21cf3af4bc172e3914d5c142f3e91d65bcaf254a31f186196b8995625c7b5e8e19b25ca0f3ef08a0dda9d1b95c5fc8530902508c9ead6a9ea5cc1936420169b99913de85dad5c1dc48e124436da31be564b88b679e8b28ce24830140acd5fcd9c5abd5f7d02f7ffeaa5b35abc9ab68a57ec47ac09833d6a675884de7ea76ad663112492c1f539e723e74d6d55684a09272a67bcdb9655678b9733b9e7ca2e28b6c2352ade541179644a15efa2917e80ed7a3e30c69378c12d4574dd91c127033b3ddb18ffcaaebd18eeab621c6cc27cb5498846da7c4f11c0c8fa63db8bf9bb5163622392894d0cfaf82dd43f5652a89fd3218b0422c546f350598e2fd8cf534cb71cb6a43aef7985dfdec764ba0491016b66768ea61cd596cae338995eb719401cfa31235e865a62e1a2881f1d0f9acd2b78f5538924b29b71111634933f6c728e360b1d0d7e36f765caf67747ed08fee48df518b4e8364ac8fa54c8a200af7dc2cb1790381fa9bec1d912dea4c5cad154991aeb36c3e708a66580b679ca7c177f881b760076e8235c074f4d2ea54dad38065ab9c93af0dbe049be4a35c77ceabe34e25db6a2efc52226b9a4542b0ab3f1dc7698e64d1802774d8addb63200f1341652a9d3ca11420ebf0e85a3dd56bc991157aae79d5f9c53d68a26dacb74ab04e3c8e4f7b799db8e146c9bde8bdc41153493969ea2dcafb6aa5d53fdf297b0fdf5a00d345ac0111b220c953aa74e50d0fcf992cd0ba0f00a179d7caf553a2b2c1ab56336c
+
+# Valid signature XMSS_SHA2-256_W16_H16 [VERIFIED]
+Msg = 426e562ab69a03a893f56910a2aed2a0618da1e365167749e78beb4997d36dc054f34225797478a5153037d4154a90c88836eab69a7f6783237143fdedbdb6fba8aedfd98d3af16fa293660640163c0936ae072c0d38772013b0bbf97cf44b64c44acb62803a7b2b374da627e47a1135782f09537e873aaf5bb54676bb5195aaddf73b64fb9b32f3054829dc0dc0164e51e9efa8bb5e9daafd97a85f0b3591e8c06232e6e54a3606cdf93a05df506905fb69b7cdecf62145d5d1a97fcf055b69d35c07861bf3532cc9bc78058ef266d8c98dce0af755c84fcefa69468d4a9cee6effedda0e0263a87573eb3e1d9f765083c5fe5e3598caa2874d065360e7f254fe6e3c3acccfe63ab3
+PublicKey = 02000002ed199564625b97f78ed0d0612270209acb9478085fa06220fd692c348e664d3a3d230def6b5f2f3843e4c0785e7979ac434b6dcc39cfb4781c70be7078425435
+Signature = 00000000000036b6831b926b865fc19683807b6241e37b11f4c2d967363fd2e896535f3d2c4f0ce0ded210dc4d158abbb430570b874c7ddbd8bd1a37d463698dbdd146164bc5811429c327fc9e82827f77edd7be211a6da4ccff1418264f2b9062ee961e122323a58b4a0c597885f493c9d06c4c568adab0adbbfeca62794898a60c9cc654f910413d87fbed9db522b5a9b8347e4bef898f17464508383c9494fdf1effaffbf1a9efe10b142c76a1ab81e1e461e6078bab16b835493c232fd1d596ef410dff45ce42870ab73aecd8c9944fb5f65b89da6a48ef6d57ba6563a5eafce62d23b636f9d3a9736b2db749ffabf92d005bffd01043e8a1a01e2140390af36690a2d35d0e3ee7480cf564df6e969a47914d84cca9be5965cd5de1fa25985479c58b6c56377acaf6d886569c71ed12b718ebbcb02dd976a34c1a2c6ac4aeeb9a6177bff75a7da86c2a20aa5f123ad72eb593d1041abe236e869377552ed47bcb82d643a2ad2436d1fa6582524a74cf82df883a768932300d9f3a655579d32d381e73afec82621a768952aabb165c1c0cbefcd2918ebf7e9fe1bcca99b02b6d141239ec991fe8c124ace6078ab6f66a4f8cf2bcb792205197b0778122cf171a6d1b687c1d0906d6ab71ce68a29d19025e36ad538be44a5f8684a87da70f6dfeff94e7c375ced5efaa16aac66412fa4a0a1e55c61b794bf6847b5452a0ff4dcc3f7fa4e54ad306624864d0ffaa6b5f73abf73e255e88862d50ac97893f70253e18a6baa20705648cb8353e8f27b3b730fb2044be1b01b569dc027988821a9cc8c0cc18ac404bf8253ff13d9aa15c4b96d55c74893e0df589e0eb0f5bdc2c92486f49f40e9bef3a9a394fc76fba0e4ece57ea222ab3a1ea9a5209fe4bb83282525ade2920f6c0856b7f13af0c5951c86e6c8504452bb0c65a0b9e5ffe6d841e1fda4ff844296ee21ee7ffebdb8b8dd5b3d9810a07df036d06c24eb326f877048203c7d014b7ea3b32f19407c99d44fe42deb0e0407eb8c6b91e391f7738d2292035ba3bfda117ca959bf763128e6e6ecfbc298ab9aed07e2ef23fe1e4d695ee4641bad821c685d82fa7b4af9b68bd9f4a83aaf26f8f402de4ca5298da9f205947bcc3e7c558e138267b84012afca644cf034f9e92e6c838b3b8236eb95f186c0c1f6e7aacdc18f278f99d909f34db2fb166a87ea02f4e3791eb0829b6362567f23cd5e2f3996f0f0fb00fb67ffada971155f577f9ac09c3ba8859731a03cd225a56a26cf2395b340ebb86f88655fb2b8f5f927e934779971c3ee018cccd565632972bad542d783f05be5a7f786d839c43ba61869ca662b3a2691cdc4ad6c78515b3b989132002b91b6ad7d988240d45db2b4bf7b016563d222ce5c0b050a7a0a8ee234f828c6de38f154a71d3156f0a231cdb43d8845cdc30f351b041bfff0692d532b70e62bb4c9e2fedf99ec0af73f619349bbf75c51f67f2b590d8fdfb4c607ce2fcfd9ccb5b0f821371c788130350b2a840a52e51e5f2d5723dc5d42ca4a5af528ab797948a02d7abb98b49fbb5456dd5fb910a43cf61a013b1511e1b7b693f161d69bc8105464a234f3823f259e7e915e48f2a4a03d6a5ec6d49277d803445699012e141f85b5ef88494098a54e20ed697f2bebc387d0c3de114530479abbe004472d9d50d45804f525c1061e0bc8b82f6a6e0cf07e8494202afcb7daf91163e9afe45cea73f13953c48fe52f384fd053eef87a485eebc1cd2e2345d1c7695c47a57863eae4a620c210cfb6d9a62fd06e5de321f40a2e53f928e710c2026a6f4cd773a682809d87e070ae8823431da7c5a2d32356121b263ca73c6e8cb4b7d8ce593f70166bd07f94778cb2a5a957f45ac61b37aef355a4c378ebe4724e4f05c12177f4937dbc1a8b107eea62c15dd2f62c461f05f0ccd8eb6482611f331a50bb35d5ad0e13616ea5bc42da7901a5a59493d71e4bcaeb805e6e53aeaf5bfc8b2624534b809e2b862af5fd75ca8b05583ea4f1ade004f21327928944852833d2bcdc0e25b04b5053f028bfcec018a47ff5930f84075179f645c2f8e5c2cc2be57b7e1760a425f4387966e009ec2bee3639a761b4caa097909afc2bf944b62d44b15882982976437ae025e549e98c13fa7d4a181de39b391c516b45ae0e1b2dc477140e1428a0243023c66554987c0e6dfd365173c3af6a86a63b1018d1108b89d14057eb6e217906214c68051880654f4ec4fd67b5b8f8629c1f194d75777292128158142d5e3ea381cf1b02158e46fb185526533143153465a4333af1b5b4f29f5f8b188f9e284dcd20803b178f7cf405f0f180d24d1bf9eec24991ed5feb8454e15adf0756d0f19cff1af3432e9058e83c3d12c66d5821e856fce9bc2bebfb8d5e548ae44d638ebf6065b0e4413b6ea700c3fdd022c238933b47059ebc8b27dba93558b1508e6daa9cd5b5ab8f4707cc60550133d762380f55d19541722d55d3fa6cbc9e957cc1ac916ffa3c3071720d4f0d899c6b0b227871c2b79f84ca7b496f8b48b95361ff5da6584f4a443553217b267207c0f701f055edab6a1e4e80008622565da1bbc98246fb76fb86bcde76fba3c08da3062dd78cdc6608aebd40d885af665614ba248864b21eef8c9eaa941b26a0f8c47ff18a3aac4285828790befe6277193a4b47e2190dc2e8fd45983c87e086497e579157ff8639f7ed9ea4b6993569d03c7ccd875078dab10df749cbbe6a89a9311a6c31c3903e71caae7f60c8e0e15e9d07b050ff801e04fd0c9f4252f1000c2611a98862d44926ca467d0067987bf09ba135454888b1a0bd2ca9c979157863697ee34d01fc66ca333051fb44e423a9067ff3dfb9411438f34f7e217a291a389206ff82168aecab1d79293ed26260b83570c20919a587fee93d919194e2cb9240fe44ee12b8887c6b592480321eb81636b4497b9dc8993efbe2d06bc2788b506fadad3a75bc100251180c5cda941de0b416592fe51ced5f30f45502b1a8533520ece25713cf385a64eaa3d7f782de7a0fc6b2dceae210bb8ef3a45c76fc99b6bb201fd5cfeb79975ed5fcec11a37e3009a12773d3ffdda417895e27726a315b12d5b12cac06e630f4cae53d169137759affad0b7779b7290e30db0251d48772c0cb961cb676079f4f0f7405a4a9aea2b40dc1e5b0d591a334dadc8c072ff44d2f451a06b7ccd469be3041257614e0c1f592b3a8d486fe650238a59987c67491d5052b65e7270961ac7bd77f649ec1619dfd18a9023321195f401d830fe27724fc74442cc80502ddba018458f219b0e15805305148ec0a24266a110606b17c2643a83f7ef1b1ac30be91d8792c985cd686adef939cff629ebb087a8cd4bd74694405a63cdc9200cfb4eeae8ad8182cd4b60679ea818785f277e6ff676469ad9fcfbc3adb5c8c3fe5dfb2ce07023a986bdfe6d3e9ba778f32a79ea25663482a8943936821eafaa40dbad5a9ebfce7b985d0ce005ef55fffec94bf674b218ee3ebb5a10b60177fca9a5c1aaaca9c40bf23d065de2ce89ca43a0640a11c92ae9d47088afb58678eecf7fdf8326cd8528d3ad44a8a06ec7a61fd3dc1d106872147b62e11eef38d10c52458ab1eca59f3f3d09a12314ed4442136a18cb498f964d3a6e13e8cf95dbb4e9aa81bd6d55a6d491fe5f478557897996cba7924e10153d0c6efcd1da9d8f8f81c0f74be627efb9149b9e1c4553a32fae92f6e5feb621c393f2d7f52cb36da86730b53c292fdaed4afd2e5f47a5313c3d2c3f04ee9beab7be6558a9d755fcc663bdf9715be3d892689
+
+# Valid signature XMSS_SHA2-256_W16_H16 [VERIFIED]
+Msg = 39324feb180aca683d995db187a075a910d0
+PublicKey = 020000028d564c98b0fe8d126d65e7fbe5719481410cf097986b05951ae132e7bd98b319d84fbbd942b1b07039fc41b6dc5538d2e16882fa30ee1312d736b7cf1fdd7885
+Signature = 0000000000000e8d75e42757a5ca9debea37a39aedc1ca8d30f89ee5738e2c19e95c5131ab315c7ba022f447880fb8cc87b9b2ce2a98d1e79bd94d8e4c76067b76373743e0788f2fc9d01057751418c8a71289b7ec8c5a4b2b0598f477cb8e55c07ef55fce5a645089e2ff85133f7c50d2109e40c873a72dc6946576e1fd21a0f136b113589fdde6e73fe42cf322b64c433fdb391c910bd84eafdbb3529f2bdb9166e654cb0da713d58f0545b7152d000f88b6dab16b2ef728a1cd24d810a6055fdc268a931f388fd4cc20884852be65e0ab320ed4b6b5169767ef5426ae8482dba5eb66bb9ef0172779dcb82e815d3a7446f4cc916ae4eb21346f5ff6dc39cde4accd7e5becb5c2d653532fb80aa9022292a1febac90493782aa36c4af4e5237154b848f4d9b00a703fd01ce6e2931443655dfd4cb08687245b9c35f448bfabe7e7eccd3e2630a44b80548b2d5c1b6803089c46592c167d1c393b88b1ea4d5d6de59f877d81fb1cd0c82699509d0248debbe2889c462ccfbe9eb3454a856d128b8038f75c48a42dfae5ef51c83bc99f4b715533a9bcc6c7bcbdb5bb66f44d9bc62061adf767e7e0b334c48184e0aaf3f7bf19187cab07d5ae683488e6972793c73c7d5374ce57b5019d3eb2588b98b2e0591cdf05e76bdf8b78018e62bd6a88bc1f732380d2cb910869e05fcf44ebe9a1cc5c01b50bff12efbfeb3dda154923a71b8b6f86469028a6dbe2afe8a7b272530389765832bf33e6373f6baead69276a2c964343e909090b55c07af1f62c20c9d9792678fd5ca50309ea73f1b0e043a93bf8fe674ad71259a7c5ab8e95f44471c10139cb3a36560de58f1b40510df1dea8fce305783a3ded1d6d691591cefce9442260f80e20ef9dbfc56b5b5b7e0ff55d2b23b48f0cba6723233ede6bc77429b76dced0cd6c42749cf289b1bdde18abf5dc996714632494ce8c6af3955a6cbc5916b40c8d996591ff2f026e564cfc558fa108a4612e65e13453df9a47d783debfc7e5a9593de7aaa837d7c59d24b4c236e5e06275b2b7ef10c31125adf9d3c2ac6a7e50e15fc9614f6c65f05ccfacc6939197757be8dc7ac4bc1cb2e7f374e429ce619765a90c76b856bd79b4eaa3894d86b1d10bd5991aff8017eda4922cbed81e20c58bcf7ecb54c6d2778ac4ded4d05baa90597d8ceab540eec853d8d8ac418289123a296ed01bb8d7b45e572f5c0ab7be3a239617c432a933ad46cab933d78c58b0c644c4c6a89568e4d988dfee6afb9532b14b75e631f6fafe989fa193844344e419da3be0ab7879c108abb4b2ea289973f70697e746ffb1e3bfb8e2d32d723d580e229ad3235846eca69694c0668d342553c03c8856dbfcacbc143f167763c89daa2eadd4beb6feff2ce1e057bb1a07c8270c9930b7f781eb9aff84f5802bb7620d6da281ea488d259453eee5c93769ee8c2566dc27c685180d40381efcf368acf5555b0df2f5433d7de1a89eea39ec26a60ba601f0d6d3a4e5928c3d76ad3415b961a9a1c8572261fe340a7b9fd574c9d8a251fb27232972fc21c368879ac78e231430c0c94576079b42fdbf31db8b46bc7492844b426b8d244bed8fa14495c94d6680e76985b5b70bb49f7254e9dfe1f1cbc035f182e58d73ab9111ad9592144483c99c17ae01e86ebc9f70d565f165a38d3195b8ee9056918868dbef05294999b87d7465e8831bee8f05d14a319fcf2ce73566b480d5c84bea0ebb79cdc9e656f494ebe46df332d1abc6dfc5dea75deecf641e93c5e90a88ec6a640f44d9b817d4bafee58f9ac8b1ddff1b98274964d85ca115af3b693f1cea3cbc56a4e348f6126c7b219871e6e6805503511d142ad75379a054c298f5e8b0bdbf8dc118ac19c68389fe2a79979de3ece467e3ec0798e39b820c7278006205dad138ade64cb3e2d306a19782b20d9c33912b845ff25b278b029bcf2c0ac831adc7e5fcfe3011d6452d9330726b56ada097f05f38565478103daaf14997c48132a0c65fcb696d7448e64fb5e3a9eb3d498bd3f6876b22c6c57e5a5b1cf01a3734ff520c89aa14ba717efa3c8b4195571ae38e1b4d707b09951d6b27cc395817ab4a2eede0ccde2a68aa382d217b17efd1ee9563a5172a09ed8f1e94a820b959a60fa67f32010c89c830667d3418cd4b24a01b7335e918410005bd4382ba7c2fc6b49830deb5f944a70d13ce36e8286ea494b94dfec2c7792a950a655a719c7b8f91e881f96452e89be9363d68a1d7e81fb0211da89c2511b44128ae2a8ed9573a8535db6fa4820f410819f26ea71b5b2ca931dfd081741fcb74d2e274281119ce458bcc5f8564bb80707040076acc396b2a13b2325081911977ddeb8821e359cf8461ffa7080e22e45a1310621dcba2034f33bb80fd9bb576259ccfa5b0eacdaecd7b3e2cafc4cfa8ffcb60f2f5f0df6242c528f922931d32b3ec8de14fa3516b0045e43bccae93fc2b4fb12c97fb93e6b9bf12724046b448f2a16739d7433d2c1fd053cb78e37c7bb904a84e63c13b5dd282d6886ae2a3ec9489de7ab9a89885c531cad3ec07015f803b85e5d85b604d3be7cb1269f6683d522dcff97e13f8ff7365b5a7a538a3dbd7142a8bf996cec4cebadad844476531d172cba47ece2f85a091f246599ecfa97773177981caafbaf9739788828d3e203570cfa3be5219b32bd44a54bd8140a6dc923a1ccbab9735c67eef236410d334e33cd388234bde83709e2c7a44dc3629610b78769050efd6167262d9cc2e602c300b0d0baea6f3c99214d75cec807105830078319aec8fc604c6121d1c869fda5a478fd3e2f9f70f55ccf69f20e2545f64a3df2fad12d9a35589792fc3b3c469cd78b81ccac35319039be349a4ca86723b2bbc49960ae1d9d2f763793c1d610a26dc58dd6f7a6de059fa29afef4c5eb993fbf1841c9133dde53f79db98d02abb8a045cb0d79ee5ba4429ec69d73500905bb873fc9e7caab6c20a98e2185219481df31db84de59ebc66c8577c92786b8f90531d775058ba2656f41839217d3f66254f0de8e06b246e1b23dae749924a6545e3663ddda041cb681d8df7cf11bfda1146c7f613efadded327dad3cd121f2e6d4df32ac5958f71cedee7289118e8da4b4991b00a80e4c7e07e261b82218807e7793f1fe127c941613b09ac018cc700fafc5e2e92926169df99f1eca5eadd5ef56f755988896dc000090839c8b0afa125dc52d2337d7274e648ca271d11c64c53825f2021edaafa8bd3b3d43930157431754f2ccb00bd382cb9797aa80be7e3ae63a20a15f0c2d7c5d89c984f6948594d04bcf24982d11de62ad846587bbaece6cfb7f965521b71e0c7c1a49af3d09a8e2d8b0aaed5c04405fe8c4ad15ebb93be77649cb17f7cb95ff7070e752b2c1c48665586ff3e39b5ae4d60e8b44b66f3a074155af5d3a30f8870f8b8d632486834ef71fbef00bb39259def8f2bf44f5af6f7c60d29a0f4ac44b52bf706a5d4e1f681d19b25fb428bbb0e1fa0078b398dc6aea95efbd43ddf22d75ab8017e2c358694c01f84e6eca75376f74acd851b27a0711c5ce8abaf8184917b2eb227e85724a0675404b3903c7d5061ab89d0e6daafc48a3ecc951884de8307182f20cac74b2f9822edf81eebc22aa533e1f2d41c73d175c4e392b640dee48fcf3b975b28aa6806c6887ebfe9715481a45235c6cf9065c98c56cf88b602ffa56303fef5cea8e839fa31536990251d450420b19e5360285802c832717c34f07507f0b7a0671faf22c7b93b7e96eda94ac9b9e234c3b38326654a4ea0d3ab5442d3a1668591
+
+# Valid signature XMSS_SHA2-256_W16_H16 [VERIFIED]
+Msg = 458f4d30f1bd34d306092e2de2924c259c3bf53de876188f3b1fc0b194ef548b3a60f874b7536d0b402b8520e98c8fb722f15c653d1b4fa63df8d891cda1e747f8ab9490b5f0b1b0e9df7f92ef172a5c449d4a10911d765b14221c70f8d7a1346b60e0ab8b6dd00d2792761b74746de071c27a83338b236f592b6ae75ff672848b34a3ca5b2783dad72e7029891c24fb77972bb4a7f0481547e8ba4ca62a0c8443acbe7d815f257ebc8d51e0dbbf1ecdb7e48e31e2ceef7cbca409da63bd3b
+PublicKey = 02000002f321ad06df6f4734eccc6daf83ce1b25dff23e4e2d24e65fe1b41df2e6169078bb7aac42e1466c2482813be086bdebb1b29e9684eb4448e0ad77e84434ade373
+Signature = 00000000000055b744303ea6466a1e789f976ddf47f9644e7236b722592d43e722ee6fef812e6a0489262d09ef15319023b59b5ebc0bcaf53785807f69360e8eb20e46b9b904b3aba185e2d26614244d2b22ae4026638c164b1739041cb38df777c5ebf8b725bfee8459e866e9265b5d9adba820d1394b15da6baeadc9e433f769bc9a6d8975cf7b23901905473a4babd12ef91759aed35d5249888b0d7879c8db64441193d0546d647c39e3c8e376321b74f21f72c9761255b35e819e807ef747f75c13b7a26fb036981a8c7b7e3cb26bb2c06c01a8cad55b113e8e083dcc9ec9f5bc89c43bcd6dfbf41fffcb8d97d93408dd9d2d38935a0e8ff3abe106a9d90a1948f4ab57802553a08931e265fc118fed1ad464aa733d80c50cd4ef83ed4f8545fd2f09c8202d26101a567697f10c5a35d79c078d537f887b28cd6e1a88a520ec9bcf760ee1cb8c276d5e7ce8364bb7693297b756cb2e001a44b7aa977086a425da83a33be8831932b06b7e458774fb6ff004111f421010597d4cebcd702f2ca191a53f48e93925516869b1fec94af993ba18caa366ddf336d36beffbf2a6075f9c02444b7a935be65c2fca8fd12b01b6885c05392888d91d8b8d88450206100f9d462ce40064e294ec83b916f120aa82cba52cd471d3396991635ce230ad1f9a3dc2ba851f4fb57282c4b35c1751ce4ef3640892836ea784e3ca347f0bfdcd67b7ffae2a8934943c729ed18cc3ee6a90e0660b9c2a75b188df05ab3fe5ca221f45d8945ae2b1663df2106f14feac2d01378cfe482d1ef774461c704885a47933616747b0a56d74056fec91e17e8fa7f8be220a033d28b88261aaaf0545a9751446c1b8fe3cb4677c011d4b3743911d0819ecf9613d9bbe4fa4fa2949593934d804aac2d1d572553ef03f2ad66b489d69631981fc9185f534417daa7658ca2c5dcd3516e3e4ce3ff62b3b485d893b0af03a68f48ef92732375191dc5061316c681d03b7f55f2fb4ba46242478602ffbfa31ef87ebf3b4054246b6dbf3c22a51f1631810d0a1f869c3c99e733c27667b87aea29dd4d67d0f607c8e5ce5012c5a1eccf700d46c94fd51a0f1e56dccf2d1ab21141f44144cac9447cba1dd1dabc77ee2eb897b665fec7dc7c61e9bed137858dca2f478c0e7f2cb12f74323e0be372ec49a6eb1be5c595231406982a411992b58c29718adf16854ace8df6b6957a9d26701ea605b06ebd1ad221434afa67ce33eb2b58d170086ba1b0f15b6fdc817e13cb0b3766c03f7859bcd8113b25e398c7547fb67092f3e0e9e1714e5ae873e3036568263cbc1aef563cd4f0a7cd33c68db94e5241c69afa9b1fe087c008160338007b54c6ce75db1698d205f7a89abe87b8633e4287915bc6026733b7aabbf63df7ac83a838cfbcbc48aa3198035aeca1b9753b43dde72da64c28d0383ea586e7814b3dafcab480965087326de2a0ff6aa33b636e35ff54d4f931146570ca5c573224a1d44c5eb08056a51996dee669b729a85bb93b1c325c38f91b408558e5196fb31b7e6458c5a679135c19d4d92cfe6480885851d3561c58b049973a52d2ada38f10c8073ac8eb0fa2cb7e2c143c36fc6e451dd437afca0335ef13a5dc66af44c6ed40d8eabc508828a34bebe2ec3dcdd7d96b82009d62e68c523720b9e6882ca3bba13e149c529452726971d7b3055e3528c6c8a6db0f6c3a8d02ec37de4608af26bd121872a1c1bb11c502b3d353e2536946bb22561acff78e6d3e68ab928ff515410c0a0ddf236c21c2a9174fb059864c5e5a0c756fe523b0a77349a3a6e9b5ffecf201eb1c07a33494bfdb985e11ac577ce862efe46d993e5cafe07d1b6ce257a7ef098077d4deb7692f18d503641f26086f60f2a2000f4ff0c8f8acac922e25748d25e6613299196eb432acb22898dd42834331af4c51dd4d53f70a5768d2c4cc20c6cceb6d7052cd63316ef768c3540785b1190296bc651f80e23b943f6e28af06cb3f5cabccb4e04cc6f1f33ff21e936aac1a9cae55f67a69a484b831b8e407099f08f9f8c9feb1a1cad0063bdadc5ce0e3887856f3798769c61078e986f11b40f35007bdd09913d82b20389cd17185e5b4a028d7d41961f2214b3735c98457e9ad04ed2e6743673dfbf663f7d0e2ef31d5b744fd399a3cc2ec6d884b30c8d835ab6afd92d371ad27bdbcdd45d73d6fdc957fd9d704b2f34c1aefad69386d73c4463f12b18279a5893ef2f2d188847baa1c4be19fc2da2d8f32500b1c820ff877ac87f2c570833891c48096855c721988edacb6ea49dd448454ac7fac1a5654d7e95e89993d3f656cf73b2cba6ab042e0a87a29d813da61d1551d6b5cf2de389ed6b65e6ccc57e02d33f9c7f6c330a38172b67f0c2da30f74bc6132a8758c0e2e4ec9fc3af411b3d37bc3eed381a5a3463126895ff853eb019cfe23b7a6c4c91893fc01ef67feb64576aa9b3e3550fef75374796489ff11d905e16443af65eade088831131b03df2b7f48f8fdc2ff4799adfc216c0b8df991b08ab50b218549020cabb981e347024744612938c281d331ef8b2046ed0b88fa74c40fa2bff59f31e2a516b93de52e6a59c83a0c50d0558ecee5c676e90727866f24b2003851467aaab19209d64b1f748c6a1605be061b1f6f296fdbef4f8791d2594d8dc574235c67eef78af1e6771d5d17bcfd5c98be94917e5d9b99256d28124f799aefd6f182eed391926502581613953d5c852181fec2a8db987e734091b2be2e0dd0df58e9159b8af706fcec5fbedecf502e68ae1998b41e3a35c9e523cbee023e6318c6c45fef4a7ec9ca661386ac0f0b956aa47fe7c07976de29dc9b657d126fcdf5a269a49bfaca10bb7663413da140daa6b29a1f84253bdf558b192dcf366c39a58a771ca33ba3f40fadf0642884f9b8740515b9fbd55e021274c9657a84a5472b94e696da367142af9d8afd836dd63f6e9423f81ab161df49c6b8c25e0f58b77c7090f7f3e34e535df4bc98f75d837593f82d567bbb2a8cc9f149a0761620d9f29d7fcf39f5930d799f4c5aeee92502331e5715d18b3886c6a06a03c8d22ac4788d0152cc6b12e80f1023ab91907cf5f9236d6f08b61f389bbebd90297e60d481ed04f0e897ea357aaddb13223dd15bef62f5caaf66b56e3ffd27fe43f02e90a4e8f04bc8c097752bf680fee84c2dea6b7b60d0139859b794542abfa5a0fc4b371608bf3fc16575a03cb292d4854d0c8595ba28970fffb79b6279f7e4595af66c65e3e7607d9af03f69e5f53cfb866b2108bee0ce9b51ed72c5822a3b1fa636609c570c0e9cee161685880ac65f8bc220bbf279bdb97a8d8694e24f0d00be8ff7b644053775340f2c3a084f7db4ad912e9e26278fb85e824b215cc19919247946fc5b2f58b7d705b4635f8d64d258dbe1729a22416239f4dd3c8296bbae087a457579b875410a142f4bec06330040a0de7d26dd394ccab3d51141d44234fe05f115f84e7b9aedd1c8a487484081dde2c4d07f034c17a30fc4da1f8da8f588fc8067dd5fd9e39550b1a5cebe9ebfb022e1c76bb8b8e1a90e32e4d41c65f4adced1448067e8a6a180db370e66dd8e62cc5da51f6624ab7020b1192bf9e7131daf1aa402b3de885a18d483d5043041a2e5e88e15c2848d0c3ee509e5f2e39ee047623de23a541392f21659d9920622d0bf002f1bd99c839207eb8f117c730486dc8b22594cebba147c0a2561e29aa652c364e8198a0c661da75595d2eb248a71f14f213250e558e28b5f03deacba47970b3759e13648b6bd64cfe789db20985f22fd08ae1
+
+# Valid signature XMSS_SHA2-256_W16_H16 [VERIFIED]
+Msg = ebcc54f09738db1c5a24e315a7280d4cd8c266ee1024d3b32851fc49b7ce05c2a43eca9bb7d584635eb2ed538d86d773f4bcb87a3df6f595bd1e5b4c8b03a70c7bdea8f441058b133dda4f409f099a9b68b6dfe96de5ac6869ad5aaa9cc8630201c8df17f75202ee3069e5f912a88e0539fb0b04d487949a1f5a4ae192e18c24f1fe24dce1ba1c00c3bcf703a547f336594f87d1d2ca98a9096d4da24725601b1752e7d7f1986d9ea7ebc4caf50169065d05997ea6dc1e6937c1d7aad19682b10b56f8ac4c148122f9e906ac21aa0c3237b41f362cd869e9d25216c466f4d2a885296bcae2f02ea3
+PublicKey = 02000002a417b6b239692d6d4fcbe225f5a8068c7aa947970c21402751953083f06741692cb5f30a388dd81517c600189a5662d1e008434bff3369890757a5df7963ddf7
+Signature = 000000000000138ac97bfc0a0e8acc0ea967ad986c13b015158c36e89f0db2efdb93eafa835f846c1ea5e2a814290a0e3ec227b87038a9a7d886578bf655455af2bc5deaa4343c2f1ad442b19674395970078f5527b0c7e5de092ff91fc9fb1e85e97c20cc6561d71920dea17c9d891fcd7355276b6ae3503aa9fd7d9627535cf8f9520a8ab22fb09c258192ff3ef29456e298515fcb85c87bca1c0610e57f6135f29219e44b2c065d0e57e3746b573593675f69eb2d01f1877b8bb70b5ff8d5760eba97fe16085ad6b59d55ac3b16fe36699c038fc5804cd05cb5d7a1d32527c55faecade1d19ef1231c9d8596afb6e94cdafc6dd30437905b9e347b948f3c896f5ccea6252d17f65f7d52c3816b87b7cd75b421b63457e3d3d41829ed2f86218a9650c10a6ed213019dd085fa67860ecbf14fb93d0c60ce6320a71d79ff9c805523c019a506750f7ee435d68b79858be7bb256c6e0801ae25ef6af04c82c3673b85edfcfaf3dca5fcc0d47b5f485e39834c54f38c703ad3eff0328be9007b40be9aeb367c37d8bbe5ab8e4e2601f27ee408d7f0addf43816f6cce10a8e0d0676a1004384d1d1c2f9948eceb6d18af6b48f6f459a58aa3c83abf42c0d4ec7c681e5343dac6c9ebc68d0bb71ad3b7d9129ed2209c94759dcb204e184a62d58a364a76649791684a299ad14ba90808708ced005246abc9bc8c95a223c3b3408dedd220b7ab4defddb2bfc432ea0beedebc58432b7c667902bf5e355f96e1a055914b393ba72030886711991602fa602100fe50a2474c336903cb6672dd0b2214dac4d94d92fce1563ca122ac3d78411abff02d01f29fc1662d615301836336cdac548654aa2f69a9909f4a326bc85727280dbe160c46ab079c368891e0b143c292b9d6d17f4ff0c6e813aeb65291c97a8692b3e03b6b83791ca481c0671c53b30c69294d5d1e1aac40e02a7571359040d141016a49bae65a7152fecc9fe61208b80b2e85d34aa823b941340ad7bf5226deeb1f2c9da84f132cd649520f2754c171be9b3bb0c2cf530229111c38b768f75ea73a8c0d6d88d7ebdc68fa7c5a57594b2e8763ebc70da77dfb9d8f7beeb5507ee1d32513b7d8d868fad9cddd96b73405b03fc51d429dc90ef4876d328526fff1461b95b4fc77be6fea9005fbf08eae63d7bb432bb6bfa95c4d2b3fdea46c785753b954cb419a36e0a17f8b2e2fd87c715a55c8c809944a75f6127b7c804d44d5ba704313450747bd89e9dca72f585fad5600870a3c68dbdce4ae2f767fc9e2734e1ba109693eb8d428bcb85eb559562c3b934212d37dc337a345d0bc90725ec6f4dd430013318191c711a8b52cb105c096930334323e077cb4d2dd9bffab6568ba51c8f3c311d49acba7c5a908897a90b0dabb3b46d77a22696b38f39d7b469a295a7dcbb40ab479b6b69afc0503e536a2e8cfcfba8dc3b544e9145aed715e9ba1970a3d65df05154f89ab754f56f19b2ae540a3af2052ee163a05312d0fce14e2ddd0d15752f796db87b0a729b263c63c6114f6dbe22c239693e4fcfd44093e9e0451ff80462247ccb8de2f5c52ad60b703972831506979d8c1497e6265eb57e9358afb6489c277be3462a9bb5b5e860d1f7128eabac04b96da4804f51aa9059aa29294b44ead3091548b75de42a965e2f4b95f99b282ed286d5e5b62f099df518003488d0b2244d8401569661584c0bc2dd0046744bd2dd890f3323ddb5bbdcb774085942e40f28991e3fcd4c8c9a2ff698b0d14494c003cd71699d1437cee4f03c45ed997d11c45b3e382bbed0951115e95dc16787b84ce90dced68b0b1df42391baf968527aa19d70e39a03fd2d4085b45d5ff610b518d6f6ab7149a8f4f39cf5c9a65625e337b46200de042e3bb20c3b25d0160b71b9a0b36bb9fc255677a364656618a2b60a3557632afb85cf39e4d79b81c44ca54b849a823dea99adce651c9ff78b00356b3b073f94ad66f38c2437ae8d7104e83ad592504262c43426ec29ecc1b4013d9f70ffd05e6c5f6cc9b2b52c035afed293658a980af628ef134b002059a5c5812da4b7c952c29713045c9e9310aa1d1d3abc0a6ce4cb34f550c81c89d3dce7247f9bd71b43f1330a05aeb653bdb1da03ae2a61b10aeb35804940e84a3dd7f9f277a67fbb548bc41240af787ab5d83277134410125df3df10017e5aaf0130c96ad5a69f5ffa2848f9b44f820c72171792f66975c5bfbd55a7e63bb76fb10cdf0c997a0a7da16f57a64d27aa431747450ff64b3c079912d0fc9b91693b200b72839aa3443b46e87346cd2c6ada4f4375237d4652d23cf17c5f9115b1a46b4e6a0edf563eb0a27fa9d8f0601964ef945f68f03e5fe80c64a6409c73b7f3cc8253a41657149605fa7283cc93a9f6d480ed9573fda182c58b41f042a94b3234743acf26532c873431b2e86548e3bb256d293b1e1a9125bbc0b6bdb90acdb9f3d1a3b1e10026d9b29c9a639603c90c9dacf4d6ad395686c677f0d0407e7e7982b709fec1810be207fa99530cd9b59dea0c7cde870728c86034c98d7d57f3ce01d1fc8494c0cdfd14dcb29d54b091c0056507aec6be2cb10a70d0105eb215e682698dbace3c51df6264a44f61cee352644627b91336c84c7a3a46c3498a667a5b028bf7f4281394d47defbae0130d1424456eeb71c2d10c6f8922bf3f6a53cfc6a1974483e28c7196c0f63934688b693ecdf528898cb3247085684e8e3f60fa07ac053134338db2cbf22bd0992ec1dc5d6d4db19719c65d0e64960f5e1d3e7ad8dbabf80c231f0a629574e4bb2d159990c1c30a502b36c7f213ff8eb6f44fab7787b6e1bae2facb07ac1de9cd6edf223d970172f3aff808cc9e29525fd73c7ce913a3cdfa363b600439f011b73bfbe7c90a84338973f87810c8472687454b2b3570bf5359ea1a17fcb749febed9a0f2662d4ab5484472678e719c7d75fb4afc224f8efd256e9b7df7c7a67c1c31537aa4c1855b7337d348c36c4fdf734ebca52bf662a491344ad1b07052170581f8d79c65d416390b7f9bd7a518413a307ef24b0ac54c792aba01d571d366587dd500c03ab14d2e89d1ec80d5de656dbb9981f18686e0804887e4457c2381f371f844d7e3a8452e05e07076e3ed25b87da0ad17a7b76b66f3df617fc5d138fc969e282b59e0beb26f198df5580bebf223c18e18c7d74ce940cce29c74cf805f76f01773be550cf4ee824537e81b362ea4953831ec89893a68812ffe9fbc059380d050dbd882cec0fee2a2ea67fcedcd63ade0293dbbb3a779a5e0d4ab66618216a2e2f34f4510c8e74dcdd04d9a40d7ff0ca2084901a9315fd220fc06bf6e6dc7d56d5b2ef60871eb9740c0b5f8d37ddd64094fedc1c6a1ed616cc2ea27006ca77a3fc75ebdbffe00ed1117a427f6aded45034c1a9553ed0c77c8baa6a354c37f70ed8e510427e342e60a61120169fb721a1ab8ff9d0e6df41c1ab12061d1915ba8e453b74c17e3a7d1942bd5d82e47eb1c4fe1da1c9816250bd4d3347db49bdac18b19b6b3d54dd2a3dc049526df05e70173bae29b96dee388902a0ffc83b383781e3924de31b645c19c736bad29d0342b31aa2c0b76fb3985a127875424285e05d65c2ec481128a28090b27812c48f94a313641fef783c19099ee1bbd00e2c1122e899cfc09e3b438535a726bc1b4b4468c6a1698f271284f84ee204d9cd7d176afc5616724fd66be6526a6415055f94750dea3f32d190c0a680da47ffc024af592b7f8b3221aabb38603df507f699f158cc2a6ed7735e793f0a6dd5ce4cc1231ff67b3c96e
+
+# Valid signature XMSS_SHA2-256_W16_H16 [VERIFIED]
+Msg = a04306956ac18dfdcd1226d5cd0b49614ebb0a43166292616ae3463a383a2bf7683fef62805a746ed4770bca969cd2940b3576ed9f2c496a69b7b0a111722e8895a30708eab39059b66eade86c9b4fe838eec9418a1a1bcad3515274525c9e35e35a3a6719c2f4ec3c32b8cc6a796c6fc83b911acb55dd876220d436aa38128ad61e
+PublicKey = 020000024f2120345df148ec61e9d30a2f5f570d82bb92caa63cc6c0bfa07fcdf9d257b005149f9d6db23142def5dad7b612162c30b0dd83f0df5dcff7ad7a18ffdbcacf
+Signature = 0000000000004d81c671c3daa405940205fdfcf32b33ad6a144ae4e5d76aba72ad0996a53cf514b4ab2afbb21412036f2fff7303e975ab4da19e8f762938c290d985a75534b9fdf3c311ce468112ae6293da8829a3a34e7fd9ef6425882ee9e9c73b9e2d5e9d232c35584c1a844b0f6e68ca5a1ae006238671835b8946095e1c5209e8dbd895ae3cdca826ec9e9c79212b6940f786067195796fff210646daf38779359f9f2506868d0b665a98b87322078e9c6e3e1f8a9b9dc39961298e93cd8250f9f3500861adfa7bf39a3998827d0c0f1daf417a228deec393dc6b9390279fd028aba281f13e7c98487dbcc1704a5ede5b7dfc2fda2837d7a9fa20f943349b2c7cd7fcf1384ceaa2e6988f20d67282340c594dbac56e45f8a4bba477a05a5e7bc984fd47f39d625a40b6346e92e47ed825c8b982fe498ae7ebac5219e69cbb8dea9cf6f86f08637f2c02b086613c2205997b85db0a9b114325d12d21a2abf8d75d3ce3deef73c40ff738df01146e02f8f5387cd85aaeda11d1b4825cea475db99946079e95908b13ed751076da9a2e07a7fa0fb435b5a17243a684405a2675fe417a0f276faa502bab765259b6676a8f646d1bebe346baddf0080608f4ee03267f7d6c24222da7d0f4c0bcb9dad4644ba92803ffa60b5c21177c3a6d658e0db62f3351f24e39c2610cf7965ba065df68f8b2c2b9da67e039207b8401db24cf3e7d783da3faa05ba55381407c88ac0325d4c26960498fda42dbd62722820eea01d2dffbbf43311df4e1e72a9f901c913e66d7752481a2e6e5dbb35661671956b2a7f9188f704333995bcb37bbc1b9e274dde28a77d7a2cc059cbb59bb124438bb21c829240da0ff342151eea30ec9e90bdae6932312fe8fd34afd7c7d0ef6449462c240ecf89376b5b564f96ef1cbccbb95495fd572cda1e79b225c7a1c3f31b8542b99165995ba6c6275643aa9bc72ec20bf72a7996662b7d06291828c6b837620884c36eb6c7a5210eb8d8d411b755599c5f8b30a07fe6049979b2002ce942c1664f5ac0962c17ce89788760578055e1ba45ce845945e013aaf9135f63b8c8e3b0b3b0f3350f2b6b91733c377d5bb186bb14e199fe052b7d89f2351442025554cc012798d4481c61ac23cd2fa2d20c84ebf53d7dd26fbeba9d590d45462fa3084ae379e50ef5aae0975e11c75e7ca24142c10897684ddd5836760a9e4a4130ade5fcc30ba1343df9dfbcaae81288dcd4b335b9b5b49e76866d840d81a7bfca9007479a2033ccefe7166eae4449e106f232e33f8d3e8640186875e0cd2903136f898e848cdbcebbc1490c89aa181b7c700529aa1759f4b2270c61f95b609d662772f3597c9d328c8ff31ec1da88fb949a7f86cc4c8fc3dc490ef9a97c57aebbf221cee1d520380959d40d625c15e3a90e3a2027c931eece26d0a40f524a2b7145ab6b79d70ee927a0d13453689dd2c53dfbaaeee5c00d07bd5093a1cf638e1b1d846ed73aeaae9a73bebb49e8d6bbe937a5601c89ccf35b8914db8b4a61854c4026a134886551b2f2eda58e80e0a6cafc30aeca92f95039ab8e1b350896be3dbc23b334709512a7727f4f9cfe7b5c448dc795d52f03ba0e40a2e081987a22d88d59bb6f69d5ce22b7dd93b55ad8874105efb1099111c244a17be1cb70a019cf97117f2f91cdeff87ca13c5ea4eda4322427455abf4ecd2353e81ab683a8ecc45cc732f29b71d60db9bd36e39012eb8245fa010d269c9c8b387c6701d522139270caf47128ae3538357e388569ccb4c7cd03a9ea3a0ce120adb60ec40d620f3754a903edd1a071304897ce461d79e84657df80c1d0bc70a7686508c5b32bc93fc17a96e232178f297b38cd2142f41c83c285f96ba4bba5d64dfc0d73a6d811b812f5c175d6dfb8375ef0600971169aab1021d23c2d3881f5c852fd3d352a4eed22ced26554cda94802b5d5167e9f23e63a4a7e470ffe26f74374de52b929465e2877b7bd24c1c7d14a97fa53c47510ed59922073f61b33bf111e4443e11f32ed582e9f9672bda1c444dda1bc3862fe7562c1fa3afdfe143dd3dbe68b429819904e2c930b01efad92aaa603d6c601c2b812d0674a0079ea92671ef523c56b7c3fa6fc8a4a1cf3e6dab3403294bea25c0bedf529c97927fc0388f9b56a1d9ad73196988fe5877c0bc42782644c141f79711c53473422c8274d07253baea137be2b9818ce87aac5b09bf7529119e24be1be2a5cb787cea8c366dc04a70181f0e5a5b4502238cd6b5d7256eb73cbc3dfaa85d5bca3769e14e5641b248e019a7ad973add46ddc8ef0a83a3a5923cebd79ce1d9fc8a6afe17c599355575eb2a35ad5352f8606f927dd6c562a49b836dd372b7153be0515d1b211324d7330ff836e0021546f7d9421b4f55db2b88d1f5d3087a2d177905321ac499170ae211c1d2aca9db23b71302ac57a43b0c44bbbfd936ed9e885afccacb6ee70b303cdb44049290a0c10037996fb0aa5124f15b6722ef69387c3c5c51f428ac0c8a17e78a6f1295c9d8dde55e98ca4d75c52e8241b862c7fe6f37cafb781d3046e0dd0fb7c883abac276432865f43a9ec1711e58ff8aaec489420e00c5fe607e9a6489ef2f59a095f2e7c65c8c59afe0f68d65150882af419f1a52b852a0d61e1b54453958af7628af7536ab2b23ca72ba3032dd1ae411fc3b7a2d182caf1b4da556a4b092b8f8b47d94b9595c6da93ddfe5477dc9ec1476ecbe6049b0a4c5d967ad15495ccaedba70d590768473962a98b49bba61b0eef39076847a5066c1a41b3d68948e63b0aaf69b62609cbea2b7338321a3ca9d8eda2a27ced4318af6e4f76449dbeefa1b905634e5679a5d37d5eeda321bcde68da74c27210158fc7ca6958920a71e3ff181b9d5abef9ee3a19863efa593a77ddd98e7c4d445397e0b0425d5dadda6d788db82974c7a54ff5b225bd47003140f049ffb7c27aa274dbc19b95df270fd88e1509df494a54fcf8b29239cae7886b89ce877e2f186618aaf319149e1ab55d8225b4f1144b34a11554ebfff93b27ca67505b3231d15fb05e1264c404ecbbd9be055c1edfbf516845333e04d0abbd2ec24f6c61d7ab76ff39945cefe745d8ae42767008c6066cbb853616b59872361669d3778d512dbc67f379f2b924ee783beab3609b1e9866c41f27d7ec877f19916a9ed5eeadc014a9e35450e073fdeb5f539609d5c4130bcea26356f5b9d28caa0bc8f55e18b019b40097a8951977f09bdd20276b4bea47e6274645c9664441c63d38da09e3db6f0f1bb9401df3ec54746e8209ba3258cad99d164920f24cf590a7daae6d78c05f08129de76cdbd7eec6c6ecf56a6533d6284476ba14b3a8585f3252357496e3f49ba2ca3bc4fad7f3cdf89a8b4067a4870c848a6a6d401e3b470b95acd21222f7f340f7ac03bbf4f93f1c9d6c38cc2de245b54edd9aedd4677999c33c6b246342205d6b67ebeeef4a67538416f15853696b1533705f9363c3e21fe6f67e0138efae5db722cf9761afbba5a6ac803c3da38d6c71ed874cd1748782babcc260347cb59808c7e13112651d7d30d7eff9a67e7a452c61ce9af456402205aa66c973d0fec242124be20327e3d6a8e8f1cfaad5058ec693b10716ea9e6bd08eb8e0c696a97dba7d3dc2a0f6922da4d9d811c0292b8c5d8dacc5ad4ddc80c3959ab41bda4dcaafe4e5264f303e28c1828988c9b4cf92291d2628802ba47e17e5d695a7fa59c5f5cc7b88d66272751187b0cb4892f6f1e9a27003404957890f74d6c4152ee09999b26bba5e976913a6252dbf3b69cd51
+
+# Valid signature XMSS_SHA2-256_W16_H20
+Msg = 39f9aae727ada93a1b6b33c1ca069c6800ec737cafdce70ad971c3c1ec605c0b0b700b910d8dd384f210c75795bf9591103e
+PublicKey = 030000030918f68f43288a0a2a3a7f6e05703c8b32654ac493e0bb21c3772bb8f74bef52cf97444a0711cb46259c6114c038a1fd29bd0ff46b32b700e468a19ad553ee89
+Signature = 00000000000000004f33faea37e5446ae2ddce3438bbbb0859ad5e883050f457eca89e05d0f7115950afa89ef76ea8742c7782d6b21f8ea27e70729e151dc47d18f928f41e6bf1316a42364326a023eed85e6e2893adc84b5b5dd71d7fb84ed9213b7c789cbc30feb211309fdb830f61142b9c06771812930511db2559ccf0ae6c52dbd3e5332ca504c2d539fd1657f23e7ec2fe02c0516296ac877d03eb3996a202800b7ed9b0ef99e87bd89c9e35fb3fafa3e72587fed3e2c2a857d8364896701c74d457eae2cac2673a5a1ef7bcabd674ba7397b02dc725c511fdd35de6c1cf71ea51e30b29d9f7ca08d4ed82e646e708a80314873c7506a404665d21ff71e845bcd724e8d28bbcdc85a93f18b01eb0917db9418e3d0c6e989eab1852775f58c600d65ddada6f7d6887f7b63388b12b864917319ecf16c49453fbd32b2c1162ff533be08c892558189a20d35a8bd99f0a5dc6e00631abb476713c31a52387d320195e30adf8881f488608f9b062d20fb22df8fb187f99fc6c3ab597c73f3787c8c559bc250afb5bd2f84437e7dff2d99e0082d992994a77e6c78ae20fe0c2aa2ee8197d6f607e178a25420a0060ec9c6d97e2920dd69fd78030bd57a76aaf6897431e2340e224d17d215717e17011c3adf42ccea213f752ca5354ae22f2c2d9e7d9f301e8251b7c7e82befea650f7fff343bd41f700c0fdae1be3c125526558a2f162fdd05f42dbdd5bc8a0566f834a4f1e171a2c989423150ff3b9244b311013612e059beb9f0a1ff065d7fb123ba4cba1a1919ced5ca5cfe329d4a9856172b714ae54098ba3407ad5c64e180e727866baa83329d0e9ca55cbc5874d8f9a87f800331cef2a0fd56d0cdd8c535c10df0658a8a8e54123666a460dde4546f1c237a894ed5acc3b9b4382e8b9e6dd34d95bea81db9f80b1ae1e864f4a88579f4f7e530d150063a78f48ac1b57ddcb0abf734e8bb6ecddbf6bdb672f782ac09e29002a7d42c9ada1246903bdd1c353628cae5cfd765fffe738c4b55c3779dbcb4747c4e7cab0d13d5b14bfcb63fc911e62fee0d5c1edaf748c6bcea6325a57948444b4200dd4bfe952efe135a8190f5de1c8c8cb0ddfadd9252e1b9b3d6db79bfe201d32801529a583d888d8e2d0adbc14817e924a85648a19a78aa0ef010e3949fe82ce65a6d39a9bf14823ff68c0ab2a9fd92861fc8f2d1da4c5c753c28f7b56480b7d868f69fe79c2414e3bc047b74d51d0fec5e1c7060535c1cf863d182b52878e4b5c6775ec83b59e15358cea79608ef9a2b92603397dfbba2dc687878de93e1b55e665e161c3c4d6f5ed189a9ed9108f8dd615903d670714c0197133e642c0a86184b6134b24ba88d2d97f109716dbc34c5b61382a35147cc9b948c8c95e1f8c4369ee5e23b7c2ae45570d9e4fb0c6e5c978d44914d05b47ebf18caa5841bb9b95d1da148604d5ed44b1bcb2e771ab214c936fa859f1cb2ced954e0e854c468d9e541cec40a58ed09007512cfcc9b02394bb1b6c3e28111bf404672a0f4c5ccaaf2a64e171ee260afcf755b8feac5819ba968c22fe6e00f269e1a274a64b11e3f9b8cc36c26bc4a389231c9e673c9f911647f82e1a0ef16dbc2f9f7d594ce964a0227e1298bc2f2e28064da0baa89d9b68d7bc175119cca4a611e468740d73017e52b4ae87ac1c36a4e7be9b9991ba87bc7b3a89717c87a74ce1753b37c37db259dbbf49ff11c2213a498a3daf82cb0f82bf6f4d3b5994d2cf7529b49ba7e506734561590a0187320019703b09167bc61e183a91edb7534f73f32b48fff33b03d640501d09ec35c8e249a36a34da29d21ee8cd0a83f56f09ef07844a4e5a41f720b5a3b32f09447943618a104abf490bf7958c72f23f5a637c7a8bc2cc6103b631f341aa1c2faccb9377e5bf96dd34e7cd882487abd279e66f4b5d9d7c6c795077f17a95bc9e8c0f811ed01d7b439983baa1815428abb0c9c7b6c8c9c352d5552c30aac3ceda7a075c70859755275bc359cbcae0724193b65e8e24294127144a824a8bea30803a2b13a373b9a315827c52e0af3c816a450e5cd24808e12d7bf27a3d4b062b9d3a97d1bec4edba0a5526d9e228c0cdc444007c003bfd79144845195338a044bc72e2a3275edc74a2d7dcb415377f70f5e9b5d9f8e3117980c28010e7b76140a2cf285a16d09d5927d719d0081a563d35b0e93a0423ba8939b787924b0a74fa8f1877b510eeb6a6fa27548aea871c9abd3f23738a21f524d49667905b7b31e6cde977c6beb69a7ded2d8eff8b6da07f8bb720b7f34a22c75ad888eb4326cd0d3b0dbba3146edf39f5b4acb7440d7fa800fd5bf60ac864191e2e4982d28d00feddbed7a98ba68077720070ad308ef0fe1b10b9339fcf12e1240ece0e7ef6d7e0dcfe2c9d41c301b5b252467aec0c5328c9788496766a412170ac25e29fd663ab5070e4db70c69ff2a1e406a61b02effa330c48ce163f000ebe807af287be56fb7a268eb21218e70b46cb3581fd09427d47fb0a8b2c83841c6645fd5a64452811db1e5149e4bd521ec4f57d11d4a8f7c64a5a8fb50969350c250732906869844555fe14e8a158666e9e1b357fdceb6989fda0e1d1167e57b9d94060b2cae39cc3f68757b08467b3885ec2beab27d261068d67f6a51229adf8276cf94388d9715845e159f14de3e9242c3377d83fcae408849028e993e0b8d5fb2f614c2ced8ee9ba0ac98202dff76ce43de8095df84f228615e0263370b56260076ee3b52569a782e6a3f502404ad34e468e3edbbd615248eeeb02813354331ea8e3f9dc344f89a3a5f8206977baf90d60a0538473a00d061bb3886cb85094705714916ac46b9b9966ea0055826d45a3e6e1b2f81924255a17481aad887a2384ec6aa91756420b7565ed434c9d9da0f185baa1d8a4824fcd7fad65e2c1e859c256af9d15d4cae16b4623bd83bdaa44025a1ffdb72501183851a5bf76ae830888eb1bc6f624863784c5a5a5549db6ca0982278ff887aac6cdb8a77aa09cbb3fe9c70cf45f5060595d9f41e0d3b149bd0365754c4bdb3e4c3edacf4b0825860a1e25006e2303445a56926fd6251192f3dfbae54f4814af1789cdf98fb803047784fc01f9f45c6753911763be1f7a1e90bac185252b19f6a1776e6a3ceee107f58a8d63de66c0756a5eeb657d44ec12b12964fe1a09929407a4031327469f8b9503e0b7ad78f713b074a16a3c72011047126ee46e50841128cce31d11a140485ee5e94e9b711da57301c342b28507cf653039d7a22825b08c883ebecd3dbe803f8c27476e87721042e95d9b12c0a7a7eace3097a170a03c330d5b01d1cfe24ea1f000fc4ee59c5ca2a886df17d7512d5a58e8e8310082a59b07efae1f78d35bb37e245abf8378773cf519962af208ef51a7f133b2086f6af6ba4371da73ff9dab060de811cc2479dfbefd6339e710c2dc1442b3d4a66843741d2de3d925903d47b551ecaed555ea3edd8e12660dd64544e34b621ca2cfb82f89f5b00138e0afbcdce13c5db2ae32c776d256e8968af31a10df6964c481c6eae636960d20b95498e3c75a60371cb1803eecbdc2a8caa89008031cea9803348cf89dfd6e5b3589fb36bc796548e8f88a63330345232d742d9e20e72953d5263d2d981c75a52c418668217051d822db82dc916daa0d5251d26fd81000c24a8337453b44efa277dbf0b87e699fdea9deb479506e6601e934dab1bf73224e3d8ae3093a995f88e7269413d3b817c46d20828f128880ad994e2a08183bdb0ca6a85b83bd933cce72b318d0e8e5967d9be4989077cedb47dba456c7a4b9253de349bc792b0ad66ea8f138f6bb83b9e93c5f7f871a10dd3f914db0356c8c7f20a6a1834ae7cf7e874636cbea50e6917b0e830456f6663d9cf451afb47cc44a7ed2363162f3b07696ed686671c79e94e82cc9bbcf289ec63c67e5e6f40372d64b81e1f03c7d769613a8fca3ef70dfef7f15500e
+
+# Valid signature XMSS_SHA2-256_W16_H20
+Msg = 625e1858f8dce3fc2c8037e18aad9ab670dee198219dd65bd74a0ada8e150b7763dcb544ab51b2120b73d29611475d5f05c91b0b4eaec824b07812b185
+PublicKey = 03000003254d8ad016359fbefed93e944c2c6e5311c3eace96b99fd9a24059a5f9cb114d7a638deaa620d925806ab2a61802eac33167422ed8d3ecfa8a2910674034c9f7
+Signature = 0000000000065cb691c7cc963fafba641dfe18c8491143e3aaf46083c4a37656777ab89a4c38c303ddadd9e45c333ced37f414d5c6ba36e736f789db08dc0ca792c1acabc7e93ec0f0a798d7cd1ba63f226e5dd9ca934edde4d6e663009a048a8c69db88c6adae565545478e0da1b0bdec7020d689ea1c63af1b45701ca9bafec111859342a3c1d7fe52c3e59cde26a0fd16375c4185243d907f7fdf5a2d641a406fb4649d219c7c7abcd81dd3fb24c7cc6696a24254041775c3fc95a2d54b35f9aeaed98dd3b673f0fa95ef7cdd8a201497b5418f21569d269ebfcd0136c10a8cbdc4ca607914a274919c5ef47e12900e59b20cf1f9509dda318dbd8137a457ee320200d1d847ef59ab90c5b96141de304ddab7dc871fe0cf3971793b0bd0c1e0e113dfb78500f53520f963e42cea13eab178bf47cdc4a9a5b708a24c7fab574dc5007f143830e5a6c4d5faf5206515fb145fe390cfcf29951941c813ffc87a1b9ce5578b4828992500952ec0434cb55e70e46a5f81b8b1654ef72056e8cb6165783eb73f141e6fdd481a4d24e3a8a764da8ede539c465de4542f45057950aaf517d74e4e56363b2e109d32da8a335d43a4401c8c9bfb86ee2c650fde415574d1e4efb9ec27543e2328c5805817a07f09d19f477aeb7fa89890ee6d35523374a286890861ca2c5f40f86da2689f33b56f42bd57cdde52fde6f287d2429b129cfad455f83e73ad822165a3a9b5c226cbac0d55d35168139cc2817c049f50e809f4820eb28788031f01ae6b0f588fd815b7248500a3fd4aa46ccb57cb6e674ca78bd28822d6740fdb7fc3d252230e581d287474e579de0b202ca19077e7dd068dfb14211720277c7e8b0780f2497a584ac49d82871434a9424233fd09aadad2f4e65efdda037d55a9fabb592ee77d7f1290f9b2c0bdc44c0b57f0f84ec6d3f290bc9edac01c3876b32e1f6251b283f1c075d047f6b49a7433b026bbcd8955553d0fe72a5563e573ced281e329630d2f0c849a476892bdcfc895cd13221d8801222e3c380d057c8e96c2f527b136e3133c8631ba54a6c0dc578b1d4a486b1c1044fdbab27d9dadb4aadc6cbf7310f3e2a06b3a37e5e41d551a6adc5acdf185739d567bd1b9e67e22f53d2e9de86d7941de82a035e22fc3dc90e092866e633dee0eb9d5fceef1455fa582d9f74c4956697e8968d3ecef4a6587ed7099ad401a827133997efef227c00321eb5c2ad60869dd274f4f60313644daf71ca2ef29ef2e9fad785201422954baff505a07b4bb44262c8134da0021aa4816fa6c002e142ece5251d35ef0de935eac695e74f86628705b748943c8e54a0ecac7bd95aab6ba32a4789f414cb5b6292cde1d8d5b201deaf5aa117a319d598a8238126b014690daeae5a255dc0525c37590e36ffb5824372ca8ed97146e9c081e8499aa4df1dac93aa1654517e4ac9f6edb992e2009e8e1623e405956762a79400d71177c55463aecca75666613c0ce2486ce3ef51bd0ed7e1f8739aded334ede46f0ce5d6811429e45a1c658d6eaf7c9209d32719a63befa7a6d33b28cb80789782116e562c5c5bd053dca5db2cad6001d9f80f5244ae4b7218fecb48db1374d900f8c2fbf9024ad2b70c16f52d2cdd4daf911472930cb452bdd671f07342ae4d149986767887cce62ada2f44a501d066fdbb70cfdc9bd8dcc87e96aefc41ccad2a4a83cbbadcbd65792e4e676a9893bf3214efa2d70d3cfa1d0ced1ee864a5ecc4997a9c370f0f45e87ae5d6a6a430da3eeeec1230e6b22a4153ee8dbd2069b31e9c54071c49fb0f562aef674f35e5c3fb3f17bf0f61d31722c68c396d5dc90994214276e86949f890ce2b8a6fbb66ec701d2c4b95ed7cde65689d76ca57755c66ad093c306a6d7f10a59e17f6e3af38063736e638e3fadce7add07037bc932527ff0bdfa8d1abcb08dc582c2c33881d840ccc62d37432ee4513de51e7ed5b9fb5a79a91ca12bd53c239f8c7f7219ce7665c4afe545c933904cc6c91f87667c936a8942bf7d1095b0e821b9d1ce70c584b126e6eec166dc792ec4ada5f7d586b746a6d9b3563ab67a14161708ac9d313cd94de837056c857ace049da3ff897ec68538e8a81039cbd7dfabbbb62011736d5cd72b5c291764317a7c6460f09ea91a967b053fb27f680dbdf42699c61c56561d341a98397de5d4d6c89b30802a33dee1576db2fc98cfb8cd8b5b0881fc9641989016b793fccb66a5b8f8eb997c5a24795dea82715cf5299489f11168ae371544c66adbb77a874a8acdc53746247019b8687d6eb967755f9c8a2757b674b7e8f3b4ff7d74c6e1b65c4e6569457e362ae64384241493df593b8ce6741874675f2740b50dcb09d4daece5a337985338d227070b4b8db5f76e1592d4abb216dcff0633cdae13c99f724ac91a6a696512f91ad1ad47df08a313618d2e68c75ebaba28354bf912963c1038b88c8494a455c3edf5d05b31b29ac2de831f0c68aa2d7d1c92edf0776506e861019792547943d64abcb59b16331fb9ad6252553cb048deaf7521ab50192b574c1f82a8a97f6437b58d460f99403ab90d6158114ebd97007206688459cd23b2ded59f2ca0e486f015953a60a539aaeff8f9c51553c6b3ec24936955b7908c85a27d2659a6f00f46f929959a4a6a606cf0fcae39f935e805c6f0f4ac8eac5f075be58a73a80a68783a6c616860c65466b62099ca67814756f93ba570fcf18fb9bab9aa78dcec71d2bffa7b2a1936f04818655c3a7701185268aaf50b5c11296c6b744d0f4cf83f6132ef31e0256faef66d548093aa8544fae90b88f5a644fdf85bdb6929af02ce9cf168616b0e0154dac56392cee5be7964ce7f317f722fb585d703a56a031e2dc5b2e77558cd67b4630c702bff3b5e6cfc1aaf71da4ea2adb3e09ef6b36c79f0a51a7c46233c18f1b13551ebc4af6f97bd376cb05c52f12a6ccd4662afa5237bffcd1e39991d197ea025324dc63795f3ef2bf85169c00d4159a79013d2039b2969858524a9f4d6567d5cf9a319f325abe4dc1d8922dc29ecfead7ae4d9e84480f2a68529c013d0c8b40fda2d19c57acb1555137bc8079205fdf505cab3e3e1e7017de0d5383ae8a14457a7034c810a4bd9f96f2acddd223e7cd2dcc848c01d7d8958f3f2a9f68793cbf4e5b40baba49d686a930cbf6c0e65a42ce446226e52c3114e9c3f5d8bfb79b89430f269a4795804e401a8894291355437b2823b908ec04fb963dc8cb8669b6f7776c0f9fce4092d90b918664b5759d250da4760e4be6822e242383ed9b373862517f3463d17d1ac4ce9cf4ffcb921878c90ab4996578fcc6f42ad477fd891c6efcc04ab682c719405fa713d5f92ba58befe4029cbce9ba4996212b37e0577f82dbba6bcb4cac7962c4b2d3c69b7a4de35d0b12c687524e80fe47bbf2a955553e9465a02b8a0abf804b5d990e127b1c60e1c10eb954fc8e918061156b5fc4d9a6f4b733e9c0cbdda42ce32b3f090bcfc882e4e37a03420790a4454e0bbe3d71b4ff75b30c04d0abda19c0e31e810d5ab628a622c96845e549fddc2aef76bf123ad0a966399641b827360026892d0ba8a4d0ebed928bf752fab6aa08dad78cf3b09dcc3a2c105cb789985699186c1156b57fd27f667855feedbe671de50c38951e4d7f89b1881df58b1e745902037703496fcb386c16e456edbdea0964df859b3870c4ae5b44a706cc38b6f20e094fe9a0bf4a3ce9d0f8dec8a99ce1839d0daaba57129c389228fbfc0ef33f928d758ca9efc0eccbd69cb97c8cacb0e7b599c35ff5e1c898a071a93dc4f80de0886e1a449c0227bb30d893c3a703be12f9528bec0b43edcbea0193e292beea56d1e5546146b5b0d63b8516708542356d4ec20d79ff8839599fd5c5d0c8fd5150c09e40d379875e5deff6b5073406682cc93e8f37b887ea7fbcd0ea301e8d6dab9eb0eee9e13d02bc0a1d3e023e3941d14933f06d7711a054c62
+
+# Valid signature XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg = 0a78eba54b3915e3958e149e13d1c2736380ce64d8b47465f7d3838428f44d808f3d90d6270ca46308e6e786e7543012cac5
+PublicKey = 0400000428c1a1df6a140fb2dbad85522c970b7cc38532a377c8027af308ab2bf6c2f41f3e4bfc0994ddb375347c5b809b7feacc5ddda69f2b4190702701cf7a37866a44f11a8dcc20bf5123d4c6e17672ce2fc2a8ef19132b9715ba78b26b3e92700d7a50ee5368fc483a0224b1e200108e580149a25e96f49fbf06ac58b2871c1ab55d
+Signature = 0000000000000000f5ac9203e5950aab07dac74840e119f1d96bac3f98d478c26612e386419fc50fd811ca28393f668275809d5469c35272031a721236fbcf1a8706d7340d9296a4b6d44eba3c795b57aac5a38f6cb77ce9a3cde1c4190fbd6c4e3dc0f4a50da9e16f498e336937c2ad5625094be9e2b075c37e5ccda030f5551608207b5b6439571e17805867c3a05c7e848956508aaba58f2b3f384ac574734c065290f008684c7ff4ca6ea4758a828c24a6d5c83a61a816c7c0f4cedfdc06afb327b9f8c427206b995941cdfcb10afbfe46c1f2afe6824aa52af293d694f13343301a632507bcdd811bad6de2dce4bdf3e1233cd298320c54f7f8de956c2e1061557685259ace41e7afffc3e4097d8500d775f8658c734f32dc570ddcabcbb2d7dd503cbcb8609272a834a4e1b9329d6743744642a71baddfa620804880ef38e1c7ecd4f6fc8bc7990ecc32c3e277ee96d6178dd8d4ed32eafe21a199c4a44f272e53593a28f9dae21444b937d130663a84df9c819fbfde1f6409894bffac3e146e76d5e5d993ecb829a2fe95ba4b5d149fb6ad4accd7cad26a65d5984fd2fc138d7095d5a45866ceead598bec050ba130ed732e18908628e420588e7890cf789b5445b6b044a3a97a9e031ff72d2ba129fca8e05f94db41fb7ccb76d638becede1d4693ee04bcb308d4ec91d15a89addd5b3bf0cb894e5fe4176f30afe57378ba22098531a23feabe793b86fb865890048b9ebcfddad7d6ec044f32300a4e0d5703695ab431a01f51cb46313b981b7c153df0ad74c1a0212eaddea6d39e29f5f77af329ac6074b81a05970550c7ee2480bea1fb8b116d5dd558eac2601b564a8d806269082962b7c5af5323e764bccff98ae0b9ae7b82462dfa6764bb95ee7b85b37e2e6827a4e15de48d53897eaec929a9e738fe9bae3a01788d78ec654b9256c4a7e001f51df7cdb120431b6a3d08726cc4f8b839587970d582fbdadce2f558950c5bfa1c6d1b3ef3ced14edacc1cc762307e79366c4a12f70b8579dc78e85a7b7e4fb8c79f3bce1f933c254a444ff6eda9ad1cb015d3bbd66e1300a7acd5b7ab214e38ef631ceaee08ebc215ddda57e53887a9a0db742156c01391b8ea170d71a9349c9657a480ff4dc086535383eeef205bd3cdfebd4620174f2b53afbfd204810bbfac7c4a38775307923abf298a20eea3d5ce4edd2d71a768363320d3cea5ff94ed1262ebc94769b261cb757770db5c3f3aeecd6f4299fb557ad6e39540375f4d8fe3a95708a7a24046e819dccb0b20ccc1d29ce6f125a97b29a31a67623347de832db0ac4f984d554e9a3d0510ff1b7da764fe317145c0cdf37723e061ca50f507751633bdd9358fd3eb964793462f9c331fc88ded05954133c7b8c097e1bcff4ccc6c5808fe0f3cd0a70452aa0b28cf59fb6d12de71724135d395959b3bce04f190103e25257d2fe62b5debfd2aa4c59c09af4f12a6bfa501e2d631597afe08ed866ed0633d50eb89fe049659130ff8e4be69ada6596a2222a4caeef80b7a3afce5f7941d6a15bfa6727e3e96f757d154fe5df37402a7efb1d973ce618d81c513788805d6cd633b940895fd35952ffe05fba60c1859905b0052f097b0ba66d540de92f7135fe8ea6cbeb8eef6d136fb381b77ed0b52e39e3013e8c6146ea363d75c93c15ea8c4955e2157cec998ca1015bb74c4b4bfca81de1313b25eccb75ea29042ce87ea49b559a8fb33f4d55de51cea0e0dca433ed9f2f53c1e50054a6109c71135d3b7d4b8b5956b6d872acd51c65a92fb5addc9ad7151841ed07d925bcbbc55b19c5132f3f61c150818655ce63f80b9a04111fc78090c81210377f7c79ed58b06f5acf3ce52c08d853bd9161feae7cbaa767029df05b5dbe6a70d8ada2230125fb636175bdea19b06e6b1e97d63e329cb5d4cb6fe090509ffe747603de2fa9e5d59e01c5b6ae5919e0dbc387ba2d0745ab5065087d88c01e4d63a0b1a315e8f1de8338c5d53887e0b075acfae39242c8199e67c043012075b76a0991fefb0593d844b688e3db7d428d2f5b105750ef0ceb02e66a4618a58f7c005ed50b5cd496c130c81dac1dab80c01741b89705684da7b04cffbc79bdb1f65f66f85ba3ad8c454ccde11ae1497986b221d0618a61f3d5dd4e30728400e20e685344203cb19ccd32aadba6d0f9d2d193cabeae3db54f39a4bcaa041ad62c0ff71bc9fb47a1e125c728bece5e42f2ae107bd6aebdb48cdbf93df1aabd8ce323c92b888ce337a77f1323c0f5117e78376957dee1442d8145a395ce03074aa96227a5d904807f8a2446898b12c005956c62f71d548fc69a2a94b37d1a844bc78e67d616d6fb95e5b1fd71e175c6f5cf605bb480028f18c62fa40e63c99d498b1cf6abd8afb64a8efc21510cd2da4033c24848a8b144900f0b14c8cf0d83913943468b62b3911f4003fe056a5d6a69f1a4ad303df2b448808765ff5d5d1c6c08293637098a5d1986a896197c75467bbfb5baf672334e4173b452b4bd866a4347f709cf27738f4ebccb2ffaa01622ff586af5888c6e74a7e652d5053f9d62a6ce83c00de639f0386a1fd5c088c2a27d7d0168b465efed4ff0cb10116b46647fea4c8a963749f09b17af5e4b696424d316c1b2447790567565ddb40ba653d21b4d5ef75674d10bb5174fe64853231f8ef586fc2d8c2eb45ee4f448ba35d07914e8f1b15ed7fd81ae39a4c6a740278a1195dbe93ec5ac979b18e1730519ebbc5061040175ac67a558f27c4df2deaec1554e7582c10eda9660e62ff0b199a138627478b64d10fb7fd6bdba58e9d7e1e5a103c1fe381a07d9f6194df8ddfb16eb21be5d7cf4649f9f6481c0c4eb6f1d2f393cb00be4516c9ce7acb195c846a54b09b8ab61abd37413d47b3c5fd9dbce5a3c1c621594586fda8f65c9e98c0247aa9f0622ca60062677120326ddf8d4394e1ac69d2c0e71e05767554cf8b72f480afe1daf918e3617fbf0a5a9873254f44db298c1285aee31c02abc07562f6beaf18ef3f55303d780e8f4e6d7bb5f5ea19e182bd5e978a2d85f5ea667acb089a1531a27efa2121107a3cb540c2b3df3dd0186b4c7a461743fabc41b2fb2b83ddf10b86b190544ff962763ed95eb8403e297e6c6952a8b752794eb768f6ee9dc3492da26d1cabb526a74e19f6cd756a236ab2152f299a1450f443eefbf460a6e61c548a082b4b66ad4781fe0c3ecfd769478b5144c2c85e67d1b076cf2c9a7f01d24c4ad7c8fde46bac54c454bf4dbe3234f25c461cfa39f8363f889d0f70eb87c64263d2711252e26a3519fb2a353e29d5ee35d3c59071c6c16f399734782e7cba6ee48f4be9192526ddff4724f5bb187dec5bc8a4f231b43451dc1272425cdc2aea7f190f7353890cff338aa855675a41e770635b29b585bbc4856d782bde9ffaa3c7eefdf23f4f1c77dc8093280262c5e9b251cc77e2bb09897fbb030df7445634ac96ffadcc3e8beb39a917b6d3bf5b82db6a49939cbdadc6ed026622ec146a5e9e6fefdc7bbef6e81442f38b3e23fea44913ad74c8e2395d75afe767d79ce4df0f819e62dc825a65ed3cc18d085528122400e848ea91d89565e638b835a660b267e21148359e3640737ec8b5db48df5d7075ca3cf6380a433bce3fa6c14aa2ad50bcc312b4c2ea85a32abd397e94102eaea46372cefbaaceb3588eb9a39e07b50948d15b3f45837bf50175ce6dd8c97cea265e7f2cf9800df64dcae8960ea69655a3434e173911f807b8ac9067b4b88b41a8e5b8c6ad14a273ecd8933912ad72e331aae56104dc2d292d0617d73b6cfeb15be064fbdfdc2477db2b711d7f44f630aed237f2639c6b7147d5f616d826e06f19ad1ff441fc08920f9dc58ab203d1396ba3721e469e179e84f4d497119a38e2530b48f9369d646afe47c5af35ed97f2a5f6d4c8fd1864eb052ce1b504d7a6149fcf208e683803394b36dc916ed33017c06379b5659b5b55b07f4d0226c6a0d3e327df9f577a15ea6c4640c81d703e133697e59cb5c25187414a62e49b4905f09346130430226dcf420a0b77952b6fde64a3a9bb4a5ee7a360895015de13dd8704b321b566c4928f743f808d9369c834e44bebf69740013d06edb3b364db3e0e671a342a15f3301debf259d36510fc5e54ac622a97f69fa27c8ab60f7559249f0d1901e6562e3ec90f47397840a4124ccbce534bf2317eae8eb87e7b298ac736306322f3b719f66553888ddfd8890d94947d95b0ecc0345882949495db5e622cd8c75acced4191931748bb0021c2fc0c1d2ae78bb0553adfb54688f9a55fa13d79bd308881e7c74a0cd8d6df40dc64e9967f097f661935fe2f6a878e5068b9d340de26f96817230fb7b02d797eb33261b5079271b8aa01c62bede5170cada87aa5a0dea2962828b24d4ccf50ab6628c6f49ec87e1b0ac23087fbf46c5d812b04bb5cb6c4db34a33f244aaf04863c257fd3396d140b6ee150b718cb0a04223461e8763aba49bcc36c1a4aea4f7ace802156f79414c5692fa1772dfb92c2537e4fb76d7e793701e1f375498e022c106074e920085fe36cd2d0bb5afcca570f3745af380db115ed3a77db8de5640a1f013359545baea153771f6bc17b9bbf4aee4596badcd41ed88b6a65dc575f23b14d25830b2f211d44f3d0c55829ae90cecef31fcc74818e1f9ab01c3ff1dc8c4cf8123f1b5f7e1591f8339f092e68b18f80f5c1a4f08d6bb4e69d9be64e29a7595d294ca39f7961f18d3c9aa5fad7c4e58f282c9041c1e83b701524a2366ede95695aa847ec3061fe1aa682703cfb23b98389ab411d51bd2d2ffdb10c126c84465630812b1c9aab0ef69aee36b5b7ecc671a9b5d15073c539d4bf95b58d891b3d9987d5f725df7b3a23de94fbc04e0c297ea68e1469f24cd0f1d752216a143386170bb385921f483af13041a41bcd35ae62b8f7c319170bd7c00096fd53c3b7bf6d94d36a58925e043c1ae395e19abf0074b6ee1968eafeb4e2870565f140762ca2cfce313568a70a2f764a302e0022396206bc8c8a26fa6486d31e6102ba7a736e102642f8fe67fcfd590e67fff2332118e1e5bf11c81a591bc61ffabcab92c32a374ab4973e993d621c90091b534b54692d570616b56a284f15eeeb1b614ee62c51f5f613bc9d2a8b73e60297061938af302ecc41d5e10537d05a46a6430c45910b7c7d83088e8ec9287824bfbcffd4b211f13c78bcec804026fb64be874cb0dd2545f2f2db9510e5acd669b1dbd72c3d6003270018330f01915fc8a2e235b53d0eb6a7164825e577fb8b83be560b619c2b7f48ce3c9628f1a46be1aad07eb60f136fdbd101797dc502d93b69466abed48bbe9941c7c9acbc0fdbf4042374eaa48d71f5f2a0b4d2d83abd6ec35cc27ac6d4861cb1facc1039c848407bf1d05a32c92de515e107c8c56d2c10397082bdf2603e378111ac47e89635a18b940d5b26699dc230b1d291a900ebed88fca93858083b00426726fa1b1a55a79b2679f23c95103a6410f72e2be9d7cf0079c4277ec3af9879c486084bba39201710f8aaf36eafdb09ac5f02721b11fcfe4ecc37e390b92829f87616d66447a3f347abe95e6726143307f1035d65a86053ef328e9dd5b0d202d916ae27b87eb2ce40a263efb2e96a9a1076417ede3a0ed0d87eba90ca20c13666d952b2aa691539617f9c9b9697bcc6479538980be10933b7efb412fce4918c9e40acec5d03c7005666e109b6d71188340ac04ee34f6f6e21246d04ec5b4940aae55992931ab2680844f6efaaedcd6ea318d68c796c5a7c7a5bb95477eb7ed1ae1c8fdef5799aacf70abbb661ffd38cec01512873cb46a236dc1b15575b17fe96f5910f13a38046dce04b6dbf561e74da08167a90270578cf9c6e2b25bdd8ab9991f9e67f7458b5b7e25debae569d4d7b92742aef6d2fe4d5c975e2fea65a1f69a35bed901a272e80ed3c47d62fe03412a4183c9f434bd73c6ab55b3fd8d158f69754a4b62e1a35584d334f923075184ed1c4edc300778722156d31d526edd08886a233afcbdefd834ff5c4a69c46cb497b4de1f1728f47a9f485ca932b03de01319a8a30da2f947ff789001b88fc3a99ee2716ffa33e13f70fb7fdff7bbe8b582f531d34fd4e38562f6a7bb2095b1fba5085df75067175d0f0a5516681cc6f7a4fd606eb3894092f01eae1ed0bc9fb47cd2249e0e9823a34f75e1cd1d0fb8067ec268253fa441a330c898b8b34157c5c7d5f03e206a84754b97357f8f0bb2a3a2953b9af466b30f0fc9505fd501094f5664a1b412756290bb52e903ad293f9bd6a3dc2e93397f00272fd80f6443b4f163cbcfd3ce45f980008e67626a8f16e85cd19d708673f2f53c9808079f8295aa7e4ed81fcf55d798d27a3b4ec6a0cedf928e84c249fb7ffba2b178b7af022dfa7fc7da30ce8e89efbc421f76561596e8b748a2936f47c2cf2dacfb0d29fa6d00a38b5a3ab997e1b074bc0f97ace5c02745e9173992c2090b6b6445f6e30b3237ff1ede569d54bfaec221691a04c0f67ff364bc729f7b6a97b0d502b7453b79959a000c2549692ad00b7b84abaf7aeb96431e97816b4a3e38d4cf14d0370066cbf604522a7cf6fed1fc41dd7f17e9acf10222deb71b673ad6111f1dfe68ace5fb1e605b21c573672f9ef67697fdee53df86c29e78b1567cd3fe9fb9d72733c44ffda8fa8a1eb8128a810f820ba7bba095630f1ff095ce1b3015008bec186892b40882610222a8d6a72fc1e62633304d7da45a4177bfcedc0acac9ad8112ccebefbfd0de18d9843bc46bf9b9428cda4b6e5a597c2fb87669f0875cca2a23c1d056315cbbc0aa61b9fc1d92e6da4f53d3e5f81ac1728d170ed65df1014d53137545aff96d0d6e97d55f850d19b455a54c771baa5b3e7d6a539db90c96ed018a9fc331d5e6398810f5231dc131a859e560fcf7ee7131d346c3c830ad12ed11fc6a79d859f9c67686f42180f7c02fda9c412384082e696dedff5e66c1ea58b5605ad828b8755bac6e8c4c0c338ad55079a2d52e0754970da7d0b2e55a0ac1c5c9961be6c13b224d2c4d392cbc4bdb5fc4c692951de1c852f0742dc6803c79ce36f8ba0774256ec72086f9236705106744a0773828ec31cbbf45aee787472ba46b609a2e283c567e7fe4096e5136df474da71fe1cc47d71b0140e2461bbc951d2bf027605ad2bff06d3febbb0f93045794e8fa3ca1f1bb5fdea3b326601bbb5b9544a5ec6ec8e7d3d97c9e9d51d6542b911e05b641d16e167362f899bb39430348d1bf3d9434368aac4fe58324b2283bf6fecb1f0ad0671dd24dfb76a4062ecc55de86980a737676b75b6d52444c4b753551001f457156e8439742597f68a9c102b50e8cc95a12e238ca8e53f4f69a0e9423f00ee5b1d629ddfa0416f895fd625dcfa6de9fb120d859752c79a34e5c333cc550424ece39c16f0f991c566da873425a2d21ff4e5891c76d52c82ccdd6d6309c9654678ceac2822e3c3a1c1e578093b75fb6945d4a813ad95b1f787a1ed15648b0e72592c55430602acaa8c3ef895de3e943522f16701a3d83306c972a45dd8ff840d58555bc1163ce1fdf4e2fc4891ebc326cb4e1e076e6c3958b6006db959c0ae5c3f29ba1060aaf5e2a76b79a17cd5c2ded2bbf9720bd3f57c0fa4e17ce44edf7a6ca609d38cd14c93df6eff9f021c59735edc8371a15e9b2f01b3a15cad582332a82ce565816290287f14140ae4634d44c95795ec41746a5fd49d03cdaa6061d0da4c8d6d3b1b88520d3785eb395bfc4076f36ede6c48009e764f7bc504c51d67eea63e2747d37911056fce85601344abb7d44e10f2e33db9f24fd006b1b5fb85ef40306d91f76473e32ebb21c07ea28dd6340795ebdd9e0b89e414724c6a080847ab58315fc248e35230b6a0b524ee6c66db078a06c8f6d1fe198a2bd2d413211256823e4ffc71b427e6da72e0a9132eaf1767e5fff6207ea6524af61264a98b526f996acbfad9de4d4707630dc6a9cc66f492ad6baf7bdf6bde64fceb8f0558d212fa80a4b291501e0a7e3e8261d4532f170d2b18746758f40c6abad72f14ba9f353cfceedb38a21b71115193b94d1f25ace589cb5ccccd9568c8a0df113b4bbd3e8b466e407b3c4f04a83d61191fc8fb6ae628e7063063b865d64b92ec9a52fc20fe447cd05f5a1612e4ee51a0c2837c79439a257d429fb3d2b80022aa428b5c54bc21a662856d7e594dd31ceb6e133d0ece8c96631877deecdafdb49ccf6dc42ade7d0d67f408017a898a34d39bc70aac71cd0b5f03e0a434f604bc5ad01c96ea8dfd68ac734c99afda91c4b1aa167342f58eb961bba19cd7aeb44844a1ae4f5c0c49a167fce79e3375a32a2106699ee71608ad83a8bafe5ff0c1e78e038cbf5cc9ef97dbce194252d7785a1b460b5844b732e01fe9fd25c18869f4a54d543759bc72b28fd08ae39e7185590e4ecb19d5592b88cf94491d494af55ce827305338a3a641ee88ebf3c609cceed6c3790335e710d5db0501244e639599066775f8da3f74bba3ec250010d3e286221f0ef24805a59b60b82fdda02de11f6207fa7e4569bb133bba887854093eb222d387b8df1eecd693b2aa33a8d5add284529df94f4290b23506bf8ea428abd75dbac8e8d477c84699ccc49e69f5e2da4d4e646d86c0072f5f23df06d7e4999cfb8f94831cfffe0ba58e29917368e660678ddb2c0838cb9e984ffde0b2150037f14c59c4f3113f79d9b3ec04446e72599722d785cb4afcee57cc3092b51759a1b0e6f820d63052ad8dc42222ae7fb5281f7372309ab5078430cfec29eec3232bbd0c96a1932294f1813ba5eb1fbcb07b8d3f6405dc67a27620c371f8ce7bdc4fb71d5cb82382c8a2f072861ed39a6590d46394cef9b7a0e69cc88c7d13291d19a30e779f2fc17b2d2530e9fa3e96866d8d68dcb93a08fb5c0a013b4a21180b410308f7d57e5a8f4b3bac76e171dc79e0dc94a479b24d5ed9f59641b9940b22002c55a19dc3e38050d1f730b5142c7794966d08959a7dd7973a607aa7c93ae22d2033dadfaf19d815a7beb098381f24aae31293b6ec0ba16c56b9eb760e085800336cb2f27db7cae1d19a8b1bd036d8c88fac5a474319ec8fbca74b0b3d97a4ea7401e7832807d0a61efa0da541ff5ae186e7b6f2d377129bdd59eae400b0525ffd9849524ff50a2127ebd5f186c8541eaeaa8c69d267c9fd3046c7a9ad967bd0600fb5451ab9886a4fa28f9cf9fac97d9902fd881a9b4aa6d1dd98959f07996c7043aa4b1aa0d8212d48320346c40581c78030ea53127ab84cf380291a488311b62e5308997a24d355cac1734678eb57da1b1ddd3423da0b9d9d2d3f2a591fe762d617273b41245195f2c3a869e69292187f9f79351ef8e4a71e124cf600496b17cdd0ac0afe25ac557beebae1737d775a402ce47f45d9cad6a3f94ac8c8936accb4e6829a8e1e630b5b0ac140cb544ddd13d237ea7dc497ed65b7ce6e7129834cfb9248ab1cf312f8cc714ecf9936da1d3f0cc58b725fefa0c3d1a3c739197a1c858623382138a784ac78f688dc6f051409ce4d2b815a829e1e21f5f190b9ba404502243f8ef0bf8fb802dbac61424a1ff78d5043d283c72b74fa082e4ee5795625f98f37753783d94eef1953ec803e350039e55c95d55d008b6f24b841b066abbd60e1f12f9817becf186f9c1664b2b24783da440c3ec4714ae0d933638eadd4b511f7f9475f593225e98888bf19da87df80dab2f50dfcb000fd090ff1313823eedecaf340815ce7aa193c9ed615982bf1c63bc7f512d3efa742a9238541f653bd33dba9f7390b1e1c6a44f27afe1ce358188baaeacd26f3105e7340bf8e11853a7d3fa38f19cd1a0a9ba51cd6042d83273300eeb93f69e90c930d24c811fb9c5a00ceeb5beddc77c04b0989077eeb9dde8e5c2a68777d3de68e2193f6631def4fe870430a83557dd3bf946da40070cdff11ceb530e64c3f2fcb1e3262a92ac954342082fa1343ab3092bbee2cd90904777d8de48fa373047d3ccbfc661c95c235a3bbec6fc97b77ec41760e984c7c6057a4bdd8792f7ecf4fb4afbf8581b02fb4b5b0cc9a4c5442adb7b41e3c50a4580ebf07a3758cb916c2b68c169ba33d463e3600a9e74701a80f79b338d07484d33f582355540abee28421a28e6a021d438974da7aa9addc9197a6b5a2816a6c737a76724c8f29995d5832049728b10f93beefd3cce2822421638d5057ffd5f76494e9da30a771862a46da73ce937f2c97759135edfc334b144cf145e67ad8c891277311c6ec836173dce759b3624072fd57604b05120b25a0ab0f6f575edd6198993f0f3dc7bfbf0bd8d85ee517d56c7f276295a54225087958a0c5fc3c5461ac585faa4e3fbed28ab62abb0f41a4c0682c48631dd256a5d53787654f7c30c65b4abe9f2bbc87c5cd072d9f0bdaf0cff35145f6d961876e1a877ff72f00b43c609f10cdd0ee2d5c6e72b15632516dc7e594aa2eace2bc96d1af0016c0452f94c09f4f4e814cab5e9ec02eab4e79863cd83dca3a186bf85d3a3efcc0724dd2c4d902765358c8a93dcd691d89a5ea4915f17fd7ba07518db5863fd4abfb77f22b1f7f8aeaa44353f09cbe1577cab93e196b63eb754ada4a03d441f312b5e697f870c4ac4f57b34a483c7564c101e18b059e75e31161dccf5d9237ce30655437371f1a4f7144e2458e7a3dd6e3e5e84b803602126da169d468006eca4e2bc4ea8aca95a404db783273544c5edb4c5bfd8144da01204043d20ced7788f92b7624144251bdc165ea2913875dbc9a52ff3a0bc78d3fd45477a4d7fc733ed051ffab9bdf092a72681e8275dc23e1ae75aa10b7a53eddaa6afdec7418e7c8d194660e330981eaf192d658e8158a9f6e393af49d483b7cd31b15f187a33d05c4dc210bd85b235d214dd99c72eaeb3fc7c27271b8b9fcd220cd65a54338b8a423b4aa2cb0f624db290862d6496ad4d01f3b1ddb8300040a8bc30c495f9ef29e6652d34190b3d880b0eb1fa7741fc99939dcc857fe9eb2b6a16beed65675bd36aff9baf21b589ce7f586dad83908a1769d14e46a79e4c1c269beec7d71d668ccf2abee3fd4c40f597859317b1e313d5afe5ae3156746792672fa72fbbbacf5046a5d5c8457d804762a064ebacf5e7586adc901852caf5b57c31ef6fd95a4918729da784880fe7ce3eb1f53e8f8d9a067cd0de01ca19ace027d2a45e4dbb19509711503ad9d1a990576fb22c708bed316c6f451a5bbd81e56c0a8a49709baa607a05a4994a61778c3815ecd084cec0b7aac578e1faf816a83c2034cff34710986769c4ddf9723a205ed6da3dae1046583bdcba760c366e8920d3531d0481808001a23ae1a4d87895aa6577a6ebb7f760c3cee416e86834340544af0a55548e56babf8394134bad34051d204c9cee52bfb5837fda4be57b119dbb0612ab84176b97835328c473ac7adf338eac01a963531fa603fd87230e306615b61b1bc5b52e4c2766d3d573f0b115e65b87d3f88386100875792865fe9d256d6455992f5d3754b921dbf68585e2086479c2b37735a795666adbc868f27f73bb852f75499a6d0d3969c8038e83116f65f8b1cb9315b774760acf51df77585ec33150a6ca041cad36d6df2505c596aa74f66cf3f05e76862d612f3b980483be2cba46815e6bfb920959d2cf2ea6eb5627964201553b67878c023af9e464b46c79626b68943cfb160938288f17084f745f414a8fc39ed1b49a67e89b867193203327c93e8639aaa8cfbe6cf11e0e10b29ae8d78ca3b99bd40f7f79bb23e097f83ab2ac90981237e586bb2b845d1d09472147c9d16128dd53f18dde484bba186ff0c37ca1993c233697812da990a1bb86dc0e7e91dd886d5e83348aaab768908f4c86e9b165a599350c121e3f1533a887e8e378e1d21ab41d73d365dd90cd5adc03b26aef70337642e745caf4926d5e2ffae783010346f3bbb4db8e9389c32388d1b7bc2a049d6c3684c996dbf657557c5a29f7402d5cb7d66c7e3e180aa76e42241939c7c2ded432d81849e9f90d9c35a17e0f964f82574aa57e8067fe08f17b97ecddecb6fb40112f26c8803627148611cf84e5e22f18987f6b9c5ba05cdfac750762d1bdc3272f343aa965f151045259535c0b9554fb5335ac52eda1d116453ad7300ad33099aa8d180d0987db56a632fb7e8592f9281d52338257dfe7decb1db462159a99c2056c2f1aed7be6ca51140158694ea8a3279369b650a5a50cb9beb0cb6064fd6a04d3c824102d24c6943f4c3109cb83364228c5bfbdc5d7f52ba14760b2fec71a25775545ccbf9d50a18e6befb3d4894b9c609d85bdb7ce1a3495bf5056f3eec4122d9e1d369d0873dff107629f83a49b65a130d8f9a89e869007dc54524de570bbbb314dfdc47d3782277c1659ffa9cee942ab385dc295228e7c04d78a8a4fba23fac85ff51785c2b6e90b3143d3ca7c8080e3a5458e0925a30f2875bf8c4727bd792c913824080ce0555b704b7f59f87cda1bee5e470187db82627001dd02bb45f19830b90ddc5983a1ca4106379f17fc6fabee4eef9a32097b530f07c88fcd327965a9f576b9d309ba5842b619d93e741899c0406cb470822f3dd83b06996b0b4652e5cd8e96b894bcdfbd4dee2a36b98de2a74de309047cc107ced576780a13a6aea1ac445255bd93e5a3db5770a4b6ba317ac7b59b21a04c3c283270e5f33e7ebb08795840bb4e468c11339372127b04545422f015e846ee7aa0d0ec10055e0d4cdf96011efda62fad5c1297380d90e2b374524854b2776f5a5a068b85014222cbab9c1a2ae9b7ad45f37b75af732a7a1725126fd91fd0025c
+
+# Valid signature XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg =
+PublicKey = 04000004723e42717aa94e533e94dc253c264f8320f1c9a4eb69f1d576d7cd0def698cdff86a38b2d3208269892a07f40424fdc31d082873098b044240aacb9de97dc7f62cc783ea008361a066632df01263da7bba38feeb0a013fa60c84c23eefc21218cca425f89fadf8047ced8f3c5b7bdd71cc81a4185fe8e55fe9592412565d94ae
+Signature = 0000000000000151f67e5bcc86c193fee650dec0213ac7c7ecff87b5126026ceabb908f6c67156b3e5c04274b20b794a775b211858f7ddc2de11d381e15d1b54c626748ca5508adc770c56375f9bf3257532c812742d10f29b2787300afed9410cd511f506ee07627d4e57b6ec3cc6b5d221dc7b4bf7e455a9a5567ffa6bccefc650c01168460400f59c4a9aa4faf699791911ba3b77d7e025b03c941703b5ac4e65f9c38892e686d3d616eca0e83c2986984deb9ddb6c5ad5f7c1ec30b00369d11a09013a189e3a32cae13950a158a154f853f5ca8e0176fa15b3be60d9872ec61589fd7e79bbb984fc80395e3db90d0926268b87c1915a8fcf8d4d170a6b39e1e98e0521810dbd522fcc9d16fb71fa148038edf73299d8920e58031e61006de20f34a5f611409e2cc2ac58a3f776be20015bf4645965df3ac0f0cf33bc98e26d8098f64b09a811d08002c89b31aac2135cd776ed68af86cb74dd9625734d54948b4c4dd54f356a89128166a8cecf7aaadebcc977366339b3f5ccbab34c2cddd308d5f3128f3b0adc86ba2c528e54abc914b8bf729b39391bf2822c42515544c3e5b8ecd891271ea2549fe1dbc1e81c52b1187d8dae103a9a10c7f0ad29f8bea19d20b334e0715815ba93946d7d8fcf4bdfa21ee12ce9477303063d6becda8f67cff841967f038030456ee2931c3dc1495eb2b5a09e9d20993df647cdd099a91fc4ececf49ccac0f1f48901b50861e5e00b575a42bdfe239e71ba9ab1c6e8d2e4dec31e35ed03990e3ad9c25c09c296724be3c284777c14415585ccb25fb2241786406969e66a5fd2b5048e5a0885f786268fc4e5d42b960d28cf8af132bbebc3141d6f348d6caaf91a773ddaae1ff81e42ab7d1bda05b04688ea575b867a71f1de345fac2e49b0cc968ba147bdb4f2d04290ff61bdb44ed50fd174f2daa82e8ecf25a2eec8156ca23e2373d9b42aee4e823f56f49ebd2145ccaf698c9c9f3e6d98eb82e182b117ee3cc9b9aa25400c1d36468879271925fcf4e7ce2da2fa25bea5f0cdec06cbe1695137292baa801df2589a76250853ed38ec3901b705789d5da97174c41d65e9e1599fbba92ec319049cc3c46990399cce61185a1913dadb7217bc3d136b70d039b04498ef0ae8b99f3c87e6aeed31264bd60117b8228fdaeffa81b5f797203a85a53ee9ed262d0a929bd4bac59fa063c722e267c872dcc3ee40d524c5c874761757adaaa5c4279fc4f2306ceea7a1d90622c65400a4fd7b63ab7a31bfb7980e2f826ff2e55086d025ca3591874feaa77115b08513044f08ea42a58775ca206ae94b5894717a7ceef74b8b7667110539674fa35437ab19cded9a70eb47aa8661cc8753b692b9b28a63b259568555dccbe9fb5bc8da88c6039e98b5108f0fc7b7e1fa01581bb017a8498316444f6becc67fadea24bf4a4ec109f75ba9337d0f4636343623f6007759c86322485d0df246cf7950d968498a1b216e464513aaf926294e451c8eb64db569203c8da3a4459437a87dd0ea69a51695449624823c70f9822ae836b5dbecb81a011f80d904430041f9223275670cdd844536908e84c52f712428f97c964315b8b7046e1063c93bd03f49044009ad3790a686d6cddbada09964743f869288354a6089aedb6947fa36d8642d0ddee2fb251bc575de47498b5bd637aaa101f16028fee71c0dccc1501ce7362c1434def8608c33c58018ed45de6a347055de9fb3e405a52c0bdf9c38e5f7c05e08ecd93ced193eec43348dbf773970341c508fdb459612d0fffeb859fb32ae5aa91a223e7e2152d994fc8ef5a6ddff1cb405b7d68758739680184ae7ebbb542c30306a01460e15f1203df5e8be2283b02b4eac29566dee4e9027d7321bf1dfab438a7a3e448a32a2b642092015dd7a10df4da440a5822f3e055d4f16bf9635f53c73373421f1cd4bb7d6c90e21f6852f86cdf0ac07d54d1e767ccafdf4c928af8a0e8ff641f6e01b08b63118070ca7ee93be62d836ed0159965f3bb0948f861d32d1d5b2d784164b7d4197d12dc8b33cd327b141cee9a7e6fe7b1c988de6d95e220d97e51081ba5444efc93ec0a2fe9d85b3078e81585f8f07f131185e046640e6e358928e4cd5525bbbb30d499e3367220a85c9b32da336abb6abe52879c8b58effb502f054a6349ff331b92e2445495db43d947ea19aba70966e6e00aaebadc3d3704edca8eac8be6b8466a48b2853ee1df65dc5820fdb54f8e684bac04a2ec9088c32a77f6ad94891b1fdf60f58ab73d285229053ebe116b3d17fdb128ae5e63bb520d004b3a5d6b9dd8e709f87f9922c29d0aa6d97fa38ec05144160aa0082ffa226afb9af9ad0f4eecde4c4927e05b3a384b65a17918d1fb904c321bd50071051f81ecaf39bb2b5f242522130309e672f6ca17c3310ae9315e81a20f3a3e71509f2f2b2c191628ccf2d36ad203274f5f07f0be74fc996d9e66e44931d68200a69ad8653139fbc63eb01dcff9b2943af61deb8a487163979da0321cf0142ec1f2358993c1e095878b725d1eace5419904c304b47ba41147c15631fde91d15066cfade3f631564e9a956b4ae8a991e4380574403d0c54801f16cf4a07622772e1705c3d9d85e6b03441d61df6fc5742db31c720b1ef3f01144031ca746611cfa4541b70da9fa4ac99c8e0bb74e336b71155c6635fc4939036bb24a894720d05521bdcc538886d70c190fe6a85fb024d1d227620a9b0122138bc7ce4cb4882deee2dff20d6ed21dc69a32ed4084406cf12160efe04282b16028c1ab44dc941ea5850431d63ea5fc95a261a9be1742d9a225acf06d98a21bea1a25ef963aea9ef94747155f56318097493fb8aa56ad8888bdecbd8f2c4db70df2f0b327d9f365d3eee3e0bce43bda075b6d1c49b4bbcf64856cf755ba2ff49a81e4420b008e0af588cc29883bfb2b2c9dc88ed9195d7c2c5ffa2ff469d4046df75b3d104c5e3082b50218e953ce792d3ae1d60d7f87bf3eea49db03fba8b6de87286dc4aecdfaf61642053ca4e2888401ce552de7a271522df1816aa5e6f7c2bfc7b16a518248112de48f2a33ae6bb4aaeb60fc9672d772323bf891bc1830b5f5bd761a538b820fbb5f696d45f47d92eb8939e22ccd054bbe40ab0e62e2cb908959a915d0a0bcdfcea997dfd4f76fbcd9ee579d449fce74afe77831b061c9311e4885dd0f1cd44a80752b554478476daf9a87f5587ede870c0ba65c0442b439d4559fbd3064626ac330848520db0f7dc05f1289003a59906b1b5d4c7e7d0e566427f6eff71660325681c78d62db4f8160111a766f826e3e01401e0ba4283039f5f535b943f34730a740640ba21dd08d50fdd8138b8b6e864a76d9eb19e5381b06e877830bf6b25f7e8295f21c2616afb6bf6193aa5d5a1d2898d9157846a5bc18aa43c3b4506769f01fd74bff3c9fa736b968c0366399055720e3151a25575e07151b58787e03187260bfe2a8ac1cea234c64b06a269e5ab99dd16ca4e069f0b4fa94223e4bcbc545f1be42b9c0d12ca9aa1941de9ea4412e20ed5a26383e756df6f29fcf6bc94aee0f1029737b2fadc7a4a2fef8d8ae2d8db6d74ca9fa8c0706f56198312ac511d7da9c1f3b2179fc9cf19cde023e68342346096ae83aed09266bc60381c11cb60f93ba66a4e13c59622a5fc8afe0570e5b3685e7e3d9c4f1691737afc507f5c6e34fc99eae4824fa5f6cfe5bc569cace343b0c3f804a6a2534f4242aaa72d6a0fd049bc72fcbeff105017766b1c6ff6e4f70bdcf05c1470560d7d7695c2652addae34c30cd27f2ae9df28ec3140850539f2639f064b58cfaf6cd53702c7b24dfb66fcd6d9cbe3d3c972413e22f0b7a55fb80cd699d932d3f824c5c78854be174427671c171e270a6d55fde6d551bf898c2e448605ec285e7b87d177b9d2823d00031ef843c2cfa70368d9c3ad058389acc7004535c849892ce27df5905b12ab3d1f6348aff6cf7e6af9e9c8967b3a6ee1b76aea364d5360d35c546a69a09838ac62b6eeac47c799de6b2891d62590da7801bfdc37ee9ae4cd046792334ea0fd9dd53e66afbc3e9dab141f2eddd06597a96bc7375e4b31f7cb23f6c94e58a1a99337d057d2d620ac0c67d9991f09381264ebcc356e9b18c74438b86ad74bd11b4ce0ca45176bd086855bf3f47d0aad4f3b40ec25d56512d7a9b66a85d35c28ca31053806208ba89948d665f199aa29f09743942f175d385b3331885492824d8c6bbeed9e15b2e90bf6078159a2245980cd44c86d034d8033b1f7ff8a9b7b531b5af06b96bcd984a8bd9a8aa1d8462e11b7d602bf95dcf7d8b89c5e95edc3b8ddd3cd4d4e77a7a4f855105aeaff13ea4d90af9321e6bd0c9dd7eb117ad704233706766f4b8a086a45f0adad71114a2ecec8da9d529dbef499114158c52db75da05bb40b03aab7b324c3310950f5af4aa795c9cfd8c0f5efdf7431b2f9babd99ab5db3cea19d7ddbf8ee9bdf8869050cce2456137767577aa6b053733ad76c3841562a5166948b6aa7fe52179abfcdc222b72b1a5a508a36d0c22eb61a6b6726bd5d96eae7880a602e8b2ac170c759f53cb0db941d8971a6d53f482a2da52821125d72a49f529808f466a19db77ed61fe0cac8c69db73aff5c987e3fbb278756f437ee4be3bc07b9b05a27279cde08243f7bdd6b9ffb52685ba6a3aa8a740cf58ffe5533e6ea1b0a2faeac15373f8aa0037bac3d62bff276f6bf56c7b9cddb9c77536db4c794823bcc4751717407187008f3900ecb66672782efd557d76721c251df5b2f18c7d627325b2ac709e60958f443ee73da901b261c8ae47f8741b2a904157f86dcd549ca97cce97c5a8b2d0f420861bd72601920f4a3c0727ccc1ac231e31a16b0bc6d0e48732d107a0a032e5ca7baac66bcea0208e5c753928b30f643a4ae5fb4125ff8da4a96a9b7e6b18c8ea34b0b3476457686c7158f21a901ff7c7017d6fa7d45d92a933a3953e444ea8f92d3de46fffe40f12850d9d04a248811d78b1c0a9e66bddf2d53d7595743525c6045da59debfe4df68f72610fb70103f7c005a52597a4cefd1551de4ed2a4e312fb9a8ed167811d922a74f2ddbc61fdf9099683483095d9abf3040e9018baa0f6c2c133f6faa0d11e122fdf2fde9303fd81a54f6fddfa14f294aef4bd0f057763e1418b213cf690e4ba2c440416b05063529cc9952eecea7d86f5233cacb12203ea2d9084a7e2fa06b11bfdedecab8f08e64a82db5760a3b534c886d33a95c9935aedd8382d5574d29dfa2cc1d6baecaa966e990bb3b1afe54ec6239f87c2fb83e075e20737e66599a0d9f86c6cf295a4e370a9f26dd266a5008df6c8a3ffe49339876ec0e95996d1cba8f483a90b9956136bb3b87a881f6f04371be878ab1e42ad6ee217e06455a8b32d3c283c73bf3eefc925f401820492ccdc609efc4ff020a4a172a12318ebc23259e45ed43ffb23f26f0a84e5647a6450ca98d4a3d70770f34458719aee82604fa76286ffcc106ada4505e14df3fa808cab5cf04124c9577f942e31f8552434731e84f8fd32df374e9072b9c437056ec3e18b7e4277b1ca13a3fe33a170b3b79ee3c04ac400f9202540430eae9598194f9639d1fdebb030f09c41770b117a3b79e3d56ee26275e30ea7c853352fc979b657701ddb48cd4411abb070c45841c1353df255070faf4d017b5b3984aa99a5ab935eb1afa3cfccb6fc119ed93a619432f1fb4538735672bdf088d9304279695d1d522afd1406f31aa56da3ba3578d5853e20324417c8b6c8fd14d27721ccf9af449dfea191bbae67ef0773f86a296d69c8006b0073fa666eab0f3dccad6ae15870b6f7858f011c1462dbe19fdfeee78ddc259eceb6a4b5936d6b276d7716ff9046aa13e4884b729a2ea4a3a057378cc8f2e2f35beaec2e8a572bda07a60e2b7be8422d4f0db640deb3e72500b54beb77dae0efccec6b426c4934bcc77691968b627a32ac36a66cbb135f14e61caff3de6328b2b743784cb6f6ccd83ad0f3ad8745351de2391890b7989b6bc5d0a1367a7be0ae5782ae785587fdcd33cbeec53a23be6a32d85048c781d1c3c8d226d63ecb34b02fd5f6946ae746e6e7816eff865e2afb833a0204eb15c6d7dde1603f358cd864c68f814ca7ec218f3b32d98275a3cc0d35cdb19b74151190ea88b78cbbf1f399a404362f5f4f68de79d97fb9944edd6f5d99462b1065be338d08f726bcc5e4301729f1c890ece611aad9c197a60b3f4a0619ec3a02bbba1da3528a55560dfef0787a9f6bde732f49455b2a569f98fc6a97ffc95f50dd80a8a8f9214b84de228f22483259183062f146ffa8465e695723d87e5234f4aa2fea956bd23d1bdad156d5d21bd8ec52acf2297728438b81bbc9b98bb193c299b27b54fbbaa8dddc56eb985fed2746c499f48704a526272fe39aff50e4a464482dd4667b60daf645348528d251ec21c9094160853954150d29dd7460381e2db431d81cfb60e3c9e7928f71a5742ade78b5267630695818f4e825b9ed89f2cd36e293e5f53777d15668037ce314a46129dcb35c060817641da7d58450c1c23021d513c157e98137918fb51b31190ce4c37361a2532a59a70130e5e1b3b9fde586e3c3307ad6d85b99079004af09a1ce49b0ea440bc1b3c4388eaf3f7eedde77749fd4c812c8b3f0babb8c4cff0e4bba595c4aa992bc0fe0049901aac99d42c6055f07f8840d1d99e6b340f0b3b4a5a2a46401ea8689bf0fd4ba79c5c4bbdcb1be986ad84d0467c781222807071b5fcb744248a403a5f5c3e8e1bc14ec914783ed85a6f363c479adb9700c3d9e5f4cbaec921880157b559d1920018449a19a739320f0ef6a9e0c058fb56dcccdc2014ad9a07da3952f3b928103a72d36d5ca0a50ea31976cd2978a610d4c5cc7978407bcd66fd0c198902b321297719f9a865acf3c7118e3ed1b1b253d9f7403f91934d54575c4688c5ee57d95fdd30d2db56b2d88dd9e94076c83551170f532edf8f8cbb40d5a40b5a9d36baba718bbe04f2be8e14dc00e75f46af8f4581813334793fd3ba67dee1acbc957763b5d33fc819ba0569680c6809fc51586d1779ebcb411cd3d8a2662cc643672eb313db2e026a953c0c717d60036711aa6fd7c9104364862ea8cc92cd5915eecd7148bfab9422d1259b9c4e1acb7ce285c05c5a2482b7615819c6b671bd23cb8f9c0b0dce85a4e1def8aec6ada6de0a13e282ea1663eaba2725b43f3374bb12550664bde554a741005845e54538a069143fc51716b6c86e1f302e0ad398e8d7085a99c9a0d1ee9aa420f2c12a391507938d33c61aa4b01b486123c1f1eadbe826c54a18725ca91c6fc9c23af9064a7ce016431ee13ebac710aa64010add3259e26420bd98b7edcfd8a322efb0febd8205f794ec4f950066f3da7513e553c90817029a1d6c187ec98b8447c0fe570e94de5aac48f9f939823a2d05b1b54c38f0578807e39879ebf355ccd2944532bd1fe580b211dcd625f72bff2a7a87bcf58df0b707ddbf1d8b1e5c1ea8543a4a185ebd3b8a8a4ba95ca225dd56dd3b65077c667b027bdba05037adb7a05c84565d52944b6582a92214227acecf08b7d08035e789eb625d64e2a1be7abc6ff229021d8cb9adf51cdfade36a90251cc0398ec885ad5b2fddb3acd2ed6c2a1b3e49fbfc8d3255625b4d370d13405079fb7465c08346598898a4beb2452c5f1252001ec0527cc1382e22eed8e05b6e15c68a29e82ee453b4dbeae2785c2a2e99d4e6f59bfa7a3933d7ea31b51ba9f3c4394f8d512f7532f2ff6ec3cf2e19214b7c56686915ac7723fe5b1bfd6c2db0f33f1d1a19f64148de1a35cbcc35d0f5f391e2546b60875e3bfdc7a17d9183ffe2bcd3ea0b0fdb1f7576cb4dcfc72c2289d789dfc1ab2e1e201d9037c5837d29e2e7f463d38e2347880b28482410ad4cd3e16a9379f1f9f5655f58144b2b64b3a152e22a2d86970e2e48f0cab890aa35e5d525fc8eff69a6e604243c442552813a36ff8c02f616b6fbdddb12f11226b0d6215c6b12c24ce1705055f0130177b0825443f83516f04eac4a2eb4ad1b1aaf440369dc68b415d75f0bd7dbc7c202346d041007372d306e696432e1fbeb0f9b2f46f5a32304190c42a2bafe6ea874049e1deb9204ff75c0c02303742f1fa663923b112b7c9d0e4253c47ad0f42a6e5cee1e8b3d0a68ff7916104f12a4d541617ed532ac6b23aa11478fdeb89fc47dd54047ef07061818f65c74a49b3bddba80d75f9925bd7ddf957dd3955e225994c3f68dc2b43783f7405a40f9f334e15fdf0c38b3405422616801d216594e29cf511ff93a68782a9a70b64a5eab625a84f059378ae83488221e92485294331d49cf721ccc13881f137a1307d2bdfdcdf8d9d5f54df79d94bcf1c43c992713ddd1dcc57b4b882b15ee3abd95094b0a0f4b41c9ee09344daa828c27eb35a75876b1066a847f7568d525e9697b6df997711d80f0bef21f20a274534c71798e9bb8b49fb312a72713bf7ae75124c7b806a86621c9e4c44ad36ab4d012072f158cb50b4f5d8d280a124f0c389570c536280926813047e6bda039da168795f11b47b0f213cf68606834745adc0f5ee9679bb2b174a55a137588eceb551186397c76b9610913fa15dcb63af8a94ea3c7179e3cdccd14ca8a6cb62f371e828a40cecb85fae7effb920101d7a69805e78b80e6efc2e7d753b0c41e0e25d82b5b3730dc9eb906ee821026588d360d3f442c2138181fac35eddbb80b1545dcd37cb8f61f77ded5f1900bdf66c634cc559c3a7a9ee3883f9ef52e8a5bd2b736d8629459f163e5db22231049670cf573f057ffc68e6dbd14c69a14e8a6948d79cbe4fdd498462c87b114e118e5baed38457cc63454b39fc806dcfe4796cce15146cfa181f73a8aebb4be2e337027c299c9d1677916b212c989d2c65de6ba9595a5e1b39c2db54783f453678c3b53317e9923a3faf49c18929a6b3a67eab4b2b4d99a91bc00a559f347e8a3034e2afbb555fb2814e7fd6b7936f0b1f3c59c8702ee26c20cfef4c9b637620d6132fcbaecfe51ce69fc6bf570663b4865e5f44aeb64e8ef8d76ec02702711ea4fc45c396cc316c7d7b2565386be7d15a7752e5e6ac86edc3286cb9a8a176cd4a3cfeaae32c419325fd0fab70b20a4eaba575116ba19b6cbea24f2c66d5857014a13c24cba39ec138031d99818a55ba96ebfbdf887b2fa673766dec195c8ef40c4462761c3f6a189bdff740e7a4764cea79c9409d770eabe106cf89d80f9e0e2df54b1000a258bb76316d72dd62ea5fe61904f5a3926e06590a3beeb1f151a1a7549496f143eb9b2a533d87801bec30558a40962390b53daa92487bced399dd14ee95435e22d398a2c54e5f93c1912c3ea85e66979cb4e52a874603d1b379e9e21586c15beeb2d56f52cf68b2d969cb65f1729c49f6d88fe37680fabfd9e7a8ebb453181143a252ae3255b4514aac281c051c2e580781111351d74e3c9ce062424c77cea04cf73225594ea040297e2168592e92212fadbdb8ac59677f47c902bae96f2b9b492b9c28143ce40b02a423ccbd4ad223b621a24e7ebbf0111357859f8019db5b918b68d2ec16eed4677e18f093b65223b2fea6725a4e9cc256c9f3049f3f954a1c748a9e74c1d7a824f35999855a0ac29e7a0759807091e76388d880e4bc68350d315cc1a6e257d5c202a28be11225a045ae6cc5ba665ecbd158bd4f6fed480454729da235a4ef12bf7292f1e70fdefb1a455a921ab96f8d9b9709c9e6b261b3855202c3b00c275d500c495caf741700b31796e74721226eaa521dba7f89d1222c8a9bb7945c5a8e607087928c35724fe7ed9c2031db90dd911e20b1f37c196ee1ac1134e8203fc6c413b100133bfcbe32556b6beff916c588b1f628a8d786a5244c84913a355c2ea4c7601551f9b2ae7be5fe9b7d649dd56d1b147be0bf0397f614e3b8ccfc14fbd92bc70c14a727bb4902442da50da4f281b62115cc651d848d8be209fc2890d4fd54736f6007bee269176fa7d276c18f1ec4fb11fcb22d523884fedba151653847bd441ea61f27aa14a44507b6630a3cda16a6857c24d164d86c2439cedcdceca93fe5d824648e1f4b85eb962a002faca2289ad63a7e689b470b2e68a0359d5f7b28d415c2eacf00e2dbe78de6d18cfcac9d05f540d8826b083928c23d49c162877f5e0e1790d9e815915412b84b5632f1ab2740d3bb290ce0e3b6504e2b7e1fe5c878c15fc0893c8a28808cc8999c9bf809fe604fdd6bafa25dfa0b0c87b9f5f6981b30507f9d0708115d918a20d2aafdccb65bb92a55055ff86b5feeb65ed01cc1e00000dbf2592d15f7e629c52a10ce47f2d3f67d7550e01f13d3e6e10f3fac7d4500979d051e0efdbf77384d0af8b4ef1e8977edac80e38d6db0952d2dc5307221f704a004d71bd55f726fe654e06afe8ef6870e0122abdc14be2cdc7e97083aa523f530a685fc262ac7ce920ff2cde572fd9f1e1043ccd942f6bc5165f3b1ee9be1380255bbc4e0192e44d74f926259c8859ffe53de6f9368832d5affa70fa6f11c369c3e112d4919b9106b84e396778d2c5ca76f63cce105ef1a11ede6e1407a1a3d79df74e13b31260aaca9652b836237b17b7cc31479a49794c7f31426adc7098c33456555db7582149843b5fe10c9d296bd11c239089ae8b67651d33d9041144867def1b941b8c529b56bce508bb1808f25b7f32c3da2b232cb16918cfb85f55fbd8536f5011384b3a5692b79232e12a5981079a224b144ea606f7f3ee86fae85547832f6166fae54f2d964540277caeb5b72894538c9767958e7e1f08303d2947b8b8507f56e0c7c2280d965057f7b034c974dfac96b72da04d0d5c8fc5e58d4268a0004cc53f4c99f0b76612a0c1d0e8396ce7eb3e0dcb04f7b056fd917a41b125c80fb0e29daa8c3d5b3fc62269fe603870f2bc7c23e31451f2a5920d6de576caf1107d55f7d673d015ff965942688d5fdeb2ac18b85068950188eca27b2c6d4e6d241a21077f3993e169743a1921e28a52783b2cde7bc52e41147731d1e5dd739252410579dd9450f83e34db8461efc617b46520276f6fa1e43d03cb957c7004f15b2ecb6ea8fec8979ee908653c109804d2b96e96dac3f8f8cf0e33518fed93235452108071c2ac763d036c8445145f86d46b9213840ae39fd1fa8204967decdfe0ff40f6076676e6af1c88c1899c4a613e7e0ed165be20734a0382c3f9fd81128840e6ae16b2af211055841b7495a3d74bf24f518006e9e619d364b4766f77f88ad27053bc738868ef60902dd58f3ca6d69e42ec3cbf7e6f6e08ae3b759d8d1db7bf9f0cc3c3e2f948d8d63dacb4d2ac5146073352868a441f62b5de88fb92438a5cd92f85f299eea2e35c2bb1551c0b32cf078b6bc23b3a7d6dc3cf55e9650028513c014642a1815f9f16e37d58361859b0bafc5c659b389c76e63f50ab29dde31919dde0a30ac9151e25b6d0a14472f8add99c8e748d4417b19ad9f45366ddf4da2d0a0564e4a550510f8e3cd34359868698784a45cfe3c38807350f86940a9883cdf6fe707e33e1c27ca02c13d948ff3da682952afa6388861c63108754affbd8a6d7988f733d1df67534b867cf6d0c12a04ac3cb8b74ff00a6c7af8968b64b8821b149eba0e5db216d6231707e433e769fe59329b6451f231472d855ef485cd99035f77c7fa66ab172e2f03699690fec47d1478242c5bed8209f049d6f0aeef819274b46009fa61a7e39ad8c2164245e2bcb24534e66d55d18984b5539bbe70bedb33f111ce6229c5df8f8a1d424bd14fc78ff4a69e5dfde098dbc3346cafbf8beaa32e233d3c80a36526f09cefd1e825177439133e0c7ff74934e871401f7ea13a49f9596921ddfc437b1ce9eaa6d429ced30b1b235ada656d63d912fe42ca4bcc9d9d3d80dcb372a913444e43afd79d09bab30a5327b5c5453900676dee657c467cd8b3e018ef4008c3b3519e7a447fd6bbab66cbc87cc625a71362f3cdd9b0864948f5cc8a6c39d60965f2f4e32812b0067ee78dcc88516654d64194ef6a68e84ee4f9e97e73ab3922416f20bd9b3e6f8c7141c0709bb999664059f2dd348487e6a2f754a399f7b489078d60020d66d493e988fc772c6372c4e8e46fd4143c245140ea42575274b29d8607aa0d2abd67da273e02bdfa0cf2598b912770eca56342fd321d0d2b82778a0b1beedc291b93d9056b864343a6977081824578dfcfb26ed1d448e2abddcd8294da8729165216278a0da14758c404b4cfd1b10635bee4d090b82b2ca286e1eef03ffe6b46b4967bacb11ff3b2a2d5a7e1766e4bca1856bcc9da9fcf605d7ef0ac1154830008fbfac48481f02e8c959256a3992dd9af8f7aece9377f663bcaddb3cb192dae381f9157bee4dfbe47dbfec033543bb60242cc492e276b5f222ad07dd7bdb60f6539739788f544385baff6fc98e3895b79295eea664dfdc4aa3955808ed031635e18a138c08244fd419cdc1d99e0132d9d6b57d46c1b47b78771eab89a14a13878e7c173c3b503850d0186fe25cea61b126fc124499b5b0f2980262b02972d8889567bb072a9a28e94bd58b6c23e5bac13655a54d574f375e8df6fa57150436ed6f258566c5f61c9aa503741515135a177e594e41c060ac0f9e94682c9020be9991b0abb2c393fc1f50b9d84f30c4f7e5d53b01e933ccf10b4a82a33d694c61902132be6f10ec65dc617a0c05f7a58963350539cbed113a8a863848705d736db7aab7ddeed21dd09620ffa7fe438fbeb5c9aaf88d2820681005d028c17e601a8e53bd969e6c0f960257e468a7ef3cc03d049962102aea8fb38e49cd193a
+
+# Valid signature XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg = 426e562ab69a03a893f56910a2aed2a0618da1e365167749e78beb4997d36dc054f34225797478a5153037d4154a90c88836eab69a7f6783237143fdedbdb6fba8aedfd98d3af16fa293660640163c0936ae072c0d38772013b0bbf97cf44b64c44acb62803a7b2b374da627e47a1135782f09537e873aaf5bb54676bb5195aaddf73b64fb9b32f3054829dc0dc0164e51e9efa8bb5e9daafd97a85f0b3591e8c06232e6e54a3606cdf93a05df506905fb69b7cdecf62145d5d1a97fcf055b69d35c07861bf3532cc9bc78058ef266d8c98dce0af755c84fcefa69468d4a9cee6effedda0e0263a87573eb3e1d9f765083c5fe5e3598caa2874d065360e7f254fe6e3c3acccfe63ab3
+PublicKey = 04000004e0489566fe62275cf1be38b809f0f959717848a76d26b2392793bc6523fc57aa78b3ebbeb74462990eaf2e2fb89f988b804ef9a3155641347124f7728040c1ef60bf55b84746d9b9232f0221a3ef11728bf25e797985607c06432ea5b4122574923583e7127424b4304d01f90de74e2c81aca71e6721805b70e9c77fa19c5c0f
+Signature = 00000000000000e10ca08803df60e7fdd6a25d3dddd6a2989053aa5c2f721c26367d3ab387bb9e9061d29b1a6e075544752d02c5f3520ab586870b57fab6186dd83f0a42d6b0f24222d910d56291a3623295e4c1ba3720039b34f4ab37d44cbc1c5add15d1f23b6a75ab03d156b3de75c5aef881f179e340a41a4f22c04b2e1661fa3bbb9e2fafe88a4449f812c2a3bb3ed477756f52af37e5d32afa3936c0d04e44067b155e02bb56b91e82f6a43c249ab14b15208def1df7895dffab75b619320b8295221f13daf941577a5d6885e70bcf305f1160fbf98c120ba2d7d008af4145cba4ceb34727c8044eea1e3999304bfb0a67cc1f666b3ad02d708b8293d228622800dabc11daa45e4ab36777bf26f322d36ff39e335470e14bac1ed89af042aaa352cf7b970ac1f4682663de659bdf9f82b765a3e54914238db38e60f02a7bdf821a328203f5f04e4725485c475b34c82ca912b8cf599217a6675f5d06990869f6bad4dc1efb7569fe073fe6c5c14d6fcadf4ea3b0922344c78ad88efa956a0530c009d09384b42d98fbd9436f7702dd27d658635fe93e973896f4166fcddc4ba7ca33e1baf65b286008d8e3b60ac0d67e73f9b253567135c82cf0c61c2482306889c67b4f59fa7bde1797517a033db19d9c62e3f384e20b7e396977d155d42e89cf60dd9162d319cab44f208d1b68284b3ca968de4bfc14f596302e0999a053b51675f56debe6fc8871636cdd4e33c25d4b5d04d5cff32016dc8840466efb32a89cc6cc69224d2d7943e6c16f1fba7fd3c31546589013366e07e2a92057072b9eddb8787c14969bcc68bfe70a7a1988d692cf97401ece6af0842c62d2ef9f7796308e6b225ff2e07010d579cd5386543c8784ce0a900ae5747cf1e065c06b32b93cc441becc114a16b1bce74aa41742f0bf764b5e7e162120f9794b9552ed5481b10b42d1f6fe584afc11880ab5d0e8ea2208f0ca584937224dd1667ffe768fc7ba92b20b1efb18de523780ef43a305f04f5c58d41fb7ffd58f363a601f878232f9acf72a18aeb38c568db1433aefb3f1d4251e80f709db46496eacec4cdec4a79a81632e689f9034e0715ef83c57b10306728ab74e003bbaa9d394440963744a5c4d32b851faaf4524539eccdfc5bcce0bba998485b281c74cb644683471e899102ec0fe703abf4d6a96637c5b7af308eb29eba6e513f68869e2fc17bb0a56922cfb681a4e59ea5263749d8ecbb55830442a7d96b7e29d6d57ea0d178e09760d6ca390988d150f9a4272c95b37a930949f7feb3e920933be8ef4d7e1826724b059dffa0345960ec7a1fedd00d6106dac2a14c0f6901ee2cebedc837d01a50375bb4a5b96d710d161555871e765f09b7d5cb1dc448fed3a79946d0191059687517ccdb916bc3bdf4af2994b857d40dbf82072a2288d9b02497ba40381631e944c83c8ae887a18266f41dcc13a421d44f5f62f8215c29d00f5179dc79143e7a67d32a9acd0565c53eb409f1de25b12347999e19087e1618cd58cde72b4fcabc8e2a1226918943f7ca51ee6eab71a542a69b7459c36b1e5cdeb90417d82dc8b2126f8fcb9d2e5cdb7069ff4ff71b6b13903f82ba5d912fcaa2a7abd113ae9e15568f44d4594de4af889b48dc5d0ee13180e528e61e7ee20303891bd8b1d253f17e1644f63d965c4c845c720cb67d2db964bbf07118279ca62cd6e99967d98e43e8b61b6030b6ae8c4b56b1d3970b7bf2d6244028efe0fe9d44a2f5bd06fe6ecc4ea416a11ba0864dac3404442eeda8ec65c84bb407136d6baf8a344f026699aa6930b07d22ea6accf4d52bb5ddece533b900d548b4b215579d125f83f70414af742e7149585b5ac5733d8a7612bcee1b28c57ee92b755400da62c78488008598f5a1ca065c52ace67666658e069cbce1f4dd8b7f24a78643d5632efcf6103466a9f122c17a083ca24c77df9759ddef4cd26147472218173555265691f507cbb887fe968fab43defbf8816fb6917c4b5ac41aaa7e5d8162e7eb541c83cc0613e64976578b9143d90976f9f1d88ed0a11e27293a3ef50ccddb05c0c2760c664b153289ba16270b724ec7f1de23f799324b83529532be4dd0f57e0077b023f1c66778bf55b4fa308f6a0ce9e797b0a23b0d44694176959fde0973bb871bbaf2e6ee2a851e48ece311006fda85b93b67f171bc7f438617c583306429635c68b48e7da1e2cd45511ea1e33fa18be2121d7b9acf802de6153a198c47c17e90b79865f23ebcaae0ff7e72b521dec7331b19e1a03ff1c86018a0e51942bc544a8a17af0bdedf7759de574414cddec79b0eaa7b5430393faa2ed76ba8e3d375f99ba1d34e3268e764607596f043bfa0c5c99adab33c27172a79b09c0fa3a7922d6ba7da2d8a5521226bc2eed48ab0b5f8c22f717b8f4d5d9d7120fc63cf87d706eb5eb112f3da2818c252ccddad01b004ad2ef9340179cb9311e67ca701e43db4d80c05f97b19c577696d15a2c157561119bdbe7d6c870d181a4fcee8527306414d23a97fce96908ef888dfc5f4049dfbe556f1a0b7b95df1ac71b6ec8bdbb1dcdc7f2309e912b754db515c04724d095e03bd550cbf703c2327d9e5c05c36fe8379b17b48d706160c3d2ccab168ccc62fe693cfb5f8f6b61bea6279208f6b3bc625e8077601ac48099f52563384a703b5e59c4dffd76c545e9c4ceeb840bc3742decb7b89d7ffe83d28ea3fcdf3b6499071a5b7cbe9d7e7ec9658207d6776668827e51adb24d3eefd82327ed1e92958ed8a56f188619a84854a2606504dc99ccba19db669311d90728e2b77e1d49518613a1f411c9f3e521a1b98c5aeabaec4497e1b77043b8b4b73f150d75e2ca5f6955b39987d6e302710b7d304c882fd4cea70194e7529d69a7c796720a358128c4d0cc27e24597cebdc88888b682c3e8d106137e172a358a525af16e138f36be2807b3f2e39638b48e16d3969245d9a6e9d8f8c98864360c0cfbc952c4c2aaa5ddc6da39a168797d9daf608bc1b5f99fd1c5677b2e8623d462b275d59da70a17d844a58008e39cc28e1c68a82f5ed064c27190a0422e06fa2023bb482cf930da4e2186f36f84836ad8e05cb233d9270da650f0b6eed1fec2a325116d1fd7092ef286d1ddacca7194d58ded1e9a68fcca7f33c1389c4441dd79e4831693a31b44c1efeea4ab80506beb5a001ab9d79a69e9a273439809bc8e899f53e69c5030999902c75905c2d1d195089fc0f6d54796fda1a4a4ce6bd172779c8af7e96b3eaa2b0e89d45fd9bb76456808db64fcad5af835fbe7b32d49f25ad94eda04c0c5cb887855979b255e1c9ce219dc19e6eddcf8c1606bd6cb17d44344491be6d5f7b915abea22c58bc413c4b3a4fa332cd3853a6e4b0d8e873cff42c177825c19f89c86bc4ef87d62a620a546e13c0727311601fcdc1f53f8a1b246885b5dd46c369b1760613517be65eb15d52b5a686a5bbb360197e99f3e27c45952ac8cc7c9bda76e9fdca0c9878ce3b1e2dcbb1f98ef97c5c7349b99b8eb2f994b5065b1f7211622164b3d6e776bc3c6ba02232c72b8b867f44e9ec56c6ed4151e3a1eaef761ac780f8ded2c3d02c01b9712987c3faaea2735998a9a46fcfd759138cc5375370ed411179e4cff1ad70841a95fb67461287059ed1f6f648f87446011e8df22fad689a9cfbdcc2c2b200ccd4b97ce4ca0eb810c7ab2452e8ae80327936710098945f082319f4007442c33b6b6fac9eeb030daab3bac1ca739930672bed258775100e3b5e78cc6c3f68fa671b92d4c59115ca1fd63680603290965d2e9e0b80d71cda7a0c54a26355901be67240490063cba6bac155944541b1fe61f80fda432ae594b011210eab5f1693b381592cf00fe3a5d531a99229a9aca6fe483e420f05d35f83bdf44ce7a3937c4c305bd5dabc904f9fe18d69109804c1d7532490098a10f7770d6af409e79f270bfc367d433dc8385c4ab5a6b4315da582a03665f773a131336fa4ce0cc3774988aac20dde501cd5bbbe532b73f997886ce61801e32e96b18810bf91a122b87a761e3c2055536c0e7de1e76e5a0aa6c23aa3e6dcec3bfb6bd857d5a581030075ae769eb035da51764aa456e128f98b2283dd8005e69522c59dad1ff4825ac0803c07618a2472e4f49d60221894b1ff7aecab4aad583d34f5ca22e07eef17b887045c0120082a5f19bed42ecc6b37cd4c7344fb4a28881cd35e12cc51806bac64d8650fd09e4a3e2f8382b1972faa1bddb020a5f7fa28d3d0329b4b17d1cb35a63bac727f3a68aa11cfae20f6d91d2785a987ef5710236a81d3072c259b7e1ef16037fc65b16aa52ec7e5bf6c75137aa1a104d8a0633a287ea5a0439118d39828626673804e0d4585f80c0c943016d6fd2757124c24affde304f08db26d0d26ffb1be3138087cf2d4b3e6f1b9f565c89675a5ac0d0c9dd67d7ca721f2fe5ca0c33c3ce383fac07271591c553ed58f871882b366888feb705a439b928313e7784d6f2e0a82f1186bce81220c02b33429ea1e132841507f89ea9d9c9c0bc3470f583ef98f594df22e01887bcf5c72879ed6f7e941c5a7f7f6eebb14e9d93f8181d948aa985a2ad7acea770372d472380ed8449a8e190ef8b83e7f28f1b030f8aa32e1d32154aaf1361b4f3761f2c342a75dd3ee3b1a2c56ba2e8e29309e03241baf6c6361e7c0ce74ee62be26a0b65d8e7d2db1692b719efdfbdbd3125d3b682173049cd823ad5c6f3037d990610d09e91dc3cd8653d584048ad15729bca2ab95589ad8a3ecdb3a39c655decf7643ba0f0c1931d40ddaeb1db2c7f25dccffd218e906fb70034100552979208ec9d195fc6e1f82290e3bcb8ca1248589857d56c091b64c234a9f431d6aba8f107bf34fcc469989858acfb05e3f81c8dc5ae918e6d79f10aae4718abbe4f4ee46fc069d9665dd3dadbead13e11f8020e5cefb1fdce489e3c9d904fbe252e62ba1d20f42ceaa7849b9dd8525847c493a1e0d7780bdbc7c3d2a0adb5aad6753a82c51d5e6a1078345396d885ba6a598d6f20a10f85c50d0daa2e9298d3339f7387e87cda9a174ffd1231e9c606ab533407af9580e6d7d8119a4d8543e1cb034701dc760af5582c8ecd957a0cbca0a08507b693decf0ee820d4ad7f3ece1e50f6c78edffe1f36f96a6f75eb6f1066e281a5df1bce4c666f2f82565949b85d6fb15cbb705e5633770b05dfa1f1a7073dc80aae196a0617a8ed7cdc579517da20497e78ad417cd7c2555c44e7f474a453e86422c8b8d337c2e5dc57042868f7d849b5304aa3c77d7b6a4e3d17aa8abaf6ebc6ed118ee882aac7bcef65a6fa226464946b440589b9fc898735b526c7d43a61353066c291b1f647a2d48721eff17923a717632f3ca6d036dbed516466758fb1bd24fe68f795920ce8890270a4c81e47575e5cd028cda1267c55ca7e940f5caa093174d234b4bc42486eed721597c8646e7a1efc28a12fe16327e0f0906eaf63ec96cd1989eea01f0d33ffac2d30f69633b1bc09ac124ab5de0b6b1d20f33154afdd0921be529d34b44fe3d0f21d0d606b960d396943ab9ab232a2dc06e2c62979b651a576699d7d11c0b9af36ff227c5d26026d6c10b88018db9d918bed7c2018c56d7f5b1efbba0673d4fee1e6bed58bc5eafe9c64308fc8e5bc8e1e8cb7e64ce9ccd453d3eee007c3cd1bd2f1ad925c25e201cc882615875d1d4f7cb2191738fe1cdc6ecbcb460f6853baf553838f6a98c639e74419c14e1635df72bc92f0af3de1b0573409436fa9a1aac72b1d39d373b58d7acbecca53f4e1506b65f67a6e866bba1db321af830b9b32e430874ee0fe9477ba414fee56311f1dc88dee950713b4fe4d4b88ee6d8d2ba9103b9bc509b3c1e783bd63b086ab6e2cd5043d530771d70f10efec1adbcfb2b4a587f675868ff1d6f890e9d919aec545cbef839b2ee18d1fd5ab41cd626fd9cfae6c3648fb139adacf53c7dbe4b87943d2c265675a9212ec58125b11d610b7e89f8f30146fa279d1778386d4b63c4ec51604fb4e190aa28e7ec67b005ec3a704ddde52e8286e6e50710dc6c852b05dc9e26de7c36a657cb156be1cdba5d0daa93e13311e16f03e55263257b17aad42bfadeae48fda3191fe6e2fefbfecc5f8d18786db5d8e92219339bf9707d495fb0780132193a4b45a5f3658738c29e29e73c123f2c7bb6c8cb7679f497ab4610a913720f143b548c31d899ab6fd043fa4f253beb76c325a3eaed7fabb732494404ac91f8f3a3e0f8ef636af82aa24175d96e5c34c75da7f08ca7ab86833e9dc4794b878e7bcc46a545bd9e8e4ef4e77d1bb44b6242b62109fc5be2bb7205449c7c03f96db8bb5062833134bd4a5cd41130e3e597458a733c39eef57e80effc56073e3a61ed253b9ec4b004e92aa6a35cc6e89d05b6e98a082f6e5a9bb6a65c0a04bbd7de5773bc7fc9e22f677059cb8a793333d9a92522b390b1d5c4fe1fd01c42d5a93ad1db681f705141ac0c5028b2837357bbbc9b296acb37e24bc4c00b4c4bd22a285057d3a4c7823a494894474275807df1aa882841c4c2c11d2e8648ebe3fd23676c9579af5954cb84e2c2c61c0859a80ac0cd9f0300ec5c7b306c7b42193c45dd19c1cf41833b07fbd97a6d470c5f8464a1e18b695ee545cd70692f52db47d240d21ad270365fef9cd3f65645c37ce360d2ba7692de5b1cbf24ca21af52948bdf67bafde3e0f04689574defb3392d49189a5643779d0fab7719244ae884cbb9246acbaf4abea24cb0b989974732f8f1f2b8e3512a829a1949fc78675b0209c1cfd4f0158770f307eb46c8f21231c4990dbafaec4b1025da3ec8c5e9f00bd1681ab9a400f5ed9c95836aaae26590498d118a5fecf5e142262eca9f9a95113db960615834ef5cf19c5dd99ee2ca71565bc89a001b69134f6a0c48f0ff922642db1fc5ee2b8940d1e2082398dbaffcad8ac72a9e221dc21004a71f25fcaa2145e85717f3e0ba14ad4896a0b64bedcfa97ab65061e20e5d9d3b9fe1a2a6b147af4a4d184d1b4989ad1dfcd2cbe6f6d0d226784d66f203325b56084131ed232c3d6880b6e20f690f0454d104c5d146d49d96255d7368ad408110d4ad193dffea62b31aa87c99e78ee8800d35d6aa3fd1a3d387d7b405f4e96b35e751adb327b787ec45f3660548d73a0c850484298209180e58714941bc9ac22a57b0ed36475756bd20e74a0993f7e2025954d057b6d91683819749bc14eb114c7ccb265f050789be65ba25016959f3b02f15a975956eafc82a94d9f0583442641603a9e0c8c54b378676264d630ed2942f266da3fe03eecea3aeeea9c079a9bcc42168737216a4bcfcb91c243b20e39e0b7b863eba52fc4aabb209084ba4557b041369389b5b0238a3b281b2e470c2e68945cfe567a95b859173ca4f040bfe7fb9e8a1377eaf42db813a90e1c87bc89ee182c66ae069db6a3e4a9bf50ed7e7e667ebf58e1f9a78e89d9a5b354907eab1f44acf9319509bc0e622b733683873dc4ca94720ba5b9ae975fc0db98460ed394b3a496090e2fe4e2f5653d119f73ad8b870be993bbedeb17f63ca389d9d489c4c3556b75a20eedf2196a4c32715cd5a44687e15896b6e57e98c00145a557db6d4921f3e359e2f2e1c2e5605039dde023e1d590e1e7bcb2612ff140ba4f9dada6cf9e986b2503429efb0f951d90f91a1e52574eb07ce33b32c79b2041483f700a5848943f000cf6c8163eeaa9c7b7c7891217990e98f0ef9b918d71a4e9fe7446582291eaa551389c4a96ee0e535dadd03064930bd6b10df255c61d7712ca5213822fd3f0c57f8fb62b16d5c4968658e23e5761de1d4e7094ec3c7048253bdcaca2a26220fce863f09f482933b7c2ec44c1c8f322064eecb8d0db01123f143790fb461d0810e910283a91d878ff5a8f37b7876241ae5c7920bfed5f27ff681010c79c32b17139a43e1d8da2e173f7350e8e8c5014d89ed638f8d665788e58b6f6725ffeff06a328464ba578e3a863833d531f645b69b613db2c012e311779dfb4ef870b0f2724ff860ab1f03a0bb6d5d22ebd36433583ba2a75725c1e7aba62bc19a1c4c2c1a33920885d0439cb81cc3e1e2620ecace778dd230debf7709d1bc96b8cce40a55ad288fc403a8ca24dc8a2865f80a8e12e8fa1aaeda7baa31d707e8cc51f980509cf6b38b180dfb007fdaaa66389ea171b42cf35cc52555880b2ee10ee48de9da10765a68e727e5b1b5ba30080a257b2435aede11f0534276bba83caa13d6dcfdb04cc1669ffe0d4afdd398613ccec2ab75082ba3d9031fe54d4aadb9662c1875b489ec0732877bc80e6e76b9019bba2519a0b2d7e8e1ca393d0cdda3d30c4ab92b2c2bac792c9126be26d413fc73c2c357ec18761538317a9dbfec3497cf385aac74deda7874e474138e2f0fdb55927ede8dfa856988a3a123e172c8415cbc50eb2eef3025ea7407a5c7a92038b35e960405fbb0a4d6500fb63d53da9cb2513d4f4c8917645caf44f0f288cbe513717b95d9ce6465dfe0fe725b510f7ef08d7a6531dfd29bf4f8e664d09b10e8af9cab0bec3dcec90cc77e6e8d0949cb8280fdaa12b9c7670f2160273756ff9915d175d72f6a894968c2db527f19bd385169b68cef67b59a0cb52889bb7d62188970c47c4adcae129163afa3c59d7c5575bf371e8b8dbcf6dfd0e3cf560dc1224ebebdd2c7b88973815b0f719833a214c5cebaddea500b2eb17267eb4c328b6eb798cbd6264a0e6e75e641ed140727e0e8d45b90fd96056b18898d5963d0e121b691b0cfad3a90833f2bcee7908de73a08eeaa074f1d259ec25fdad9d4e255e133d2aa535531044540318e8951bf91e75313f68f07a031a01d907dfac1e2589ded9f610805077ff06784ac9aeea5e35835cd5d7fc02413fdf37e197b6573fc033c9986475bd5a0b4a3bb6ef5c81bca8b7cc42721b00cb4e515c8c1d71ed966aeb23b3ea6df5c60db56918549ab132f8632777511e9d16ce9ee2aecdd33c5642cbe17e4194fdbbd25b2a95e021ad5ac12da4711d1d26e4affab3dc95c698265ac38d87c2c50bc5d52ff85642347d5bcf41bbbd5da72cea586d39a4fa84ab23888c4f615e69fd1467f6564fb1281997b4a73ca775d2b37a17cd0f12766b20f08b54e26decef0e7fdac6360367bbc9d911a000356beb56bf6a6185502f05e1f449c6a6e5c0f96a53e419e18f56e7ce42f51687a241ac30503a621340739e351649630dff0de6cbf1d69d6527b7f9d9ffaba16d03c0eeb7adbc77641bdbcd749a376fa24369786175c90f014f0e776641838ca7dd95a6b117d76f309b90796e9bd7869d712c5e967dd54b18f1e7b5e9ac5f8ea9efa7f5ff53fa5196bd8eb4453b12914acc08e6cb5cf7509be4202ff4c649c0c89a98b026afc0630678b564e1b101cafb597812ce46eb7305ab545210706fa751de811621870519c84562152c0ac671cfdf26ff697b5a664bb96ca6127e1825d7e4e184772e173beddd96894ff30279d549b3138e94e7b175c4b61c40cc8373cbd7dd69529e4dfc274a1e4dab8da1ce31ab62472a884bd8cc37fc679a44540fcd7d779175fd16cf20cd75e00e4fb2ee78b38054c2db9de96a709285314557eb9cbc87325159a19193a1feae9551544b23984e3c99eea2b2d2f820c04772b9f201451345f12d94759acd637facc8a603490cf7ba9b81109f32be63c199c8b1eb86d400498c71976e55865da2e3e9c7dad11c4c406fdc05e7895f9c7a02a6778a50c696e270455fbe0f364a33a9a2834d26166757450597db60e69f5bb8103ddcd0a0b341f07b7156930915b2a3622a50ae6ac4c748ac61e42f9f63062417d4a0e81a255ec2942a985184389c2abf0a9fb8c07494ff2571297331cf7b20d4bc8772cbbb13c9ecfceeeec8715d07a1e40248e1b8ea66c28c532c098c82ccc44a2a38e1fc9142497c16afc71f33e8930ee2dbf20a9287b67951682fc70ac8294fe3564e3846518d8ab49aaa532be98e5d6801392965173bc3af16b32e779bf697f1401a7e3b904bb75f46efb37a722631374852bb6c0480a557054c208098c6ce2fedc009886877ac03ad7847dcbc72dc63c56b260aa4ef96d5ecd5a401096b536bc9677afcbb9a7c3e88e52a20c31ff91032c2e77c25c50ba945fb959b7cb335a56ac80b2bdf39f3ac0b6ea62b2064175acd4b48f1ff1ff3397ae45b10d9cecb4af13f62e936e99a2c63e8a82d39eca12c70d48a055d3d75b1cfe214f1d52337f728f292cd090d0347bce37982072c7fbeb19d90e296113d57449098e1a14f97b9e778eaed52f6ad246f9e7700d03752d998a30da79e88d1c41cbd9e17a9ac8bc594ec6df18ed3e92e9055acaba9c23e861bb0f062261cd5991cf1fce6277fcb6112759e91a9f8db28be64276b1880d62e547b21d37a7506504fe4d8871421e0f18e9dbf09828d84b25e54872499915207da35c75db761bcf9abc08c43d094268324beb1114f959878b26346db2ad1d6762789fbcf4e8e4df4b22b7ccce6d8651fbb8ade9fb2ff6972bc43cd35151b395f580d0ca72b15488fca95c8dea9d1cabe3526b6c81e47be3e71a1e881aa238e6ba16cecbeeb26b4659861e93364091a27e2b744aa4a8e9e042897e0eba5814deee7c92ef6e56fecd1b352a36db1d7d964f71756057e107932316ef898660ca6becb54b264136ed9dd96c164fa2b0d0353c2de931e4654adf398797cb3914704964a5f80920cb2e5eeccc5b0808afbfd7d10c06d819095717e0737b57a4c553d8e546d8b59cd8cce4155a51a0450a336a422925ce07a8d3ed100bb403b2adc0289fe8c8bb68ae7d787028a049e5be3228df76849257d331b80539a5c5e6e8cdfcbc8ef519c54ef69b7e72c346794ef4492cf63d0616f46e5789fd93b74bdf59b4890ac002717bc9289e4772c30ca7f32ec4ce709d5b399c6b9f70a65ac9c214c80933a316a8d862eb426c20d733945faaf66f60b3d5c2f61161d7534f8aff8f10056876412ce1c728ba404abadde6cc6b9139ae5dbbb2a91e006e4b81440b694e38af04789b8a87d414064d9549a3930afc92de402da097c43b2a42e180b6d2683d2ce116079405ffee3a105741c4d814c29f7b2760bc8084a3ef5ef38c22aa33dd5affcd4f2bfa52b74ebcb8115d94e7ca5de6b799e9fcced1919d6526d5e3e941a8b4cf41249e7a9d4ac19130ab1ef5d548c9087f97550693072745f006e56055e1295be9cbbdc1d000624dbd73cd26d9a32653518b82bba9d5e456d9459af39d921a6685e583990307a0d73e25986ccf65fab2842f808737ea5b429e3b65b9d5b1fe16b254f5be3e9d2ea0064f72d19a1079b664dc920f1af64c4081c144104ae3c0e165ad1ebbc7dd0c602dc105e9b8c1564b6b9859051359ff06c924e72e223bbb2cf35eb8ebaf6be430cba136cad0c5c0c446d01dac1c50f42a3dd878576ff3e1680b295ea1b6826d947c09d47a9ef2a31ffccfe5c2175ebfa54f79f52500e61ea3cb81d7d7a20bbe1ad50fe28fdc2cc94ceef86f30653deb48f2a00fad4dda234fab52558c6e9471e9a3e0e19363d3fc4b55883a046ce5bebdd04165357622a4be1c0f8a6a098a673b8348b04f57101b942cde9b415dbe9a53f2a5fc9440a17e943ee0326d37d7bcb8e78de21c9a766163ce434e324f39ceb77e1fd7d465ec8f9436be23343d8171c2c2fd1aa1db2b5364ebfc8e9794d7def75ece29247b748d4932c34af5deab05120cc15c2c07f336cc2304ece900b662a843a093bce6165a6dc1eabe3dd9cfd89b5df3bc2b4476da102b28ce5870b4cc5da56e0625272dc59248ca23c0d214b23924bf52a5c049609a3d8a76b165178b7a28f693c2d25bf0516b77fcba8fa5066d90ce36f91a4117e824b8ae2c00c07fac39f1860a8ce4728262bcefc9478708ac56fbce701752f8d2b1b86266120a60a026344a39a149eb8425ab5aa713392ac350299f749834c83f43b03c1b8a6cca42423e596f47b235555150368512762505e2fd895df3ae3ecc9b10678c63be2400bd5183a4482ea11062a38e31c35184f941d3340b686d0c1f454af5bec22808bfede6643b6324e9b24bd3819498e7afddb1d9ee0e54ef739a109c20730e53a30cc340678c402b30ae65f713606b11cc19866ba363e02f447cb50269765323e4e11d5acab8869fc83195f44d9e3f25d3d850816cfbc0c2f8d61c53b337e8536eca9d128c10e86787a4a2b5a542bd3946627759d8e6e24d79bbcb0c52b1852ee6e9871ae05e650e52b86785768935dc3a090b6ea7c05807eed7307319b8d6ae30936a1057aa4489268e32e9c9dde148179b1096ef65d98e77d31bd5a31e2f33e56367185ed216a525e093d39bd55b4b98c65c523e536828aecfafe94e2b138ad46c63915fbf4184d29c8a985216ee2a66e3ff5d2a2b78d1905c789a38c88bd58278656b29baad318a56c83cce39f6e64644e2cb783870a7d631a26f816895fa714d12828ba765ccabdc32c2631c12bd71077b8c3355a2e9fdd834bde2a6d3a715565ec4308c615a76c97715d17de8aaa1f530fb6d1dd73388dd127ff660125369ce5d43d9705a1bd3c353e9074bb259ea89a85d7d4a1088e7d8c6aae24add459a2768b71ac0ef6b4ea90923635a8a6c278cf33a2da3f0f5c6f4acfab5d94cb1080b588ebb8f0025671f912d5954f3f5af9ff395ef3ed1ee8a9f005dfbf2badde64b18f76c47f770512bb76a43719756e7756ea23141e92e5d9733411539bf9ed2091d97a02e86025c61635efde32d7f7a6b57a757fc69bdc8a2ff483b772f94e4ed19b8b090960e3ea13c2cafffe9673107a16ddd183235b3497e77b4c84aea236bdcf0b9cff4b
+
+# Valid signature XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg = 39324feb180aca683d995db187a075a910d0
+PublicKey = 04000004c6f1c4a0ec9da6b8dec50a8f2257076771f62a1d425d5de0d02cc74db052973e388ac5b7609960ebf06dbd7354ad549e2e926cf5142c8054aae28ce3a84934730c54894ecdc72cd8d94f02376e47fdfe399339ed29ef21a881fe52571c2a1878c5b89f67d59e48b44ee2f1d2e67af73f7d733148d3ed9808db53151c08098808
+Signature = 00000000000000c0df5786b75efda083b9dd7e2e6679d9a692fc9ddd9df1449a92b51183c9983a0062d6c0aa75e3ef4e3ab419ae836999bcf760af96d2a6ed76526472304af6b1aea28f99a669d6d2a5a056366fd64653aa594f43dd455145dca520aef953cef40f48e0fc0200f2b16f595d12f0c634b3d9cd19fc4130386bcb65ec364cad9eb1caccccde41d6dc833c938a0ee7739aebaa2e61b51f830399616c041904c4fbfc9a8a0c05f462cf1777a42847934f29a56322592982304333a9e5844b4b9329e1803e0e621fc00ad87773ee299092c427362d7bcbfd8ff2661d1188223d180b7f623fa860bf4615737319e44120fc73ae6165c09223f38465cd8b806014e652a6029c079af6201591fe6083ce5016f017276b07e2dcc73ab850c7eacbb7f6242d843f4dc792c04d9a9b78d01208445e058d687937bbfb68103115e6fc30de23cd4796d150ad5c641330ca01d2e21e43876eb6cc93d13986e7ca06bf41dffdf641daaf18a8d82e9f3d64ce239689c5b65c9287054a2c09c02300bfe0e457df33223104d8f4d4ebc78a217aff34515cf383f490af54b5b2e1a8dfd6bcc13f73232e208d7f31b27c0fd80500f4afa796a07974b05601dec5884816c198692ade50678678297f308f68952961cdd05f8383e14d2106dab433e10e2262bb5da8883be45150f08cbf22985e5f0f4af32618833e83ad3bad6127447a907595e910295cf0a18a9e621a9e8d2a9cebf833b1545e88341fe8ae69a251d97c93105770d1df5feb1a22a3d5814738e984f1738ecb6671128541d57b4abf7ea288300b6e3877ede053e56d020cbe3630b960ee6431d990376c9ab52dcfccb9e41d589b7e1f0ed33c23bb04f093994a5e854351f13343ece396ee5c47bbba29827a4cca9d534c82adfe44f16c0ccf252b7678b30b5580f238c94b38388d82a32eb6642c90b6a80596dc789ecc616b45beb99768ea8f921cbdbe65151ba6d45f8d47cf035aee3fc405c73d4349d7003fc1be1e8cbaf3d989488a9d26f3c338afaca5b69e8b69dbc02240a040186446e99bcdab020940cdb26582289173f783332b91af818c0a894b44582b3df078315137ead02faa0bbf58f59574816acf9fa8d8c3692badf2a792b26e1480c9f88472a793a61d8ae13e6be27114224f08c42633b146c09dab1906e7fe1758ff70c9abb6d3829ffebfcd2aac39c0165546660113a76b2926db58ab7b0c60dc62404003e809ab9c0ec98338d520334310ef5cd90770dbdab6bd3992360ed82f77208a325e48edb9f0fbe384a67d0aa90711a40413f6406378332be5d3b1f4961be34e9a1c0e8acd9d3da5e3f8d16d5259bfb6a3a64c81caf09af84a93aeadf7ff811129af03e91036e25efc493d0dfc475ede2ff0af7d881d15c0c946a784a366f79a0f6ce84b81094d7c9c91edd95c427e154667b199baa75c2c4fb20a870978071b10c1f2bbb363dad6cf85a0a7fe744c45f0f48f41f7383773c5db11a8098a09788e1a6d44380b067cbfa6c97a13d222c26858db57704b3e835312f9d73256e4382d4afa4b057fb4b633abde992482ab668c93218ad158de54c988d42ce14439496a76ae85d6937aba5d2227153e57b455bde7763b5937eff31cad5495420d873c654b9fe53b4fd4dac88d8f28aeb37d026c826051a6fb09347ef1e77d45e9c5b4ba7a3d4287de414b64c362007984cb12e86daec949d80ec759c704d538d4104197cfc90181bf9bbe1febca4c5ec6924356a9ab08bed86c79fa2cd2a1af25778dafa4c3ecfefdcf9b853d5d932395041af43274b7b588a76c4b4d0281f4fce84a765a0e6cddf19aac246fef7d9f05b068800e1cdb7e56fb247a41d7e6eae8629cdb60bb90db107b0a5bba92991acaf174a886f9db445793aea458a9771eebcc095a2c103b87a28b4674ac7f918f25811c0744a94cbfe25d17925b46c9d03a41bcfebc108536e04c5c5a4a6e0f62fa46a58e3188babb0fbc1816356860840b907e86be1c8507ae49534c738c3edf0fd733a17cfa10c33a2c1ac96515c327fba89d6df90116830bc639f0a6220482c4f8a8526cd5894eebb60dfd8946ef2312ce7473f6960af8e44928d8a93a55e86e90991baf25a2245cf7adbf092393f64470807da6cf190b53c03e34e07d0e61a8257a4bec169db7b527d30ed28e763724c43488d0e7fbc0c1ebab8a1a978d959bdebe6edefb5a329f1e83b75186377711d2c4d1d5facabe282f4e52a450c8fd82d9f17407275299c82d7d7eba00f81f4234c252ec53c20039789601d7d793774484ba847c383e31997c658e35df746f09f6be1742c6eb248c310a292167b025c57179c629aa2218308d53c4c6f3996eadca5af50b875022bfcf4cf5a39aca5f70e94ac917fe2e06fb7b2f8e615986aaa63fa7a5707ca4bbca076746a3ed7bc83d4dd38b1560ad79103939b946e946dc2c5f4d1a5c446b17086d3dc2c4208f101b3a1d54ce425c18a47e358107a92d47f2658ca08efc5b14b5082ff64c9a6ad2122ffb7294b07de4fbedf0ae9fcc91ccd3faf58b19fb65dbd9c99a013c066ca4d2454261aa689fb629cfa15eaadf1326ea10f848d47a62c6ce13ec4f3bb74cee950c50840f140dd3783e3832402e323d262735c64b9791000546cea6baf5f48d48205fe1884966674fd0f50f3181b4b7d554ef549cc3c0213efa0032190baebb354bb0efef23e93df84a0766d780a9d3427fe89a5eb97c2dc897d53c2c42b2b2382468011ac3eabba6abe615da76ffbf5f9f6e8d79b4ebefe2e0dc0d98886b0a4bbe0a4f423eba75196e2c0f865f243ed2dd354f6decc61085ebd85590573950cfdc05c4fb4e65725f7a3127f06cf11d18c845b469ff8f8fb3ccb77b64ff153e4877248c938c241758b5ebd137dfa5da9704a1c68f46401ea02911b26faf1a705539cc93bb7dfb700e651f531e1a885997d8f7b3eab0f1f1061afa1c9707f3942201884965061ed0e496c6b3e88b4ee1f94eab798fd956187d9b16e4b7652dc073e96c3e21790cc2bc4b931bf2cd1be8aaadd9b87cd1a408fb6bae152f217f949abf1834b75fd266741385f5b7d4f39a157f90f68a1182411f99afb12b2c01605f7b77bdd2b1461eeb887a43ee25f00903ef0fbbdce566e2342c73aaea57c7d535b712f26d854af896453ad2203e3710d4153f9495e7cca2c74669b4c65acb80f3c21c3343dec6c33cf9f200ee0f516893d609ecc2356dd27bda41282451a10b211cc6e0df885bc122a8bb89695363498928473436e2a3327d00ccb9ccb3a341254d6819fee74c28643042db58e2b8dec613171c3df6bc3cf99ba1fa5447eb1952cf26c2429ad5f619181af5e45e3c1c38c65546087ddf08c7dd17c2152af18f3d8703637cdb275a444c3eebe632ed7d8eeb913c2f9bafc7163c74b3b3d400ef4273b6831c1b9a862f0e2ad839cf5f2af4b5b49bdbd245b5063b1a85717c6c0702d56d8acb19cf6601678ee5656510b4c9e9ef2a1865fb9b077fd46bb0e7e105cc99c964487cc88cf90b90b9c2f291ed7f9c111e5e53d8f359ee590e66ae84eba25b7f07253df37adbffeb4bcc9fb58a18b4ad0cbdc081d6ce76f031ca3818652a520f6da4b354d1bc339b48a5239ba26efa3299f39ea5e120118484524d504fea423662aaf94e4dad556d84b8e83723e263b0e79ee788d396b5a82ab190255ed91a6081953728629cd193fc1f0f873634ab0fb4e399d0c22a358af7b7718a450ac0871cc013e60b4741eef19ff2663a3d9286c31f1e7a9ce2e4a56e6cbc6b97a2ff0fc3f35df4cd0221871d0e81bf1987cebc98ac5d24ee3b594931f8c9078495713287e0317615cbcd7de0409500fc9137cae3ed1c4f2d29b94f786f7227cf93064a4adddb0714b760839b0516d5e4e2bdb7be5226e5006da9a50b534ce26b20b990937c355f7c88ce878be4162c7efd9fee223417266324176a935ddf9389aa50aa286be9427fa72e7cad49fd2b9396d94b90dc1ea6334349a3e63c1e2b3543373b4ac1613d69b1209a1cd0fdd7e4a83231f6c047ddbe016e3736d44e44939f97b80b24db21a3836d2d024bbb169396cb72bc718246dd9015a9be6c0d5b69b4b2858c91dfe0223820419d16c38e4cc6db1617ac3dd8006162f7d32f667edee86017e08841084ba2d0c16537c1f1b91120d33e69842863670d95ebc411d6c4acf939742e4a1b40f75fada79cf3e2ba2fca020599d3dfa38393e0e5d203fac4460111348acb20ec49e881e75fdf9d4d136a265e85031b660a0ac32feb940a2a9f31899371fe410d03b15fb1cf3c033ffee1aab995feb1f65d89f63dc368b10abf94971f9e5a09ad8aa313ff4446e61daa5544bd035af8a74f4e537b99c2a999fda2cfc6ec2acf7b3a30babd21efda80f507d82d207e1c7dadcb480e6b1d3da782ac4d937abdc7e8ac664ed439ac0ae32ad263f2d323ffa40fded187798361f91c5de3a82bd6a15a58bb6f8d2505f6451b3b7983e16796878c440334333e3e4bc2752cbb9d1ff25a2178fba2c9c350f807ce1662ed76ce432153c2124d65e4e24480008dc164b5d443488374db25a105c1ce0bc774e4e90e11a21d2d0ee8d602cc1d24a47ebb275c1f1a7e2af74fac36f314de810e3514aa55daf1ca33c5c16c0109c89a8d5c08b1bd0d33e14b6a6b7969c4f4d51a8a8c56cfec45c0e41e8aad9c5f1764b2835114be4a84c52d2bb4d44e1707f53fa1a32658206af10879cc087be2e6807041172ffdfd36d9d65130a7346ca524f522f2393bb4d1622f5f411ac4d6a51078db127c8e7a1e4dfa5e71744462d53f24997206d9e3fc7dd3b7ab5087f80ce43438bed21665608d80e7f3ddfe8070b9edf9aa579eb2abcfee3ce50b75d4ae1a9405356fe847a8e7a533cab88805014ed0e0ab23cea6d210caaecc67f8773de52761454b5b809f0c2d4c9a6a42ee8a7b89e882289978b420e1501b62aa14b38605d469b96dd5190e0ebc040acf98fcf99097b6eb63c7db6286119ff972103baa871243cfe6f1af078e83d098db54fbbe591332a0bcdbce93dc5fa43761cc2ff58df0faf06e05a77ac179576f19584f8302c6d46376600ec95ffc1ba250256f47d0398865d2b35ddd426369a2bd7847490cdbb7283e6f005a437b1c94cf621bda720e2a1186231614838ed9b8c8004260d903b38d5a9171a75ae1791a20cb74c151f199f9b26438856e26c596c3255062649aead524854d3329e59cb4dda727e7e7de528cd45c2fb6865a2e520541002fe7a13c07b57926ebdfc1105d2e7b9b34451d3030b340db7b894d56afc04e5bbff89d1e5df0c85db8c58063c8cbefa79c19a1004763d14a87e7eb53d4973ae3d3b666980e1d1a394ae80183b82db3b8a7eb3aef13a47fc2c00f2848ba71fb8593048f00417a3edbd9993bc1be70ba95679e942178fd04f4e35ec407811f328468564e62a4dd36389c8d51d3f1d325d5a1ad42eb1296daba99bd8a011d6d421cd43901ab6cf4378bc433aee88d2a646a914bdacb343ec552327a333b319ae526224c35d430b1de7380f4b79a1c8d8df3bc58a6669792d341aa065fe44c56533ff8de6dfc543ae0e7b968d81bb667eab77708717597c5e672216126c1dabf0928763f92fcfb437d3c3d84d58bdec1de6ee54267e94e2888f95e1da82a4ab03595ffb8954719104b1b77667a73c60c4f053e2a1e91663888c8d7d888e2ac924334b6390e4e2b46cf5d021126c9f5346b8d7fd90e097c9620d6d883846247665d67fa42a0ec32d7a1b2bc2dd3cc005d754118d0c904cdd21a8329c588c43749589e333aecc84e3aeb5b1ad1bd0aa1dcd62fb909ceab2d2b537c1a86231e1e442c3d245d98ed6c8a0ef67f682418480882b4aca46f62cd7253a02ec620da88d4029acdffd00969de852306b3fa9f13e8b60d14b0ffa4eda019e94310603f39b8b511c02006aff618549413a2def9a7f14624b9ce5d8222219f04872d34408008536694dd600b1d7eb471297565086d485a8747affa7e3db4472911932c82836a311554ab11e475aaee390ee06643455254a313d21d93353c28429655da2da97d2001621ac5aee44751d85be1b03be85bf96bf8c51e789d65a0fb3bde01a74f851a9d982c4df360a4962867fcb3e38e1ab39dcc7f286912dd0659ce7542d5a371b96fb8a14086daebff0365740576742609a207cac1642eb81044e0e795b2ab27c4c6b12d8188f1cb71476aa13d645a0049b0118e00af7bbf532d6d4fd77be6ac32d33a6cbb1f7ab5dae87dabe60e13527cb907e8c94e82940dcb8c51498abc5c9ad9d7dbd371bdfa1fe16fa3b59ae87e0337bd58807e935b21d9a5c359514cb4927a61fd6e53a96920012fedcf54863dca7b5f4a21973e95371beba0c04821bc1582df24404bd890d5d9b4fa1d75e569164d6923b34c400882653cfa04686d86eef23307dc6820efdd7fa1b516fcccf5f39fe653a902bc29e897f2177499fd5104da5f191872d4f9d67c7f2dde632e1703d4710757a04b4b66ebbae71fb698ff31ea470ee4f08e739f25f950d4ec788c898b01e8ab3cca06f1c88954f46f8b03c73c00877846134374f1feec122217b6cfe249d37509d98532dbfc8efd7c0e59713254182a7e91a7e54f82fcabf3a7f57bc2005c316897b42f444adec7b8b5cb328e24a2e5af4460f8f2e63ed071353672d9d3447fc24a665778b24560b11f3836491d3ca59d5f128762e60390478dc8efeb0adf070be2ce00036af5f107388372866ca133c9f043411dc6adcd50d82db736a963b5b1e325a907c785c874f3943fabcf083143c5b45e41e237db1ebac9f692ea796440526c1017b8872e0f707defa236b3b85b156ea03c4ac67d5d31b07e6ec8357b381dcd72e073d2dc6f5c243e76ff6dd39c2970b651320430ba1f0cdca344337f1f5adb8b662b09c9137ab117b02337637823a28c7b98be1c49480fc940936ea2c45c14c6c42d755a26b630e911b0708a0349389bf78c107961eced7ceecf6634d89dd87de1990cd9e9f6ac54796f434685aee4e23529809a226937233a88f9a794cb6ab9ff1e0a2eedb788bb1d2be90223d9a1c9282e322281ee4571c01811ca5f719eca414ce681da416ad7e4eef39ffdfbb00a8ddacd47112ad498e366c79dc1588401635c10e9fc33b06c536066407d978ae893bf7145896bfb375dd9eb9ba470153af55fe9069bb62f2dc1af9e06d1cf408f1a0e867589e31226c31a923555bb30b3d1acae70bb64ebd52500210c0a8971d178452a192957bc44f7266e2bb06dc25372a0e56c388d948376e577916cc5372f3b51c6638475e68f8699f42fe1425f41f4a384a351fb01978479965f1a9337652fa683c5d50cb8887a999e6f2fef0f2f4b2d4ac2aa2bcdce39a40695f984bb3873c92a81e3cb45c2f0f2b23d04b85ee2084178a529f52436bfaae97a106d46ef2c1f8d0fd3652111ad1fe32d851bfaad5fc00ae9ac2f497a12189903349cb9ccb85611ecf3280abd5b9b89dba7734a99a01414294350c170b839c4025e221cd1a3411da7665d7056d4d76afb1c66faa9a5cb454fe4737d878c4b074bdcd1cf21c156dda35bd82860ce184d13f366ca6b63d5db3138b2f016e7bc68a7cefb1dc5476a8a7182f6032518f256abc3770d30bf5534cb21d2131e175be8ebbe3c41bcfdc8623cba60c0e365a9015f3a8921a328e3c632961625379cbc3e5bef77638b24284c0776b10793e25ad80292d91c09fc7e09a46659b767eef51fb5e244e44f873d256c911e51be0214638247cd365986711852c1104f2b535cbe0a98c4a15e13ac3e1fb85f0d65e8e9f2344a9e7da048833a872b2b2b0204c11b9658181c2922114adb14f5596a3e1ed236ad5b768eb800fec9233cae252950109e69287c6abaa5e6c436346071bb022a18f12123a287162618389fbd2fd744aac2c70a28e48e7176bf8ae9f197728b4c02730d261b88e85193d5fc1185c4acd2a68a1051747f09e50a4eee41c2a91e438801147838467be6226783507d04484a1ce270974e5a5b01d87dfcdde7c33b709cc29d972def7ddf1ef09d78ba661866b018fd94828dbe73c99fad9379f77a5b0ab6a2f5f7d2e0c8d22ca5397966e4c4ed919c34823cf2d48c233358d6f62ea39639e6248b29000e65148d51a25270688a49bfe81d4ef49dd31223c8654b23f252aa7e5955b9d873fc3e4d44f5fc9fd54dca7d076ed162494ea5f5e2844116fa282e45b23b5e19a123a18af26e9b868592e4f883aa808f10f45e606809282be0c9c5967cf5a9bb73861bc7c03f5783758d78e1376348dd4b1117572b035c554f62a7596ada2c618228fae88e0a02247328c17b7cfb155ea43945df38ef01b9f71d9dd8c77f79a3eb7de2fe495fe34adc87b6a8a05394097f3d546b0f35ddae9bc1f9a00b03c31294882e5e95b1fb59009a19c4c8a2694d64909358b63c0967e81495f959f5a750368800aa37f3ec356975d70807ec914ecc3faa918b409b9f23aca1b626bd87c14ae420960f109831e5252c4747b676c1fe911cdbcff2c99264e27945f35d9b025c19323b055090ff73415d685009c4f9168b357d5d0d84be70663cdaaadb3b080a06f8444cd903fc03ae9f31d736d37c9fc659c6bdba5f9e067bf51b5b0446a55412003a0976c8e55e7f2bca46fcd432752fb22a9ca57a9d1d0d1c01aa54df2caecad322ad3558babbc7f83586f026cb0d2c2caaa4f30131e0c1cd86d16bfc7adaac5a5518d62279e96088205cb1754fa782e261c810161e762e80fd6b739140c1e7d17f5a1d99557c2a57422a70eef93e18e7e0077c9a62db9841aa43b8125802df17618b5725bc22c9014ccd180b6f12cf81e6eacf14b718c1c54196c25d0e9355a2bb7d8cbb5f3fd59ea85c58b7b2e3336dd3828e1320ddf1c0b8cecbbb7765714fb585f789c656302e23c0be9e6bd95a3e9c2d572374183b04a718be98117c48865d702736434fc9880f82bb8741066c0524ce5cdd6ce98670e6964e0ca74428c9461b8b06a87fecb4ed5117d02b2464495223fff1e3f15ff8a060a38f68980b88bef37abd1fb52e1bf1f62e98f00bd9f8c82305db6d8c53545d99d664514343718e859ed690b5953a1471778867dc39390343a1ea7b404f59c52a5100c3a656152abd3cf5c9c7847c73f107c76101ba73ddeae3db5f8adaebcbd75717ebf4a23584324537f7ca90154a7ff16ad08f43b9628a7533ffb8dc46cd9c54488310062f4a2cdfe21bf6e2384264a0767cd9afdf5fdf100aff043f80fc947599de8d260cc63191b2b23d8c31aefc0e54a737fee01c14287687e6411dfe33f05509f8609ada563124bbf2366af0994a2330ae0e43b79f4acfe34c0047eaa9852f31ca33623ff88a741f8279b1526a7d74eb5231a7da41195be627c1d742eac564bdfddaf1937d8d9055025582a4d50938996a755235ca54db2e6ded8251f5f3b0019868ed40ad94ebd6f79d7bef0c4eb1397d9f13f151d2eb381c8b283575f005fc954fa4fc98581389b1003c7ac0fcf3528ca2930afbc62a4a9379a2b78e1eafa856cb1c79bea862cd694a84e9f705bda7b0272352fb9c0654376fa74e15b761a126c26c25c8263ca5547d6ceb3eb1e3ea2a1caad9dbf375a268d35690333558f560ee4247c0fa74eaf2fdb13558457c98a975e9b59108efef9b73572198b04333608c39e2ab9d91c0dcf77a48c2bad7f81498492f4095e2d081f01d2e1d3460d5dee28dca7e5c8a8657405a529c1a3dcdc41e32dfef9aafe452150b3c65a4cab886dfdab954409ae0995c6720684df12d2f9839d77a2a63d03e43573dd707fa557a49c4c69ad2a10351b8486af52ddc8976c2529b6460b935e1cf500537a7fabb7803bc458633590c007fd0450c75433c08f5c883f87ea531fe04a2c7cc198e5a5babf79251e283b5531d49ac19ffd858351384c00e09cb1700ae9efc6a75ca84238b1a7a01ceca21f4794393a699dcad05939d2b9d7fdcb709df662f62fda282611daf27b8647d788a75fa799c5d3c59908b6b7866409ac6ad90d1e00b170f8e3538d593828d78d8e53b6f1f2f85343cdb82276e4eaf4178461c442a05af5623d887d53ea78340d0a41c036cccc3fd0613f48ca07afddcbb5d464b85ca5b3abd6353ddb93ec1983371bec700f9f8f8b39f7a23f0d3a0fa53657f4b36313fc9fd90e1e7cf70231e6651a1eeb6a17b2006e108996e79a72e9c0ae7b291aac85613491d3de568974a3562aadc3837a2ba7a71a4f7e7f77098afbbd25de4efec2e8f532dee6f67cf6d7929c8516d0c15cdcd3258f4676866804a3b71b62ad9c5b787f505309682fe07727afa4c0e12d79fb48c5dfb876fb56634aef00cc1cb18e2419e9cf62dbd238b6c58734ff57a0ab93c6568f7b20214875f4aadf9db20f6997d2d3cc644ccb326ffad1e37671dcd6c3a8a90337261692443bef3a9791ee242b0dfd90e9a8b709c3c4200e857fafb8b767b8fc0aa9094e5ff52b6a094a802f4bfcb8727b52ea59ed3c9fa24cd8deaa21d5383ec41041842e1b57733d50550c69e44ed42a571e6efda26c4df48db280b3c372e6af0af0d8ee6cd8ed1de7855fa16ba18c58c0a2a35da02c7cd6bf4088b00cdd33e97d81bf9369e882cb9d9dcfc9c810d6ea80b347a3f9a4ad0b3dcafbdc3e2072e21eb019c08c954a9aa6a83838e277e9150cd0b683c66fa6d8af41e79245554bd28adfb4ff2204705344cb1e43bff8e3e5332e6d21fc73b86ea5e755c282b0e9e69aab6644d5b154c41112754c9f92d802edb36cdc82ff5dcc1c9ca830377b1762e53e2c2dd3e8b7d52f66a9c06b80b567281401bb02bae6b38414c8c050541784a9d9098900b6e624d0e55869a5a4a1fee8af088e462b28ccb644ab8f200f54b2126741c02ed11fbca7863ee5d5b225f5d712ea42e3bead7f82eb6279f395c4f6cbd2c363cf5944d72483088784aa9bfbe696f3954d3a3bb8ee94a0082f7e95c5f96534e07d5e029d97d3ac2d9059be913c7acf86a60b344106865514d93ce18b9c8c70ce61e0a23ab3a1a9e599826748fac49eee3849385d3cb1b55a50dcc90ddbbebce800b710ed07f3bf18c9c7de9e4cf503763a284b10d111f223efcb629d0f15fbeed75e5d82f4ffeb749c4e729a5687f6699b98bff1d6b401524a515a0a08db1315ca4d7ad50eea2e85047ac510930885858735d69fd2726a8cd7a4382cc1b0c197ee9638d8e3e7c8d8dec2649dcfcb1709fc31a43abb0deeae416ad79bc81f92aecd373a66963b959859d9d68add61a94ab9cfe69fb3a77fee9d3761a281fbd26d99e900d71be6e24b32df5abcfa2c6061dac5a36e140f3ed2078019202cbf55737530eb1b901749e8a0059d2c3fc2ee43590052862b943718aec0f9e320d61e9c575d8fb842f9ff703fc113e14471e91631f9b28553425d08b715ad0de30336c13312c2be4c57db09a7bfeba69bbb2f8d7f0fb1ad5127f28daa09a6607a6fc32c348fb7a62970661f2d7dfd08787ac2e94359a05c3a10e9d7e3c7e860c4f3a6b1a856d404b32e45a97b50633a179de6c282fbf378e0d28eb8af6b6c9df1a2fc598526cc17e65a1c8fce1768ca818f0a76b01178c23e28b154caaa14f67093a709ee4a3552506f0cea326a02e9de04aa0aa8459278f51818fd833e81908b52ff0c9ca51650f0c7031e85791eefc3963cc33e51d3b4f2eb612df5e805e127a97e9dba7599266dc2fdcaf248cbb6cbaf1e2f1ea5b938cea82694494da297b75bf134782e47d5f30ea1fa2ede1247bf10f15d8cda3564ee0702bff99f63e4df90156c9ea355927e9c955bb0f0dc36df031a37309d3c53bb1c921c1762de6e5f4d69edf9dbdb9d448a105a9175ab91a62359d25f2f336e0c2cfd645776a023a6d1cb68074a28aef88ff4b0b764e29d16c6f6ff67152eaa8a6281a875b108ede904e998afd9a0d714a7dd67aecd48c277e9273bee76f6ea2510b56dcf4443e75cdd3c5880e9bb7ae91bf821bef7fba1ba1989ab81e905848d0cdba38760b43d1f26d8cf25967cf14d0bdb678d29112cef63a68052c7a07701b63c229fee5e95dc7f829be47327503ddfa12e4454bf1a0365e9479951b5445480a3edd34b831f8559d6df8246b4c4cda9bdc1350267d77be3af3e6dbdd1816177cc46586d18bff669a144176f378284197cb6a055cc99b72ad56b087dd4c7d3396c0e67d88edb5f70f2ab5716594f2e375bf560b28ddc5a671f7d1e82136101bfc77fc2e7281b5f95b0419eda0ddf9409ae71be71ad2cc05d99ce8ff4e72ae4c263edfe38bf77096aa94d4a042d71a79ab4d0b1e28e7ce3ad2ea12a73c6ebc4d34688f41a698c1fcddc4de928c08c296a77c352528dccf63775b9d1c0fd0a0fb4ef7c960ee38842d20eea9eb7ec85cda3d1a390d1f3b20ca91956cb83d6722641511805523de7210af52ec39142a14c217ddc222b46412e45ce536e5a57923044a81127ad0245f8b4cc21e38db74c30d9f37b9ab121d31828374d28cf244f8daaa6e9438ce65eb02f959740bd4bf34fac6d1084a5786bf1dad36148d84d80e099d5aff0f8550e0127e887d00a03ed97b251e25593518fdb942e33ec0959a0718ec564f8eb0296aa4b6dc80298829c4bffc525b90cf45fb9ddd0035eee6448d58c78f84f9707f02254e719b61cce7423f90c92995c0845b5962532203ef6927f3e0931470b98ec685e67cfb8ef002c5438b0b5be7adf8c28bcb03808b23914df6f70d528fe54c4c78b71da022388a55075b4acdff3206e4f0da0387bc64e5d02dac894500f2ea2c794599763f45c12683499cd5494ec9e60030c58bd2931332abfee6f2118891befe8a4a6d9d5db247873f06a74f
+
+# Valid signature XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg = 458f4d30f1bd34d306092e2de2924c259c3bf53de876188f3b1fc0b194ef548b3a60f874b7536d0b402b8520e98c8fb722f15c653d1b4fa63df8d891cda1e747f8ab9490b5f0b1b0e9df7f92ef172a5c449d4a10911d765b14221c70f8d7a1346b60e0ab8b6dd00d2792761b74746de071c27a83338b236f592b6ae75ff672848b34a3ca5b2783dad72e7029891c24fb77972bb4a7f0481547e8ba4ca62a0c8443acbe7d815f257ebc8d51e0dbbf1ecdb7e48e31e2ceef7cbca409da63bd3b
+PublicKey = 040000045bb39f35e3d6eb179e794406aafa4263e48bab718d4611b4015916ef6d5dd8ed7077b47688f2681377a857851510fc3068211ec47530cdc8312bbfe8a79e703446f7062d2370674cd9c9693a1a5a3522a58d896ce1b8ab5cfd54f9fed660ae881c602767e4064c28654d310c246ac81be08d63d3fef18ce14f709f4bba4cd1c3
+Signature = 00000000000000e9808b7bd974f079b899ced611f87e1bbad2ca99fda3823c8c9af4f8e6d60211449fff6ed8149b76fe76e70ea74319fb66b918b05f14c5f7fa337dc76590697ccd0057117e8bc6f02fbd449d32489e62acd33b39db3a434966e56c6691e1153e5979d34c1c8721cfdb2063d0b7e1f8233d806e8f43b5ed85776eef2eecd39a9bb694788f56ec2fd76b76768d199175b1afca2461ec3f78e75a82041498c97751cbb17833b9d5c6585c02ad9740dbfa116d4a23ac3ac8c61558d07cda28d8ed384731132ada6edaec61dce4a49a95f9631d2c939884667c53a93dee86936917998a9cb6f53ff4c7a1961e6adacdcd5c0ced786763029bfe83f3ef331650f28a50a57a3212d46f3f5ea8cbb0a988a56df939759c57255e4f2333f4c1d520a3bc28d653fa17faf9620b43cf685974c7edcc1fd449253f05b72df6beaabfbe1d0768ec9054c06ad81a5fa970533357b4ff31cc09424a0a9f84769eac84e926b7c27c9e9529991426162c519b228da850455aaadffe0b9e0c39a979f04b5b7bab9f0bce9dbf29d3b21d88efa777055106dec99b151141476a3f25e31a6286e60452239454b79a587dfca7f90c58fae43cf70723b00b7d7be439a2030f928905ebc00e0fbb51ad359c6d15f4a234b4c03c67aaa0da80d5a5c92fcaa1ff400cfcc5f33dba605f18bdd4b24cc7487205ffc09f8824ced32fe1fbb322dff67e76be3adb07b948fb20f5d16743131587422f7b76faf9fbe334df3fdeaaab55c3c4a8e4a5be37447ac7f400fb447a3c41758829726da5e34cc95e1f68559c62e1253b41cdf2546a12855b9ff68a4aeb017bc509084e047a26c8cfafae5708ea22f7e899df8b1a65965a17aa5cab23f327fe19469ade3dab6fdbf9726f1b4962695bfe953c85f9df2ac95a8ed1afc11b735146e0be9a5edf0aebeee5bb9934ebe680a90e7faf0b67391cd05cfc8b2e101d515059f915932e8c378c1d0f1390e01b4548b0bdabe7962174dca5200da0e2285939baaa44f4066a722a2eb1ad2b20d07ac1cd1008b73303de77a3ca6ec4ebf6ba885fa73d9f4e35f6352293c99a3cb2977a2862027e3e591c21a94de6b54197cb3b89f860aefaac45a8cbe19dfd0867e0814db4b93385cf23451bc06c555ba8712409f8b27fadd998b2be7047fa7898e7b97510887feb9effea20e9afea0ffb4817d247b7c1a89db45962f0cc45f034a617e0fbb4bc757aaa2187a524b55299ef9dd478e9aac7753d1a1f8ebe3a5c5d63aa6294e19beae3599394dbeafadfc2e5273373fa9bf7c63b085ff0c0dffa2a5389991097543190f2db1ccd8070fef96319ac525b626b4bf71c94171691411e2e24446e9d34ad0edfd74c8389cc30214a991a8ca0e332f47994ade1574c61ec6a80d503798aa1be016e073517bc18de6de5990d3ef32823e5a3b855584825799a77fc4255d372f488423966f48d656cd48c5fd762b29217e871eed3626b7315bb5693bbe5cf392ac777153cc6e43a206b0c4056f8af3cec156f919479cffb871a5d3683294ec53185c381ce27a046db8c919977629a8baf4422df5a8fc8ee5ac543166bc90830031e087f1bafdeb28d5e61cef22ede425aa37b36e69f0620c10f59e43e418396c75c76f8fc45a446df885acf0b524f5eb8332f42f090f2eca44607817cff8c5e4a3f7dd2f76dd2d46ebb4fc53cdfd503f774e8787f2027ef52a9f61c2a452e056da63a1dafd1f5b811fa2c6c13b98ff1a2e33d1f98f518f5742ff7f1a55ceb6c1c7d88d75e2fed8803f57323afdac726cde3637678b1f07d306f69b563f632e666353f8eb30d262ef37128d508c1697809374da92700884f8998c2fdfce787ac43ea3ce1d104c176586895569e822acd4fd9aac446f07008ae484f3cf651f317b095ed53dfed390bacb9196abc2ca11f80159477689b37a3e2ab086121de585de54669e4c5538e28539dde74e13ee67e9683210bd214665d72c0a38ddb1e7d788e8f53494e980540be0d0e53810f988a4ee3e76040ea77a7a93a0005c03a3af7d9b5cef92cdeb695208b6a73868259d4a27ea99c5b979b8453fab9fb6433fa80b18c7ccb89b91d71688648d85417779b61d5069ab018e65748462aa99eb62f0738efed8f8f47657c911f9b7581760f57257ee6c3b594555981dde23a534abf3c9cdbb34e7528b9d110d9d380898ab8fd43fc273c6bee9f162369eb60cee21c14f0fb6a2834a2014ab1d7baf95a97a4b04352eb888699c2feb9bb208b638aeb7d87cce6935465669d2a6a4a7cb21ee4b2013b001077c2536a2d93f717ef17a4a4084172a73ad818bd0aed021c464e5926fef1c0f96f383ed8895a1d45b5067048ce2479af1b2c2f236e39a845055ff31384fc71abab1362d20442f12cd34e4b05d38160084d14f08dbd10ce2049cf92d5b0fd67cde9d3c6488754424315055f86310016427b9cd11f71187c84a4e228a93eac1082fc15c405e1ae2a9ebd9c194691c3b0af8203b34cd7d9def76bea31c3a6f0947263ca4281e86dfbfcc9d946dbe164b7961e1705bf5910a27777735ceb9d01a335d3ba21b6e9984d8c0ea62ee6b46f84407675702361b6fe7fcdcd559ec5be24c6d44dd95f64c690c5cb960b9e05a3757450ce3fac04fe3fa847be281b36b1f246c8280c75043df96e61b63c2346b664a691172cb9e6c81bd12d179993adba9e54e6a88f6a52474608483ee049b7a4aff9ce79e727bbf31087f53c3758289aef24e5a40ef7eee4ddd7a133a98064cf7b2c42af1101955164c7e15656dce6cf23090a2a0496f9d35410425193551dfab9857fc52c3cb30c4785d6fa6781bd4daac2895f9c925176dea1ec695fb546d612ff132e4e9371798973bd112a3ad2394a640adb1754f199659f78525742eba53bcaa706880f866a5eb8d4181eac8a5f604389b020ca8215233a84b586a0d05cb805b9350506a6a634a7d18e18bd46c0534b6f93e8d15e2212ffbb474fe732b3551dd8dcbfe1a4ad4b55acf4b66f1276d14136846dc2ab168c9e71ca3fae7562d6bb64bf5f9abdc0bcfcaa7cc636f214455094304aef06c9e770994f1752387204275ca1ddf7292d5c88818fe562c453e9570d13b6b131c9241967b96f7f7c07e5701b7678c8ad4421eed405d84992f4a5b59320710beed5656493357c74c85f332b196829ecc9561640adaa80cf63ed0b4614c9a79112c6ff1dffcc8540371fb7db87431ebffc81960301e7e52861878ff91eb2c7b3fbc584b76062bee2ba3f15b121ec210c9dc23dcde1b3154f2c1bbb360fb542ca27bbe401c2741309bb67616d70475c629f5896b2eb7c47cdbbe0f3f655d5cc386585a2317e3d9d8bcd9ef933bcf5b567f43b705fe0eb782d6fd12df2ac858754ca98c3424625c5fad8cb9159374f91b86b00751c5d468f5cdd238c6f0eeaff02e5ba08a969e95e7e219032d4fb4fb55e85e66d02d6501b52558e94f07a9397a049ee32cf6485bd8023c303e32b601365001309b5c915ee65b1863602a04f3c8f16cf079a3f9ce098b4e580c13fd9cebbb9855b3a95ab55c4bbcfecd52ef6e3b1ee32ea1f3085c0dfb4e2db2e55bd9093368fe4eccfce75d886a20d1796352b122f4a2893ebea1301f4ae7c1feb3e52a475f1c7abff7d1d3c2f93f31a50050d4ae22faa17e23fcf05ad51e07ab351bb36f16e59ccee445c02f2c533f5a8ed47e2d7f3d8ea438be1ecc8f85b7d900cfc73c24efe5584532b6f084b82e8cd27e170b4412e1b4659ded789adbf540809370a3f69506cb20860ddd473986e097c041061276495118a561e5f4433e4038150b8a883b5068dfc47d6770eaa1b3c676e55cd27c31d53927b7ba5997a09aea85b12a2ebf3210e4963573f091d27dffe6ca80ec9bd7a76c93d0af5200b236d9aed99dd5ceb5ffd7c0a456220126e574be8747e624e2268699c75e242020165c1f0eaf13993fc946f263b64d5f2c32f678bd87bfb3495595cc2f5d29f1a8b262ba67a54e605d17690263501f75ee0037dc27d991e99656a12b3b1647301ab42caa55c1156d169f3e86bfa9a4a585ba1a47285ef9c7facf7912efb082fe5ded7fa79f0d55b649b131d1a2ecd8d14bb36110f7dfd12e98c49d8af54cb8964c9b0940840860e931f92efca95793dce8908160f576e5965e0c0a3a26a7de738a21d33e374248ce8b688830f9fe24ae945be5917d3292cf0040b4b201758187aeabaf62b8a589dc1b1caef5657fc0900941287a9ec2287e5ef21f084a9b7a4a6dadef02aaf6a44a4c49562a99d7001e02e0f0a94a079035eed72267d47fa1fae6a01ed29b71458bf78d9a6b2d16a38d21788d66cd156f2366f65c72e3e98af014e5fed656eeaab499c5dd17e5623214462c768a5475413fdbbe4480fe097c9a5c98ef03ac4e2796e210c44673e001d50d4b6eef595988379f4cb166208c8d4a96ba32782a033676c7cb8472487ab712a8e95a2ddea02aee656bdba407d163ef94d608d065caa38783f154e880c6173a7e8bad0c4cc922048824777e297810f3223e12d58a8c1cd173591c51e89e800a0309e79618a1eb6e133a54a385881d1446fddc11d50f829cb6ac44830e3e1a32a19adbf3da914b967b3031d8363895b55ae96f27a691a3a3b581ba31d78fff30aea611c2858212b346dc060d9b48fff440268314803e0733e6da6fa388804f6200eb4b906536ecb06b91c52943c8d39a5ca21e49dd7934cc22c8e3ba3d2021c386597cd9cfbd98ce03b0f7e9462dd3382df7d7885e8a882585e90338266bd37befccf023a80e470dae59c7cb05167df66a7f18e7ad9f526413299ed0fba845d12e7c713295172877cee5c8c3a8f7dccc13e8aed7b5a651f4e07990dfb22b36a55fd70f3acbce3833c7fad10cd5ecfa5d1976629ea2af9392c0227bf79ee93a97b1a62ca5ab5becd12a261500ab9ad509dc85d603be8f83304467fb37040cf3126a58619f2923feab2e9763e2bf0702fa1602062398a12b2f0771fbc21903f0ca2a06e47eae6a482e96520f45f08620f12923d2d1a2ec6a03d0dd7bf0386a07473788c59afe9935734a08918cf99baf858e9efc726837bceeba99aa3f85e128b4e86b665e2037e7953ade885ef52ab30054a2beb5b2b2bd712d10461dbbb7c85f154884500dd75248e867b539199048c1cf070f3c5a6f9e0e6d620c9b82a6693ab7c7f2546e2cc733849e56b96ae07cbd9ff1c5f34c8ce0c1e573c34fa0fe134df4758f919ffbe186019b9317894e52f05028eaf72cd5b00595ed452823b105da41fba411e002041be9738169bec02fbf0872fd6759fb1e103d3ea1fd3b95bbb1f0d0c1f5813461de670fefb188d1b6427a6f71fe51282995fd0eec2203e56790b4f7b24161c91b20ad2aa4ad81c4415a285bd3cdb72ba7571ddc41f52edec69a4e2424fe0b912a1b036d2d5c25774988a70c4906a22aab6e1dee335c24a30bccc397ddb109f6a2afecb503e48b9f3d634b611c2cb2e9d9b6951cf5c358643d4c52351d4057a828cd0ee3e0b4ea167973e495c7bd8d026c1dd0b5a0a541636480bc17d87f4e0fa38b62f706b93eb08b53ad02e583a2feee4032119fa62d027188e51712acdf25274fa5421925fd57d06db061c347eebd5052296dee2ada0e94f016d8bb51d4b2b858141c563dfd65b120baa9331efc70012522530651bca6530fee63978e2cf17f6eb3e034a4a2d84d9d3ce48c2bac6c8d558879bb1bfadb95bd7d1e18361c7e5ade4e96add3bd2d80af07a9c192e14ee769555ea59980a3f5fc81e5a7276492babc636072d58118b031ccba0f47907ab318fcd84213c575205ca379ff9c069e9c2d744749dc8d1ea5eb48d456a2b80d4fb2e45b5e14b6e23aaa3390299bd96b1481998ded9dd8a793883298ff81a9e4c9db2517c4a26b6d5f5f2b82eb60e9be3005a2f264aa38cd6b371b8dc84875a2af76253149a5a99c2a7ba4d087052bc39798cf8314362bdf0da1e35a0c47a8d745822f0a8a1b65034adea3a4210b81ff5ba1e69e523bb8a42b4b239744a143b4f84d19130ece3a1de8dcc00db9c99d70be5419077e7f7d94419be137ba6b1992aceeebfb3f22dfa802c4f0a2feeaa084276a4b2e92793a3cd6d4cdcc81e8ebbfea80de8feac03051becf7c2429d32bdf4f4138eb3d2d25f44fbc5c4ad09c485f008200991baf8d71c77a91f4f0b16d24bfb006198cb6fa251f3ff81ea49d382b32d6378ce29d69ab6666fb18bb8feae485f5ca165551342327ae7b5e6225c0009f1eaa1ff52d0f569d869a12a857badd31c2e95664d37060272c2f99021b4ababb6e1d1819f7864439dfea6181515f917d7a36bf6bad24bf0022419028a5561f79ef9b6ad628883ad47afad06b74ac2117d6d6e9dc3f90a7f39b269a634c0fac54fa57c2858f82f6105d6c8a667f0cebce7e4daa9551c114946079ceabde02327b0dae4765bb85d36f68865b502e51a5d73f26cf93a989d793aa983bca22d85b66415fd4c47afdc00688ee8aa8ee8e7f6daf3e1333182df5e15fc92c6634beac5d379e105353abe95cd94b9dd78f8e9053a6f22c5eee753d9555d7f3ca9703104e0210f37b613faf14693f2a0a1b3421a3346a15925987b415700319871a1fbe3886264a4bbe26a0c8ce684baab298005811153fa43e31228592ab453393112ab70431b072ed3a879258894417e07dcf551b973a984ff58447d052f625616bdc68d2b3a74ced1569ca163a74ddc92b6a9cc0e56db5f3c68f2b168569ba00180dfa373205a168dd8e6186ee12a023939ca86a262b7ec4ca44092fb5c9547036d1fd5217778d1e18c46e38ca4794aa4200b34f195bbbd403604408f20f236b8bad7f5d3398b902c9d746e0e36a214c428ef08705c1c5c94ab8e53d95456eccb7b4df8b9861572c90afcf7ee08a1b18a06935dce20516e0d4c96122ebc7fed04cf0e38121a9c58d46492bf44a313a60dbde7ccbed3878b988e214c36acd5a1423d1cd17d8aeaf85701d422fe80d817696677f3e9c983015ffea16e7272b643067afefc80ecd47dd36330511f7e913fe6dc85b928771f9eb9537e66cb314483a95e20c18236355fa923604083e5cbf7ec4980cd4d45bce16371599fa07bc670068a07d850a41040175faf19712f6c3abb2936a8954e6fea6bb9524526bd40b38a89219f6d7f4256f50822896b979ce7942af93fbd9c68b6458471a24886f3c8a04120c9d822f96d37070fd5526307a411080d176710fd314b2857249b7e8ed647702098d32d106383873d0bf1a991bf7fd1259fbc42db23ead04577baa69f581aeaa0cda554863284f2d2f8c48b2fedff9cb6c5d664d023c2851e3e3b4dd57a6e157a3fd23a743dfb9fe8a98a14f9d015ae39dc94e595f9de7a307e146fdaaec07e6c015e8340d7f51b6868d91c95f706fc43357aad49fd9fd760d4f2d3cdf40277979581078712c3899d866329875a430ec3f1a404b6700c34b6a2f5c9a76c04f4a15b81c0627e52e7a25f5173a55e0d205bb202e17b7bd2707a95f2a2eb3af7cca45f34eb304e6fc861fd2546b0b2633c618c93a8c795ecbda77732599f22265210ebbbd9c1a5b3396007371a90466af10dcac9a63e6ffd64a79d6574726fda302c22d39c5f6bf906e754833678a4936b5c9538b08f51cc3c821bea7bbfb3cd7658d5695882e50af651c0804597cbee291df898788734929d3cb54cf932cac041adedbd380787b975113d8aa653e5002e3d7718047b93cb676ba415eb764eb60916bd1695463ea62cbe89a29a76c36d157305b5ce41d994e296d7a3c0fa5ffc3e25ebc96a8eea8f6c116d692a0714ae730d6a3643ff7c5e4bf6ae59615b9c639cfadbb042314188af5f023cfd8e1b1d11b4db7fea19018b5fb9948b14453f07d155905f72af38d47c46f50bba8d33869c27f15a3ed686f7c5eead632b2b4c6b18531d4a1cdf5421a5ffcdce3affcf98bb9ec1050b26ca4c25fed72bce0264fd9cb8c1907a7a9322c13e0c23542782c61463009a89cc18c9af3190778821b09295d162fe6f8d5fafa863dad6b2c3dce2704e011f77a2926d45b5d2ab5dbaf071137ae030856244565fbac03431af2486fc0de0423fe7c7bf815b644fa61205371527f2b9ff3898a7958b9f589adf19639a5ed498df42938a3a5233ea903f1d9f16caf0f0c56248ce591ccd408eea487abf6e3dea0e14ebeb316078f65ab5ac9233f1195ff3ee81535f32d46dcdc922111fb18d5db4f8e48906aba74a6dbda0729eab89aa2d1741417e7695f8b41d2364802d6ae85b5994e6b86cf1c3b0043e47d264657a784308944c7a12ad941f6a5610b77956504821a6a32e36a2a559855cc2a14c85d582e3f737a4966a9d11e6158a6d22ce0ada2af9258ef2f239086d4cf7d6a0aee93b0008e7e1f634eb0c887dad4fa2930a216feaf393a122ba4c59604270fe5dd6fd1bd52d032c17d47f9b3d615645217ba1dd793ea1ce26005ddce32c54a591929a3b5c87f937fae9a8ea24ee2bf4a4a28c1b106246641c50901ba552676e17222af71caa362b2eeaf344670bf8e2c9ecbd3e63fd141d57bae44a56aac385c064ef148b34dc953212f7053bcf145d2d99bd46d86db8c37adc4ebfe10ae362ee1bb52daab9d480ec70e5ed8238d82b7dcf67c3b4c6da6a6703c171610098bf7727799dc98f0dff00b12942cb6e002a4b636dcf536172379b62e56190639c02b5ea057301f64fe595801b1e3e7694cd1816a9d7054c94cd6ddd0378bf7e6400404b08c481c13147f4018af2b678c68524a4ab3aff2eafe3ee56b6f77079a3d2a989c3d2d3300ec253ac6d01a39912d422e06044e4963b105409969e9efe1a838d3189b133b0e3fdf087edd6be7a2ddb3fbbb15fbf2247cb69d8aeead1d2fd31c365b340df99d7529fc9de3dced79160b6f3e2b99b9b4833d1d5d0db62823bf274ca4162ce78be4cd055a2592611df11e815216c35464e3cba0283066a50385ce79dd4daf718b51fd0f7727171633dd899f32193f214f5ac4e0e344e7dadf6a88f8ef8c77e56039eabaadc163dbb3c4661072d8d76fca7896933a2a3caa7769c0436a066280f686fdd487f527e843836b096b07842171ac8847e05cdedbf1543979dab41f3b835ed2774c7b66fa0e85b66ea48e2b3859f8b7392e68faa282cd096c1cf4fa11d37876a17e6cc393a3964392066c416574fde7e26697f4c79a221cf0096272acf3c35ab0d131ad66a5fd61571508f4a568def5236c32990ae797b8a1baa340852bf6ef0dabca30457bc2ef2b0860b6c57b7516b393e244e3b386a574441c7dae74c46ac7de23f92d5d7e1c114a5aff9e5c1eed9ec4a85179f357203a270a5a8ec45ac69afb0087d2f1df9d6e0504c854e9daac88d34c2865bb5ad9f92eea783d5023e0391d6e3a4d9e353b615099baed36caf38f5d20aedd8581f924c9676081b173c8c2108b49a22a26b5687bea4377bc81344048d6579b103478446b80e9c301109835708900ca2269c75c553e550046aac3a631b06d7526cb3bf1b0d525516394ad190dbe8bdaa64562b928fed6967c1357fd4ef50bb138df23cc4af2d5440aaf1abee8368a72a3f81dc8e52d21cb9fb1d430508b870ce989bd6b881d61b5a5a639344e5e399fbc3d3ad2d289f3e7a073665719037db445c6f356aa78e260eeaf904ae2862315e634d38df4a99ed8173e55fbe1c002ec582291ea47cfbef7c6977b26f27bca606fb97697df51fcacdc56dd66df757241c001380c9ad33a898326b78bf69dd7a84c0603dac0e4c13597de85d4e4e8adb5f30a8e04496d8bc27289214d7919c5d3b3d65ab3e1176ee4ae7c876ebc50a93630d02a1ad99ca1249983769386f10754512d457ad3f2694cc44c4d6e5119cb5e9218c5c46d3010a52f9e046167e947620bee9d8e5842b59f0647fef3c386f6a66aeae5390bf68b494b99e803722948fe4594d3f6eba638ab2c882b1f8955e0652a6eb474d01f4374d1c1a0b93408b186cc4e06500e05a6433f9880f38e2e92b775ddedf09a36515b8cb20b5afe0afd1c5f14219203516c7bbb71eb28de27c34e48287c17cc5b2cb73801702c50b77ba3d9f598d33a299cc9a6a9ad5a6b56df34ce04bd858a13ee8a4df9efc44d4fb2f00ad3d339dcdc0f1e2d558c627bdf2f98993a63ca870793436a62a5fd848542f8a88a112ad5c1bf1224837df76443c764faf698ece6d95b3ec9cf720fe16cfe638ce13da7ddcee27f7590da56d41f956995250e921de607ec848cee53b566ed8a0c393e33a9e7bdc6e82308a833ec6c007a0e038098af02b8e152d66c351f3a1e1e9d822d7a3e08cfd1e3d2ff795aafc2c996f142cb246c27e9d33202b844ba24bf5d43c0449b7c1d2028c9225055a68e6c672abc07a0d8bc87cbf49f282fc92fda4509dc15e144a73d1696b746262ae492a3eb627efcee49a131c00f8736c78b0c012bf5bdf024acdde8f7995a2926e09a6937d1866608305c7b3916dd62ee791c905cca08235384d6a2f9dc08a288e34b258fb839b0f35f8389f8b8223f0185a490392c378341d6ff323124ce9588674b01c5b6973629002bb22beef27bebb67ad2fe92ac581d62273061594b70143ea00af9ed45d2845d70e6748550c258b86281750c16929edd44ee2d024151b51ed6531a186d5e81f44681fb05142694ca411895b935fab4a2f5c3443d53d126117e4102fe1625abac37d4035edfba23994aa72434f58dcdaba82d5f074a6a1fcaaac3a96411584ac189a2aa734f6deb09b3b11cc6b1a2f8a5943fdd7711155274d20981f207efc73e96b54897e29963e8790420ac6fab39e827605ffcd5368a00b6905bb9706fc6f936fc3610800e6149622e9d5b47c866afc9a46462404d890b938352fb8f56f6a8cc3ac91b2b2e55e3d86a8dbb7d888570d8e44ee090a3b29615bd1ccd63c81ae85247c70f8a09dc007ac02091c29521ea6b0e2fbe94f04a23000a0efd06e10632c6f87a92f7ce7f5f96827ef8955b22e7522d16f2f7359310f8ca6e6aeb9a5fc75c8c67f3a9cbd5192fff150eada6a9d2c9b75f897d19daa8ea79627ada0a23b7513f4e40f78448b8af073dd89284b1a8b9f2d30b00f437739eb28fe255df6fc9e085590515ec9112eef88ccf53352f15ab6aa2d6de2f41fcc1322230d50a2560339dce5f40a74f4cca7ea1288bddfa7de4b75c2dc8de8baf75e2f14eea64dc5ba28e1d42760e4d9242413ac12752663a5a278b046d651dcb0a1df1f100a22d624b3b38d0686733c052b797541d18860ce2028dea013c2384763de7b9de49dc4adb9ae1f12b3c395a8d5e05bc4226483fd548cea98013c419c4716fbdb89853264ab7d493c679b5605490a6350e7107eb6dd8b836bbf522436c50dc713259cf0dcb477e4964dc2a6785cb88b60e6d4720c92b4a05ecb16fe4ac34cc2b934af7d854ceb15f159acdd96b93746bc4a4aac6296cb3b861fa1c97b2aa531d26647be9dbf7db8d83b2826a07a291ddeca0dd2421ab6f32a090c99611dca7c15853b05e7ee8889d9b8d9e13f8b49d27f5b742aa0aed3dcc75d3a7cd54ffca10a33b4a1c0b05702a1ce7f953734edcf97afd4273c1e86394cb916a8f0977665981e5cab2444587894b21afb38f59adee62ff362505e7b56a9cc57b03e111520ec69843788e323be064caf0f0131d825869a01c17711c4678a6bec8a90a2f71249cc573231e4eec95aca6a872c010d9fbc9a9737293ab8a92e3f364660e878196db8c92716e52530c0ca64f4b40f4fb4470fcbfb9e5136b8f21f7dabfb6f784a548cf95a9ec583c985fc8c0b24e33ada091780a0f17a8a5c2bb35c523c73512ef0401b90ec5bd1bb0378e603e3c518b122f527ae14b5be12a459c7e3ed53f5ae026657ca277160ab838a500163ee492233be7f5079573e035b9758095357da31c35393a9415ec53f54165ad4b573b82676e7f21a1469b530f86310580423bd74dfe18a448b205ed790fe6cd9c3054e6e71ba4d00944d4b8bf78607ac0be6fc7e2f622e4ef3a3feca91cc850f14332fc0174f98fd920c24a402538b141304aa45ae4c7a4bbc7a34bbfeaf30183fe7482c309745e2e8ced8a9c66bd8d88f397f8e7a3c530ae373daec53be6237defcedae88c747acb772fa76a38299898eeaa020221e62c033df058c099d77e0eb6051bd60f1f6ef58775a1d171df901c501206c79c49aa866f660ea854e1b0ebbcda51c652829777e4b89749fe280c171a8e3d90b3cdd6d5baace1edc2731e15cc906995bf56e3f4b8a83176b2d63f13a5c20107a3c3acb3ba78fa0952ee3eef2afaa003c1e1fc2f04d44df1cef9eb3459d53bef0b8635f7b680be5cac976285bfe4782aa3e9bf270a2cbd15663b918a7c6f3940c56d35750bc4317eb85d4f8be13bf64015b5a7a2370b2ebcbec42d9b55f76f7ae9704ce5bcfb218987ea1ff4888876561e5c2f87c923996a63f49b076f34f92a4edc03df5bbb3785b3522f0e7e154f17bf070f8e67e048dcedf9eb93a7d2a61d61e87899720571e12bf2b7ccabcc9e2a05b51ae75cb837238275c354d84211539052775d41f212028f707c02a92bf91cb311bf3cdd78e65ad1a9630aa54acdadae284bf4f69467c6102ac56d878d6de1b81be1dfbb55d246731619547f83af9e537ea6e2594e27a4752f18376a3e26e9664118351a371c54725e37b3c26c76996a8128c924928389922ea4fe150939c2994ae9d12291cb96bfb1f240c3ce850c4d3b2984847c65c2f245d5af5fc47667187e446be13f887040738b9a6b179d804236fb3904d5e28782ba46dc43da7b2f5648ae8e6a1ea38024f45586ccc5150c10af8d3f6a8820bbd0bc6f1cf01762041a6d44e
+
+# Valid signature XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg = ebcc54f09738db1c5a24e315a7280d4cd8c266ee1024d3b32851fc49b7ce05c2a43eca9bb7d584635eb2ed538d86d773f4bcb87a3df6f595bd1e5b4c8b03a70c7bdea8f441058b133dda4f409f099a9b68b6dfe96de5ac6869ad5aaa9cc8630201c8df17f75202ee3069e5f912a88e0539fb0b04d487949a1f5a4ae192e18c24f1fe24dce1ba1c00c3bcf703a547f336594f87d1d2ca98a9096d4da24725601b1752e7d7f1986d9ea7ebc4caf50169065d05997ea6dc1e6937c1d7aad19682b10b56f8ac4c148122f9e906ac21aa0c3237b41f362cd869e9d25216c466f4d2a885296bcae2f02ea3
+PublicKey = 040000044da2eadc44f6074409a26a94763a16c54a11fdaf30ac47c1034347bfe794faa66cc421c16b1812520afb172b46fe304ee0a24c046ac6c9cd55bc1f409d67784356c888e90faf52e030b0384ed42b9f865e0fbf4ce8bbce5f4b9453251fd63021516a2c37b2451c8cbdd9223e9b8a479ba0bba4fd98c7af4977411d1c5b8f242b
+Signature = 00000000000000cdc66644e6b2036493a6b9862fd1dd831a7cbe89881595a290773cb3a9109fb2a3e48e64efd67fa76d87d78dbbf31cae1cea9aefe4a92fba0a3c85fb2ed695a6947948be330e635b575afed1f1c0663fbc4077ff11f96133cdadd0c1b2a56b2c7f4a638cd423c9df05177e5ec0ae3fce296214fe3167be8019722d28d47610e14ac37e817c619affedb45458be53ea98b0e9d0497d4f24238a6c14dc34b14150312e60c6adb86fec2b9f91a28bf5c113f415dff010168106d5bad820fb13a9605848abcc8e792d42be478b17a25df54c80752417cc585c23263a5a07d7b6d01309b57f6d1b84c01d9c92225ee51bd8fc302924ba9912722cc6c03745d9deb8a20f1d94d0cc2cb481ccdc5e14e7b8731662f9b436286c201c75d7475ecb6a3d5737f37a99a8f0f81c2bdc9a4a64980d4a7c6fcbf96177034a7e676c39eec70cb5cf68af0d06741b215ce5e42133a5fb4298478b49356a2370130c3a4805e568353fb8ffbce7b5bb8d26619181350fc14061b4aa3987121d88eb9cb7883be879409a7eb4d22b7dfcb7e8fff459191dff018b1a51edd7638ad30350bc7e3c53b0869c0b8a8e72cc4628f8a780d008b8d51ae1c8b6ecef9781a2dc18f3092d8ad8441443a5dc8be8b61821ce17ffcda9b1fa7ebb80fa387af05de0066ea7b89cc241493f44314decbf8e37de6e85d129f5f16bde1e652b4f9c83e08db4df42c63af0e99d3cae0a317a42438e470b9364bab1529a2e4244266215ece38c300f742d51801c1f916cf0bd25324d17cdcc624b88a269733f95c3e298c5b9dfcf8e52fe754b3fec1b962bf63d94010e3365158a03031bcda14f4510f6b9da67539e845410f054d7bcb27583971f6477914d1596a6ff69d57f32ba81579aae44447e4edd538d69a25ddff1645948e88f8bc5a2bb1ca7324de52c7c6834bb0b3e00e6e62451d00dc49658a54dc751244c9aeff57c64968b8cf469da169604739b82925802dbf242b26e6cada879cf05f822ffe0b275d9f9dae873fa8d47caccf9081d1a6124987bd646f0a595ffb2021606b4815f391b28f69d7aebef515cb4ec4a9938566c5e6daac2cee5b52d7712203238f5f2eeb1d6acbabe74341cae9789f23034e15bb55bf1af6064b01d328cb910650f1dff9c619eacea55dabc611c996ea80628d4bfd5da7af249348648c74f9332cf8254e4a392a4f5728a3476d26c0c85a699f02b7019dc4d3d7d07edc1d045b16c965e58fdb1a44b6b293917d09283985ec91eac80868c58c9190f9bad8f1cb71bcaf6d694878cc4599acb63cc7a8a3c0b899ca476a6e66b08ce3d6ad044494866136d15edbd457c510ff3279dd65c524e6338b386921d0cddb77fc295eeb76db626f91fb52b9f498e787eddae3e359120a31c9d8c0c7c2b110c9cc67ea361e8c8755bb4255b7f9b25fbb3f8b13a03a28a590987cd850a42558fb1f36a1c459a34815c14b25f2b18e543a6f87f9b68ceb11f68312ea345ec396dcfe7a856a3c0b9dd58021e8acc85dd87bc2cb599b698f933f10205f41288e751ac6914da8f5d8e623c403ab73f2fd454760050bc491de3cf1cd05f89d8ff1099d3a337e0b72593828bfaac912a3b3373233a64807e325e6993feec72525b58edd9fe19cf0c7db1ed0a9e01e00be38d6ee57dcfc76d5c79d5957a4e7cb0e7d5340e6b439e09ccbd3039e3e04cc650246c65fd4e8a11847098479035e37b0f7d56dec38b4e27094c20c4d8fe69753c7894c95c5e2e94a05fa08897e50ebf363f9ed388ac0448d610f7c328c109c674c4896fad2a2e908b601d56393bfb6f82d3300a8ce3fe3e8462afb6e28b14a33126461ec379161bf8d0c80c6859c640dd822837cdbbaa5bb9a12fa87bb1c5fe494062e7c4a774165968b00800e3c7d5dab5f509d4c2b5ba8dde9cae5c45ecf2f65c09ec03a4343d008c6207b424210d6e5e524edc8822050892e0723b401de0c9c96aa6e00028585b549733fcea2dbe53a29e9b05e7efcb0e0c4168248a1c8cc814e5fd5f089ad0f6ea42bd59da3715ed7bb3e359346df81ef27e22ac528c4f28517cffb218a746a63f725b2dd898534ff0619f34f563d5d0acfdb64087775a9548b7a92af8c440bf3f1620e05c0e922fd162ddb7ec2f7a3e3c00958a6c9446eef2efa39fca109e0542c7f4884337c2fd6f1519db0f1e6f55a3e3c0912ec95c95597968cd5cba15d37c1a515e5171df315f86dd7fce85b7095993455435cbf1b7859ed2f7ed00e1b7c51b03f694cc4385ead00f9866f4b5be6eaf89857061bce00e7c3d6cc4dcb819975723afa241e5c4ddcb1dc85f1a254541ed44c50bf18a3fcc5cced4bc118d9c8c16064bc75e2527350b5a387e8c7da3fba6eb2566c2aee9a6d0838dc25a471c827a0327718c4627c49dbaca0f758b0b55d65d45dbdc9f1357b5d7cd924d0b87d98a36309937bea0654de1f004b502e4215f64c7154605b1541640661436c1b322ea9c3a1dec3b071cf1777c83471459312eec907c25e8bb01dcfee7b5517799e9ba7045d71b751803355ed1312e36e8186293a64cbb6004f70420f61675921436fbc4daf8eece0553d1ff1657c8b1d7010b13451fa76f15041763a2ad5b03399166a195b6cde5dadefe4780c4166e19d5cf32fee12a931af0559e2d7b6568188eedf073f46c4ee305c362ab853680ab411e3712479c0f569305175aad6cb2d27bb23a4d7afe59779299a2de424b5404efa0d989c172f24414a1f4050d09c6adeba8391f434a9e5cb9e7673fbdac88842c80f975e3d0682d802880da43830091cdead07c8a229f8c36be7fef8ab5f327011d09c0871ef9621f33ec2d657792090c9b2e010b1fe831bd21eb9ca3b1ec306c8850dda66ba288bd04f75711cb35438262e52bcc1b2dfccf0ee901a489626187a53736dcb6f369ae0d62630f0be0e89dd2c99632f0a16c1cf8e757d3b349782750823723cc9b8f2dad9476c66b84cd0b0a3757b2d5c19cfe22909a2d5bee3f35ccedacff6ac84c6f6a6103368a896ba0b0dfc909906fc4db3308d533edeba3e41785202d6130a404abb550a70734247822837bb046bd3606322059d5dcfd64636ea400db05709df6dca7e53ee4de7a72d7157a8fd5b510b10b5491c96cd9f8335c9d29bd26d3eb85bee8607fd6e225dbe921148eef4f2dcffbf3df9c23cad3c9d3a844b5dc50e508e7c5467bde4bddbb9febf9b6893c5af177c63f233f26861b892f087f1a3e1e8dcf4c63c96208d58e15be0a4c97372eccdf9bbe5d2e6a8453ef8b5becd3e9d80ea178da41b71505a1e061f62a2fce5b98d7b3f0e60df40af718184fe95799b7d223647481fdc8e935f5b6e5194c664ec5ce511fdc0cf7f2b4698f4a8ff28898e22fd065a304c0a3d87f22fb9d00229837ddde77ec139e5a5c1d9c980418108218475cadbe8c6c1d12e678a386066cc8500694f3a4d653c3795bca21e0002af3001b1102a265c9e0542547a6a9551534741c106833fb06e9001dfa7f1477c5e953cfff0b9d5cc62ccd1cc3e31cfa6e0f793140745acc352182eb8f8ceefe3d894174dbc5b84f18d509c4efd67cf7b54ee14aeb19fe250a0d528b8b3fc45be15df83e703ffedf8842374c769e20f3cc726ef72fe638209901a850e247de81dd701d3f0a3015019094e4efdb93c88501c67483523f5e6ad3cffd3aeff92a32046bc626cfb770f4b4aa96274c874a04f3d3ada8840b347c0d654523f2429b1dfc3c4a4b248a629a6d2f3c54b9f9c378bb78f3a893e7976a17a1324478e0f4afe4a844658556fb0e0bb43f4ec40a487fc2b81cda868addbfc90a01633d14b37ad7a538fe8754563ebbf1ffe78fa42f19d7c3000b8b5dbf07da1a1ea8986871d2b0782a758f08a8ccad827f4a727dceec9a8f08c00b3a7483d2d4b1548a337dacb584a00e2fa48a39b98057b217cfcc8c336fcdd1a0fa64fbe2616ccb4b30bed4367d5be10f0214e957f49dffbd748643dff0bff82b36be9e4a595087370a017892f199d1771ad03f47b812364db98e3d4f903c9d2a565bb4d34fdb663c2c998152f8c24077c5fac831f44b2ab992517839a3d02504fced82fe1518c7cecc14339f63789533914fa8b22900fa49d9e09c5fab76613a3c3bfc4a493919077f511daa4349186019878bf861ec87b5dec2da1fbcd27eebf73c561273bbbe7566cc569581eba345b8cafad9af39d09101c575af01206a41cea5d274ec2f38dd4b900d1ad52b1a76e0fcb369757efacb11765c50f00de5577c074874e30e79081069c465d69d14723346ed695bcf7c0dd2c91da97e52c11693009ca8a0495f5b266af0e2f6e4cc2cb23347d9f1a3bfbb6d88ed4d978f9e1ee3ca3cd2808fd3ba8f317741bd26694ee77564cf113f72910f5fd4cac8a95012d201265c1a22cd65b35aa8698e7882c698e12af6ee2c361a54e37ce61a37933638621acf93cd5e5b1307b971fd63419751560bae2875b01b4d81e208e4312ba84abdddc9be1c2810fd9a45adcdbfc6b4d6f05b3c96c1f6740b397d94e6c242799b4a5ec897c923522da8f3a4e3f9f570736dfcc94c254caa40ae78ff890852903602fbe3445c5d639e3e6eb60b636d026ef69d77b9ded38578ac8e6961e518c3545bd35733ff292d11c829ae62f5410b05a5bea7ce471adf17414997b458909431175d4eed27d9185a52dcfbabfd751571c4e771555f813e000dad6e2d2ba678de33f6358f9967519e2f6b81314b20cf0f2bd12f4748fadd8477841c8f4853d048428c0772c8fc54bc367ca8c66e7cafc184b47e90ff39b94a47a359af3605478677ce76151821a302c050a6d3e3c888265addd47358a9e434a2cab093311968536074b4f7040536c0d8a1c16f416749725b0c0d0a6d33b33183bca00a819439490d2b8b2dc350ede67cf7f9474bbae433d62c01c7368286dfe23c56de7d6f5e2a6d40bff1f5fba287d1657079caa155fe272f05e59be52f40dadc6a04520b1a3f2f725ebc870b3709776e1c2e90ea07c3d0fc649605741875b30f459ce5c4f1a630546985bd601986fabe7a50855f0a2138b0f27e9077f82edcb7a38edd8e08f3d5cea07ea16ad5a94ceedaeef4beea3a5b7777d617adf34e6cc806b5ae19b89c0ea05775ebfa3caf3fc9a66f1cb4a6c3d8a586f6c6b6d9139c3383d4eb71176c74032768459f4f14e55af18c92950dcc9ba8706f04a4ad6c5bd95c4c7d2e1001be6106dcedb231a6fb45edf99c48b245a745081680adf530325cd7725f6eed745a62e0d72e396387ad08916dd6ba2cb29e0e6e19e3d0b0db15626ed6210d9f73dc8d6f64ccdb038036b942d4bdb3aa184411a8eb5a3e8453adf0486cc543affb2aaf649a8acf3fcdaddd3af1670563bf41941434612b9bcf87bbecdb2cfc11a992aefca95bf3433413f28ed7b7094307d9a1ccfc2e0c80f29a5f8680230ce157adc8a5540d705a1481909b1f808131410eb2af9ec49baa47360f64ed5094caa7f6d99ef6e824512cdba288088064ce19998ce5d04704b7815a923a797fe82d054f27052a73214a9402d325528564193ad158f426cefd8ee672684ecca6402025b023c27e454ab2d1d877080ef8491d6653b93e872472c0a0d78ff7c5d2c24c9e22c52caa3544fa67d226f75305fb26306c0334fa76698ebe35eac1589e012b5b327cd27ba2d54ae4b3d10ac714efd3265a99f7857d3e06a150ff914af05e9ec559bf875e3852fdc2476bae0f16924a08a0d795e2b299b18d80de1d0623985279df55003b0b39f095a54cf7c59acb0e5c4c5d8c3f2d3504ab35ed028153a4fcf7b35edf6a14bc5dce6cf440a0abf6bae3fab6b2690ba95b57a3e3a7c11841948a3563abbbed3f4231f7aee56a9edb1b7fa00e2fdcacee53ef5e0518b1a64b8c644c7e7d4160772b9818a716ac51daa51b40b8d4c757e711f9a5780c3ddd2eb245d52a10b919620135164eda0077d1b2fc77121b24015a482448cb15bc2c8884bdb021a546f990fdb7221f0b2553cde17fa3625a923af7ca9e7775bd4f3547e0db288a42a57c9968dbfdeae5f50794a2b83ae5a38bdd35c5f0464c956ce15fee79bd78c3f6fe1b78e6f93197b8b81e47b5e61439243fe4f49fa4594fbe7365888658b66ba5658e9a85d012f4a2e8fa23731b049f060d7a3ffba8d3a76ca428fcfe8680ca41c85519977754564b4a8b8877750d35057999a32ce4b49615324ea341a550d1a959545de870c4346276131bbb34bffa2a021ce628d2e0ba681953ae1e7f3d5be3503a652e101b9ef92c0f111bb66ca48408dab0279f890595b66f131c3a66857a32c6d79f193f046f8d23a40fb7d14fd0abd3f9861d17a301467b2bbdbc9658c548f27f85dce47cf37694544f6bcbe9d744a629941bd4127931a1cc0ce2a45fa112232b41e44cd51e81a0142ab607acde2c46f22c33869573ca278f1735841cbbc6d0a33b0b297bb5e2f1b7ac428a2702fb22c9c25b428542775751e1584a23158b762ffaa2b1222466ed67fe3cdcb15901695f538104f465d3f80a5b02602db226e33ff90a6e98f886fafa2b0408cacf4d9f3c60bed7e9ca65e4ed471bef062fd05ea0af0ce71d44a4669f0d7a06612d08da467de5951283b827fd0c8f89ec447c17acfa1c8143ec95c3a3528ae5650233c3b1d456874ade0f5bc992f866d169d94db1bd9f6e5be75173d39dd8fb6d16d423b1d176987d95aa3eefc22fc405a396185eecb33be9bb5a268a4431f7c65a8282113e1622f5387f0947f48dfb040b4ccdfed0e05ed8bf8953691feab906c8c485fb7f9453fcd2e83b46e63fd303b9cbe5e360260abe08e1ea80180c422fe9c5b7ad583e34f0346a8f0ec60fe2420220acbd1580adf5dad00ca740aa9cd6d13bc8f9411e3ca7d8ca2f7f433917a2e695a3a252549eb46581a5eafa8a7dbb0ba52c1ebc13c27eada465e5b7d2ee4f903c405514e3a1a743870e375e7ffd0cd7f8d363372fe7a7ced99e81fc6d8241369332aff8618a4b5dd93c78ef161889aefc9f00bab636fdbdaacbb346065473357eefcc22ad80fbb716319c09e6ca49eec1db4534ef843f4b5c074872ae0dd1cf40bd688aa50e7ede36714b4bc7bec58ba4cfc90bc426c3cabc5d61ab09af54356e63abbcc0f38051c5b5b2b6916f83ffa85c16be956a0c52a2e0aab4281774a6f07f51f07f8ac6e45fd09a74bc3c3d6dc90ae1a4d6e0e314a8ff0beac6754a831599d163e261783d6d6676493a49961759c8a1f2f4d75b1afd5b284fc17900506eaacbb55d2423d0681d3359b2d4f93568355669dc1ac1b4d448e4cbcf056dbf5bef853d5ab141c701563a59e92e0b8242735692e1d5c970c56c69c688e0432b3be7a978b04c66f4619f786c85f5e8c6973376fb71d517cd8d4490c8d29e531887dd12424f226b150edadd9ac9c3f4d9306a6e6cb1171dcdbefaf372334dac85a662328ce559c4efb712e89451dea0ea5e81f9c10df059f047dca3d492fac248b3f9d642ef2c88d8cfc9e08cad1526a19d31f48a19d8b85146d5c5c02414c676f2dd99b1c7fa5357a7e4fe6c2cdb8d56b3df4b162fc9ebf3c0878b377d6d1ec12a7bbda618ca8578ddbcfaaa732e6304e6c3ba0b3dbcc2dda4dd907ce7f54d2f08a9983ddbc569afee65ff285e6cccd897be6f8d00a09729c103b9a89a90530e99b02e872f0ec3890ab2c5da0fd2a1d1a2c8578268eb9f82d27afde19aa7fcc20061429c7c8b3df33507b114614abf5b13216556386d265bac1e31fe9b4d33065a7556124564b6ac833e2bbbf9754605882c46326dd06e5807653e05ff3c09afb90dd7f4f05a020d0940d4dc014a199a3a6265c9c73129b4160f010153b1674b1b44d409b53df6d5fa6d7c66cb6b0db3fb47ae3295ec8e1fbf2193c15701360d50991666b4f4d6fc2dbe177a19fc0c0bbd190e9004c95b0536a16bd242f92dfb39b073ccb85302cd25a882ab8af9fd03f88ddaf5be5fdc0978dedf93c20c44eeab0a6d5e80baefeeb5477c50593dd2ca201600187926c06305d16ab51020e152b6282309c1b7a1249655f6d795349334ed68596ed0b54f593b9e43bd3a1ccb6440a3bbed4575632b5abeb481b02b9f9212f72488673cce5a0e7126975f55ae6cc2b0fc6e9f369baba02ddb61ea3d141826537d3e6ecd3e49f8bb78d70e03bb3b4bdc05958e399e59d9a5f8b4ce20a36cbf6938a60386efbb80c6f091513eda66c4244356fe8d936da81ae24a0eb9ea73d2ad6e7fc3ce3d28de4bf5cf9880e360cc916229f7a099f7635e588de0a03e1d9f534ed0e690c36e860800919083081a58a8e09ab5353bd250184a768a97c6d3796726605dbdfab9d9f8f60489456400f5004ed5b217dae117ee78b1bc66aadd580c8e2d9eff3b1dd5f18416eb5ce35ebc005bca100398bdbc8af236f8c60193c035c98e4351b0e128cca88d1afa09683460f9c06c9c8c5b47b676a55de813d7bd1d33718bf5cc79056cc18951349037fdbcafbdb206c02a37d492991bd59c19c27dfff48406aa0d8aa6f7a95e006459db6c3a116d159fa8e503fa8e7af312081844003f5dc0e35eeb30969950e8a4d5efd581022977cc3aecbdfec4cda1359a344a9f49760e66f0d72060a87278404eec7d156a3080ccab95d7815f7a2db0dc825698fd614d58d58c3b5aa1d9cb02b139fb6f36d91c35eb0c063265ab6ff8ceecc21d2eee70ebb3333cd51e20729d73d82fd5ea57b290f868acdfc6068f92923bb9682fab5530404b744e8d6106c74cc97d5187387533d87a987bc1e58827de8b5c2cd3e42c76d471d3b5190e63672d7d2a363fdffa337160d3b3e864300848fd5a9f5182a27d4348d8300c7c4d7273afd38beedf77d99335a070cad4d3cc444166223c6134950684c88e3e9b075f6edcf2067971ac522620ec56d5e8870e90a4333ffc2fb99395c620217e08cc89f05d66e70ad9a31b63d2bf30e622e22a5409a5a87c1b4917be31217029dde5dc34ed751a9c55f31b8807a7ee45ff044edff3103d22a4c98c65467e79ef1afeb8899167220a2e3ceebe8a62aa2dd1e865596baff1645085bea4475b5f9e13cea212cdcffc8de0225e92e6c78c793ee0fa5e93ddba5360fcf127b8cb656221ca0e8082aa3c8085cbd5315a6fab768b45cd53936a5dc8596798f62897ecf17e5a1b4206118a5503a2bf5246bb52776b5d16ee7f1c105297f17172f884bb8b0b754a824eb2a8bf6b41b110423d995f98079983beb53fc3e54e4805d5f3c0f6ceefbc63075fbfe98ea46bb98b40162672f220cefb2f20aefeea6b4d391d8446dbad7f71d31704140a6683d06e5d287bfeb58b217da123bea40eaa8ae4bdcd2a9247e3bcea686f46928fd9479231c7d6c6fc093f23d846d060b5c3b5a14219b2a60abf5c10229651038b1fece589402972fddba9e196d8d0c43caa155572486a9e0f68711f43647f633aaefb2f00f4324d1419689170741bb9f77ed78bece87b1cda282a6f8d1c98105c2b29622fcf3b695c6874c49649a7f7d02081343a7a068969f773fa5cdb56ab660bb83ece1ef8371fb5c884362de28c19c2afdc06bf794621e1799c232a5512fb778af8e2ba57648a78eb86c72e0740af7cb344eaa26a6153f2617bb727a43d54c0d2135a772ae8e2811c460f7d1366a3d7bce4200b386b59189eb03afbb99a066a0fa9f1d56676de71b830048fd9e83b975a0a7abaf59e7cfb8c8027003788677ac1e2bae5643417a98a97f8a4332082578ca33ed9b249e31a611c12e92555a78586657501e0807c053250725d1226f97e4bd202d681fd62cf362c24dbf5dfe810f9b5761bac7708c0ce0804ee9c0760c693c09e57f01e3bf00004e327b27055b513e7916432d60e6e145d0f6ca450e3b56790959b5f056ac6fffc5ba94b142886c906fd7d55fab57fb21b56f218ea6cc197338dbc1ecd4b12e5c859cafd662fb21158f2ebefc46decfebaf72191ca7d3f947d249f6d532dde042d0698ec69b14b9119473943b32a24c66aa598f2b1853eb3db1906e5b5ae55e45f25aa5ae91a4174b88e47814f9b42c1e1ccb50d08513c32f929ebbf5dee3086eed021634cd764357bb92e9c54138671042ea645771ca04681a20e47184d32d3b7196f8515294b4b5036aae40bbabed2521090ef2776bbb588db40cf87d2f793e37b1784f969d1d3464a8d345064ff93fafc2bd69226cc428a96b635fd196d7279b2ba8e3636da01136249282750382dec109d9475f31863b271f30c02283fe7ec52da5da35ff8e6a6a0d23272a152947fd78c647b039be563cab92ab92d272208205db179f64d50e582eca8c57f2c5532ea79c46c636ede3be9f89de06c529c7d9dcb53f755328f0110d6e610df186747b3241521706010eabc51d381688f910e9b7257bd08a48b4eef1f504fecad7498f7a70a38c99270d7b30a816a045f4cdf9f22fba819688db24b6f80f4025e2f80c8c873d7fdc825d64c4fea22ab8f2ad1c30771f52450c5efc7228c19cbaf364224ef08cec41b415a72dd7349fef8b7d443c9516378e43ac319ace045191550906bafb81c8db299d97ab8b7eb3934be5c97f4704dc69811c25a7439d8bd1449316014026d31121840bf77f4e4dbeac0858807d06c5d6ccfe8a1f13f43b2a827d520bf9c01cbd8c3867b31004b4f3c16fe47c3de5cce39aefbcbde7417e2258ed9c9dbfb311ecf8f32b07c238536b5c26f6a9a705a6095688f4fc101f4b2cfe6cac2d62f9d4d692ea9c7ccf008e7b55940ecacfdaae4d14ce202518f6d2a26ffd5f38273a7758c79aea636231002238c45c01d09d70c77d59e54c24e6ad40d74f87b2c7bf1d1428d43c562c83b9f15328f53058645b465269141ecf27a303da78a345a46d828f39ea6820daa816113f16c7d117c1b3e008b52a847b33d99513a4eb9f5163c20df7ffd52521699f4c63e3fe9ce30b66546562f9fd611db3c7a0e3a4131a8062b1ed4b35d2e378bad82848c77f3d815aa78ee05dcc2af8c5d7c7b0d4562e538c745033db7ce77efb13d8e8bd8cf65dbee1c9cd372c4484d49edeaad6e63a34432053a0f424208ff39eee274f885da3eee67ce4bf87e645ffc49004e2b96a944849110d3d6b65a5d942107c147879fbf29f5febcd4a8209b6aafcd962367e272c5208efeb073e057930d9ee8c40760349daa28556a227f12589b619d5b5950c063813666de676217e6a5cc07d52a5d75b8f16aa9e993805090a195095f8510757c4f4e1d8bdcab3d59360bd51ca71a8714a1ea64e98169f0b10d633bf3f88c2dc076b29d9269ac445c88ff3a37c3f054b453141ed437ac5126fcad57b39a6e304d3a9ba36500ac717b3c8972ea35116510486f7b729641b96515eeda1ac0395263a0dc609eb94141a3cd885af18dc40873487fab912b9213748ccd8a75721c2d99b59ac4a33581d0cd58db1859a5ddeeaea68296177b168267b0c2854365f6e1cbb1094e86e11efd4b1afe1dc7e45df91f93f1ca18b027f66583cbaef4e86d1a486d6746b788e3567bde098712796b3e88a4121f31bcb66fc38e5e97a68d645bf460cb1dc51d07c7db0a1b7ea10d6314c9e8297328326e6fec03b390c433bab11ccefc691c91af7c9f66d131393cbe8f897389e9d5948148cc1fec3231fdb82b4deeeac382cff54bac9c39966db22c65da1f289b81874697a514c617a9cf97ec499c7f0ae1b69a23ac42a64414fb6de6cea5796c7e47e30427092d62b737aedc2b27eced46fb65526e4a59f4aa4c7b617f6837e78515b3d49e9e322d3b37a9b536233c6c2e36cbbb209514c0f5a48bc08a82023913df121a7565efb7971daf76e2ecee4b9efe20a43332afbecd0ca2964a68cd0eb4d9b28593dd5f87d31d4889739d0a29f0c25d77cc15cd658313bf37e0edf56a3f4691e83b9dee3ab39a0bb3bb7756b63d733fe01dc5cba2507236a8a16a857044fd982e7f74a1cf22da944f16d0f2478a3fd142688a036dd17ad3e616ff3b34fb2bf6cddd317405d72fe0c8d0e2a4999cec92a126d95ee4b6a2f2007c3c4e2f1ba08b61ef898b5a5f70cb88de5dea08ebec0122b1749a5c5fc86498465651fcb95a064a399c76adfc3f6d20dc3c3ffae3fb5cf21dbc4245a1761d6bd7af1dd70a7996c97332655d595867e5a11a82f8baba05e6cc510e8f5ad0de4957b68878f0e2360de667c3bc6dec4f5c3c66b2058a18c1501d372d5f3aed73ace6959e5abfefc680c3f1389761b880fe263f43471a0bd86a5560963182dd5ea7e1027d0984ccd402419f94e88fa616fbde26dc527ddfbd9c955a120415a9bf5c5d64f56d5a40b4083b8ba126549a2c14af1925bb6d56f9cd2f0cac0deaff1351962ec8901744b60434d452968b08de03dd7aa3d9e857528e3f29979b540cfa7663eb7ed7e89fd004d28bca536a2bba9b7de613493bb115f138530dbfb57f8f35657e93e1c3f8ae9e14ff8e537c9bc631647d36ee203f3a6692761b6cc973a2f1fbb5f45621228ee71d38a64cad7477e38074ee0cd5890fcb21c20fa767ac1bbc6d7bce563949d6e8198ec5c26add1ba3245bd5f59b456a8f68c72d175c17bc37275c44219f1070ba3800bd46eb93e453f3031f86d7aaf2393da6965e8cf0715eecdeea81dbc7ff6eeae6dce708e2eb36325e1b0160205f801d6859b662802b7bbb78e69e81c10757fa16a8850906efed5f6e8a80c93f17adad3667bf305d873e3acba66f1d8bcb4c19830b8d916a4cfeb7d52e95b1267c46109d5223a0c3eb53341a8621ae4ccd35e2b0232fada0b4dab6a2ca9f7fb29075f9b98bc2e264c006ed8384e9c7e5afce5bb7cd612bb1777eeaa8e4c8c20d90b469219a065a5b58b2a708e2acb2c272ac4ad6171a937813
+
+# Valid signature XMSS_SHA2-512_W16_H10 [VERIFIED]
+Msg = 7947c106e7e116b7e97d023498bd39ad62f38f2121e679410445647c6bb250066198e15681c2e887db6e04340e583d6248d00f589e91794d9182c1564e3591df95badd3b5c4badea59ec2c3bb4cc36f4287c709f3f588a9b7f2fcad52013f6e23bd35a681b9731dc33f417d1bc885e61edb535e1609e89dfba159bb31cf570ee577a5eb33271473bf67113aab4ebf9af841b2a3fca38606b4488adf61a3b6f3df95a9679619d10e60992aed38061294e969528cce7edee35acd6c3e66494a505edcbd4bc01b50fb6ab026e8cfeac842dccdd6281b9b701457474d44d571606842d2ae2231839ee0affe9ae7bb72456fb79e1e96d94998fbd7e7f68d2dc0be6951409d301fa2b7721f67b93b96afd509fdf755213b5a23c551c295f8a
+PublicKey = 040000043a9f156f22674942cfd68f42eb1efdb203286c2a9103b9943fd40ae054daf6994312b0c5aa74fa28fcc97806abfffba44def0c26bd748ba71bf27f3a78f9980e1a0df6651b6a24faf5eb9c1f22e567c00a94c0f808037ba9405cfea82a13031b227b462cdb2e4fbc336f8634e36c113d6044f491dbea1301b043a791e2fce3d9
+Signature = 0000000000000040738a5ef557cf8afba71c13bdc5f1158cce333cdfdd88c04a49eec8951738390728c13c72e12d543f4e8a9ed0883979d8662820c5314cdf62b1a98d3fcc6f9c573be508268de40315d4ef1f110b325a1389a2ce016081ae504f0fe1938955489c592e78a321428492e78c12a2cff1026f4569c316cc22ddc652f9e9830f292d07a384fe6e50bee2eac7e365f9ce71b4e478bf31ded303e65f3c1d02b506e293224a770f290454bcd8b80c02eecf48421c21f7289319c45fb4d0b61cbac29cd4a82cf25ff4fc1eba218f819747ace46782c4c0906f046621bdbfbf43dd283458ccfbb845912d23c999772cf315ef4ffaafaa550ed2ad62243f724294bb709104abfdb09dbacf7d1f41d92d4f70c46b867137e1c71144e6f7fc78b5f7f6637784408cfb102a72a628f30ab2571bda03cb8d7ca7ea5baba0f7499774388714f1e78be46c04b903ae4ed5a914ec071dc135c011f1a0bec0445eb3adf51ccc181ed15adc9c81483fd8b43cdd77e3b7058fa5c90b3cc6096485d57e91566143fb1e2a2d741af6ba0926075496bf81c115ea362218e478b06a2f3f2294b9e1acb1e1aba52dbb257d682dcc89a3859d2f57664630e1f2b9f3ccbc17222ccfd8732f3d5f8ea8b5c4bcda853e078d3bf79c106ce46a0ea23db47313fb7ad99dd00e6affa27d8f0bae85ecb34379afff07d97b1b0c2a1de99caee7e1bd157909361e2741adcdd79237a1d7b20850415f6bdb212347fa51ec055346831b7b16f1a5224bdb9eddf622dce0d43570cadb566b472d1233285bcffb2bb5572892eadccf38ed3c654dfe9949d6eb280cdb3bd0b84e701a8afd39f334f043920345d44b01ccf7bdffdbd700522948ac7f8bcf2ad598811de69ad522ad87e5436875a0255f4c762fae5927fb1722004a05f82e1b7ce00dd1dddc4c48da4b9b7ede200d615b97da19f6d8192822d694c9d1993d14847af4eaced0a4e3b770e889a865da8f7b37de96078bfe76a3187feecb029da1692d34ff7aacf143c1649772ffc1fb43b5d371251355e1ad710dc180708d1e8d523e3010cd052dc4e7da3dca70316748a9f1bb215998a31da3e7711a3f8037419a4edb7534cc31f4b3818b9eca8f47525eef38dd55fe9b8bf5ebd2471c0b16f72dd1ba44e26480cce2891a91410e8f50402b0da887e0289762c5859e6023dac4f9ad23e2b990571c2ce564815fb1d642bbdc5e71900b7cc7168179207f1e53fd0369cc673f3762fc009f9261e88eb4a58ba3238e6bebce57b59f5626f3d184ab7d581abc0cfbbd444b8787f35759540729a338e00d4022d6937c19766bc4a8c271a6cb000f48d8f328bfdcfaa127c2424a0252d8ac39ad97140f87bb7201c48d3fc3ea65175e7eaaccba9621091d530cd1a8b7f935b932c1704d458658b565c376f7b21f95e42196eb3b0e15f5f8a146e48af6e2adbf8121b6b523cbd3736b9e42937f1f3b3c5408c2b1374f377d3d9fecd031d77e9d6cd1b7267378bb8fc58ad298a2acbd7433b0e26d29adbe113c44e986c0368ecb78c6aa07d8398c7f958350e92cf0651562e4fa291b468ac601491fa136d7718e270c128e115d5fdc698656356caf2d1651eb59eab4cf886e9701aa6ebd711b34d8a4fc2e0802d0bbaad48c065a5b297fccd85b1eab39fbfb203a7e38a33b7310a0f65d1e13607a994b36ebbb3384fd1b1e8132c40474cf1479c10e1a21cb2a9fdb8d38c39da96a7dedd6fd646c149182d4f7e13c30d4e97d7339bf241df9d97157fa2ea80842c83f66c113f2c05a86f6e86265a991c9a83b6b6c19cbf9983d926c5b72029979bf2f5e1211cc7df58f9db764772da1941279048bd8287fc6da17ed1c16d42c0ece6f9d891f3ebf0096c80b9f3bb0d6843f552582622fce630653318c8cb216a079708401dab6f0d7bd7cf84cb2c35304b6fa04e7b3fc9915f9f9ac8fc1ee8f02487baab7a6845f9f6bede8b79ba4739eec9e6f42ca05b73f7eb78c26465ba9c6853bfd2fa14f753c71a4eb11424704aa7ed4ef0027291d2fda3909e71068020de732652324b1057ca26fb13c23f2f513ac15d91a7fd39d70bef1627d51ed93853aaf675a9361a5bd9a83c551030d44e820b787034d8e01d940f6c686caa742abd94a916f171c4f3b4829173a273f145ba72f5e2077327a6024f9c0dc3d5df86dd11bf82f4f5248bca326e4dc1437c9c1ea0d91557d7a3fbb7e5c36223092ef58f4d4d7e294feb3422becbd3d05508ad66b0977a7ceb87a8cc78447ceb752ec4f0d34ae3b87142db611a048bd488f613a6b49100bae1fe99077462ff231ec0c40b35f094b95deb8831c2500f9f82df790aa676314ac42c878b1d99244fefc2f57b1d9820a2c67a7003a960b3aa106280273160d5e6b3516377d7f68ae2858c748b68f7d8c05a2e62fb9bda10c2588bb2ca75c0e947ce728efd02c755069c8e688c443af9f4d1b0270fcc016f601bfb617a3f4122e31ab20ed0ed75dd58f74e8031f3b3bc7e6130324c16db0fc1e935d603c50df19d10cb1f3cc7cb13050601cb6c7e2e526906de9cb22f2f22a2524aa8495212353b51c33ff35a7b0c67f5d8f39d6d1e0b1a94388b2a1dec20a642fda0bbb874404108357a25ffadd6da7ada2ee89f2bd1fe44b2acd05ccd41d186a57180f928c0621f6b9c41567df979b999ea0613ff2288fb8ba33d7c10468ab89196a22ae81900efcde9ecb780b43b1d70daa2b4b8be924d7931de8b411b6c7e8d9ad500f7c8071e1c367796b0153553240c404fcee6c0b2e018989d8bc02c945b3bd4123e27a9539678d67d654578f73bbc4cafaf8920faa0f990b8c2c9d50ab137cde5be6c6201425a074758adf701894f338224c544d914c3140eb525d18a1f35f7822b5bce331cedcc560897f038a341804e3f22e5d106f12b54953ed24cc007f76182efde8a1a48e71f19b862673c4e9f669d7f2e7b5a97195c2e6f7ee04316e3bd07c1d260871896bf9e2b48b43ab41a149b2e5f205f6fc3547c4b1aa048558cc8c4a2bd679c2cd9424b1f72169b632a96226a2de876ec51bfab9fccd7c2a182804db39f15e9b009843b68ef8bc4b75bc48ff67faa9149ca2bed504d2c8d110ceeb62e6dd381715b03def3dd82414c161a431d556f670ff29afc93cd6fa6ed7a1bac370468602a6ef9afb9ee1fc3990efae14a28a7f2dd970c8baf8b6628d4a78963db16801c6bb328ceaa8259944e9527738e32d4fff7f5136126dcc27ecf9a7d0e050887ad8a14b45b2bd36460fe8a8ea33699ff7be0f6aa07bbc866329526837e7bd9648bce114216a541c35c0ddaae3753a42b6c1bb5ff5492782a1280eb582b0c49a8667014ee60b16488e04fe6ad700b7d4632224347330873634216bcb352d671a8d9dfee548ad6edf1fb6ec7128fc864b91c727f5b259a495ef7c8c038829f5ab7cb2cc829d7bc53d5a9444aab996a370c0646166f0b96fd3a5d58d932d532a850ee023e19dc82d46ff3399f89a67af4c4da32b101ba0d29e71f1a318b929dcbf5c2701b29e27a612d1e3ab32e6d8636c66755ba09b11d73011fa73f3ddee431c72f70657a7d356ec949a63e43bc37b8d390438411c034984670a9ed9e36ea658ecab13d5193810f1b4a51c5d6495c72b124d38462488df6dadf09c84e94e61c91a1d88abacd39d337dac7152031249ec1b09adc57a86a60a2c9cf4cd6026764b8d34913221deffaad4fa1b40cb581562385a5b479e922f1f142c478054a1472bcb0102603381f319aba8e439ed4e7c0be91b7050ca32fced9849606faa3b52b10a8a8df5e518f093d89c3590fc240dc3f4bf59f0f4b0c11d336c0ff3456aa5af90a3deaed3f8d0ceb1121bdc23a9b68692d5d8ffcc06a86019fc2c32ffa45d94e2bc9ab6bf01954ce3de0b96d96946abd400b249822d8df1486545dc4bd1b811ffdce6b25d0ba27e3d74f7c936c2fb8ac8381bd2d84ee9fb766821a05c2291647f9c6355f3ba250c08220d6c39764ca624ea50181191ed81dca9dfae3cfc288a29b98b3954b2207890075f99399008ab11295930117bfc56d391fb38926366829dadd9100cf8ca7883f051931c0940986526a7f284d4cf483601e7301e2765de64f84ecb834a5f5d372df6c3c601f660bea83defca00ba377529ff6ecaced8b208c4a7fc1cb9913088d4e70754caa82e942de4bb7124c6aa4242fbff6eaca3b36fa7732b379e5fc05deee33edb5515b6ffa3f031ab29181ec930a3fee1ac601484e7c13b8e671f2442558a1650e6882d26ac9c60a500666456741b154ae02101cc4430e9c6e9e47dfde541b311816f1a23e9f3b46e52f72821e43aa087e3a4b862ca6537d3ee998f46a0874b082429bd7db981f7370c3fe1fda1d5ab043605ce6850d43d3e9e6b7821d67ddf5cd14fd19fcc22e00ec739d258e3087ff7e3ac3a9ecec86f967923bd6a9d20fd66de8c9b8ae10b050794e60a576f47f4eab821a9bec196378754e91edd0b5ada3578ef9453196f42a661071a8dff05dfd60ffbf2b4667ad4c4e36cac47d7676a1fb7b9151b5e49e99076c796329f269df7d518d80618500680d446c7faa8ea1ca0b8e61a0ffdbd4d9ff05f37ab6b7b668bca9b4b2d425fdd78e8db1b57404e4743b1bc4f1cae768a89d056b37d5b21285cf7af47224710c29e152586d4add1f7eaadf7e7db4ef39cca473174c11098787a93427cd3edff405c08a646ce1dcd143166dbdeb47789dfbbf20431ad3d06a93263e4b0b827a2aab2b0d66a4a768a7e6607aa2e3b0d5de92b0ecff3599fc724736b4d26c805bb2cd2211e507b49b070f8c96dd7264b90d09a8845d5092ba36bbc7897493fe021522e426f20dec6851fc26de9a8b1584682872c2a9da3b0264e913b4a67486ff3c5d09173d926092e842daf456d8871863c5984cbd27d45881cb896bd8b97ca40b23c5081c078283bddf815655dc25b3cc6773dae560ea7f01731ca0a2c60128fb1e676732f99dfefc1839cc70d28f0a0644e97daeec05498640005e87013b9bb06ffbefb514ed2b6b672cccc8fb8d5da27ed4a1af0c9dee23d5f17fed7af0362be5425bcd5b389c9346f89cfdb6b998babc51518e0bde9855a61528325c9346dfd6677307c251676f76a2e6dd76562d055da42e601404872679fa95bf5bb73da32cf1be0ba22e0da3a7ac1469d39192d851e4ae4f04f17487c9bf25d6d1fa6cb4a4678fd0f3cce2a4433c0cb1155116f77c677ca8e415c7f337ae21c35962eac4517afa4ddb951b7b9c3cc7b9736bc4bc8d7eda7ca9b4a15d1b255c668f6eebd9ced2dfa63e914bda8c8dcbb42dffbc68573f91b8d42eafa43d9afda5a03d2e357117506a506c12f3ea6cfd96d7d96c8c03c3b6728c4af6e8c55955cddd86a807d771778aec694663cc633b93ae8d654bbb087d00cbc9fa3ba463853b067c9d4bb59c82e9cf26a99e7306578b84859b6f48a9f1c421f05ae66f9c26433881b56f22fc00a3202ced03db414ba3640987dbb7b91c7d22332eacfcc9fe63a48a78467a7fafcdbd035c4c2f97bedecde028b12d4326041530b1d47f7e46ce75da9ceb9e6f195dc176b6dd251cb93b612975bd583c4f96efb11a01a158cb6142c4f5755bd3a4ebb14f907be9e6838f580c2c0bf121eae5134d401791184d1e21e6a7a735cc524d68d818cfd7211a1f27eb80be275132620e8faa851937567dbd844677a01ddc48b79dd9acc41e569ef7fa66e344e1dfda9da1644d22186816ba5598af7caeba8e762de51acad1e67e728ec5d1f1d4d57910ebaeb8f652b2d95f01a39248b1493d3ee8f11ca31252c629d36e75ed7527ed3f8a2403d7218cca580ee4144d20f335b4206fae50fac05f0323b07bdaa577a60642ccb554f2ac3a1bd5e8a7aa0b292755c86e38a129c4bc09c19b9d9c4b27984d0f71c10913d037859eb7c61085bd65378f46b933a205561ca2a229f7f309eb29c8f206ff4e847e6491151b0e32f106ae2a17f5d8535c9067f398144f415350d51b214af8a5f25f031b4418db61862713cb02886a53005b505e3bc9af9f1e3888367c77b622c7fe271e863dfe8cf8a91af6524282f80b1fd2db498697db42026348e6930e43ed50093bc200ade00dc62e1dcd9cd3aa780c139d43081188f0f1e8417f53c711ff71686d1c9dc114ba4677fb89ac2270c2649eba1117628f5441e91b25b223a4fb9f5888f957400c8bcb075f407851d466d67dc9598bbd439d08dc223f5c97b0eb3f50e671cca2c4dd2236383accbc9ae465d95cc7e70af9b8c52d3aea366be481409fd9ce7e96fab1e7dfefbbbcca6c6c17a07891ff49bcd113b7067f220196ee12f3ac516b056787926fab8d0660530166194d903eff6905eba8ec61bc2ba1df29fa515cee158fd0a869d8e778372527bccb6261f333feea21d7c98d7cb6c5f55af8546d20faa034fa3e8f09fd5cece303d4d144bd8b349dc20e778ecb9ac2485dd68a0d2cf837a40faa31f474c9f61d4b75ce1ca45ea5177b37bcba4431f32601db85153a22840cfa432fb7679f15d67687160bfb91dda7518d5267ea3317796c66e726b0a8656301efd746367998c2a6ade49a60233f7f340f75e95d67a42f0d95a0ed8460c0d0c62c0d53d4f4d27257ff0fd96aa7b33ce812bd3cc4f1a4733c233277c03440ff08c083dc84a3707a5c53ce2cb268821b3c0b6eefe37450fe22d17a7ee7100c87729a58532e9618b916e0941ce7e112be037df8edcef32882e6a1b38cdf97250cd123b6a6403460499715f2b38d9955d1bdb717d5ad9d9c40b3b97cf3cd1f74319103a50776685753410a1f266c86dcf97205e92d3abaa34ac68f56759f9648919825d3804d17ce992c771cf40117d6e210308cb4ddacda4184e1bf07d4f0597e19cb78cfdf2c562a852c308f35cd4c41899ad0ebca7a48b192c5fa999627baaa258ac169811dc111624cb5afd1c36779227899e318bc36a3a9daaf13892b87b31cce7f97da8a810770b44935e447bb4349abc754a125d74576208cd654d3ef2751583d1bdfffcf3ed664cbf38f56e4443479caa45f379e3e6ca6961bfc9344053d18b46af5ff536bcffb1c828321f2b51d7a3a9117b474f7517ed7f0d624e0a252d23f887c312f9a507092b8f1e5f4bf9396396debb8e57c02eb46fcd98c7e04acc7140fdf0723fe1512f5284361b177bbb88b5cb2e300086f8b39eb1ff027bd6a47bba0e82230592d0ee7f8d65d069bead51fb1dc0ae9c70be40f18ed9aea74765a39969bf68c2ef2b017fa4d1554c989c304123ba8e7133729aae8b1afad184187df12db0f40102fdf2c5d293676f9901127af937505d9530e6df48ff57657054c44856681389bf7bc77cff820dc60d945bd6c014c58cc83d7b87bb32c724123ad4674475fa3c092e33de2a2b8881a0f2ce3e039803e298d5cc98c5411b223ac3f807395681dd2b71a093f358ed0ec383513b34a76349e38fb47207296e28d38b65f06992e3a61bff21f4a832ce9cde48e90163b2fddcdce11f47fa882ce50994df57bb55f39ffe043988c5d184decf90c55d88c18b42b72ad6f3d333df36d90d16db670d95f6b66c1a97bb05a6092e4357683013cd5d12fe886c09695766342ece192c2abb77848cac9bca967d191d045a4a997cf63f169c191cd44df50b9c4519fd2f4d8751e642d069e951ef93c7d17f43d575f093b236a8269f2495067f129ded1d33941121818d835c5eabb64144d6fc24f1921fba22edb16bba2f895c4e1e6bbee1cc5d3b0e6f57342a3aee97640c799cc6252633e31ad70159e598c45f533a5ffaebb17582a1e45f11b0efe72eea86dd17324e255482dab9e8f9b5e4608c6f1da35e75bcc6a1db2731d38e8ec1731c38f5258fe4022b1db4ab7f96b577fe8836ecfaa61e3b354756b72f3f8a4e6c5c357b00fa847245590ba64801563087199a2ba5ab3af8c8327d89c8b4c7c1a04a2c79cd00a1bf906eb2b21feb99d15cfff93795ef05a45045db24ad76b298bdf7a3715a8b7a35deb6aee355b83c72e93f0695d208db18d89c557a63f8313ea5fe27efca556bf7c5e17c410bc7d2004d1f4a0b3dab9846637bc9b860b26e4e318b20e057b02b44f211efba64b67ae6e959e5fd12a3d2a647ceac2057be925f8cc312d304b29c4f2f8c70b95d812cfd698770ccc1eb29a6e0bff0ec4a93fc4b3ade3449a63edbb28222fc3dac0ea6c02656afe8df1cb2044654990c453353354c7fde4b60db6afbad20010dab6d493ce52e30cdaa3532e0048f050931a2f7dc1480ee50da4a4e702cb0258a8d05ff67b46515e10701c36f048944e50f92bac8391074f519001c5adc7d17b3b1cf9ad88dbe7635342b78dbc4fd4a5e014f40cabf2f040fb0d59908b9b3531aa0172e3abd8b5dd8e0394fd14b8a391e9426e9e85f4a03c854314f065e50c149a18dbd13aed7b4777959d3f56f7189a2b84039198e5982c29547e4e76dcc56bc607512cee02094cf4c982ed9c154ea1b5e6cbb7ed43ca83105cdb69997dc0c3bc67effd73cf2fffe3d56fd1f78b77aa82d6c5285a0f41902516db2d24fb1fd890c7ad8aa31070bf8d32f7a2cf444641b88665bee752736e8084d84f8cf4b2d795e6820d2ec77e764dfd81d9393c4b09acebcda22356c5941003cd7b7e9a8fd860a7cbaa6aabcc56610019b2a0ce672993a932b64523134a606f2bd4cd5d4da5c4d11286bfd478711aece4180709fc03ebe63ebff2cdab438b8395717176aa9397e50efff258f9d71f07d3320b1a5cf03508d179168daf15eabee4f71fac1b3fae92b550154b31cb64209b13e60979cd0fe57edb70cf4a13d274d5365727e4f16efda5b8182c3105ff9320ed61781b5746aa0d6a19f49e32c9f002630862c7296a552b68f62293538850506d92ce396ebc591b4730499bce904ffa7a7c5a59d248ae2c30e5099a07d47f68fdcb95b4c8904102b98a5b51b0560f10d8d297310aee58c08ac807b0c169b8c905ea96f1244e0b0ed425611479c8b34dbe710b9ea4a3f3979c65967f47c79a5f74f5ca14f21384f9bb0b52b1f3799ddf03b8a6add9efdba5be9e41e2cd4a9ad59d3c025cf01975fe31cbf876b82e227eff7c76be72bd004941270c95ca37c37fa791815d6ec2689f18cc0d781a4f49ef9ca2d851078014bc475693f9f13dfab9722e9c26a7eb728dbef54d1a1626657251430cd2fa00b7e4232062a7dcf8d0e5763be4d94ad752a483b5e289124f235cadde08ef9c0a37dd018e142fbb8fed4f4e16099c1bdbcd410c9decf8b55e3272e372a94ec3ee9e1de3368937fc36779e4f6d8e895e4fa7a70fe04567d33b44ca96e2bde04482a74663a06d415143025a85797fa1e2a408bd0a38800d42a9172f4a32b85c1659fb7a4624dad4fcb33d99034463037641a60872290c906b73a48c779befeb536b0e8b2d7186a14f8143f225f17f8fa560dc475e7ff6279201363fce993737e6aca461a1cce1657337f0dc5a5cde934d2e29285b675606ce40ce28ef555435792403fe3bed4e5155082c5a9981b2c9e953ec35534e93eaec0537741e3b05c2a140d7a9629c88ac1356edec908b863f1499b28efcc0d0a258dc1322f6d3e38a549706fdd77e5b6b97f5100b9ce5af252657a493c9b57187edb03df30a5d3d9310d0dc76bf0226f93b0eeb7ce7a49a1fcac49d56129e7f8b6b83b04a7ee1ec2f3056a21fd73868bba47c6c0ee4c960765fddd18fafc018b47f57221183dd4f2a692446d3f9f2c22d3371c82028dba796402c198b74985464f544ba1453feb483be61ee52f58ca96c02722c1f9ca1cd57b8088033513103200dfa1f78956545238e4aa569634379feaa63f1503ba18f695937b2b547580718cd285ef85a003298b787a528ee2c994af3f36485343f62fdd515e290c8970c1714072c6240a5aff0e1188c47463c90918bc133653f3f122b7e77d4e7f2bba510183b2e26bc6c237e25edbde606e41736bcf0dd62e629625e7e7c9d1cc6d4f5eff2bf5207219b069de6a26fcd01d86400bdf60f5b5e19d2c4396b0ad183b45f6cb8aa6a170c2780f830bf19a24ceb4bd190be9c6cf9b6e330b380f0c4c1effae3ad55785cc53f87b75486ebb7c856dc02753a825e97460c44ec27ccbc0d1cec0b00cb2af515df6286f873d69ce320cc992f63fdd58e3118c0c995d8cd2dae806a94ba1aede15b5dd4749a8eba851b6c581250519b167507170697135b8fa06aed13d31f878ec1730c41938e5e11ef0fa49b5b130d7e1e01d753b41768132dc6fde638f5e71fcf45cefd0894703a4279d44e80f508b89c207211e440e5303f972c97d30127ebed7c9a2811fc6dee7439812db7ff2853ca5554cbf018d6337ae82b1a842175c6939fcf4b8b14639c01db03f9667f29c312864e96c17e7000ecd346524711a25ee97139da89d0d3f6fd4a3be1bcabdee02de484df6aa1f0ed1201a2acf5405333ec142c3ecf707617d30e8c34e3b6946fe1f45beb0ea289514fcc89a7a39e57d23b2b558a6e2f6231556c25334fc25823ba38f5a4e11364687a026ad4aed5cadf7cdbf8583881364f15a021d7d7e860273313b22ffb0d39362d34be20873838aef0ca832fac82cd6ca912572002e1249c14be2fe9137194c9947bed14c32526335a32a6469b6e61c6637cbe179042e0eb91cc9e4d07fad9f2a4b86d02f411b542203fdaf6fd91aaa17540dd3eafaf13036816ee2a2aa8796fdb664ca0bfafefa7ae6889897237c3433c995268a705379a561daad829c7d305fc4696ed9de9fc03a93ec05bfa449e649410efd63882211c88a0179266301853304248b74f8582f0e731f5a259413c4a42d26021be3e6aa784c2fe874f95a5f04299e62a4f2c5153f11c7974811a73949aa477cbdc768d1150a2f11262edb456fb822d75cc4628e941c3ed6969207afa79978e860f25848314e0b5a4f6588246fc571cce73d88cdc946bb466861de7c1081303153c93b3c605664b767ab0b3dcda7edee1650b053130d9d694908574da5f04ae147754947c1f68e13bd009c1d6ae573068474fcf477c4d37403e81a07ee01023dc87a8f022f1398f15d344a13d80b365fa90df7547315f1e428ea15b0887eb55f202480c952bedfc431512e127d435dae6d30bf98e7493afc85dbd5448b2e5f2e557666e2cad428df534f18b14063a54bb5e706643c261cfd7dc6bc8d01d4fbc661ffd460ebbb0982a5974ccb61b67b91b7fdcbf68bce82a829acc2a3da402a7641e42daad2973a37edde789edd628986bbafc49403e72a6ccf89bc11fc9ea5f913773b26a92c5de21cf48d116e11de273f91251487ce58891a369d6df044b78ac7601bb9fc4c3d871baf0c4d4056f6732a0975880979f1d6afb659a7343fe43b4b1e9a7def4d407e4849f07902a81b89552197a3d35e8975673dfb2627e791393b4004bee6f8a38d0b6dde5bd5e8d2cac11d3a4bdb98e18f1a931854e57ae5ec112f68ed82092472f4fd7af8ce53bfce4163892b80c21da9010bbb5edb25779a616d9aac155436efe26af18aa731bd470cd074a34a571bf9bd547a8a47250f3ad1b609605036a5ba63bc72b332995e13894068ff5c302e7255b37b305bb6366e339f95bcdf7e8fe46bf30ccc7efaef8f8345e1f08d669261cab61812adf3d79f41cb1d9058db8b1d20361d73e836ebdeb24ef48c53358e5da91b1618a22e730323b360b71e12e037e12c6f64587577862229d6d1f38ef7094089b099dc86627366b941279f2f87bf97f7737a7925432dc33fb340874a0d34614fa2d573b38c8e439bcc62af4c280d49d4a90eddfaa671d03f4c909c687591c0aff9a05e5c7c33e446ee09da5387943da9d0a944e1a22069f3c6d918e6155074e0f179a0f4871151adcd05df0c0193b610cd12bf28c49951f6fdbfc44d255424dcec5b75856290797865884bdfde55b4ceb051caddf0b45dbb0383ca309a1d9cac7deca2df31d691770d4298ec419563aff2821bfdea9df93b7523789e08eb1b4ff511bdd5c25ecd15991c3cf8b6440de9a2127ee7305b579affccaba59c381af2fe75360e5b759533a87138e7908a2bbf4707284e4ccdaabf31f6cd11f5c7910dec2db98f6d46c86cc410552ad736d060ff94a45ad9cd63aec5c5d33ca39d5f721e950ee5f76c92bb43bed2ee6fea0d2e6ce27930f9777d60164737bbc33ecaa11ffc434ee26f42c67c5e8194b3e112af3fcc9bb0d2d041ac3da4eee402f6b4037b0c97330287416326dba1e307b415af4a8de9c333222610192ddc53ecb0018da7560455c66d0db9b03de39b41c8d92627b47b69ef604d549cbb0e458dfd8d4c5ca3f163ba19cf5799a12093f0890e6dd8944f1c8811d5cb4aeb460caf886a8cfce229a73e9f16500c43498c1568ca4acace02cffc1621261cdafa0a33618657d42001b0bd2c46a26a1b3ec772099584c59069199ca08217af9a23255bafcdc877777c43e7b5814daf5c65b96b59b427400fa6a589fd68d51133a9f8ae3c6ff00a74f670b4371ae70028d5f2504f35bc6c5b771050670927be2c7ff55a8650a088d9f58ce8d3e76bfad347ebd46b3bb9e3269914ad6e971f297d48f077933150045020eb3ed154bd4f8b84039f0dce2945095d895b191cffcb4e30a09d51c62b7f934cc962bab6177479efdeed81728331e02bbfa8ad5cabde14be5b7c4397fb0fad4d4f4fbbffa7c0512f53d9cb9cd311c329c7b493f5d360cd5e33668bcfc30ecdb9a74883a097eed2a658623cefe4761e92ec6a5c33a76d1d2f1128104b5a398d5b853f12ad2324abe52e60b95a95118a5503891dd02caf9420af3a3ef2d00f3662e77aee9d76a69de1322e0f3481732a56c964bdaff032f8493fab321c32
+
+# Valid signature XMSS_SHA2-512_W16_H16
+Msg = 9c3792b7dbe44815abb6853ca4a6ff3f8645a18c18feabbf287360e8705e133450c30b648b810e04c781ba47aff2a6466fa1
+PublicKey = 0500000548534fdaef9a69681a9f5d66113c2edad09fea503494a0c1283da33d4a026bf0eff8844cf9c9db1165d4311456efaea753a25a806c59bdf2967b0b9dbe1b365b97225867edee40937297b7113ffbd6d2ebbc1fcd7c73c4470f9c953228034be7f4e458548d986876e0ca4ae8ca623e0304693112ed87e532f50c53766d7ec744
+Signature = 0000000000000000a81db3d579d02e7ea70da829633d06b8b519e8c31f350b40e40d0f8b3ada979ccfad677a50f37190b1aef7feee2edf9e1573eae272a6fccc5ce5cdf5849f36b65b7714119fa64020735d6999144681c53d8c4c46350d4e2ac13b6b452ea0c71dbf87dd078381808dcc284579bfa2f61189a98f1cf0dacb43b1809e29ff477052484790f86bd83ea13078e427a4b3bc1912d80d6527f477dcd03eb2e746279548c3e77e14e809be17e53989d13d447f39c35429610ab4abd0d7124e86f3ec2d8f254516e1d428a8379ab521425f6cced7dd1eb8a5f9787300e3db7ee3a4853d8bb6d0f157e23bf1b196009f1f823d51c8a7f07057a0eb5a5b2cc0009e4bc347657a0e68eb5d5f1629771ceb38c546f1647dc2c5ffbb5b5fe8db0d792b70dc66eff8e7e9dd41cd8eb58a1f379e80f8b4e4a2dfc97d42596a8aab3b62f3e22249fbb2a1c96e04ea8fd4e8c6dda9ca17d4cdaff1f34490699b2431f68699ccf5ac167cfc539b282314defd314c8ab1ad5ea31a24562dd9dc24c1e8ac4a281a8e81cbf0080be054f79e486e69785dc93f6396add11fcd9625a92d486b5a489b456ba365b7ec9ba9cc2ecbd855b10a2e1c4c9ad8dcd92fa443ce19215134261c803b314a5756f999204bef434445d705717848e7ddb15022894d11a8b981feaaae53a5bb63f34aa2c687d7d1555ff18cdef42db12f511b9e6dbdf1e68114284d0cebe9abbb649ea4a44a54613b4b4505c72e48845bf9c2f0fd29bd000fb76324206593e30e0c9c799e1964a0eeda1c85331e4dac28e8fa757f0de53c03ff95d5c9a241e9fb600ffbb4be5b01ead9deec3ed202a4ee37cc3b5fda3246aeab9aef3cefb33b1cc09203d5843eeb26fbe101fede80196d702b3be44c1ded67a36974c4d29f3b7972fde29fc9647b40862bb0ce044b919949fc6b7d764c148919fad3981c82e553fdfd4515cbd5d79f1f2e84d1334b6d5a3aab292e7c61ab53f780e50e16e76e94dd754d6a9061a0d1bfd5b1bd0c3cbd48e4b364a240012e2b41f06726d06fdd0feae26fe99a9034461aae912f86c5ef619687ba664c649d1eb2d00d566a41c1ea957bce9f30f271d226f3ae274c5c74f7d6f5b180a6815d5243adaa4c8d70470a113b05ff884705bb08ffef9aa198330115a7aeeb7d4f4fc33aa41727b373451ce64c96be94a18147d24db2c6a886508dbd057ee3db4b0e701747bf9c3cdc29e753866cb4bae2507c4a1d04fde262bce2df457f6c3c143b3c309d27cc801372a3d91caa5ea66f1b3880006f3117e5ac949a0002d0787bcdd8b645988bfb7a091d29b5e14a5f94131c4440bca740bbde347591ff608e47907cc3abb5298df5870d040bb7fb25cb4717ab70bab920f61b796f664f727983cb607981021ff8dd413b4c05d61fbb007b04fb11ec15224e08e7ba68f503165654cdbcff73a237979104c76e23a7cc4319aa3bca89a85dfac92f1391a0ae88194078322e304ea63cbd23e47f587cf2b6d14aec8556d2132e495679f507c0e509a2664778529c90df15ff64dfa9066e5b35f6a56b121536cee38fe79689a4e0ef6c800453446240041ec9ff0c80ab6645116fa56bc2d83ce4a673534341f1382d9ba183e261f6fbede51e80064b9b572f74a8a3b1924334a2a42b96854bd7b369849791199643f4c932bc2f6c6c66761ff8b16d4a97d98d25ab0bf52a65fb9ff78cc5d5717565f7017615bf31c5ae0b392dac5d77ec8f00ec9167344d544386c502a108952f7e4a5558ff90086c93546ca8ac47a59e8381921f926244a4475add05aad6c9cbc591c08568e3bf29433be12e5db7a2d21bc2695726c3284622ca6f9f31d4630720df84922f65d348c347f572966f33a07956aa99f3ce911797f1a72410bbf1a054e26b41d12fcdb654d6a4cc44176b95a6612fd6151207824cd911087dc33e4d36083a1749ab80f54a3a4be53f99f6662ca08b9e8b990e96d68f6d5c34684c7a0ecbd6bc3950014cfba21f4341c90f2dd92e7b3cc91b49d106d79a7011c05f954a842898c7ee8093c30254a158072853b4114f2f29f729260dcb2c95624df372f20128d28bb6db616242fcf47f4af6619c97f473965eccce9ecad12835d02119b6342277cce576313898ab0926926eb5ce333235be327d8c32b2dad1367f0ca6d8b7b888a28904dcac29752114c6976d8b795b5e7f63a45cfef5a4a74ef0a05bda6eca580f53090e9da1a22a6f8f735e1aa7a110df386e84ab19e6535a3c88ac08cc2180ab2db818fafa5f8923af4ea7810819dda855548b38919afb4cc485be356c19c2f52f8c3100abcdc5eed21280eee97972116c2d5bbaa0b28fc8bc29332a16a162116478a2330adf569041529d4259fbd16b822bf0fe7a88136c6bf7ec42b97961bb5b3ec7913c2b5f0a7dc3b3d48c634f71d523a0423cc0fb9b5ed97bbc87bb0bd575efb6376d34a04656f6616dcd27473b2fca02e953cab112cf03778ee55b17ad7ac011357db62ecb1e8d984569daf6f8ec6f0169c85f91fd4f1d8043e087caef768008db76f3fa7bf71a77eda2d59b5bdb126cc2f7b493d3472d16771699513abcb67cb409bb4e55cbc91798129e67cfca8e8753964e06bd401cc84332f6b4a2f4a11e9b0b69c740c693da4f57d3dd01de5fbd7c8531ba92e6db6ac3756b8141ac7c4d6c2a7a56962d73a4cd2c2a99d32eb8b686e855e4a6bb81a9475f50c92e20521a8476d16c6e541e1e20c9434bc5c30917e6c38b46ab70688248c840bd21557b0b9021c0484be233990664a488a8c83f5974616eefa4b8e5dffd1bdc1e52877bc64be764533889087f45bed5b1b3af61d688ef19e7edbeb06d06b62fbfe8ed8288174eb6471b8e14b255d4229a0d38977fc29e8bd7bfac0c50d67413caca61848fb66051d4d1542a840be31f13e7b94ba2835018f3235a4c5330bca7acf33d001f1c1790c6f7e17235566ed1cbe4fa443e97afed8f45579414753ef9936ccddedfb8104cfb01a215c505470d08bf7c51923430a86d205ce7dfd7168eebac14e06770eaf3d3ca0467199b49dc6b3d44b948053aa41e76fafba5990184bd79954f377f15c03dc723aeb096bf01b52ded9b55cb906bbe5460a3f215f1c82d6794529f6f989c43cb8ac784755307f06be57ef40a5a0909cde8052a696bc82d49ec1fa23b294a2adb2ee089b8f05f9815345baaf5416fdcc92de0e872ddde805d3d1c372a0be080ee1207df3af44c300cff6747f3278e6e7152afba8f8a384410518abf49a02acd5e75413cf1541cb2d2f994165cf0ce1e5711fa68820fd20ce2135c73f078891fe247cdbe1fceb027157052d810e8fdbced090c2a872092279ceb51bca1858382029e24a79b5ceb6f600d56e20fb8bb6a5345b05af81cdbc3ccadb0a0288887959e27b76ea9d6540fa239e9ee6639d69bce1d1c24e2eaec854c5c6f88550900853b8a20ba320b20ce2a4e52d6c06f5a5304009292d1271920a002e8f155c25faad942f946e73233467a57209006b85de0d999f3d1a2f5368cf8ab2aa2495fd84a5f15feea730e83d6a02088663a40dfcb42a778182a987198a82aa8bb4a6e567a6c4f518a548f09a0b7b88892b8a532d7606cd99469266954d829c9cc6229301e7fe29df8279c80a3849949171a9f7cd6bf16b0732167f7e50e16487dccabb6a840c9301f5b8494eced792ead419d8518129f2891cf82dc3670a223e6a852c23ca3b5d59de31dbd02c41144b55ed6dd3da83126160c70991c1ce1907b749d52c1f54e47e058820e0256b0d764b9d8ce7eb0822258916fe6673734873027069e88a1b1a381152b98104e247cfd6d0f53c93ced76b09c0fc90a302b70597c69dd7deb44c6fab0cb0f86d4f133be09ee9aa7700c59f356071aa537e2b4dd1f8629ce859daa6de7e3a526c32f13ffe1932342673ec46651afe0860b5a862fae0ad07f8ddafb575a08d8dc22cfa7dc02b4a39b5acfb567b14410f65f546295f7438571989d570dd2d74c4399834b383073c087d549ff7ed20748e6205caa5ac109ffdaf9d796234bb2e432142c2a4034ae3b2e23ca31589c69c2140315b2acf4cdc4c039b74f4950585c095e5c116fd977c3734b018aed0934660d5ba77ecf004779e98b8ee6d08afcdff2730fa29b916d76f56a8f1b1a7b5594ba9a596566e131e322db66a86794c7c50b852ab998de87101aa898e872778d1e89cef914254f34cef71a8a4d040c9c4fc59ebafb5893769307352cfd3290d33f88a0259ce7b13d419bd9024a4973d200918eb3d797e36296a7c8f090efba5b0bc091f42e4c8322cdc4686206bcd5097300b0c8be1c669e36aa4ab471673245e97d4dd7cf1832d97bc50aa0c95b2a70337e5d5352c125ff6a93f23c49e30dad607ecd09d385f02281f8096866bee091d6854cc9baae88b3850e89cdb4b7ac31d2e34b9b94a1ea4ef522eb4fca616a6d0e405ec66d805d47a2dba451e0445336597c5e9c401357240cfbbc52419af02de1b466bc11f54f06cdc8a188e396de2822d81b1fe0d8d5863460076f897783e22595c77af21f4d92d887a06f8b8bdcc4637d883164eb9861bda4fd029a6d62281bed64cbba0ec888f4208a8165f0926b111ccb19328eb77e130e5f121c19192e9bf30fcb5b0fe6fdd5fc9a2444681ccbbc7ef90a764a2162ecd04a40f19c996bbccd775fe22e18753b84f7ad0210c666e259dacf0913a84e40b576b6963a920e1011f7bf112112d9e8f8b45aa7d1c4b0bf783c2bec8b0a046a2ee210b83971a5064ffcd3069c68b6ffb9cc1af1602272bf78c8b0d9439da4adaff62c2bfe98aa824866892e18ec8714b90740ff656b737754b3a17de7a4977ecde040b6a09d5814bd118b2fa41ad59cc42ba91239724883d2f4f11f987a567a0f06c3768a1f40cc63af089b8f2875bc51c9f8a9f51459ef1256fb04e99de4496f310935538ed5d71c2f57fd7942f5acf02c8a46e2d7f9a3a9634c978747af34dddf5d55b14bdece796e142c36d9e018c3b6bcb246ecd6a213a200dbf8e20f677e4eadc15d52f3efa7d71a524216c2721d36f869842e616d4cfdc941c9c35215d43587fa9a4e2de1d492152a846b4eae7048e582d9c1483a00ed05a3d760b212112b9a43d7e865db13d9deb7fd21f44f8410e8dae31b92dea76e35e46cf9f4d60cbe3394ef5b8cff9ab999c22ca5790acc85a73d2527ee1280e280b4ad1872a0c96daed19fcd34a2ca811439767633377248dd864d6d4f15978c1a80c064653475c3d963a0a9289463a53614b4cf1adfe11809ea7a86e3eb75707de21415d8243cd8278bd01677537c06823751543719d679b6de3c4c1ad4cfe90bafc64ed98037e4ed4e049aa24c9a79a076078d8ccbfb68355b1e09474c39ea131a494471158dafa481305a173aae647b44caac8557a5eceaa1d1b615e9c8d85f7944e3ef43acda5db385ad96130f36e5866aa34851c3661d968d7eb081bcb6d8a49ddb440aae3bb5df2348a6becb536f57b0c6f443efc14f5d532781a2c4c3593b67860e0f5fb502ca98669dd7f2c587e1b224a89b36be1d3e4484bcab0848c18da4ee0d3acb1dfc260c5e0aa4891ac420a102bbdcd8ff1fc7c870b5dadb3e5ad574559f98c762ccd84667f3f98e3479eb179fd55073ceeb240a1651e8aedc862f3221319f89a60825b0bee85e24cf7c3f70bbf30e9c11318a506d77f66c5af89c45ff79a8305b5375ca1470c5c8facb0d8a94d063ab9aa51f90bf7c05e73a95ec4ab22ba7b8079e95e8b264bd7808cf4a3d5d19c606f57976b2430df6bcc1356ec474a9622059a27b71401b40bea00a0432177fa4a475fcff466e7b32159b8020181fcec752dff4edcab8975ca02df5b19cd5be284c6faff49c083ceea2080966f8fd726443217a77c61994f5a2d0d00d0a36b84c1ebe3e8361dc4383fc9b7369fc6ecbb9bd493194e2080e3158489e26364540774eb27bf76ba947939ade728a2bf41978b620b404d23cfe617e68834d248dda64656e9831fc69662248fe4ac45a7795735599c947f64220c901d08ba910a819388051990abf9170d8bae9e466ca21002249436d0e99cc3630c67fc66b22f4334a0c9af37b1754266c41f980b645af08bdb0534a4a5b44babe0214599ccfa19e60a45274cf77ae2555e4788f844189edd7a1286102980478be4dbece968ec8820dc5e65822ee0be8133eb385fba4b13b0f000d5540ad494ad909deba698b57a3a06774289ab606126b894a3eb734ca951db52fecfc60c8c77b675462024c4fc9e477bfaf655c0ea0b3054708992874af01928fdff60355f4d68c398e2f5ddeaa1e31a30c71a6d4d994ebe35bd3ada54cd054572a9bffa393db3f5361693ce086000f5aec47143b5fc71e07b57c8b9eabc0e553a81ad4f3434d43e581dfd3d2f97770064050ca2405c8b228b3875a873f1e0023e710e877646dbec955b662d9f773c83291395e02c63e7f95a3182b2f79ca1de64690b559ef42e89dbaca1c3f496c89e50ecdd6d8713e3a334a396afeb32b93b77607cc785cc4e073afcf9298763c7fbd39742c0352f95442fef723a19370b9a6d95770b236bfe0601efd1abfc294dcadb5c426ff243d4d87f4fe0d63e9974b5cb7db16bfa0648dcfa40db08a8c9b5a977e77d42d8e92f8ddcfd737854c3eac3bf2130cfcc55a11c66c4c88b66531dbda65f9eb43e7601c5ed5b436d319843c1082e094ba32dacbbae0bf389ce6a0227b7241900c93d172c45a162f4ce04c33c6cbc66f327e839b75afce0bb6a551edb14a36c7836ed8fa7e53c4a4be420104d3dda680e8052ca0135fb49fbaf3769ab0a98f35ece987fdedbed44d5079f67dc417102787edec3d3409a1af8afdade0742ce44a0e16e545abd5a4bc7a243faadc4ddfaf0160402023be5b70943cc3d6bf3e8d90225bcc38d404e7f7ebe13233ddf596f99b3a6bef2a1e4ff992b79b3f8d40a70f81f9895f90dc0d4ada740339bbf4b1161594fd84a4242e527ee1f5cb1eb2ae4625d25716d843fd2d43ac037c977ef02e13603cc0525e3a9fef6c8918b656c712a0c15e1c85632cf82cbc62bb8fc1289c52d5d9bbedeae976c5c94f473d4c0c2f8069e59faf28144a7dbc2762814a8b743f29f4f9548bfa1072c85f6c6d20c4c7624ca3d44a8a244c4b31c239ba8316b79f14617224d8820d9e399734277d6af11bb8eb8a720802a34a7a8bf1e63d4f1b738c40081101ede33595797f8f85b29c61b6de3920cdae6c29d61e6b1c76d99cc957f6f83bc71583bab6e512278427e843e2676cdd7969310ae2e5470c296adba20cbda05e2fb8d66431f67a6530172541fcecc3912d37a24c72d107edcf56160968d843cbbb9708359a651e80cea4f08d5be9967fe2ba5474c45cb9733f89da671f35e7499d25929462c3259c03ade5a7e721f604eaa9b6724391df5f78c196014229750061415290324a2e74d228a45c54c3c7b1d58130473c00677305ed8157dc58488e4949ef1886f0c8b0d5b6f66a60c6c630e7dc6aadd837d7ab4b358dc98b1af8175e1d58d585b935214c827f6481896fae4a664cbd2a983ab519c873904cc7665d5a2dd06e1f683f487397dd2373646181d934d7a8e58615d2ecad395aa9963f1efe28d3b36433a8f2eaf421b41ed2c01c67ef9af9ecb7424cec77cbb77665a7d5094d991cfed3eaade828c6306532819cb95e5ecdfb09a811f034c5f5aabf60843478d1d4cf2e65f1c795117d3b82c909f8879e3b2a59a735ec92c3597d944c1bf7085663fa6cbfc65b85e5b4ddcc7eac3305e43b5e4114f0e6a4d3fcd2a90f3c098372f4caffe47942e19a318ab5934d4197920117c98607ac44ff649d9ddf1820a5acc785ca8d464272deea06139f901661fa26ca05dbf7b6e02af4c006eeb54343981cf577b8b07b361d4a1fb24f427eabd7f75027e8d2a29b9b7ed09f9ec9a365cc6803d46f41dd7fe04268a9f01414da085599acf79087b553c6f5376c0586ccf952c8ecd8f2ee1a87cfbd8b16d8f50b7171986a717ce3affbd1400770d638cbd939eefb865799539a22d83df754380815fdcf1719877d0d5d1ae6a60c07a9a79724d3128d160da19a642e1463d3445c1c753eca33496f1737d72c897e8d9a969f081b85af4b01f761a325d50fc4b9fb12be0bda8ee8501c764c1444630fb7bc4ff8468ef9186fa84dc523b8df869acd4ab1e161da772c580c4c5aea8ba2e3c7d1662ffbbadce700682e0ec923c04bdbb9f9b3dd4238a673c94897240b77cba013e8c1f7fc8b54883cedd90c57ff1c3c37018b190f37539f344e2480dc4bf5c2095e78034266003dddc0d68a6496e867ffc1e282aea39dec5658e56220098b908fc9b26a843a7830807d110674a28ccf42af52101a4479b9ac985e2ff51c68ee688d2a0cacb74300e9d096243fd592f3c75043f18ac83e73c69e28434b147e67fe133019b6e61bac00773d2fd7343fb37654db16743a66a4e710f722cc269e51a9fa9c485612688ede36282c769f5851077c49902e5201cf27a96dec325a850261d84421ae30544163dffef655d2f176b7e27df684ec63136a94896d0254c65c83b2138c603ead8b91311e1cc8302d2545fab9be8f9daee593a9269c834dfb5d3d0a25221b42dc88026c9d945fb0dabe5847a9d5863362ddadc8d37247cab3eb5df002ae7d4dc8c9538294dffbeba83712be0453621e3d29b1f5dd639ec0b084e5d4913045f769f8c8f63bef18cc32ceb3aa4f89416c179c211410322e77baa098a2b9e65ce3b919ed7a1e0a4fae8ad912282277bf0b7814f6d0b96af437496c32c1ce4793f44ddcdb5066cc69abf469a59736dd13c519d909a316377e2a277d231aa782f6202a96164508190182bae2f8ffbdf8fc52b38ecc5621567fe41e112992ef1bc589d928b2b04e4a25d30f90426ea4a06cbbb520969ccff7db7ab65a82fee7a2d73f15ad9ba601ef2aaddde07a0d356828fd8628e0226b65c1543c35997922ee7b040402621423563edc35a7655fa15f5a19510b1c00c487d40cc8599b2bd2357def4188321d5f35eca0e37aa607066bcde252197e7b43f7c81b2c503a0a65f6dbb3e5552539ff5eb7350b79a224a61095e714c3663b859c1de079a9e364676b82417d191e179022e0e0461feec3eded5de0d099752aff176bb8aab5106bdb37b229e9161f0e5fb333a9ff3e929ef4ac4a8f5e7fc21559b62db9c2d695f45e12db7517715cb0b45c039b573214b802e8922f2d7b167339da1b227386b4ddd4405956139927752bb03142c62870e9e88d1581f68c05d2defe2472067849e6c05e26b456ef5d1733a2cdbc6eabf96645dd185d4c86883138421045f656e1f96b687e9d8fa08c31eb3bd6ebd0ae315ad7d5af30486de49465b0c7808730f723fa5aabc69a02896ec93e9991c8b0791d146a3c6c2afe76246ce53968001f107538253f96a2f9264d3018461fe4023ad2338b54d94cf2fdbc929220ca4d07aafa470bdaca1d0e3eda22a769977f92591a252c9bd6dadb1626e4e0a3c06e11bded0efdb8d1a91d15e85a0444b3ccaa9e634682d915d195221750b40365fd16a3a20fb59b377dd0bf84bed889a3fe04a1fcf2b280a1d1de7ca60b09219dd2f727bb4758657ddf1aeea4bbc224a002de8a3fbc96613c77c3d6618033679236ff7025e6e8c30aeaee9c653b7569541997823ed77e4b3554c6b09c4156d7e148292b5f0dffe7311f64dd6a0bd7f7b9e12bf147abe80198b65b642a4d0a73881fe94868adf80bbe0ab202462c211d7060341533807158bf4be27ddb0c6de4412291abe05bbe386192c176a8e0f6ebaaafb754b34ae61b4091f8259b0b3463b57bebfa0f30612cf5f87ea2459997ec4530435f85071ff8df34bfd4e35902d72bb07eaf877dd01f8d87d09a5311c42fa58f1fa78cd8923f6c16cb4d1cc9b7148e7349971f502b56ded92721efdba2333720133bc55efdfa8c65195f5273387cd211deb209bf95e15a0364de578e210b29710cac1bec9b0d9dbac27c348575c7dc46d62396a01d8a359f3a1283f235bbc1ab50e5a3fc811045b69c4d553272ac4f4c380d1172026eba0ff93a41f41a49353e6da0becf5f5eb6fb4d4973c75ea8e9798b6b8b219ac2a16ec33547ade945651b61529f3dfc7c8a2355349b97d3154563597df4b5a0f23c41be2d744368c1a44da11ee3723f3dbff81fddcc3b3598db2777594c49e4a706baac715eb7fdbc0540951b0e2a0c424f2d6ad3b530a6067adf6a0b460734f4c2f8ce49e7d2a4267521499bb796527f575c13e35bf014af5c34ea8b4e8eb7124af2bc4c4fe24fa1810e38415d92a96c027ba0e95a8a9d38ca934c26c92f7f5ae6e88f8d5d428da49dbb3b880062b0b3401ea8e12cf16293a5300c4ae724dd61ada9e3c85e9295fce3cba23826966696bacc452eef907123bc6e425d2d84a3b67986e9bffcfc1046971a2c7a9980526e5a6dbb74a287e7b30af6c2c47c19c797dbde95c93ae42a39f79e065cf12d4baa222b0f6a9f463529b555fa04db85e321d641f35a7474a36944068b5fec7cb5de9383a4b2ba91c4471f3d30d08da0b58351ce602a3af717ef04851e5c1d387f4d85c503fe37afcaba5c85fcad2d2339efa4c4be1c492f0fc24fa87dd84c72bd6be21aab181dc4894ae4efa10c5a0ee0846b3a64f8cf37894f92bead6146a9af17417e92c3942bf2a8200b2542a3923785dec68cb56e807f437b4fe235edfc5a3ec0f5cfa1816665345b68efaecd113292c8c338f04914cff0d57cde578d490a188290398a42a4ebbca83e00f522134e1ae6c544e2cb362e5dc924bae68ed2aa287d836909baf59a03a05041d3df37ae67d3d4f716956a4ce1958fd265fbd902935865579ec4c4bf3c47a9a2967622e807043da2601b73a8f41c02335d208ed654d064278df787cc617b963984bc896f73664cc5ae1e096c9cfce22b90800f50ff81450202a24402211abceb75935e5c57a4bdec067081f3482b2d1c96f92953c7854f77e2a9bf2d72430d8f0ec4b4fc92c508833604152bcafb08f0f2d1c992655ceee8c56fd1abfad44e6f5d222d14a3683dbb12ea41bc4482b4932b456cbb46f13cc3cc3c5a8d4ba7b5b5df405ce8899ed5643244b87d94b5c169f23cc47d7b8ccbf63a23aa3e8193a83a38753256524f2e57fea09024cc1ca350e7028eac07202e01174a05fd0467b4b11b5c175e63d1a9b568c2222bf369ebe7915144c697af28b4c8efc9daa641947db2b141d6f90909d80f109f8aaac7c2602e74da5a6236e14b65b2d4d28684e57cfe9a512c9bb580012ebc8c2f903ff4e1c8023bcc1db741d431e6fe357e310bd08eccce449315209c866f62450d0862b9cdb6f3d5f50dcef4fae765016509c0a281b2f3539453be33d365a51e12f4f862a221b0ca61721d642c4dac4a2dee2f2e89b0b80ccf1cc040996738097922ed11347400b2cf4720a71e79f051df55dbfd499af949793f86fbfce35b36958a400fc3edb7f9365f5a40543943ea2e07570b03706a02d8313f939909a450d23d86ef29ed8bee439979cf66c9f21684378610ea5acc483af0ad57bf69c0c05f77e897f2d733e099301f1fb7967a99c827f1b184d84b7e10cad835eec04786e3d517442459bb46f5a2b13b0437eeb33d59c9d266bed4dda209baede3a4ebc43be90f59ebf409d6a0b273cda7f6236dacb4d1fb6a26187e0a722bb326e6f46e43494d01c0ee7dc083f048753e39d7f10e889daaffef5b82f86ded803cebaa685f04f03fa0d63af65a18d27f5683a47fc066719014db74dd9773c38071d60b22e7a36610dc85a3d9920b36cc8c2ce80a1c5dc5a128197641d6424e6329ebeb3e504d3d13b57ca9d664fdf337cc6ef4778ab4b7f7f1e35d36cc856a6495e9fd3f7ca924c5302defe7d686a5a290145e16e2ed69ef68af8ae246a44a212f8946916b44c307523ecf5a1b77ba5209983b793ed9c67b9b019bc703661f350407b8f75053837d247f773819b71d79f08aa44c4240b1c5b651e3d0aa013211910ab905bc074571c1baad4d91bb27e3bcb66ae18cffdebd41e7423c6bcb1fea8527b6dcce68d98980e88ec99fee8c15c93b5d40e6a28b613dcc0e909e5f508075f45ce86936683964ce09d11ea5c622861af155e0f135fa7cd02d8e7b60928b9064668e7c5ef82c5584eb2d14c1b136b3432b595831476b0933d88a9555fad85e16140d56d80e43e99110f5b1962df2c4f8d054b210d18ddbab46c6603a35bfaff0cd91fdb944e9e7cf6987f8c610ea0545ef2907596944edf0782a8703b3dee0135fcace7cf1aa95bc85bc681eb17db1ea184755ed0849c1a6501ff11c397c3a4fcb936a8aa3a93c5d0a7c93a547e7f6fefe067a078f9c610fa471efe34d3841757211afdb72fafbdc1ba5ff1e912c8c799a8ddcadf740c69e2f1384a055cece7f399554bd1574966d851b6a9bce4ec87d019217bf7a904b276913cd378a1e9aa9e4989a8d2eaa90d1546b2316705c70c6e60717b7ffa29c1d5468a831458491324ff72abfa1a49f4c7c8b65699212634d9aef0d72ec5d1d68f7efac39fd5a90f1f16e5e065cc9a7516d8e98f5a03b3689ee4dc242bcaea93f68eb6abe484af999e9e71c00b50cda6c9a5c99ef0cb213e62b29c9682c09bd85574c821b35fd0b8026071102eb873d1f5174abdcb51824009ec00d7b3a11c4ec50cf2fef187811c8249ec9a51bcea86526e04d18d53c4f7b76753157c9b397e56be0772e91ef8019b1c27fa32b651f3060de60728901600cf3658d8b1a568fff9497fdd453d212db6af057a2c3ce541c6eb0a3b9eb54f23e3ba2ebdc60b14fd075581718e94078465250e62d08a86e8962969eca5eb60b634629b714db09b4e896112a6bdae09f5abcba13e2bc94f0f919b2f3324cb9e3d8e1cd638bc9951f94eb0ee99fe37b94c0b4eadfeabdbe771d839cd8118e2e02d5619043aca99e00d6be9861e800846ef6f1759ee8790be87570fe5ad8c396ea9285f12885e7c2d6bd77db5ffd63dd23366945198fd5acd244491c139141589cf8e60d9a6e202cdfe05375ef0220a74a7f71162408886e6c630eed0ef549e6b76c10636596ecb48e01c55f409a93f80fec2cfad8fa9c86d68208eb69d2468fe8cc048c6e4c0c3ed2b690a2f2374a8803d99b3be00def168d3dc6a95e110dc68cef7ef98c1d139532c4257aa8bc181d1c10d8aeb2b5ef8122764660e6da083ef1a7d6794d0c0e0b72b520f35b6b064ddbd371d04150927a736052a47f5a7235f6820b7be2d4fcb3e916cd78efecc34bcb0e72166aeebc06800890011011482e010689734362141f923eab1f500e87ce1d6edcd459f71b973b9a8003611e3e105f6839fcee911feae99875fb225f69f987472012
+
+# Valid signature XMSS_SHA2-512_W16_H16
+Msg = da3142f27eaf1aa3f28a755a4f1e2327e8702761e4e5d597ceb6b880776d228461ce5da7f9c4d1f78a3cbe10b31a58f34aff39144dbfbeeac0fd81d92580a555dbe40476c745b1c0b5a5a095551eefce0611acf6e2ef2af882d6fd180d0d90d16116f00ff8a16a28104c02f8809e2a8f1ceeebdede768f93857bf00388cdd5919154031a5d57f5168a019e2bb41146c9c3b2498696e7e68b76b70e580cd0e3a32102370c95ad19a68f231124aa4a0f64f75aa73d00b7cb11b57bf957bb2bf43c6e667d41c7f45155fc4512dacdd168e982f8c557c76b92aadcf5c31f4314da4f7024c116912e549e0b55b66560ec924e52aa01b8ed607e7dd6e8998494efff3f836335a4cf8be7802b82a6197e4395f8e14847b2edd59bc3b25547af166a9fb459dc287d39888df3a6b2e4eff2daa86e73a497a900900226223ba058de997fc37e1dbac9f14672988306
+PublicKey = 05000005f52727df94950dd68ef359f9f12b18757d423b3dd544f222dc9273cebd23aa705609d32f4a467c066b577e0fda4dc544bc0f1150b0c9f6fa647b2bf5a4456594691e7369495bfb858b7f4802d34bdbdf4a1eafa35f64cf163c6d9f96a180a0370b405212562a67a275118a219ad088b0540d3e11f8aa79884c084e622ccc446c
+Signature = 00000000000077c19178e908300b5bfe5103ecf766cb6a83c8d36b10ca696e012d43bec5f29aa46193a842eed614cb28ff7157ee1ae4b3e1ab2ebd0853508858078c12269f9269f57d6875a43edaa64dfb845b725da189f30f6c9507048cb163d0c2b3754aa32e8b6fd7248427137bea99ebecce527148b5b045a7d78a30a1fab2c7ab3d95f0ae3aea7104efa54f695443e33c257b7c64a1cb9fde8b8347ed774da89ab076366a273ec98d0cf4de2a2f2f21a0fa04090ed63e4cd3e18241d82f68954f9fb30e3dc880d3cad8952b301a15faccf280e1271950cbb311505e889f5de661af293cceff5003e96729d541ba8b803605d517bbf38b748a09571d8e4843348d8900f12b9cab3b87a96e9e7942a483a1c6a479cfe5bc04fc671ef62fab4875ef7930253313aec96fbdfaf66e80be9b6e954fb65f61c782816b079beea302b14079845eb0f390b757f94e61d116092d3d39ee06da2d512ca141c221a78394c18e5cfb5d8269b8b083507224376c24210acaebb00a7d5bcdb5be082bd70b537be53b9b07649fe31ec0698d033bb3d471bf7218909cb20ada231c7709413349e72a301bf43eebca5fda1bf4c9e50daea3c582870b5525c89a2d9a4b9f714c10867161237e492e9809e7a6fc1a86b39c1f9879a1a6515205417c8405711cd4e361ac5bf158ae7ecfa43fa409d157dc541cf6afb4fc7e7ff4b515a9346e84e641003ef6e9e46c6a700432aae33517bb4cf22fb4ee1391ff74e414db7932dce20f0890ce0a182854a96fb0ccd1237a7ea40e0fb5ac1fd578610cadc2cd3d8ec2d518e794773174f99afa7b8a2e440e2f7e7dd92a034041b6a25c2c826b9e9ec4c7b194da9a50e16729a95f5912ddbb25e36ba8ca71449dd4a6e15964c9f34fcc35bccaca657dea8ffcf74ff618e1acac0ca005719e77d46db19edabc151be8f5fa9c9525e35053b7e718372369902cd8f4a371dfb79b5eef4d1723984e7975f6ba61eca7eb4a33fccc804fe687d3c12c459b42dd9294b6f48842fff434624fc7674ec4affda193575ba4dcb088ab3e34ba42618805a2d9ab1ed6ac10eeeedadebf8cb862f34f3a0c0017823927f119d1d3df780c4cb8795867cbfe3d5f79701dfd67fc357b0317b1bf9131c8242c7cec12adfd948c50b815f38119629e29e1ed7ae068d6c8a1985b617a8011f16381e66db5864bfc08ecd839a2a7b406597ab1abaf68285fc2ba689174d12c4234e3c663c79704553dfdd33b45e83ff128bd64c535c54dfa3264d7156c7560a558810e432138597273fe1a397f8411c9e106f1cd5fd7a4f10dc0338bb432d7e1ff9aeae54236ed85b4d19d921c657abb0d07aff3ce1897c5af6f812c58e085f80c4d9af8d565e83b0e00e1eed67d8efecf41954695441e53b7567fe3320f030e2d72f20fe4ced5f779584f84f0aa78eef4d679d1e48d1ca2a5b09757436767701bb4119028437a28dcd2d76526c9e6d070254e740831c328ac9e3044efb3110d738eb5989445a6ca2a1cf3b1a2e50e79af40972770c2ff1ac978107a96b3f666ca3fba772ee3fe3146ba8e6ef925b4f3e92cea57eed023f7dc83fc91cbe1aac204cabc144b304fa4dd46267f632421192beaabd5bc91db162b3e10e12affdf5c1465df05a384028d3a559d61e4498731fbc94170fad0ba17f0e703b3cfd43cda50ca477cdb04196f618f5703231eac64cd84b031b367351b9c6a04a64290678ddaae54b09a6ca9183b7c2b7d7fb00e056bed1404de223e18b4c9be322eaf22ed03f65f9b8a81c770402a4f149521d31732b0073131be837ee54b926ac9100fc4cc7580382c92856e1c7de47f3ca282ea22b246b7eb02e927f8f854afd96a3f392c07751e2929988e2c7197502f90492d236fd69317a49998101588d507df186dcc9c35c33462e99a0ef0122adc5debe9ed71b6c94b629bc9b49141e816b311462f9cd192268952871b511c9981df810f421f790a4435e9031138ce1e51f3113a9cc0fb1b4154c3280c3551532d161a3c994dcca6a45386ac3cc9e230438968c54237f21659c8e6c84e10c4344a2e3e02745e1ef5ec16ca68fed3bd006ae604963ca2e8e4142c4d4034fac1031159d2fd069f9f547984f2a78234757fa1c66ae3d3d6322f7401251ea8892b4020d0191ee265ed53ca7ba1a2c2b031060b15cd284e74a98f727d8a156d10a7be3ff9222506b76894b632d9cb2f84763b9fc52917b9ae6d4c68cba1345d64e1817f17db438e0ed406c4efbe11ad7cedc718e63177ee4b220f772a28aec73b376f2c9541952ba61b705c123bcf4909d9a4084fe23f889560f4a32604fb5a55d6f171f5daccf91ad1b0806aba1d061003394a8855dd3161069ce26ad159ec5da593d09d530c53d98cdbb8cc77dd3f3934dac7c7b4775bbebac379acfc4027475d2c48cc1d0484eb978cfbfe2c70300dfbb15fc5c2b9afbe4c38fef20cd3b230023dec401a23275cf1410c4bf217e21fa382e9a47ac5ebca7da7d2e9d16a8402f0aa04742b89a3d2c820d87844068b9dae642912642246e7a0a385c03735752aded0a3baa15d8bb5b573f7c89bbca5c19c92ddab7988f0d5dddf68e968eced2839c6bd9c562e55fbab91001bff4140802823f4335788f8e04a4d192a904c670ce3ded5325a3d72b1a131c5d8aabd1ab7a95aa6efdf4db2a4b135b34696bd0f4397913a527b8f597380cb9d31b163cbb5c848032556d0053c5ed2001dd581067090ab254c5c002029863aadbcfde22ec26521dccaff6432b8f806a5bdbc81490ac882885b1e0475fe399ca72c35ba3d202d79a0ecf2a6b70790ba32e97a2daddd015baecfd1f7820545305eb299bf23865642d9d7bc1654dc73159710ee7b2d4f1abf278690fb8e72cb4d65207d590e9dcb9e97a9dc273e5857ef054af2f405f4d1b78e6186fb715f86998ce5f1190e2873b41b457566e00a9b9da0e46b7fd53ca75ce89e419af946230923c39d6cda075a07c0961b70a57047ac6884a651f5b324bf50467f6c55b142d3db058b8842a1d04d4d7b5ae4b47448a6a2c22ba56f90d4b8ae2bebfb7f7bbcbd5ab52228e8cd22574650082e8c0803d3e3a95179444184ca47a2840d08bab97c9e9ae649319fecc5e6b88e4cfe30c3d3cc759e84256d2134f0befdfad900aeaf9558f4cb5b2966855aa14958c43bab5d60cc1ac35b40a5c079c241e5fc09d040760a79a4c5aa32a0fd673fd4b598bb125ad7b30cec8eab0edc180d65c13e8c7ea618f4bb21af82e504566fb891cace40f5a732aa1029c8fe3f67e2a360afa22315430377bf8f3074daa7ac8d694df16e999681e484cc30faa4e3f02410fc8f0c171f3361d07df0daf2ea3104b9688bf3fa18718e58aa179461228d26380c0e8680b89da2e01ce9293564f08ec306c602d0ecc4e7a96add0155f69f32a1c4ed96ba80f2b5060959d4469145b8561285333b82c09dd1ea36e2baf7917a68ee16fb7e1e8ccb2f4972a74ab4131cdd8941ace4f36c1243300ccf7cebfeac1c93feb9745bea4234d450832b572a7e19eebf5f9ced91ed0ddc56cb51b355aa1251f855a991ea0a8ebc564b08161da1520b3fce1c99d0efb01ae05cbd3b81336c518fa6c21aba3b31c258e11a8890ddf88382251c1399b3b589d4f05107454936850cb10e3114379c32860dda72f9a1f3a0b93969cf03e8b5fcdc25d85141789c52f4539f0f33e0bf147343cd3015e17fe3704c9cde2f8814825fe434dd22cf4696cdd007190376a0897fb732de974b8cb7179a923f817c0257068e0072f5eb371321307abf6b2943f282ab7a3d5db3aeb793a9a5b60f1b41bfde8198b37fbafd967c588660c2c6ca70b0070972320425ee89d1116c97270aa8558226744cc6c2ad35bff5a6a09c2a71a26ca48f0cd4fdc4c12c636fba061a0fc3e3664eb98052f142fade40db598249e96b4b15c06932f738d0909b5990118976c58f64b7159cd3e38a259a0cb84616398e916134bb8e8a40f3ee8e021cf0851e1f9e9988263fe8a7fc9f49d9eed7c9e6ee27b52773c67fbb8b1128f3bc1b19a0121a8a1c9ea3789f7b1943f539e8f32b7c01067fc29f84136af273a0afd85e72858f95dd24e32d92a693f6a0a9a844c83cd8a7cd20fb154f70d5fdc58427282a348f65f982f0cb03ab8e102c6fd0c6869505e299b27e30f41fc95297b91433efe03e0b29cf53efe4fee9db6243e26d90014e9898a1e6df47e4f91667cec3a8ce33a5b66c9e334f2f430f021f9f0e9acc250387c3680f2a8f49545290d7b4c2d5748e6fc8387bf0a3df318866483d00e88c2b2c4022ac0a6c31319792a7fc0a54f69711cec8f61f2c9497278dbee2a74770eb1753c0092317126e9e6a38c14184486823636cf8461e55bbb6151104a55d91c97ce5810b86ebe1d70cfca517c54050cdc8d4a036781cb508ebf5b893193bf19cb88f0a580ec382c32f78086a62aeb370aa2e30d2ce593421809d092e241bab4d43b5945aac05741c8c7dcb38c798f54742b829421fa91c804a5197828f71ec276822bec7193a93a738f588fb807cab864c4d331a7bf1913144713561bc5cba2b89c7a498964b7efc780b1cfa08b20e4a54b663fbbbc57cd1f0e187818f6e272c3563d8470275433d0a0a270ff6692df977a1f71246b18fc87a08cf41bcf221e6b99d2a0d7483b869f8b5a80009847c25e3d7be4c03d4908ef562cf541e5ea38e61a2aad5a759fc2bc8d536ea4cc0306343295e5446b951f399633e0603a26022111fcd19cc88fce9984a577fe1753309ac4ce8fd7e33d113890fc1ba3d1eb88f6c7b47c74a7a274d8f59058215ae3b6a81726ff33061cfee05f64a860a6f80743b30dfb9ebe99be83fc5e7848e52efcf23b0cde37e3f3a6328d8dfb14eccae3f28e4280fb8f2a1b152f5407ff72b2ec919efc69269873e0cc2173a542a7a9987c27520528f8eecdad69e0798fec4ec2aebec1083c263c83c0ee2926eaae98926de222f6e7cb79344df8e199c9b2a8e1e5376863850b1f6fe6666cb529be4cd078eac355eb74a110d9d1b650f52f775d4d3aea474c2ecb13fe03d203b45952b7e701480e484df8fd1dd1094002baeb1684802c40762119d5a90da377bf8c32139fb60436bc6095d1084275b4e730e65015e4630bb7d8c515f4e5bef7a6804e200a6f7dec41f5c2f02a5929f15c52fc9df1295f8363f4c5b456cc0159dce58ea22549daa697a5305c35db191c5d9c78280397b7c8040010d039321e56242f99da9ad4f03fdf52525ef8873a6a9d5ab509a177853416e7c073070ca9340b08b015bc0d137ac920a17f34a9e8b9ef2a2f878844ca29ff247e04de9ebd40bd3ce9b0da58e7edd663c140b2a66994404bfbc91b8d4239686b80230d7706643f5a06503b3272e7da98ebd459baf85382d0164262facd6fdcf3f5acd6bd9799c5acfc8ab776c260a781ef9f0908b5c532958b4ce0aff1bd3ad66bde76eae1d3a23cf67e089f98315c84ffe60a36aa80db22a0dfd49f02164f7c273ee88e7e64a011505140c33ce73c8459787b0a3d2b32021fc04d1257882e8afa3f5d0cded2341cc0d618e30c42e9668fb72b6d479a86b91beb13078040e3f4fd8db835917f161dcf559bbb83b667084e5f31216d979c5a826756e3ccd410581cd60427059e3c65f335033729d99e19cb379ff064284da6b224ea668c1755a932805b9ade999b6f6169965ef95c3f6b4ac5547f2fe26ee35aaf409e5caeefb5008b8a5db89d8a6921ab4283a47fcbf315b9259d1323416ac941ebb6a50106e18d7e98ae980de70b7cc9e12812b982049ad76f2650b314a1531fca69a91af535b4b3a5c71c17f939daa0e411cd7ae7ed6d94731d51750cf3595a2b4bc1ba6483e814fe321be8c3885bd0219395c7dd4c65a16ecb0f1c254336e6ebca97849b63b8130089ed00a91633ea93fe522105d84188af00a25415b715bfa1b9a201a6c8a8311c40c8d1ee22f9b4d0b6d61fefe37e7e8bf8a26ded7c371d016d8b82e4fa803eb5b6e7ba5a23e905ced559d836e8cec459f2445bf8b44edf511c10a481641f56a42e7a0c1d5a848333d82fbf5d733c8138a8a42de0ef85a4941f4949dbb7a079ad1810cc367bf01265dc0b8a09e03ca87f32cc29690d5c22f9a6eaef312f1c302a4220caffa68639c7301ee398f327ba225204a5717d75b8a346721984459df6d00b54cc73793a1d89a78407c7acf80e0d9258e7b72b40d5fad963cef0cde9dd06aa8caf9f0ddea56ebe6c29345dc9b3df3fcc09cdcac28943127600ca3c7c40d58e4364668315c7b29d55f7d959788d6a61b504a4861bc8faa43fb082c6e266c37946a92bb8c6dd3f6393fe68ce3d89d099a314a4de0f17773439295b8a1c4ed73daaf082d4a9e307f1ccf5a9e79466f3ae888af4b9b8d19317b10990951663ca596c9cf063a5983ab3d5c03174b7dbab8f66e49bd78c888ca4a5385bbaa4eb14c6086fbf168b2041cac2f239e466f06c4ab84bd267b770289f590371b36c5fcd60257d57b747cf5220e593ffd0e3e002109e3f06c1c3783ea0f2a44c002286a3d5fd68472ed54a00faf2927ef4e4ba91e16d84030aee5d125c301e0d56c0c3665106c40a30f2d5c836e3259bf3e0b10dbbc7b74cb46141a7b14e95f4fc30ff3a5fadd10da97c099ddf07a9bf87d3599f26be7c83ae65dff87226b45edccd02dea93406aedcd4df8800f9fb14a6c30884c3b73954ed02173242b5176beaad1a8740979eac10d46d3b64e4a2dab5bd4979b095be64d51661eec5b7abddc29e29896cfee2c4b58f6a092f8d6cda954d979c46cadac5ea6b64bdd10734229300d5320aac414862acfb760d1af6ff30f2517ce820218a7b9f28423a477b73d220f5d69b949e78e98254d02460f65c21660cc5b44155acdb0891a28429fc37053d7f2341fb6a60f58e744874e1379ac1f8f44b5d5afd848aaaf16b1acb67a8267959fa7bb63e13fbd9f58b5adcd7dd88ee4bdf3522c517f29b43e581ecf8e890604336de77350df1e7381a0c2241bc954624345e8acef45b97a06f8eeb9d7827a1820651be6aedac0199de93aad5db3bc387524fb73c3db1bfc2a48800adb3d2467a7261760e79d63540112d6cf3429d82fb49f35ef8e31a73fee72ba850f55d1322492303ab7162126bdef2167a3ab60d861d5cb95b7e690739fa690fba186ff812f2778d9757ae581bbcb794fad1ede2c12435083355c271fdbd0fb32c6b585896481d3756a046454f5d2170e7a4d7d0a92ad40fc213a228761317cac028d8c1049992ab1dc11b921656fdcad2bd83306c0606f969069fc50c61bd1549d8090b64cc0bc901d954a74afcf61bfe961a6fc848e67bb40c4b11fb0c139150b074cbfb6e85d0a0e5cc4586dff56a497ab93f6d841b4a0b3855c9798cac78128c4e44e4934c398fedd3fc6cbc095790a54434a4e53e80a414416ae48145dd0180c6a69dd8a7e92e36b871a0f9779e556aede7b5a6ce884de03a5edac26f598c355edb52a7274c1cf1411801521bfd514b6fb7435447ce49dac59e8f8e12973a53ebccf4bdc910b823127ee1c85d008d89e16cd576bde6deb1f044bc69faad3e7870a4477abb1e0ce41623e17ed86a7ff0fbd6eb6f430b88a2f84fa7086ff7a4c938317d4a617a5c1a0f88f13b2274a3a34d6403cd4c37897ede10ecc1889b286b47e1766fb1fb743ee5c2e3055534a3e77f63498a24aab02285d70229ec8e9b14936adbe600c12aa1db42665d94ae73e474ea6447e138df9bdbbf09f490d9d8b760c73be81239619fdf0825c1dff0471d697f3e1c2654c8503b3790e51dbb01feef1ef0a79970eb1496d584e4794a5ddb308a42ffc4200a20f89c07c482c4f6de0599af622b6ef0ed7e05fa310ae5c4b2023386e0e488094b6f8d0cce00c2089bab155c77d7985ec15cf8f8a3edb484091b79a78290b5e526fa6aa7b5e6784a53fe56f311ba0d5c44b4a57c1651bc55a35eef56907ebbe667ff3b6768e47e69ecd18dc2a8eb2c16a5d1a02e52e592a3382806eee092ff0b3a7b4f01f74b5203f50380cdb00295fd603431990dce26892ef72ff0be487ed16d4bab02f3f1c74c605b149164888e91f41a98ff7a9d0df16825332ee6eccf76617851db00bea4f13fd4815bff3a91219ab28fd3d86bad2502797646fa4304818c533efd655b135f41c181e3f112ab3232ba1b2e9bcc45f1379fda4c2a1520629ed65b16a9e2e4a4ba53ea6010690ad9a5c7a9603e1a83305f5c818116dd14e2d45c67e1431111b76ccb2a88fb96930c45477fd75c42d80f3abd34a8e98e57b5bfe99d56c9ad4716a751ea30fc113d7f9586121a7e8a90d69a03fcad9b213935216f7c278e47d50c615d4ae44fd9013aef76981c992a54a80c621926377bdb398ac588aee4a4e549d73c82252d1441bd3648969bf8f6cbc685bf8899bad38342e57c228419495fe907fa8933ed2d8b6e9fef5fcfcbdaf096753a8798ce5439a144bf1f841891dbb433fbf68e4f390d4ca4d2099860e1303dc9344afa42ba78fb549c46cb2443b995fddabeb2a50959d01ea72b9cdc9616dae1439ade6cd2daa756366b92aeb59d2fac3dcc6baaf5ce56a0ba9ed1915abbceef0865e0702004f465c04868e3a23bef7837fa4ec2a49244671d6c3a74b79907d717c4d7b1a22552372f7544c5d28aaa744286962a92e4b1f562dab8d66b4b2e2eb24b624165076616756c6a0c7c4005572adde58817613a98c164ce6ab120237ed61aae80c2ae148c9b3124581e39b1573a303666866516e18fdcbc76a8a0b241a2a6293d12e124e8d78349d2a51019a825f365e19282708e8f0cd0e57f5d9c526dfe1a0ba3fa2aff43f4eb18054b3b5ab2c6a776b213450871df08257ca6ce754285f9890a990a57e37018298d574ee0a85a215255a1bf82158dfd520353fb052ea0765941855c4b74b2eea79917efd7c5f98431e86bd8f9f19e4c45d6ba0e9ee7c2e19a4bf71a2875705e0af19ec6770b5ff80ac66470d70fc8ab2b3fd08e7bb8c9c2c952ca62afd08f6c55893f89085bdb22455b342c5cb6e9d0c3871825f5a923c0628704812c6acfe3b7bef10c93a6b7541d4cde3570c470c07db0043b5ff76c3e07d6e8620a9385bf15713e10bb87d76ec249fe4057a2bfe789500dc4981784d75c078dcff27306c0598c85380d2d8e0154f5b9cdc5789ce0f26a57b3a0e04c1e1bc91b8060692436eff266f7ad73538df445f8b5078467d05962e63b8ef3f3be29869ada3f523d7b43cf7dfcf627058c79b44a5f986e700379b27a43c7e1a28dd2766eb5eff00967477c73a119c25a0b8a881aa31c260946786c4833431e110a8528fbd90dfbc41da66af2f73e0a20e0d241c04df7791bbba8b686c23dfcdf233831c6959f79cddda6cdac622c3c226c55ac44e0c73243a39c7f3b6a8b41eeb59fecb63c17f538df15ec3c4676b42b0da94075d50c61dabef577dac4198834a0a87fcaec3348a79510d4b9c777ac550eb3eb3b72ef73d948b40979fc82919c776e1535cb8f55cab19ccfd407a998c16034fc7c3dfaf27a5a397cbc91177746bf11f5a78725f3f8b2af45f973b276d79b19a5b7f4d2ec3958c519ae58ba4bcf6485fa9f58c850569896cf9b6cda7cae64dcf025d4778e329a2a9e4c5a5febe74304a73924c1bdadc57a8b1719d76854d2dcb9af0f0c308a87226b95baefabb68141eb075891b1303974f70718fd48cdf4d2fca1ebe412e30faa21511257b5f82f57e1b3b337131507f66fdbd5a36db41097722f401557f5fae06d043cd712de1669217d22ebaf8c1373c9b56ff6d2f2c459bc1483616478c3a1dfe6b9cb769b482483350cbdc353e8eb90d09a480b8368af8255322a1c7d552d034060468bdcb49b29461ae69564ab9d1b128386a50d46b39b843936333cc3638947a0dc16f69baa84a78e34db481d1233646fdbdae2c595b1bea7c738cc3a89f133de26c567480bdef6a250b97ece65702242d34498b11237f5d24b7afcb3a2f9d0262535570dce2ee24c84ff0cef7cd2da67533afcbe6304f8ddcec62f649bf032d711db5db00c4ab67801480f178ed31c44e2eecf8b59f9346add7134fc616482d6c100421466e528d0e152455aac759d8d928e375d78878afde24ae811c62f5230902910cc53692c5ecc3e57829a2b35fc662aa279118977804af2c8ed0c6f7cf523673f4df80accb72888b13af57628e218f88634d789a77b4dcaf19de5a79b656b9269a75cf146804a89582d71acbc4836987b7ea527d94bf2c856816a8c5053c8acbabd74c0f54bac15f4013344fe90d04a5306b4bd68bcc87945858c4e18580574b900940e72da33c4502841db30a85234a30c2a33761ead6101d9aee7e41b59d984492c2db06ac89727a47afb49a732f571e4527c583b74bcfde94533b3b1ba3442d0bb961979364cca21816002665a65bdbdf0bd7704a5df040644dc392af1a0be5ee7f1b2bb73592f02ab0361ecb9ba22a149c9d850aa0ff0bf0d77144eda9b3f7b5d42afb3b108e068816e4bb71df3b2eab4a84c413316f05010aa0471aa128128dc0b4aedebe3cbb50dcf9c756b5675aee1ad45a72ab627c041f565cda0676ab1bb53c67b4b13703945751769db5386697bb39759f7c5a0c4fa3b7bc729f9652574ecafc97a2feb12d9edd39a893f754e380fbf84be1c4676e284cc34a6b1925ea85b52a6cf4a7ba67a0946d40505905eadd437d6b860b04689822e5078adcc5aef0e18528d4ed6431c9a73d978135c1d27bdb0c454526448700f963e4dca830467c0f8cab060ed1065d6c21b9c8550bea9920b74484617d053b4dc65f86467e9e845a09c04afec58591700af994e26da470834c184ff0ccc61a2b22886bcd52acd3eb7e715a78a3366a75b65bb36d20b63fe134ddcb0c15b366797360c046e4639e377ee4155da0e0f1b427c79fbf442fba4c4c15140472ce9be21703681dcbb9297e02f00b53e5d896a4e993a45f07532e4389c70b3f2185a594ce85286a1bdddba4236bdf07cfced5a2a13a27b1f7b21e86e19c0fc76d163a07b68d3c04823d5498eac0fc0dc708c7242abcb7435151e7883fd6a559f56696ada57ba47bf608c1bbbd96555fffbc2ac6159901e73e320c3e422c17bba66ac9b4ca48770f0a8c3eaea066f25bb1213d1780c37c0e4f5e1dd14814bba49a27d05a9dca82af6d2c54e455c0304c3559f23555d7a668ae5780ebc68ed3422b78ff6a3087ac370d047d8339998971d9b07d1f73d7af384857772767c396cc8880fe2bbdce3f133b7070db2a8e02cf6379c5ca0ad6469de6508c5e8aac41ea1e13ee9005fd8007304d10836d625b9d7179ac58787e55d7f73cce7c2b0c6ac834a16c9f17d6e1344a5e975c08358032aaf18c45b5bc3bd6c5288c5c9c73c1a763335d8e6815de04730ccd0e7070bcf7cb92f1aa6b549a6a8350c685125dd1a1c0f1aa1cfcf7a81e6500fb1567e46bf192d8a17a7edc6056fb682f40c11e6c6828978e9449dd45968835bdcdafcd296f2e201814b225cee02491b851c1306e32958e65366c6daaf3933f738f44e9367baa80fbbb561365ad8d5fa49540863e83e222be0db3b725681f6c046031189e229b20450071a00c5a39925345b92e04e7b84b0c3f6e9c4c67e4a2b701287bdbfac8c3a130f07ede6dce7f985008dfc1c5d10ed7a768990e5641b4206726b03030a7d14fa4d49d25b03ff9c9a8bb2ac7a9ab4a534b4bb60aebfba3f9a513886006f5564f90eda29bad8cf78395a3fd89615d9012b624d7bbe6f3424294c7a243dd604e19de387695666a00457ab729b89b0bd29f8a417c56e04c9d266f940b545f8d2e04eb4a227fa3d2a119c3407fada28487a5fae09a2764fa228f884c06d9fcc395dc6992cb2941dc545db2f400665782fa1ade2a419cdddccef795b44cbdef290444e968c5b1da3f405209dab85a02b36445c21d286de4e1ea3033303eb522f28c3e0846c2f428f25933e67b71b324c9fda8db626a2954d81474d39ebd380f0fe46fca52002f4012aad7eeb657fb8b8b17e2f353f6e83a09ae80271f378a542585621f62ddfd6c5f44cf2eebcdfd1feaf610b0f9650696b4c9f464c3f0e1d792784b24a65d5b7cf1787aa172b11ed4b83001d5dedf65f8ff00b68d2fe9318cf2da23c232fe51c8009701ece2a3777dce46af9399b81a8fc655e81eac797eac705d5ff14ebc29af7366b8c932ad54c0ee0d5a66474225643435bd9e7854b2df2e881a9384cba3470d6355905f8e62f8ae11786c3064ea353d4a24432a294be6a36f85093991c1c6081b60aedcf561d816e64e3026504f7e7a3db302f9aeee209cfa7d877c247e78300988c7377c0c674c20c420b6dcca75b31702da6ed57192991bf2ef54a93d531f0ff35b9ae4375174cb781ec600163bc9fe4fe36c352765ec0ab1a2c5a7405e3a303f7ba575e54a7c304a1a560a05d1bf3829571b439101221563871442e9db42da2e7afa285da8fb7aee89e0e8c10c4a8a3a39bd612f77413f9d42d504cbd3a4f36a67b23900876101e4c87fefe4dafba236c80fc67305e7ee368f101501a49d984c29ba222b0fc1c39c0a88eed9e0d804db580639b94c2b96d8e238425ed9dba2395fd206eda00816b377c72cb131301658b437fe9352c2b91aa3076a18f8873601a38cb41b38b5adbdecc06f62c7c6e850699af1537a3e6c9fd1eacbc32a1b0da1182c57ac9de12f8c07c2bb11aafac3c5739fa729297fd87fd4000c91c70452c9695a3b0a3e124495887da93c9827d00d5648ffe37ee72a636f2dbffcee65c984910852553c376b3a51836237a61ced8774bca2fef758de5e948bda7231b1c3f6ebfb214d813dad7fcbe31e149302967cc9f49acf4d94851d8ebdebdab2c23c4cdf35623fade9f39483403fc41138f270b0c4976fd5ac6a5abe842ecb94ec4c5d21638d8f6f22646963d6c27042b1881072260677dd5ce97e7b6e95c773db37b3896b587ba93e36e0ba86bd21765bd0ae1706bf1d75947ba39fb5d50d7efa0d6684e121b4415468677ad227d1b984e96bf394c62e2da0912a750453fb908df69c045b65fb762146dd52cbc94cad3727e543b647047592d326e1f3584b141822fb9a272025eef72c9b7fe623ef4223e47fd240a9340ab44baed2b79afd7a1de021745666156664653e189ac8564093065772caaf2904a50cd68d7401c9245881e5cda580f333f04cebf61da25ae38d5c6331350adbbaabaa59273b85c5f66f47fd84f10a068815be14426c18f474b5cd688492b1a437af153cf945f612eeb37e024afeac1838ab34bbc043ea1d94f277adc8b7f987557179805d0c2dc8cfab286464679c29a9199dd6dd8af663fb3cd2b734a43613b13b7d3cb23b7c73454c6a0dff05f252fc
+
+# Valid signature XMSS_SHA2-512_W16_H20
+Msg = 84ce75239912d0163f7610221102b9ae69ae0e9851780220efea9f3df9543806d1cd7a81ea1f73f294d045fcf0f80b05f458
+PublicKey = 06000006fecfdff3df99dc1ef72b129ad87c35e5d824238ae3b0d2fdab85fc2a82a58d785179994155e7f9d83ca376f5a86dfe82a45f77607e5f2651fa48ff4283b1d590364afd2661bf6fb110a09217721e5e810a7914dc478dc72b90114dbd94c2eaa1c4aedd5c3265a12d53c3b8e624dba4b925f08f563881d4e301f0744d21217fac
+Signature = 0000000000000000078442058aaa10658ee79fa6172b458d243ea335f3f7b32711a9238db732dbc892849b0b949ad945a5e1a6c38f4e0ae0adc99a017089401c2923a83cd560876053348cd04bd68841bea15e60828baa6223b40830ed18bfaf96c354f33c00421a487317e90faf149866615ab0e758415dbe66b439b0b72c959d5effed712ad011b0bfd329455a8030fe44f11d3d4ed130358e1fc878ff7bdddde5a01d63bba39a0b521ed3df698ea7f32049a5a2ffb723cfc7ade625a903117288f8e5c43766d0dc70db161f110ecfd976033e6215ead958abd2fedd1c10d6428bf734cd0ff67656f023eaeeaf296550c119a4ceb9da188aeb22d28337a4711baf32fdf98fd41585a9042966022ed0f1dba217321b100f5bbb32b130d90b57fb5fea96ef1d719f8c76f60e0f2a742f92999aba1e0b298108cd7e0c80fa26705f8bd1829706bd88c444bad2d37357b9343f557bef0af15f31ee8ece94f8e4527231d64696299aeca7a3dee52a1fb3aeba5234f653e7a18f1b9e846af9c5ccad4b244699484c31a1c294add8ca9228ec5c3d4c92e735cd8bb5d40c5606c4f4171c44ef9666e9e448af74edf07baefb8956ee16c7c9b215f88e6d5107af415693639ed46aafe230c550422f3620cd9ac0f40bcbd7cb4390416a1a5fc36ee1da3e3a95a033cf36b26aa6063ed450a3d726de7b14584a4d3fcbbedbca018203d618cc2a9e9353f3ff0704785199597e8cd827f51b80b05b1552435b19a8e0d6c60e1f2b05925ed492a991a078bcb02d7f32e3aa2c1fcf2d938438e7081d2857159326a74b248517d2d4f3388004fd13d67cc0cb8405d802425e787373cdc6f51048ccfd330510eb7f90819c1f3a952cf759b9d526d53c753f532de680892c6f65409cf1e4a812c5a5f33396231515166094ea1f2d2230c6cd511c51ea9748205cbc104b6784467e6b6f1e59a96cb0e7b992278d629c027b026e462d3e710213c20f706c98362bd3b8cd8b3a7b9622f3849b8f7c626835b620ea7c4a9265bf9bf38a60a62ba8d23f846bdaa105dee577e5d097f210a34d2ff518fdecd0ab6e964a4806d63b104183ae13b83f6a588eb4ebcf6ae5b32e35869aad2edf23a02a89d69104016dbcd87ab5f9ac77d0a55446a04633ad5341b1bc88d5349067ed0695b91c98bedfb0ada6bef69e5bcaf239ebd0b18bf55799efc3a4bd7eded8acfd7a8779ebd4d37d480b45a9838c072e3cfb7d28279daf81503004af22badb5849e212d9ff9e808bf5204e5c01d5947384df54209ce4237a915e74ff9ba64bfd740f8e527c65377b0dba3c570586fc7beadb8500274a9c8af711cd11aa6bbe7e93208c6c76b43fe582e50d62d6f49e1d011bf53356c17a9aa7c881716a9368dae1cdcb439269aef8d7c27ddee4385cc276a9359c2ab5adb309008f38f3e0991e584f5935d86f99df21fa8498160a50e9ed38ee051446d3f03724bc640f51163113bfc7fcd5a983030191d9f1bc0f369ad10f6054d231a7833ed70074f8a55db78341b5770376a6b8e4043806c9f5d5edbcb505bd7c29780674c4dd56d8c53fff099b90b17d56dcb2ee0bb9b7841fe78c55970b13b2394d5772cc5b38523bf00d8ba6f225b4b6b64a93b5c01e16dbc05ab79b9476f47860268e56b2d8805e81b8521e1e71f01471282a7e865f04548532051f7e564dcc9a4e4e541780796d5ba2be7d900e026e514b6046a49df1162065123400b6a9b24084a14852f625039deec8d16d2448aec7faaa461114927175bb931041068f2291c0861fd1627ee132e247cc0415773d2f1f3979e10a60a8a3885a46d5010d94bc3c8bfe2d26e21038de2da951ee85f3efc3e7b8347367a473959a5935e25357ecf4a2f5daa5198fffe7fa26b34b4de82f6dd5dc0467e931323ff83f24de5b6ea57a6fea448950f18d62bff1b92c01faf102eeeb34e3612c2f955dc91d377d6ed0cfdce3b6956b061aff1ad32198a4b97ba5082e4bc392adac30b89706bed228f9a9c3ffa81bd5c025d1c1873ad4174c37381ad8da3471790c5700891279b3547204adb7f5b5b39827609e988c1418349c5e5569fb6d24c35e76bbf4c5c407693784007950e9475ff55ea754f1705cecf72d87233d7a53d74d64a5f331f1cd3d064276b7fd10705a8a43dcdf3be6c5b51e03f365eaf23b0ef9f570952af05959c0f8b5dabfd1bd380b4c5efca40f8727b9c7ae034b667efac8feda83c21b9935bc89bd5381c161106df576a429859a9793de44ab688499ee721eca77c7b5da5678a25c54c98316072637372ec30a04fbbe5ab182c73631a01cae998dba4471adfe68f88c27aeea0e515d1054b70aa7fc16296cb8586e33619cc6875f4b3722f71e87f47e99e1dd31e2d38473c6a65d2ad677bf2399dec460039c9b9218bd713df33b263196fda72212efabc6a1924f35c88405a8bdcbaa5913a84614c78701cd6434f949f8178a896fd8f7b20aea0d5f13b64710821aa63755d6993e95f825f74054943b50d727e958d4dc1d714a91b5ea61543be293934217919461383d538f157a275eb0d15ffc232e709cba19ba4610fa14f93e7dfb427d161488f5736a678a174194cf976ee007afffba954f87960d47eda6caa632a6777fe05045fadeb24b5a26de3af2edcf85b12adb1a20049a480c809ac5115537b65bfdebaca5a6de334ca834ba0c25db5e5d4e0f3aa9dcb6bec440dfda75598bd96443eebcc6df8626369796eba3acf6f7940e07c7505752c05dab0f4be304c382aaebda794740fe79a56e81b92c07c8839cbc58dda067beb207297633c0068ae7e1f6f695ef6a0edf146577daaa95396ee1f76412499280cf359380b2aaa7c3dec29538f08d4bc87eea9cebe94a53fbd629b930cb8dc3dd0cb79ca7ba8698abd5e03ab53b52a47e56d3029af14b3ae26c136c97b24aa7b72272feff4d6a2426aab902a034bfa45a5ace022dbdd912a24a82311a34741c762da5ed33726c00494c5c84e60caf37710f396f37329d3f408f05bde6192f3b8a5df11f26ec3df21e77a7192d37cff5343d794ac1c02f829cc88c591b6a26d604a87805111320649155891a41871424e37b26fd4bd39812239a49e2d8328fd93f25c0e93e426ca0d6f274c83fac705d24fcf535fe07a507497ea24ee0c4aa3ee6d240ebe1b7836117584908118caa4f50b8503055f4944f4279f89faa1957a621fd7eb0c1e7e1ad6fb3917aa04c20317955dbe1cbd9554576908922d82c51f90bda370a47ff9fef469fd6944e82e25c726a91e7fa833c65023b9e5725b5832bf8cd0b3fe68d0e070811675a3a6515dd80e89c94ac2f658278c2e98a32ed29fcb422bd82c440b5bf548395b4a488416ac0831d2a8a8396c61423bedabfc91f457bd8bf8d2aba404a067aaafbb5fbed56d87bbd43ae467e952612b26879ff7ed082dd40f0a808643602fc5ce33ce6cd66e187ef0b9e61e97f46cf31066ec470c74849570cc26f5b013dda6a30e32049eb3c8c590907a4d2a31484c2fd73477b22ba094b2cc5bc5e1ab366da11f1ac5fb6a0c784410524d2c06e701a93ca1dff775f869bc5c654aaabf1d208ad1092af5203e56a15e335867e4428c53780687491326b5d04f6d37ccbe9bb306492fa16776bf5e30393738a8b23de8e0091310faabdba07f4c5b33c0b613cf53e5ccfc77f0417fa03943236d0d450f93ec44f7ad2669d3949a83fc52d5a9c73106851890954fef04dbec0e60beb5ec18d5ce1cc8f715e2a074fd2ea0577c367bfe59d7722a9b789b6ec547cf84a6d9cc440e31a26ea26dc609879fcef4179273443a04347927049c356037e8ebfe69c36299453ff128116a5ebc3ba2aef4a1ce932596c27a617e6fa167b6258728716484757117f168e06d0a146653a570527bff14a7f2da949f690e2953bba2fbd0df7ed8ef4840b262a372a76480a5fd291665fb805d2a17c67daf2f2b347f8cb622533e42110b38ec975108c78539519bafe645e53b848976bbfe8493f172a25131f77d3c7ebfa2df01faf19d6a6bdd1086bfaf42d1919aefdb7352d1c8e17a2d55a6782296836adb8f0aa4aac06c9a0ba45628070ae4e8c6eb26600bd757542942a4db45e61c6f7455a6f19135effa4986444f8f59264d60b49be0869ffd2c598f16a1c6d4641bf0574f3dd0860ed3fe2a005ecd9fa5910ed52902507be35456145f9861ef284f10845ccf1094a7a80e59820821b8dd00deedd44aae3ac21ad16facfd60ce78547631d5eaece6d10d6cea49970e81c5f812da2d5795078b4099d849deabaad8d87c6af6ff988db936bb377d8b89317dc3cdcd886dd315946f0860ff27c6f510ebc8f3773bc27b79d21ce67cbc0cdab2c1aaa1a89557d14b77c474e50cb1f903e661579bb82f45d43d072bb269fa01437a2e181b831a98aabdb96f7b5082982c4497b85441d12dd51f4b335057539daa292d49c51e1d9e81f38709ff384b8faf4bb1e66cb718337c62f3c49969a10ffd5621cf288a58f7e33acfed46f488da2e9199bc5c112ff9af79ad9161f63cc5f97b54006db8c26aa6f8d813607561d61a5b87d1a5cbd38006e60d846f181a15b0fdb2726746094ed3e9aa4391b94778c08b533ee6e789ce291d2f6ed9f7b29f6bb2c93d9a03e2562a1fa5bc5ef4450aa078e91361ddca973d94dce5638fb9a03fbbfdac292ce52d7881982aceee8bab9ed9f5f3524fd9d312b18e22d6ddd0ac96501c1012ce2b023f5c3d3da972318e759b60c54438ddc0b1b7c34b7d86918875b5d81ee091ebbe501b1ffe830b8c32283e44770635b9cff86f6fd217dc6f37923e18c6658a9b888abd7a5677ba07e6f9ae64e89981913c3d7c6cce53633c6f39c61047ca80dde779debf7a9dde5d9c0ff543de02b4d3aa36126a003da5346576e11979385dbffb327bad22f6a2c57313b010c4013aa06d94f69cd53c18a10fc9f1239205d38a089a21c323d4f787c733c8cee9b03c14999cffad29930c3f309b2ddfe524411c83d7a2ffe2d207a6194b0e0eea206f4c90bf9c0f5af2c25f42bdbd397e07f296a84163a4e4d1e9d4b13b9a1cdb3d487a3c453c744c2b450e57bc93cdadeec82b7a43105358d88944779a645e2a23dbeb718fd6196c6a61d7b4781165693c50a2e0d6ff388b5d72420b3ae5a3631f35a32ce92ac34efd3f7d213eed8cdab4d57ed1cca7a4d7b4a53cb43127d311b2d271c419f65832c0d7b6c0c808e07b538df28a70c8291ed0d0a12c03efb67c3ff107ca5faaab543cd5f6b5529c68e946e6eaccc5212399f9acc82c9d2514046076887a4f6287013e78f69ac932250572e95cd2de0fbb0d482c7178d7ad9cbf82299c62cf136b3d957df890951de5b1bb228883c58bdf384c1f00786c156e2fb782272d6381669c6dde5037f6faaae6a57a6fa77e81556d8293793f622a6c1f10e570f1c85c25b402b3a921853d478fe74b7faf65251083598a55d42ae47b9ba957d1a60a97981f19a83334259b7ef60acdee6f83af303e2abd0050b139dcd6ddaca2344e53f96bc545555830a915a8ca823c4208c68a7ef6b6e888b4514d4275df813738066f275c6dde85242656e0822aad65a2bb37fbc4bab5a5749b0173137310be0d0f776cb99f782d966928854893673ae9da3085840d20dfa920aebe51f7b82578e84642b1c3236a01f8c22e316d6cd3f334c5fcb218d3da5769b9ab8faa3dc7424891ad868a76fa9a91efeef052b18d08c65fd44a8eb35c20d85892bc114aeb1c069d985e8a00f012871f541b6e3c00fe0b2840a40d213a939880c6f5e5efbe1671c2446941d1ff1dc0a9f83c9d03a4ba0158442bd2a2f732b6b20666920756df040c475450bd7f3bedcdc86a15b5fcb609a5b927fe9c63e4ffe55bbbd0ce493f65f159c58ed0ef383cbf293d8d56bf812a12ba98167a3d173b896aee749f8b8ae8e6b1481de805016965680773270e64d9ffa2bdeda0e914659e925c1884a5d8e4be369b98d4fa820edbcbed86ad64922aad619cc4e39a68eb60002e4e4e29a8e9a5e5423a1b3a21a040ca6b9fe3483f9bc1d7c8906edb41ad7dc1ef05e94f3aa43281ceed6a9b498221aa11a3e0ff1094aaa00470c6e347d4e9da5defa02a6ad5253040a99228547c0170eaa137026084d11b24bcdc9a36d89449845e1ddcf95717b2358e77550fa1c1e71ed8a0487b3d37caa50a000e3398df93c0e97e0a4dfefa8c0e9f482c6d4010aa89b4c8f17e8921e47f676fe94d66ce79502e1e3f1cbf341cf752c4c73f213b196ae943ec6f4bedcdeef8678d49a62111f6b876f9765d93488f04b3cd9cb64b7e0ffb26a58fbe65b78a7d8ec8727a8ae04f2df3a6e402b29944d9042ccd978a223aa660acffbdaf1ecce525588ad33b600c383d612f87cf5419ce3f0a0e2f175d5d46d482ec60cf794491b1724415f42ef3315e4b1669891935ae944b368a80a26bc426b282887f16210199319a5f2d5a5e8ce622a8b1bd0c796cb4e033453da3044421b7f6c8658620f12e13f4ae65532bc2f27259dc8d798423813e2d611932cdd12522b6b8daffd4e7460000a011337fdea8601ed2cceb1435a76f098a098c5b007189745dd6e8ec6c2c36b18322f65d9499ace66078ecd40176e724146a142499bed8f85450d0e42cb8e94282763fd9046d7adb7d2e691dc13b95ebd6d28cfd43241d154c7298a39676607f83b9918ccf9b0c3a6d3acbc0d32d2ca4465277c8a84e90a2bbcde837cc7b57d802a9ca1c3accec451c755b1c70e9faab8573d12a442df5c795c3103acf04d174dae5c042711d73a4530a219ed78fa72c32f40c6c79bd958fc6974fc3fd4b7abafa80992e6c5f8559ee4a41683446233e4b8efda80fd5ac9a5a8a87d16c9e1b32bd61e527467d86b7614d4f4d38e31943f364c9c7bb741b4dbde3e6916486c8c13dc82348aa147021cdeaea7da9d57d72a73d9f4dde081cf64a7a233995bd04694eb2e4b64cdba9f56714f2a4153dc1cf79d6318161ea3e62e2db56a7079e4109091c257e6458d702d15d30db6b98b0413b038944067352a67c954249b21862a94e2d7414c1077c524dd38c91850e878dde9dd0523dc13796e7f9bda2fb404db02a40edf5e0d0bffebff12628d8478d29de7500a27d62acbe8e8d13ab5e3cfa13abbdf71cba6e4183b1a2ac46eac174c75719c0e185c41e044266c9161d760a06eb8b5d48919ed306dda0799461c75709d07c7eb6fbdd2bb0e1de416572fd5384fdf0bff8093ecec5308c8d9788e0638bf3a103868627c6928d565a9ee1ec8d1be7e1a046718333c8b40869ff32d5667bdbebb74dfbc7deab9c3e9164f84255cb4958ddadabdadfdb69402424d3fb14564512f65e4e9be877dd9059be01df5e2637366fe3e6b642e5b5cd090b22d67e17aef0549f59acacfd78a74bc6a10aa3c4c939d59efc30f4a3924432700d1c85bd2f7635751fffc78f86b4a46bb939ec343148fb9ab69766801cbdc4a3898b5d590b14d2d24e1bd980933eb539e0d9914f25e10db81af6800a4f1273d7051ae7aa5092f3ebd7846940edee5ff35eda2fa63a8377e789c1f4979381d447717e6c1e2c3216a9cebd139e078fc62c0fa9b0c483d724be0100c0df8a2a73abfea35fe7b2ffd64441bc0fd051305c6b6676206e5dd4c92f18be8ae9b99220648d1f3f0ad87b65d244a368986af5f1e79d1f07af1dc49ad4a889e7b009b1d21d1e2e34fcd478904b45f8e96fa21a9c3215c6467f37ceebd03a652f9e1c5021db622367e20c71afc22647737c8d4ab10774c427368c55d0d222833574628c4bcac98a37c26d7057e248808bb03415230e08d5767d9758f4e4384400fa79969ef6fe46c0fe9f7e04f14af75dbb332f62a53e4da16fc144687482b83b495c5dab85de8ed66151a3a6bf8c8dd95b9971e9267119eff9b2798d3f73290562c6f0cee211ef8f12cfec1f6b0d15302ca3bdef2d1af76b81bf2778578d9489be4d0d145bb115c9871b87f2cd654bb68164d2a74ab388ecd4c9f5c18095eb98f68388eb0b2baae5c33b5ed9699474aea7af623fb8a08275d8c1ac8be28ebbdae78edd31fb9bc795ca8d395e8ecde9e31c4b72de8f0531f44013b7e438c870e75041cc378918f7e675259e245a249ceedc2e9c1066f89f4a4c468ee7b86dc6203ea7fb5cc1d9176200cb195a4b82810432ccead9ce68684336b41d271395fcc10a54c8b073fc98dc6332dcf4e9e961b3aa33c996d08f232691bc3c5d64b1a30ddd366c71725b7d51c45b1df6032506ad7fa19583bc0dd78654ecb189b585bb3a87eed906db3c1cf6cf9e40426805d438d84868a044e1e19d53e30ff85f514e43c316422e8b5ebdfcd5de54fdb9fac572c011bc6e640692c9adbc6dee890430a262a8215650cc46f681ea0179d62dce8b9d325bd231e6d041da896fa8f990b7b4be6967b1123ca1659fe322e609636a30b9cd11fd00b3ca2dffac8e4c7c7a7ee1bd2d9dc377705238f4907c827af749e34c95999628cdc9e1731ee2f00b481904505dbf86c92649cc5d9be8b6d9834ae854bf4dce933517e73d3b149ac40a22544c0e4e141ff46fb4b64724f4be787b06941a5e295b2d3e153f7b41f08db7116cba7beb1880223ec890571dac4ace94a06f3934362f620c4ba81de9f6ad6d9d3d3c1ce91f5161b47750960d5c3c7f77721b68ee98cdddb7a2b2444a1031e95ddccde7670c36ef362a557210825cbb8c0ec42298c6b759376aa1ccd2f5d6154b6701fc5196035106e1fc8f197342e2044c6a7206efd8220e3cb44e99d399a62931571fd8bad0b38f9f875e98ac4c4a5b8294b6c124a2d61454c1175e5cebcfe307008d964abf8445e126643bda16267482f9cea94c42af99b1c0f9bd51eb865243099f97e7bd477758e074aabe1ab35c0c0ae4243bafa7335f081db0840019560fb2946c5460e95681569445b62ec7dd6827c5e34ae144dd6286037fa718bfe73ff3325498a14f1d8c3aacc0139b0c36b2a68ff85787310f2fb6be8f8a09c9907ecb65529b46aee9381c6ef9afcafb83731b75754fd2c69d8ad519af4f6f4b38e08c747d44a4ac294aabb7830435f594f84ee78584aede554d57455805ecea5fec6f510f2ab6b1edf31289f6b76f9cb8586891e8c74d5ee6c7fda854f12125032810081900b86114cc698aed2a369b3c91bc0f221fe76551f569ca1236fff59ecbcbdd8bcf032caaa74fd4a7b3781061a707a2d039b564dfa4266cb2533fdf04dbd3998e01c7d92cffce1f4fc862d37616097c5da15d9668b4d775607ca1f0c32cd12b65c3a0650c3246692a4e62fce286ddb4d52fb9fe41bf540da98a2c731a41cc77c863617df160ed23f09ade39105dbc272ce1f82db054f3fcfe3a2c4477bbb2b7a288386941d2f3048548c1333424c9f429d07b0838907868666e436043797aeccc579723d52112387cdcf4ab162c886c67a3f77147b6d988dd40470c3db510ed997b8cda9548d2a36c0cc9116235aad5f9fefa2166ca1b07c6724792abd669bafca829734ef3ce3f3fc766af8ff90ceef1b180a5001f26429e6c1cb0521aefb7e79c2de60acb4b1091d509cb7b5f40fb3400100825dbec4185630a59a5ccc3dbb28b0e9ba0031f47eb8b72d3ec2ae2227fa6374f7a959c0246ea93b06ad4998585e2ee0bffee83a8a6ad48bac4f9e0679543ba1850e4eb39040fc793ebcc71fc4b5cb46066ba4794a1266aec09c8b02145d96f6e8004b58177ef07d435a94c353c14662fb5713b906bcf30c32fc8503a7327462e512e5fe5d123bbbcc33debf57536ded2d6a1bf42462492d73b4bc6aeb3bd5605597fc8e7826ba1d3aff2e6f27355d3d730dcb2d12132f2a122d58f8c44375b4b8d61ad7af5fde1a47b6c52df01824048f2c246a3f1e058e445c1bc2e0ef03c5f0610812a5be20d56e986ba6811e03599381c5c5d7ab9218cf8e632cd4c23b15f815d391bbf04defac389406580250e3a1d200ca0fe41d5c3495cd86883ec436874ab42085ccb5c52d14bb4ee79a1a94f7f5958d8788bd7ca6654558613636b896738d6bf84a540678e44e6e5239d121e21cbba63360583de1614cd601d67fd07af97a8233a07bf989644557188975cb866717a35263206cb25e8ec0327749ea2d32fab67d18fef1cba84b325ce363dd1ad215dbaf0e1e18d9f0441de8c68d1f6166543e5649bd3c71857460684a2e690f4d20fd1bb144165287a64461e27eaead959eca15a90ea0b6ce37d5dc70a20f36a002f3eb50829f10cf04ac32e530f9806ce2b150eb5ffbfbec8160fd3cbee4e64eff030a6561f07963947c50182d43dea9691a18afbda174ce2e6a815aa329fef17eea14e52aad3ca2c6a78bce68e503e31504e2af50d8823f253d575408221e96249b593982d60cd478baf9c6b79e16d0513d17eff6df4d68c28ecc7474cd5140976e20fddc14127d74da1dca7b00ecf48c1ddc2507e3d15abf647b7f348aa373726f88e6b35e3cba21afcac6d8ee42d9f3b618c9acc5061bdb9b3fdf420744030d0eba2ce65c469fb10dd9be7fa009bd21eb3d2b2ae324d8f98b9881c75236c55e7e19a9c645dd1ef3d23afae307994a8a75d155ba4027bfc0e77bb98b9a1893c3f39579816aa74c45ffe6501273dce876d8f7aa98e3f7ce2845aeecfc87589d3f652267d7173432c6b02086b6d68f41754d3ac8f22aa7b7d2066b4c7ee66ca4808b08e52d6893cb2451d507223e72268a3a3200bd460e20f4f7b888ac63aa34bfd97a5eb499b1e405188b0dcfc716cf1dba797838860a685921bf33284f5bdaaca04ddc70bb6b5d13ccbd303d8a3f035e4d6a34683c066c1dce8134dc6c811539f1076435d735e86840784fb61adedf7883a94b84355daff24118a104dfe147e577e31db435b8d910a4809a285d3277229d3cf1cd014b9746581e150fd2e999cc0af260a0f1384cd938a893265d2634813c95664fd67bd4ff7c1168135b427ed6c96ae6a6a2da7bbf3b3449cadafaeea77540497dc95849556d204c935d9e3726fdb7d46b43ab5ad68ef718bc53d5eb74175ee63681c8b31cc9142fd0d96aeb331f9b25961862ae4b85ef29ae17becf323a8416224d7814738ab2bc2e1be552aa344ece5eef87330cffadcc6088259df84442d4439ffe56c051d4a36f84344c54f7cada583dcc311f57b0431c7fe487b3f90bef13b9ea2758e832838f0b9a4f507bc68299b2b87371180b15a7a92e2bce1da064670cfc5e9aab39c839605d9927ab9a49a7688a8cf11a55fec15eb6d2635cf861dce4a0852bc84cff5e9df65f84b5c292f97a76745a35f0ea355fccdc54d1bf13e4a3ef6bb002b5d6c0b405608c3f412c6f845d4d79dc8301be764ea3cd7238937a2aa9e600686fbff9502ee7b47197e85927d4d1c40bc52401ace840cb9ab1720fa2eefcdaa63aa886b4e8c0a84163f53decf471340a566c71f16dab60a28b281ed0be0c583371f8bf6c4d735d17fa78fea6b3357af4ed82c7399beab8cdf3d597aa1b70a3e9875f9cba5fee22be37a23979d9b29e2b1f55ff323b9e7aaafc2d65584baecd2e1160889b813e77248d3c32cd581f5bf8dc7412ef3c6ac03dfc2f8f86dc1ef8a9c6835d3b9a0a27559407cd98f44d0d727c5314f96d001971190611144d3ae566c0a34cbf853714db97b3d6630ecf2ca15bba21d84d215a20cf179b7f86de78ffc0a9ba29dc49776b0deef40d9309b05983266821e60d430fbf0a36fab96950240d3e94f6489f0daff1fd5b898c9525d9c521bd05ed5889a80f92e15726ece8c12c1e83fcb3aa91f9ec6f8518e46c4603b075d725511ce5bb900df0b764852c965636d08569061e93966cebd471ac66d27e71cdc6cab40ffbec4b2fed642154a6b55a52eeade429babec42652d0edd2ef441d7e9a51d6ad899dd56c93c293e33c2a9416b32e99d85ff5aca0051303cc65a68aea0c635d1ce60059921b2ca39244dde20ffddb239d6982cccd954e7f0246b9e2dd3cdc1a5caef88d3b51b712231fc1bde755dcb5774c75556953c8db240bb4bfa461dc26afb6385a4ec8cef64302a796bbc589800c74d35a47e8309ba550cc3fafd1f885f3392429f0a7611dfea855e6889773830b175769d11896c13a265acf99d8ddb71f9234eb4e508738a53c77adf1a28ebe71cd878eab1708620dc18202a372fde0dc7942c0af8c6e9eac2707f52b4182879e0b2bea507fffc067c3284604d1615d4c20f42f1b422f617b83c1c253634955058ffb56aef680cdd243c094aac9b255a667e106a8aa6ee3f45bf57d18b0d423053cfc6de6bc5c07238a8c13496d754ded5dd2a6602d7c44fc628d45dbe64e2989ec928f0407f29afe94805e5b907821917bcf34a9970497437392cbc6c8c163ddee9e8b726352255f06a8b1c2cb5e7aba23c355cc05ea8c3a75a9e303b324da6e8e862ddabe2ff39de6a1151559a9a9120dfc8b00dfc4587ca9039564d124173cf658fde66301c82b66bce38462788750503fb5bb822bc5c228e711d9d8f7c725af559e33bc4fb18ba0d5087b7b7e857f6f564435bef3ce3d5e21ddbf4e2b631995ef684abdaa4c8c8648b3c570d1d71134d4ec2a1aa76e92b41726c0c877e4c0667b8d1a7feb564e957358a6ecbda97a2e597d01dd59b18e5bf3b5c1e09b67411ba8403acfe2472562112eae9266f30eca828a63c958c055ef2eff0cd69dc33663d7a4dc26123a1be22baceb34cf9f06c0b676128d50e6cc367a4386ffbed747a1a1507d72396072d0266df8246823a9974207f431180ad04333b82c6d087797629df1eac04edfdfdb591436fe0f866ed850a64a23ef07d672e8c00f3798e72c42187de79da59c1ac4fffd9b7c1644bce5f173b21fce08fdcb67fd475ce3ced9e0297067f88d16fec4a1ae0110a443a477d5d53a2c9d5192850370cfffd604542ecd1c85d0c6f0aa1084fd94de9871f85a67b19020fd97ad20aa203b6071126d4d31f37ffc69bef9d2629175cd1c657adc8e7a5940a2cee478f387fcb90d0c4048a59f80d2f76f4cc3d87740a733eb73cdd502d58f4f9f7b352ba04300540d3fb759b3e9e1295bfde02f548dc94af0958d66bef7ae73406a3c681b5583cd2554930847bf80abb489eeb839f5c080d75668abad9f0d69995e6ce0b75cededa41851e246c5b72f2d4dffc949f4f8d6599883e8eb40d751d4717cee4080cb047f02678c8b3dfe4138f89a5ee17b3714c8c8fcb65fde83eaae702f0609d1ba28077919b34678ae3b04fef98e1cb58d76815717daa3907d744d9034fcfd802a294ec5fe1568a5e9b9bc8a480f552c17ba5d703c4f5cba4ed5a6bde70db3f48f4a37c1cf1368458330797268e11cfb3c7d856be11e7f5d1bfc3ed45807c39279b88c87168332036a1fb4c67b782e67c3d8e46b30c487471ac52163d511742943712d7e01c0f3dee7a0b3f00232dc632ccf422fb9b1c511c334941311ced6ba0877b3cf02fbdddce8d1a2c604c9c8cb2881f67a759cce172e2a7fecd546679a10b44786d9b637a0e687b454ac52bb643aa88f7b63417be1efdff7c3e2608612e148ff4615207d7febd9dbb65385798030b526296c10283b4a07ca2b4364099368cfda493974b85fbecdca7945a9909bc6fb353695ac5a2be33a6783827e85f26a8970b1582ef720b587f507fcfc381ab5f2097bd624556d5fc9813496699b7905cdd6ed131b5b5fabb85849833667b0964fc10739e8341149ec8576dafa256f9dd30d001ede520b81cf72eac89f9f169b825c13ac26b7089265ef
+
+# Valid signature XMSS_SHA2-512_W16_H20
+Msg = a2d4a1d63934c13b4bddfbb7cc62968274c785cffbae18bd66fdbd78fc19c0eb3603c6e2ab5bb07adee56a40faadd9a47d1864ee180852e29e26d8173b8c8719809699ec1b53dbcdb8abe4d9cbb2831d2aa664f99b56f6bdbaed7b25dd40df0a27ac214c1ec077ce04ba3c3f0b981b2f220e27878343bc50034da0d8e3b1658dac6ccbf6ded66dd222702137e694d51d71df2e84a3b0501b4d9ff2e8267ba9c60ba77910ecc61df79ac8a51a98d53a7c79477f4633b96a8c7afadc50555381db3534ba2c1e5eab1ae66dbad562224d6487fe0bee3686eb8b5425ad47773319
+PublicKey = 060000069688212fb7e7d9e42aca5d52a9d060c5d48b1f0e2de8ec0846e9296de363de9986862f3f77128cfc130bb64c4ab672a1ea6bc4689d2a359751bde229cddbc072f6e20bed39db09b035f7f07f485203a2268e3d93c182004a4e6921b9012bf03676c960096880d5403785ece425544a4c82ce31cdd3bf13f33365d40954350d47
+Signature = 00000000000738c44491e36400fe9924d725856503409142c67333dcbd1246c64441b9970ecd617db6882bd3d583464e4be49b7f129753838c037dabf32ef2798597db5759f8b6334f64dc4558a8cd914c1953dfc529feba9d531748e4045f22f39748950956d42c805117e54d6a67492f4d252572c06c5ee1d715e7e644cdd6e432602cb94d8a67b4af676f08e2cbc35c0d56440d070f034e34c3f6fab77fc936254ff818b05805a2eed14f93a438103876ed99a60daeee9e700877c8827b2093bda243163f070c7383b9c416c9556fc48f213b35cfe776152c9644a90f1c7bc0757c8ae457724daaab835f4d5a42e5820ec95b8d722e92ac16776fbe99cd063f9bd83e475c7a3310dc0595019e906e9ce43d13bc02df24bed5c2e7ca751cf332d00cd2a87d6bbb0a966a21759eb85bb70e71df0e1a7759e01294fdbc2fe3dbc722eecb56596ab888fcdc4d199e431629e6eb91bf92a79291bce6a9b7a11e3c8b521bf9fedf856386e7ce7d11bb6b2e6a7abfb68b7cf781dc65d5dae603a73fcbbabe66014da3bf8f9646d5b6eaf25f157eb06ac3b94557951d3dba156a8c93b23012611655fcfbf97f41edb83e68954f4d57f69b30051b364d9b3d9a6f0a5257e1fc9c40052524cad36f66e3e372afe0e972c6caefcba42c5db780b9bab48f31e0b7f4d21d9dd359e14c0d8a73dc7bb1908fcb2b551976dbce5f03ac3625b14ad0c83b68dc53e91b3d661e0fe6d70d50f7a7cad51f76f27bbd8ff2ab5cdcb6bbed8cec406e7b0dcc1798347463ac6e6c375beb003c0b4fcbc229d4f784e657253aab55e8a4006458bcf796162f9bb9b03d1cd8baba2d8cceef8b6758c42f8c7185c461da99e9fa5746063a1463cd6800762cdbadfbc0ad990caa6ab8897b18fe063e7b8cbab5b4968090011690ab0284274f0bc4375f6583df669fd03d38d8b2e3b954a5b36d9eec4084381f169c3ab5a43f245cafd3bdae2fadd6f56891f07103f6523533d9e6fa29ae77831ead3adf5f3520ffaad3c9bdf3a3952e1bbf9537c0a9d9eea0de758fcf92d4e362003d7f473bd633dfaaa95e6135b031f1185b01d9c4e8a62283258fe2024bcabf3439dcca884a846670686e2ffbfc57db83a286737da41452032355cb9ab5540c7dd4ed847997720060999ba85ec7b408f0fffd63f3a43bc29fab0168aaece68c23be80e65e8d1ce2c9d0ea5bb52eab7bf6b0ddc34cf22b5c4e7f1963391cfe3b9bd878210344fdb3873101013409733fd79cb54c4ee3f27d236aaada01c8111e781f38f046b55e74ef4a0f8d222d0c86b1ba20ccc5af96de39f9ce3de7da10f1defb36d5d775f7d2a957a5edcc40fed8beb67a4208d36bc388ef89ef4fecfa6c2ad9a3875ca3693b74535c47b36016d6ca42efbc9f2dfc53672c723194430c569bb5e5457a077f52f45512dcbeb842fd58c4446d6c768b975a970fbe86c07f3fb6537a9fa667ee7612cb82c4aafd88856a61c6393e7c21694546456e1d93a9b7803d563708d0d46d0e778990abd73115536f28eed31c4c45604c13ba581d0d7ca3b6e8c99fe914a497bdb4750cb4265d642b578d428ff5e720f83923f3507453a8cb2f51d72e261ce393994a990caf4bc5e52747297038cac331b51e86ba29b792be4cd15d787d521e8d08558cbd9f4e877924e19719c4404c94fd5311e6ec168534be7b9e4dcf613bc607a9d921e30a5cd1cb7396af6d32e632649f08015701578b28a26c912eb689721b463f23bf092f167534b9590f87463bc68bb9f61016d9588f7cc55f219a0db42d0bc44e73cc8f97c5a6c328b3d24a8de8c6c71840b3cdd849f07482e2ea7c3be30094e2ec9d86125a2d4a275098ab086eb2043464b4ad8a542cb6740466bf0010d5775aa72c657f828ad26bc98f81d11da0a2a5a0aa742b7a13248e2eecb22263eabac484bea6a0ba079320adfe29643e7bb6dcca928c68c328c74a136431ef4f56ad85900813df410eabebb0c19b252475b1da8d85e8b02db2b3d34e6b07a99d0e636662f4ce34bba65ff75a3748d0526d74f72f48e077062fec8a77b92b19090d772c1f036a0129fea4cd29c257fbcbad9d347fcaff9957843b354d2eec2bad5932d39aacdef576af74879a1d0dd7661e353a20fb5799338ebad718c9a656164940ead4ffc9ed3f9e9d8cf1597aa29f3a26bb757f6cd67fdfb8db6aee4eda7b8b757c025138351a05c4ea6f0539e7f15de2e1cb76b500b8d5d3433e2616b5cfb697823e9af5918bee3b4eb7d2557cbdd640941c4e168411ef53742c24779892ecc4df540c2d4decd8d72223677ea606c0ab06e148bd7a51bb318c72d475e7629c8a13dcad4071f1652fe2cca9365b22e4ddc6c9cac83c78ca200d067e88fb0f84c91332032dfe770951b7cbfd4d1b7922494163c751379db65be9528e1293c0fca9313d4df010f763d1e473ecb3e2ee553aa9d81941b0605fd0e05bf2ac9e557f7b6badd3c392d32a7c31621bc7b4207812393382e8809b70c6ea2829a9d359d59b40e3fb0650bc58e4e89cab91eeb9c53903781db54d63a73fae3c85d8a5fd74dea90939dd6ae7234fe2f632730a8adaf6f7afc9cd922e76ecf60a74f7371150b39ef826cb3f27a9611d3987a127baa99778b0d5c4a7b86350488f857a27bc99836084f5140984f617745216b1fd9bc5eba707bb33de8e81130fcad4f52b2a0b46e499a5ec3bf2c1411dc7701add3f4a33837a5c5d8467744344deb21b2267fff47ccd9feba8a4cc13cf4316da3d4802e3023f45f51ebd69888e9f8d3319fb8aba7d5b6f12580fb3f422895c6537fe373e11e1a558a0db6ca94cc079c640d2421c5a461969957b33a3efe2e4e950c92fee37c4b41e64cec5c4a0e580d7dc3b0ff9a4a0442c3f3edf021c77973c39fc349a1e7bdc3da14203c02c5e39ba8938c195d40cf25286d7c0d79bf8ce71b1d2324d663d985c0f8684a5190c556e0046060a1d65de3447f6819cfc2b34bdfcb91204c00eee8d21b5e821593a9f2e3089c5e8b34671e4a224a2a522009f7280579246cd67bc5903aaed3157407df3be99f51d522ac178896df9d71688631533c14e34f63f75a8a0c367b07526011331d7feb85669542572988a4dc4a4ba188c5ed70287ee1f7ce3a60f5e351a2b4b4c2e03c975e6a8b578873eb55b7f74fc79091170c8f6a19d7f7081537a9211b2ac1f7ba44e57f6da828c0ce6c2ec3804076103e52e4a19dfee346c9e4494d5b9fcb032715eababf40610001ea2a6f64dd9c328e48e3e3ef5b0866db8cbcfea0a082369cf22256efa7222073dbd55f1fb7998de5bf600291efdc2051696b67a64f0643bbd96231e294fc4e3b53d3c9905956772f977a4e57f0e0f4995707125c1534957145844dc67ab46c558f9b2c95b677ca39c1b525d1668f1e9ec16be0a24db8eb9f7aff148d623e572aa12d3e05303a323d252877f892eef691710a12ca265d36d84df29bf54883841c1c79db9c9f5b8b75b3b389172f7d41d864b7f4b84965073528b0c806e2559a7772b741ddb12fa4f6843dcfdbca9cde24a2ebbf9c080d7ad304f9ae9f969a6015ce6689b6dd803bcb0146de770d5072b01f5cfeefefb5dfd5890388f4923387b120a9b7dafa31dc4ea2ee766561801c567599f66006e1dd3be484a3ccaac0420e58ef2a79d113afb36ccb1bba4f60cb66077074d5779556b15fbfffdf31864674ed87d176f06b2e5b47d799bb66338ebc63503899b3b9de6ce2b940aabe108e99e6c2c791a6c173a67c5478ba8e66b154d27c7dacfb28c08cff93ad9327ebda62950ddecc400f4043615f0fe1fdf0c534cb018198e0ccd91835db0e8c9dd4c3d23393760160ed209deee0acc617d392358cf0a991a9504486ddc75ab974a377bb251b806665f04172fa9fbc4edbac67a59bbc8799f7584e962ab9f3d32795a977f76233913d50a6cb5c091d1952913550bfbbc60e314d542b2875a98678eaf257614b592349420b8c6d5421bb9ea987a7c4b6d8753e67861c9e37ceb0cf7476e8400c7db437ac23a70659d70d69e1e7cf44fedb14b052d2eab6a312ae7716eb5bcc4fd4be48fd5ad91ef09fa7fcbf95b9387c8d65636de22fed0f40ba1167fdd633ec98ae2d2072e56cf554dded88f4dcb0d0171b4d14334ca56aae324fe5b52562f67716086ade1d1275d2f64b109cace4dfa87b871860a3c1f1effbea16e54427db21894982fa6a33646de4850db1050248dc8d60142e1ef442fdfa99527a4987ef8d3e637570fd8474a90aa49fa3f1129468c8ef2d06d0835fab08f48c58fd3da767f3f34a8ff99a9c0a8b236198ad0b62dc09164dc8d6cbb2a865e205fe7a4cfbfe23cdfddbf69e3208cbea18df5a6a148f4f0e4dc6743285f8efe6fca51c2fdef3eac848ae9c5721382c1a30d6895646583fc54757e765663ec803db49cb2193345d60c2c47d06a57818605dd156a7130bbda4f59c53cc53b31aea18e277d287e892bdde69114107ccb8429daa7bc7ad4e9ebaa24651bd94df2c94c0bb881ae16bf6a3dbc22f4ec2ae1d520eb00ae90de7fabda00d69d7a8935b7330aea763a1f3f9eb5642c374a0936c9ca14c6945a90610baec9ab0a0101efe0c7530a02c1a6c818d966acbada4ea904e225f72df436515b36d90fda40d11e4b1563bc5933242ac5f3dd6fd33e49eb4568af7b1b3cb3661453f888b7b2821d1b4544cfa7468626a73bdca3ed32754668e1e1552eaa4562e2f528f2a242a5f84af9d47284eb09b71f04298cad0dcb1edba9916cd2ba14e3e616838ac7810cb4373251458e5888ee90dad1ef0a0377dfd323a5a718dfd0c3ca9b9e37c3b9f44dbf0827e360e8cafc290b52bb29ad4e637b2032d2daed05d8c0cd443fab3dde1e4828bf16a2d9ee2d76f8b1c3e3199d8b14ce6e3d4f80ae55d41111d82fd8fe74ba6aa77a0531e0ee3a2abda911e7a4b6f1e25f2c1f703860e445707107a6e361f8d5561a375642d4929d81b04ca47647f4b2a60218149dcb3e17e9d144d9c13a85e5929285d0c0db3f76607ec48456e06fc3b0763c4f6e4dfe4c7336bcd0aefedf5a1b563375684ac746bec0ee15ceb334833124e3fd4702882ca3b596c64f80475b308db3ae0d51e1202c042e46506f9c1812e7823571fac00d866df5c5933ebb33fc005b7d0c28437eb1f3fa504e6219911bf43d0d97a2cedcaed57c93697010093512bfe7251884892f5b2688b7f303471feeddcd85959059bdcc85236e9b07976a3f6e2adbe55e12736530ba533f7fc7267bdc9feef905f326a844e911b43c702514f862a8bde93a2df4642926b26f6856a60b6e844c0d73e65be70d3c1ff99e4bdf3440c8275fde413bdb8b39a6585a266ff7ddcfc73f5b9cd6ff2af97d086dff603ebce9274e7349f720306ee2d3375a56e675888db957282b7676bd7cdacfbcf10e7ce9b7c90f0c1db5da030497d649ba237244626e29f9cfef35bd8b67428aff32a5231a9af68fbbfd884aeb13cafd310bcec008c6327429193d88e34a04fadd0812ec9c4448cf1608bb450a72b72fbc07b5b128249bfc93ddced873053c6b2b73953f2474cf20be2c4089954394c756441642039f5eecccedb298ec038dc464fee37d8543a69c6c1f4a05d8fb7d9aa73d55ebf2defc49d17768789d83c65b2157a184af5099b3ee2850d85af469489bfea4b9783bf424e82068d3c86b7b815b69a1f5ad876d71c73d75eec4f80b7da7001e6e556fb9074531312d699540e53ddbba35c867af2e426c0ff0c05e842ab82ff81488b7a049ab3c1053cc519d7e07490190ecddbbde03cfc92f47210f5a8ffef4fbea5925cfb55e3c269634031454d096f8f47dcd6645a22c146022cc8a4a205addae8fc0eb15e40ef48341c8d07ba9b7efbc9a34e1fbdf8e795274c85465326852cec7b376ba80c70115b0bbdc73d6ad4dfa2de72506a7432f0a376d1e8f90048b6b0c6db33c2d7742badd314177333e907581ff647e895a2a26c253b5a8f593b7a46fcba588987dd51037886b8f331a416c1ec8b0bbe9434bc1f5d21a227a4908045c369bccc6379325b3c2f6de63e1959c5482f7de9df0c7aca11c8c4d46fa37e397434eea4099b2731f3c83736718ae7ff97aad60d5c394d3e9980b56d231e7e6713a302712384263d607a53d6ad2fc8c588108836f1807c242a22d72e9fcbb553cefa3851efd55e36ecbb90f56e668e8b7a69a1027556889e6e1d27927f394e74bd8434eb93b598ce582f764893016c8e5338dc4c0712ffc1962150a162aafeaf00759a1f58e1810f41f00fd795426c201d48de7c65b6252993a830cc8a415c8088453bdc5b522f54e261d55d74374d79f6eeb99a2554276f3dbd4981ac66cc65aae8fc3193acd465d340743111955d6d3c28ecfca50214e46d5e6ad1169dd0a25cecff8acacf463ec2904087ca767dc039256a553db5d616d9bc71e8e423ba74548fe137f6a37bb125cdafdabbca9b9521e257534badfbaec0ad27b71bff7e6d6ace688940e852fa1c9e06bf4df97ac6973efef5196f408ca869048e10797c0d1ac3ad80ffe1e55a28a63547bb22d795a0e44f51553bdd18e65057f6477605b2c69dad5407bf981543998fa752eeb730363f1557f7a21cff41aa443e5d0651a218f9bcead617e1d5fad59e16c549f4a882ff2509b6b66d6f71bba6c303995b1100d53ada607e39c17d926f6bb04526d90075a84b977707f6979d4f3f3ee1dad0f76e9ea375f4ccff2e3de37abb8edc5a32641e5bb04c964511ccfc9590bf302193186be958b362574e0c69c28df9dc7dde2992e259482932c701556080dcdeee605a82813cef6e3740eca6a6c1d64d12f74e52fef5c77015ad97c61e4a080a5019f2536b0964692de3b05bd4194c0c04bf72c300ff207d247ec806b56caecb7268f9441cd867fc28ff28cfce075e0aff71f3e4aa2d14bf6c2675700eb3f907981f667369c6ab76c851f726c3f91cc3fa0732753579ae223ef8e43007ed4282ba84814bfcc8647334197caf04ae8a0aa3e922000e104354c92e8aa08b5533c0ccb40e1dd2e8150109f631b83f26ad78dd04315a0cfbac1b3bfa5f08bcd0e18af93a18381ff2654d9f02f162986c9b2fef5ce66222e66c045533fc9e268ca0b29577dd82629342d99172006b05d76170a8fc0fe63936d62557f1fe95d7da11bbbdfc5f841b8ca7e255910f430f6a41e9fb451328cc852468d1601f18f3664c6bddafde7af60d034bea692c65aee997ad8e50006851d10110e768f39759b05839656f204b0616538caac1350edc0c8d7de9ae787386095c8ad227fb5d80617bbe4c4f9b941b2742d1a8c264bf59f284c026f8d056b8bd0b1e5c39f380304bae699d441244d8f452e6b99b142a1635c52e54a8e536eb5b97443a818485f442e93c2ab34bfafc99b3c752de30688e6634e5a35b904e718a63895c5daeeb74a878f1211d609c4bd7e36cbfe91095e3d897363a7a5d977eab0095c57daaf199978379e41585c333ef862c6dd818c9b74678210dafa07f12ffba5b8db878d8250c294aee52de9d5ac505156715b5e8e2b0e66c42acba5080eb2911a22887d87aad7680205dbf884e38d02251df8bc97a13b102af2b88b3a1dbb1238ec32d1725a4e91044298d13cca295d9d5cbcaa3392e0eecbb4acaf957e228156761016f330c0405baf198e809ce600319bca48227e9084129fb7d170ccd60d8c641fc51fa0d1d78e054e819a947c463a1ee7c65f671ce381155e098d7bfaab3108db331deec5402712597f2abc6e7298a4a5f4855cf15ee55820eceb2380894e58f08bf1af795e40727c09b25979d7e290a02354638fcac8da08cf50a831066fbc1745d95d43bc9f63b8d8abf6a7c1495b7e7761a586e22b875ef4fd0cbee41b01f10cdb9102ceaf8cd45cd2ee44944c592226f0257d515a78e4ea330859b7cce3d9c02a15d058162b9ec790bfee4f2b9c6debf625c2109dbc5db5cc49577533fcf90da8c360fd5a9bb5ed14a6b3c18f10463fd96dcbbf8588c342b6ab86f1ae68f5d381bec8bb8ecf243862aa753bcdbb66b994019c63b89358779b41f444ddae7084135a903b4d50ae74b4d20b80889cd6cfd6930d621da52258dfbbc292e0925f80cd28caf6daa88c0e0f3cc202e511bc1fa151aa8743069057de5b52757ad9a74f74b9ebc660da6766ed5b9a4f965beffcec54825172b900539f40666d38344dd853052ef9852a9c412e04b5ba78dfe2fb8f0e2876279069641d2c0ecd4bf018acd27af3a973969bdba7b3b50086c405491972ef3eaa4dd5a7785ccfc662c0a90dae52959d51cb32e81c904a0a93ab330b43514c8898616d03b08cf71c4bf47ef3c83bed8b21bb754e552447dc5012b87e19211d303ae4c6544ac9b9abe388009bd1caf3024583a4d12fb137f7e3b5a3d0ccbfdb27d3f24bfd6461f820cbab1f5c9e1f4898d0d5e2831282a308fc87e06801deca485757071ddf110111dabf668786d33b381b69a435ff48366cf9ac475119e32f07eddfbfe03d8e7a21353eccc41671c61f03d520a6016b7dfd7e8f5f13e11d2335b904e02259c8ca10ad4a99d8c7566211cd393ed6297317eb598b76793a525c44caa103c52a8e4f10a02bda486610864fc2d0e89120e6fa04f3f1a0762cf1eea3fded4ebc910e853c2525d36cdf5594395c04dd2ab41896a2301ebf050cba075256349879d24896c65c37ccb2051ba7aa89f7706ff4fb80a0def2e1ac06dfe7db36517efcc24d9e0b6e29ef1333edb8e313fc19fd8459231e70a56712dc2ba93c55feecd1007815ec6f7d611790e07b840da856363d267297b80d7e3cc7ac868500277de4d9bdd3f6d05e73007ef2cd8d3bededba82a2321293f353c0b3b5f6bf5dc42362427b753887204b4bffe4180e02cd589c2632de7c8674ecea823ff3b9132f5eaee97290da783e263db29b0277d99522f337422eaf9fe8caf50a44d929201f7d9a946c60917e3a33e9da4a70c9bb917c14c5634ead83d994f4c7e4980937c1679264b400f8afc0b5285c7335b6d75f1a1d7bbac17154d75b71890d077e18e85bda6e571ee2f2966f37be071e55bbab2df69125008e1d9c9cf7a6848effec9161c36689a0fccc83612df4e738e9c9edb6545ef389398d8d6e51710b2dbbc4dcc6f07baeada16ea2ecdb24eb74b6b074670a437cca3ca07464a694849234e76c3042d9a3159c33df3cc5c710253753143fe0a10b2c22b3aa46f88a3028fa9c50563f32c0216eed0670552ce466bb1d4ca5feea43622878838f443c539763a89b757245e45af692f35bf9b0bcdae4fd4df783db48d4db8324b3de94064b9594fee3760669d54dc62793e10489e321d79847a2e116dbb13281c9c0974f6f4d74580ef67ec7f2d9b1be99996d410185e37f4fe66927e121c7eb5284044f69e7306bad4ce9d09fb5202ad7c7fe85c76f0a3e91276ec6ba5ec2dbafe06b01fe30c061df36d7aeeadb9f8dea42b0f6b80afc6b6b5469df8dcac8ac313dfa66c904909caf4a9f1f77a41816a14ef1bf08bf27a1bba44debb5295e7ddeff19446379a4819eb46eee94c8e8839402118d7373142b960417ff567516da015e29bf165f5317a6785c5fb9d4dc2f1dd60c51070aef1f0c1ec3c5b429d8acac84d0a1de739ac1cd90c73c732ffab10c7a42e7a9cd9c05cf250637c185363eb0618cf640dd6aff90f610be026226b8b2c4b1ab8f15a95aaa9a2b440e2134d271ef6e34057c8c979bc565c889e9a0feb064ccf7e7d56958ce6b6e76b3d89e0da1059eb545ec636fde232acf3d6977982d2b53b32e8ae4776df25d064aa20aba297d10f15c3f2554d3b080b3c53c3aeffd61a29fe80d9b5f0dd03617aab6d0593cb7b0b1302a67bfe88c28e6c68ab3ddb66025dbb152d6356577e441819f56be6f89d9fe3dc12c4afee48dc249c2ee58e055c782169cfc5631891af320869dcec05b7d4f2aff2719a0248282b6b1b83fb3d13a9311000e6dce747368168f4e516a4d5155496c9193b8f3bb2f9d603696b50127f62c8e28413f0af66b5a83ca81c80468ce89e0de53f1de0eb3d823056df7c1c28083f1f8309c626eae193c5200969f0d091a589b58b93d2592b60140950c7083f61303ad8bfaa4b2f05bffe7e878a7ebcca46b36c492f3a51506a47b6a41353d31a3edd611e863c03eec1905b0be1796cf3ac3e380fed00fc1a9b9489973b0ca813496639ec8c137ef0cacaed286c96fdfec27ef222f57bf7072c447477dea0a24cd3acf783b4b3816e4e81049118351d317e437292aae78a2cf0439b5ce5537e66b8ab233e6dc0b8fb1018850dbd224e56805397f3e51fc5e42c3ab1c8d78dbd5ad68b01153570d5decd486186b1da43ce075380d5dc13b8ad6c0e8a459728409068c413f5b65d4877fbabf542225a33f966d29b1cd0e076805f64f939407434a9884aad488e9a1bf4919cdbb5f2b92b331bfc30c04f9ee5455c746ee4d4293f4d02fa7327892bad806eb97216240363114626ca1f97bf9e0a47844ab09eb41138d7ae5d89ccf947d106e3469d203f24228a746b75cf85d8aec19e074f82993aef4256f4d5033e4a6adae5b353df870dc87d874f1d0b8ee268551447f39016cb53dd25f6b8594ce1a73f2dca5963791b0d60b61f4abe714f8b87500f19561ff571e92e30f77a294c47b258a4a97c48744ff38b08ab9f7032506a323d3f206465a7778f488db05528aa01739c431c9bfa57627c5ed4261c37091bef7139ea268cb71a26b7249d08dfcf1de57393c9c3423919e63af16b64e0be681453dfcad1a7c0a57ab42c8368b7d474d211a5254e090bbf7e8551a83adb4fa71cf7184a5948ccfe676b25ca1f868e167795e3159f3358f8a7e139528c7300d3896b028126c6f9ffd0907dc1377fa571c258c53508fbb2e75c439e118b4dfaa68ec9d4b9ab43e5703aa250eeda636e74ea6ec3e85fa375032ffa3cb268944ee459c9a96aae278d87a326371c2a4d6cc84c577e868ed8c571dd06c41ef19b13b9241c0f2ae677308544815e97f0e95ed23e72efb44bedc3a7c7fc6a2368b873b9ca8ea9d4ee06e5d1328b1fdf60bdff342bbccd970d2a73d56cf5c9c2904da806d3b5649830bc026a8b42c314d2e6fd76a0543df91ac028c37ff4c3f836dc4c926f463e7ca576b86e78c379b835343adf1b85f44972fc7f0b65abedb593927848777e6fad5986c16f1215198188b32f9207651c2056206e3a0ceef1c4779b24406b3c83a6efddab7ec5a9eca874377dd103ae6ace4baa8692af1951bdb11c8b936047c0f8c3fac5392408df7d25f1c7f30f82bbc353fc2b3bcc1a089fc3d62d0fc32fff905da12e9eba01d9bf5c250d3bc34e6e3233c5de0e244dd89c5b929633430d70ed898975ef7b3f7c0c8b17ce6ba2697324c54da293e73ff52bc98ea160d8af22152bac12e06ed75fb98ddaa3aae1de63c335c62da5219277b8c39166fb0d496af9d156167c52d4317b723a9b75392da51db59a0722e24e249c89a5c5ac3bddd9d110ada80ed53444a3cacef0b07f71bcbf229747a47c2f38ebcd6ee8446e6fb18c0319740b9b8a1e08bd422a24fcdee141b6f33c3df5f23cc6020a6bcdee64bebe621496131d886a87affcf1d07fb187abe8288bf8479305166c4e1c14f10ff25d54b02b0ea2a920a84d0fd1f3580e6d87b4a4af06cc2c30543928f83900d437cdd2696a0760c08338688ca6f3168c4d21261fe9f53e7c39a269017612b0dcaf0a987da45a64d36aeada20674eff24e33085a9810080a8bb7dd07c7af8d2167556640b48e4607bf0879fccda3b3b06c298bfec7da73015897d437eb5d7f7c987dfef27cf9044520e169ed9ad6ad8d7bfadd0bedaf55a86e0cf87515d930b4c4d2a3ee919007c58e7df65813bee6c2f511658e37a6589fca7f333c835c3d9de7c856659490472020d26c4bd8e471861ece3244bad1156648ed4dd4aed0b7d55b021e94dc644fb9c1d79aabc4f39c2a855e791ba3d24b3035e06f458ac156b8e40ac716b9a392be4d7905545a4d7945d6dd8b3f6ac55a51f0ec9b508226118a2338ca6c25015efb418cd673655e2dd9d25df1482f01aaf9132c110dfd9a77364d78f118105d4b72086a303a318159985ff3a457594a96a0dfda2f58f5cc6cb76ab4354adbfb6be20973b8f9ae37c68a9ba59463c53793d92093e660ad6209a3a6a81f7d43105ed261b791fbb178889661ea81935561f89553dd57b57fd1213a3ae5baad10a58cf4d7331ba5ba306512e3919d92bb765701d340c036334320910013d3210cc55ca527c07490eac1fe84e6484abd26cc9ee47a510d2c2baec4e4e5bbe7a4842f38c8b9988b92dcab3bdba530039fc1ee32cab6cd412e2545a74aa5cc977aafdda5110d612ab87260cb768f3d8ade07bd84f5c5a26aa11e88d6ec9acba6750c44aab993b754c93083c13dcfbd4f4576bcc543201e96c6a3201f9f15df2180370b4a407458fdb2d5a9c0ca58df6b6867dc0bd561150bb93eb7d931bd41af294330933d132a3a1d5c4fa2dee434dbf3da9e09c593b768348a9b5bf078d2cefbd652c4275bb46f13902421acee1a429bbe2d77a67a99d71c7e246a7f5002b92d6c60c5a8fac45d974ff3078aa12a1e3d06ee88ca6f06169bb67b05db5bfecb2db3622cc717732e616be800ae2b0f647ab4365264a39471f7e353e68f43ab5eac5d9c73d2233e2dd238903c3c7d14d03bdd25a7faf6fcd1deaf94c760a4535979f3174bfb124e7f69b41cbe4ac97c2990e6e2fac123afc0a29be310b6368ad4ce48a711162376c48857acd2c68a50c5fe0d0443438ff3e3153564e5242e3ee33ac31d03bd8670ca537d135434cbbccdbb5a090aa535db8395f8c753fdee0f40420c762901f0d1627ce82814cae9fc98a1caabd7e233ca02dfe426406a0d795bc84316dc5741bc7110601d6a840a3514ffe601254c62d06c6d0e2bfdf84c4f86bce4fe170bf452c35dad3f0d019ed244298be53c634205ba8373cf1716c6b4150af05eda5979cbb5a213fd2a1aeed34ef301592571154ef2e549534769424af7da598ca584754cfbb47fe6f03dd7cb425ef8f6174baa6fdc9704f6fc4ebb40468572b3612ad96c80c7755567b95a5a4b9f749f1fbdf076e704b98188170a9d81bdb7ea5a8f13159d438a14a1f36fab61c4478ada54bd2b2f3fbd99089ac8390356d2fbf73d9dd91ddec9cb66e2f975384f4d32e39c66ee87f1252d931d2b1073ce1c7d73422049e1f53e6fc6991bdafe3740e6b58c01dd1934d6addc07b02a4fa811522f76f7a3743ba9f6ac2c3af7963a8f175403a9e7a4200c20eb4852ee1c88a2b575167eba7d0f6d2e084c20a6f27d326229dd05f9b33b3b241495b65e9274f428dfcc43b91140f9fa3920df9acc4e4c002bc739e731ed4c2619c14f8e68b8fee2a22400af31aa37ee4b073c22d48b0b2e9d96baa94eb3ca0082e90fecfdc8c9424a561fbc4f68cda33cff7802b20f21ba2028586bedb9fde64060881b1f8bd9f390dd31165053aa0e3f1035b3bc85e50e3e7abd5aed2d7fc4e0ce774a29290c3453c0184ffeb270e88794049705e5b7375606a1503cf0fd62e7021c33bcb06b1a9749016adce83dc88251bbe2fd5b3a73423817e017e9807ba75fd93aa88239f30e0bc73f4fc1d45065b5d55896df4290e5d608cb2cd7b6a3cfb159d2ed532380ad2d6ac8b74d98f7eb9bc5b2e292c82b2903ba533544759fac6c66500fb48c9be4bb373f470807e7c574a18ea333d974097a71ea
+
diff --git a/src/tests/test_xmss.cpp b/src/tests/test_xmss.cpp
new file mode 100644
index 000000000..dd53d9b7f
--- /dev/null
+++ b/src/tests/test_xmss.cpp
@@ -0,0 +1,72 @@
+/**
+ * Extended Hash-Based Signatures Tests
+ *
+ * (C) 2014,2015 Jack Lloyd
+ * (C) 2016 Matthias Gierlings
+ **/
+
+#include "tests.h"
+
+#if defined(BOTAN_HAS_XMSS)
+ #include <botan/xmss.h>
+ #include "test_pubkey.h"
+#endif
+
+namespace Botan_Tests {
+
+namespace {
+
+#if defined(BOTAN_HAS_XMSS)
+
+class XMSS_Signature_Tests : public PK_Signature_Generation_Test
+ {
+ public:
+ XMSS_Signature_Tests() : PK_Signature_Generation_Test(
+ "XMSS",
+ "pubkey/xmss_sig.vec",
+ {"Msg", "PrivateKey", "Signature"},
+ {})
+ {}
+
+ std::string default_padding(const VarMap&) const override { return "Raw"; }
+
+ std::unique_ptr<Botan::Private_Key> load_private_key(const VarMap& vars) override
+ {
+ const std::vector<byte> raw_key = get_req_bin(vars, "PrivateKey");
+ const Botan::secure_vector<byte> sec_key(raw_key.begin(), raw_key.end());
+
+ std::unique_ptr<Botan::Private_Key> key(new Botan::XMSS_PrivateKey(sec_key));
+ return key;
+ }
+ };
+
+class XMSS_Signature_Verify_Tests : public PK_Signature_Verification_Test
+ {
+ public:
+ XMSS_Signature_Verify_Tests() : PK_Signature_Verification_Test(
+ "XMSS",
+ "pubkey/xmss_verify.vec",
+ {"Msg", "PublicKey", "Signature"},
+ {})
+ {}
+
+ std::string default_padding(const VarMap&) const override { return "Raw"; }
+
+ std::unique_ptr<Botan::Public_Key> load_public_key(const VarMap& vars) override
+ {
+ const std::vector<byte> raw_key = get_req_bin(vars, "PublicKey");
+ const Botan::secure_vector<byte> sec_key(raw_key.begin(), raw_key.end());
+
+ std::unique_ptr<Botan::Public_Key> key(new Botan::XMSS_PublicKey(sec_key));
+ return key;
+ }
+ };
+
+BOTAN_REGISTER_TEST("xmss_sign", XMSS_Signature_Tests);
+BOTAN_REGISTER_TEST("xmss_verify", XMSS_Signature_Verify_Tests);
+
+#endif
+
+}
+
+}