diff --git a/dap-sdk/crypto/include/dap_enc_GOST.h b/dap-sdk/crypto/include/dap_enc_GOST.h
index 9ba75cc899ec35c2ed59927b9bb556dee1a01bae..c64be029a0a8c78ac3df145dceff8c21721c0e39 100644
--- a/dap-sdk/crypto/include/dap_enc_GOST.h
+++ b/dap-sdk/crypto/include/dap_enc_GOST.h
@@ -3,7 +3,7 @@
 
 #include <stddef.h>
 #include "dap_enc_key.h"
-#include "GOST/block_chipher.h"
+#include "GOST/block_cipher.h"
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/dap-sdk/crypto/include/dap_enc_SEED.h b/dap-sdk/crypto/include/dap_enc_SEED.h
new file mode 100644
index 0000000000000000000000000000000000000000..8b9a31acea0357400b4f4cfaf7cb0b45deac9533
--- /dev/null
+++ b/dap-sdk/crypto/include/dap_enc_SEED.h
@@ -0,0 +1,34 @@
+#ifndef _DAP_ENC_SEED_H_
+#define _DAP_ENC_SEED_H_
+
+#include <stddef.h>
+#include "dap_enc_key.h"
+#include "seed/seed.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+void dap_enc_seed_key_delete(struct dap_enc_key *a_key);
+void dap_enc_seed_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
+        size_t kex_size, const void * seed, size_t seed_size, size_t key_size);
+//------SEED_OFB---------
+void dap_enc_seed_ofb_key_new(struct dap_enc_key * a_key);
+
+size_t dap_enc_seed_ofb_calc_decode_size(const size_t size_in);
+size_t dap_enc_seed_ofb_calc_encode_size(const size_t size_in);
+
+size_t dap_enc_seed_ofb_decrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
+size_t dap_enc_seed_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
+
+// Writes result ( out ) in already allocated buffer
+size_t dap_enc_seed_ofb_decrypt_fast(struct dap_enc_key * a_key, const void * a_in,
+        size_t a_in_size, void * buf_out, size_t buf_out_size);
+// Writes result ( out ) in already allocated buffer
+size_t dap_enc_seed_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in,
+        size_t a_in_size, void * buf_out, size_t buf_out_size);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/dap-sdk/crypto/include/dap_enc_bf.h b/dap-sdk/crypto/include/dap_enc_bf.h
index 6501f9dee1ac7f0d599795a9c8770d0d05bf8702..abaaaa99a0c1a20620b965aa751cc33f74a10610 100644
--- a/dap-sdk/crypto/include/dap_enc_bf.h
+++ b/dap-sdk/crypto/include/dap_enc_bf.h
@@ -5,6 +5,8 @@
 #include "dap_enc_key.h"
 #include"blowfish/blowfish.h"
 
+#define BLOWFISH_BLOCK_SIZE 8
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -14,7 +16,7 @@ void dap_enc_bf_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
 //-----CBC----------
 void dap_enc_bf_cbc_key_new(struct dap_enc_key * a_key);
 
-size_t dap_enc_bf_cbc_calc_decode_size(const size_t size_in);
+size_t dap_enc_bf_cbc_calc_decode_max_size(const size_t size_in);
 size_t dap_enc_bf_cbc_calc_encode_size(const size_t size_in);
 
 size_t dap_enc_bf_cbc_decrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out);
diff --git a/dap-sdk/crypto/include/dap_enc_key.h b/dap-sdk/crypto/include/dap_enc_key.h
index 8f05effe7e8b7f7f5ac08d05056a9f11636fade2..7e2c7c6901aba7f627e26bbfc30c31098e877631 100755
--- a/dap-sdk/crypto/include/dap_enc_key.h
+++ b/dap-sdk/crypto/include/dap_enc_key.h
@@ -55,7 +55,9 @@ typedef enum dap_enc_key_type{
 
                            DAP_ENC_KEY_TYPE_SALSA2012,//SALSA2012//http://www.ecrypt.eu.org/stream/salsa20pf.html//https://ianix.com/pub/salsa20-deployment.html
 
-                           DAP_ENC_KEY_TYPE_RLWE_NEWHOPE, // "NewHope": key exchange from the ring learning with errors problem
+                           DAP_ENC_KEY_TYPE_SEED_OFB,//SEED Cipher in OFB mode
+
+                           DAP_ENC_KEY_TYPE_RLWE_NEWHOPE_CPA_KEM, // "NewHope": key exchange from the ring learning with errors problem
                                                 //  (Alkim, Ducas, Pöppelmann, Schwabe, USENIX Security 2016 )
                                                 //  Using the reference C implementation of NewHope
                                                 // from https://github.com/tpoeppelmann/newhop
diff --git a/dap-sdk/crypto/src/GOST/28147_14.c b/dap-sdk/crypto/src/GOST/28147_14.c
index f8f92d97c2f99c23545e41309b068a1de1e15cc7..69133fa7771e4083c7b526f2b06627af4723660d 100644
--- a/dap-sdk/crypto/src/GOST/28147_14.c
+++ b/dap-sdk/crypto/src/GOST/28147_14.c
@@ -1,5 +1,5 @@
 /** @file 
- * @brief Ðåàëèçàöèÿ àëãîðèòìà "Êóçíå÷èê"
+ * @brief Реализация алгоритма "Кузнечик"
  *
  * @copyright InfoTeCS. All rights reserved.
  */
@@ -9,7 +9,7 @@
 #include "28147_14.h"
 #include "table.h"
 
-/** @brief Íåëèíåéíîå áèåêòèâíîå ïðåîáðàçîâàíèå ìíîæåñòâà äâîè÷íûõ âåêòîðîâ. */
+/** @brief Нелинейное биективное преобразование множества двоичных векторов. */
 static const unsigned char kPi[256] =
 {
 	252, 238, 221,  17, 207, 110,  49,  22, 251, 196, 250, 218,  35, 197,   4,  77, 
@@ -30,7 +30,7 @@ static const unsigned char kPi[256] =
 	 89, 166, 116, 210, 230, 244, 180, 192,	209, 102, 175, 194,  57,  75,  99, 182
 };
 
-/** @brief Îáðàòíîå íåëèíåéíîå áèåêòèâíîå ïðåîáðàçîâàíèå ìíîæåñòâà äâîè÷íûõ âåêòîðîâ. */
+/** @brief Обратное нелинейное биективное преобразование множества двоичных векторов. */
 static const unsigned char kReversePi[256] =
 {
      0xa5,0x2d,0x32,0x8f,0x0e,0x30,0x38,0xc0,0x54,0xe6,0x9e,0x39,0x55,0x7e,0x52,0x91,
@@ -51,7 +51,7 @@ static const unsigned char kReversePi[256] =
      0x12,0x1a,0x48,0x68,0xf5,0x81,0x8b,0xc7,0xd6,0x20,0x0a,0x08,0x00,0x4c,0xd7,0x74
 };
 
-/** @brief Êîýôôèöèåíòû óìíîæåíèÿ â ïðåîáðàçîâàíèè l */
+/** @brief Коэффициенты умножения в преобразовании l */
 static const  unsigned char kB[16] = {148, 32, 133, 16, 194, 192, 1, 251, 1, 192, 194, 16, 133, 32, 148, 1};
 
 int DLL_IMPORT  funcX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print)
diff --git a/dap-sdk/crypto/src/GOST/28147_14.h b/dap-sdk/crypto/src/GOST/28147_14.h
index d044037ef8da7629b5393db825ac09e4f9a0808c..80ac954416dea6970a459373d8d61e691f94512d 100644
--- a/dap-sdk/crypto/src/GOST/28147_14.h
+++ b/dap-sdk/crypto/src/GOST/28147_14.h
@@ -1,5 +1,5 @@
 /** @file 
- * @brief Îáúÿâëåíèå ôóíêöèé ðåàëèçóþùèõ ïðåîáðàçîâàíèÿ èç àëãîðèòìà "Êóçíå÷èê"
+ * @brief Объявление функций реализующих преобразования из алгоритма "Кузнечик"
  *
  * @copyright InfoTeCS. All rights reserved.
  */
@@ -15,153 +15,153 @@
 extern "C" {
 #endif
 
-/** @brief Ïðåîáðàçîâàíèå X
+/** @brief Преобразование X
  *
- * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] b âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] a входной параметр преобразования
+ * @param[in] b входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå S
+/** @brief Преобразование S
  * 
- * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] indata входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcS(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå îáðàòíîå ê ïðåîáðàçîâàíèþ  S
+/** @brief Преобразование обратное к преобразованию  S
  * 
- * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] indata входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcReverseS(unsigned char* indata, unsigned char*  outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå R
+/** @brief Преобразование R
  * 
- * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] indata входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcR(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå îáðàòíîå ê ïðåîáðàçîâàíèþ  R
+/** @brief Преобразование обратное к преобразованию  R
  * 
- * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] indata входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcReverseR(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå L
+/** @brief Преобразование L
  * 
- * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] indata входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcL(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå îáðàòíîå ê ïðåîáðàçîâàíèþ  L
+/** @brief Преобразование обратное к преобразованию  L
  * 
- * @param[in] indata âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] indata входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcReverseL(unsigned char* indata, unsigned char* outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå LSX
+/** @brief Преобразование LSX
  * 
- * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] b âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] a входной параметр преобразования
+ * @param[in] b входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcLSX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå îáðàòíîå ê ïðåîáðàçîâàíèþ  LSX
+/** @brief Преобразование обратное к преобразованию  LSX
  * 
- * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] b âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[out] outdata ðåçóëüòàò ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] a входной параметр преобразования
+ * @param[in] b входной параметр преобразования
+ * @param[out] outdata результат параметр преобразования
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcReverseLSX(unsigned char* a, unsigned char* b, unsigned char* outdata, printout_byte_array print);
 
-/** @brief Ïðåîáðàçîâàíèå F
+/** @brief Преобразование F
  * 
- * @param[in] inputKey Ïåðâûé êëþ÷  èç ïàðû êëþ÷åé ïîëó÷åííîé â ïðåäåäóùåé èòåðàöèè
- * @param[in] inputKeySecond Âòîðîé êëþ÷  èç ïàðû êëþ÷åé ïîëó÷åííîé â ïðåäåäóùåé èòåðàöèè
- * @param[in] iterationConst Èòåðàöèîííàÿ êîíñòàíòà
- * @param[out] outputKey Ïåðâûé êëþ÷
- * @param[out] outputKeySecond Âòîðîé êëþ÷
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] inputKey Первый ключ  из пары ключей полученной в предедущей итерации
+ * @param[in] inputKeySecond Второй ключ  из пары ключей полученной в предедущей итерации
+ * @param[in] iterationConst Итерационная константа
+ * @param[out] outputKey Первый ключ
+ * @param[out] outputKeySecond Второй ключ
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcF(unsigned char* inputKey, unsigned char* inputKeySecond, unsigned char* iterationConst, unsigned char* outputKey, unsigned char* outputKeySecond, printout_byte_array print);
 
-/** @brief Âû÷èñëåíèå èòåðàöèîííîé êîíñòàíòû Ñ 
+/** @brief Вычисление итерационной константы С 
  * 
- * @param[in] number íîìåð êîíñòàíòû
- * @param[out] output èòåðàöèîííàÿ êîíñòàíòà
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] number номер константы
+ * @param[out] output итерационная константа
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT funcC(unsigned char number, unsigned char* output, printout_byte_array print);
 
-/** @brief Ðàçâåðòêà êëþ÷à
+/** @brief Развертка ключа
  * 
- * @param[in] masterKey Ìàñòåð êëþ÷
- * @param[out] keys ìàññèâ ðàçâåðíóòûõ êëþ÷åé
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] masterKey Мастер ключ
+ * @param[out] keys массив развернутых ключей
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT ExpandKey(unsigned char* masterKey, unsigned char* keys, printout_byte_array print);
 
-/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ áëîêà
+/** @brief Выполнение зашифрования блока
  * 
- * @param[in] plainText Èñõîäíûé áëîê
- * @param[out] chipherText Çàøèôðîâàííûé áëîê
- * @param[in] keys Ðàçâåðíóòûå êëþ÷è
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] plainText Исходный блок
+ * @param[out] chipherText Зашифрованный блок
+ * @param[in] keys Развернутые ключи
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT Encrypt_14(unsigned char* plainText, unsigned char* chipherText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint);
 
-/** @brief Âûïîëåíèå ðàñøèôðîâàíèÿ áëîêà
+/** @brief Выполение расшифрования блока
  * 
- * @param[in] chipherText Çàøèôðîâàííûé áëîê
- * @param[out] plainText Ðàñøèôðîâàííûé áëîê
- * @param[in] keys Ðàçâåðíóòûå êëþ÷è
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] chipherText Зашифрованный блок
+ * @param[out] plainText Расшифрованный блок
+ * @param[in] keys Развернутые ключи
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT Decrypt_14(unsigned char* chipherText, unsigned char* plainText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint);
 
diff --git a/dap-sdk/crypto/src/GOST/28147_89.c b/dap-sdk/crypto/src/GOST/28147_89.c
index 5cf2cc170208ae996da59605e6b2ed01bf982f9d..0f45378cac7b356a8b8247a52407aec8705ea979 100644
--- a/dap-sdk/crypto/src/GOST/28147_89.c
+++ b/dap-sdk/crypto/src/GOST/28147_89.c
@@ -1,15 +1,15 @@
 /** @file 
- * @brief Ðåàëèçàöèÿ àëãîðèòìà 28147-89
+ * @brief Реализация алгоритма 28147-89
  *
  * @copyright InfoTeCS. All rights reserved.
  */
 
 #include "28147_89.h"
 
-/** @brief Êîíâåðòèðóåò ìàññèâ áàéò â int32
+/** @brief Конвертирует массив байт в int32
  *
- * @param[in] input ìàññèâ èç 4 áàéò
- * @return int32 ÷èñëî
+ * @param[in] input массив из 4 байт
+ * @return int32 число
  */
 static unsigned int uint8ToUint32(unsigned char* input)
 {
@@ -17,10 +17,10 @@ static unsigned int uint8ToUint32(unsigned char* input)
      return r;
 }
 
-/** @brief Êîíâåðòèðóåò int32 â ìàññèâ áàéò
+/** @brief Конвертирует int32 в массив байт
  *
- * @param[in] input int32 ÷èñëî
- * @param[out] output ìàññèâ èç 4 áàéò
+ * @param[in] input int32 число
+ * @param[out] output массив из 4 байт
  */
 static void uint32ToUint8(unsigned int input, unsigned char* output)
 {
@@ -32,7 +32,7 @@ static void uint32ToUint8(unsigned int input, unsigned char* output)
 }
 
 
-/** @brief Òàáëèöà ïîäñòàíîâêè  id-tc26-gost-28147-param-Z OID: 1.2.643.7.1.2.5.1.1 */
+/** @brief Таблица подстановки  id-tc26-gost-28147-param-Z OID: 1.2.643.7.1.2.5.1.1 */
 unsigned char p[8][16] =
 {
      {0xc, 0x4, 0x6, 0x2, 0xa, 0x5, 0xb, 0x9, 0xe, 0x8, 0xd, 0x7, 0x0, 0x3, 0xf, 0x1},
@@ -46,13 +46,13 @@ unsigned char p[8][16] =
 
 };
 
-/** @brief èñïîëüçóåìûé áàéò êëþ÷à ïðè øèôðîâàíèè */
+/** @brief используемый байт ключа при шифровании */
 unsigned char kEncRoundKey[32] = 
 {
      0, 4, 8, 12, 16, 20, 24, 28, 0, 4, 8, 12, 16, 20, 24, 28, 0, 4, 8, 12, 16, 20, 24, 28, 28, 24, 20, 16, 12, 8, 4, 0
 };
 
-/** @brief èñïîëüçóåìûé áàéò êëþ÷à ïðè ðàñøèôðîâàíèè */
+/** @brief используемый байт ключа при расшифровании */
 unsigned char kDecRoundKey[32] = 
 {
      0, 4, 8, 12, 16, 20, 24, 28, 28, 24, 20, 16, 12, 8, 4, 0, 28, 24, 20, 16, 12, 8, 4, 0, 28, 24, 20, 16, 12, 8, 4, 0
diff --git a/dap-sdk/crypto/src/GOST/28147_89.h b/dap-sdk/crypto/src/GOST/28147_89.h
index f4c2694c1153e370bcf427f9edb5733d5e156112..a0f78eb8a7ae1be046866357be601aafddd1c2e0 100644
--- a/dap-sdk/crypto/src/GOST/28147_89.h
+++ b/dap-sdk/crypto/src/GOST/28147_89.h
@@ -1,5 +1,5 @@
 /** @file 
- * @brief Îáúÿâëåíèå ôóíêöèé ðåàëèçóþùèõ ïðåîáðàçîâàíèÿ èç àëãîðèòìà "28147-89"
+ * @brief Объявление функций реализующих преобразования из алгоритма "28147-89"
  *
  * @copyright InfoTeCS. All rights reserved.
  */
@@ -14,96 +14,96 @@
 extern "C" {
 #endif
 
-/** @brief Ôóíêöèÿ ïîäñòàíîâêè
+/** @brief Функция подстановки
  *
- * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return ðåçóëüòàò ïðåîáðàçîâàíèÿ
+ * @param[in] a входной параметр преобразования
+ * @param[in] print функция логирования
+ * @return результат преобразования
  */
 unsigned int DLL_IMPORT funcT(unsigned int a, printout_uint_array print);
 
-/** @brief Ïðåîáðàçîâàíèå g Èç ñòàíäàðòà
+/** @brief Преобразование g Из стандарта
  *
- * @param[in] a âõîäíîé ïàðàìåòð ïðåîáðàçîâàíèÿ
- * @param[in] k êëþ÷
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return ðåçóëüòàò ïðåîáðàçîâàíèÿ
+ * @param[in] a входной параметр преобразования
+ * @param[in] k ключ
+ * @param[in] print функция логирования
+ * @return результат преобразования
  */
 unsigned int DLL_IMPORT funcG(unsigned int a, unsigned int k, printout_uint_array print);
 
-/** @brief Ïðåîáðàçîâàíèå G Èç ñòàíäàðòà
+/** @brief Преобразование G Из стандарта
  *
- * @param[out] a1 óêàçàòåëü íà áóôåð, ãäå õðàíÿòñÿ äàííûå è êóäà áóäåò çàïèñàí ðåçóëüòàò 
- * @param[out] a0 óêàçàòåëü íà áóôåð, ãäå õðàíÿòñÿ äàííûå è êóäà áóäåò çàïèñàí ðåçóëüòàò 
- * @param[in] k êëþ÷
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
+ * @param[out] a1 указатель на буфер, где хранятся данные и куда будет записан результат 
+ * @param[out] a0 указатель на буфер, где хранятся данные и куда будет записан результат 
+ * @param[in] k ключ
+ * @param[in] print функция логирования
  */
 void DLL_IMPORT Round(unsigned int* a1, unsigned int* a0, unsigned int k, printout_uint_array print);
 
-/** @brief Ïðåîáðàçîâàíèå G Èç ñòàíäàðòà ( íå ìåíÿÿ áëîêè à1 è à0 ìåñòàìè )
+/** @brief Преобразование G Из стандарта ( не меняя блоки а1 и а0 местами )
  *
- * @param[out] a1 óêàçàòåëü íà áóôåð, ãäå õðàíÿòñÿ äàííûå è êóäà áóäåò çàïèñàí ðåçóëüòàò 
- * @param[out] a0 óêàçàòåëü íà áóôåð, ãäå õðàíÿòñÿ äàííûå è êóäà áóäåò çàïèñàí ðåçóëüòàò 
- * @param[in] k êëþ÷
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
+ * @param[out] a1 указатель на буфер, где хранятся данные и куда будет записан результат 
+ * @param[out] a0 указатель на буфер, где хранятся данные и куда будет записан результат 
+ * @param[in] k ключ
+ * @param[in] print функция логирования
  */
 void DLL_IMPORT RoundShtrih(unsigned int *a1, unsigned int *a0, unsigned int k, printout_uint_array print);
 
-/** @brief Áàçîâîå êðèïòîãðàôè÷åñêîå ïðåîáðàçîâàíèå
+/** @brief Базовое криптографическое преобразование
  *
- * @param[in] input - ñîîáùåíèå ñ äëèíîþ ðàâíîé äëèíå áëîêà äàííûõ
- * @param[out] output - ðåçóëüòàò îïåðàöèè
- * @param[in] key êëþ÷
- * @param[in] keySequence ïîñëåäîâàòåëüíîñòü ïðèìåíåíèÿ êëþ÷åé
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] input - сообщение с длиною равной длине блока данных
+ * @param[out] output - результат операции
+ * @param[in] key ключ
+ * @param[in] keySequence последовательность применения ключей
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT CryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, unsigned char* keySequence, printout_uint_array print);
 
-/** @brief Øèôðóåì áëîê äàííûõ
+/** @brief Шифруем блок данных
  *
- * @param[in] input - áëîê äàííûõ îòêðûòûé òåêñò
- * @param[out] output - çàøèôðîâàííûé áëîê äàííûõ
- * @param[in] key êëþ÷
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] input - блок данных открытый текст
+ * @param[out] output - зашифрованный блок данных
+ * @param[in] key ключ
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT EncryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, printout_uint_array print);
 
-/** @brief Ðàñøèôðîâûâàåì áëîê äàííûõ
+/** @brief Расшифровываем блок данных
  *
- * @param[in] input - çàøèôðîâàííûé áëîê äàííûõ
- * @param[out] output - ðàñøèôðîâàííûé áëîê äàííûõ
- * @param[in] key êëþ÷
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] input - зашифрованный блок данных
+ * @param[out] output - расшифрованный блок данных
+ * @param[in] key ключ
+ * @param[in] print функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT DecryptBlock(unsigned char* input, unsigned char* output, unsigned char* key, printout_uint_array print);
 
-/** @brief Øèôðóåì áëîê äàííûõ
+/** @brief Шифруем блок данных
  *
- * @param[in] input - áëîê äàííûõ îòêðûòûé òåêñò
- * @param[out] output - çàøèôðîâàííûé áëîê äàííûõ
- * @param[in] key êëþ÷
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] input - блок данных открытый текст
+ * @param[out] output - зашифрованный блок данных
+ * @param[in] key ключ
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT Encrypt_89(unsigned char* input, unsigned char* output, unsigned char* key, printout_byte_array print, printout_uint_array print_uint);
 
-/** @brief Ðàñøèôðîâûâàåì áëîê äàííûõ
+/** @brief Расшифровываем блок данных
  *
- * @param[in] input - çàøèôðîâàííûé áëîê äàííûõ
- * @param[out] output - ðàñøèôðîâàííûé áëîê äàííûõ
- * @param[in] key êëþ÷
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
+ * @param[in] input - зашифрованный блок данных
+ * @param[out] output - расшифрованный блок данных
+ * @param[in] key ключ
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
  */
 int DLL_IMPORT Decrypt_89(unsigned char* input, unsigned char* output, unsigned char* key, printout_byte_array print, printout_uint_array print_uint);
 
diff --git a/dap-sdk/crypto/src/GOST/GOST.pri b/dap-sdk/crypto/src/GOST/GOST.pri
index 0136dc3c21fac8ed1b024fa393d3938381533e55..176c5281c593784d1dbd5853b8aef35a2d1ba64c 100644
--- a/dap-sdk/crypto/src/GOST/GOST.pri
+++ b/dap-sdk/crypto/src/GOST/GOST.pri
@@ -7,10 +7,10 @@ HEADERS += $$PWD/28147_14.h \
            $$PWD/print_data.h \
            $$PWD/table.h \
            $$PWD/test_data.inc \
-           $$PWD/block_chipher.h
+           $$PWD/block_cipher.h
 
 SOURCES += $$PWD/28147_14.c \
            $$PWD/28147_89.c \
-           $$PWD/block_chipher.c \
+           $$PWD/block_cipher.c \
            $$PWD/print_data.c \
            $$PWD/testgost.c
diff --git a/dap-sdk/crypto/src/GOST/block_chipher.h b/dap-sdk/crypto/src/GOST/block_chipher.h
deleted file mode 100644
index 6dd6f1234898f69072995870a6f88de4471591da..0000000000000000000000000000000000000000
--- a/dap-sdk/crypto/src/GOST/block_chipher.h
+++ /dev/null
@@ -1,426 +0,0 @@
-/** @file 
- * @brief Îáúÿâëåíèå ôóíêöèé ðåàëèçóþùèõ ðåæèìû ðàáîòû áëî÷íûõ àëãîðèòìîâ
- *
- * @copyright InfoTeCS. All rights reserved.
- */
-
-#ifndef BLOCK_CHIPHER_H
-#define BLOCK_CHIPHER_H
-
-#include "dll_import.h"
-#include "callback_print.h"
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ ECB àëãîðèòìà "êóçíå÷èê" */
-#define kEcb14ContextLen 0x38
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ ECB àëãîðèòìà 28147-89 */
-#define kEcb89ContextLen 0x38
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CBC àëãîðèòìà "êóçíå÷èê" */
-#define kCbc14ContextLen 0x60
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CBC àëãîðèòìà 28147-89 */
-#define kCbc89ContextLen 0x60
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CTR àëãîðèòìà "êóçíå÷èê" */
-#define kCtr14ContextLen 0x48
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CTR àëãîðèòìà 28147-89 */
-#define kCtr89ContextLen 0x48
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ OFB àëãîðèòìà "êóçíå÷èê" */
-#define kOfb14ContextLen 0x60
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ OFB àëãîðèòìà 28147-89 */
-#define kOfb89ContextLen 0x60
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CFB àëãîðèòìà "êóçíå÷èê" */
-#define kCfb14ContextLen 0x60
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà øèôðîâàíèÿ CFB àëãîðèòìà 28147-89 */
-#define kCfb89ContextLen 0x60
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà ôîðìèðîâàíèÿ èìèòîâñòàâêè àëãîðèòìà "êóçíå÷èê" */
-#define kImit14ContextLen 0x88
-
-/** @brief Ðàçìåð êîíòåêñòà äëÿ ðåæèìà ôîðìèðîâàíèÿ èìèòîâñòàâêè àëãîðèòìà 28147-89 */
-#define kImit89ContextLen 0x88
-
-/** @brief Ðàçìåð áëîêà àëãîðèòìà "êóçíå÷èê" */
-#define kBlockLen14 16
-
-/** @brief Ðàçìåð áëîêà àëãîðèòìà 28147-89 */
-#define kBlockLen89 8
-
-/** @brief Ðàçìåð êëþ÷à àëãîðèòìà "êóçíå÷èê" */
-#define kKeyLen14 32
-
-/** @brief Ðàçìåð êëþ÷à àëãîðèòìà 28147-89 */
-#define kKeyLen89 32
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/* *** Ðåæèìû øèôðîâàíèÿ ***
- * Ðåæèìû øèôðîâàíèÿ ðàáîòàþò ñ èñïîëüçîâàíèåì áàçîâîãî 
- * êðèïòîãðàôè÷åñêîãî ïðåîáðàçîâàíèÿ
- */
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå ECB äëÿ àëãîðèòìà "êóçíå÷èê"
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò cbc
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_ecb_14(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå ECB äëÿ àëãîðèòìà 28147-89
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò cbc
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_ecb_89(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Óäàëåíèå êîíòåêñòà ecb
- *
- * @param[in] ctx êîíòåêñò ecb
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-void DLL_IMPORT free_ecb(void* ctx);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CBC äëÿ àëãîðèòìà "êóçíå÷èê"
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò cbc
- * @param[in] iv ñèíõðîïîñûëêà
- * @param[in] ivLength äëèíà ñèíõðîïîñûëêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT  init_cbc_14(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CBC äëÿ àëãîðèòìà 28147-89
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò cbc
- * @param[in] iv ñèíõðîïîñûëêà
- * @param[in] ivLength äëèíà ñèíõðîïîñûëêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_cbc_89(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Óäàëåíèå êîíòåêñòà cbc
- *
- * @param[in] ctx êîíòåêñò cbc
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-void DLL_IMPORT free_cbc(void* ctx);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CTR äëÿ àëãîðèòìà "êóçíå÷èê"
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò ctr
- * @param[in] iv ñèíõðîïîñûëêà
- * @param[in] length äëèíà ñèíõðîïîñûëêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_ctr_14(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CTR äëÿ àëãîðèòìà 28147-89
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò ctr
- * @param[in] iv ñèíõðîïîñûëêà
- * @param[in] length äëèíà ñèíõðîïîñûëêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_ctr_89(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Óäàëåíèå êîíòåêñòà ctr
- *
- * @param[in] ctx êîíòåêñò ctr
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-void DLL_IMPORT free_ctr(void* ctx);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå OFB äëÿ àëãîðèòìà "êóçíå÷èê"
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò ofb
- * @param[in] s ïàðàìåòð S
- * @param[in] iv ñèíõðîïîñûëêà
- * @param[in] ivLength äëèíà ñèíõðîïîñûëêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå OFB äëÿ àëãîðèòìà 28147-89
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò ofb
- * @param[in] s ïàðàìåòð S
- * @param[in] iv ñèíõðîïîñûëêà
- * @param[in] ivLength äëèíà ñèíõðîïîñûëêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_ofb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Óäàëåíèå êîíòåêñòà ofb
- *
- * @param[in] ctx êîíòåêñò ofb
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-void DLL_IMPORT free_ofb(void* ctx);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CFB äëÿ àëãîðèòìà "êóçíå÷èê"
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò cfb
- * @param[in] s ïàðàìåòð S
- * @param[in] iv ñèíõðîïîñûëêà
- * @param[in] ivLength äëèíà ñèíõðîïîñûëêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_cfb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà øèôðîâàíèÿ â ðåæèìå CFB äëÿ àëãîðèòìà 28147-89
- *
- * @param[in] key êëþ÷
- * @param[out] ctx êîíòåêñò cfb
- * @param[in] s ïàðàìåòð S
- * @param[in] iv ñèíõðîïîñûëêà
- * @param[in] ivLength äëèíà ñèíõðîïîñûëêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_cfb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Óäàëåíèå êîíòåêñòà cfb
- *
- * @param[in] ctx êîíòåêñò cfb
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-void DLL_IMPORT free_cfb(void* ctx);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà èìòîâñòàâêè äëÿ àëãîðèòìà "êóçíå÷èê"
- *
- * @param[out] ctx êîíòåêñò èìèòîâñòàâêè
- * @param[in] key êëþ÷
- * @param[in] s ïàðàìåòð S
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_imit_14(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Èíèöèàëèçàöèÿ êîíòåêñòà èìòîâñòàâêè äëÿ àëãîðèòìà 28147-89
- *
- * @param[in] key êëþ÷
- * @param[in] s ïàðàìåòð S
- * @param[out] ctx êîíòåêñò èìèòîâñòàâêè
- * @param[in] print ôóíêöèÿ ëîãèðîâàíèÿ
- * @param[in] print_uint ôóíêöèÿ ëîãèðîâàíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT init_imit_89(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint);
-
-/** @brief Óäàëåíèå êîíòåêñòà èìèòîâñòàâêè
- *
- * @param[in] ctx êîíòåêñò èìèòîâñòàâêè
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-void DLL_IMPORT free_imit(void* ctx);
-
-/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ïðîñòîé çàìåíû äëÿ äàííûõ êðàòíûõ ðàçìåðó áëîêà
- *
- * @param[in] ctx êîíòåêñò ECB
- * @param[in] indata îòêðûòûé òåêñò
- * @param[out] outdata çàøèôðîâàííûé òåêñò
- * @param[in] length äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT encrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
-
-/** @brief Âûïîëíåíèå ðàñøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ïðîñòîé çàìåíû äëÿ äàííûõ êðàòíûõ ðàçìåðó áëîêà
- *
- * @param[in] ctx êîíòåêñò ECB
- * @param[in] indata îòêðûòûé òåêñò
- * @param[out] outdata çàøèôðîâàííûé òåêñò
- * @param[in] length äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT decrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
-
-/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ïðîñòîé çàìåíû ñ çàöåïëåíèåì äëÿ äàííûõ êðàòíûõ ðàçìåðó áëîêà
- *
- * @param[in] ctx êîíòåêñò CBC
- * @param[in] indata îòêðûòûé òåêñò
- * @param[out] outdata çàøèôðîâàííûé òåêñò
- * @param[in] length äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT encrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
-
-/** @brief Âûïîëíåíèå ðñøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ïðîñòîé çàìåíû ñ çàöåïëåíèåì äëÿ äàííûõ êðàòíûõ ðàçìåðó áëîêà
- *
- * @param[in] ctx êîíòåêñò CBC
- * @param[in] indata çàøèôðîâàííûé òåêñò
- * @param[out] outdata ðàñøèôðîâàííûé òåêñò
- * @param[in] length äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT decrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
-
-/** @brief Âûïîëíåíèå øèôðîâàíèÿ (çàøèôðîâàíèÿ èëè ðàñøèôðîâàíèÿ) â ðåæèìå ãàììèðîâàíèÿ
- * @details íåïîëíûì áëîêîì ìîæåò áûòü òîëüêî ïîñëåäíèé áëîê, ïðè ïîïûòêå øèôðîâàíèÿ ïîñëå ïåðåäà÷è íåïîëíîãî áëîêà âîçâðàùàåòñÿ îøèáêà
- *
- * @param[in] ctx êîíòåêñò CTR
- * @param[in] indata âõîäíîå ñîîáùåíèå
- * @param[out] outdata ðåçóëüòàò
- * @param[in] length äëèíà ñîîáùåíèÿ
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT crypt_ctr(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
-
-/** @brief Âûïîëíåíèå øàãîâîé øèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ
- * @details íåïîëíûì áëîêîì ìîæåò áûòü òîëüêî ïîñëåäíèé áëîê, ïðè ïîïûòêå øèôðîâàíèÿ ïîñëå ïåðåäà÷è íåïîëíîãî áëîêà âîçâðàùàåòñÿ îøèáêà
- *
- * @param[in] ctx êîíòåêñò OFB
- * @param[in] indata âõîäíîé áëîê
- * @param[out] outdata ðåçóëüòàò ïðåîáðàçîâàíèÿ
- * @param[in] inlength äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT crypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
-
-/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ
- *
- * @param[in] ctx êîíòåêñò OFB
- * @param[in] indata îòêðûòûé òåêñò
- * @param[out] outdata çàøèôðîâàííûé òåêñò
- * @param[in] inlength äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT encrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
-
-/** @brief Âûïîëíåíèå ðàñøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ
- *
- * @param[in] ctx êîíòåêñò OFB
- * @param[in] indata çàøèôðîâàííûé òåêñò
- * @param[out] outdata ðàñøèôðîâàííûé òåêñò
- * @param[in] inlength äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT decrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
-
-/** @brief Âûïîëíåíèå çàøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ ïî øèôðòåêñòó
- * @details íåïîëíûì áëîêîì ìîæåò áûòü òîëüêî ïîñëåäíèé áëîê, ïðè ïîïûòêå øèôðîâàíèÿ ïîñëå ïåðåäà÷è íåïîëíîãî áëîêà âîçâðàùàåòñÿ îøèáêà
- *
- * @param[in] ctx êîíòåêñò CFB
- * @param[in] indata îòêðûòûé òåêñò
- * @param[out] outdata çàøèôðîâàííûé òåêñò
- * @param[in] inlength äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT encrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
-
-/** @brief Âûïîëíåíèå ðàñøèôðîâàíèÿ èíôîðìàöèè â ðåæèìå ãàììèðîâàíèÿ ñ îáðàòíîé ñâÿçüþ ïî øèôðòåêñòó
- * @details íåïîëíûì áëîêîì ìîæåò áûòü òîëüêî ïîñëåäíèé áëîê, ïðè ïîïûòêå øèôðîâàíèÿ ïîñëå ïåðåäà÷è íåïîëíîãî áëîêà âîçâðàùàåòñÿ îøèáêà
- *
- * @param[in] ctx êîíòåêñò CFB
- * @param[in] indata çàøèôðîâàííûé òåêñò
- * @param[out] outdata ðàñøèôðîâàííûé òåêñò
- * @param[in] inlength äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT decrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
-
-/** @brief Âûïîëíåíèå âû÷èñëåíèÿ èìèòîâñòàâêè ïî äàííûì êðàòíûì ðàçìåðó áëîêà
- *
- * @param[in] ctx êîíòåêñò èìèòîâñòàâêè
- * @param[in] indata îòêðûòûé òåêñò
- * @param[in] length äëèíà òåêñòà
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT imit(void *ctx, unsigned char *indata, size_t length);
-
-/** @brief Çàâåðøåíèå âûðîáîòêè èìèòîâñòàâêè
- *
- * @param[in] ctx êîíòåêñò èìèòîâñòàâêè
- * @param[out] value
- * @return 0 åñëè âñå ïðåîáðàçîâàíèå ïðîøëî óñïåøíî
- * @return -1 åñëè ïðîèçîøëà îøèáêà
- */
-int DLL_IMPORT done_imit(void *ctx, unsigned char *value);
-
-/** @brief Äîïîëíåíèå äàííûõ äî ðàçìåðà áëîêà. 
- *
- * @param[in] data ñîîáùåíèå. Ïàìÿòü ïîä äàííûå data äîëæíà áûòü âûäåëåíà äîñòàòî÷íàÿ äëÿ äîïîëíåíèÿ.
- * @param[in] length ðàçìåð ñîîáùåíèÿ
- * @param[in] blockLen äëèíà áëîêà
- * @return ðàçìåð ñîîáùåíèÿ
- */
-size_t DLL_IMPORT padd(unsigned char *data, size_t length, size_t blockLen);
-
-/** @brief Óäàëåíèå äîïîëíåííûõ äàííûõ. Ïðè îøèáêàõ âîçâðàùàåòñÿ çíà÷åíèå -1
- *
- * @param[in] data ñîîáùåíèå
- * @param[in] length ðàçìåð ñîîáùåíèÿ
- * @return ðàçìåð ñîîáùåíèÿ
- */
-size_t DLL_IMPORT unpadd(unsigned char *data, size_t length);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
diff --git a/dap-sdk/crypto/src/GOST/block_chipher.c b/dap-sdk/crypto/src/GOST/block_cipher.c
similarity index 87%
rename from dap-sdk/crypto/src/GOST/block_chipher.c
rename to dap-sdk/crypto/src/GOST/block_cipher.c
index 0bd604f81b6af07ba539daeef362e65b6157ac09..80ad6231dc1223690e19b9c84ceac0eea9dafe12 100644
--- a/dap-sdk/crypto/src/GOST/block_chipher.c
+++ b/dap-sdk/crypto/src/GOST/block_cipher.c
@@ -1,5 +1,5 @@
 /** @file 
-* @brief Ðåàëèçàöèÿ ðåæèìîâ ðàáîòû áëî÷íûõ àëãîðèòìîâ
+* @brief Реализация режимов работы блочных алгоритмов
 *
 * @copyright InfoTeCS. All rights reserved.
 */
@@ -11,164 +11,164 @@
 
 #include "28147_14.h"
 #include "28147_89.h"
-#include "block_chipher.h"
+#include "block_cipher.h"
 
-/** @brief îïðåäåëåíèå âíóòðåííåãî àññåðòà */
+/** @brief определение внутреннего ассерта */
 #define INFOTECS_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
 
-/** @brief ðàçìåð òåñòîâûõ äàííûõ äëÿ àëãîðèòìà "êóçíå÷èê" */
+/** @brief размер тестовых данных для алгоритма "кузнечик" */
 #define textLen14 sizeof(kSeltTestGost14PlainText)/sizeof(kSeltTestGost14PlainText[0])
-/** @brief ðàçìåð òåñòîâûõ äàííûõ äëÿ àëãîðèòìà 28147-89 */
+/** @brief размер тестовых данных для алгоритма 28147-89 */
 #define textLen89 sizeof(kSeltTestGost89PlainText)/sizeof(kSeltTestGost89PlainText[0])
 
-/** @brief Ïðèçíàê àëãîðèòìà "Êóçíå÷èê" */
+/** @brief Признак алгоритма "Кузнечик" */
 const unsigned char kAlg14 = 1;
 
-/** @brief Ïðèçíàê àëãîðèòìà 28147-89 */
+/** @brief Признак алгоритма 28147-89 */
 const unsigned char kAlg89 = 2;
 
-/** @brief óêàçàòåëü íà ôóíêöèþ øèôðîâàíèÿ */
+/** @brief указатель на функцию шифрования */
 typedef int (DLL_IMPORT *pEncrypt)(unsigned char* plainText, unsigned char* chipherText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint);
 
-/** @brief óêàçàòåëü íà ôóíêöèþ ðàñøèôðîâàíèÿ */
+/** @brief указатель на функцию расшифрования */
 typedef int (DLL_IMPORT *pDecrypt)(unsigned char* chipherText, unsigned char* plainText, unsigned char* keys, printout_byte_array print, printout_uint_array print_uint);
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà ECB */
+/** @brief Функция самотестирования режима ECB */
 static int SelfTestGost14Ecb();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà ECB */
+/** @brief Функция самотестирования режима ECB */
 static int SelfTestGost89Ecb();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CTR */
+/** @brief Функция самотестирования режима CTR */
 static int SelfTestGost14Ctr();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CTR */
+/** @brief Функция самотестирования режима CTR */
 static int SelfTestGost89Ctr();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà OFB */
+/** @brief Функция самотестирования режима OFB */
 static int SelfTestGost14Ofb();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà OFB */
+/** @brief Функция самотестирования режима OFB */
 static int SelfTestGost89Ofb();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CBC */
+/** @brief Функция самотестирования режима CBC */
 static int SelfTestGost14Cbc();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CBC */
+/** @brief Функция самотестирования режима CBC */
 static int SelfTestGost89Cbc();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CFB */
+/** @brief Функция самотестирования режима CFB */
 static int SelfTestGost14Cfb();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà CFB */
+/** @brief Функция самотестирования режима CFB */
 static int SelfTestGost89Cfb();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà èìèòîâñòàâêè */
+/** @brief Функция самотестирования режима имитовставки */
 static int SelfTestGost14Imit();
 
-/** @brief Ôóíêöèÿ ñàìîòåñòèðîâàíèÿ ðåæèìà èìèòîâñòàâêè */
+/** @brief Функция самотестирования режима имитовставки */
 static int SelfTestGost89Imit();
 
-/** @brief Ñäâèã âëåâî íà 1 áèò */
+/** @brief Сдвиг влево на 1 бит */
 static void ShifttLeftOne(unsigned char *r, size_t length);
 
-/** @brief Êîíòåêñò ECB */  
+/** @brief Контекст ECB */  
 typedef struct 
 {
-     unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */
-     unsigned char* Keys; /**< êëþ÷ */ 
-     unsigned int BlockLen; /**< ðàçìåð áëîêà */ 
-     printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */
-     pDecrypt DecryptFunc; /**< ôóíêöèÿ ðàñøèôðîâàíèÿ */
+     unsigned char Alg; /**< идентификатор алгоритма */
+     unsigned char* Keys; /**< ключ */ 
+     unsigned int BlockLen; /**< размер блока */ 
+     printout_byte_array PrintByteArray; /**< функция логирования */
+     printout_uint_array PrintUIntArray; /**< функция логирования */
+     pEncrypt EncryptFunc; /**< функция шифрования */
+     pDecrypt DecryptFunc; /**< функция расшифрования */
 } Context_ecb;
 
-/** @brief Êîíòåêñò CTR */
+/** @brief Контекст CTR */
 typedef struct 
 {
-     unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */
-     unsigned char* Counter; /**< ñ÷åò÷èê */
-     unsigned char* Keys; /**< êëþ÷ */ 
-     size_t S; /**< ðàçìåð ñèíõðîïîñûëêè */
-     size_t BlockLen;  /**< ðàçìåð áëîêà */ 
-     printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */
-     unsigned char *tmpblock; /**< âðåìåííûé áëîê */
+     unsigned char Alg; /**< идентификатор алгоритма */
+     unsigned char* Counter; /**< счетчик */
+     unsigned char* Keys; /**< ключ */ 
+     size_t S; /**< размер синхропосылки */
+     size_t BlockLen;  /**< размер блока */ 
+     printout_byte_array PrintByteArray; /**< функция логирования */
+     printout_uint_array PrintUIntArray; /**< функция логирования */
+     pEncrypt EncryptFunc; /**< функция шифрования */
+     unsigned char *tmpblock; /**< временный блок */
 } Context_ctr;
 
-/** @brief Êîíòåêñò OFB */
+/** @brief Контекст OFB */
 typedef struct 
 {
-     unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */
-     unsigned char* IV; /**< ñèíõðîïîñûëêà */
-     unsigned char* Keys;  /**< êëþ÷ */ 
-     size_t M; /**< ðàçìåð ñèíõðïîñûëêè */
-     size_t S; /**< ïàðàìåòð S */
-     size_t BlockLen; /**< ðàçìåð áëîêà */ 
-     printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */
-     pDecrypt DecryptFunc; /**< ôóíêöèÿ ðàñøèôðîâàíèÿ */
-     unsigned char *tmpblock;  /**< âðåìåííûé áëîê */
-     unsigned char* nextIV; /**< ñèíõðîïîñûëêà äëÿ ñëåäóþùåãî áëîêà */
+     unsigned char Alg; /**< идентификатор алгоритма */
+     unsigned char* IV; /**< синхропосылка */
+     unsigned char* Keys;  /**< ключ */ 
+     size_t M; /**< размер синхрпосылки */
+     size_t S; /**< параметр S */
+     size_t BlockLen; /**< размер блока */ 
+     printout_byte_array PrintByteArray; /**< функция логирования */
+     printout_uint_array PrintUIntArray; /**< функция логирования */
+     pEncrypt EncryptFunc; /**< функция шифрования */
+     pDecrypt DecryptFunc; /**< функция расшифрования */
+     unsigned char *tmpblock;  /**< временный блок */
+     unsigned char* nextIV; /**< синхропосылка для следующего блока */
 } Context_ofb;
 
-/** @brief Êîíòåêñò CFB */
+/** @brief Контекст CFB */
 typedef struct 
 {
-     unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */
-     unsigned char* IV; /**< ñèíõðîïîñûëêà */
-     unsigned char* Keys; /**< êëþ÷ */ 
-     size_t M; /**< ðàçìåð ñèíõðïîñûëêè */
-     size_t S; /**< ïàðàìåòð S */
-     size_t BlockLen; /**< ðàçìåð áëîêà */
-     printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */
-     pDecrypt DecryptFunc; /**< ôóíêöèÿ ðàñøèôðîâàíèÿ */
-     unsigned char *tmpblock; /**< âðåìåííûé áëîê */
-     unsigned char* nextIV; /**< ñèíõðîïîñûëêà äëÿ ñëåäóþùåãî áëîêà */
+     unsigned char Alg; /**< идентификатор алгоритма */
+     unsigned char* IV; /**< синхропосылка */
+     unsigned char* Keys; /**< ключ */ 
+     size_t M; /**< размер синхрпосылки */
+     size_t S; /**< параметр S */
+     size_t BlockLen; /**< размер блока */
+     printout_byte_array PrintByteArray; /**< функция логирования */
+     printout_uint_array PrintUIntArray; /**< функция логирования */
+     pEncrypt EncryptFunc; /**< функция шифрования */
+     pDecrypt DecryptFunc; /**< функция расшифрования */
+     unsigned char *tmpblock; /**< временный блок */
+     unsigned char* nextIV; /**< синхропосылка для следующего блока */
 } Context_cfb;
 
-/** @brief Êîíòåêñò CBC */
+/** @brief Контекст CBC */
 typedef struct 
 {
-     unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */
-     unsigned char* IV; /**< ñèíõðîïîñûëêà */
-     unsigned char* Keys; /**< êëþ÷ */
-     size_t BlockLen; /**< ðàçìåð áëîêà */
-     size_t M; /**< ðàçìåð ñèíõðïîñûëêè */
-     printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */
-     pDecrypt DecryptFunc; /**< ôóíêöèÿ ðàñøèôðîâàíèÿ */
-     unsigned char* nextIV; /**< ñèíõðîïîñûëêà äëÿ ñëåäóþùåãî áëîêà */
-     unsigned char* tempIV; /**< äëÿ âðåìåííîãî õðàíåíèÿ çíà÷åíèÿ ñèíõðîïîñûëêè */
-     unsigned char *tmpblock; /**< âðåìåííûé áëîê */
+     unsigned char Alg; /**< идентификатор алгоритма */
+     unsigned char* IV; /**< синхропосылка */
+     unsigned char* Keys; /**< ключ */
+     size_t BlockLen; /**< размер блока */
+     size_t M; /**< размер синхрпосылки */
+     printout_byte_array PrintByteArray; /**< функция логирования */
+     printout_uint_array PrintUIntArray; /**< функция логирования */
+     pEncrypt EncryptFunc; /**< функция шифрования */
+     pDecrypt DecryptFunc; /**< функция расшифрования */
+     unsigned char* nextIV; /**< синхропосылка для следующего блока */
+     unsigned char* tempIV; /**< для временного хранения значения синхропосылки */
+     unsigned char *tmpblock; /**< временный блок */
 } Context_cbc;
 
-/** @brief Êîíòåêñò èìèòîâñòàâêè */
+/** @brief Контекст имитовставки */
 typedef struct 
 {
-     unsigned char Alg; /**< èäåíòèôèêàòîð àëãîðèòìà */
-     unsigned char* Keys; /**< êëþ÷ */
-     unsigned char* K1; /**< âñïîìîãàòåëüíûé ïàðàìåòð K1 */
-     unsigned char* K2; /**< âñïîìîãàòåëüíûé ïàðàìåòð K2 */
-     unsigned char* B; /**< âñïîìîãàòåëüíûé ïàðàìåòð B */
-     unsigned char* R; /**< âñïîìîãàòåëüíûé ïàðàìåòð R */
-     unsigned char* C; /**< âñïîìîãàòåëüíûé ïàðàìåòð C */
-     unsigned char* LastBlock; /**< ïðåäûäóùèé áëîê */
-     size_t S; /**< ïàðàìåòð S */
-     size_t BlockLen; /**< ðàçìåð áëîêà */
-     size_t LastBlockSize; /**< ðàçìåð ïðåäûäóùåãî áëîêà */
-     int isFistBlock; /**< èäåíòèôèêàòîð ïåðâîãî áëîêà */
-     printout_byte_array PrintByteArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     printout_uint_array PrintUIntArray; /**< ôóíêöèÿ ëîãèðîâàíèÿ */
-     pEncrypt EncryptFunc; /**< ôóíêöèÿ øèôðîâàíèÿ */
-     unsigned char *tmpblock; /**< âðåìåííûé áëîê */
-     unsigned char *resimit; /**< èìèòîâñòàâêà */
+     unsigned char Alg; /**< идентификатор алгоритма */
+     unsigned char* Keys; /**< ключ */
+     unsigned char* K1; /**< вспомогательный параметр K1 */
+     unsigned char* K2; /**< вспомогательный параметр K2 */
+     unsigned char* B; /**< вспомогательный параметр B */
+     unsigned char* R; /**< вспомогательный параметр R */
+     unsigned char* C; /**< вспомогательный параметр C */
+     unsigned char* LastBlock; /**< предыдущий блок */
+     size_t S; /**< параметр S */
+     size_t BlockLen; /**< размер блока */
+     size_t LastBlockSize; /**< размер предыдущего блока */
+     int isFistBlock; /**< идентификатор первого блока */
+     printout_byte_array PrintByteArray; /**< функция логирования */
+     printout_uint_array PrintUIntArray; /**< функция логирования */
+     pEncrypt EncryptFunc; /**< функция шифрования */
+     unsigned char *tmpblock; /**< временный блок */
+     unsigned char *resimit; /**< имитовставка */
 } Context_imit;
 
 static int init_ecb_14_impl(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint)
@@ -535,7 +535,7 @@ static int init_ofb_14_impl(unsigned char *key, void *ctx, size_t s, unsigned ch
      return 0;
 }
 
-int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint)
+int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, const unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint)
 {
      if(SelfTestGost14Ofb())
           return -1;
@@ -1331,7 +1331,7 @@ static void ShifttLeftOne(unsigned char *r, size_t length)
      r[length -1] &= 0xfe;
 }
 
-int DLL_IMPORT imit(void *ctx, unsigned char *indata, size_t length)
+int DLL_IMPORT imit(void *ctx, const unsigned char *indata, size_t length)
 {
      Context_imit* context;
      size_t i, j;
diff --git a/dap-sdk/crypto/src/GOST/block_cipher.h b/dap-sdk/crypto/src/GOST/block_cipher.h
new file mode 100644
index 0000000000000000000000000000000000000000..4a6315ee1540c59ea0fc4fa651836721161e9212
--- /dev/null
+++ b/dap-sdk/crypto/src/GOST/block_cipher.h
@@ -0,0 +1,423 @@
+/** @file 
+ * @brief Объявление функций реализующих режимы работы блочных алгоритмов
+ *
+ * @copyright InfoTeCS. All rights reserved.
+ */
+
+#ifndef BLOCK_CHIPHER_H
+#define BLOCK_CHIPHER_H
+
+#include "dll_import.h"
+#include "callback_print.h"
+
+/** @brief Размер контекста для режима шифрования ECB алгоритма "кузнечик" */
+#define kEcb14ContextLen 0x38
+
+/** @brief Размер контекста для режима шифрования ECB алгоритма 28147-89 */
+#define kEcb89ContextLen 0x38
+
+/** @brief Размер контекста для режима шифрования CBC алгоритма "кузнечик" */
+#define kCbc14ContextLen 0x60
+
+/** @brief Размер контекста для режима шифрования CBC алгоритма 28147-89 */
+#define kCbc89ContextLen 0x60
+
+/** @brief Размер контекста для режима шифрования CTR алгоритма "кузнечик" */
+#define kCtr14ContextLen 0x48
+
+/** @brief Размер контекста для режима шифрования CTR алгоритма 28147-89 */
+#define kCtr89ContextLen 0x48
+
+/** @brief Размер контекста для режима шифрования OFB алгоритма "кузнечик" */
+#define kOfb14ContextLen 0x60
+
+/** @brief Размер контекста для режима шифрования OFB алгоритма 28147-89 */
+#define kOfb89ContextLen 0x60
+
+/** @brief Размер контекста для режима шифрования CFB алгоритма "кузнечик" */
+#define kCfb14ContextLen 0x60
+
+/** @brief Размер контекста для режима шифрования CFB алгоритма 28147-89 */
+#define kCfb89ContextLen 0x60
+
+/** @brief Размер контекста для режима формирования имитовставки алгоритма "кузнечик" */
+#define kImit14ContextLen 0x88
+
+/** @brief Размер контекста для режима формирования имитовставки алгоритма 28147-89 */
+#define kImit89ContextLen 0x88
+
+/** @brief Размер блока алгоритма "кузнечик" */
+#define kBlockLen14 16
+
+/** @brief Размер блока алгоритма 28147-89 */
+#define kBlockLen89 8
+
+/** @brief Размер ключа алгоритма 28147-89 */
+#define kKeyLen89 32
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* *** Режимы шифрования ***
+ * Режимы шифрования работают с использованием базового 
+ * криптографического преобразования
+ */
+
+/** @brief Инициализация контекста шифрования в режиме ECB для алгоритма "кузнечик"
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст cbc
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_ecb_14(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Инициализация контекста шифрования в режиме ECB для алгоритма 28147-89
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст cbc
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_ecb_89(unsigned char *key, void* ctx, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Удаление контекста ecb
+ *
+ * @param[in] ctx контекст ecb
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+void DLL_IMPORT free_ecb(void* ctx);
+
+/** @brief Инициализация контекста шифрования в режиме CBC для алгоритма "кузнечик"
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст cbc
+ * @param[in] iv синхропосылка
+ * @param[in] ivLength длина синхропосылки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT  init_cbc_14(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Инициализация контекста шифрования в режиме CBC для алгоритма 28147-89
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст cbc
+ * @param[in] iv синхропосылка
+ * @param[in] ivLength длина синхропосылки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_cbc_89(unsigned char *key, void* ctx, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Удаление контекста cbc
+ *
+ * @param[in] ctx контекст cbc
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+void DLL_IMPORT free_cbc(void* ctx);
+
+/** @brief Инициализация контекста шифрования в режиме CTR для алгоритма "кузнечик"
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст ctr
+ * @param[in] iv синхропосылка
+ * @param[in] length длина синхропосылки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_ctr_14(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Инициализация контекста шифрования в режиме CTR для алгоритма 28147-89
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст ctr
+ * @param[in] iv синхропосылка
+ * @param[in] length длина синхропосылки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_ctr_89(unsigned char* key, unsigned char *iv, size_t length, void *ctx, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Удаление контекста ctr
+ *
+ * @param[in] ctx контекст ctr
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+void DLL_IMPORT free_ctr(void* ctx);
+
+/** @brief Инициализация контекста шифрования в режиме OFB для алгоритма "кузнечик"
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст ofb
+ * @param[in] s параметр S
+ * @param[in] iv синхропосылка
+ * @param[in] ivLength длина синхропосылки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_ofb_14(unsigned char *key, void *ctx, size_t s, const unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Инициализация контекста шифрования в режиме OFB для алгоритма 28147-89
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст ofb
+ * @param[in] s параметр S
+ * @param[in] iv синхропосылка
+ * @param[in] ivLength длина синхропосылки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_ofb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Удаление контекста ofb
+ *
+ * @param[in] ctx контекст ofb
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+void DLL_IMPORT free_ofb(void* ctx);
+
+/** @brief Инициализация контекста шифрования в режиме CFB для алгоритма "кузнечик"
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст cfb
+ * @param[in] s параметр S
+ * @param[in] iv синхропосылка
+ * @param[in] ivLength длина синхропосылки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_cfb_14(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Инициализация контекста шифрования в режиме CFB для алгоритма 28147-89
+ *
+ * @param[in] key ключ
+ * @param[out] ctx контекст cfb
+ * @param[in] s параметр S
+ * @param[in] iv синхропосылка
+ * @param[in] ivLength длина синхропосылки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_cfb_89(unsigned char *key, void *ctx, size_t s, unsigned char *iv, size_t ivLength, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Удаление контекста cfb
+ *
+ * @param[in] ctx контекст cfb
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+void DLL_IMPORT free_cfb(void* ctx);
+
+/** @brief Инициализация контекста имтовставки для алгоритма "кузнечик"
+ *
+ * @param[out] ctx контекст имитовставки
+ * @param[in] key ключ
+ * @param[in] s параметр S
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_imit_14(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Инициализация контекста имтовставки для алгоритма 28147-89
+ *
+ * @param[in] key ключ
+ * @param[in] s параметр S
+ * @param[out] ctx контекст имитовставки
+ * @param[in] print функция логирования
+ * @param[in] print_uint функция логирования
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT init_imit_89(unsigned char *key, size_t s, void *ctx, printout_byte_array print, printout_uint_array print_uint);
+
+/** @brief Удаление контекста имитовставки
+ *
+ * @param[in] ctx контекст имитовставки
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+void DLL_IMPORT free_imit(void* ctx);
+
+/** @brief Выполнение зашифрования информации в режиме простой замены для данных кратных размеру блока
+ *
+ * @param[in] ctx контекст ECB
+ * @param[in] indata открытый текст
+ * @param[out] outdata зашифрованный текст
+ * @param[in] length длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT encrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
+
+/** @brief Выполнение расшифрования информации в режиме простой замены для данных кратных размеру блока
+ *
+ * @param[in] ctx контекст ECB
+ * @param[in] indata открытый текст
+ * @param[out] outdata зашифрованный текст
+ * @param[in] length длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT decrypt_ecb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
+
+/** @brief Выполнение зашифрования информации в режиме простой замены с зацеплением для данных кратных размеру блока
+ *
+ * @param[in] ctx контекст CBC
+ * @param[in] indata открытый текст
+ * @param[out] outdata зашифрованный текст
+ * @param[in] length длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT encrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
+
+/** @brief Выполнение рсшифрования информации в режиме простой замены с зацеплением для данных кратных размеру блока
+ *
+ * @param[in] ctx контекст CBC
+ * @param[in] indata зашифрованный текст
+ * @param[out] outdata расшифрованный текст
+ * @param[in] length длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT decrypt_cbc(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
+
+/** @brief Выполнение шифрования (зашифрования или расшифрования) в режиме гаммирования
+ * @details неполным блоком может быть только последний блок, при попытке шифрования после передачи неполного блока возвращается ошибка
+ *
+ * @param[in] ctx контекст CTR
+ * @param[in] indata входное сообщение
+ * @param[out] outdata результат
+ * @param[in] length длина сообщения
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT crypt_ctr(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t length);
+
+/** @brief Выполнение шаговой шифрования информации в режиме гаммирования с обратной связью
+ * @details неполным блоком может быть только последний блок, при попытке шифрования после передачи неполного блока возвращается ошибка
+ *
+ * @param[in] ctx контекст OFB
+ * @param[in] indata входной блок
+ * @param[out] outdata результат преобразования
+ * @param[in] inlength длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT crypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
+
+/** @brief Выполнение зашифрования информации в режиме гаммирования с обратной связью
+ *
+ * @param[in] ctx контекст OFB
+ * @param[in] indata открытый текст
+ * @param[out] outdata зашифрованный текст
+ * @param[in] inlength длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT encrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
+
+/** @brief Выполнение расшифрования информации в режиме гаммирования с обратной связью
+ *
+ * @param[in] ctx контекст OFB
+ * @param[in] indata зашифрованный текст
+ * @param[out] outdata расшифрованный текст
+ * @param[in] inlength длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT decrypt_ofb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
+
+/** @brief Выполнение зашифрования информации в режиме гаммирования с обратной связью по шифртексту
+ * @details неполным блоком может быть только последний блок, при попытке шифрования после передачи неполного блока возвращается ошибка
+ *
+ * @param[in] ctx контекст CFB
+ * @param[in] indata открытый текст
+ * @param[out] outdata зашифрованный текст
+ * @param[in] inlength длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT encrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
+
+/** @brief Выполнение расшифрования информации в режиме гаммирования с обратной связью по шифртексту
+ * @details неполным блоком может быть только последний блок, при попытке шифрования после передачи неполного блока возвращается ошибка
+ *
+ * @param[in] ctx контекст CFB
+ * @param[in] indata зашифрованный текст
+ * @param[out] outdata расшифрованный текст
+ * @param[in] inlength длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT decrypt_cfb(void *ctx, const unsigned char *indata, unsigned char *outdata, size_t inlength);
+
+/** @brief Выполнение вычисления имитовставки по данным кратным размеру блока
+ *
+ * @param[in] ctx контекст имитовставки
+ * @param[in] indata открытый текст
+ * @param[in] length длина текста
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT imit(void *ctx, const unsigned char *indata, size_t length);
+
+/** @brief Завершение выроботки имитовставки
+ *
+ * @param[in] ctx контекст имитовставки
+ * @param[out] value
+ * @return 0 если все преобразование прошло успешно
+ * @return -1 если произошла ошибка
+ */
+int DLL_IMPORT done_imit(void *ctx, unsigned char *value);
+
+/** @brief Дополнение данных до размера блока. 
+ *
+ * @param[in] data сообщение. Память под данные data должна быть выделена достаточная для дополнения.
+ * @param[in] length размер сообщения
+ * @param[in] blockLen длина блока
+ * @return размер сообщения
+ */
+size_t DLL_IMPORT padd(unsigned char *data, size_t length, size_t blockLen);
+
+/** @brief Удаление дополненных данных. При ошибках возвращается значение -1
+ *
+ * @param[in] data сообщение
+ * @param[in] length размер сообщения
+ * @return размер сообщения
+ */
+size_t DLL_IMPORT unpadd(unsigned char *data, size_t length);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/dap-sdk/crypto/src/GOST/callback_print.h b/dap-sdk/crypto/src/GOST/callback_print.h
index 61f9594968c2bdb4ac2db40a6e7f05f1de00dd9f..01e387f0db946f85d4eec859e0f26229362aa236 100644
--- a/dap-sdk/crypto/src/GOST/callback_print.h
+++ b/dap-sdk/crypto/src/GOST/callback_print.h
@@ -1,5 +1,5 @@
 /** @file 
- * @brief Îáúÿâëåíèå callback ôóíêöèé ðåàëèçóþùèõ âûâîä èíôîðìàöèè
+ * @brief Объявление callback функций реализующих вывод информации
  *
  * @copyright InfoTeCS. All rights reserved.
  */
@@ -9,10 +9,10 @@
 
 #include "dll_import.h"
 
-/** @brief callback äëÿ âûâîäà ìàññèâà byte */
+/** @brief callback для вывода массива byte */
 typedef void (DLL_IMPORT *printout_byte_array)(const char* text, unsigned char* value, unsigned int valueSize);
 
-/** @brief callback äëÿ âûâîäà ìàññèâà unsigned int32 */
+/** @brief callback для вывода массива unsigned int32 */
 typedef void (DLL_IMPORT *printout_uint_array)(const char* text, unsigned int* value, unsigned int valueSize);
 
 #endif
diff --git a/dap-sdk/crypto/src/GOST/dll_import.h b/dap-sdk/crypto/src/GOST/dll_import.h
index 025d39d6391e6deb8c5b04f1f296e73da06a9f3c..ef72ecfb0864459186e7b6e606d10ddf570434d9 100644
--- a/dap-sdk/crypto/src/GOST/dll_import.h
+++ b/dap-sdk/crypto/src/GOST/dll_import.h
@@ -1,5 +1,5 @@
 /** @file 
- * @brief Îáúÿâëåíèå ôóíêöèé ðåàëèçóþùèõ ïðåîáðàçîâàíèÿ èç àëãîðèòìà "Êóçíå÷èê"
+ * @brief Объявление функций реализующих преобразования из алгоритма "Кузнечик"
  *
  * @copyright InfoTeCS. All rights reserved.
  */
@@ -10,7 +10,7 @@
  
 
 #ifdef WIN32
-     #define DLL_IMPORT __stdcall
+     #define DLL_IMPORT __stdcall//__fastcall//
 #else
      #define DLL_IMPORT
 #endif
diff --git a/dap-sdk/crypto/src/GOST/print_data.c b/dap-sdk/crypto/src/GOST/print_data.c
index 5845a9ef33feb4354ac8e8b7525c56b6c085f185..78a6a0d9e17082bf8926009db1b5ebff501adac2 100644
--- a/dap-sdk/crypto/src/GOST/print_data.c
+++ b/dap-sdk/crypto/src/GOST/print_data.c
@@ -1,5 +1,5 @@
 /** @file 
- * @brief Ðåàëèçàöèÿ ôóíêöèé âûâîäà èíôîðìàöèè íà ýêðàí
+ * @brief Реализация функций вывода информации на экран
  *
  * @copyright InfoTeCS. All rights reserved.
  */
diff --git a/dap-sdk/crypto/src/GOST/print_data.h b/dap-sdk/crypto/src/GOST/print_data.h
index 3effd9efc1a4cd7af172c1b012bd7da8ab2d77dd..5bd3b7b0d25bc24cbe288a3284710ebcd3d64679 100644
--- a/dap-sdk/crypto/src/GOST/print_data.h
+++ b/dap-sdk/crypto/src/GOST/print_data.h
@@ -1,5 +1,5 @@
 /** @file 
- * @brief Îáúÿâëåíèå ôóíêöèé âûâîäà èíôîðìàöèè íà ýêðàí
+ * @brief Объявление функций вывода информации на экран
  *
  * @copyright InfoTeCS. All rights reserved.
  */
@@ -9,68 +9,68 @@
 
 #include "dll_import.h"
 
-/** @brief øèðèíà âûâîäèìîé ñòðîêè â ñèìâîëàõ */
+/** @brief ширина выводимой строки в символах */
 #define LINE_WIDTH 60
 
-/** @brief äëèíà òàáóëÿöèè â ñèìâîëàõ */
+/** @brief длина табуляции в символах */
 #define TAB_WIDTH 4
 
-/** @brief Âûâîäèò ðåçóëüòàòû òåñòà
+/** @brief Выводит результаты теста
  *
- * @param[in] caption çàãîëîâîê òåñòà
- * @param[in] result ðåçóëüòàò òåñòà
+ * @param[in] caption заголовок теста
+ * @param[in] result результат теста
  */
 int PrintTest(const char* caption, int result);
 
-/** @brief Âûâîäèò ñèìâîë */
+/** @brief Выводит символ */
 void PrintCharSingle(char c);
 
-/** @brief Âûâîäèò ïîâòîðÿþùèé ñèìâîë c count ðàç */
+/** @brief Выводит повторяющий символ c count раз */
 void PrintChar(char c, size_t count);
 
-/** @brief Âûâîäèò ñòðîêó çàêàí÷èâàþùóþñÿ íóëåì */
+/** @brief Выводит строку заканчивающуюся нулем */
 void PrintStr(const char* s);
 
-/** @brief Âûâîäèò ñòðîêó çàêàí÷èâàþùóþñÿ íóëåì äîïîëíÿÿ åå ïðîáåëàìè äî çàäàíííîé øèðèíû */
+/** @brief Выводит строку заканчивающуюся нулем дополняя ее пробелами до заданнной ширины */
 void PrintStrAlign(const char* s, size_t width);
 
-/** @brief Âûâîäèò ñòðîêó çàêàí÷èâàþùóþñÿ íóëåì è ïåðåâîäèò êîðåòêó íà ñëåäóþùóþ ñòðîêó */
+/** @brief Выводит строку заканчивающуюся нулем и переводит коретку на следующую строку */
 void PrintLine(const char* line);
 
-/** @brief Ïåðåâîäèò êîðåòêó íà ñëåäóþùóþ ñòðîêó */
+/** @brief Переводит коретку на следующую строку */
 void PrintEmptyLine();
 
-/** @brief Âûâîäèò ñòðîêó ñìåùÿÿ íà÷àëî ñòðîêè â ïðàâî íà çàäàííîå êîëè÷åñòâî ïîçèöèé */
+/** @brief Выводит строку смещяя начало строки в право на заданное количество позиций */
 void PrintLineLeft(const char* label);
 
-/** @brief Âûâîäèò ñòðîêó ðàçäåëèòåëü */
+/** @brief Выводит строку разделитель */
 void PrintSplitLine();
 
-/** @brief Âûâîäèò ðàçäåëèòåëü, ñòðîêó è ïåðåâîäèò êîðåòêó íà ñëåäóþùóþ ñòðîêó  */
+/** @brief Выводит разделитель, строку и переводит коретку на следующую строку  */
 void PrintLabel(const char* label);
 
-/** @brief Âûâîäèò îäèí áàéò â HEX ïðåäñòàâëåíèè */
+/** @brief Выводит один байт в HEX представлении */
 void PrintHex(unsigned char value);
 
-/** @brief Âûâîäèò ìàññèâ áàéò â HEX ïðåäñòàâëåíèè */
+/** @brief Выводит массив байт в HEX представлении */
 void PrintHexArray(unsigned char* value, size_t size);
 
-/** @brief Âûâîäèò int32 ÷èñëî â HEX ïðåäñòàâëåíèè */
+/** @brief Выводит int32 число в HEX представлении */
 void PrintUInt32(unsigned int d);
 
-/** @brief Âûâîäèò áëîê äàííûõ */
+/** @brief Выводит блок данных */
 void PrintBlock(const char* label, unsigned char* value, size_t valueSize, size_t blockSize);
 
-/** @brief Âûâîäèò áëîê äàííûõ */
+/** @brief Выводит блок данных */
 void PrintBlockInt(const char* label, unsigned int value);
 
-/** @brief Âûâîäèò áëîê äàííûõ  */
+/** @brief Выводит блок данных  */
 void PrintBlockLeft(const char* label, unsigned int value);
 
-/** @brief callback äëÿ âûâîäà ìàññèâà byte */
+/** @brief callback для вывода массива byte */
 void DLL_IMPORT print_array(const char* label, unsigned char* value, unsigned int valueSize);
 
-/** @brief callback äëÿ âûâîäà ìàññèâà unsigned int32 */
+/** @brief callback для вывода массива unsigned int32 */
 void DLL_IMPORT print_uint_array(const char* label, unsigned int* value, unsigned int valueSize);
 
 #endif
diff --git a/dap-sdk/crypto/src/GOST/table.h b/dap-sdk/crypto/src/GOST/table.h
index 0932fcb620ca7437f400ad46c3a6547841e7f264..428dd572bb90c8086da4b2c4925a5f02e067f3dc 100644
--- a/dap-sdk/crypto/src/GOST/table.h
+++ b/dap-sdk/crypto/src/GOST/table.h
@@ -1,7 +1,7 @@
 #ifndef TABLE_H
 #define TABLE_H
 
-/** @brief òàáëèöà äëÿ óìíîæåíèÿ */
+/** @brief таблица для умножения */
 static const unsigned char multTable[] = 
 {
   0x00,   0x00,   0x00,   0x00,   0x00,   0x00,   0x00,   0x00, 
diff --git a/dap-sdk/crypto/src/GOST/test_data.inc b/dap-sdk/crypto/src/GOST/test_data.inc
index 5df12771af70a2ee5b4545f21f34daf080ad040d..94d893eb745e313b9bc06c72d25edfdf75b2b76d 100644
--- a/dap-sdk/crypto/src/GOST/test_data.inc
+++ b/dap-sdk/crypto/src/GOST/test_data.inc
@@ -1,8 +1,8 @@
 /*----------------------------------------------------------------------
- * òåñòîâûå çíà÷åíèÿ äëÿ àëãîðèòìà êóçíå÷èê èç ñòàíäàðòà
+ * тестовые значения для алгоритма кузнечик из стандарта
  */
 
-/* òåñòîâûå çíà÷åíèÿ ïðåîáðàçîâàíèÿ S */
+/* тестовые значения преобразования S */
 unsigned char kSData[5][kBlockLen14] = 
 {
      {0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00},
@@ -12,7 +12,7 @@ unsigned char kSData[5][kBlockLen14] =
      {0x23, 0xae, 0x65, 0x63, 0x3f, 0x84, 0x2d, 0x29, 0xc5, 0xdf, 0x52, 0x9c, 0x13, 0xf5, 0xac, 0xda}
 };
 
-/* òåñòîâûå çíà÷åíèÿ ïðåîáðàçîâàíèÿ R */
+/* тестовые значения преобразования R */
 unsigned char kRData[5][kBlockLen14] = 
 {
      {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00},
@@ -22,7 +22,7 @@ unsigned char kRData[5][kBlockLen14] =
      {0x0d, 0x64, 0xa5, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
 };
 
-/* òåñòîâûå çíà÷åíèÿ ïðåîáðàçîâàíèÿ L */
+/* тестовые значения преобразования L */
 unsigned char kLData[5][kBlockLen14] = 
 {
      {0x64, 0xa5, 0x94, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
@@ -32,7 +32,7 @@ unsigned char kLData[5][kBlockLen14] =
      {0xe6, 0xa8, 0x09, 0x4f, 0xee, 0x0a, 0xa2, 0x04, 0xfd, 0x97, 0xbc, 0xb0, 0xb4, 0x4b, 0x85, 0x80}
 };
 
-/* òåñòîâûå çíà÷åíèÿ ðàçâåðíóòûõ êëþ÷åé */
+/* тестовые значения развернутых ключей */
 static const unsigned char kKData[10][kBlockLen14] =
 {
      {0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77},
@@ -47,34 +47,34 @@ static const unsigned char kKData[10][kBlockLen14] =
      {0x72, 0xe9, 0xdd, 0x74, 0x16, 0xbc, 0xf4, 0x5b, 0x75, 0x5d, 0xba, 0xa8, 0x8e, 0x4a, 0x40, 0x43},
 };
 
-/* òåñòîâûå çíà÷åíèÿ ìàñòåð-êëþ÷à */
+/* тестовые значения мастер-ключа */
 unsigned char kMasterKeyData[32] = 
 {
      0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66,0x77,
      0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef
 }; 
 
-/* çíà÷åíèå îòêðûòîãî òåêñòà */
+/* значение открытого текста */
 unsigned char kPlainTextData[] = 
 {
      0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00, 0xff, 0xee, 0xdd, 0xcc, 0xbb, 0xaa, 0x99, 0x88
 }; 
 
 
-/* çíà÷åíèå øèôðîòåêñòà */
+/* значение шифротекста */
 unsigned char kChipherTextData[] = 
 {
      0x7f, 0x67, 0x9d, 0x90, 0xbe, 0xbc, 0x24, 0x30, 0x5a, 0x46, 0x8d, 0x42, 0xb9, 0xd4, 0xed, 0xcd
 }; 
 
-/* òåñòîâûå çíà÷åíèÿ îáðàòíîãî ïðåîáðàçîâàíèÿ L */
+/* тестовые значения обратного преобразования L */
 unsigned char kReverseLData[2][kBlockLen14] = 
 {
      {0x0d, 0x8e, 0x40, 0xe4, 0xa8, 0x00, 0xd0, 0x6b, 0x2f, 0x1b, 0x37, 0xea, 0x37, 0x9e, 0xad, 0x8e},
      {0x8a, 0x6b, 0x93, 0x0a, 0x52, 0x21, 0x1b, 0x45, 0xc5, 0xba, 0xa4, 0x3f, 0xf8, 0xb9, 0x13, 0x19},
 };
 
-/* òåñòîâûå çíà÷åíèÿ îáðàòíîãî ïðåîáðàçîâàíèÿ LSX */
+/* тестовые значения обратного преобразования LSX */
 unsigned char kReverseLSXData[10][kBlockLen14] = 
 {
      {0x8a, 0x6b, 0x93, 0x0a, 0x52, 0x21, 0x1b, 0x45, 0xc5, 0xba, 0xa4, 0x3f, 0xf8, 0xb9, 0x13, 0x19},
@@ -184,7 +184,7 @@ unsigned char kMasterKeyGost89[] =
      0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
 };
 
-/* òåñòîâûå çíà÷åíèÿ èç ñòàíäàðòû äëÿ àëãîðèòìà 89ãî ãîäà */
+/* тестовые значения из стандарты для алгоритма 89го года */
 unsigned char kGost89StandartPlainText[] = 
 {
     0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10
@@ -195,13 +195,13 @@ unsigned char kGost89StandartEncrText[] =
      0x4e, 0xe9, 0x01, 0xe5, 0xc2, 0xd8, 0xca, 0x3d
 };
 
-/* òåñòîâûå çíà÷åíèÿ äëÿ ïðåîáðàçîâàíèÿ t, îïèñàííîãî â ñòàíäàðòå */
+/* тестовые значения для преобразования t, описанного в стандарте */
 unsigned int kTData[5] = 
 {
     0xfdb97531, 0x2a196f34, 0xebd9f03a, 0xb039bb3d, 0x68695433
 };
 
-/* òåñòîâûå çíà÷åíèÿ äëÿ ïðåîáðàçîâàíèÿ g, îïèñàííîãî â ñòàíäàðòå */
+/* тестовые значения для преобразования g, описанного в стандарте */
 unsigned int kgData[4][3] = 
 {
     {0x87654321, 0xfedcba98, 0xfdcbc20c},
diff --git a/dap-sdk/crypto/src/GOST/testgost.c b/dap-sdk/crypto/src/GOST/testgost.c
index cd33f3010c1eaac04932d6933318e7fe1119cdea..289b71abc9ec45ea62796e553ee17293f2c0a9da 100644
--- a/dap-sdk/crypto/src/GOST/testgost.c
+++ b/dap-sdk/crypto/src/GOST/testgost.c
@@ -1,5 +1,5 @@
 /** @file 
- * @brief Ðåàëèçàöèÿ ôóíêöèé òåñòèðîâàíèÿ àëãîðèòìîâ "êóçíå÷èê" è 28147-89. À òàêæå ðåæèìîâ ðàáîòû áëî÷íûõ øèôðîâ
+ * @brief Реализация функций тестирования алгоритмов "кузнечик" и 28147-89. А также режимов работы блочных шифров
  *
  * @copyright InfoTeCS. All rights reserved.
  */
@@ -7,18 +7,18 @@
 #include <memory.h>
 
 #include "28147_14.h"
-#include "block_chipher.h"
+#include "block_cipher.h"
 #include "28147_89.h"
 #include "test_data.inc"
 #include "print_data.h"
 
-/** @brief ðàçìåð òåñòîâûõ äàííûõ äëÿ àëãîðèòìà "êóçíå÷èê" */
+/** @brief размер тестовых данных для алгоритма "кузнечик" */
 #define textLen14 sizeof(kGost14PlainText)
 
-/** @brief ðàçìåð òåñòîâûõ äàííûõ äëÿ àëãîðèòìà "28147-89" */
+/** @brief размер тестовых данных для алгоритма "28147-89" */
 #define textLen89 sizeof(kGost89PlaintText)
  
-/** @brief òåñòèðîâàíèå ïðåîáðàçîâàíèÿ S èç àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование преобразования S из алгоритма "кузнечик" */
 int testS()
 {
      unsigned char tmp[kBlockLen14];
@@ -45,7 +45,7 @@ int testS()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ïðåîáðàçîâàíèÿ R èç àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование преобразования R из алгоритма "кузнечик" */
 int testR()
 {
      unsigned char tmp[kBlockLen14];
@@ -73,7 +73,7 @@ int testR()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ïðåîáðàçîâàíèÿ L èç àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование преобразования L из алгоритма "кузнечик" */
 int testL()
 {
      unsigned char tmp[kBlockLen14];
@@ -100,7 +100,7 @@ int testL()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ðàçâîðà÷èâàíèÿ êëþ÷à èç àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование разворачивания ключа из алгоритма "кузнечик" */
 int testExpandKey()
 {
      const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]);
@@ -128,7 +128,7 @@ int testExpandKey()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå øèôðîâàíèÿ ïî àëãîðèòìó "êóçíå÷èê" */
+/** @brief тестирование шифрования по алгоритму "кузнечик" */
 int testEncrypt()
 {
      const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]);
@@ -159,7 +159,7 @@ int testEncrypt()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ðàñøèôðîâàíèÿ ïî àëãîðèòìó "êóçíå÷èê" */
+/** @brief тестирование расшифрования по алгоритму "кузнечик" */
 int testDecrypt()
 {
      const size_t keyLen = sizeof(kMasterKeyData)/sizeof(kMasterKeyData[0]);
@@ -192,7 +192,7 @@ int testDecrypt()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå øèôðîàâàíèå â ðåæèìå ecb ïî àëãîðèòìó "êóçíå÷èê" */
+/** @brief тестирование шифроавание в режиме ecb по алгоритму "кузнечик" */
 int gost14_ECB_test()
 {
      unsigned char ctx[kEcb14ContextLen];
@@ -244,7 +244,7 @@ int gost14_ECB_test()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà ctr àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование режима ctr алгоритма "кузнечик" */
 int gost14_CTR_test()
 {
      const size_t svLen = sizeof(kGost14CtrSV);
@@ -276,7 +276,7 @@ int gost14_CTR_test()
      return memcmp(outText, kGost14CtrC, textLen14);
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà ofb àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование режима ofb алгоритма "кузнечик" */
 int gost14_OFB_test()
 {
      const size_t svLen = sizeof(kGost14OfbSV);
@@ -308,7 +308,7 @@ int gost14_OFB_test()
      return memcmp(outText, kGost14OfbC, textLen14);
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà cbc àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование режима cbc алгоритма "кузнечик" */
 int gost14_CBC_test()
 {
      const size_t svLen = sizeof(kGost14CbcSV);
@@ -363,7 +363,7 @@ int gost14_CBC_test()
      return memcmp(outText, kGost14CbcC, textLen14);
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà cfb àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование режима cfb алгоритма "кузнечик" */
 int gost14_CFB_test()
 {
      const size_t svLen = sizeof(kGost14CfbSV);
@@ -421,7 +421,7 @@ int gost14_CFB_test()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà èìèòîâñòàâêè àëãîðèòìà "êóçíå÷èê" */
+/** @brief тестирование режима имитовставки алгоритма "кузнечик" */
 int gost14_imita_test()
 {
      const size_t imitLen = sizeof(kGost14ImitS);
@@ -450,7 +450,7 @@ int gost14_imita_test()
      return memcmp(outText, kGost14ImitS, imitLen);
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà ecb àëãîðèòìà 28147-89 */
+/** @brief тестирование режима ecb алгоритма 28147-89 */
 int gost89_ECB_test()
 {
      unsigned char ctx[kEcb89ContextLen];
@@ -493,7 +493,7 @@ int gost89_ECB_test()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà ctr àëãîðèòìà 28147-89 */
+/** @brief тестирование режима ctr алгоритма 28147-89 */
 int gost89_CTR_test()
 {
      const size_t SvLen = sizeof(kGost89CtrSV);
@@ -525,7 +525,7 @@ int gost89_CTR_test()
      return memcmp(outText, kGost89CtrC, textLen89);
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà ofb àëãîðèòìà 28147-89 */
+/** @brief тестирование режима ofb алгоритма 28147-89 */
 int gost89_OFB_test()
 {
      const size_t SvLen = sizeof(kGost89OfbSV);
@@ -557,7 +557,7 @@ int gost89_OFB_test()
      return memcmp(outText,  kGost89OfbC, textLen89);
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà cbc àëãîðèòìà 28147-89 */
+/** @brief тестирование режима cbc алгоритма 28147-89 */
 int gost89_CBC_test()
 {
      const size_t SvLen = sizeof(kGost89CbcSV);
@@ -601,7 +601,7 @@ int gost89_CBC_test()
      return memcmp(outText, kGost89CbcC, textLen89);
 }
 
-/** @brief Òåñòèðîâàíèå êðèïòîãðàôè÷åñêîãî ïðåîáðàçîâàíèÿ àëãîðèòìà 28147-89 */
+/** @brief Тестирование криптографического преобразования алгоритма 28147-89 */
 int standart_89_encr_test()
 {
      const size_t textLen = sizeof(kGost89StandartPlainText);
@@ -647,7 +647,7 @@ int standart_89_encr_test()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ðåæèìà cfb àëãîðèòìà 28147-89 */
+/** @brief тестирование режима cfb алгоритма 28147-89 */
 int gost89_CFB_test()
 {
      const size_t SvLen = sizeof(kGost89CfbSV);
@@ -694,7 +694,7 @@ int gost89_CFB_test()
      return 0;
 }
 #include<stdio.h>
-/** @brief òåñòèðîâàíèå ðåæèìà èìòîâñòàâêè àëãîðèòìà 28147-89 */
+/** @brief тестирование режима имтовставки алгоритма 28147-89 */
 int gost89_imita_test()
 {
      const size_t imitLen = sizeof(kGost89ImitS);
@@ -726,7 +726,7 @@ int gost89_imita_test()
      return memcmp(outText, kGost89ImitS, imitLen);
 }
 
-/** @brief òåñòèðîâàíèå äîïîëíåíèÿ ñîîáùåíèÿ */
+/** @brief тестирование дополнения сообщения */
 int testPadding()
 {
      const size_t len = sizeof(kPaddingText)/sizeof(kPaddingText[0]);
@@ -761,7 +761,7 @@ int testPadding()
      return 0;
 }
 
-/** @brief òåñòèðîâàíèå ñíÿòèÿ äîïîëíåíèÿ ñîîáùåíèÿ */
+/** @brief тестирование снятия дополнения сообщения */
 int testCut()
 {
      size_t rLen, rLen2;
@@ -798,7 +798,7 @@ int testCut()
      return 0;
 }
 
-/** @brief Òåñòèðîâàíèå ïðåîáðàçîâàíèÿ t àëãîðèòìà 28147-89 */
+/** @brief Тестирование преобразования t алгоритма 28147-89 */
 int testFuncT()
 {
      int i;
@@ -822,7 +822,7 @@ int testFuncT()
      return 0;
 }
 
-/** @brief Òåñòèðîâàíèå ïðåîáðàçîâàíèÿ g àëãîðèòìà 28147-89 */
+/** @brief Тестирование преобразования g алгоритма 28147-89 */
 int testG()
 {
      int i;
@@ -847,7 +847,7 @@ int testG()
      return 0;
 }
 
-/** @brief òî÷êà âõîäà  */
+/** @brief точка входа  */
 int main_gost_test()
 {
      int testRes = 0;
diff --git a/dap-sdk/crypto/src/blowfish/bf_enc.c b/dap-sdk/crypto/src/blowfish/bf_enc.c
new file mode 100644
index 0000000000000000000000000000000000000000..683a9613e4a5e8113b09bd6aec9f7f38e920803d
--- /dev/null
+++ b/dap-sdk/crypto/src/blowfish/bf_enc.c
@@ -0,0 +1,210 @@
+#include "blowfish.h"
+#include "bf_local.h"
+#include "memory.h"
+
+/*
+ * Blowfish as implemented from 'Blowfish: Springer-Verlag paper' (From
+ * LECTURE NOTES IN COMPUTER SCIENCE 809, FAST SOFTWARE ENCRYPTION, CAMBRIDGE
+ * SECURITY WORKSHOP, CAMBRIDGE, U.K., DECEMBER 9-11, 1993)
+ */
+
+#if (BF_ROUNDS != 16) && (BF_ROUNDS != 20)
+# error If you set BF_ROUNDS to some value other than 16 or 20, you will have \
+to modify the code.
+#endif
+//#include<stdio.h>
+
+void BF_encrypt(BF_LONG *data, const BF_KEY *key)
+{
+    register BF_LONG l, r;
+    register const BF_LONG *p, *s;
+
+    p = key->P;
+    s = &(key->S[0]);
+    l = data[0];
+    r = data[1];
+
+    l ^= p[0];
+    BF_ENC(r, l, s, p[1]);
+    BF_ENC(l, r, s, p[2]);
+    BF_ENC(r, l, s, p[3]);
+    BF_ENC(l, r, s, p[4]);
+    BF_ENC(r, l, s, p[5]);
+    BF_ENC(l, r, s, p[6]);
+    BF_ENC(r, l, s, p[7]);
+    BF_ENC(l, r, s, p[8]);
+    BF_ENC(r, l, s, p[9]);
+    BF_ENC(l, r, s, p[10]);
+    BF_ENC(r, l, s, p[11]);
+    BF_ENC(l, r, s, p[12]);
+    BF_ENC(r, l, s, p[13]);
+    BF_ENC(l, r, s, p[14]);
+    BF_ENC(r, l, s, p[15]);
+    BF_ENC(l, r, s, p[16]);
+# if BF_ROUNDS == 20
+    BF_ENC(r, l, s, p[17]);
+    BF_ENC(l, r, s, p[18]);
+    BF_ENC(r, l, s, p[19]);
+    BF_ENC(l, r, s, p[20]);
+# endif
+    r ^= p[BF_ROUNDS + 1];
+
+    data[1] = l & 0xffffffffU;
+    data[0] = r & 0xffffffffU;
+}
+
+void BF_decrypt(BF_LONG *data, const BF_KEY *key)
+{
+    register BF_LONG l, r;
+    register const BF_LONG *p, *s;
+
+    p = key->P;
+    s = &(key->S[0]);
+    l = data[0];
+    r = data[1];
+
+    l ^= p[BF_ROUNDS + 1];
+#  if BF_ROUNDS == 20
+    BF_ENC(r, l, s, p[20]);
+    BF_ENC(l, r, s, p[19]);
+    BF_ENC(r, l, s, p[18]);
+    BF_ENC(l, r, s, p[17]);
+#  endif
+    BF_ENC(r, l, s, p[16]);
+    BF_ENC(l, r, s, p[15]);
+    BF_ENC(r, l, s, p[14]);
+    BF_ENC(l, r, s, p[13]);
+    BF_ENC(r, l, s, p[12]);
+    BF_ENC(l, r, s, p[11]);
+    BF_ENC(r, l, s, p[10]);
+    BF_ENC(l, r, s, p[9]);
+    BF_ENC(r, l, s, p[8]);
+    BF_ENC(l, r, s, p[7]);
+    BF_ENC(r, l, s, p[6]);
+    BF_ENC(l, r, s, p[5]);
+    BF_ENC(r, l, s, p[4]);
+    BF_ENC(l, r, s, p[3]);
+    BF_ENC(r, l, s, p[2]);
+    BF_ENC(l, r, s, p[1]);
+    r ^= p[0];
+
+    data[1] = l & 0xffffffffU;
+    data[0] = r & 0xffffffffU;
+}
+
+void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
+                    const BF_KEY *schedule, unsigned char *ivec, int encrypt)
+{
+    register BF_LONG tin0, tin1;
+    register BF_LONG tout0, tout1, xor0, xor1;
+    register long l = length;
+    BF_LONG tin[2];
+
+    if (encrypt) {
+        n2l(ivec, tout0);
+        n2l(ivec, tout1);
+        ivec -= 8;
+        for (l -= 8; l >= 0; l -= 8) {
+            n2l(in, tin0);
+            n2l(in, tin1);
+            tin0 ^= tout0;
+            tin1 ^= tout1;
+            tin[0] = tin0;
+            tin[1] = tin1;
+            BF_encrypt(tin, schedule);
+            tout0 = tin[0];
+            tout1 = tin[1];
+            l2n(tout0, out);
+            l2n(tout1, out);
+        }
+        if (1||l != -8) {
+            unsigned char tmpin[16];
+            unsigned char *ptmpin = tmpin;
+            memcpy(tmpin, in, l + 8);
+            memcpy(tmpin + l + 8, &length, 4);
+            int pad_length = (8-(l + 8 + 4 + 1)%8)%8;
+            for(int i = 0; i < pad_length; ++i)
+            {
+                tmpin[l+8+4+i]=16;//prng better
+            }
+            tmpin[l+8+4+pad_length]=pad_length;
+//            for(int i = 0; i < l + 8 + 4 +1 +pad_length; ++i)
+//            {
+//                printf("%.2x ", tmpin[i]);
+//            }
+//            printf("\n");fflush(stdout);
+            n2l(ptmpin, tin0);
+            n2l(ptmpin, tin1);
+            tin0 ^= tout0;
+            tin1 ^= tout1;
+            tin[0] = tin0;
+            tin[1] = tin1;
+            BF_encrypt(tin, schedule);
+            tout0 = tin[0];
+            tout1 = tin[1];
+            l2n(tout0, out);
+            l2n(tout1, out);
+            if(l+8+4+pad_length + 1 == 16)
+            {
+                n2l(ptmpin, tin0);
+                n2l(ptmpin, tin1);
+                tin0 ^= tout0;
+                tin1 ^= tout1;
+                tin[0] = tin0;
+                tin[1] = tin1;
+                BF_encrypt(tin, schedule);
+                tout0 = tin[0];
+                tout1 = tin[1];
+                l2n(tout0, out);
+                l2n(tout1, out);
+            }
+
+
+//            n2ln(in, tin0, tin1, l + 8);
+//            tin0 ^= tout0;
+//            tin1 ^= tout1;
+//            tin[0] = tin0;
+//            tin[1] = tin1;
+//            BF_encrypt(tin, schedule);
+//            tout0 = tin[0];
+//            tout1 = tin[1];
+//            l2n(tout0, out);
+//            l2n(tout1, out);
+        }
+        l2n(tout0, ivec);
+        l2n(tout1, ivec);
+    } else {
+        n2l(ivec, xor0);
+        n2l(ivec, xor1);
+        ivec -= 8;
+        for (l -= 8; l >= 0; l -= 8) {
+            n2l(in, tin0);
+            n2l(in, tin1);
+            tin[0] = tin0;
+            tin[1] = tin1;
+            BF_decrypt(tin, schedule);
+            tout0 = tin[0] ^ xor0;
+            tout1 = tin[1] ^ xor1;
+            l2n(tout0, out);
+            l2n(tout1, out);
+            xor0 = tin0;
+            xor1 = tin1;
+        }
+        if (l != -8) {
+            n2l(in, tin0);
+            n2l(in, tin1);
+            tin[0] = tin0;
+            tin[1] = tin1;
+            BF_decrypt(tin, schedule);
+            tout0 = tin[0] ^ xor0;
+            tout1 = tin[1] ^ xor1;
+            l2nn(tout0, tout1, out, l + 8);
+            xor0 = tin0;
+            xor1 = tin1;
+        }
+        l2n(xor0, ivec);
+        l2n(xor1, ivec);
+    }
+    tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
+    tin[0] = tin[1] = 0;
+}
diff --git a/dap-sdk/crypto/src/blowfish/bf_ofb64.c b/dap-sdk/crypto/src/blowfish/bf_ofb64.c
new file mode 100644
index 0000000000000000000000000000000000000000..4eb763c0915e01bd0c8038125699b202d011297a
--- /dev/null
+++ b/dap-sdk/crypto/src/blowfish/bf_ofb64.c
@@ -0,0 +1,52 @@
+#include "blowfish.h"
+#include "bf_local.h"
+
+/*
+ * The input and output encrypted as though 64bit ofb mode is being used.
+ * The extra state information to record how much of the 64bit block we have
+ * used is contained in *num;
+ */
+void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out,
+                      long length, const BF_KEY *schedule,
+                      unsigned char *ivec, int *num)
+{
+    register BF_LONG v0, v1, t;
+    register int n = *num;
+    register long l = length;
+    unsigned char d[8];
+    register char *dp;
+    BF_LONG ti[2];
+    unsigned char *iv;
+    int save = 0;
+
+    iv = (unsigned char *)ivec;
+    n2l(iv, v0);
+    n2l(iv, v1);
+    ti[0] = v0;
+    ti[1] = v1;
+    dp = (char *)d;
+    l2n(v0, dp);
+    l2n(v1, dp);
+    while (l--) {
+        if (n == 0) {
+            BF_encrypt((BF_LONG *)ti, schedule);
+            dp = (char *)d;
+            t = ti[0];
+            l2n(t, dp);
+            t = ti[1];
+            l2n(t, dp);
+            save++;
+        }
+        *(out++) = *(in++) ^ d[n];
+        n = (n + 1) & 0x07;
+    }
+    if (save) {
+        v0 = ti[0];
+        v1 = ti[1];
+        iv = (unsigned char *)ivec;
+        l2n(v0, iv);
+        l2n(v1, iv);
+    }
+    t = v0 = v1 = ti[0] = ti[1] = 0;
+    *num = n;
+}
diff --git a/dap-sdk/crypto/src/blowfish/blowfish.c b/dap-sdk/crypto/src/blowfish/bf_pi.h
similarity index 73%
rename from dap-sdk/crypto/src/blowfish/blowfish.c
rename to dap-sdk/crypto/src/blowfish/bf_pi.h
index 591549c116a5ed6e298e2c63bb8de72fc6ca7017..9785d54b7e6d0bc6816f2bb1ce856c6e0ed423e1 100644
--- a/dap-sdk/crypto/src/blowfish/blowfish.c
+++ b/dap-sdk/crypto/src/blowfish/bf_pi.h
@@ -1,911 +1,521 @@
-#include <stdio.h>
-#include <string.h>
-#include "blowfish.h"
-#include "bf_local.h"
-/*
- * The input and output encrypted as though 64bit cfb mode is being used.
- * The extra state information to record how much of the 64bit block we have
- * used is contained in *num;
- */
-
-static const BF_KEY bf_init = {
-    {
-     0x243f6a88L, 0x85a308d3L, 0x13198a2eL, 0x03707344L,
-     0xa4093822L, 0x299f31d0L, 0x082efa98L, 0xec4e6c89L,
-     0x452821e6L, 0x38d01377L, 0xbe5466cfL, 0x34e90c6cL,
-     0xc0ac29b7L, 0xc97c50ddL, 0x3f84d5b5L, 0xb5470917L,
-     0x9216d5d9L, 0x8979fb1b}, {
-                                0xd1310ba6L, 0x98dfb5acL, 0x2ffd72dbL,
-                                0xd01adfb7L,
-                                0xb8e1afedL, 0x6a267e96L, 0xba7c9045L,
-                                0xf12c7f99L,
-                                0x24a19947L, 0xb3916cf7L, 0x0801f2e2L,
-                                0x858efc16L,
-                                0x636920d8L, 0x71574e69L, 0xa458fea3L,
-                                0xf4933d7eL,
-                                0x0d95748fL, 0x728eb658L, 0x718bcd58L,
-                                0x82154aeeL,
-                                0x7b54a41dL, 0xc25a59b5L, 0x9c30d539L,
-                                0x2af26013L,
-                                0xc5d1b023L, 0x286085f0L, 0xca417918L,
-                                0xb8db38efL,
-                                0x8e79dcb0L, 0x603a180eL, 0x6c9e0e8bL,
-                                0xb01e8a3eL,
-                                0xd71577c1L, 0xbd314b27L, 0x78af2fdaL,
-                                0x55605c60L,
-                                0xe65525f3L, 0xaa55ab94L, 0x57489862L,
-                                0x63e81440L,
-                                0x55ca396aL, 0x2aab10b6L, 0xb4cc5c34L,
-                                0x1141e8ceL,
-                                0xa15486afL, 0x7c72e993L, 0xb3ee1411L,
-                                0x636fbc2aL,
-                                0x2ba9c55dL, 0x741831f6L, 0xce5c3e16L,
-                                0x9b87931eL,
-                                0xafd6ba33L, 0x6c24cf5cL, 0x7a325381L,
-                                0x28958677L,
-                                0x3b8f4898L, 0x6b4bb9afL, 0xc4bfe81bL,
-                                0x66282193L,
-                                0x61d809ccL, 0xfb21a991L, 0x487cac60L,
-                                0x5dec8032L,
-                                0xef845d5dL, 0xe98575b1L, 0xdc262302L,
-                                0xeb651b88L,
-                                0x23893e81L, 0xd396acc5L, 0x0f6d6ff3L,
-                                0x83f44239L,
-                                0x2e0b4482L, 0xa4842004L, 0x69c8f04aL,
-                                0x9e1f9b5eL,
-                                0x21c66842L, 0xf6e96c9aL, 0x670c9c61L,
-                                0xabd388f0L,
-                                0x6a51a0d2L, 0xd8542f68L, 0x960fa728L,
-                                0xab5133a3L,
-                                0x6eef0b6cL, 0x137a3be4L, 0xba3bf050L,
-                                0x7efb2a98L,
-                                0xa1f1651dL, 0x39af0176L, 0x66ca593eL,
-                                0x82430e88L,
-                                0x8cee8619L, 0x456f9fb4L, 0x7d84a5c3L,
-                                0x3b8b5ebeL,
-                                0xe06f75d8L, 0x85c12073L, 0x401a449fL,
-                                0x56c16aa6L,
-                                0x4ed3aa62L, 0x363f7706L, 0x1bfedf72L,
-                                0x429b023dL,
-                                0x37d0d724L, 0xd00a1248L, 0xdb0fead3L,
-                                0x49f1c09bL,
-                                0x075372c9L, 0x80991b7bL, 0x25d479d8L,
-                                0xf6e8def7L,
-                                0xe3fe501aL, 0xb6794c3bL, 0x976ce0bdL,
-                                0x04c006baL,
-                                0xc1a94fb6L, 0x409f60c4L, 0x5e5c9ec2L,
-                                0x196a2463L,
-                                0x68fb6fafL, 0x3e6c53b5L, 0x1339b2ebL,
-                                0x3b52ec6fL,
-                                0x6dfc511fL, 0x9b30952cL, 0xcc814544L,
-                                0xaf5ebd09L,
-                                0xbee3d004L, 0xde334afdL, 0x660f2807L,
-                                0x192e4bb3L,
-                                0xc0cba857L, 0x45c8740fL, 0xd20b5f39L,
-                                0xb9d3fbdbL,
-                                0x5579c0bdL, 0x1a60320aL, 0xd6a100c6L,
-                                0x402c7279L,
-                                0x679f25feL, 0xfb1fa3ccL, 0x8ea5e9f8L,
-                                0xdb3222f8L,
-                                0x3c7516dfL, 0xfd616b15L, 0x2f501ec8L,
-                                0xad0552abL,
-                                0x323db5faL, 0xfd238760L, 0x53317b48L,
-                                0x3e00df82L,
-                                0x9e5c57bbL, 0xca6f8ca0L, 0x1a87562eL,
-                                0xdf1769dbL,
-                                0xd542a8f6L, 0x287effc3L, 0xac6732c6L,
-                                0x8c4f5573L,
-                                0x695b27b0L, 0xbbca58c8L, 0xe1ffa35dL,
-                                0xb8f011a0L,
-                                0x10fa3d98L, 0xfd2183b8L, 0x4afcb56cL,
-                                0x2dd1d35bL,
-                                0x9a53e479L, 0xb6f84565L, 0xd28e49bcL,
-                                0x4bfb9790L,
-                                0xe1ddf2daL, 0xa4cb7e33L, 0x62fb1341L,
-                                0xcee4c6e8L,
-                                0xef20cadaL, 0x36774c01L, 0xd07e9efeL,
-                                0x2bf11fb4L,
-                                0x95dbda4dL, 0xae909198L, 0xeaad8e71L,
-                                0x6b93d5a0L,
-                                0xd08ed1d0L, 0xafc725e0L, 0x8e3c5b2fL,
-                                0x8e7594b7L,
-                                0x8ff6e2fbL, 0xf2122b64L, 0x8888b812L,
-                                0x900df01cL,
-                                0x4fad5ea0L, 0x688fc31cL, 0xd1cff191L,
-                                0xb3a8c1adL,
-                                0x2f2f2218L, 0xbe0e1777L, 0xea752dfeL,
-                                0x8b021fa1L,
-                                0xe5a0cc0fL, 0xb56f74e8L, 0x18acf3d6L,
-                                0xce89e299L,
-                                0xb4a84fe0L, 0xfd13e0b7L, 0x7cc43b81L,
-                                0xd2ada8d9L,
-                                0x165fa266L, 0x80957705L, 0x93cc7314L,
-                                0x211a1477L,
-                                0xe6ad2065L, 0x77b5fa86L, 0xc75442f5L,
-                                0xfb9d35cfL,
-                                0xebcdaf0cL, 0x7b3e89a0L, 0xd6411bd3L,
-                                0xae1e7e49L,
-                                0x00250e2dL, 0x2071b35eL, 0x226800bbL,
-                                0x57b8e0afL,
-                                0x2464369bL, 0xf009b91eL, 0x5563911dL,
-                                0x59dfa6aaL,
-                                0x78c14389L, 0xd95a537fL, 0x207d5ba2L,
-                                0x02e5b9c5L,
-                                0x83260376L, 0x6295cfa9L, 0x11c81968L,
-                                0x4e734a41L,
-                                0xb3472dcaL, 0x7b14a94aL, 0x1b510052L,
-                                0x9a532915L,
-                                0xd60f573fL, 0xbc9bc6e4L, 0x2b60a476L,
-                                0x81e67400L,
-                                0x08ba6fb5L, 0x571be91fL, 0xf296ec6bL,
-                                0x2a0dd915L,
-                                0xb6636521L, 0xe7b9f9b6L, 0xff34052eL,
-                                0xc5855664L,
-                                0x53b02d5dL, 0xa99f8fa1L, 0x08ba4799L,
-                                0x6e85076aL,
-                                0x4b7a70e9L, 0xb5b32944L, 0xdb75092eL,
-                                0xc4192623L,
-                                0xad6ea6b0L, 0x49a7df7dL, 0x9cee60b8L,
-                                0x8fedb266L,
-                                0xecaa8c71L, 0x699a17ffL, 0x5664526cL,
-                                0xc2b19ee1L,
-                                0x193602a5L, 0x75094c29L, 0xa0591340L,
-                                0xe4183a3eL,
-                                0x3f54989aL, 0x5b429d65L, 0x6b8fe4d6L,
-                                0x99f73fd6L,
-                                0xa1d29c07L, 0xefe830f5L, 0x4d2d38e6L,
-                                0xf0255dc1L,
-                                0x4cdd2086L, 0x8470eb26L, 0x6382e9c6L,
-                                0x021ecc5eL,
-                                0x09686b3fL, 0x3ebaefc9L, 0x3c971814L,
-                                0x6b6a70a1L,
-                                0x687f3584L, 0x52a0e286L, 0xb79c5305L,
-                                0xaa500737L,
-                                0x3e07841cL, 0x7fdeae5cL, 0x8e7d44ecL,
-                                0x5716f2b8L,
-                                0xb03ada37L, 0xf0500c0dL, 0xf01c1f04L,
-                                0x0200b3ffL,
-                                0xae0cf51aL, 0x3cb574b2L, 0x25837a58L,
-                                0xdc0921bdL,
-                                0xd19113f9L, 0x7ca92ff6L, 0x94324773L,
-                                0x22f54701L,
-                                0x3ae5e581L, 0x37c2dadcL, 0xc8b57634L,
-                                0x9af3dda7L,
-                                0xa9446146L, 0x0fd0030eL, 0xecc8c73eL,
-                                0xa4751e41L,
-                                0xe238cd99L, 0x3bea0e2fL, 0x3280bba1L,
-                                0x183eb331L,
-                                0x4e548b38L, 0x4f6db908L, 0x6f420d03L,
-                                0xf60a04bfL,
-                                0x2cb81290L, 0x24977c79L, 0x5679b072L,
-                                0xbcaf89afL,
-                                0xde9a771fL, 0xd9930810L, 0xb38bae12L,
-                                0xdccf3f2eL,
-                                0x5512721fL, 0x2e6b7124L, 0x501adde6L,
-                                0x9f84cd87L,
-                                0x7a584718L, 0x7408da17L, 0xbc9f9abcL,
-                                0xe94b7d8cL,
-                                0xec7aec3aL, 0xdb851dfaL, 0x63094366L,
-                                0xc464c3d2L,
-                                0xef1c1847L, 0x3215d908L, 0xdd433b37L,
-                                0x24c2ba16L,
-                                0x12a14d43L, 0x2a65c451L, 0x50940002L,
-                                0x133ae4ddL,
-                                0x71dff89eL, 0x10314e55L, 0x81ac77d6L,
-                                0x5f11199bL,
-                                0x043556f1L, 0xd7a3c76bL, 0x3c11183bL,
-                                0x5924a509L,
-                                0xf28fe6edL, 0x97f1fbfaL, 0x9ebabf2cL,
-                                0x1e153c6eL,
-                                0x86e34570L, 0xeae96fb1L, 0x860e5e0aL,
-                                0x5a3e2ab3L,
-                                0x771fe71cL, 0x4e3d06faL, 0x2965dcb9L,
-                                0x99e71d0fL,
-                                0x803e89d6L, 0x5266c825L, 0x2e4cc978L,
-                                0x9c10b36aL,
-                                0xc6150ebaL, 0x94e2ea78L, 0xa5fc3c53L,
-                                0x1e0a2df4L,
-                                0xf2f74ea7L, 0x361d2b3dL, 0x1939260fL,
-                                0x19c27960L,
-                                0x5223a708L, 0xf71312b6L, 0xebadfe6eL,
-                                0xeac31f66L,
-                                0xe3bc4595L, 0xa67bc883L, 0xb17f37d1L,
-                                0x018cff28L,
-                                0xc332ddefL, 0xbe6c5aa5L, 0x65582185L,
-                                0x68ab9802L,
-                                0xeecea50fL, 0xdb2f953bL, 0x2aef7dadL,
-                                0x5b6e2f84L,
-                                0x1521b628L, 0x29076170L, 0xecdd4775L,
-                                0x619f1510L,
-                                0x13cca830L, 0xeb61bd96L, 0x0334fe1eL,
-                                0xaa0363cfL,
-                                0xb5735c90L, 0x4c70a239L, 0xd59e9e0bL,
-                                0xcbaade14L,
-                                0xeecc86bcL, 0x60622ca7L, 0x9cab5cabL,
-                                0xb2f3846eL,
-                                0x648b1eafL, 0x19bdf0caL, 0xa02369b9L,
-                                0x655abb50L,
-                                0x40685a32L, 0x3c2ab4b3L, 0x319ee9d5L,
-                                0xc021b8f7L,
-                                0x9b540b19L, 0x875fa099L, 0x95f7997eL,
-                                0x623d7da8L,
-                                0xf837889aL, 0x97e32d77L, 0x11ed935fL,
-                                0x16681281L,
-                                0x0e358829L, 0xc7e61fd6L, 0x96dedfa1L,
-                                0x7858ba99L,
-                                0x57f584a5L, 0x1b227263L, 0x9b83c3ffL,
-                                0x1ac24696L,
-                                0xcdb30aebL, 0x532e3054L, 0x8fd948e4L,
-                                0x6dbc3128L,
-                                0x58ebf2efL, 0x34c6ffeaL, 0xfe28ed61L,
-                                0xee7c3c73L,
-                                0x5d4a14d9L, 0xe864b7e3L, 0x42105d14L,
-                                0x203e13e0L,
-                                0x45eee2b6L, 0xa3aaabeaL, 0xdb6c4f15L,
-                                0xfacb4fd0L,
-                                0xc742f442L, 0xef6abbb5L, 0x654f3b1dL,
-                                0x41cd2105L,
-                                0xd81e799eL, 0x86854dc7L, 0xe44b476aL,
-                                0x3d816250L,
-                                0xcf62a1f2L, 0x5b8d2646L, 0xfc8883a0L,
-                                0xc1c7b6a3L,
-                                0x7f1524c3L, 0x69cb7492L, 0x47848a0bL,
-                                0x5692b285L,
-                                0x095bbf00L, 0xad19489dL, 0x1462b174L,
-                                0x23820e00L,
-                                0x58428d2aL, 0x0c55f5eaL, 0x1dadf43eL,
-                                0x233f7061L,
-                                0x3372f092L, 0x8d937e41L, 0xd65fecf1L,
-                                0x6c223bdbL,
-                                0x7cde3759L, 0xcbee7460L, 0x4085f2a7L,
-                                0xce77326eL,
-                                0xa6078084L, 0x19f8509eL, 0xe8efd855L,
-                                0x61d99735L,
-                                0xa969a7aaL, 0xc50c06c2L, 0x5a04abfcL,
-                                0x800bcadcL,
-                                0x9e447a2eL, 0xc3453484L, 0xfdd56705L,
-                                0x0e1e9ec9L,
-                                0xdb73dbd3L, 0x105588cdL, 0x675fda79L,
-                                0xe3674340L,
-                                0xc5c43465L, 0x713e38d8L, 0x3d28f89eL,
-                                0xf16dff20L,
-                                0x153e21e7L, 0x8fb03d4aL, 0xe6e39f2bL,
-                                0xdb83adf7L,
-                                0xe93d5a68L, 0x948140f7L, 0xf64c261cL,
-                                0x94692934L,
-                                0x411520f7L, 0x7602d4f7L, 0xbcf46b2eL,
-                                0xd4a20068L,
-                                0xd4082471L, 0x3320f46aL, 0x43b7d4b7L,
-                                0x500061afL,
-                                0x1e39f62eL, 0x97244546L, 0x14214f74L,
-                                0xbf8b8840L,
-                                0x4d95fc1dL, 0x96b591afL, 0x70f4ddd3L,
-                                0x66a02f45L,
-                                0xbfbc09ecL, 0x03bd9785L, 0x7fac6dd0L,
-                                0x31cb8504L,
-                                0x96eb27b3L, 0x55fd3941L, 0xda2547e6L,
-                                0xabca0a9aL,
-                                0x28507825L, 0x530429f4L, 0x0a2c86daL,
-                                0xe9b66dfbL,
-                                0x68dc1462L, 0xd7486900L, 0x680ec0a4L,
-                                0x27a18deeL,
-                                0x4f3ffea2L, 0xe887ad8cL, 0xb58ce006L,
-                                0x7af4d6b6L,
-                                0xaace1e7cL, 0xd3375fecL, 0xce78a399L,
-                                0x406b2a42L,
-                                0x20fe9e35L, 0xd9f385b9L, 0xee39d7abL,
-                                0x3b124e8bL,
-                                0x1dc9faf7L, 0x4b6d1856L, 0x26a36631L,
-                                0xeae397b2L,
-                                0x3a6efa74L, 0xdd5b4332L, 0x6841e7f7L,
-                                0xca7820fbL,
-                                0xfb0af54eL, 0xd8feb397L, 0x454056acL,
-                                0xba489527L,
-                                0x55533a3aL, 0x20838d87L, 0xfe6ba9b7L,
-                                0xd096954bL,
-                                0x55a867bcL, 0xa1159a58L, 0xcca92963L,
-                                0x99e1db33L,
-                                0xa62a4a56L, 0x3f3125f9L, 0x5ef47e1cL,
-                                0x9029317cL,
-                                0xfdf8e802L, 0x04272f70L, 0x80bb155cL,
-                                0x05282ce3L,
-                                0x95c11548L, 0xe4c66d22L, 0x48c1133fL,
-                                0xc70f86dcL,
-                                0x07f9c9eeL, 0x41041f0fL, 0x404779a4L,
-                                0x5d886e17L,
-                                0x325f51ebL, 0xd59bc0d1L, 0xf2bcc18fL,
-                                0x41113564L,
-                                0x257b7834L, 0x602a9c60L, 0xdff8e8a3L,
-                                0x1f636c1bL,
-                                0x0e12b4c2L, 0x02e1329eL, 0xaf664fd1L,
-                                0xcad18115L,
-                                0x6b2395e0L, 0x333e92e1L, 0x3b240b62L,
-                                0xeebeb922L,
-                                0x85b2a20eL, 0xe6ba0d99L, 0xde720c8cL,
-                                0x2da2f728L,
-                                0xd0127845L, 0x95b794fdL, 0x647d0862L,
-                                0xe7ccf5f0L,
-                                0x5449a36fL, 0x877d48faL, 0xc39dfd27L,
-                                0xf33e8d1eL,
-                                0x0a476341L, 0x992eff74L, 0x3a6f6eabL,
-                                0xf4f8fd37L,
-                                0xa812dc60L, 0xa1ebddf8L, 0x991be14cL,
-                                0xdb6e6b0dL,
-                                0xc67b5510L, 0x6d672c37L, 0x2765d43bL,
-                                0xdcd0e804L,
-                                0xf1290dc7L, 0xcc00ffa3L, 0xb5390f92L,
-                                0x690fed0bL,
-                                0x667b9ffbL, 0xcedb7d9cL, 0xa091cf0bL,
-                                0xd9155ea3L,
-                                0xbb132f88L, 0x515bad24L, 0x7b9479bfL,
-                                0x763bd6ebL,
-                                0x37392eb3L, 0xcc115979L, 0x8026e297L,
-                                0xf42e312dL,
-                                0x6842ada7L, 0xc66a2b3bL, 0x12754cccL,
-                                0x782ef11cL,
-                                0x6a124237L, 0xb79251e7L, 0x06a1bbe6L,
-                                0x4bfb6350L,
-                                0x1a6b1018L, 0x11caedfaL, 0x3d25bdd8L,
-                                0xe2e1c3c9L,
-                                0x44421659L, 0x0a121386L, 0xd90cec6eL,
-                                0xd5abea2aL,
-                                0x64af674eL, 0xda86a85fL, 0xbebfe988L,
-                                0x64e4c3feL,
-                                0x9dbc8057L, 0xf0f7c086L, 0x60787bf8L,
-                                0x6003604dL,
-                                0xd1fd8346L, 0xf6381fb0L, 0x7745ae04L,
-                                0xd736fcccL,
-                                0x83426b33L, 0xf01eab71L, 0xb0804187L,
-                                0x3c005e5fL,
-                                0x77a057beL, 0xbde8ae24L, 0x55464299L,
-                                0xbf582e61L,
-                                0x4e58f48fL, 0xf2ddfda2L, 0xf474ef38L,
-                                0x8789bdc2L,
-                                0x5366f9c3L, 0xc8b38e74L, 0xb475f255L,
-                                0x46fcd9b9L,
-                                0x7aeb2661L, 0x8b1ddf84L, 0x846a0e79L,
-                                0x915f95e2L,
-                                0x466e598eL, 0x20b45770L, 0x8cd55591L,
-                                0xc902de4cL,
-                                0xb90bace1L, 0xbb8205d0L, 0x11a86248L,
-                                0x7574a99eL,
-                                0xb77f19b6L, 0xe0a9dc09L, 0x662d09a1L,
-                                0xc4324633L,
-                                0xe85a1f02L, 0x09f0be8cL, 0x4a99a025L,
-                                0x1d6efe10L,
-                                0x1ab93d1dL, 0x0ba5a4dfL, 0xa186f20fL,
-                                0x2868f169L,
-                                0xdcb7da83L, 0x573906feL, 0xa1e2ce9bL,
-                                0x4fcd7f52L,
-                                0x50115e01L, 0xa70683faL, 0xa002b5c4L,
-                                0x0de6d027L,
-                                0x9af88c27L, 0x773f8641L, 0xc3604c06L,
-                                0x61a806b5L,
-                                0xf0177a28L, 0xc0f586e0L, 0x006058aaL,
-                                0x30dc7d62L,
-                                0x11e69ed7L, 0x2338ea63L, 0x53c2dd94L,
-                                0xc2c21634L,
-                                0xbbcbee56L, 0x90bcb6deL, 0xebfc7da1L,
-                                0xce591d76L,
-                                0x6f05e409L, 0x4b7c0188L, 0x39720a3dL,
-                                0x7c927c24L,
-                                0x86e3725fL, 0x724d9db9L, 0x1ac15bb4L,
-                                0xd39eb8fcL,
-                                0xed545578L, 0x08fca5b5L, 0xd83d7cd3L,
-                                0x4dad0fc4L,
-                                0x1e50ef5eL, 0xb161e6f8L, 0xa28514d9L,
-                                0x6c51133cL,
-                                0x6fd5c7e7L, 0x56e14ec4L, 0x362abfceL,
-                                0xddc6c837L,
-                                0xd79a3234L, 0x92638212L, 0x670efa8eL,
-                                0x406000e0L,
-                                0x3a39ce37L, 0xd3faf5cfL, 0xabc27737L,
-                                0x5ac52d1bL,
-                                0x5cb0679eL, 0x4fa33742L, 0xd3822740L,
-                                0x99bc9bbeL,
-                                0xd5118e9dL, 0xbf0f7315L, 0xd62d1c7eL,
-                                0xc700c47bL,
-                                0xb78c1b6bL, 0x21a19045L, 0xb26eb1beL,
-                                0x6a366eb4L,
-                                0x5748ab2fL, 0xbc946e79L, 0xc6a376d2L,
-                                0x6549c2c8L,
-                                0x530ff8eeL, 0x468dde7dL, 0xd5730a1dL,
-                                0x4cd04dc6L,
-                                0x2939bbdbL, 0xa9ba4650L, 0xac9526e8L,
-                                0xbe5ee304L,
-                                0xa1fad5f0L, 0x6a2d519aL, 0x63ef8ce2L,
-                                0x9a86ee22L,
-                                0xc089c2b8L, 0x43242ef6L, 0xa51e03aaL,
-                                0x9cf2d0a4L,
-                                0x83c061baL, 0x9be96a4dL, 0x8fe51550L,
-                                0xba645bd6L,
-                                0x2826a2f9L, 0xa73a3ae1L, 0x4ba99586L,
-                                0xef5562e9L,
-                                0xc72fefd3L, 0xf752f7daL, 0x3f046f69L,
-                                0x77fa0a59L,
-                                0x80e4a915L, 0x87b08601L, 0x9b09e6adL,
-                                0x3b3ee593L,
-                                0xe990fd5aL, 0x9e34d797L, 0x2cf0b7d9L,
-                                0x022b8b51L,
-                                0x96d5ac3aL, 0x017da67dL, 0xd1cf3ed6L,
-                                0x7c7d2d28L,
-                                0x1f9f25cfL, 0xadf2b89bL, 0x5ad6b472L,
-                                0x5a88f54cL,
-                                0xe029ac71L, 0xe019a5e6L, 0x47b0acfdL,
-                                0xed93fa9bL,
-                                0xe8d3c48dL, 0x283b57ccL, 0xf8d56629L,
-                                0x79132e28L,
-                                0x785f0191L, 0xed756055L, 0xf7960e44L,
-                                0xe3d35e8cL,
-                                0x15056dd4L, 0x88f46dbaL, 0x03a16125L,
-                                0x0564f0bdL,
-                                0xc3eb9e15L, 0x3c9057a2L, 0x97271aecL,
-                                0xa93a072aL,
-                                0x1b3f6d9bL, 0x1e6321f5L, 0xf59c66fbL,
-                                0x26dcf319L,
-                                0x7533d928L, 0xb155fdf5L, 0x03563482L,
-                                0x8aba3cbbL,
-                                0x28517711L, 0xc20ad9f8L, 0xabcc5167L,
-                                0xccad925fL,
-                                0x4de81751L, 0x3830dc8eL, 0x379d5862L,
-                                0x9320f991L,
-                                0xea7a90c2L, 0xfb3e7bceL, 0x5121ce64L,
-                                0x774fbe32L,
-                                0xa8b6e37eL, 0xc3293d46L, 0x48de5369L,
-                                0x6413e680L,
-                                0xa2ae0810L, 0xdd6db224L, 0x69852dfdL,
-                                0x09072166L,
-                                0xb39a460aL, 0x6445c0ddL, 0x586cdecfL,
-                                0x1c20c8aeL,
-                                0x5bbef7ddL, 0x1b588d40L, 0xccd2017fL,
-                                0x6bb4e3bbL,
-                                0xdda26a7eL, 0x3a59ff45L, 0x3e350a44L,
-                                0xbcb4cdd5L,
-                                0x72eacea8L, 0xfa6484bbL, 0x8d6612aeL,
-                                0xbf3c6f47L,
-                                0xd29be463L, 0x542f5d9eL, 0xaec2771bL,
-                                0xf64e6370L,
-                                0x740e0d8dL, 0xe75b1357L, 0xf8721671L,
-                                0xaf537d5dL,
-                                0x4040cb08L, 0x4eb4e2ccL, 0x34d2466aL,
-                                0x0115af84L,
-                                0xe1b00428L, 0x95983a1dL, 0x06b89fb4L,
-                                0xce6ea048L,
-                                0x6f3f3b82L, 0x3520ab82L, 0x011a1d4bL,
-                                0x277227f8L,
-                                0x611560b1L, 0xe7933fdcL, 0xbb3a792bL,
-                                0x344525bdL,
-                                0xa08839e1L, 0x51ce794bL, 0x2f32c9b7L,
-                                0xa01fbac9L,
-                                0xe01cc87eL, 0xbcc7d1f6L, 0xcf0111c3L,
-                                0xa1e8aac7L,
-                                0x1a908749L, 0xd44fbd9aL, 0xd0dadecbL,
-                                0xd50ada38L,
-                                0x0339c32aL, 0xc6913667L, 0x8df9317cL,
-                                0xe0b12b4fL,
-                                0xf79e59b7L, 0x43f5bb3aL, 0xf2d519ffL,
-                                0x27d9459cL,
-                                0xbf97222cL, 0x15e6fc2aL, 0x0f91fc71L,
-                                0x9b941525L,
-                                0xfae59361L, 0xceb69cebL, 0xc2a86459L,
-                                0x12baa8d1L,
-                                0xb6c1075eL, 0xe3056a0cL, 0x10d25065L,
-                                0xcb03a442L,
-                                0xe0ec6e0eL, 0x1698db3bL, 0x4c98a0beL,
-                                0x3278e964L,
-                                0x9f1f9532L, 0xe0d392dfL, 0xd3a0342bL,
-                                0x8971f21eL,
-                                0x1b0a7441L, 0x4ba3348cL, 0xc5be7120L,
-                                0xc37632d8L,
-                                0xdf359f8dL, 0x9b992f2eL, 0xe60b6f47L,
-                                0x0fe3f11dL,
-                                0xe54cda54L, 0x1edad891L, 0xce6279cfL,
-                                0xcd3e7e6fL,
-                                0x1618b166L, 0xfd2c1d05L, 0x848fd2c5L,
-                                0xf6fb2299L,
-                                0xf523f357L, 0xa6327623L, 0x93a83531L,
-                                0x56cccd02L,
-                                0xacf08162L, 0x5a75ebb5L, 0x6e163697L,
-                                0x88d273ccL,
-                                0xde966292L, 0x81b949d0L, 0x4c50901bL,
-                                0x71c65614L,
-                                0xe6c6c7bdL, 0x327a140aL, 0x45e1d006L,
-                                0xc3f27b9aL,
-                                0xc9aa53fdL, 0x62a80f00L, 0xbb25bfe2L,
-                                0x35bdd2f6L,
-                                0x71126905L, 0xb2040222L, 0xb6cbcf7cL,
-                                0xcd769c2bL,
-                                0x53113ec0L, 0x1640e3d3L, 0x38abbd60L,
-                                0x2547adf0L,
-                                0xba38209cL, 0xf746ce76L, 0x77afa1c5L,
-                                0x20756060L,
-                                0x85cbfe4eL, 0x8ae88dd8L, 0x7aaaf9b0L,
-                                0x4cf9aa7eL,
-                                0x1948c25cL, 0x02fb8a8cL, 0x01c36ae4L,
-                                0xd6ebe1f9L,
-                                0x90d4f869L, 0xa65cdea0L, 0x3f09252dL,
-                                0xc208e69fL,
-                                0xb74e6132L, 0xce77e25bL, 0x578fdfe3L,
-                                0x3ac372e6L,
-                                }
-};
-
-void BF_encrypt(BF_LONG *data, const BF_KEY *key)
-{
-    register BF_LONG l, r;
-    register const BF_LONG *p, *s;
-
-    p = key->P;
-    s = &(key->S[0]);
-    l = data[0];
-    r = data[1];
-
-    l ^= p[0];
-    BF_ENC(r, l, s, p[1]);
-    BF_ENC(l, r, s, p[2]);
-    BF_ENC(r, l, s, p[3]);
-    BF_ENC(l, r, s, p[4]);
-    BF_ENC(r, l, s, p[5]);
-    BF_ENC(l, r, s, p[6]);
-    BF_ENC(r, l, s, p[7]);
-    BF_ENC(l, r, s, p[8]);
-    BF_ENC(r, l, s, p[9]);
-    BF_ENC(l, r, s, p[10]);
-    BF_ENC(r, l, s, p[11]);
-    BF_ENC(l, r, s, p[12]);
-    BF_ENC(r, l, s, p[13]);
-    BF_ENC(l, r, s, p[14]);
-    BF_ENC(r, l, s, p[15]);
-    BF_ENC(l, r, s, p[16]);
-# if BF_ROUNDS == 20
-    BF_ENC(r, l, s, p[17]);
-    BF_ENC(l, r, s, p[18]);
-    BF_ENC(r, l, s, p[19]);
-    BF_ENC(l, r, s, p[20]);
-# endif
-    r ^= p[BF_ROUNDS + 1];
-
-    data[1] = l & 0xffffffffU;
-    data[0] = r & 0xffffffffU;
-}
-
-void BF_decrypt(BF_LONG *data, const BF_KEY *key)
-{
-    register BF_LONG l, r;
-    register const BF_LONG *p, *s;
-
-    p = key->P;
-    s = &(key->S[0]);
-    l = data[0];
-    r = data[1];
-
-    l ^= p[BF_ROUNDS + 1];
-#  if BF_ROUNDS == 20
-    BF_ENC(r, l, s, p[20]);
-    BF_ENC(l, r, s, p[19]);
-    BF_ENC(r, l, s, p[18]);
-    BF_ENC(l, r, s, p[17]);
-#  endif
-    BF_ENC(r, l, s, p[16]);
-    BF_ENC(l, r, s, p[15]);
-    BF_ENC(r, l, s, p[14]);
-    BF_ENC(l, r, s, p[13]);
-    BF_ENC(r, l, s, p[12]);
-    BF_ENC(l, r, s, p[11]);
-    BF_ENC(r, l, s, p[10]);
-    BF_ENC(l, r, s, p[9]);
-    BF_ENC(r, l, s, p[8]);
-    BF_ENC(l, r, s, p[7]);
-    BF_ENC(r, l, s, p[6]);
-    BF_ENC(l, r, s, p[5]);
-    BF_ENC(r, l, s, p[4]);
-    BF_ENC(l, r, s, p[3]);
-    BF_ENC(r, l, s, p[2]);
-    BF_ENC(l, r, s, p[1]);
-    r ^= p[0];
-
-    data[1] = l & 0xffffffffU;
-    data[0] = r & 0xffffffffU;
-}
-
-void BF_cfb64_encrypt(const unsigned char *in, unsigned char *out,
-                      long length, const BF_KEY *schedule,
-                      unsigned char *ivec, int *num, int encrypt)
-{
-    register BF_LONG v0, v1, t;
-    register int n = *num;
-    register long l = length;
-    BF_LONG ti[2];
-    unsigned char *iv, c, cc;
-
-    iv = (unsigned char *)ivec;
-    if (encrypt) {
-        while (l--) {
-            if (n == 0) {
-                n2l(iv, v0);
-                ti[0] = v0;
-                n2l(iv, v1);
-                ti[1] = v1;
-                BF_encrypt((BF_LONG *)ti, schedule);
-                iv = (unsigned char *)ivec;
-                t = ti[0];
-                l2n(t, iv);
-                t = ti[1];
-                l2n(t, iv);
-                iv = (unsigned char *)ivec;
-            }
-            c = *(in++) ^ iv[n];
-            *(out++) = c;
-            iv[n] = c;
-            n = (n + 1) & 0x07;
-        }
-    } else {
-        while (l--) {
-            if (n == 0) {
-                n2l(iv, v0);
-                ti[0] = v0;
-                n2l(iv, v1);
-                ti[1] = v1;
-                BF_encrypt((BF_LONG *)ti, schedule);
-                iv = (unsigned char *)ivec;
-                t = ti[0];
-                l2n(t, iv);
-                t = ti[1];
-                l2n(t, iv);
-                iv = (unsigned char *)ivec;
-            }
-            cc = *(in++);
-            c = iv[n];
-            iv[n] = cc;
-            *(out++) = c ^ cc;
-            n = (n + 1) & 0x07;
-        }
-    }
-    v0 = v1 = ti[0] = ti[1] = t = c = cc = 0;
-    *num = n;
-}
-
-const char *BF_options(void)
-{
-    return "blowfish(ptr)";
-}
-
-void BF_ecb_encrypt(const unsigned char *in, unsigned char *out,
-                    const BF_KEY *key, int encrypt)
-{
-    BF_LONG l, d[2];
-
-    n2l(in, l);
-    d[0] = l;
-    n2l(in, l);
-    d[1] = l;
-    if (encrypt)
-        BF_encrypt(d, key);
-    else
-        BF_decrypt(d, key);
-    l = d[0];
-    l2n(l, out);
-    l = d[1];
-    l2n(l, out);
-    l = d[0] = d[1] = 0;
-}
-
-#if (BF_ROUNDS != 16) && (BF_ROUNDS != 20)
-# error If you set BF_ROUNDS to some value other than 16 or 20, you will have \
-to modify the code.
-#endif
-
-void BF_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
-                    const BF_KEY *schedule, unsigned char *ivec, int encrypt)
-{
-    register BF_LONG tin0, tin1;
-    register BF_LONG tout0, tout1, xor0, xor1;
-    register long l = length;
-    BF_LONG tin[2];
-
-    if (encrypt) {
-        n2l(ivec, tout0);
-        n2l(ivec, tout1);
-        ivec -= 8;
-        for (l -= 8; l >= 0; l -= 8) {
-            n2l(in, tin0);
-            n2l(in, tin1);
-            tin0 ^= tout0;
-            tin1 ^= tout1;
-            tin[0] = tin0;
-            tin[1] = tin1;
-            BF_encrypt(tin, schedule);
-            tout0 = tin[0];
-            tout1 = tin[1];
-            l2n(tout0, out);
-            l2n(tout1, out);
-        }
-        if (1||l != -8) {
-            unsigned char tmpin[16];
-            unsigned char *ptmpin = tmpin;
-            memcpy(tmpin, in, l + 8);
-            memcpy(tmpin + l + 8, &length, 4);
-            int pad_length = (8-(l + 8 + 4 + 1)%8)%8;
-            for(int i = 0; i < pad_length; ++i)
-            {
-                tmpin[l+8+4+i]=16;//prng better
-            }
-            tmpin[l+8+4+pad_length]=pad_length;
-//            for(int i = 0; i < l + 8 + 4 +1 +pad_length; ++i)
-//            {
-//                printf("%.2x ", tmpin[i]);
-//            }
-//            printf("\n");fflush(stdout);
-            n2l(ptmpin, tin0);
-            n2l(ptmpin, tin1);
-            tin0 ^= tout0;
-            tin1 ^= tout1;
-            tin[0] = tin0;
-            tin[1] = tin1;
-            BF_encrypt(tin, schedule);
-            tout0 = tin[0];
-            tout1 = tin[1];
-            l2n(tout0, out);
-            l2n(tout1, out);
-            if(l+8+4+pad_length + 1 == 16)
-            {
-                n2l(ptmpin, tin0);
-                n2l(ptmpin, tin1);
-                tin0 ^= tout0;
-                tin1 ^= tout1;
-                tin[0] = tin0;
-                tin[1] = tin1;
-                BF_encrypt(tin, schedule);
-                tout0 = tin[0];
-                tout1 = tin[1];
-                l2n(tout0, out);
-                l2n(tout1, out);
-            }
-
-
-//            n2ln(in, tin0, tin1, l + 8);
-//            tin0 ^= tout0;
-//            tin1 ^= tout1;
-//            tin[0] = tin0;
-//            tin[1] = tin1;
-//            BF_encrypt(tin, schedule);
-//            tout0 = tin[0];
-//            tout1 = tin[1];
-//            l2n(tout0, out);
-//            l2n(tout1, out);
-        }
-        l2n(tout0, ivec);
-        l2n(tout1, ivec);
-    } else {
-        n2l(ivec, xor0);
-        n2l(ivec, xor1);
-        ivec -= 8;
-        for (l -= 8; l >= 0; l -= 8) {
-            n2l(in, tin0);
-            n2l(in, tin1);
-            tin[0] = tin0;
-            tin[1] = tin1;
-            BF_decrypt(tin, schedule);
-            tout0 = tin[0] ^ xor0;
-            tout1 = tin[1] ^ xor1;
-            l2n(tout0, out);
-            l2n(tout1, out);
-            xor0 = tin0;
-            xor1 = tin1;
-        }
-        if (l != -8) {
-            n2l(in, tin0);
-            n2l(in, tin1);
-            tin[0] = tin0;
-            tin[1] = tin1;
-            BF_decrypt(tin, schedule);
-            tout0 = tin[0] ^ xor0;
-            tout1 = tin[1] ^ xor1;
-            l2nn(tout0, tout1, out, l + 8);
-            xor0 = tin0;
-            xor1 = tin1;
-        }
-        l2n(xor0, ivec);
-        l2n(xor1, ivec);
-    }
-    tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
-    tin[0] = tin[1] = 0;
-}
-
-void BF_ofb64_encrypt(const unsigned char *in, unsigned char *out,
-                      long length, const BF_KEY *schedule,
-                      unsigned char *ivec, int *num)
-{
-    register BF_LONG v0, v1, t;
-    register int n = *num;
-    register long l = length;
-    unsigned char d[8];
-    register char *dp;
-    BF_LONG ti[2];
-    unsigned char *iv;
-    int save = 0;
-
-    iv = (unsigned char *)ivec;
-    n2l(iv, v0);
-    n2l(iv, v1);
-    ti[0] = v0;
-    ti[1] = v1;
-    dp = (char *)d;
-    l2n(v0, dp);
-    l2n(v1, dp);
-    while (l--) {
-        if (n == 0) {
-            BF_encrypt((BF_LONG *)ti, schedule);
-            dp = (char *)d;
-            t = ti[0];
-            l2n(t, dp);
-            t = ti[1];
-            l2n(t, dp);
-            save++;
-        }
-        *(out++) = *(in++) ^ d[n];
-        n = (n + 1) & 0x07;
-    }
-    if (save) {
-        v0 = ti[0];
-        v1 = ti[1];
-        iv = (unsigned char *)ivec;
-        l2n(v0, iv);
-        l2n(v1, iv);
-    }
-    t = v0 = v1 = ti[0] = ti[1] = 0;
-    *num = n;
-}
-
-void BF_set_key(BF_KEY *key, int len, const unsigned char *data)
-{
-    int i;
-    BF_LONG *p, ri, in[2];
-    const unsigned char *d, *end;
-
-    memcpy(key, &bf_init, sizeof(BF_KEY));
-    p = key->P;
-
-    if (len > ((BF_ROUNDS + 2) * 4))
-        len = (BF_ROUNDS + 2) * 4;
-
-    d = data;
-    end = &(data[len]);
-    for (i = 0; i < (BF_ROUNDS + 2); i++) {
-        ri = *(d++);
-        if (d >= end)
-            d = data;
-
-        ri <<= 8;
-        ri |= *(d++);
-        if (d >= end)
-            d = data;
-
-        ri <<= 8;
-        ri |= *(d++);
-        if (d >= end)
-            d = data;
-
-        ri <<= 8;
-        ri |= *(d++);
-        if (d >= end)
-            d = data;
-
-        p[i] ^= ri;
-    }
-
-    in[0] = 0L;
-    in[1] = 0L;
-    for (i = 0; i < (BF_ROUNDS + 2); i += 2) {
-        BF_encrypt(in, key);
-        p[i] = in[0];
-        p[i + 1] = in[1];
-    }
-
-    p = key->S;
-    for (i = 0; i < 4 * 256; i += 2) {
-        BF_encrypt(in, key);
-        p[i] = in[0];
-        p[i + 1] = in[1];
-    }
-}
+static const BF_KEY bf_init = {
+    {
+     0x243f6a88L, 0x85a308d3L, 0x13198a2eL, 0x03707344L,
+     0xa4093822L, 0x299f31d0L, 0x082efa98L, 0xec4e6c89L,
+     0x452821e6L, 0x38d01377L, 0xbe5466cfL, 0x34e90c6cL,
+     0xc0ac29b7L, 0xc97c50ddL, 0x3f84d5b5L, 0xb5470917L,
+     0x9216d5d9L, 0x8979fb1b}, {
+                                0xd1310ba6L, 0x98dfb5acL, 0x2ffd72dbL,
+                                0xd01adfb7L,
+                                0xb8e1afedL, 0x6a267e96L, 0xba7c9045L,
+                                0xf12c7f99L,
+                                0x24a19947L, 0xb3916cf7L, 0x0801f2e2L,
+                                0x858efc16L,
+                                0x636920d8L, 0x71574e69L, 0xa458fea3L,
+                                0xf4933d7eL,
+                                0x0d95748fL, 0x728eb658L, 0x718bcd58L,
+                                0x82154aeeL,
+                                0x7b54a41dL, 0xc25a59b5L, 0x9c30d539L,
+                                0x2af26013L,
+                                0xc5d1b023L, 0x286085f0L, 0xca417918L,
+                                0xb8db38efL,
+                                0x8e79dcb0L, 0x603a180eL, 0x6c9e0e8bL,
+                                0xb01e8a3eL,
+                                0xd71577c1L, 0xbd314b27L, 0x78af2fdaL,
+                                0x55605c60L,
+                                0xe65525f3L, 0xaa55ab94L, 0x57489862L,
+                                0x63e81440L,
+                                0x55ca396aL, 0x2aab10b6L, 0xb4cc5c34L,
+                                0x1141e8ceL,
+                                0xa15486afL, 0x7c72e993L, 0xb3ee1411L,
+                                0x636fbc2aL,
+                                0x2ba9c55dL, 0x741831f6L, 0xce5c3e16L,
+                                0x9b87931eL,
+                                0xafd6ba33L, 0x6c24cf5cL, 0x7a325381L,
+                                0x28958677L,
+                                0x3b8f4898L, 0x6b4bb9afL, 0xc4bfe81bL,
+                                0x66282193L,
+                                0x61d809ccL, 0xfb21a991L, 0x487cac60L,
+                                0x5dec8032L,
+                                0xef845d5dL, 0xe98575b1L, 0xdc262302L,
+                                0xeb651b88L,
+                                0x23893e81L, 0xd396acc5L, 0x0f6d6ff3L,
+                                0x83f44239L,
+                                0x2e0b4482L, 0xa4842004L, 0x69c8f04aL,
+                                0x9e1f9b5eL,
+                                0x21c66842L, 0xf6e96c9aL, 0x670c9c61L,
+                                0xabd388f0L,
+                                0x6a51a0d2L, 0xd8542f68L, 0x960fa728L,
+                                0xab5133a3L,
+                                0x6eef0b6cL, 0x137a3be4L, 0xba3bf050L,
+                                0x7efb2a98L,
+                                0xa1f1651dL, 0x39af0176L, 0x66ca593eL,
+                                0x82430e88L,
+                                0x8cee8619L, 0x456f9fb4L, 0x7d84a5c3L,
+                                0x3b8b5ebeL,
+                                0xe06f75d8L, 0x85c12073L, 0x401a449fL,
+                                0x56c16aa6L,
+                                0x4ed3aa62L, 0x363f7706L, 0x1bfedf72L,
+                                0x429b023dL,
+                                0x37d0d724L, 0xd00a1248L, 0xdb0fead3L,
+                                0x49f1c09bL,
+                                0x075372c9L, 0x80991b7bL, 0x25d479d8L,
+                                0xf6e8def7L,
+                                0xe3fe501aL, 0xb6794c3bL, 0x976ce0bdL,
+                                0x04c006baL,
+                                0xc1a94fb6L, 0x409f60c4L, 0x5e5c9ec2L,
+                                0x196a2463L,
+                                0x68fb6fafL, 0x3e6c53b5L, 0x1339b2ebL,
+                                0x3b52ec6fL,
+                                0x6dfc511fL, 0x9b30952cL, 0xcc814544L,
+                                0xaf5ebd09L,
+                                0xbee3d004L, 0xde334afdL, 0x660f2807L,
+                                0x192e4bb3L,
+                                0xc0cba857L, 0x45c8740fL, 0xd20b5f39L,
+                                0xb9d3fbdbL,
+                                0x5579c0bdL, 0x1a60320aL, 0xd6a100c6L,
+                                0x402c7279L,
+                                0x679f25feL, 0xfb1fa3ccL, 0x8ea5e9f8L,
+                                0xdb3222f8L,
+                                0x3c7516dfL, 0xfd616b15L, 0x2f501ec8L,
+                                0xad0552abL,
+                                0x323db5faL, 0xfd238760L, 0x53317b48L,
+                                0x3e00df82L,
+                                0x9e5c57bbL, 0xca6f8ca0L, 0x1a87562eL,
+                                0xdf1769dbL,
+                                0xd542a8f6L, 0x287effc3L, 0xac6732c6L,
+                                0x8c4f5573L,
+                                0x695b27b0L, 0xbbca58c8L, 0xe1ffa35dL,
+                                0xb8f011a0L,
+                                0x10fa3d98L, 0xfd2183b8L, 0x4afcb56cL,
+                                0x2dd1d35bL,
+                                0x9a53e479L, 0xb6f84565L, 0xd28e49bcL,
+                                0x4bfb9790L,
+                                0xe1ddf2daL, 0xa4cb7e33L, 0x62fb1341L,
+                                0xcee4c6e8L,
+                                0xef20cadaL, 0x36774c01L, 0xd07e9efeL,
+                                0x2bf11fb4L,
+                                0x95dbda4dL, 0xae909198L, 0xeaad8e71L,
+                                0x6b93d5a0L,
+                                0xd08ed1d0L, 0xafc725e0L, 0x8e3c5b2fL,
+                                0x8e7594b7L,
+                                0x8ff6e2fbL, 0xf2122b64L, 0x8888b812L,
+                                0x900df01cL,
+                                0x4fad5ea0L, 0x688fc31cL, 0xd1cff191L,
+                                0xb3a8c1adL,
+                                0x2f2f2218L, 0xbe0e1777L, 0xea752dfeL,
+                                0x8b021fa1L,
+                                0xe5a0cc0fL, 0xb56f74e8L, 0x18acf3d6L,
+                                0xce89e299L,
+                                0xb4a84fe0L, 0xfd13e0b7L, 0x7cc43b81L,
+                                0xd2ada8d9L,
+                                0x165fa266L, 0x80957705L, 0x93cc7314L,
+                                0x211a1477L,
+                                0xe6ad2065L, 0x77b5fa86L, 0xc75442f5L,
+                                0xfb9d35cfL,
+                                0xebcdaf0cL, 0x7b3e89a0L, 0xd6411bd3L,
+                                0xae1e7e49L,
+                                0x00250e2dL, 0x2071b35eL, 0x226800bbL,
+                                0x57b8e0afL,
+                                0x2464369bL, 0xf009b91eL, 0x5563911dL,
+                                0x59dfa6aaL,
+                                0x78c14389L, 0xd95a537fL, 0x207d5ba2L,
+                                0x02e5b9c5L,
+                                0x83260376L, 0x6295cfa9L, 0x11c81968L,
+                                0x4e734a41L,
+                                0xb3472dcaL, 0x7b14a94aL, 0x1b510052L,
+                                0x9a532915L,
+                                0xd60f573fL, 0xbc9bc6e4L, 0x2b60a476L,
+                                0x81e67400L,
+                                0x08ba6fb5L, 0x571be91fL, 0xf296ec6bL,
+                                0x2a0dd915L,
+                                0xb6636521L, 0xe7b9f9b6L, 0xff34052eL,
+                                0xc5855664L,
+                                0x53b02d5dL, 0xa99f8fa1L, 0x08ba4799L,
+                                0x6e85076aL,
+                                0x4b7a70e9L, 0xb5b32944L, 0xdb75092eL,
+                                0xc4192623L,
+                                0xad6ea6b0L, 0x49a7df7dL, 0x9cee60b8L,
+                                0x8fedb266L,
+                                0xecaa8c71L, 0x699a17ffL, 0x5664526cL,
+                                0xc2b19ee1L,
+                                0x193602a5L, 0x75094c29L, 0xa0591340L,
+                                0xe4183a3eL,
+                                0x3f54989aL, 0x5b429d65L, 0x6b8fe4d6L,
+                                0x99f73fd6L,
+                                0xa1d29c07L, 0xefe830f5L, 0x4d2d38e6L,
+                                0xf0255dc1L,
+                                0x4cdd2086L, 0x8470eb26L, 0x6382e9c6L,
+                                0x021ecc5eL,
+                                0x09686b3fL, 0x3ebaefc9L, 0x3c971814L,
+                                0x6b6a70a1L,
+                                0x687f3584L, 0x52a0e286L, 0xb79c5305L,
+                                0xaa500737L,
+                                0x3e07841cL, 0x7fdeae5cL, 0x8e7d44ecL,
+                                0x5716f2b8L,
+                                0xb03ada37L, 0xf0500c0dL, 0xf01c1f04L,
+                                0x0200b3ffL,
+                                0xae0cf51aL, 0x3cb574b2L, 0x25837a58L,
+                                0xdc0921bdL,
+                                0xd19113f9L, 0x7ca92ff6L, 0x94324773L,
+                                0x22f54701L,
+                                0x3ae5e581L, 0x37c2dadcL, 0xc8b57634L,
+                                0x9af3dda7L,
+                                0xa9446146L, 0x0fd0030eL, 0xecc8c73eL,
+                                0xa4751e41L,
+                                0xe238cd99L, 0x3bea0e2fL, 0x3280bba1L,
+                                0x183eb331L,
+                                0x4e548b38L, 0x4f6db908L, 0x6f420d03L,
+                                0xf60a04bfL,
+                                0x2cb81290L, 0x24977c79L, 0x5679b072L,
+                                0xbcaf89afL,
+                                0xde9a771fL, 0xd9930810L, 0xb38bae12L,
+                                0xdccf3f2eL,
+                                0x5512721fL, 0x2e6b7124L, 0x501adde6L,
+                                0x9f84cd87L,
+                                0x7a584718L, 0x7408da17L, 0xbc9f9abcL,
+                                0xe94b7d8cL,
+                                0xec7aec3aL, 0xdb851dfaL, 0x63094366L,
+                                0xc464c3d2L,
+                                0xef1c1847L, 0x3215d908L, 0xdd433b37L,
+                                0x24c2ba16L,
+                                0x12a14d43L, 0x2a65c451L, 0x50940002L,
+                                0x133ae4ddL,
+                                0x71dff89eL, 0x10314e55L, 0x81ac77d6L,
+                                0x5f11199bL,
+                                0x043556f1L, 0xd7a3c76bL, 0x3c11183bL,
+                                0x5924a509L,
+                                0xf28fe6edL, 0x97f1fbfaL, 0x9ebabf2cL,
+                                0x1e153c6eL,
+                                0x86e34570L, 0xeae96fb1L, 0x860e5e0aL,
+                                0x5a3e2ab3L,
+                                0x771fe71cL, 0x4e3d06faL, 0x2965dcb9L,
+                                0x99e71d0fL,
+                                0x803e89d6L, 0x5266c825L, 0x2e4cc978L,
+                                0x9c10b36aL,
+                                0xc6150ebaL, 0x94e2ea78L, 0xa5fc3c53L,
+                                0x1e0a2df4L,
+                                0xf2f74ea7L, 0x361d2b3dL, 0x1939260fL,
+                                0x19c27960L,
+                                0x5223a708L, 0xf71312b6L, 0xebadfe6eL,
+                                0xeac31f66L,
+                                0xe3bc4595L, 0xa67bc883L, 0xb17f37d1L,
+                                0x018cff28L,
+                                0xc332ddefL, 0xbe6c5aa5L, 0x65582185L,
+                                0x68ab9802L,
+                                0xeecea50fL, 0xdb2f953bL, 0x2aef7dadL,
+                                0x5b6e2f84L,
+                                0x1521b628L, 0x29076170L, 0xecdd4775L,
+                                0x619f1510L,
+                                0x13cca830L, 0xeb61bd96L, 0x0334fe1eL,
+                                0xaa0363cfL,
+                                0xb5735c90L, 0x4c70a239L, 0xd59e9e0bL,
+                                0xcbaade14L,
+                                0xeecc86bcL, 0x60622ca7L, 0x9cab5cabL,
+                                0xb2f3846eL,
+                                0x648b1eafL, 0x19bdf0caL, 0xa02369b9L,
+                                0x655abb50L,
+                                0x40685a32L, 0x3c2ab4b3L, 0x319ee9d5L,
+                                0xc021b8f7L,
+                                0x9b540b19L, 0x875fa099L, 0x95f7997eL,
+                                0x623d7da8L,
+                                0xf837889aL, 0x97e32d77L, 0x11ed935fL,
+                                0x16681281L,
+                                0x0e358829L, 0xc7e61fd6L, 0x96dedfa1L,
+                                0x7858ba99L,
+                                0x57f584a5L, 0x1b227263L, 0x9b83c3ffL,
+                                0x1ac24696L,
+                                0xcdb30aebL, 0x532e3054L, 0x8fd948e4L,
+                                0x6dbc3128L,
+                                0x58ebf2efL, 0x34c6ffeaL, 0xfe28ed61L,
+                                0xee7c3c73L,
+                                0x5d4a14d9L, 0xe864b7e3L, 0x42105d14L,
+                                0x203e13e0L,
+                                0x45eee2b6L, 0xa3aaabeaL, 0xdb6c4f15L,
+                                0xfacb4fd0L,
+                                0xc742f442L, 0xef6abbb5L, 0x654f3b1dL,
+                                0x41cd2105L,
+                                0xd81e799eL, 0x86854dc7L, 0xe44b476aL,
+                                0x3d816250L,
+                                0xcf62a1f2L, 0x5b8d2646L, 0xfc8883a0L,
+                                0xc1c7b6a3L,
+                                0x7f1524c3L, 0x69cb7492L, 0x47848a0bL,
+                                0x5692b285L,
+                                0x095bbf00L, 0xad19489dL, 0x1462b174L,
+                                0x23820e00L,
+                                0x58428d2aL, 0x0c55f5eaL, 0x1dadf43eL,
+                                0x233f7061L,
+                                0x3372f092L, 0x8d937e41L, 0xd65fecf1L,
+                                0x6c223bdbL,
+                                0x7cde3759L, 0xcbee7460L, 0x4085f2a7L,
+                                0xce77326eL,
+                                0xa6078084L, 0x19f8509eL, 0xe8efd855L,
+                                0x61d99735L,
+                                0xa969a7aaL, 0xc50c06c2L, 0x5a04abfcL,
+                                0x800bcadcL,
+                                0x9e447a2eL, 0xc3453484L, 0xfdd56705L,
+                                0x0e1e9ec9L,
+                                0xdb73dbd3L, 0x105588cdL, 0x675fda79L,
+                                0xe3674340L,
+                                0xc5c43465L, 0x713e38d8L, 0x3d28f89eL,
+                                0xf16dff20L,
+                                0x153e21e7L, 0x8fb03d4aL, 0xe6e39f2bL,
+                                0xdb83adf7L,
+                                0xe93d5a68L, 0x948140f7L, 0xf64c261cL,
+                                0x94692934L,
+                                0x411520f7L, 0x7602d4f7L, 0xbcf46b2eL,
+                                0xd4a20068L,
+                                0xd4082471L, 0x3320f46aL, 0x43b7d4b7L,
+                                0x500061afL,
+                                0x1e39f62eL, 0x97244546L, 0x14214f74L,
+                                0xbf8b8840L,
+                                0x4d95fc1dL, 0x96b591afL, 0x70f4ddd3L,
+                                0x66a02f45L,
+                                0xbfbc09ecL, 0x03bd9785L, 0x7fac6dd0L,
+                                0x31cb8504L,
+                                0x96eb27b3L, 0x55fd3941L, 0xda2547e6L,
+                                0xabca0a9aL,
+                                0x28507825L, 0x530429f4L, 0x0a2c86daL,
+                                0xe9b66dfbL,
+                                0x68dc1462L, 0xd7486900L, 0x680ec0a4L,
+                                0x27a18deeL,
+                                0x4f3ffea2L, 0xe887ad8cL, 0xb58ce006L,
+                                0x7af4d6b6L,
+                                0xaace1e7cL, 0xd3375fecL, 0xce78a399L,
+                                0x406b2a42L,
+                                0x20fe9e35L, 0xd9f385b9L, 0xee39d7abL,
+                                0x3b124e8bL,
+                                0x1dc9faf7L, 0x4b6d1856L, 0x26a36631L,
+                                0xeae397b2L,
+                                0x3a6efa74L, 0xdd5b4332L, 0x6841e7f7L,
+                                0xca7820fbL,
+                                0xfb0af54eL, 0xd8feb397L, 0x454056acL,
+                                0xba489527L,
+                                0x55533a3aL, 0x20838d87L, 0xfe6ba9b7L,
+                                0xd096954bL,
+                                0x55a867bcL, 0xa1159a58L, 0xcca92963L,
+                                0x99e1db33L,
+                                0xa62a4a56L, 0x3f3125f9L, 0x5ef47e1cL,
+                                0x9029317cL,
+                                0xfdf8e802L, 0x04272f70L, 0x80bb155cL,
+                                0x05282ce3L,
+                                0x95c11548L, 0xe4c66d22L, 0x48c1133fL,
+                                0xc70f86dcL,
+                                0x07f9c9eeL, 0x41041f0fL, 0x404779a4L,
+                                0x5d886e17L,
+                                0x325f51ebL, 0xd59bc0d1L, 0xf2bcc18fL,
+                                0x41113564L,
+                                0x257b7834L, 0x602a9c60L, 0xdff8e8a3L,
+                                0x1f636c1bL,
+                                0x0e12b4c2L, 0x02e1329eL, 0xaf664fd1L,
+                                0xcad18115L,
+                                0x6b2395e0L, 0x333e92e1L, 0x3b240b62L,
+                                0xeebeb922L,
+                                0x85b2a20eL, 0xe6ba0d99L, 0xde720c8cL,
+                                0x2da2f728L,
+                                0xd0127845L, 0x95b794fdL, 0x647d0862L,
+                                0xe7ccf5f0L,
+                                0x5449a36fL, 0x877d48faL, 0xc39dfd27L,
+                                0xf33e8d1eL,
+                                0x0a476341L, 0x992eff74L, 0x3a6f6eabL,
+                                0xf4f8fd37L,
+                                0xa812dc60L, 0xa1ebddf8L, 0x991be14cL,
+                                0xdb6e6b0dL,
+                                0xc67b5510L, 0x6d672c37L, 0x2765d43bL,
+                                0xdcd0e804L,
+                                0xf1290dc7L, 0xcc00ffa3L, 0xb5390f92L,
+                                0x690fed0bL,
+                                0x667b9ffbL, 0xcedb7d9cL, 0xa091cf0bL,
+                                0xd9155ea3L,
+                                0xbb132f88L, 0x515bad24L, 0x7b9479bfL,
+                                0x763bd6ebL,
+                                0x37392eb3L, 0xcc115979L, 0x8026e297L,
+                                0xf42e312dL,
+                                0x6842ada7L, 0xc66a2b3bL, 0x12754cccL,
+                                0x782ef11cL,
+                                0x6a124237L, 0xb79251e7L, 0x06a1bbe6L,
+                                0x4bfb6350L,
+                                0x1a6b1018L, 0x11caedfaL, 0x3d25bdd8L,
+                                0xe2e1c3c9L,
+                                0x44421659L, 0x0a121386L, 0xd90cec6eL,
+                                0xd5abea2aL,
+                                0x64af674eL, 0xda86a85fL, 0xbebfe988L,
+                                0x64e4c3feL,
+                                0x9dbc8057L, 0xf0f7c086L, 0x60787bf8L,
+                                0x6003604dL,
+                                0xd1fd8346L, 0xf6381fb0L, 0x7745ae04L,
+                                0xd736fcccL,
+                                0x83426b33L, 0xf01eab71L, 0xb0804187L,
+                                0x3c005e5fL,
+                                0x77a057beL, 0xbde8ae24L, 0x55464299L,
+                                0xbf582e61L,
+                                0x4e58f48fL, 0xf2ddfda2L, 0xf474ef38L,
+                                0x8789bdc2L,
+                                0x5366f9c3L, 0xc8b38e74L, 0xb475f255L,
+                                0x46fcd9b9L,
+                                0x7aeb2661L, 0x8b1ddf84L, 0x846a0e79L,
+                                0x915f95e2L,
+                                0x466e598eL, 0x20b45770L, 0x8cd55591L,
+                                0xc902de4cL,
+                                0xb90bace1L, 0xbb8205d0L, 0x11a86248L,
+                                0x7574a99eL,
+                                0xb77f19b6L, 0xe0a9dc09L, 0x662d09a1L,
+                                0xc4324633L,
+                                0xe85a1f02L, 0x09f0be8cL, 0x4a99a025L,
+                                0x1d6efe10L,
+                                0x1ab93d1dL, 0x0ba5a4dfL, 0xa186f20fL,
+                                0x2868f169L,
+                                0xdcb7da83L, 0x573906feL, 0xa1e2ce9bL,
+                                0x4fcd7f52L,
+                                0x50115e01L, 0xa70683faL, 0xa002b5c4L,
+                                0x0de6d027L,
+                                0x9af88c27L, 0x773f8641L, 0xc3604c06L,
+                                0x61a806b5L,
+                                0xf0177a28L, 0xc0f586e0L, 0x006058aaL,
+                                0x30dc7d62L,
+                                0x11e69ed7L, 0x2338ea63L, 0x53c2dd94L,
+                                0xc2c21634L,
+                                0xbbcbee56L, 0x90bcb6deL, 0xebfc7da1L,
+                                0xce591d76L,
+                                0x6f05e409L, 0x4b7c0188L, 0x39720a3dL,
+                                0x7c927c24L,
+                                0x86e3725fL, 0x724d9db9L, 0x1ac15bb4L,
+                                0xd39eb8fcL,
+                                0xed545578L, 0x08fca5b5L, 0xd83d7cd3L,
+                                0x4dad0fc4L,
+                                0x1e50ef5eL, 0xb161e6f8L, 0xa28514d9L,
+                                0x6c51133cL,
+                                0x6fd5c7e7L, 0x56e14ec4L, 0x362abfceL,
+                                0xddc6c837L,
+                                0xd79a3234L, 0x92638212L, 0x670efa8eL,
+                                0x406000e0L,
+                                0x3a39ce37L, 0xd3faf5cfL, 0xabc27737L,
+                                0x5ac52d1bL,
+                                0x5cb0679eL, 0x4fa33742L, 0xd3822740L,
+                                0x99bc9bbeL,
+                                0xd5118e9dL, 0xbf0f7315L, 0xd62d1c7eL,
+                                0xc700c47bL,
+                                0xb78c1b6bL, 0x21a19045L, 0xb26eb1beL,
+                                0x6a366eb4L,
+                                0x5748ab2fL, 0xbc946e79L, 0xc6a376d2L,
+                                0x6549c2c8L,
+                                0x530ff8eeL, 0x468dde7dL, 0xd5730a1dL,
+                                0x4cd04dc6L,
+                                0x2939bbdbL, 0xa9ba4650L, 0xac9526e8L,
+                                0xbe5ee304L,
+                                0xa1fad5f0L, 0x6a2d519aL, 0x63ef8ce2L,
+                                0x9a86ee22L,
+                                0xc089c2b8L, 0x43242ef6L, 0xa51e03aaL,
+                                0x9cf2d0a4L,
+                                0x83c061baL, 0x9be96a4dL, 0x8fe51550L,
+                                0xba645bd6L,
+                                0x2826a2f9L, 0xa73a3ae1L, 0x4ba99586L,
+                                0xef5562e9L,
+                                0xc72fefd3L, 0xf752f7daL, 0x3f046f69L,
+                                0x77fa0a59L,
+                                0x80e4a915L, 0x87b08601L, 0x9b09e6adL,
+                                0x3b3ee593L,
+                                0xe990fd5aL, 0x9e34d797L, 0x2cf0b7d9L,
+                                0x022b8b51L,
+                                0x96d5ac3aL, 0x017da67dL, 0xd1cf3ed6L,
+                                0x7c7d2d28L,
+                                0x1f9f25cfL, 0xadf2b89bL, 0x5ad6b472L,
+                                0x5a88f54cL,
+                                0xe029ac71L, 0xe019a5e6L, 0x47b0acfdL,
+                                0xed93fa9bL,
+                                0xe8d3c48dL, 0x283b57ccL, 0xf8d56629L,
+                                0x79132e28L,
+                                0x785f0191L, 0xed756055L, 0xf7960e44L,
+                                0xe3d35e8cL,
+                                0x15056dd4L, 0x88f46dbaL, 0x03a16125L,
+                                0x0564f0bdL,
+                                0xc3eb9e15L, 0x3c9057a2L, 0x97271aecL,
+                                0xa93a072aL,
+                                0x1b3f6d9bL, 0x1e6321f5L, 0xf59c66fbL,
+                                0x26dcf319L,
+                                0x7533d928L, 0xb155fdf5L, 0x03563482L,
+                                0x8aba3cbbL,
+                                0x28517711L, 0xc20ad9f8L, 0xabcc5167L,
+                                0xccad925fL,
+                                0x4de81751L, 0x3830dc8eL, 0x379d5862L,
+                                0x9320f991L,
+                                0xea7a90c2L, 0xfb3e7bceL, 0x5121ce64L,
+                                0x774fbe32L,
+                                0xa8b6e37eL, 0xc3293d46L, 0x48de5369L,
+                                0x6413e680L,
+                                0xa2ae0810L, 0xdd6db224L, 0x69852dfdL,
+                                0x09072166L,
+                                0xb39a460aL, 0x6445c0ddL, 0x586cdecfL,
+                                0x1c20c8aeL,
+                                0x5bbef7ddL, 0x1b588d40L, 0xccd2017fL,
+                                0x6bb4e3bbL,
+                                0xdda26a7eL, 0x3a59ff45L, 0x3e350a44L,
+                                0xbcb4cdd5L,
+                                0x72eacea8L, 0xfa6484bbL, 0x8d6612aeL,
+                                0xbf3c6f47L,
+                                0xd29be463L, 0x542f5d9eL, 0xaec2771bL,
+                                0xf64e6370L,
+                                0x740e0d8dL, 0xe75b1357L, 0xf8721671L,
+                                0xaf537d5dL,
+                                0x4040cb08L, 0x4eb4e2ccL, 0x34d2466aL,
+                                0x0115af84L,
+                                0xe1b00428L, 0x95983a1dL, 0x06b89fb4L,
+                                0xce6ea048L,
+                                0x6f3f3b82L, 0x3520ab82L, 0x011a1d4bL,
+                                0x277227f8L,
+                                0x611560b1L, 0xe7933fdcL, 0xbb3a792bL,
+                                0x344525bdL,
+                                0xa08839e1L, 0x51ce794bL, 0x2f32c9b7L,
+                                0xa01fbac9L,
+                                0xe01cc87eL, 0xbcc7d1f6L, 0xcf0111c3L,
+                                0xa1e8aac7L,
+                                0x1a908749L, 0xd44fbd9aL, 0xd0dadecbL,
+                                0xd50ada38L,
+                                0x0339c32aL, 0xc6913667L, 0x8df9317cL,
+                                0xe0b12b4fL,
+                                0xf79e59b7L, 0x43f5bb3aL, 0xf2d519ffL,
+                                0x27d9459cL,
+                                0xbf97222cL, 0x15e6fc2aL, 0x0f91fc71L,
+                                0x9b941525L,
+                                0xfae59361L, 0xceb69cebL, 0xc2a86459L,
+                                0x12baa8d1L,
+                                0xb6c1075eL, 0xe3056a0cL, 0x10d25065L,
+                                0xcb03a442L,
+                                0xe0ec6e0eL, 0x1698db3bL, 0x4c98a0beL,
+                                0x3278e964L,
+                                0x9f1f9532L, 0xe0d392dfL, 0xd3a0342bL,
+                                0x8971f21eL,
+                                0x1b0a7441L, 0x4ba3348cL, 0xc5be7120L,
+                                0xc37632d8L,
+                                0xdf359f8dL, 0x9b992f2eL, 0xe60b6f47L,
+                                0x0fe3f11dL,
+                                0xe54cda54L, 0x1edad891L, 0xce6279cfL,
+                                0xcd3e7e6fL,
+                                0x1618b166L, 0xfd2c1d05L, 0x848fd2c5L,
+                                0xf6fb2299L,
+                                0xf523f357L, 0xa6327623L, 0x93a83531L,
+                                0x56cccd02L,
+                                0xacf08162L, 0x5a75ebb5L, 0x6e163697L,
+                                0x88d273ccL,
+                                0xde966292L, 0x81b949d0L, 0x4c50901bL,
+                                0x71c65614L,
+                                0xe6c6c7bdL, 0x327a140aL, 0x45e1d006L,
+                                0xc3f27b9aL,
+                                0xc9aa53fdL, 0x62a80f00L, 0xbb25bfe2L,
+                                0x35bdd2f6L,
+                                0x71126905L, 0xb2040222L, 0xb6cbcf7cL,
+                                0xcd769c2bL,
+                                0x53113ec0L, 0x1640e3d3L, 0x38abbd60L,
+                                0x2547adf0L,
+                                0xba38209cL, 0xf746ce76L, 0x77afa1c5L,
+                                0x20756060L,
+                                0x85cbfe4eL, 0x8ae88dd8L, 0x7aaaf9b0L,
+                                0x4cf9aa7eL,
+                                0x1948c25cL, 0x02fb8a8cL, 0x01c36ae4L,
+                                0xd6ebe1f9L,
+                                0x90d4f869L, 0xa65cdea0L, 0x3f09252dL,
+                                0xc208e69fL,
+                                0xb74e6132L, 0xce77e25bL, 0x578fdfe3L,
+                                0x3ac372e6L,
+                                }
+};
diff --git a/dap-sdk/crypto/src/blowfish/bf_skey.c b/dap-sdk/crypto/src/blowfish/bf_skey.c
new file mode 100644
index 0000000000000000000000000000000000000000..cdf7f1e21b2a14a839c32292cc7383c1bb209352
--- /dev/null
+++ b/dap-sdk/crypto/src/blowfish/bf_skey.c
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <string.h>
+#include "blowfish.h"
+#include "bf_local.h"
+#include "bf_pi.h"
+
+void BF_set_key(BF_KEY *key, int len, const unsigned char *data)
+{
+    int i;
+    BF_LONG *p, ri, in[2];
+    const unsigned char *d, *end;
+
+    memcpy(key, &bf_init, sizeof(BF_KEY));
+    p = key->P;
+
+    if (len > ((BF_ROUNDS + 2) * 4))
+        len = (BF_ROUNDS + 2) * 4;
+
+    d = data;
+    end = &(data[len]);
+    for (i = 0; i < (BF_ROUNDS + 2); i++) {
+        ri = *(d++);
+        if (d >= end)
+            d = data;
+
+        ri <<= 8;
+        ri |= *(d++);
+        if (d >= end)
+            d = data;
+
+        ri <<= 8;
+        ri |= *(d++);
+        if (d >= end)
+            d = data;
+
+        ri <<= 8;
+        ri |= *(d++);
+        if (d >= end)
+            d = data;
+
+        p[i] ^= ri;
+    }
+
+    in[0] = 0L;
+    in[1] = 0L;
+    for (i = 0; i < (BF_ROUNDS + 2); i += 2) {
+        BF_encrypt(in, key);
+        p[i] = in[0];
+        p[i + 1] = in[1];
+    }
+
+    p = key->S;
+    for (i = 0; i < 4 * 256; i += 2) {
+        BF_encrypt(in, key);
+        p[i] = in[0];
+        p[i + 1] = in[1];
+    }
+}
diff --git a/dap-sdk/crypto/src/blowfish/blowfish.h b/dap-sdk/crypto/src/blowfish/blowfish.h
index 8326a5a844017cf86b3d703d884eca477252fe13..bc54e1b7015311e0ddab5464c355a4f96cc20a4c 100644
--- a/dap-sdk/crypto/src/blowfish/blowfish.h
+++ b/dap-sdk/crypto/src/blowfish/blowfish.h
@@ -1,10 +1,9 @@
 //max using key size = (BF_ROUNDS + 2)*4 bytes = 72 bytes
 #ifndef BLOWFISH_H
-#define BLOWFISH_H
+# define BLOWFISH_H
 
 #include "inttypes.h"
 
-# define BF_BLOCK        8
 
 
 #  define BF_ENCRYPT      1
@@ -24,10 +23,11 @@ typedef struct bf_key_st {
     BF_LONG S[4 * 256];
 } BF_KEY;
 
-
 # ifdef  __cplusplus
 extern "C" {
 # endif
+# define BF_BLOCK        8
+
 void BF_set_key(BF_KEY *key, int len,
                                  const unsigned char *data);
 
@@ -54,5 +54,5 @@ const char *BF_options(void);
 # ifdef  __cplusplus
 }
 # endif
+# endif
 
-#endif
diff --git a/dap-sdk/crypto/src/blowfish/blowfish.pri b/dap-sdk/crypto/src/blowfish/blowfish.pri
index 7c0dc12ee175ad1244da751df2db5242fe8fc851..fc7a886f3c5dc71b90c320d6d1c6c415e55d8771 100644
--- a/dap-sdk/crypto/src/blowfish/blowfish.pri
+++ b/dap-sdk/crypto/src/blowfish/blowfish.pri
@@ -1,6 +1,11 @@
 INCLUDEPATH += $$PWD
 
 HEADERS += $$PWD/blowfish.h \
-           $$PWD/bf_local.h
+           $$PWD/bf_local.h \
+           $$PWD/bf_pi.h
 
-SOURCES += $$PWD/blowfish.c
+SOURCES += $$PWD/bf_cfb64.c \
+           $$PWD/bf_ecb.c \
+           $$PWD/bf_enc.c \
+           $$PWD/bf_ofb64.c \
+           $$PWD/bf_skey.c
diff --git a/dap-sdk/crypto/src/dap_enc_GOST.c b/dap-sdk/crypto/src/dap_enc_GOST.c
index 22c7fb98b2925802db533cfa7615179ce3fa96c8..dad7601c4062bb847ecf346801499f4a330a035a 100644
--- a/dap-sdk/crypto/src/dap_enc_GOST.c
+++ b/dap-sdk/crypto/src/dap_enc_GOST.c
@@ -22,10 +22,10 @@ void dap_enc_gost_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
 
 
     a_key->priv_key_data_size = 32;
-    a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, key_size);
+    a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, a_key->priv_key_data_size);
 
     Keccak_HashInstance Keccak_ctx;
-    Keccak_HashInitialize(&Keccak_ctx, 1088,  512, 32*8, 0x06);
+    Keccak_HashInitialize(&Keccak_ctx, 1088,  512, a_key->priv_key_data_size*8, 0x06);
     Keccak_HashUpdate(&Keccak_ctx, kex_buf, kex_size*8);
     if(seed_size)
         Keccak_HashUpdate(&Keccak_ctx, seed, seed_size*8);
@@ -37,9 +37,9 @@ void dap_enc_gost_key_delete(struct dap_enc_key *a_key)
     if(a_key->priv_key_data != NULL)
     {
         randombytes(a_key->priv_key_data,a_key->priv_key_data_size);
-        DAP_DELETE(a_key->priv_key_data);
+        //DAP_DELETE(a_key->priv_key_data);
     }
-    a_key->priv_key_data_size = 0;
+    //a_key->priv_key_data_size = 0;
 }
 //------GOST_OFB-----------
 void dap_enc_gost_ofb_key_new(struct dap_enc_key * a_key)
@@ -56,16 +56,16 @@ void dap_enc_gost_ofb_key_new(struct dap_enc_key * a_key)
 
 size_t dap_enc_gost_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out)
 {
-    size_t a_out_size = a_in_size - kBlockLen89;
-    if(a_out_size <= 0) {
+    size_t l_out_size = a_in_size - kBlockLen89;
+    if(l_out_size <= 0) {
         log_it(L_ERROR, "gost_ofb decryption ct with iv must be more than kBlockLen89 bytes");
         return 0;
     }
     *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - kBlockLen89);
-    a_out_size = dap_enc_gost_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size);
-    if(a_out_size == 0)
+    l_out_size = dap_enc_gost_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size);
+    if(l_out_size == 0)
         DAP_DEL_Z(*a_out);
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_gost_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out)
@@ -74,12 +74,12 @@ size_t dap_enc_gost_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, s
         log_it(L_ERROR, "gost ofb encryption pt cannot be 0 bytes");
         return 0;
     }
-    size_t a_out_size = a_in_size + kBlockLen89;
-    *a_out = DAP_NEW_SIZE(uint8_t, a_out_size);
-    a_out_size = dap_enc_gost_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size);
-    if(a_out_size == 0)
+    size_t l_out_size = a_in_size + kBlockLen89;
+    *a_out = DAP_NEW_SIZE(uint8_t, l_out_size);
+    l_out_size = dap_enc_gost_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size);
+    if(l_out_size == 0)
         DAP_DEL_Z(*a_out);
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_gost_ofb_calc_encode_size(const size_t size_in)
@@ -98,8 +98,8 @@ size_t dap_enc_gost_ofb_calc_decode_size(const size_t size_in)
 
 size_t dap_enc_gost_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in,
         size_t a_in_size, void * a_out, size_t buf_out_size) {
-    size_t a_out_size = a_in_size - kBlockLen89;
-    if(a_out_size > buf_out_size) {
+    size_t l_out_size = a_in_size - kBlockLen89;
+    if(l_out_size > buf_out_size) {
         log_it(L_ERROR, "gost_ofb fast_decryption too small buf_out_size");
         return 0;
     }
@@ -117,14 +117,14 @@ size_t dap_enc_gost_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_i
          return 0;
     }
     free_ofb(ctx);
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_gost_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size)
 {
     //generate iv and put it in *a_out first bytes
-    size_t a_out_size = a_in_size + kBlockLen89;
-    if(a_out_size > buf_out_size) {
+    size_t l_out_size = a_in_size + kBlockLen89;
+    if(l_out_size > buf_out_size) {
         log_it(L_ERROR, "gost_ofb fast_encryption too small buf_out_size");
         return 0;
     }
@@ -147,7 +147,7 @@ size_t dap_enc_gost_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_
         return 0;
     }
     free_ofb(ctx);
-    return a_out_size;
+    return l_out_size;
  }
 
 //------KUZN_OFB-----------
@@ -181,12 +181,12 @@ size_t dap_enc_kuzn_ofb_calc_decode_size(const size_t size_in)
 size_t dap_enc_kuzn_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size)
 {
     //generate iv and put it in *a_out first bytes
-    size_t a_out_size = a_in_size + kBlockLen14;
+    size_t l_out_size = a_in_size + kBlockLen14;
     if(a_in_size <= 0) {
         log_it(L_ERROR, "kuzn_ofb fast_encryption too small a_in_size");
         return 0;
     }
-    if(a_out_size > buf_out_size) {
+    if(l_out_size > buf_out_size) {
         log_it(L_ERROR, "kuzn_ofb fast_encryption too small buf_out_size");
         return 0;
     }
@@ -208,19 +208,19 @@ size_t dap_enc_kuzn_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_
          return -1;
 
     free_ofb(ctx);
-    return a_out_size;
+    return l_out_size;
  }
 
 size_t dap_enc_kuzn_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in,
         size_t a_in_size, void * a_out, size_t buf_out_size)
 {
-    size_t a_out_size = a_in_size - kBlockLen14;
-    if(a_out_size <= 0) {
+    size_t l_out_size = a_in_size - kBlockLen14;
+    if(l_out_size <= 0) {
         log_it(L_ERROR, "kuzn_ofb fast_decryption too small a_in_size");
         return 0;
     }
 
-    if(a_out_size > buf_out_size) {
+    if(l_out_size > buf_out_size) {
         log_it(L_ERROR, "kuzn_ofb fast_decryption too small buf_out_size");
         return 0;
     }
@@ -231,26 +231,26 @@ size_t dap_enc_kuzn_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_i
     if(init_ofb_14(a_key->priv_key_data, ctx, kBlockLen14, a_in, kBlockLen14, NULL, NULL))
          return -1;
 
-    if(decrypt_ofb(ctx, a_in + kBlockLen14, a_out, a_out_size))
+    if(decrypt_ofb(ctx, a_in + kBlockLen14, a_out, l_out_size))
          return -1;
 
     free_ofb(ctx);
-    return a_out_size;
+    return l_out_size;
 }
 size_t dap_enc_kuzn_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in,
         size_t a_in_size, void ** a_out) {
 
-    size_t a_out_size = a_in_size - kBlockLen14;
-    if(a_out_size <= 0) {
+    size_t l_out_size = a_in_size - kBlockLen14;
+    if(l_out_size <= 0) {
         log_it(L_ERROR, "kuzn_ofb decryption too small a_in_size");
         return 0;
     }
 
-    *a_out = DAP_NEW_SIZE(uint8_t, a_out_size);
-    a_out_size = dap_enc_kuzn_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size);
-    if(!a_out_size)
+    *a_out = DAP_NEW_SIZE(uint8_t, l_out_size);
+    l_out_size = dap_enc_kuzn_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size);
+    if(!l_out_size)
         DAP_DEL_Z(*a_out);
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_kuzn_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out)
@@ -260,11 +260,11 @@ size_t dap_enc_kuzn_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, s
         log_it(L_ERROR, "kuzn fast_encryption too small a_in_size");
         return 0;
     }
-    size_t a_out_size = a_in_size + kBlockLen14;
-    *a_out = DAP_NEW_SIZE(uint8_t, a_out_size);
+    size_t l_out_size = a_in_size + kBlockLen14;
+    *a_out = DAP_NEW_SIZE(uint8_t, l_out_size);
 
-    a_out_size = dap_enc_kuzn_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size);
-    if(!a_out_size)
+    l_out_size = dap_enc_kuzn_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size);
+    if(!l_out_size)
         DAP_DEL_Z(*a_out);
-    return a_out_size;
+    return l_out_size;
 }
diff --git a/dap-sdk/crypto/src/dap_enc_SEED.c b/dap-sdk/crypto/src/dap_enc_SEED.c
new file mode 100644
index 0000000000000000000000000000000000000000..65ce0dfedb04d2e069d27f94edf5759168227791
--- /dev/null
+++ b/dap-sdk/crypto/src/dap_enc_SEED.c
@@ -0,0 +1,137 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <string.h>
+
+#include "dap_enc_SEED.h"
+#include "dap_common.h"
+#include "rand/dap_rand.h"
+#include "sha3/KeccakHash.h"
+
+#define LOG_TAG "dap_enc_seed"
+//#  define SEED_BLOCK_SIZE 16
+//#  define SEED_KEY_LENGTH 16
+
+void dap_enc_seed_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
+        size_t kex_size, const void * seed, size_t seed_size, size_t key_size)
+{
+    if(key_size < SEED_KEY_LENGTH)
+    {
+        log_it(L_ERROR, "seed key cannot be less than SEED_KEY_LENGTH bytes.");
+    }
+    a_key->last_used_timestamp = time(NULL);
+
+
+    a_key->priv_key_data_size = SEED_KEY_LENGTH;
+    a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, a_key->priv_key_data_size);
+
+    Keccak_HashInstance Keccak_ctx;
+    Keccak_HashInitialize(&Keccak_ctx, 1088,  512, a_key->priv_key_data_size*8, 0x06);
+    Keccak_HashUpdate(&Keccak_ctx, kex_buf, kex_size*8);
+    if(seed_size)
+        Keccak_HashUpdate(&Keccak_ctx, seed, seed_size*8);
+    Keccak_HashFinal(&Keccak_ctx, a_key->priv_key_data);
+}
+
+void dap_enc_seed_key_delete(struct dap_enc_key *a_key)
+{
+    if(a_key->priv_key_data != NULL)
+    {
+        randombytes(a_key->priv_key_data,a_key->priv_key_data_size);
+        //DAP_DELETE(a_key->priv_key_data);
+    }
+    //a_key->priv_key_data_size = 0;
+}
+//------SEED_OFB-----------
+void dap_enc_seed_ofb_key_new(struct dap_enc_key * a_key)
+{
+    a_key->_inheritor = NULL;
+    a_key->_inheritor_size = 0;
+    a_key->type = DAP_ENC_KEY_TYPE_SEED_OFB;
+    a_key->enc = dap_enc_seed_ofb_encrypt;
+    a_key->dec = dap_enc_seed_ofb_decrypt;
+    a_key->enc_na = dap_enc_seed_ofb_encrypt_fast;
+    a_key->dec_na = dap_enc_seed_ofb_decrypt_fast;
+}
+
+
+size_t dap_enc_seed_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out)
+{
+    size_t l_out_size = a_in_size - SEED_BLOCK_SIZE;
+    if(l_out_size <= 0) {
+        log_it(L_ERROR, "seed_ofb decryption ct with iv must be more than SEED_BLOCK_SIZE bytes");
+        return 0;
+    }
+    *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - SEED_BLOCK_SIZE);
+    l_out_size = dap_enc_seed_ofb_decrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size);
+    if(l_out_size == 0)
+        DAP_DEL_Z(*a_out);
+    return l_out_size;
+}
+
+size_t dap_enc_seed_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out)
+{
+    if(a_in_size <= 0) {
+        log_it(L_ERROR, "seed ofb encryption pt cannot be 0 bytes");
+        return 0;
+    }
+    size_t l_out_size = a_in_size + SEED_BLOCK_SIZE;
+    *a_out = DAP_NEW_SIZE(uint8_t, l_out_size);
+    l_out_size = dap_enc_seed_ofb_encrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size);
+    if(l_out_size == 0)
+        DAP_DEL_Z(*a_out);
+    return l_out_size;
+}
+
+size_t dap_enc_seed_ofb_calc_encode_size(const size_t size_in)
+{
+    return size_in + SEED_BLOCK_SIZE;
+}
+
+size_t dap_enc_seed_ofb_calc_decode_size(const size_t size_in)
+{
+    if(size_in <= SEED_BLOCK_SIZE) {
+        log_it(L_ERROR, "seed_ofb decryption size_in ct with iv must be more than SEED_BLOCK_SIZE bytes");
+        return 0;
+    }
+    return size_in - SEED_BLOCK_SIZE;
+}
+
+size_t dap_enc_seed_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in,
+        size_t a_in_size, void * a_out, size_t buf_out_size) {
+    size_t l_out_size = a_in_size - SEED_BLOCK_SIZE;
+    if(l_out_size > buf_out_size) {
+        log_it(L_ERROR, "seed_ofb fast_decryption too small buf_out_size");
+        return 0;
+    }
+    uint8_t iv[SEED_BLOCK_SIZE];
+    memcpy(iv, a_in, SEED_BLOCK_SIZE);
+    SEED_KEY_SCHEDULE ctx;
+    SEED_set_key(a_key->priv_key_data, &ctx);
+    int num = 0;
+    SEED_ofb128_encrypt(a_in + SEED_BLOCK_SIZE, a_out, a_in_size - SEED_BLOCK_SIZE, &ctx, iv, &num);
+    return l_out_size;
+}
+
+size_t dap_enc_seed_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size)
+{
+    //generate iv and put it in *a_out first bytes
+    size_t l_out_size = a_in_size + SEED_BLOCK_SIZE;
+    if(l_out_size > buf_out_size) {
+        log_it(L_ERROR, "seed_ofb fast_encryption too small buf_out_size");
+        return 0;
+    }
+    uint8_t iv[SEED_BLOCK_SIZE];
+    if(randombytes(iv, SEED_BLOCK_SIZE) == 1)
+    {
+        log_it(L_ERROR, "failed to get SEED_BLOCK_SIZE bytes iv seed ofb");
+        return 0;
+    }
+    memcpy(a_out, iv, SEED_BLOCK_SIZE);
+    SEED_KEY_SCHEDULE ctx;
+    SEED_set_key(a_key->priv_key_data, &ctx);
+    int num = 0;
+    SEED_ofb128_encrypt(a_in, a_out + SEED_BLOCK_SIZE, a_in_size, &ctx, iv, &num);
+    return l_out_size;
+ }
diff --git a/dap-sdk/crypto/src/dap_enc_bf.c b/dap-sdk/crypto/src/dap_enc_bf.c
index f385aac59d58bfe7802f31dfb6e1e02a9ea4a559..025f2b726dda964fe39598e94d8a87acd7758786 100644
--- a/dap-sdk/crypto/src/dap_enc_bf.c
+++ b/dap-sdk/crypto/src/dap_enc_bf.c
@@ -19,7 +19,7 @@ void dap_enc_bf_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
 
 
     a_key->priv_key_data_size = sizeof(BF_KEY);
-    a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, sizeof(BF_KEY));
+    a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, a_key->priv_key_data_size);
 
     uint8_t *tmp_buf = DAP_NEW_SIZE(uint8_t, (BF_ROUNDS + 2)*4);
     Keccak_HashInstance Keccak_ctx;
@@ -37,34 +37,28 @@ void dap_enc_bf_key_delete(struct dap_enc_key *a_key)
     if(a_key->priv_key_data != NULL)
     {
         randombytes(a_key->priv_key_data,a_key->priv_key_data_size);
-        DAP_DELETE(a_key->priv_key_data);
+        //DAP_DELETE(a_key->priv_key_data);
     }
     a_key->priv_key_data_size = 0;
 }
 //------CBC-----------
 size_t dap_enc_bf_cbc_decrypt(struct dap_enc_key *a_key, const void * a_in,
         size_t a_in_size, void ** a_out) {
-    uint8_t iv[8];
+    uint8_t iv[BLOWFISH_BLOCK_SIZE];
     //BF_KEY *key=a_key->priv_key_data;
-    if(a_in_size <= 8 || a_in_size%8) {
-        log_it(L_ERROR, "blowfish_cbc decryption ct with iv must be more than 8 bytes and equal to 8*k");
+    if(a_in_size <= BLOWFISH_BLOCK_SIZE || a_in_size%BLOWFISH_BLOCK_SIZE) {
+        log_it(L_ERROR, "blowfish_cbc decryption ct with iv must be more than BLOWFISH_BLOCK_SIZE bytes and equal to BLOWFISH_BLOCK_SIZE*k");
         return 0;
     }
 
 
-    *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - 8);
-    memcpy(iv, a_in, 8);
-    BF_cbc_encrypt((unsigned char *)(a_in + 8), *a_out, a_in_size - 8,
+    *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - BLOWFISH_BLOCK_SIZE);
+    memcpy(iv, a_in, BLOWFISH_BLOCK_SIZE);
+    BF_cbc_encrypt((unsigned char *)(a_in + BLOWFISH_BLOCK_SIZE), *a_out, a_in_size - BLOWFISH_BLOCK_SIZE,
                    a_key->priv_key_data, iv, BF_DECRYPT);
-    int bf_cbc_padding_length = *(uint8_t*)(*a_out + a_in_size - 8 - 1);
-
-//    for(int i=0;i < bf_cbc_padding_length + 4 + 1; ++i)
-//        printf("%.2x ", *(uint8_t*)(*a_out + a_in_size - 8 - 1 - bf_cbc_padding_length - 4 + i));
-//    for(int i=0;i < a_in_size - 8; ++i)
-//        printf("%.2x ", *(uint8_t*)(*a_out + i));
-//    printf("\n");
-//    fflush(stdout);
-    size_t a_out_size = *(uint32_t*)(*a_out + a_in_size - 8 - 1 - bf_cbc_padding_length - 4);
+    int bf_cbc_padding_length = *(uint8_t*)(*a_out + a_in_size - BLOWFISH_BLOCK_SIZE - 1);
+
+    size_t a_out_size = *(uint32_t*)(*a_out + a_in_size - BLOWFISH_BLOCK_SIZE - 1 - bf_cbc_padding_length - 4);
     return a_out_size;
 }
 
@@ -73,8 +67,8 @@ size_t dap_enc_bf_cbc_decrypt(struct dap_enc_key *a_key, const void * a_in,
 size_t dap_enc_bf_cbc_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out)
 {
     //generate iv and put it in *a_out first bytes
-    uint8_t iv[8];
-    randombytes(iv, 8);
+    uint8_t iv[BLOWFISH_BLOCK_SIZE];
+    randombytes(iv, BLOWFISH_BLOCK_SIZE);
 
     if(a_in_size <= 0) {
         log_it(L_ERROR, "blowfish_cbc encryption pt cannot be 0 bytes");
@@ -84,44 +78,44 @@ size_t dap_enc_bf_cbc_encrypt(struct dap_enc_key * a_key, const void * a_in, siz
 //    BF_KEY *key = a_key->priv_key_data;
 
 
-    size_t a_out_size = (a_in_size + 4 + 1 + 7)/8*8 + 8;
+    size_t a_out_size = (a_in_size + 4 + 1 + BLOWFISH_BLOCK_SIZE - 1)/BLOWFISH_BLOCK_SIZE*BLOWFISH_BLOCK_SIZE + BLOWFISH_BLOCK_SIZE;
     *a_out = DAP_NEW_SIZE(uint8_t, a_out_size);
-    memcpy(*a_out, iv, 8);
-    BF_cbc_encrypt((unsigned char *)(a_in), *a_out + 8, a_in_size,
+    memcpy(*a_out, iv, BLOWFISH_BLOCK_SIZE);
+    BF_cbc_encrypt((unsigned char *)(a_in), *a_out + BLOWFISH_BLOCK_SIZE, a_in_size,
                    a_key->priv_key_data, iv, BF_ENCRYPT);
     return a_out_size;
 }
 
 size_t dap_enc_bf_cbc_calc_encode_size(const size_t size_in)
 {
-    return (size_in + 4 + 1 + 7)/8*8 + 8;
+    return (size_in + 4 + 1 + BLOWFISH_BLOCK_SIZE - 1)/BLOWFISH_BLOCK_SIZE*BLOWFISH_BLOCK_SIZE + BLOWFISH_BLOCK_SIZE;
 }
 
-size_t dap_enc_bf_cbc_calc_decode_size(const size_t size_in)
+size_t dap_enc_bf_cbc_calc_decode_max_size(const size_t size_in)
 {
-    if(size_in <= 8) {
-        log_it(L_ERROR, "blowfish_cbc decryption size_in ct with iv must be more than 8 bytes");
+    if(size_in <= 2*BLOWFISH_BLOCK_SIZE) {
+        log_it(L_ERROR, "blowfish_cbc decryption size_in ct with iv must be more than 2*8 bytes");
         return 0;
     }
-    return size_in - 8;
+    return size_in - BLOWFISH_BLOCK_SIZE;
 }
 
 size_t dap_enc_bf_cbc_decrypt_fast(struct dap_enc_key *a_key, const void * a_in,
         size_t a_in_size, void * a_out, size_t buf_out_size) {
-    if(a_in_size - 8 > buf_out_size || a_in_size %8) {
+    if(a_in_size - BLOWFISH_BLOCK_SIZE > buf_out_size || a_in_size %BLOWFISH_BLOCK_SIZE || a_in_size <= BLOWFISH_BLOCK_SIZE) {
         log_it(L_ERROR, "blowfish_cbc fast_decryption too small buf_out_size or not 8*k");
         return 0;
     }
-    uint8_t iv[8];
+    uint8_t iv[BLOWFISH_BLOCK_SIZE];
     //BF_KEY *key=a_key->priv_key_data;
 
-    memcpy(iv, a_in, 8);
-    BF_cbc_encrypt((unsigned char *)(a_in + 8), a_out, a_in_size - 8,
+    memcpy(iv, a_in, BLOWFISH_BLOCK_SIZE);
+    BF_cbc_encrypt((unsigned char *)(a_in + BLOWFISH_BLOCK_SIZE), a_out, a_in_size - BLOWFISH_BLOCK_SIZE,
                    a_key->priv_key_data, iv, BF_DECRYPT);
 
-    int bf_cbc_padding_length = *(uint8_t*)(a_out + a_in_size - 8 - 1);
+    int bf_cbc_padding_length = *(uint8_t*)(a_out + a_in_size - BLOWFISH_BLOCK_SIZE - 1);
 
-    size_t a_out_size = *(uint32_t*)(a_out + a_in_size - 8 - 1 - bf_cbc_padding_length - 4);
+    size_t a_out_size = *(uint32_t*)(a_out + a_in_size - BLOWFISH_BLOCK_SIZE - 1 - bf_cbc_padding_length - 4);
     return a_out_size;
 }
 
@@ -130,20 +124,20 @@ size_t dap_enc_bf_cbc_decrypt_fast(struct dap_enc_key *a_key, const void * a_in,
 size_t dap_enc_bf_cbc_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size)
 {
     //generate iv and put it in *a_out first bytes
-    size_t a_out_size = (a_in_size + 4 + 1 + 7)/8*8 + 8;
+    size_t a_out_size = (a_in_size + 4 + 1 + BLOWFISH_BLOCK_SIZE-1)/BLOWFISH_BLOCK_SIZE*BLOWFISH_BLOCK_SIZE + BLOWFISH_BLOCK_SIZE;
     if(a_out_size > buf_out_size) {
         log_it(L_ERROR, "blowfish_cbc fast_encryption too small buf_out_size");
         return 0;
     }
 
-    uint8_t iv[8];
-    randombytes(iv, 8);
+    uint8_t iv[BLOWFISH_BLOCK_SIZE];
+    randombytes(iv, BLOWFISH_BLOCK_SIZE);
 
 //    BF_KEY *key = a_key->priv_key_data;
 
 
-    memcpy(a_out, iv, 8);
-    BF_cbc_encrypt((unsigned char *)(a_in), a_out + 8, a_in_size,
+    memcpy(a_out, iv, BLOWFISH_BLOCK_SIZE);
+    BF_cbc_encrypt((unsigned char *)(a_in), a_out + BLOWFISH_BLOCK_SIZE, a_in_size,
                    a_key->priv_key_data, iv, BF_ENCRYPT);
     return a_out_size;
  }
@@ -164,20 +158,20 @@ void dap_enc_bf_cbc_key_new(struct dap_enc_key * a_key)
 
 size_t dap_enc_bf_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in,
         size_t a_in_size, void ** a_out) {
-    uint8_t iv[8];
+    uint8_t iv[BLOWFISH_BLOCK_SIZE];
 
-    if(a_in_size <= 8) {
+    if(a_in_size <= BLOWFISH_BLOCK_SIZE) {
         log_it(L_ERROR, "blowfish_ofb decryption ct with iv must be more than 8 bytes");
         return 0;
     }
 
 
-    *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - 8);
-    memcpy(iv, a_in, 8);
+    *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - BLOWFISH_BLOCK_SIZE);
+    memcpy(iv, a_in, BLOWFISH_BLOCK_SIZE);
     int num = 0;//need for concatenate encryptions or decryptions
-    BF_ofb64_encrypt((unsigned char *)(a_in + 8), *a_out, a_in_size - 8,
+    BF_ofb64_encrypt((unsigned char *)(a_in + BLOWFISH_BLOCK_SIZE), *a_out, a_in_size - BLOWFISH_BLOCK_SIZE,
                    a_key->priv_key_data, iv, &num);
-    size_t a_out_size = a_in_size - 8;
+    size_t a_out_size = a_in_size - BLOWFISH_BLOCK_SIZE;
     return a_out_size;
 }
 
@@ -186,8 +180,8 @@ size_t dap_enc_bf_ofb_decrypt(struct dap_enc_key *a_key, const void * a_in,
 size_t dap_enc_bf_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out)
 {
     //generate iv and put it in *a_out first bytes
-    uint8_t iv[8];
-    randombytes(iv, 8);
+    uint8_t iv[BLOWFISH_BLOCK_SIZE];
+    randombytes(iv, BLOWFISH_BLOCK_SIZE);
 
     if(a_in_size <= 0) {
         log_it(L_ERROR, "blowfish_ofb encryption pt cannot be 0 bytes");
@@ -197,45 +191,45 @@ size_t dap_enc_bf_ofb_encrypt(struct dap_enc_key * a_key, const void * a_in, siz
 
 
 
-    size_t a_out_size = a_in_size + 8;
+    size_t a_out_size = a_in_size + BLOWFISH_BLOCK_SIZE;
     *a_out = DAP_NEW_SIZE(uint8_t, a_out_size);
-    memcpy(*a_out, iv, 8);
+    memcpy(*a_out, iv, BLOWFISH_BLOCK_SIZE);
     int num = 0;//need for concatenate encryptions or decryptions
-    BF_ofb64_encrypt((unsigned char *)(a_in), *a_out + 8, a_in_size,
+    BF_ofb64_encrypt((unsigned char *)(a_in), *a_out + BLOWFISH_BLOCK_SIZE, a_in_size,
                    a_key->priv_key_data, iv, &num);
     return a_out_size;
 }
 
 size_t dap_enc_bf_ofb_calc_encode_size(const size_t size_in)
 {
-    return size_in + 8;
+    return size_in + BLOWFISH_BLOCK_SIZE;
 }
 
 size_t dap_enc_bf_ofb_calc_decode_size(const size_t size_in)
 {
-    if(size_in <= 8) {
+    if(size_in <= BLOWFISH_BLOCK_SIZE) {
         log_it(L_ERROR, "blowfish_ofb decryption size_in ct with iv must be more than 8 bytes");
         return 0;
     }
-    return size_in - 8;
+    return size_in - BLOWFISH_BLOCK_SIZE;
 }
 
 size_t dap_enc_bf_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in,
         size_t a_in_size, void * a_out, size_t buf_out_size) {
-    if(a_in_size - 8 > buf_out_size) {
-        log_it(L_ERROR, "blowfish_ofb fast_decryption too small buf_out_size");
+    if(a_in_size - BLOWFISH_BLOCK_SIZE > buf_out_size || a_in_size <= BLOWFISH_BLOCK_SIZE) {
+        log_it(L_ERROR, "blowfish_ofb fast_decryption too small buf_out_size or a_in_size");
         return 0;
     }
-    uint8_t iv[8];
+    uint8_t iv[BLOWFISH_BLOCK_SIZE];
     //BF_KEY *key=a_key->priv_key_data;
 
-    memcpy(iv, a_in, 8);
+    memcpy(iv, a_in, BLOWFISH_BLOCK_SIZE);
     int num = 0;//need for concatenate encryptions or decryptions
 
-    BF_ofb64_encrypt((unsigned char *)(a_in + 8), a_out, a_in_size - 8,
+    BF_ofb64_encrypt((unsigned char *)(a_in + BLOWFISH_BLOCK_SIZE), a_out, a_in_size - BLOWFISH_BLOCK_SIZE,
                    a_key->priv_key_data, iv, &num);
 
-    size_t a_out_size = a_in_size - 8;
+    size_t a_out_size = a_in_size - BLOWFISH_BLOCK_SIZE;
     return a_out_size;
 }
 
@@ -244,18 +238,18 @@ size_t dap_enc_bf_ofb_decrypt_fast(struct dap_enc_key *a_key, const void * a_in,
 size_t dap_enc_bf_ofb_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size)
 {
     //generate iv and put it in *a_out first bytes
-    size_t a_out_size = a_in_size + 8;
+    size_t a_out_size = a_in_size + BLOWFISH_BLOCK_SIZE;
     if(a_out_size > buf_out_size) {
         log_it(L_ERROR, "blowfish_ofb fast_encryption too small buf_out_size");
         return 0;
     }
 
-    uint8_t iv[8];
-    randombytes(iv, 8);
+    uint8_t iv[BLOWFISH_BLOCK_SIZE];
+    randombytes(iv, BLOWFISH_BLOCK_SIZE);
 
-    memcpy(a_out, iv, 8);
+    memcpy(a_out, iv, BLOWFISH_BLOCK_SIZE);
     int num = 0;//need for concatenate encryptions or decryptions
-    BF_ofb64_encrypt((unsigned char *)(a_in), a_out + 8, a_in_size,
+    BF_ofb64_encrypt((unsigned char *)(a_in), a_out + BLOWFISH_BLOCK_SIZE, a_in_size,
                    a_key->priv_key_data, iv, &num);
     return a_out_size;
  }
diff --git a/dap-sdk/crypto/src/dap_enc_bliss.c b/dap-sdk/crypto/src/dap_enc_bliss.c
index c29eeaf7c3ba3a972fe982fa8277281efc1728c5..ce87eabdc2c342f6a65c622a2f02baa317c020ed 100755
--- a/dap-sdk/crypto/src/dap_enc_bliss.c
+++ b/dap-sdk/crypto/src/dap_enc_bliss.c
@@ -5,7 +5,7 @@
 
 #include "dap_enc_bliss.h"
 #include "dap_common.h"
-#include "dap_rand.h"
+#include "rand/dap_rand.h"
 #include "SimpleFIPS202.h"
 
 #define LOG_TAG "dap_enc_sig_bliss"
diff --git a/dap-sdk/crypto/src/dap_enc_dilithium.c b/dap-sdk/crypto/src/dap_enc_dilithium.c
index 04cddb4a3af340dc78862ea9812dd163572e4a0c..6d59b941887655b5b97393a19d6963add2914304 100755
--- a/dap-sdk/crypto/src/dap_enc_dilithium.c
+++ b/dap-sdk/crypto/src/dap_enc_dilithium.c
@@ -4,7 +4,7 @@
 
 #include "dap_enc_dilithium.h"
 #include "dap_common.h"
-#include "dap_rand.h"
+#include "rand/dap_rand.h"
 
 #define LOG_TAG "dap_enc_sig_dilithium"
 
diff --git a/dap-sdk/crypto/src/dap_enc_key.c b/dap-sdk/crypto/src/dap_enc_key.c
index 4d0812b5e90f571c36f4e7b234b89a62858b2a42..d646d399ac6178852e3f499705c5f338ca3fa931 100755
--- a/dap-sdk/crypto/src/dap_enc_key.c
+++ b/dap-sdk/crypto/src/dap_enc_key.c
@@ -28,6 +28,7 @@
 #include "dap_enc_bf.h"
 #include "dap_enc_GOST.h"
 #include "dap_enc_salsa2012.h"
+#include "dap_enc_SEED.h"
 
 #include "dap_enc_msrln.h"
 #include "dap_enc_defeo.h"
@@ -35,6 +36,7 @@
 #include "dap_enc_bliss.h"
 #include "dap_enc_tesla.h"
 #include "dap_enc_dilithium.h"
+//#include "dap_enc_newhope.h"
 
 #include "dap_enc_ringct20.h"
 
@@ -68,6 +70,7 @@ struct dap_enc_key_callbacks{
     dap_enc_callback_new_generate new_generate_callback;
     dap_enc_callback_delete delete_callback;
 } s_callbacks[]={
+    //-Symmetric ciphers----------------------
     // AES
     [DAP_ENC_KEY_TYPE_IAES]={
         .name = "IAES",
@@ -114,7 +117,7 @@ struct dap_enc_key_callbacks{
         .gen_key_public = NULL,
         .gen_key_public_size = NULL,
         .enc_out_size = dap_enc_bf_cbc_calc_encode_size,
-        .dec_out_size = dap_enc_bf_cbc_calc_decode_size,
+        .dec_out_size = dap_enc_bf_cbc_calc_decode_max_size,
         .sign_get = NULL,
         .sign_verify = NULL
     },
@@ -182,7 +185,24 @@ struct dap_enc_key_callbacks{
         .sign_get = NULL,
         .sign_verify = NULL
     },
+    [DAP_ENC_KEY_TYPE_SEED_OFB]={
+        .name = "SEED_OFB",
+        .enc = dap_enc_seed_ofb_encrypt,
+        .enc_na = dap_enc_seed_ofb_encrypt_fast ,
+        .dec = dap_enc_seed_ofb_decrypt,
+        .dec_na = dap_enc_seed_ofb_decrypt_fast ,
+        .new_callback = dap_enc_seed_ofb_key_new,
+        .delete_callback = dap_enc_seed_key_delete,
+        .new_generate_callback = dap_enc_seed_key_generate,
+        .gen_key_public = NULL,
+        .gen_key_public_size = NULL,
+        .enc_out_size = dap_enc_seed_ofb_calc_encode_size,
+        .dec_out_size = dap_enc_seed_ofb_calc_decode_size,
+        .sign_get = NULL,
+        .sign_verify = NULL
+    },
 
+    //-KEMs(Key Exchange Mechanism)----------------------
     [DAP_ENC_KEY_TYPE_MSRLN] = {
         .name = "MSRLN",
         .enc = NULL,
@@ -216,6 +236,25 @@ struct dap_enc_key_callbacks{
         .sign_get = NULL,
         .sign_verify = NULL
     },
+//    [DAP_ENC_KEY_TYPE_RLWE_NEWHOPE_CPA_KEM]={
+//        .name = "NEWHOPE_CPA_KEM",
+//        .enc = NULL,
+//        .dec = NULL,
+//        .enc_na = NULL,
+//        .dec_na = NULL,
+//        .gen_key_public = NULL,
+//        .gen_key_public_size = NULL,
+//        .gen_bob_shared_key = dap_enc_newhope_pbk_enc,
+//        .gen_alice_shared_key = dap_enc_newhope_prk_dec,
+//        .new_callback = dap_enc_newhope_kem_key_new,
+//        .delete_callback = dap_enc_newhope_kem_key_delete,
+//        .new_generate_callback = dap_enc_newhope_kem_key_new_generate,
+//        .enc_out_size = NULL,
+//        .dec_out_size = NULL,
+//        .sign_get = NULL,
+//        .sign_verify = NULL
+//    },
+    //------Signatures---------------------------
     [DAP_ENC_KEY_TYPE_SIG_PICNIC]={
         .name = "PICNIC",
         .enc = NULL,
diff --git a/dap-sdk/crypto/src/dap_enc_oaes.c b/dap-sdk/crypto/src/dap_enc_oaes.c
index d0a37d66dae177859a4b13cc68be846ae0561da9..ccfa529b91985bb3b302ec7f57cda902bf9abb70 100755
--- a/dap-sdk/crypto/src/dap_enc_oaes.c
+++ b/dap-sdk/crypto/src/dap_enc_oaes.c
@@ -67,10 +67,10 @@ void dap_enc_oaes_key_generate(struct dap_enc_key * a_key, const void *kex_buf,
 
 size_t dap_enc_oaes_calc_encode_size(const size_t size_in)
 {
-    size_t a_out_size = 2 * OAES_BLOCK_SIZE + size_in
+    size_t l_out_size = 2 * OAES_BLOCK_SIZE + size_in
             + (size_in % OAES_BLOCK_SIZE == 0 ? 0 :
             OAES_BLOCK_SIZE - size_in % OAES_BLOCK_SIZE);
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_oaes_calc_decode_size(const size_t size_in)
@@ -83,14 +83,14 @@ size_t dap_enc_oaes_decrypt(struct dap_enc_key *a_key, const void * a_in,
     OAES_CTX *ctx = get_oaes_ctx(a_key);
     if(!ctx)
         return 0;
-    size_t a_out_size = dap_enc_oaes_calc_decode_size(a_in_size);
-    *a_out = calloc(a_out_size, 1);
-    OAES_RET ret = oaes_decrypt(ctx, a_in, a_in_size, *a_out, &a_out_size);
+    size_t l_out_size = dap_enc_oaes_calc_decode_size(a_in_size);
+    *a_out = calloc(l_out_size, 1);
+    OAES_RET ret = oaes_decrypt(ctx, a_in, a_in_size, *a_out, &l_out_size);
     if(ret != OAES_RET_SUCCESS) {
-        a_out_size = 0;
+        l_out_size = 0;
         free(*a_out);
     }
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_oaes_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out)
@@ -98,14 +98,14 @@ size_t dap_enc_oaes_encrypt(struct dap_enc_key * a_key, const void * a_in, size_
     OAES_CTX *ctx = get_oaes_ctx(a_key);
     if(!ctx)
         return 0;
-    size_t a_out_size = dap_enc_oaes_calc_encode_size(a_in_size);
-    *a_out = calloc(a_out_size, 1);
-    OAES_RET ret = oaes_encrypt(ctx, a_in, a_in_size, *a_out, &a_out_size);
+    size_t l_out_size = dap_enc_oaes_calc_encode_size(a_in_size);
+    *a_out = calloc(l_out_size, 1);
+    OAES_RET ret = oaes_encrypt(ctx, a_in, a_in_size, *a_out, &l_out_size);
     if(ret != OAES_RET_SUCCESS) {
-        a_out_size = 0;
+        l_out_size = 0;
         free(*a_out);
     }
-    return a_out_size;
+    return l_out_size;
 }
 
 // Writes result ( out ) in already allocated buffer
diff --git a/dap-sdk/crypto/src/dap_enc_ringct20.c b/dap-sdk/crypto/src/dap_enc_ringct20.c
index f67af0b3f9bbcedd4d5a3764ad16cafabf1ec302..172690f5bbf1d4b874c62536dc70397612eb030f 100644
--- a/dap-sdk/crypto/src/dap_enc_ringct20.c
+++ b/dap-sdk/crypto/src/dap_enc_ringct20.c
@@ -4,7 +4,7 @@
 
 #include "dap_enc_ringct20.h"
 #include "dap_common.h"
-#include "dap_rand.h"
+#include "rand/dap_rand.h"
 
 
 
@@ -20,16 +20,16 @@ int32_t ringct20_private_and_public_keys_init(ringct20_private_key_t *private_ke
 void SetupPrintAH(poly_ringct20 *A, poly_ringct20 * H, const int mLen)
 {
     LRCT_Setup(A, H, mLen);
-    uint8_t polyb_tmp[NEWHOPE_POLYBYTES];
-    printf("A_bpoly[%d][NEWHOPE_POLYBYTES] = {\n", mLen);
+    uint8_t polyb_tmp[NEWHOPE_RINGCT20_POLYBYTES];
+    printf("A_bpoly[%d][NEWHOPE_RINGCT20_POLYBYTES] = {\n", mLen);
     for(int i = 0; i < mLen; ++i)
     {
         poly_tobytes(polyb_tmp,A + i);
         printf("{");
-        for(int j = 0; j < NEWHOPE_POLYBYTES; ++j)
+        for(int j = 0; j < NEWHOPE_RINGCT20_POLYBYTES; ++j)
         {
             printf("0x%.2x", polyb_tmp[j]);
-            if(j < NEWHOPE_POLYBYTES - 1)
+            if(j < NEWHOPE_RINGCT20_POLYBYTES - 1)
                 printf(", ");
         }
         printf("}");
@@ -37,15 +37,15 @@ void SetupPrintAH(poly_ringct20 *A, poly_ringct20 * H, const int mLen)
             printf(",\n");
     }
     printf("};\n");
-    printf("H_bpoly[%d][NEWHOPE_POLYBYTES] = {\n", mLen);
+    printf("H_bpoly[%d][NEWHOPE_RINGCT20_POLYBYTES] = {\n", mLen);
     for(int i = 0; i < mLen; ++i)
     {
         poly_tobytes(polyb_tmp,H + i);
         printf("{");
-        for(int j = 0; j < NEWHOPE_POLYBYTES; ++j)
+        for(int j = 0; j < NEWHOPE_RINGCT20_POLYBYTES; ++j)
         {
             printf("0x%.2x", polyb_tmp[j]);
-            if(j < NEWHOPE_POLYBYTES - 1)
+            if(j < NEWHOPE_RINGCT20_POLYBYTES - 1)
                 printf(", ");
         }
         printf("}");
@@ -284,7 +284,7 @@ int ringct20_crypto_sign( ringct20_signature_t *sig, const unsigned char *m, uns
     for(int i = 0; i < p->wLen; ++i)
         t[i] = malloc(p->M*p->POLY_RINGCT20_SIZE);
 
-    unsigned char *bt = malloc(NEWHOPE_POLYBYTES);
+    unsigned char *bt = malloc(NEWHOPE_RINGCT20_POLYBYTES);
 
     for (int i = 0; i < p->wLen; i++)
     {
@@ -297,7 +297,7 @@ int ringct20_crypto_sign( ringct20_signature_t *sig, const unsigned char *m, uns
 
     for (int k = 0; k < p->M; k++)
     {
-        randombytes(bt, NEWHOPE_POLYBYTES);
+        randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES);
         poly_frombytes(u + k, bt);
         poly_serial(u + k);
         //poly_print(u+k);
@@ -659,7 +659,7 @@ int ringct20_crypto_sign_with_pbk_list( ringct20_signature_t *sig, const unsigne
     for(int i = 0; i < wLen; ++i)
         t[i] = malloc(p->M*p->POLY_RINGCT20_SIZE);
 
-    unsigned char *bt = malloc(NEWHOPE_POLYBYTES);
+    unsigned char *bt = malloc(NEWHOPE_RINGCT20_POLYBYTES);
 
     for (int i = 0; i < wLen; i++)
     {
@@ -672,7 +672,7 @@ int ringct20_crypto_sign_with_pbk_list( ringct20_signature_t *sig, const unsigne
 
     for (int k = 0; k < p->M; k++)
     {
-        randombytes(bt, NEWHOPE_POLYBYTES);
+        randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES);
         poly_frombytes(u + k, bt);
         poly_serial(u + k);
         //poly_print(u+k);
diff --git a/dap-sdk/crypto/src/dap_enc_salsa2012.c b/dap-sdk/crypto/src/dap_enc_salsa2012.c
index 767f9fb9e02447ba1517e19f11eb53909690085d..67796c3861232d0b75eb816fedf7580f925cd355 100644
--- a/dap-sdk/crypto/src/dap_enc_salsa2012.c
+++ b/dap-sdk/crypto/src/dap_enc_salsa2012.c
@@ -24,10 +24,10 @@ void dap_enc_salsa2012_key_generate(struct dap_enc_key * a_key, const void *kex_
 
 
     a_key->priv_key_data_size = SALSA20_KEY_SIZE;
-    a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, key_size);
+    a_key->priv_key_data = DAP_NEW_SIZE(uint8_t, a_key->priv_key_data_size);
 
     Keccak_HashInstance Keccak_ctx;
-    Keccak_HashInitialize(&Keccak_ctx, 1088,  512, SALSA20_KEY_SIZE*8, 0x06);
+    Keccak_HashInitialize(&Keccak_ctx, 1088,  512, a_key->priv_key_data_size*8, 0x06);
     Keccak_HashUpdate(&Keccak_ctx, kex_buf, kex_size*8);
     if(seed_size)
         Keccak_HashUpdate(&Keccak_ctx, seed, seed_size*8);
@@ -39,9 +39,9 @@ void dap_enc_salsa2012_key_delete(struct dap_enc_key *a_key)
     if(a_key->priv_key_data != NULL)
     {
         randombytes(a_key->priv_key_data,a_key->priv_key_data_size);
-        DAP_DELETE(a_key->priv_key_data);
+        //DAP_DELETE(a_key->priv_key_data);
     }
-    a_key->priv_key_data_size = 0;
+    //a_key->priv_key_data_size = 0;
 }
 //------SALSA2012-----------
 void dap_enc_salsa2012_key_new(struct dap_enc_key * a_key)
@@ -58,16 +58,16 @@ void dap_enc_salsa2012_key_new(struct dap_enc_key * a_key)
 
 size_t dap_enc_salsa2012_decrypt(struct dap_enc_key *a_key, const void * a_in, size_t a_in_size, void ** a_out)
 {
-    size_t a_out_size = a_in_size - SALSA20_NONCE_SIZE;
-    if(a_out_size <= 0) {
+    size_t l_out_size = a_in_size - SALSA20_NONCE_SIZE;
+    if(l_out_size <= 0) {
         log_it(L_ERROR, "salsa2012 decryption ct with iv must be more than kBlockLen89 bytes");
         return 0;
     }
     *a_out = DAP_NEW_SIZE(uint8_t, a_in_size - SALSA20_NONCE_SIZE);
-    a_out_size = dap_enc_salsa2012_decrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size);
-    if(a_out_size == 0)
+    l_out_size = dap_enc_salsa2012_decrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size);
+    if(l_out_size == 0)
         DAP_DEL_Z(*a_out);
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_salsa2012_encrypt(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void ** a_out)
@@ -76,12 +76,12 @@ size_t dap_enc_salsa2012_encrypt(struct dap_enc_key * a_key, const void * a_in,
         log_it(L_ERROR, "gost ofb encryption pt cannot be 0 bytes");
         return 0;
     }
-    size_t a_out_size = a_in_size + SALSA20_NONCE_SIZE;
-    *a_out = DAP_NEW_SIZE(uint8_t, a_out_size);
-    a_out_size = dap_enc_salsa2012_encrypt_fast(a_key, a_in, a_in_size, *a_out, a_out_size);
-    if(a_out_size == 0)
+    size_t l_out_size = a_in_size + SALSA20_NONCE_SIZE;
+    *a_out = DAP_NEW_SIZE(uint8_t, l_out_size);
+    l_out_size = dap_enc_salsa2012_encrypt_fast(a_key, a_in, a_in_size, *a_out, l_out_size);
+    if(l_out_size == 0)
         DAP_DEL_Z(*a_out);
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_salsa2012_calc_encode_size(const size_t size_in)
@@ -100,21 +100,21 @@ size_t dap_enc_salsa2012_calc_decode_size(const size_t size_in)
 
 size_t dap_enc_salsa2012_decrypt_fast(struct dap_enc_key *a_key, const void * a_in,
         size_t a_in_size, void * a_out, size_t buf_out_size) {
-    size_t a_out_size = a_in_size - SALSA20_NONCE_SIZE;
-    if(a_out_size > buf_out_size) {
+    size_t l_out_size = a_in_size - SALSA20_NONCE_SIZE;
+    if(l_out_size > buf_out_size) {
         log_it(L_ERROR, "salsa2012 fast_decryption too small buf_out_size");
         return 0;
     }
 
     //memcpy(nonce, a_in, SALSA20_NONCE_SIZE);
     crypto_stream_salsa2012_xor(a_out, a_in + SALSA20_NONCE_SIZE, a_in_size - SALSA20_NONCE_SIZE, a_in, a_key->priv_key_data);
-    return a_out_size;
+    return l_out_size;
 }
 
 size_t dap_enc_salsa2012_encrypt_fast(struct dap_enc_key * a_key, const void * a_in, size_t a_in_size, void * a_out,size_t buf_out_size)
 {
-    size_t a_out_size = a_in_size + SALSA20_NONCE_SIZE;
-    if(a_out_size > buf_out_size) {
+    size_t l_out_size = a_in_size + SALSA20_NONCE_SIZE;
+    if(l_out_size > buf_out_size) {
         log_it(L_ERROR, "salsa2012 fast_encryption too small buf_out_size");
         return 0;
     }
@@ -126,6 +126,6 @@ size_t dap_enc_salsa2012_encrypt_fast(struct dap_enc_key * a_key, const void * a
     }
 
     crypto_stream_salsa2012_xor(a_out + SALSA20_NONCE_SIZE, a_in, a_in_size, a_out, a_key->priv_key_data);
-    return a_out_size;
+    return l_out_size;
  }
 
diff --git a/dap-sdk/crypto/src/dap_enc_tesla.c b/dap-sdk/crypto/src/dap_enc_tesla.c
index ca979cb6c949872c072695d4f06988f5f4b8cc81..e8c03e6ba0521f801f9b1d178fc5b3eb1186f23c 100755
--- a/dap-sdk/crypto/src/dap_enc_tesla.c
+++ b/dap-sdk/crypto/src/dap_enc_tesla.c
@@ -4,7 +4,7 @@
 
 #include "dap_enc_tesla.h"
 #include "dap_common.h"
-#include "dap_rand.h"
+#include "rand/dap_rand.h"
 
 #define LOG_TAG "dap_enc_sig_tesla"
 
diff --git a/dap-sdk/crypto/src/rand/dap_rand.c b/dap-sdk/crypto/src/rand/dap_rand.c
index c804f53899cc1d25e1b0962ea9176ab1db5f93c2..7a2c48e3a6c787e858c3fbde3d87f406c387f974 100755
--- a/dap-sdk/crypto/src/rand/dap_rand.c
+++ b/dap-sdk/crypto/src/rand/dap_rand.c
@@ -45,7 +45,7 @@ int randombase64(void*random_array, unsigned int size)
             ((uint8_t*)random_array)[size - odd_signs + i] = tmpv[i];
         }
     }
-    return (int) size;
+    return passed;
 }
 
 
diff --git a/dap-sdk/crypto/src/ringct20/ntt.c b/dap-sdk/crypto/src/ringct20/ntt.c
index c96eb15dedb80d9b184f0e54279dbc14f36b2d69..1da87b9d1f750e9f21da971e7afe52d2de13bbf5 100644
--- a/dap-sdk/crypto/src/ringct20/ntt.c
+++ b/dap-sdk/crypto/src/ringct20/ntt.c
@@ -3,7 +3,7 @@
 #include "params.h"
 #include "reduce.h"
 
-#if (NEWHOPE_N == 512)
+#if (NEWHOPE_RINGCT20_N == 512)
 /************************************************************
 * Name:        bitrev_table
 *
@@ -28,14 +28,14 @@ static uint16_t bitrev_table[512] = {
     263, 135, 391, 71, 327, 199, 455, 39, 295, 167, 423, 103, 359, 231, 487, 23, 279, 151, 407, 87, 343, 215, 471, 55, 311, 183, 439, 119, 375, 247, 503, 15,
     271, 143, 399, 79, 335, 207, 463, 47, 303, 175, 431, 111, 367, 239, 495, 31, 287, 159, 415, 95, 351, 223, 479, 63, 319, 191, 447, 127, 383, 255, 511};
 
-#elif (NEWHOPE_N == 1024)
+#elif (NEWHOPE_RINGCT20_N == 1024)
 /************************************************************
 * Name:        bitrev_table
 *
 * Description: Contains bit-reversed 10-bit indices to be used to re-order 
 *              polynomials before number theoratic transform 
 ************************************************************/
-static uint16_t bitrev_table[NEWHOPE_N] = {
+static uint16_t bitrev_table[NEWHOPE_RINGCT20_N] = {
     0, 512, 256, 768, 128, 640, 384, 896, 64, 576, 320, 832, 192, 704, 448, 960, 32, 544, 288, 800, 160, 672, 416, 928, 96, 608, 352, 864, 224, 736, 480, 992,
     16, 528, 272, 784, 144, 656, 400, 912, 80, 592, 336, 848, 208, 720, 464, 976, 48, 560, 304, 816, 176, 688, 432, 944, 112, 624, 368, 880, 240, 752, 496, 1008,
     8, 520, 264, 776, 136, 648, 392, 904, 72, 584, 328, 840, 200, 712, 456, 968, 40, 552, 296, 808, 168, 680, 424, 936, 104, 616, 360, 872, 232, 744, 488, 1000,
@@ -70,7 +70,7 @@ static uint16_t bitrev_table[NEWHOPE_N] = {
     31, 543, 287, 799, 159, 671, 415, 927, 95, 607, 351, 863, 223, 735, 479, 991, 63, 575, 319, 831, 191, 703, 447, 959, 127, 639, 383, 895, 255, 767, 511, 1023};
 
 #else
-#error "NEWHOPE_N must be either 512 or 1024"
+#error "NEWHOPE_RINGCT20_N must be either 512 or 1024"
 #endif
 
 /*************************************************
@@ -84,7 +84,7 @@ void bitrev_vector(uint16_t *poly_ringct20) {
 	unsigned int i, r;
 	uint16_t tmp;
 
-	for (i = 0; i < NEWHOPE_N; i++) {
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i++) {
 		r = bitrev_table[i];
 		if (i < r) {
             tmp = poly_ringct20[i];
@@ -106,11 +106,11 @@ void bitrev_vector(uint16_t *poly_ringct20) {
 void mul_coefficients(uint16_t *poly_ringct20, const uint16_t *factors) {
 	unsigned int i;
 
-	for (i = 0; i < NEWHOPE_N; i++)
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i++)
         poly_ringct20[i] = montgomery_reduce_32_16((poly_ringct20[i] * factors[i]));
 }
 
-#if (NEWHOPE_N == 512)
+#if (NEWHOPE_RINGCT20_N == 512)
 
 /*************************************************
 * Name:        ntt_ringct20
@@ -132,11 +132,11 @@ void ntt_ringct20(uint16_t *a, const uint16_t *omega) {
 		distance = (1 << i);
 		for (start = 0; start < distance; start++) {
 			jTwiddle = 0;
-			for (j = start; j < NEWHOPE_N - 1; j += 2 * distance) {
+			for (j = start; j < NEWHOPE_RINGCT20_N - 1; j += 2 * distance) {
 				W = omega[jTwiddle++];
 				temp = a[j];
 				a[j] = (temp + a[j + distance]); // Omit reduction (be lazy)
-                a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_Q - a[j + distance])));
+                a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_RINGCT20_Q - a[j + distance])));
 			}
 		}
 		if (i + 1 < 9) {
@@ -144,18 +144,18 @@ void ntt_ringct20(uint16_t *a, const uint16_t *omega) {
 			distance <<= 1;
 			for (start = 0; start < distance; start++) {
 				jTwiddle = 0;
-				for (j = start; j < NEWHOPE_N - 1; j += 2 * distance) {
+				for (j = start; j < NEWHOPE_RINGCT20_N - 1; j += 2 * distance) {
 					W = omega[jTwiddle++];
 					temp = a[j];
-					a[j] = (temp + a[j + distance]) % NEWHOPE_Q;
-                    a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_Q - a[j + distance])));
+					a[j] = (temp + a[j + distance]) % NEWHOPE_RINGCT20_Q;
+                    a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_RINGCT20_Q - a[j + distance])));
 				}
 			}
 		}
 	}
 }
 
-#elif (NEWHOPE_N == 1024)
+#elif (NEWHOPE_RINGCT20_N == 1024)
 
 void /*************************************************
 * Name:        ntt_ringct20
@@ -177,11 +177,11 @@ void /*************************************************
 		distance = (1 << i);
 		for (start = 0; start < distance; start++) {
 			jTwiddle = 0;
-			for (j = start; j < NEWHOPE_N - 1; j += 2 * distance) {
+			for (j = start; j < NEWHOPE_RINGCT20_N - 1; j += 2 * distance) {
 				W = omega[jTwiddle++];
 				temp = a[j];
 				a[j] = (temp + a[j + distance]); // Omit reduction (be lazy)
-                a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_Q - a[j + distance])));
+                a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_RINGCT20_Q - a[j + distance])));
 			}
 		}
 
@@ -189,16 +189,16 @@ void /*************************************************
 		distance <<= 1;
 		for (start = 0; start < distance; start++) {
 			jTwiddle = 0;
-			for (j = start; j < NEWHOPE_N - 1; j += 2 * distance) {
+			for (j = start; j < NEWHOPE_RINGCT20_N - 1; j += 2 * distance) {
 				W = omega[jTwiddle++];
 				temp = a[j];
-				a[j] = (temp + a[j + distance]) % NEWHOPE_Q;
-                a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_Q - a[j + distance])));
+				a[j] = (temp + a[j + distance]) % NEWHOPE_RINGCT20_Q;
+                a[j + distance] = montgomery_reduce_32_16((W * ((uint32_t) temp + 3 * NEWHOPE_RINGCT20_Q - a[j + distance])));
 			}
 		}
 	}
 }
 
 #else
-#error "NEWHOPE_N must be either 512 or 1024"
+#error "NEWHOPE_RINGCT20_N must be either 512 or 1024"
 #endif
diff --git a/dap-sdk/crypto/src/ringct20/ntt.h b/dap-sdk/crypto/src/ringct20/ntt.h
index 4054b2f0fa16719e7915ae1096d90b2c87bcecd4..f0b7bdfe347eaedb66f00af861ad563ac90e4952 100644
--- a/dap-sdk/crypto/src/ringct20/ntt.h
+++ b/dap-sdk/crypto/src/ringct20/ntt.h
@@ -1,5 +1,5 @@
-#ifndef NTT_H
-#define NTT_H
+#ifndef NTT_RINGCT20_H
+#define NTT_RINGCT20_H
 
 #include "inttypes.h"
 
diff --git a/dap-sdk/crypto/src/ringct20/params.h b/dap-sdk/crypto/src/ringct20/params.h
index d3be8c68e8cf1f406f1ca735d10a7f521d3b370f..0ac7536abf1d8a7dc2d7b89a4a39c7528d214f24 100644
--- a/dap-sdk/crypto/src/ringct20/params.h
+++ b/dap-sdk/crypto/src/ringct20/params.h
@@ -1,26 +1,26 @@
-#ifndef PARAMS_H
-#define PARAMS_H
+#ifndef PARAMS_RINGCT20_H
+#define PARAMS_RINGCT20_H
 
-#define NEWHOPE_Q 12289
-#define NEWHOPE_2Q 24578
-#define NEWHOPE_K 8 /* used in noise sampling */
-#define NEWHOPE_N 512
+#define NEWHOPE_RINGCT20_Q 12289
+#define NEWHOPE_RINGCT20_2Q 24578
+#define NEWHOPE_RINGCT20_K 8 /* used in noise sampling */
+#define NEWHOPE_RINGCT20_N 512
 
-#define NEWHOPE_SYMBYTES 32 /* size of shared key, seeds/coins, and hashes */
+#define NEWHOPE_RINGCT20_SYMBYTES 32 /* size of shared key, seeds/coins, and hashes */
 
-#define NEWHOPE_POLYBYTES ((14 * NEWHOPE_N) / 8)
-#define NEWHOPE_POLYCOMPRESSEDBYTES ((3 * NEWHOPE_N) / 8)
+#define NEWHOPE_RINGCT20_POLYBYTES ((14 * NEWHOPE_RINGCT20_N) / 8)
+#define NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES ((3 * NEWHOPE_RINGCT20_N) / 8)
 
-#define NEWHOPE_CPAPKE_PUBLICKEYBYTES (NEWHOPE_POLYBYTES + NEWHOPE_SYMBYTES)
-#define NEWHOPE_CPAPKE_SECRETKEYBYTES (NEWHOPE_POLYBYTES)
-#define NEWHOPE_CPAPKE_CIPHERTEXTBYTES (NEWHOPE_POLYBYTES + NEWHOPE_POLYCOMPRESSEDBYTES)
+#define NEWHOPE_RINGCT20_CPAPKE_PUBLICKEYBYTES (NEWHOPE_RINGCT20_POLYBYTES + NEWHOPE_RINGCT20_SYMBYTES)
+#define NEWHOPE_RINGCT20_CPAPKE_SECRETKEYBYTES (NEWHOPE_RINGCT20_POLYBYTES)
+#define NEWHOPE_RINGCT20_CPAPKE_CIPHERTEXTBYTES (NEWHOPE_RINGCT20_POLYBYTES + NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES)
 
-#define NEWHOPE_CPAKEM_PUBLICKEYBYTES NEWHOPE_CPAPKE_PUBLICKEYBYTES
-#define NEWHOPE_CPAKEM_SECRETKEYBYTES NEWHOPE_CPAPKE_SECRETKEYBYTES
-#define NEWHOPE_CPAKEM_CIPHERTEXTBYTES NEWHOPE_CPAPKE_CIPHERTEXTBYTES
+#define NEWHOPE_RINGCT20_CPAKEM_PUBLICKEYBYTES NEWHOPE_RINGCT20_CPAPKE_PUBLICKEYBYTES
+#define NEWHOPE_RINGCT20_CPAKEM_SECRETKEYBYTES NEWHOPE_RINGCT20_CPAPKE_SECRETKEYBYTES
+#define NEWHOPE_RINGCT20_CPAKEM_CIPHERTEXTBYTES NEWHOPE_RINGCT20_CPAPKE_CIPHERTEXTBYTES
 
-#define NEWHOPE_CCAKEM_PUBLICKEYBYTES NEWHOPE_CPAPKE_PUBLICKEYBYTES
-#define NEWHOPE_CCAKEM_SECRETKEYBYTES (NEWHOPE_CPAPKE_SECRETKEYBYTES + NEWHOPE_CPAPKE_PUBLICKEYBYTES + 2 * NEWHOPE_SYMBYTES)
-#define NEWHOPE_CCAKEM_CIPHERTEXTBYTES (NEWHOPE_CPAPKE_CIPHERTEXTBYTES + NEWHOPE_SYMBYTES) /* Second part is for Targhi-Unruh */
+#define NEWHOPE_RINGCT20_CCAKEM_PUBLICKEYBYTES NEWHOPE_RINGCT20_CPAPKE_PUBLICKEYBYTES
+#define NEWHOPE_RINGCT20_CCAKEM_SECRETKEYBYTES (NEWHOPE_RINGCT20_CPAPKE_SECRETKEYBYTES + NEWHOPE_RINGCT20_CPAPKE_PUBLICKEYBYTES + 2 * NEWHOPE_RINGCT20_SYMBYTES)
+#define NEWHOPE_RINGCT20_CCAKEM_CIPHERTEXTBYTES (NEWHOPE_RINGCT20_CPAPKE_CIPHERTEXTBYTES + NEWHOPE_RINGCT20_SYMBYTES) /* Second part is for Targhi-Unruh */
 
 #endif
diff --git a/dap-sdk/crypto/src/ringct20/poly.c b/dap-sdk/crypto/src/ringct20/poly.c
index 82e7a2d85798dd2fe2cd674a2724346ad9dcdb91..ed350c619ddbff01cbcc30892d2bdb58ec3aa6ec 100644
--- a/dap-sdk/crypto/src/ringct20/poly.c
+++ b/dap-sdk/crypto/src/ringct20/poly.c
@@ -10,7 +10,7 @@
 void poly_init(poly_ringct20 *r)
 {
 	size_t i;
-	for ( i = 0; i < NEWHOPE_N; i++)
+	for ( i = 0; i < NEWHOPE_RINGCT20_N; i++)
 	{
 		r->coeffs[i] = 0;
 	}
@@ -18,7 +18,7 @@ void poly_init(poly_ringct20 *r)
 void poly_setValue(poly_ringct20 *r, uint16_t v)
 {
 	size_t i;
-	for (i = 0; i < NEWHOPE_N; i++)
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i++)
 	{
 		r->coeffs[i] = v;
 	}
@@ -35,9 +35,9 @@ void poly_setValue(poly_ringct20 *r, uint16_t v)
  uint16_t coeff_freeze(uint16_t x) {
 	uint16_t m, r;
 	int16_t c;
-	r = x % NEWHOPE_Q;
+	r = x % NEWHOPE_RINGCT20_Q;
 
-	m = r - NEWHOPE_Q;
+	m = r - NEWHOPE_RINGCT20_Q;
 	c = m;
 	c >>= 15;
 	r = m ^ ((r ^ m) & c);
@@ -48,9 +48,9 @@ void poly_setValue(poly_ringct20 *r, uint16_t v)
  {
 	 uint16_t m, r;
 	 int16_t c;
-	 r = x % NEWHOPE_2Q;
+	 r = x % NEWHOPE_RINGCT20_2Q;
 
-	 m = r - NEWHOPE_2Q;
+	 m = r - NEWHOPE_RINGCT20_2Q;
 	 c = m;
 	 c >>= 15;
 	 r = m ^ ((r ^ m) & c);
@@ -71,7 +71,7 @@ static uint16_t flipabs(uint16_t x) {
 	int16_t r, m;
 	r = coeff_freeze(x);
 
-	r = r - NEWHOPE_Q / 2;
+	r = r - NEWHOPE_RINGCT20_Q / 2;
 	m = r >> 15;
 	return (r + m) ^ m;
 }
@@ -86,7 +86,7 @@ static uint16_t flipabs(uint16_t x) {
 **************************************************/
 void poly_frombytes(poly_ringct20 *r, const unsigned char *a) {
 	int i;
-	for (i = 0; i < NEWHOPE_N / 4; i++) {
+	for (i = 0; i < NEWHOPE_RINGCT20_N / 4; i++) {
 		r->coeffs[4 * i + 0] = a[7 * i + 0] | (((uint16_t) a[7 * i + 1] & 0x3f) << 8);
 		r->coeffs[4 * i + 1] = (a[7 * i + 1] >> 6) | (((uint16_t) a[7 * i + 2]) << 2) | (((uint16_t) a[7 * i + 3] & 0x0f) << 10);
 		r->coeffs[4 * i + 2] = (a[7 * i + 3] >> 4) | (((uint16_t) a[7 * i + 4]) << 4) | (((uint16_t) a[7 * i + 5] & 0x03) << 12);
@@ -105,7 +105,7 @@ void poly_frombytes(poly_ringct20 *r, const unsigned char *a) {
 void poly_tobytes(unsigned char *r, const poly_ringct20 *p) {
 	int i;
 	uint16_t t0, t1, t2, t3;
-	for (i = 0; i < NEWHOPE_N / 4; i++) {
+	for (i = 0; i < NEWHOPE_RINGCT20_N / 4; i++) {
 		t0 = coeff_freeze(p->coeffs[4 * i + 0]);
 		t1 = coeff_freeze(p->coeffs[4 * i + 1]);
 		t2 = coeff_freeze(p->coeffs[4 * i + 2]);
@@ -134,10 +134,10 @@ void poly_compress(unsigned char *r, const poly_ringct20 *p) {
 
 	uint32_t t[8];
 
-	for (i = 0; i < NEWHOPE_N; i += 8) {
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i += 8) {
 		for (j = 0; j < 8; j++) {
 			t[j] = coeff_freeze(p->coeffs[i + j]);
-			t[j] = (((t[j] << 3) + NEWHOPE_Q / 2) / NEWHOPE_Q) & 0x7;
+			t[j] = (((t[j] << 3) + NEWHOPE_RINGCT20_Q / 2) / NEWHOPE_RINGCT20_Q) & 0x7;
 		}
 
 		r[k] = t[0] | (t[1] << 3) | (t[2] << 6);
@@ -158,7 +158,7 @@ void poly_compress(unsigned char *r, const poly_ringct20 *p) {
 **************************************************/
 void poly_decompress(poly_ringct20 *r, const unsigned char *a) {
 	unsigned int i, j;
-	for (i = 0; i < NEWHOPE_N; i += 8) {
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i += 8) {
 		r->coeffs[i + 0] = a[0] & 7;
 		r->coeffs[i + 1] = (a[0] >> 3) & 7;
 		r->coeffs[i + 2] = (a[0] >> 6) | ((a[1] << 2) & 4);
@@ -169,7 +169,7 @@ void poly_decompress(poly_ringct20 *r, const unsigned char *a) {
 		r->coeffs[i + 7] = (a[2] >> 5);
 		a += 3;
 		for (j = 0; j < 8; j++)
-			r->coeffs[i + j] = ((uint32_t) r->coeffs[i + j] * NEWHOPE_Q + 4) >> 3;
+			r->coeffs[i + j] = ((uint32_t) r->coeffs[i + j] * NEWHOPE_RINGCT20_Q + 4) >> 3;
 	}
 }
 
@@ -187,11 +187,11 @@ void poly_frommsg(poly_ringct20 *r, const unsigned char *msg) {
 	{
 		for (j = 0; j < 8; j++) {
 			mask = -((msg[i] >> j) & 1);
-			r->coeffs[8 * i + j + 0] = mask & (NEWHOPE_Q / 2);
-			r->coeffs[8 * i + j + 256] = mask & (NEWHOPE_Q / 2);
-#if (NEWHOPE_N == 1024)
-			r->coeffs[8 * i + j + 512] = mask & (NEWHOPE_Q / 2);
-			r->coeffs[8 * i + j + 768] = mask & (NEWHOPE_Q / 2);
+			r->coeffs[8 * i + j + 0] = mask & (NEWHOPE_RINGCT20_Q / 2);
+			r->coeffs[8 * i + j + 256] = mask & (NEWHOPE_RINGCT20_Q / 2);
+#if (NEWHOPE_RINGCT20_N == 1024)
+			r->coeffs[8 * i + j + 512] = mask & (NEWHOPE_RINGCT20_Q / 2);
+			r->coeffs[8 * i + j + 768] = mask & (NEWHOPE_RINGCT20_Q / 2);
 #endif
 		}
 	}
@@ -215,12 +215,12 @@ void poly_tomsg(unsigned char *msg, const poly_ringct20 *x) {
 	for (i = 0; i < 256; i++) {
 		t = flipabs(x->coeffs[i + 0]);
 		t += flipabs(x->coeffs[i + 256]);
-#if (NEWHOPE_N == 1024)
+#if (NEWHOPE_RINGCT20_N == 1024)
 		t += flipabs(x->coeffs[i + 512]);
 		t += flipabs(x->coeffs[i + 768]);
-		t = ((t - NEWHOPE_Q));
+		t = ((t - NEWHOPE_RINGCT20_Q));
 #else
-		t = ((t - NEWHOPE_Q / 2));
+		t = ((t - NEWHOPE_RINGCT20_Q / 2));
 #endif
 
 		t >>= 15;
@@ -242,28 +242,28 @@ void poly_uniform_ringct20(poly_ringct20 *a, const unsigned char *seed) {
 	uint16_t val;
     uint64_t state[SHA3_STATESIZE];
     uint8_t buf[SHAKE128_RATE];
-	uint8_t extseed[NEWHOPE_SYMBYTES + 1];
+	uint8_t extseed[NEWHOPE_RINGCT20_SYMBYTES + 1];
 	int i, j, k;
 
-	for (i = 0; i < NEWHOPE_SYMBYTES; i++)
+	for (i = 0; i < NEWHOPE_RINGCT20_SYMBYTES; i++)
 		extseed[i] = seed[i];
 
     for (i = 0; i < SHA3_STATESIZE; ++i)
 		state[i] = 0;
 
-	for (i = 0; i < NEWHOPE_N / 64; i++) /* generate a in blocks of 64 coefficients */
+	for (i = 0; i < NEWHOPE_RINGCT20_N / 64; i++) /* generate a in blocks of 64 coefficients */
 	{
 		ctr = 0;
-		extseed[NEWHOPE_SYMBYTES] = i; /* domain-separate the 16 independent calls */
+		extseed[NEWHOPE_RINGCT20_SYMBYTES] = i; /* domain-separate the 16 independent calls */
         for (k = 0; k < SHA3_STATESIZE; ++k)
 			state[k] = 0;
-        shake128_absorb(state, extseed, NEWHOPE_SYMBYTES + 1);
+        shake128_absorb(state, extseed, NEWHOPE_RINGCT20_SYMBYTES + 1);
 		while (ctr < 64) /* Very unlikely to run more than once */
 		{
             shake128_squeezeblocks(buf, 1, state);
             for (j = 0; j < SHAKE128_RATE && ctr < 64; j += 2) {
 				val = (buf[j] | ((uint16_t) buf[j + 1] << 8));
-				if (val < 5 * NEWHOPE_Q) {
+				if (val < 5 * NEWHOPE_RINGCT20_Q) {
 					a->coeffs[i * 64 + ctr] = val;
 					ctr++;
 				}
@@ -298,27 +298,27 @@ static unsigned char hw(unsigned char a) {
 *              - unsigned char nonce:       one-byte input nonce
 **************************************************/
 void poly_sample(poly_ringct20 *r, const unsigned char *seed, unsigned char nonce) {
-#if NEWHOPE_K != 8
+#if NEWHOPE_RINGCT20_K != 8
 #error "poly_sample in poly_ringct20.c only supports k=8"
 #endif
 	unsigned char buf[128], a, b;
 	//  uint32_t t, d, a, b, c;
 	int i, j;
 
-	unsigned char extseed[NEWHOPE_SYMBYTES + 2];
+	unsigned char extseed[NEWHOPE_RINGCT20_SYMBYTES + 2];
 
-	for (i = 0; i < NEWHOPE_SYMBYTES; i++)
+	for (i = 0; i < NEWHOPE_RINGCT20_SYMBYTES; i++)
 		extseed[i] = seed[i];
-	extseed[NEWHOPE_SYMBYTES] = nonce;
+	extseed[NEWHOPE_RINGCT20_SYMBYTES] = nonce;
 
-	for (i = 0; i < NEWHOPE_N / 64; i++) /* Generate noise in blocks of 64 coefficients */
+	for (i = 0; i < NEWHOPE_RINGCT20_N / 64; i++) /* Generate noise in blocks of 64 coefficients */
 	{
-		extseed[NEWHOPE_SYMBYTES + 1] = i;
-        shake256(buf, 128, extseed, NEWHOPE_SYMBYTES + 2);
+		extseed[NEWHOPE_RINGCT20_SYMBYTES + 1] = i;
+        shake256(buf, 128, extseed, NEWHOPE_RINGCT20_SYMBYTES + 2);
 		for (j = 0; j < 64; j++) {
 			a = buf[2 * j];
 			b = buf[2 * j + 1];
-			r->coeffs[64 * i + j] = hw(a) + NEWHOPE_Q - hw(b);
+			r->coeffs[64 * i + j] = hw(a) + NEWHOPE_RINGCT20_Q - hw(b);
 		}
 	}
 }
@@ -336,7 +336,7 @@ void poly_mul_pointwise(poly_ringct20 *r, const poly_ringct20 *a, const poly_rin
 	int i;
 	uint16_t t;
 
-	for (i = 0; i < NEWHOPE_N; i++) {
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i++) {
         t = montgomery_reduce_32_16(3186 * b->coeffs[i]);         /* t is now in Montgomery domain */
         r->coeffs[i] = montgomery_reduce_32_16(a->coeffs[i] * t); /* r->coeffs[i] is back in normal domain */
 	}
@@ -354,8 +354,8 @@ void poly_mul_pointwise(poly_ringct20 *r, const poly_ringct20 *a, const poly_rin
 **************************************************/
 void poly_add_ringct20(poly_ringct20 *r, const poly_ringct20 *a, const poly_ringct20 *b) {
 	int i;
-	for (i = 0; i < NEWHOPE_N; i++)
-		r->coeffs[i] = (a->coeffs[i] + b->coeffs[i]) % NEWHOPE_Q;
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i++)
+		r->coeffs[i] = (a->coeffs[i] + b->coeffs[i]) % NEWHOPE_RINGCT20_Q;
 }
 
 /*************************************************
@@ -369,8 +369,8 @@ void poly_add_ringct20(poly_ringct20 *r, const poly_ringct20 *a, const poly_ring
 **************************************************/
 void poly_sub_ringct20(poly_ringct20 *r, const poly_ringct20 *a, const poly_ringct20 *b) {
 	int i;
-	for (i = 0; i < NEWHOPE_N; i++)
-		r->coeffs[i] = (a->coeffs[i] + 3 * NEWHOPE_Q - b->coeffs[i]) % NEWHOPE_Q;
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i++)
+		r->coeffs[i] = (a->coeffs[i] + 3 * NEWHOPE_RINGCT20_Q - b->coeffs[i]) % NEWHOPE_RINGCT20_Q;
 }
 
 /*************************************************
@@ -412,7 +412,7 @@ void poly_invntt(poly_ringct20 *r) {
 void poly_print(const poly_ringct20 *r)
 {
 	size_t i = 0;
-	for ( i = 0; i < NEWHOPE_N; i++)
+	for ( i = 0; i < NEWHOPE_RINGCT20_N; i++)
 	{
 		printf("%04X", r->coeffs[i]);
 	}
@@ -422,7 +422,7 @@ void poly_print(const poly_ringct20 *r)
 void poly_serial(poly_ringct20 *r)
 {
 	size_t i;
-	for ( i = 0; i < NEWHOPE_N; i++)
+	for ( i = 0; i < NEWHOPE_RINGCT20_N; i++)
 	{
 		r->coeffs[i] = coeff_freeze(r->coeffs[i]);
 	}
@@ -430,7 +430,7 @@ void poly_serial(poly_ringct20 *r)
 void poly_cofcopy(poly_ringct20 *des, poly_ringct20 *sour)
 {
 	size_t i;
-	for ( i = 0; i < NEWHOPE_N; i++)
+	for ( i = 0; i < NEWHOPE_RINGCT20_N; i++)
 	{
 		des->coeffs[i] = sour->coeffs[i];
 	}
@@ -447,7 +447,7 @@ void poly_copy(poly_ringct20 *des, poly_ringct20 *sou, size_t mLen)
 int poly_equal(const poly_ringct20 *a, const poly_ringct20 *b)
 {
 	size_t i;
-	for ( i = 0; i < NEWHOPE_N; i++)
+	for ( i = 0; i < NEWHOPE_RINGCT20_N; i++)
 	{
 		if (a->coeffs[i] != b->coeffs[i])
 		{
@@ -461,10 +461,10 @@ void poly_constmul(poly_ringct20 *r, const poly_ringct20 *a, uint16_t cof)
 {
 	size_t i;
 	uint32_t tmp = 0;
-	for (i = 0; i < NEWHOPE_N; i++)
+	for (i = 0; i < NEWHOPE_RINGCT20_N; i++)
 	{
 		tmp = cof * a->coeffs[i];
-		r->coeffs[i] = tmp%NEWHOPE_2Q;
+		r->coeffs[i] = tmp%NEWHOPE_RINGCT20_2Q;
 	}
 }
 //shift
diff --git a/dap-sdk/crypto/src/ringct20/poly.h b/dap-sdk/crypto/src/ringct20/poly.h
index 7c507b568d8e0ae46dbc17578dd684f141b3fbd0..78894205666f6bf34f20ef088bb7444ee302ab91 100644
--- a/dap-sdk/crypto/src/ringct20/poly.h
+++ b/dap-sdk/crypto/src/ringct20/poly.h
@@ -1,5 +1,5 @@
-#ifndef POLY_H
-#define POLY_H
+#ifndef POLY_RINGCT20_H
+#define POLY_RINGCT20_H
 
 #include <stdint.h>
 #include <stddef.h>
@@ -10,7 +10,7 @@
  * coeffs[0] + X*coeffs[1] + X^2*xoeffs[2] + ... + X^{n-1}*coeffs[n-1] 
  */
 typedef struct {
-	uint16_t coeffs[NEWHOPE_N];
+    uint16_t coeffs[NEWHOPE_RINGCT20_N];
 } poly_ringct20
 
 #if !defined(_WIN32)
diff --git a/dap-sdk/crypto/src/ringct20/precomp.c b/dap-sdk/crypto/src/ringct20/precomp.c
index d571ba3280b6fb908a03a6f0099e3772dfe0d712..3d3d9e4b234cf00d8d8a018dc07d990ae4f280c3 100644
--- a/dap-sdk/crypto/src/ringct20/precomp.c
+++ b/dap-sdk/crypto/src/ringct20/precomp.c
@@ -73,14 +73,14 @@
  * psis_inv_montgomery = lift(vector(n, i, g^(-(i-1))/n*mont))
 */
 
-#if (NEWHOPE_N == 512)
+#if (NEWHOPE_RINGCT20_N == 512)
 /************************************************************
 * Name:        omegas_bitrev_montgomery
 *
 * Description: Contains powers of nth root of unity in Montgomery 
 *              domain with R=2^18 in bit-reversed order
 ************************************************************/
-uint16_t omegas_bitrev_montgomery[NEWHOPE_N / 2] = {
+uint16_t omegas_bitrev_montgomery[NEWHOPE_RINGCT20_N / 2] = {
     4075, 5315, 7965, 7373, 522, 10120, 9027, 5079, 2344, 1278, 1973, 5574, 1018, 6364, 11248, 8775,
     7500, 7822, 5537, 4749, 8500, 12142, 5456, 7840, 5445, 3860, 4536, 11239, 6171, 8471, 2683, 11099,
     10561, 400, 6137, 7341, 5415, 8646, 6136, 5862, 5529, 5206, 56, 9090, 8724, 11635, 1702, 10302,
@@ -105,7 +105,7 @@ uint16_t omegas_bitrev_montgomery[NEWHOPE_N / 2] = {
 * Description: Contains inverses of powers of nth root of unity 
 *              in Montgomery domain with R=2^18 in bit-reversed order
 ************************************************************/
-uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_N / 2] = {
+uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_RINGCT20_N / 2] = {
     4075, 6974, 4916, 4324, 7210, 3262, 2169, 11767, 3514, 1041, 5925, 11271, 6715, 10316, 11011, 9945,
     1190, 9606, 3818, 6118, 1050, 7753, 8429, 6844, 4449, 6833, 147, 3789, 7540, 6752, 4467, 4789,
     10367, 3879, 2033, 3998, 11316, 1254, 6854, 1359, 3988, 468, 11907, 11973, 8579, 6196, 5446, 6950,
@@ -130,7 +130,7 @@ uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_N / 2] = {
 * Description: Contains powers of nth root of -1 in Montgomery 
 *              domain with R=2^18 in bit-reversed order
 ************************************************************/
-uint16_t psis_bitrev_montgomery[NEWHOPE_N] = {
+uint16_t psis_bitrev_montgomery[NEWHOPE_RINGCT20_N] = {
     4075, 5315, 7965, 7373, 522, 10120, 9027, 5079, 2344, 1278, 1973, 5574, 1018, 6364, 11248, 8775,
     7500, 7822, 5537, 4749, 8500, 12142, 5456, 7840, 5445, 3860, 4536, 11239, 6171, 8471, 2683, 11099,
     10561, 400, 6137, 7341, 5415, 8646, 6136, 5862, 5529, 5206, 56, 9090, 8724, 11635, 1702, 10302,
@@ -171,7 +171,7 @@ uint16_t psis_bitrev_montgomery[NEWHOPE_N] = {
 * Description: Contains inverses of powers of nth  root of -1 
 *              divided by n in Montgomery domain with R=2^18
 ************************************************************/
-uint16_t psis_inv_montgomery[NEWHOPE_N] = {
+uint16_t psis_inv_montgomery[NEWHOPE_RINGCT20_N] = {
     512, 3944, 4267, 5411, 9615, 5900, 3205, 6063, 9261, 2021, 3087, 4770, 1029, 1590, 343, 530,
     8307, 4273, 2769, 9617, 923, 7302, 4404, 2434, 1468, 9004, 8682, 11194, 2894, 11924, 5061, 8071,
     1687, 10883, 8755, 7724, 11111, 6671, 7800, 6320, 2600, 6203, 4963, 6164, 9847, 6151, 11475, 10243,
@@ -206,14 +206,14 @@ uint16_t psis_inv_montgomery[NEWHOPE_N] = {
     7954, 4050, 10844, 1350, 7711, 450, 10763, 150, 7684, 50, 10754, 4113, 7681, 1371, 10753, 457,
 };
 
-#elif (NEWHOPE_N == 1024)
+#elif (NEWHOPE_RINGCT20_N == 1024)
 /************************************************************
 * Name:        omegas_bitrev_montgomery
 *
 * Description: Contains powers of nth root of unity in Montgomery 
 *              domain with R=2^18 in bit-reversed order
 ************************************************************/
-uint16_t omegas_bitrev_montgomery[NEWHOPE_N / 2] = {
+uint16_t omegas_bitrev_montgomery[NEWHOPE_RINGCT20_N / 2] = {
     4075, 6974, 7373, 7965, 3262, 5079, 522, 2169, 6364, 1018, 1041, 8775, 2344, 11011, 5574, 1973,
     4536, 1050, 6844, 3860, 3818, 6118, 2683, 1190, 4789, 7822, 7540, 6752, 5456, 4449, 3789, 12142,
     11973, 382, 3988, 468, 6843, 5339, 6196, 3710, 11316, 1254, 5435, 10930, 3998, 10256, 10367, 3879,
@@ -253,7 +253,7 @@ uint16_t omegas_bitrev_montgomery[NEWHOPE_N / 2] = {
 * Description: Contains inverses of powers of nth root of unity 
 *              in Montgomery domain with R=2^18 in bit-reversed order
 ************************************************************/
-uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_N / 2] = {
+uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_RINGCT20_N / 2] = {
     4075, 5315, 4324, 4916, 10120, 11767, 7210, 9027, 10316, 6715, 1278, 9945, 3514, 11248, 11271, 5925,
     147, 8500, 7840, 6833, 5537, 4749, 4467, 7500, 11099, 9606, 6171, 8471, 8429, 5445, 11239, 7753,
     9090, 12233, 5529, 5206, 10587, 1987, 11635, 3565, 5415, 8646, 6153, 6427, 7341, 6152, 10561, 400,
@@ -293,7 +293,7 @@ uint16_t omegas_inv_bitrev_montgomery[NEWHOPE_N / 2] = {
 * Description: Contains powers of nth root of -1 in Montgomery 
 *              domain with R=2^18 in bit-reversed order
 ************************************************************/
-uint16_t psis_bitrev_montgomery[NEWHOPE_N] = {
+uint16_t psis_bitrev_montgomery[NEWHOPE_RINGCT20_N] = {
     4075, 6974, 7373, 7965, 3262, 5079, 522, 2169, 6364, 1018, 1041, 8775, 2344, 11011, 5574, 1973,
     4536, 1050, 6844, 3860, 3818, 6118, 2683, 1190, 4789, 7822, 7540, 6752, 5456, 4449, 3789, 12142,
     11973, 382, 3988, 468, 6843, 5339, 6196, 3710, 11316, 1254, 5435, 10930, 3998, 10256, 10367, 3879,
@@ -365,7 +365,7 @@ uint16_t psis_bitrev_montgomery[NEWHOPE_N] = {
 * Description: Contains inverses of powers of nth  root of -1 
 *              divided by n in Montgomery domain with R=2^18
 ************************************************************/
-uint16_t psis_inv_montgomery[NEWHOPE_N] = {
+uint16_t psis_inv_montgomery[NEWHOPE_RINGCT20_N] = {
     256, 10570, 1510, 7238, 1034, 7170, 6291, 7921, 11665, 3422, 4000, 2327, 2088, 5565, 795, 10647,
     1521, 5484, 2539, 7385, 1055, 7173, 8047, 11683, 1669, 1994, 3796, 5809, 4341, 9398, 11876, 12230,
     10525, 12037, 12253, 3506, 4012, 9351, 4847, 2448, 7372, 9831, 3160, 2207, 5582, 2553, 7387, 6322,
@@ -432,5 +432,5 @@ uint16_t psis_inv_montgomery[NEWHOPE_N] = {
     8497, 4725, 675, 1852, 10798, 12076, 10503, 3256, 9243, 3076, 2195, 10847, 12083, 10504, 12034, 10497};
 
 #else
-#error "NEWHOPE_N must be either 512 or 1024"
+#error "NEWHOPE_RINGCT20_N must be either 512 or 1024"
 #endif
diff --git a/dap-sdk/crypto/src/ringct20/reduce.c b/dap-sdk/crypto/src/ringct20/reduce.c
index 410a04d48d47f4a7f9c047ff8a460e58a6127da5..d9b53414cd51a2b8818be5642baba83788a3b813 100644
--- a/dap-sdk/crypto/src/ringct20/reduce.c
+++ b/dap-sdk/crypto/src/ringct20/reduce.c
@@ -20,7 +20,7 @@ uint16_t montgomery_reduce_32_16(uint32_t a) {
 
 	u = (a * qinv);
 	u &= ((1 << rlog) - 1);
-	u *= NEWHOPE_Q;
+	u *= NEWHOPE_RINGCT20_Q;
 	a = a + u;
 	return a >> 18;
 }
diff --git a/dap-sdk/crypto/src/ringct20/reduce.h b/dap-sdk/crypto/src/ringct20/reduce.h
index 6f716e34ef9f16d97efc38ecca8d422b9b186ee9..793a6a75d7a81f0bdb342c67cfdfe233294c14f9 100644
--- a/dap-sdk/crypto/src/ringct20/reduce.h
+++ b/dap-sdk/crypto/src/ringct20/reduce.h
@@ -1,5 +1,5 @@
-#ifndef REDUCE_H
-#define REDUCE_H
+#ifndef REDUCE_RINGCT20_H
+#define REDUCE_RINGCT20_H
 
 #include <stdint.h>
 
diff --git a/dap-sdk/crypto/src/ringct20/ring.c b/dap-sdk/crypto/src/ringct20/ring.c
index 211e2ee524bd28cfde83742d38a69d77b563e339..ca36f6dfdb059169ced2222e99fa6b462a33ddeb 100644
--- a/dap-sdk/crypto/src/ringct20/ring.c
+++ b/dap-sdk/crypto/src/ringct20/ring.c
@@ -7,13 +7,13 @@
 
 void LRCT_SampleKey(poly_ringct20 *r, size_t mLen)
 {
-	uint8_t seed[NEWHOPE_SYMBYTES] = { 0 };
+	uint8_t seed[NEWHOPE_RINGCT20_SYMBYTES] = { 0 };
 	size_t i;
 	for ( i = 0; i < mLen; i++)
 	{
 #ifndef NEW_SAMPLE_KEY
-        randombytes(seed, NEWHOPE_SYMBYTES);
-		for (size_t j = 0; j < NEWHOPE_SYMBYTES; j++)
+        randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES);
+		for (size_t j = 0; j < NEWHOPE_RINGCT20_SYMBYTES; j++)
 		{
 
 			r[i].coeffs[j * 8 + 0] = (seed[j] & 0x01);
@@ -25,24 +25,24 @@ void LRCT_SampleKey(poly_ringct20 *r, size_t mLen)
 			r[i].coeffs[j * 8 + 6] = (seed[j] & 0x40)>>6;
 			r[i].coeffs[j * 8 + 7] = (seed[j] & 0x80)>>7;
 		}
-        randombytes(seed, NEWHOPE_SYMBYTES);
-		for (size_t j = 0; j < NEWHOPE_SYMBYTES; j++)
+        randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES);
+		for (size_t j = 0; j < NEWHOPE_RINGCT20_SYMBYTES; j++)
 		{
 
-			r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 0] = (seed[j] & 0x01);
-			r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 1] = (seed[j] & 0x02)>>1;
-			r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 2] = (seed[j] & 0x04)>>2;
-			r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 3] = (seed[j] & 0x08)>>3;
-			r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 4] = (seed[j] & 0x10)>>4;
-			r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 5] = (seed[j] & 0x20)>>5;
-			r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 6] = (seed[j] & 0x40)>>6;
-			r[i].coeffs[NEWHOPE_SYMBYTES * 8 + j * 8 + 7] = (seed[j] & 0x80)>>7;
+			r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 0] = (seed[j] & 0x01);
+			r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 1] = (seed[j] & 0x02)>>1;
+			r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 2] = (seed[j] & 0x04)>>2;
+			r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 3] = (seed[j] & 0x08)>>3;
+			r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 4] = (seed[j] & 0x10)>>4;
+			r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 5] = (seed[j] & 0x20)>>5;
+			r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 6] = (seed[j] & 0x40)>>6;
+			r[i].coeffs[NEWHOPE_RINGCT20_SYMBYTES * 8 + j * 8 + 7] = (seed[j] & 0x80)>>7;
 		}
 #else
-        uint8_t stm[NEWHOPE_N*2];
-        randombytes(stm, NEWHOPE_N*2);
+        uint8_t stm[NEWHOPE_RINGCT20_N*2];
+        randombytes(stm, NEWHOPE_RINGCT20_N*2);
         const int gamma = 8;
-        for(int j = 0; j < NEWHOPE_N; ++j)
+        for(int j = 0; j < NEWHOPE_RINGCT20_N; ++j)
         {
             uint16_t v = stm[2*j];
             v<<= 8;
@@ -50,7 +50,7 @@ void LRCT_SampleKey(poly_ringct20 *r, size_t mLen)
             v %= gamma;
             v -= gamma/2;
             if(v < 0)
-                v += NEWHOPE_Q;
+                v += NEWHOPE_RINGCT20_Q;
             r[i].coeffs[j] = v;
         }
 #endif
@@ -60,15 +60,15 @@ void LRCT_SampleKey(poly_ringct20 *r, size_t mLen)
 void LRCT_Setup(poly_ringct20 *A, poly_ringct20 *H, size_t mLen)
 {
 
-	uint8_t seed[NEWHOPE_SYMBYTES] = { 0 };
+	uint8_t seed[NEWHOPE_RINGCT20_SYMBYTES] = { 0 };
 	size_t i = 0;
 
 	for ( i = 0; i < mLen; i++)
 	{
-        randombytes(seed, NEWHOPE_SYMBYTES);
+        randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES);
 		poly_uniform_ringct20(A + i, seed);
 		poly_serial(A + i);
-        randombytes(seed, NEWHOPE_SYMBYTES);
+        randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES);
 		poly_uniform_ringct20(H + i, seed);
 		poly_serial(H + i);
 	}
@@ -94,8 +94,8 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri
     Keccak_HashInstance ctx;
 
 	unsigned char bHash[32] = { 0 };
-	unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 };
-	unsigned char bt[NEWHOPE_POLYBYTES] = { 0 };
+	unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
+	unsigned char bt[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
 	uint8_t coin = 0;
 	for ( i = 0; i < (mLen+1); i++)
 	{
@@ -112,37 +112,37 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri
 	///////////2.
 	LRCT_Lift(A2qp, A, L + pai, mLen);
     //SHA256_Init(&ctx);
-    Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);
+    Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);
 	for (i = 0; i < w; i++)
 	{
 		poly_tobytes(bpoly, L + i);
-        //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+        //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
     }
     for ( i = 0; i < mLen+1; i++)
     {
         poly_tobytes(bpoly, H2q + i);
-        //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+        //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
     }
     //SHA256_Update(&ctx, msg, msgLen);//msg
     Keccak_HashUpdate(&ctx, msg, msgLen*8);
 
 	LRCT_MatrixMulPoly(&tmp, A2qp, u, mLen + 1);
 	poly_tobytes(bpoly, &tmp);
-    //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//A2qb*U
-    Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+    //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//A2qb*U
+    Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
 
 	LRCT_MatrixMulPoly(&tmp, H2q, u, mLen + 1);
 	poly_tobytes(bpoly, &tmp);
-    //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U
-    Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+    //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U
+    Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
     //SHA256_Final(bHash, &ctx);//C_(pai+1)
     //Keccak_HashFinal(&ctx, bHash);
     Keccak_HashFinal(&ctx, bt);
 
-    //SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bt);
-    //Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYBYTES);
+    //SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bt);
+    //Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYBYTES);
 
     poly_frombytes(&c, bt);
     poly_serial(&c);
@@ -157,21 +157,21 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri
 		}
 		LRCT_Lift(tmp2q, A, L + j, mLen);
         //SHA256_Init(&ctx);
-        Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);
+        Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);
 
 		for (k = 0; k < w; k++)
 		{
 			poly_tobytes(bpoly, L + k);
-            //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+            //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
 
 
 		}
 		for (k = 0; k < mLen+1; k++)
 		{
 			poly_tobytes(bpoly, H2q + k);
-            //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+            //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
 
         }
         //SHA256_Update(&ctx, msg, msgLen);//msg
@@ -180,30 +180,30 @@ void LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_ri
 		
 		for ( k = 0; k < mLen+1; k++)
 		{
-            randombytes(bt, NEWHOPE_POLYBYTES);
+            randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES);
 			poly_frombytes(t[j] + k, bt);
 			poly_serial(t[j] + k);
 		}
 		LRCT_MatrixMulPoly(&tmp, tmp2q, t[j], mLen + 1);
-		poly_constmul(&tmp1, &c, NEWHOPE_Q);
+		poly_constmul(&tmp1, &c, NEWHOPE_RINGCT20_Q);
 		poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q
 		poly_tobytes(bpoly, &tmp);
-        //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+        //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
 
 		LRCT_MatrixMulPoly(&tmp, H2q, t[j], mLen + 1);
 		poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q
 		poly_tobytes(bpoly, &tmp);
-        //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+        //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
         //SHA256_Final(bHash, &ctx);//C_(pai+1)
         //Keccak_HashFinal(&ctx, bHash);
         Keccak_HashFinal(&ctx, bt);
 //        printf("sign bHash======================%d:\n", j);
 //        BytePrint(bHash, 32);
 
-        //SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bt);
-//        Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYBYTES);
+        //SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bt);
+//        Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYBYTES);
 		poly_frombytes(&c, bt);
 		poly_serial(&c);//C_{j+1}
         if (j == (w + pai-1)%w)
@@ -242,7 +242,7 @@ int LRCT_SigVer(const poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *A, po
     //SHA256_CTX ctx;
     Keccak_HashInstance ctx;
 	unsigned char bHash[32] = { 0 };
-	unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 };
+	unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
 	for (i = 0; i < (mLen + 1); i++)
 	{
 		poly_init(H2q + i);
@@ -255,37 +255,37 @@ int LRCT_SigVer(const poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *A, po
 	{
 		LRCT_Lift(A2qp, A, L+i, mLen);
         //SHA256_Init(&ctx);
-        Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);
+        Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);
 		for (k = 0; k < w; k++)
 		{
 			poly_tobytes(bpoly, L + k);
-            //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+            //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
 
         }
 		for (k = 0; k < mLen+1; k++)
 		{
 			poly_tobytes(bpoly, H2q + k);
-            //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+            //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
         }
         //SHA256_Update(&ctx, msg, msgLen);//msg
         Keccak_HashUpdate(&ctx, msg, msgLen*8);
 
-		poly_constmul(&tmp1, &c, NEWHOPE_Q);
+		poly_constmul(&tmp1, &c, NEWHOPE_RINGCT20_Q);
 
 		LRCT_MatrixMulPoly(&tmp, A2qp, t[i], mLen + 1);
 		poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q
 		poly_tobytes(bpoly, &tmp);
-        //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//A2qb*U
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+        //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//A2qb*U
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
 
 		LRCT_MatrixMulPoly(&tmp, H2q, t[i], mLen + 1);
 		poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q
 		poly_serial(&tmp);
 		poly_tobytes(bpoly, &tmp);
-        //SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);
+        //SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);
 
         //SHA256_Final(bHash, &ctx);//C_(pai+1)
         //Keccak_HashFinal(&ctx, bHash);
@@ -293,8 +293,8 @@ int LRCT_SigVer(const poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *A, po
 //        printf("sign bHash======================%d:\n", j);
 //        BytePrint(bHash, 32);
 
-        //SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bpoly);
-        //Keccak_256KDF(bHash, 32, bpoly, NEWHOPE_POLYBYTES);
+        //SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bpoly);
+        //Keccak_256KDF(bHash, 32, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
         poly_frombytes(&c, bpoly);
 		poly_serial(&c);
 	}
@@ -346,15 +346,15 @@ int LRCT_Verify(poly_ringct20 *c1, poly_ringct20 **t, poly_ringct20 *h, poly_rin
 /////multiple
 void MIMO_LRCT_Setup(poly_ringct20 *A, poly_ringct20 *H, size_t mLen)
 {
-	uint8_t seed[NEWHOPE_SYMBYTES] = { 0 };
+	uint8_t seed[NEWHOPE_RINGCT20_SYMBYTES] = { 0 };
 	size_t i = 0;
 
 	for (i = 0; i < mLen; i++)
 	{
-        randombytes(seed, NEWHOPE_SYMBYTES);
+        randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES);
 		poly_uniform_ringct20(A + i, seed);
 		poly_serial(A + i);
-        randombytes(seed, NEWHOPE_SYMBYTES);
+        randombytes(seed, NEWHOPE_RINGCT20_SYMBYTES);
 		poly_uniform_ringct20(H + i, seed);
 		poly_serial(H + i);
 	}
@@ -376,27 +376,27 @@ void MIMO_LRCT_Hash(int *pTable, poly_ringct20 *cn, poly_ringct20 *a, poly_ringc
     Keccak_HashInstance ctx;
 
 	unsigned char bHash[32] = { 0 };
-	unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 };
-    unsigned char bt[NEWHOPE_POLYCOMPRESSEDBYTES] = { 0 };
+	unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
+    unsigned char bt[NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES] = { 0 };
 	int i;
-	int tmpTable[NEWHOPE_N] = { 0 };
-	for ( i = 0; i < NEWHOPE_N; i++)
+	int tmpTable[NEWHOPE_RINGCT20_N] = { 0 };
+	for ( i = 0; i < NEWHOPE_RINGCT20_N; i++)
 	{
 		tmpTable[i] = i;
 	}
-    Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYCOMPRESSEDBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx);
+    Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx);
 	////H(L)
 	for (i = 0; i < beta; i++)
 	{
 		poly_tobytes(bpoly, cn + i);
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 		poly_tobytes(bpoly, a + i);
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 		poly_tobytes(bpoly, ia + i);
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 	}///H_1(L||)
     //Keccak_HashFinal(&ctx, bHash);//SHA256_Final(bHash, &ctx);//C_(pai)
-    //Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYCOMPRESSEDBYTES);//CHECKIT//SHA256_KDF(bHash, 32, NEWHOPE_POLYCOMPRESSEDBYTES, bt);
+    //Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES);//CHECKIT//SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYCOMPRESSEDBYTES, bt);
     Keccak_HashFinal(&ctx, bt);
 
 }
@@ -420,8 +420,8 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL
 	poly_ringct20 tmp, tmp1, ctmp;
 	poly_ringct20 c, cpai;
 	unsigned char bHash[32] = { 0 };
-	unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 };
-	unsigned char bt[NEWHOPE_POLYBYTES] = { 0 };
+	unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
+	unsigned char bt[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
 	uint8_t coin = 0;
 	int i = 0;
 	int k = 0;
@@ -440,12 +440,12 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL
 		poly_init(u+i);
 	}
 	/////
-    Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx);
+    Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx);
 	////H(L)
 	for ( i = 0; i < wLen*NLen; i++)
 	{
 		poly_tobytes(bpoly, LList + i);
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 	}///H_1(L||)
 	///H(L||H2q..)
 	for (i = 0; i < NLen; i++)
@@ -455,7 +455,7 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL
 		for (k = 0; k < mLen + 1; k++)
 		{
 			poly_tobytes(bpoly, H2q + i * (mLen + 1) + k);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 		}
 	}
 	////H(L||...||mu)
@@ -465,7 +465,7 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL
 	{
 		for (k = 0; k < mLen + 1; k++)
 		{
-            randombytes(bt, NEWHOPE_POLYBYTES);
+            randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES);
 			poly_frombytes(u + i * (mLen + 1) + k, bt);
 			poly_serial(u + i * (mLen + 1) + k);
 		}
@@ -478,12 +478,12 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL
 
 		LRCT_MatrixMulPoly(&tmp1, H2q + i * (mLen + 1), u+ i * (mLen + 1), mLen + 1);
 		poly_tobytes(bpoly, &tmp);
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 		poly_tobytes(bpoly, &tmp1);
-        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+        Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 	}
     //Keccak_HashFinal(&ctx, bHash);//Keccak_HashFinal(&ctx, bHash);//SHA256_Final(bHash, &ctx);//C_(pai)
-    //Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bt);
+    //Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bt);
     Keccak_HashFinal(&ctx, bt);
 	poly_frombytes(&c, bt);
 	poly_serial(&c);
@@ -497,30 +497,30 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL
 			poly_cofcopy(c1, &ctmp);
 		}
 
-        Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx);
+        Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx);
 		////H_1(L||)
 		for (j = 0; j < wLen*NLen; j++)
 		{
 			poly_tobytes(bpoly, LList + j);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 		}
 		for (j = 0; j < NLen; j++)
 		{
 			for (k = 0; k < mLen + 1; k++)
 			{
 				poly_tobytes(bpoly, H2q + j * (mLen + 1) + k);
-                Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+                Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 			}
 		}//H_1(L||H2q)
         Keccak_HashUpdate(&ctx, msg, msgLen*8);//SHA256_Update(&ctx, msg, msgLen);//H(L||...||mu)
 
-		poly_constmul(&tmp1, &ctmp, NEWHOPE_Q);//qC_i
+		poly_constmul(&tmp1, &ctmp, NEWHOPE_RINGCT20_Q);//qC_i
 		for (j = 0; j < NLen; j++)
 		{
 		   LRCT_Lift(tmp2q, A, LList + j * wLen + index, mLen);
 			for (k = 0; k < mLen + 1; k++)
 			{
-                randombytes(bt, NEWHOPE_POLYBYTES);
+                randombytes(bt, NEWHOPE_RINGCT20_POLYBYTES);
 				poly_frombytes(tList + j * wLen*(mLen + 1) + index * (mLen + 1) + k, bt);
 				poly_serial(tList + j * wLen*(mLen + 1) + index * (mLen+1)+ k);
 			}
@@ -528,15 +528,15 @@ void MIMO_LRCT_SigGen(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hL
 		
 			poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q
 			poly_tobytes(bpoly, &tmp);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//
 			////////
 			LRCT_MatrixMulPoly(&tmp, H2q + j * (mLen + 1), tList + j * wLen*(mLen + 1) + index * (mLen + 1), mLen + 1);
 			poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q
 			poly_tobytes(bpoly, &tmp);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U
 		}
         //Keccak_HashFinal(&ctx, bHash);//SHA256_Final(bHash, &ctx);//
-        //Keccak_256KDF(bHash, 32, bt, NEWHOPE_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bt);
+        //Keccak_256KDF(bHash, 32, bt, NEWHOPE_RINGCT20_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bt);
         Keccak_HashFinal(&ctx, bt);
 		poly_frombytes(&ctmp, bt);
 		poly_serial(&ctmp);//C_{index+1}
@@ -582,7 +582,7 @@ int MIMO_LRCT_SigVer(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hLi
     Keccak_HashInstance ctx;
 
 	unsigned char bHash[32] = { 0 };
-	unsigned char bpoly[NEWHOPE_POLYBYTES] = { 0 };
+	unsigned char bpoly[NEWHOPE_RINGCT20_POLYBYTES] = { 0 };
 	/////////
 	poly_cofcopy(&ctmp, c1);
 	for (i = 0; i < NLen; i++)
@@ -592,38 +592,38 @@ int MIMO_LRCT_SigVer(poly_ringct20 *c1, poly_ringct20 *tList, poly_ringct20 *hLi
 	//////
 	for (i = 0; i < wLen; i++)
 	{
-        Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx);
+        Keccak_HashInitialize_SHA3_KDF(&ctx, NEWHOPE_RINGCT20_POLYBYTES);//Keccak_HashInitialize_SHA3_256(&ctx);//SHA256_Init(&ctx);
 		for (k = 0; k < wLen*NLen; k++)
 		{
 			poly_tobytes(bpoly, LList + k);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 		}///H_1(L||)
 		for (j = 0; j< NLen; j++)
 		{
 			for (k = 0; k < (mLen + 1); k++)
 			{
 				poly_tobytes(bpoly, H2q + j * (mLen + 1) + k);
-                Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+                Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 			}
 		}
         Keccak_HashUpdate(&ctx, msg, msgLen*8);//Keccak_HashUpdate(&ctx, msg, msgLen*8);//SHA256_Update(&ctx, msg, msgLen);//H(L||...||mu)
 
-		poly_constmul(&tmp1, &ctmp, NEWHOPE_Q);//qC_i
+		poly_constmul(&tmp1, &ctmp, NEWHOPE_RINGCT20_Q);//qC_i
 		for ( j = 0; j < NLen; j++)
 		{
 			LRCT_Lift(A2qp, A, LList + j * wLen + i , mLen);
 			LRCT_MatrixMulPoly(&tmp, A2qp, tList + j * wLen*(mLen + 1) + i * (mLen + 1), mLen + 1);
 			poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q
 			poly_tobytes(bpoly, &tmp);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);
 			
 			LRCT_MatrixMulPoly(&tmp, H2q + j * (mLen + 1), tList + j * wLen*(mLen + 1) + i* (mLen + 1), mLen + 1);
 			poly_add_ringct20(&tmp, &tmp, &tmp1);//(+ qC_i)% Q
 			poly_tobytes(bpoly, &tmp);
-            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_POLYBYTES);//H2q*U
+            Keccak_HashUpdate(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES*8);//SHA256_Update(&ctx, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//H2q*U
 		}
         //Keccak_HashFinal(&ctx, bHash);//SHA256_Final(bHash, &ctx);//
-        //Keccak_256KDF(bHash, 32, bpoly, NEWHOPE_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_POLYBYTES, bpoly);
+        //Keccak_256KDF(bHash, 32, bpoly, NEWHOPE_RINGCT20_POLYBYTES);//SHA256_KDF(bHash, 32, NEWHOPE_RINGCT20_POLYBYTES, bpoly);
         Keccak_HashFinal(&ctx, bpoly);
 		poly_frombytes(&ctmp, bpoly);
 		poly_serial(&ctmp);//
@@ -646,14 +646,14 @@ void LRCT_Lift(poly_ringct20 *LA, poly_ringct20 *A, poly_ringct20 *a, size_t mLe
 	int16_t tmp = 0;
 	for ( i = 0; i < mLen; i++)
 	{
-		for ( j = 0; j < NEWHOPE_N; j++)
+		for ( j = 0; j < NEWHOPE_RINGCT20_N; j++)
 		{
 			LA[i].coeffs[j] = 2 * A[i].coeffs[j];
 		}	
 	}
-	for ( j = 0; j < NEWHOPE_N; j++)
+	for ( j = 0; j < NEWHOPE_RINGCT20_N; j++)
 	{
-		LA[mLen].coeffs[j] = coeff_freeze2Q(NEWHOPE_2Q+ NEWHOPE_Q - a->coeffs[j] * 2);
+		LA[mLen].coeffs[j] = coeff_freeze2Q(NEWHOPE_RINGCT20_2Q+ NEWHOPE_RINGCT20_Q - a->coeffs[j] * 2);
 	}
 }
 
@@ -667,14 +667,14 @@ void LRCT_Com(poly_ringct20 *r, poly_ringct20 *A, poly_ringct20 *sk, size_t mLen
 	for (j = 0; j < msglen; j++)
 	{
 
-		r->coeffs[j * 8 + 0] = (tmp.coeffs[j * 8 + 0] + (bMessage[j]&0x01))%NEWHOPE_Q;
-		r->coeffs[j * 8 + 1] = (tmp.coeffs[j * 8 + 1] + ((bMessage[j] & 0x02) >> 1)) % NEWHOPE_Q;
-		r->coeffs[j * 8 + 2] = (tmp.coeffs[j * 8 + 2] + ((bMessage[j] & 0x04) >> 2)) % NEWHOPE_Q;
-		r->coeffs[j * 8 + 3] = (tmp.coeffs[j * 8 + 3] + ((bMessage[j] & 0x08) >> 3)) % NEWHOPE_Q;
-		r->coeffs[j * 8 + 4] = (tmp.coeffs[j * 8 + 4] + ((bMessage[j] & 0x10) >> 4)) % NEWHOPE_Q;
-		r->coeffs[j * 8 + 5] = (tmp.coeffs[j * 8 + 5] + ((bMessage[j] & 0x20) >> 5)) % NEWHOPE_Q;
-		r->coeffs[j * 8 + 6] = (tmp.coeffs[j * 8 + 6] + ((bMessage[j] & 0x40) >> 6)) % NEWHOPE_Q;
-		r->coeffs[j * 8 + 7] = (tmp.coeffs[j * 8 + 7] + ((bMessage[j] & 0x80) >> 7)) % NEWHOPE_Q;
+		r->coeffs[j * 8 + 0] = (tmp.coeffs[j * 8 + 0] + (bMessage[j]&0x01))%NEWHOPE_RINGCT20_Q;
+		r->coeffs[j * 8 + 1] = (tmp.coeffs[j * 8 + 1] + ((bMessage[j] & 0x02) >> 1)) % NEWHOPE_RINGCT20_Q;
+		r->coeffs[j * 8 + 2] = (tmp.coeffs[j * 8 + 2] + ((bMessage[j] & 0x04) >> 2)) % NEWHOPE_RINGCT20_Q;
+		r->coeffs[j * 8 + 3] = (tmp.coeffs[j * 8 + 3] + ((bMessage[j] & 0x08) >> 3)) % NEWHOPE_RINGCT20_Q;
+		r->coeffs[j * 8 + 4] = (tmp.coeffs[j * 8 + 4] + ((bMessage[j] & 0x10) >> 4)) % NEWHOPE_RINGCT20_Q;
+		r->coeffs[j * 8 + 5] = (tmp.coeffs[j * 8 + 5] + ((bMessage[j] & 0x20) >> 5)) % NEWHOPE_RINGCT20_Q;
+		r->coeffs[j * 8 + 6] = (tmp.coeffs[j * 8 + 6] + ((bMessage[j] & 0x40) >> 6)) % NEWHOPE_RINGCT20_Q;
+		r->coeffs[j * 8 + 7] = (tmp.coeffs[j * 8 + 7] + ((bMessage[j] & 0x80) >> 7)) % NEWHOPE_RINGCT20_Q;
 	}
 
 }
@@ -688,14 +688,14 @@ void LRCT_nttCom(poly_ringct20 *r, poly_ringct20 *A, poly_ringct20 *sk, size_t m
 	for (j = 0; j < msglen; j++)
 	{
 
-		pMess.coeffs[j * 8 + 0] =  (bMessage[j] & 0x01) % NEWHOPE_Q;
-		pMess.coeffs[j * 8 + 1] = (((bMessage[j] & 0x02) >> 1)) % NEWHOPE_Q;
-		pMess.coeffs[j * 8 + 2] = (((bMessage[j] & 0x04) >> 2)) % NEWHOPE_Q;
-		pMess.coeffs[j * 8 + 3] = ( ((bMessage[j] & 0x08) >> 3)) % NEWHOPE_Q;
-		pMess.coeffs[j * 8 + 4] = ( ((bMessage[j] & 0x10) >> 4)) % NEWHOPE_Q;
-		pMess.coeffs[j * 8 + 5] = ( ((bMessage[j] & 0x20) >> 5)) % NEWHOPE_Q;
-		pMess.coeffs[j * 8 + 6] = (((bMessage[j] & 0x40) >> 6)) % NEWHOPE_Q;
-		pMess.coeffs[j * 8 + 7] = ( ((bMessage[j] & 0x80) >> 7)) % NEWHOPE_Q;
+		pMess.coeffs[j * 8 + 0] =  (bMessage[j] & 0x01) % NEWHOPE_RINGCT20_Q;
+		pMess.coeffs[j * 8 + 1] = (((bMessage[j] & 0x02) >> 1)) % NEWHOPE_RINGCT20_Q;
+		pMess.coeffs[j * 8 + 2] = (((bMessage[j] & 0x04) >> 2)) % NEWHOPE_RINGCT20_Q;
+		pMess.coeffs[j * 8 + 3] = ( ((bMessage[j] & 0x08) >> 3)) % NEWHOPE_RINGCT20_Q;
+		pMess.coeffs[j * 8 + 4] = ( ((bMessage[j] & 0x10) >> 4)) % NEWHOPE_RINGCT20_Q;
+		pMess.coeffs[j * 8 + 5] = ( ((bMessage[j] & 0x20) >> 5)) % NEWHOPE_RINGCT20_Q;
+		pMess.coeffs[j * 8 + 6] = (((bMessage[j] & 0x40) >> 6)) % NEWHOPE_RINGCT20_Q;
+		pMess.coeffs[j * 8 + 7] = ( ((bMessage[j] & 0x80) >> 7)) % NEWHOPE_RINGCT20_Q;
 	}
 	poly_ntt_ringct20(&pMess);
 	poly_add_ringct20(r, &tmp, &pMess);
@@ -752,7 +752,7 @@ void LRCT_ConstMulMatrix(poly_ringct20 *r, const poly_ringct20 *A, uint16_t cof,
 	size_t i, j;
 	for (i = 0; i < mLen; i++)
 	{
-		for ( j = 0; j < NEWHOPE_N; j++)
+		for ( j = 0; j < NEWHOPE_RINGCT20_N; j++)
 		{
 			r[i].coeffs[j] = cof * A[i].coeffs[j];
 		}
diff --git a/dap-sdk/crypto/src/ringct20/ring.h b/dap-sdk/crypto/src/ringct20/ring.h
index 665110d5fa70dc3b3bb930a4271eccf0c07f6f74..63c94d7dce4b112ad4bfcb4eaa2dbf87ac7429ef 100644
--- a/dap-sdk/crypto/src/ringct20/ring.h
+++ b/dap-sdk/crypto/src/ringct20/ring.h
@@ -1,5 +1,5 @@
-#ifndef RING_H
-#define RING_H
+#ifndef RING_RINGCT20_H
+#define RING_RINGCT20_H
 
 
 #include "params.h"
diff --git a/dap-sdk/crypto/src/ringct20/ringct20_params.c b/dap-sdk/crypto/src/ringct20/ringct20_params.c
index 3a4021c617fe0631dc3a00948b3e7ebe897ac03d..a0642d9046d1c21b3f76c2f9be1324e9d44642b6 100644
--- a/dap-sdk/crypto/src/ringct20/ringct20_params.c
+++ b/dap-sdk/crypto/src/ringct20/ringct20_params.c
@@ -1,22 +1,22 @@
 
 #include "ringct20_params.h"
 
-#if (NEWHOPE_N == 512)
-uint8_t A_bpoly_MINSEC[5*NEWHOPE_POLYBYTES] = {
+#if (NEWHOPE_RINGCT20_N == 512)
+uint8_t A_bpoly_MINSEC[5*NEWHOPE_RINGCT20_POLYBYTES] = {
 0x8c, 0x0b, 0x5e, 0x30, 0xfa, 0xca, 0x34, 0x37, 0xad, 0xd5, 0x42, 0x32, 0xc8, 0x53, 0x9d, 0x15, 0x35, 0xa6, 0x4b, 0xe8, 0x51, 0x40, 0x85, 0x18, 0xd7, 0x7e, 0xb0, 0x7a, 0x34, 0x44, 0xc7, 0xb8, 0x28, 0xe2, 0x8e, 0xbc, 0x2f, 0xe8, 0xba, 0x4d, 0x7d, 0xb1, 0x8e, 0xa0, 0x59, 0x71, 0x77, 0xa4, 0x74, 0x76, 0x1e, 0x4a, 0x84, 0xcc, 0x5d, 0x58, 0x38, 0x17, 0x5a, 0x17, 0xf1, 0xc4, 0xb6, 0x98, 0xc3, 0x2d, 0xf2, 0x08, 0xf9, 0x5c, 0x2d, 0x61, 0xf4, 0xf3, 0x94, 0xf2, 0x3c, 0x94, 0x2e, 0x6b, 0x8a, 0x1e, 0xca, 0x17, 0xc8, 0x54, 0xec, 0xf8, 0x57, 0x7d, 0x38, 0xda, 0x5a, 0x5b, 0x44, 0xb3, 0xb9, 0x0c, 0xe6, 0xc4, 0xdd, 0x32, 0x61, 0x0d, 0x7a, 0x3d, 0x54, 0xa2, 0x94, 0x2b, 0xf9, 0xaf, 0xd3, 0x97, 0xc1, 0xd7, 0x09, 0xa1, 0x8c, 0xa6, 0x46, 0x38, 0x9a, 0x17, 0x05, 0x95, 0x8d, 0x0e, 0x70, 0x7a, 0xef, 0x9e, 0x05, 0xb1, 0xdd, 0x2c, 0x25, 0xcc, 0x94, 0x9b, 0x1b, 0x90, 0x44, 0x56, 0x6a, 0xa4, 0xb0, 0xe1, 0xc7, 0x43, 0x20, 0xcc, 0xa5, 0x72, 0x21, 0xac, 0xee, 0x01, 0x53, 0x76, 0x50, 0xb6, 0x20, 0x35, 0x81, 0x0a, 0xa2, 0x18, 0x95, 0x2d, 0xe2, 0xb2, 0x55, 0xaa, 0x43, 0xa7, 0xd7, 0x24, 0x62, 0x89, 0xe9, 0x37, 0x99, 0xd7, 0x8c, 0x16, 0x25, 0xd5, 0x4f, 0x1e, 0x1b, 0xf6, 0xca, 0x99, 0x1a, 0x9f, 0x62, 0xd6, 0x96, 0xeb, 0x0c, 0x35, 0x86, 0xa0, 0x1b, 0x2c, 0x4b, 0xb7, 0x16, 0x25, 0xe5, 0xcb, 0x3c, 0xf5, 0xa2, 0x19, 0x0f, 0x90, 0x97, 0x72, 0xd6, 0xc8, 0x4a, 0x45, 0x76, 0x2c, 0x27, 0xd5, 0x52, 0xc9, 0x55, 0x38, 0xd2, 0x43, 0x82, 0x76, 0xf9, 0x68, 0x98, 0xc3, 0xb4, 0xc6, 0x74, 0xa5, 0x91, 0xd9, 0xc6, 0x4b, 0xb6, 0x60, 0x6d, 0x03, 0x8e, 0x53, 0x95, 0xb9, 0x5d, 0x58, 0x53, 0x98, 0x88, 0x03, 0xab, 0x0e, 0x04, 0x35, 0x03, 0x97, 0xa4, 0x63, 0x0c, 0xa2, 0x51, 0xb5, 0x14, 0x31, 0x7a, 0x0b, 0xc0, 0x0b, 0x4f, 0x03, 0x14, 0x36, 0x06, 0xfc, 0x33, 0xbc, 0xa9, 0x0d, 0x45, 0xec, 0x6a, 0x31, 0x34, 0x6e, 0x05, 0x0a, 0x3e, 0xb2, 0xb2, 0x54, 0xc4, 0x1e, 0x4a, 0x27, 0x2d, 0x06, 0x2e, 0xd6, 0x25, 0x37, 0x81, 0x76, 0x88, 0x90, 0x2e, 0xa4, 0x0b, 0x69, 0xf9, 0x64, 0x34, 0xde, 0x80, 0xf0, 0x5c, 0x41, 0x38, 0xa7, 0x6e, 0x72, 0xd3, 0xa3, 0x6a, 0xb8, 0x47, 0x9d, 0x27, 0x27, 0x9c, 0xc5, 0x9f, 0x9e, 0xd0, 0x54, 0x2b, 0xcd, 0xa5, 0x67, 0x37, 0x48, 0x20, 0x64, 0x4b, 0xe0, 0x49, 0x28, 0x49, 0xce, 0x48, 0x9a, 0x5d, 0x60, 0x33, 0xd3, 0x85, 0x41, 0x26, 0xdd, 0xb2, 0xae, 0x5a, 0x73, 0x58, 0x6a, 0x26, 0xb1, 0xf7, 0xa2, 0x75, 0xd8, 0xa7, 0x85, 0x00, 0xee, 0x85, 0x95, 0xa6, 0x7c, 0x62, 0x7a, 0x89, 0x29, 0x22, 0xba, 0xe1, 0xb9, 0x2f, 0x76, 0x08, 0x80, 0xe5, 0x45, 0x4c, 0x31, 0xbc, 0xa5, 0x5f, 0x80, 0x84, 0xc8, 0x26, 0xd5, 0xae, 0xd7, 0x94, 0x12, 0xca, 0xac, 0x04, 0x20, 0xec, 0x90, 0x26, 0xb4, 0xa4, 0x5d, 0x4c, 0x9e, 0xd7, 0xac, 0xfe, 0x78, 0x43, 0xe0, 0x76, 0xdb, 0x25, 0x5c, 0xba, 0x62, 0x9b, 0x8c, 0x31, 0x4f, 0x0a, 0x3e, 0x2b, 0x83, 0xc0, 0x39, 0x7c, 0xe4, 0x82, 0x80, 0x0c, 0x10, 0x39, 0xbb, 0xed, 0x62, 0xc8, 0x1f, 0xf8, 0x8b, 0x9c, 0x65, 0x20, 0xaa, 0xae, 0x1c, 0xf8, 0x0b, 0xc5, 0x9b, 0x38, 0xc5, 0x8d, 0xdb, 0xe7, 0x8e, 0xbd, 0xd1, 0x06, 0xbd, 0xb1, 0x20, 0xb4, 0x90, 0xff, 0x57, 0x39, 0x12, 0x82, 0xf2, 0x40, 0xd3, 0x50, 0x40, 0x2a, 0xe8, 0x74, 0x91, 0xcf, 0x64, 0x95, 0x04, 0x2c, 0x5e, 0x6a, 0x99, 0x65, 0xa9, 0xb6, 0x39, 0x70, 0xaf, 0xd4, 0x21, 0xc8, 0xe5, 0x1f, 0xe2, 0x3b, 0x37, 0xde, 0xb3, 0x21, 0xf2, 0x71, 0xa6, 0x31, 0x66, 0x21, 0x26, 0x5e, 0xf4, 0xba, 0xe0, 0xe2, 0x41, 0x12, 0xb7, 0x5e, 0x6b, 0xe6, 0x27, 0x29, 0x7a, 0x48, 0x6e, 0x7b, 0xf1, 0xd8, 0xf3, 0x98, 0xec, 0x66, 0x0f, 0x54, 0x4a, 0x8a, 0x30, 0xb1, 0x5c, 0xb0, 0x03, 0x82, 0xab, 0xa8, 0xe8, 0xec, 0x61, 0xc8, 0x5b, 0xd3, 0x33, 0xa7, 0x8c, 0x38, 0x40, 0x0b, 0xe2, 0x09, 0x37, 0xe2, 0xa9, 0xb8, 0x04, 0xdf, 0xf6, 0x3d, 0x96, 0x47, 0xbc, 0x93, 0x28, 0xd8, 0x62, 0xec, 0x89, 0x42, 0xce, 0x15, 0xf0, 0x81, 0x99, 0x01, 0x8e, 0x5d, 0x98, 0x67, 0xeb, 0x28, 0x3c, 0xdf, 0xef, 0x82, 0x08, 0x87, 0x7d, 0x3e, 0xe9, 0x85, 0x03, 0x57, 0xe4, 0x0c, 0x5f, 0x82, 0x6c, 0xfe, 0x99, 0xa4, 0x40, 0x76, 0x3d, 0x17, 0x79, 0x5a, 0xed, 0x19, 0x98, 0x53, 0x58, 0x5f, 0x63, 0xfa, 0x5c, 0x67, 0x75, 0x9e, 0x4f, 0xd9, 0x64, 0x6c, 0x61, 0x59, 0x87, 0x27, 0xa3, 0x5d, 0x9c, 0xbd, 0xad, 0x9b, 0xd0, 0x45, 0x40, 0xa2, 0x5d, 0xb4, 0xdc, 0x7b, 0x91, 0x2b, 0x1e, 0x91, 0x4a, 0xc6, 0xf7, 0x68, 0xbf, 0x55, 0x23, 0xe6, 0xad, 0x19, 0x07, 0xc5, 0x20, 0x73, 0xb1, 0x85, 0xb6, 0x02, 0x87, 0x95, 0xbd, 0xfe, 0xaf, 0x66, 0x57, 0x05, 0x69, 0x9b, 0xa5, 0xe0, 0x40, 0x39, 0xe0, 0x26, 0x33, 0xb0, 0xaf, 0x86, 0xb2, 0x79, 0x72, 0xbe, 0x82, 0x6b, 0x59, 0xda, 0x6f, 0xa6, 0xa3, 0x52, 0xe2, 0x05, 0x89, 0xea, 0x1c, 0x28, 0x9a, 0x6a, 0x71, 0x82, 0xdd, 0x94, 0x62, 0xcd, 0x50, 0x2c, 0x0a, 0xd4, 0xa8, 0x2c, 0x36, 0xcc, 0x3f, 0x53, 0xa3, 0xb9, 0x26, 0xd7, 0x02, 0x90, 0xf2, 0xdb, 0xc9, 0x28, 0x1c, 0xab, 0xc0, 0x10, 0x98, 0x36, 0x0f, 0xa3, 0xa3, 0x5d, 0xd4, 0x4f, 0x09, 0x8a, 0x81, 0xa6, 0xba, 0xe4, 0x17, 0x60, 0x34, 0xc9, 0x6d, 0xbf, 0xcb, 0x61, 0x9a, 0x1a, 0xf0, 0x10, 0xac, 0xc2, 0xe1, 0x3a, 0x1e, 0x8b, 0x2e, 0xd1, 0x5b, 0x5a, 0xd2, 0x76, 0xe4, 0x29, 0xe6, 0xa4, 0x42, 0x94, 0x85, 0x9b, 0x5f, 0x99, 0xb4, 0x0b, 0x66, 0xb7, 0x11, 0xdc, 0x47, 0xd7, 0x7b, 0x9e, 0x61, 0x96, 0x09, 0x42, 0x8b, 0x89, 0xee, 0x33, 0x40, 0xdc, 0xcf, 0x3b, 0xda, 0xc5, 0x41, 0x35, 0x00, 0xb3, 0xeb, 0x93, 0x88, 0x7f, 0xac, 0xea, 0x2d, 0xcb, 0xfa, 0xf4, 0x3e, 0xc1, 0x6b, 0xc3, 0x60, 0xa3, 0xc5, 0x73, 0x02, 0xa6, 0x1b, 0x37, 0xcd, 0x55, 0x18, 0xb2, 0xc3, 0xa7, 0x8b, 0x1d, 0x61, 0x81, 0x3c, 0x23, 0x3e, 0xf3, 0x1c, 0x86, 0x17, 0xb9, 0x80, 0xaf, 0xb2, 0xfa, 0x30, 0x68, 0x13, 0x23, 0x98, 0x38, 0x06, 0x5e, 0xa0,
 0x1c, 0xcd, 0xbf, 0x53, 0x40, 0xe8, 0x51, 0xd2, 0xad, 0xde, 0xa3, 0xbb, 0xde, 0x5c, 0xeb, 0x54, 0x01, 0x2b, 0x4f, 0x55, 0x6c, 0xb5, 0x40, 0xc4, 0x56, 0xc1, 0x6e, 0x12, 0x74, 0xd8, 0x55, 0x96, 0x87, 0x95, 0xa0, 0x23, 0xd6, 0x3c, 0x74, 0xc1, 0xf8, 0xa7, 0x82, 0xaf, 0x88, 0xd3, 0x75, 0xf6, 0x08, 0xd8, 0x9e, 0xf1, 0x83, 0xb6, 0x20, 0xb9, 0x3d, 0xd0, 0xb1, 0x66, 0x85, 0x3a, 0xbc, 0xf0, 0x2a, 0x70, 0x17, 0x10, 0x48, 0x25, 0x23, 0x42, 0xe2, 0x47, 0xeb, 0x18, 0x4e, 0xaa, 0x90, 0x12, 0x66, 0xa8, 0xf0, 0x8b, 0xc9, 0x00, 0xc6, 0x58, 0x4d, 0xf1, 0xa1, 0x59, 0x17, 0xc8, 0x88, 0x07, 0xa0, 0x74, 0x9a, 0x27, 0x81, 0xf6, 0x7d, 0x71, 0xbb, 0x26, 0x5a, 0x77, 0xa6, 0x85, 0x11, 0x64, 0x10, 0x17, 0x3e, 0xd2, 0x31, 0x04, 0x4e, 0x2a, 0x81, 0x9c, 0x07, 0xac, 0x0c, 0x5d, 0xf8, 0xa7, 0xba, 0x17, 0xd3, 0xb2, 0xb4, 0xcd, 0x82, 0x33, 0x96, 0xfd, 0x52, 0x7e, 0x33, 0xee, 0x54, 0x0a, 0xbc, 0x3d, 0x3a, 0x17, 0x61, 0x19, 0x3b, 0xca, 0xb6, 0x81, 0xef, 0x26, 0xda, 0x7b, 0x43, 0xd2, 0x56, 0x56, 0xdd, 0x54, 0xf3, 0x06, 0x58, 0x3f, 0x8f, 0x1a, 0x1c, 0xb3, 0x11, 0x20, 0xbe, 0x2a, 0x26, 0xa5, 0xf9, 0xaf, 0x29, 0x7b, 0x84, 0x8c, 0x39, 0x80, 0xfe, 0x86, 0x90, 0x79, 0x4c, 0xea, 0xb6, 0x04, 0xba, 0xb8, 0x9a, 0x6e, 0x5a, 0x45, 0xda, 0xfc, 0x38, 0xc3, 0xd1, 0xe2, 0x87, 0x14, 0xe4, 0x41, 0xd2, 0x9b, 0x5f, 0x48, 0x7d, 0x80, 0x9f, 0x18, 0x93, 0xf6, 0xa7, 0x4b, 0x20, 0x34, 0xd8, 0x1d, 0x75, 0xca, 0xba, 0x35, 0x7f, 0x1a, 0xa6, 0x8d, 0x1b, 0xd7, 0x50, 0x76, 0x09, 0x2b, 0x14, 0x45, 0x79, 0x04, 0x70, 0x0b, 0xdb, 0x06, 0xf8, 0x50, 0xe5, 0x63, 0x7c, 0x2d, 0x09, 0x37, 0x91, 0xb5, 0x31, 0xc3, 0x50, 0xf3, 0xd8, 0x43, 0x2e, 0x31, 0x18, 0x9a, 0xa7, 0x52, 0xb2, 0xfa, 0x43, 0x77, 0x4d, 0x70, 0x08, 0xc3, 0x49, 0x59, 0x13, 0x55, 0x41, 0xd4, 0x47, 0x12, 0x5c, 0x6c, 0xae, 0xa6, 0x66, 0x79, 0xd0, 0xb3, 0xdc, 0x85, 0x65, 0x14, 0x17, 0xe4, 0x79, 0x77, 0xa2, 0x3f, 0x27, 0x16, 0x05, 0x15, 0x75, 0xe8, 0x6c, 0xb1, 0x31, 0x30, 0x4c, 0xcb, 0x52, 0xda, 0x56, 0x7a, 0xd6, 0x2c, 0x9c, 0xec, 0x3c, 0x52, 0x52, 0x79, 0x66, 0x10, 0xe6, 0xe7, 0xe7, 0xf2, 0x88, 0x9e, 0x82, 0x0d, 0x38, 0xb7, 0x50, 0x54, 0xba, 0xed, 0x85, 0xd9, 0x54, 0xb7, 0x72, 0x2a, 0x9d, 0x9e, 0x11, 0x62, 0x6a, 0x55, 0x5c, 0xd1, 0xef, 0x49, 0xfb, 0x73, 0xf2, 0x81, 0x2b, 0x4c, 0x49, 0x82, 0xfa, 0x99, 0xa4, 0x6c, 0x86, 0xec, 0x23, 0x65, 0x2a, 0x8e, 0xbe, 0x4e, 0x7c, 0x0b, 0x47, 0xe9, 0x17, 0xe0, 0xce, 0x25, 0x4a, 0xf4, 0xc1, 0x2c, 0xbe, 0x6f, 0x0c, 0x80, 0x46, 0xc2, 0x0c, 0xdc, 0x8c, 0x11, 0xeb, 0x7e, 0x1d, 0x09, 0xe0, 0xa6, 0x3d, 0xd3, 0x9c, 0x1c, 0x8b, 0x65, 0xc0, 0x37, 0xc4, 0x66, 0x88, 0x8d, 0xb7, 0xd7, 0x90, 0x64, 0x2b, 0xa9, 0x87, 0x20, 0xdb, 0x7c, 0xaa, 0x04, 0xae, 0x83, 0x1e, 0xed, 0x11, 0xf1, 0xec, 0x25, 0x73, 0x1b, 0x01, 0x1f, 0xc2, 0x25, 0xe4, 0xb8, 0xf5, 0x62, 0x1f, 0x64, 0xc4, 0x40, 0x02, 0xb2, 0x27, 0x69, 0x84, 0xd3, 0x8d, 0x64, 0x63, 0xd4, 0x08, 0x57, 0xf5, 0xe0, 0x82, 0xde, 0xd5, 0x57, 0x02, 0x06, 0x61, 0x24, 0x2c, 0x89, 0xf3, 0x92, 0xa4, 0x10, 0x0e, 0xf5, 0xe9, 0xb9, 0x44, 0xb1, 0x64, 0xbf, 0x27, 0x62, 0x51, 0x81, 0x98, 0x36, 0x9a, 0x88, 0x13, 0xc8, 0x99, 0xcd, 0x49, 0x34, 0x53, 0x40, 0xa2, 0xe1, 0xe4, 0x95, 0x89, 0x11, 0xd7, 0x47, 0xa3, 0x5f, 0xbe, 0x46, 0xa1, 0x48, 0xa0, 0x21, 0x51, 0x1a, 0x6a, 0xa1, 0x17, 0x47, 0x77, 0xa7, 0x6e, 0xa4, 0xea, 0xc2, 0x19, 0xe7, 0x92, 0xb6, 0x3c, 0xe4, 0x90, 0xc1, 0x44, 0x58, 0x0d, 0x7a, 0x66, 0x94, 0x82, 0x77, 0x9c, 0xa1, 0x27, 0x63, 0x2c, 0x42, 0xc4, 0x9a, 0x9c, 0x6c, 0xe4, 0x00, 0xba, 0xba, 0xd6, 0xe8, 0x6a, 0xf6, 0x48, 0x2e, 0x8b, 0x60, 0xd5, 0x59, 0xeb, 0xe1, 0x37, 0x87, 0x12, 0xc1, 0xb8, 0x33, 0x91, 0x40, 0x8b, 0xd8, 0x9e, 0xb2, 0xb1, 0xd0, 0xc8, 0x51, 0x5c, 0xa6, 0x65, 0x80, 0x8e, 0xf7, 0x01, 0x1d, 0x7d, 0x92, 0xdb, 0x2f, 0x3e, 0xf9, 0x33, 0xe6, 0x82, 0xbc, 0x8a, 0x19, 0x97, 0xb1, 0x51, 0x56, 0xd1, 0xed, 0x7e, 0x96, 0x05, 0x5a, 0x5b, 0x16, 0x0b, 0xd3, 0x95, 0xe4, 0xee, 0x44, 0x8c, 0x44, 0x50, 0xb9, 0xa7, 0x5d, 0x00, 0xa2, 0xc0, 0x42, 0xb9, 0x51, 0x6a, 0x41, 0x33, 0x2b, 0x5f, 0x29, 0x1e, 0x41, 0x07, 0x6b, 0x5f, 0x61, 0xc2, 0x72, 0xb8, 0x6d, 0x25, 0x69, 0xfd, 0x21, 0x34, 0x92, 0x08, 0x35, 0x83, 0x1b, 0xa7, 0x68, 0x48, 0x45, 0x79, 0x5f, 0xa2, 0xe8, 0xef, 0x74, 0x1b, 0x79, 0x1a, 0xd3, 0x14, 0xe3, 0x78, 0x05, 0x43, 0x6f, 0x33, 0x25, 0x4e, 0x41, 0xbb, 0x84, 0xac, 0xcc, 0xf5, 0x2a, 0xb1, 0x6a, 0x56, 0x1f, 0x03, 0xa7, 0x18, 0x79, 0xb0, 0xcd, 0xc3, 0x3c, 0x6b, 0x93, 0x02, 0x8e, 0x58, 0xdd, 0xe1, 0x88, 0x2e, 0x8d, 0x3f, 0x9f, 0xd2, 0xa4, 0x55, 0xfb, 0x06, 0x18, 0x3b, 0x65, 0x78, 0xf2, 0x3c, 0x09, 0xa6, 0xb1, 0xe1, 0x2f, 0x84, 0xab, 0x71, 0x99, 0x87, 0xe5, 0x9f, 0xeb, 0x73, 0xde, 0x96, 0xe3, 0xd5, 0x54, 0xea, 0x67, 0xe0, 0x06, 0x21, 0x8d, 0x88, 0xdb, 0x80, 0xa5, 0x7a, 0x97, 0x06, 0x24, 0x10, 0x22, 0x29, 0x73, 0x89, 0x26, 0x12, 0x6a, 0x65, 0x14, 0xbe, 0xbd, 0x69, 0x35, 0x41, 0xd6, 0x16, 0x00, 0x4b, 0xdb, 0x52, 0x11, 0xda, 0x8c, 0x2f, 0x8e, 0x87, 0xde, 0x40, 0xfe, 0xd6, 0x63, 0x18, 0xec, 0x1c, 0xfa, 0x8a, 0x06, 0xbf, 0x48, 0x23, 0x23, 0x24, 0x2f, 0xb8, 0x71, 0xea, 0xaa, 0x72, 0x68, 0x90, 0xba, 0xac, 0x16, 0x55, 0x37, 0x9a, 0x38, 0xad, 0x7b, 0x3b, 0xd0, 0x3d, 0x58, 0x9a, 0x39, 0xb2, 0x17, 0x57, 0x79, 0x53, 0xac, 0x12, 0x6e, 0x14, 0xe9, 0x2e, 0x0b, 0x59, 0xd9, 0x44, 0x36, 0xd1, 0x8a, 0x57, 0x8d, 0x76, 0x7d, 0x1e, 0x9b, 0xfe, 0xab, 0xe9, 0xbe, 0x66, 0x04, 0xa5, 0xc5, 0x06, 0xa2, 0xd4, 0xa0, 0xc4, 0x6f, 0xd5, 0xe1, 0xfe, 0x4e, 0x1c, 0xb6, 0x1c, 0x1e, 0xf8, 0x20, 0xde, 0x41, 0xe7, 0xa0, 0x83, 0x33, 0xad, 0xa9, 0x95, 0xdf, 0x2e, 0xcd, 0x38, 0x6c, 0x9e, 0x9f,
 0x8c, 0x54, 0xe3, 0xf2, 0xff, 0x35, 0x59, 0x8d, 0x42, 0xf5, 0xe5, 0xdc, 0x35, 0x2a, 0xfd, 0xde, 0xcb, 0xd3, 0x8e, 0x55, 0xa1, 0xda, 0xea, 0x8b, 0x67, 0xea, 0x74, 0x26, 0x70, 0x8a, 0xfa, 0xfb, 0x3d, 0x0d, 0x39, 0xba, 0x5e, 0xf1, 0x71, 0x34, 0x7c, 0xbf, 0x95, 0x24, 0xd0, 0x1b, 0x8e, 0xaa, 0x74, 0x3f, 0x22, 0x94, 0xa9, 0xc2, 0x89, 0x54, 0x26, 0x6c, 0xf3, 0xe7, 0xb3, 0x71, 0x13, 0x3e, 0x5d, 0x46, 0xf8, 0xde, 0x9c, 0x51, 0x50, 0x10, 0x0f, 0x04, 0xb3, 0x9d, 0x7e, 0xfe, 0xd5, 0x2a, 0x04, 0x25, 0x14, 0x13, 0x1c, 0x6f, 0xa1, 0x46, 0xb1, 0x78, 0x3f, 0x16, 0xdc, 0x7f, 0x53, 0xd3, 0xf6, 0x28, 0x52, 0x6b, 0xcb, 0x37, 0xa6, 0x28, 0x12, 0x84, 0x25, 0x10, 0x38, 0xf8, 0x44, 0x1b, 0x22, 0xe5, 0x0e, 0x73, 0x35, 0x3c, 0x66, 0x12, 0x23, 0xab, 0x71, 0x21, 0x48, 0xa5, 0x3d, 0xd7, 0xa7, 0xc6, 0x72, 0x41, 0x4d, 0x49, 0x94, 0x8c, 0xa7, 0xf3, 0x58, 0x57, 0x80, 0xa7, 0xa7, 0xeb, 0xb7, 0xde, 0xb5, 0x97, 0xee, 0xd9, 0x56, 0xa6, 0x28, 0xb8, 0xd4, 0x1a, 0x75, 0x49, 0x57, 0x9e, 0x34, 0x7d, 0xdb, 0x1c, 0xd4, 0xce, 0xb9, 0x0e, 0x71, 0x1a, 0x92, 0xd2, 0x06, 0xb4, 0x46, 0xa9, 0x89, 0x43, 0x3b, 0xce, 0x46, 0x57, 0x4a, 0x8f, 0x1c, 0x3b, 0xf1, 0x1e, 0xbd, 0x98, 0xea, 0x6a, 0x5a, 0xc5, 0x28, 0x8a, 0xfa, 0x54, 0xb7, 0x67, 0x34, 0xb5, 0x57, 0xcb, 0xd3, 0xbf, 0xa0, 0x66, 0xc0, 0x63, 0xcd, 0x0f, 0x42, 0xe8, 0x5e, 0x59, 0x10, 0x6f, 0xde, 0x80, 0x42, 0x98, 0x1d, 0xaa, 0xf9, 0x94, 0xc6, 0x08, 0x45, 0xb5, 0xbb, 0x93, 0x5c, 0xf9, 0xdb, 0xe2, 0x76, 0x52, 0x5a, 0xc9, 0x7e, 0x13, 0x36, 0x1c, 0x19, 0x0d, 0x82, 0xa3, 0x05, 0xfe, 0x6d, 0x95, 0x1c, 0x47, 0x39, 0xc0, 0x7c, 0x79, 0x8a, 0x6e, 0x51, 0x52, 0x18, 0x9f, 0x91, 0x1a, 0xfa, 0xa0, 0xf7, 0x76, 0x29, 0x06, 0xb0, 0x51, 0xc1, 0xe7, 0xd8, 0xe9, 0x32, 0x72, 0x28, 0x8e, 0x5f, 0x64, 0x0c, 0x76, 0x3a, 0xd8, 0xdb, 0x33, 0xa7, 0x3f, 0xbd, 0x37, 0x23, 0x2e, 0xe0, 0x00, 0x36, 0x4d, 0x3e, 0xdd, 0x1e, 0x79, 0x96, 0x05, 0xde, 0xaa, 0xcd, 0x5e, 0x66, 0x62, 0xfc, 0x68, 0x45, 0x6a, 0x27, 0x04, 0xa4, 0xc0, 0x81, 0x67, 0x0e, 0x07, 0x6d, 0x63, 0xe6, 0x0a, 0x84, 0xb4, 0x58, 0xd8, 0x86, 0x73, 0x44, 0x5e, 0x70, 0x07, 0xaf, 0x1a, 0xf8, 0x6d, 0x17, 0xec, 0x8f, 0xb2, 0xf5, 0x1e, 0x76, 0x56, 0x45, 0x65, 0x3b, 0x8b, 0xee, 0xbc, 0x7b, 0x59, 0x43, 0xa5, 0x19, 0xcc, 0xee, 0x2f, 0x36, 0x92, 0x56, 0x96, 0x5b, 0x46, 0xb7, 0xbf, 0x2e, 0x0d, 0xd7, 0xb1, 0x4e, 0xbc, 0x46, 0x10, 0x1f, 0xf3, 0x36, 0x99, 0xa6, 0x64, 0xd4, 0xec, 0x1b, 0x21, 0xc2, 0x91, 0x15, 0x93, 0x3c, 0xfa, 0xb0, 0x8d, 0x86, 0x6c, 0xd5, 0x62, 0xda, 0x6a, 0x16, 0x96, 0x6c, 0x18, 0x8f, 0xc8, 0x40, 0xf4, 0xb0, 0xd1, 0x01, 0x8d, 0xb5, 0xb2, 0x19, 0xa2, 0x4a, 0x1d, 0xfc, 0x39, 0xd5, 0x66, 0x78, 0x87, 0x21, 0xa6, 0x80, 0x9d, 0x19, 0x5c, 0x90, 0x9b, 0xae, 0x84, 0xd4, 0xca, 0x5a, 0xb7, 0x53, 0x23, 0xc6, 0xaf, 0x46, 0x0c, 0xdf, 0x14, 0x7e, 0x74, 0xd7, 0x12, 0x88, 0x6b, 0x46, 0x3e, 0x77, 0x48, 0x01, 0x8a, 0xec, 0x67, 0xb6, 0xa2, 0xe7, 0x08, 0x0b, 0x8d, 0x9e, 0xbe, 0x2b, 0x95, 0x51, 0x2d, 0xf7, 0xcb, 0x25, 0x7b, 0x9b, 0x71, 0xb6, 0x7b, 0x05, 0x9b, 0x18, 0x20, 0x4c, 0xa9, 0x11, 0x50, 0xf2, 0xb5, 0x71, 0x30, 0x2f, 0x42, 0x8f, 0xf3, 0x37, 0x7d, 0x3c, 0x40, 0x49, 0x00, 0x34, 0xe8, 0x53, 0x68, 0x57, 0xf8, 0x26, 0x0b, 0x55, 0x21, 0x34, 0x56, 0xd5, 0x25, 0x86, 0xa4, 0xc7, 0x70, 0x68, 0x02, 0x1a, 0xae, 0x84, 0x34, 0x1c, 0x2d, 0xf3, 0xd3, 0x96, 0x32, 0x62, 0x8e, 0x67, 0x21, 0x49, 0xac, 0x29, 0x02, 0xea, 0x11, 0xf2, 0x04, 0xab, 0x24, 0x6c, 0x64, 0xb9, 0xd1, 0xc0, 0x04, 0xa2, 0x7d, 0xc6, 0x40, 0x97, 0xd4, 0x60, 0x84, 0xf1, 0x69, 0xa8, 0x37, 0x09, 0xf4, 0x13, 0xff, 0x46, 0x9a, 0x49, 0x10, 0x56, 0xe6, 0xd6, 0x79, 0x0d, 0x53, 0x5f, 0x72, 0x62, 0xe4, 0x22, 0xa2, 0x6d, 0x1d, 0x7c, 0xc0, 0x50, 0x29, 0x4d, 0x8c, 0x6b, 0x87, 0x75, 0xec, 0x09, 0x4b, 0xd1, 0x01, 0x4e, 0xb6, 0x67, 0x60, 0x11, 0xaa, 0x06, 0x3f, 0x09, 0xe2, 0x16, 0x02, 0x61, 0x58, 0x81, 0x54, 0xb0, 0xca, 0x48, 0x42, 0xdf, 0x48, 0xd4, 0xe6, 0x32, 0x72, 0x16, 0x5f, 0x71, 0x25, 0x23, 0x86, 0x23, 0x06, 0x1b, 0xdd, 0xb7, 0xc1, 0x70, 0x4a, 0xbb, 0x8c, 0x9a, 0xa0, 0x17, 0x22, 0x20, 0xb5, 0xaa, 0x99, 0xc2, 0xac, 0xb4, 0x05, 0xc9, 0x69, 0x3b, 0x79, 0x98, 0x16, 0x67, 0xd9, 0xc6, 0xf6, 0xe3, 0x0e, 0x3d, 0x57, 0xa0, 0x52, 0xd4, 0x50, 0xe0, 0xe4, 0x94, 0xca, 0x82, 0x19, 0x51, 0x0a, 0x74, 0x73, 0xae, 0x67, 0xf0, 0xf8, 0x4e, 0x92, 0xbf, 0x41, 0x9a, 0xdf, 0x9b, 0x6b, 0x11, 0x98, 0x2b, 0xa3, 0x3f, 0x39, 0x85, 0xb5, 0xaa, 0xdd, 0x86, 0xfc, 0x71, 0x17, 0x38, 0x8d, 0xec, 0xd2, 0x04, 0xb1, 0x63, 0xf1, 0x36, 0x61, 0x15, 0xf6, 0x93, 0x81, 0x60, 0x1b, 0x66, 0xdb, 0x79, 0xd7, 0x9c, 0x54, 0x83, 0xb4, 0x8e, 0xb4, 0x04, 0x6d, 0x26, 0xa0, 0xed, 0x20, 0x9b, 0xa8, 0x09, 0x14, 0x6b, 0x20, 0x16, 0x72, 0x54, 0x88, 0x2e, 0x32, 0xf9, 0x83, 0x7a, 0x5a, 0x21, 0x39, 0xa1, 0xf3, 0x0a, 0x30, 0x92, 0x41, 0xf0, 0x12, 0xb0, 0xe2, 0x1c, 0x76, 0x37, 0x45, 0x3b, 0x60, 0x52, 0xe3, 0x62, 0xfa, 0xa2, 0x99, 0x93, 0x53, 0x4c, 0xa7, 0x5d, 0xa1, 0x8c, 0x43, 0x51, 0xbf, 0x37, 0x94, 0x52, 0x73, 0x95, 0xdd, 0xf4, 0x59, 0x9f, 0x91, 0x19, 0x3a, 0xc4, 0x42, 0x00, 0x9c, 0x11, 0x02, 0x88, 0x17, 0x06, 0xb6, 0x5b, 0x16, 0x41, 0xa4, 0x0b, 0x63, 0x04, 0xa9, 0x1d, 0x5c, 0xc1, 0x92, 0x75, 0x27, 0x69, 0x5d, 0xa5, 0x7e, 0x18, 0xd9, 0xb9, 0x16, 0x65, 0xa0, 0x13, 0x0a, 0x24, 0x50, 0x7e, 0x9a, 0x2a, 0x2f, 0x4d, 0xe7, 0x10, 0x60, 0x60, 0xad, 0xa7, 0x8e, 0xce, 0x45, 0x1f, 0x78, 0x1f, 0x89, 0x8b, 0xe2, 0x44, 0x49, 0x39, 0x33, 0xcc, 0x6b, 0xe1, 0xb8, 0x49, 0xfa, 0x0b, 0xcb, 0x2e, 0xc1, 0xe5, 0x8e, 0xf2, 0xab, 0x6a, 0x80, 0xf2, 0xbb, 0xb5, 0x95, 0x7b, 0x38, 0x41, 0x6b, 0xb8, 0x2f, 0x22, 0x47,
 0x2f, 0xc1, 0x79, 0xd7, 0x8a, 0xd0, 0x24, 0xc5, 0x59, 0x08, 0x07, 0x7f, 0xe2, 0x26, 0xff, 0x2a, 0x80, 0x8b, 0x59, 0x55, 0x26, 0x41, 0xe4, 0x6d, 0x26, 0xf4, 0xd6, 0xba, 0xdc, 0x84, 0xb2, 0xa1, 0x45, 0x55, 0x60, 0xf7, 0x90, 0x2d, 0x79, 0x36, 0xe2, 0x25, 0xaa, 0x8a, 0xe1, 0x59, 0x48, 0x68, 0xaa, 0xd9, 0x92, 0x87, 0x0a, 0x06, 0xc0, 0x1b, 0x8d, 0x66, 0x2d, 0x40, 0x42, 0x04, 0x4b, 0x27, 0x61, 0xff, 0x6b, 0x86, 0x19, 0x8f, 0xa1, 0x95, 0x1b, 0x94, 0x48, 0x50, 0x78, 0x73, 0x17, 0xe8, 0xb3, 0xc8, 0x35, 0x83, 0x8f, 0xda, 0x58, 0xdb, 0x04, 0x81, 0x9e, 0x02, 0x64, 0xdf, 0x84, 0x78, 0x16, 0xa1, 0x76, 0x00, 0x24, 0x82, 0x60, 0x52, 0x20, 0x7f, 0xc8, 0xdd, 0xd7, 0x05, 0x7c, 0xa3, 0xe2, 0x2f, 0x23, 0x5a, 0xc7, 0x80, 0x12, 0x96, 0xd4, 0x1f, 0xe0, 0xc1, 0x45, 0x18, 0x8f, 0xd8, 0x19, 0x15, 0x56, 0xd8, 0x0a, 0x05, 0x4a, 0xfe, 0x22, 0x17, 0x3a, 0x43, 0x57, 0x64, 0x28, 0xd7, 0x7b, 0x2e, 0x77, 0xe2, 0x06, 0x81, 0xd5, 0x6f, 0x12, 0x0a, 0xf6, 0x9d, 0x10, 0xbb, 0xc4, 0x49, 0x33, 0x5d, 0x8c, 0x2c, 0xe1, 0xa5, 0x9c, 0x02, 0x61, 0x8c, 0x29, 0xd6, 0x01, 0x5c, 0xb0, 0xe9, 0xdc, 0xc1, 0x59, 0xa3, 0xfe, 0x0e, 0xb6, 0xd6, 0xf9, 0x08, 0x08, 0x70, 0xa9, 0xcf, 0x8f, 0xe2, 0xb7, 0x54, 0x04, 0x19, 0x94, 0x11, 0xa8, 0xe7, 0xde, 0xfd, 0xa2, 0xed, 0x67, 0xd9, 0x03, 0xfe, 0x6a, 0x17, 0xa1, 0x1a, 0x00, 0x0a, 0x06, 0x1e, 0x08, 0x19, 0x93, 0x46, 0xf2, 0x2b, 0xd1, 0x08, 0x4e, 0xd5, 0xa5, 0x65, 0xd2, 0xad, 0x1d, 0x22, 0xa3, 0x1a, 0x19, 0x10, 0x08, 0x0a, 0xec, 0x97, 0xf9, 0x88, 0x0f, 0x76, 0x3e, 0xf2, 0x94, 0xbc, 0x7b, 0xf7, 0x2d, 0x5b, 0xf8, 0x2e, 0xcb, 0xe8, 0x18, 0x99, 0x91, 0xca, 0x22, 0xbe, 0x3b, 0xc4, 0xa5, 0xae, 0xa4, 0xa2, 0xf8, 0x21, 0xbd, 0x1a, 0xac, 0x1b, 0xd2, 0xc1, 0x85, 0x5c, 0xaa, 0x6a, 0xb6, 0x58, 0x7a, 0xa1, 0x3b, 0xc2, 0x1d, 0xac, 0xde, 0x83, 0xc4, 0xf3, 0xd9, 0x13, 0x29, 0x83, 0x45, 0xa6, 0xe4, 0x12, 0x9d, 0xb5, 0x80, 0x8a, 0x8a, 0x06, 0xce, 0x3d, 0xbc, 0x63, 0x2f, 0x4b, 0x0a, 0x20, 0x5c, 0x39, 0x20, 0x47, 0x11, 0xa8, 0xa5, 0x96, 0x2c, 0xcf, 0x50, 0x81, 0x0e, 0x2c, 0x2a, 0x22, 0x18, 0x6c, 0x7a, 0x87, 0x7d, 0x08, 0x1a, 0x64, 0x45, 0x43, 0x09, 0xf8, 0x31, 0xbf, 0xaa, 0x32, 0xc6, 0xb2, 0xe8, 0xbf, 0x43, 0xa9, 0x54, 0xf5, 0x90, 0x19, 0x33, 0x7d, 0xc6, 0x95, 0xa0, 0x81, 0x90, 0xbe, 0x52, 0xab, 0x24, 0x16, 0x63, 0x62, 0xb4, 0x02, 0x2d, 0xb7, 0xd0, 0x89, 0x2a, 0x50, 0x91, 0x2e, 0xe0, 0x35, 0xf8, 0x6c, 0x85, 0xd4, 0x64, 0x33, 0x77, 0x55, 0x94, 0xa0, 0xd7, 0xc4, 0xed, 0x28, 0xf0, 0x40, 0x79, 0x98, 0xde, 0x63, 0x66, 0x66, 0x9e, 0x11, 0x2a, 0x02, 0x39, 0xe5, 0xb8, 0x36, 0x60, 0xdf, 0x68, 0xbc, 0x64, 0xb5, 0xb5, 0x62, 0xb2, 0xc6, 0x4f, 0xb8, 0xa1, 0x7d, 0x7e, 0x4c, 0xc8, 0x50, 0xa2, 0x27, 0xb5, 0x20, 0x65, 0x2f, 0x6e, 0x12, 0xc6, 0x58, 0x84, 0x74, 0x9f, 0x95, 0x41, 0x25, 0x0d, 0x36, 0x7c, 0x80, 0x11, 0x56, 0x0e, 0xdc, 0xa7, 0xaf, 0x8c, 0x1e, 0x35, 0x83, 0x76, 0x5d, 0xc5, 0x18, 0x5d, 0x8a, 0x25, 0x05, 0x75, 0x2f, 0x19, 0xab, 0xc7, 0x56, 0x1e, 0x74, 0x87, 0x4b, 0xe8, 0xd9, 0x90, 0x3a, 0xa5, 0xc4, 0x23, 0x3f, 0x97, 0xf3, 0x55, 0x31, 0x89, 0x0c, 0x35, 0xe7, 0xfe, 0x01, 0x21, 0xf4, 0x54, 0x22, 0x90, 0x47, 0x8a, 0x10, 0xc5, 0x62, 0x40, 0x47, 0xa5, 0xd6, 0x8a, 0x62, 0x9f, 0xf5, 0x21, 0x02, 0x1c, 0x88, 0x56, 0x4e, 0xf7, 0xb5, 0x1a, 0x8a, 0x70, 0x30, 0x85, 0x2f, 0x87, 0x11, 0x02, 0x05, 0x63, 0xad, 0x0f, 0xa4, 0x93, 0x35, 0xae, 0xdd, 0x1b, 0xdf, 0xfb, 0xe3, 0x3d, 0x35, 0x07, 0x6f, 0x58, 0x87, 0x46, 0xc5, 0xa9, 0xd7, 0x4f, 0xf3, 0x09, 0x40, 0xbc, 0x74, 0x18, 0xd9, 0x20, 0x51, 0xe6, 0x22, 0x9c, 0x96, 0xe0, 0x3a, 0x94, 0xf6, 0x01, 0x99, 0x24, 0x13, 0xed, 0x5a, 0x92, 0xa1, 0xbf, 0x2f, 0x8b, 0x17, 0x15, 0xb4, 0x66, 0x57, 0x31, 0xc6, 0x9c, 0x06, 0xf4, 0x26, 0x03, 0x5b, 0x2e, 0xf5, 0xe4, 0x12, 0xc2, 0x5a, 0x8c, 0x84, 0x2f, 0xe4, 0x73, 0xa0, 0x9a, 0x99, 0x14, 0x62, 0x77, 0x32, 0x7c, 0x67, 0x3a, 0x56, 0x83, 0x18, 0x54, 0x7a, 0x20, 0x12, 0x1c, 0x46, 0x70, 0x18, 0x2e, 0x69, 0x94, 0x91, 0x30, 0x47, 0xaf, 0xf0, 0xbe, 0x17, 0x9b, 0x7e, 0xe8, 0xcc, 0x16, 0xa5, 0xbd, 0xe5, 0x06, 0xc5, 0x53, 0x38, 0x78, 0x56, 0x5d, 0xc2, 0xf6, 0xc1, 0x09, 0xab, 0xd3, 0x0e, 0x02, 0x88, 0xdc, 0xb9, 0x3f, 0x96, 0x41, 0x30, 0x48, 0x31, 0x51, 0x41, 0xa8, 0x2b, 0x2b, 0xe6, 0xd9, 0xe6, 0xa5, 0x76, 0x08, 0x15, 0x25, 0x64, 0xe9, 0x56, 0x37, 0x13, 0x2e, 0x25, 0x96, 0xba, 0xa4, 0xf6, 0x1d, 0xf3, 0xf0, 0x37, 0xa4, 0x2f, 0xfe, 0x4c, 0x9c, 0xc5, 0x6e, 0xae, 0x2f, 0xf5, 0xa6, 0x74, 0xf6, 0x1e, 0x4d, 0x59, 0x74, 0xd8, 0xb3, 0x80, 0x2d, 0x18, 0x4e, 0x26, 0x2b, 0xc5, 0x73, 0x8c, 0xd0, 0x8e, 0x9c, 0x2c, 0xeb, 0xb9, 0x7d, 0xb1, 0x22, 0xf3, 0x92, 0x60, 0x97, 0x10, 0xcc, 0x9f, 0xbc, 0x2b, 0xb3, 0xb7, 0x20, 0xa9, 0x01, 0x3c, 0x51, 0x77, 0x01, 0xdf, 0xad, 0xa3, 0xd6, 0x03, 0x6a, 0x92, 0xd9, 0xd4, 0x46, 0xaf, 0x2a, 0xcb, 0x40, 0xc2, 0xa0, 0x3a, 0x64, 0x16, 0xcd, 0x67, 0xc3, 0x6d, 0xaa, 0xfb, 0xca, 0xed, 0xb8, 0x56, 0x94, 0x13, 0x88, 0x42, 0x55, 0xc9, 0xdd, 0xca, 0x6e, 0xd1, 0xa8, 0x8a, 0x68, 0x13, 0x8a, 0x57, 0x80, 0x1f, 0x4d, 0x77, 0x44, 0x61, 0x6a, 0xce, 0x85, 0x5f, 0x15, 0xbb, 0xbc, 0x99, 0x28, 0x97, 0xbb, 0x30, 0xc7, 0xbc, 0x81, 0x1c, 0x98, 0xeb, 0xc4, 0x2d, 0x00, 0x45, 0x72, 0x0f, 0x85, 0xa7, 0x52, 0x6e, 0xa6, 0x48, 0x80, 0x4a, 0xa0, 0xe0, 0x2e, 0x61, 0x69, 0x44, 0x9b, 0x6b, 0x4a, 0xc0, 0x7d, 0x71, 0xcf, 0x0d, 0xd1, 0xae, 0x52, 0xab, 0xdf, 0xc1, 0xa0, 0x66, 0x39, 0x50, 0x6f, 0xa7, 0xc7, 0xd1, 0x96, 0x2e, 0xa0, 0xb1, 0x0d, 0x4d, 0x86, 0x32, 0x3a, 0x12, 0x0a, 0x1b, 0x1b, 0xd3, 0x66, 0x00, 0x10, 0x2e, 0x54, 0x48, 0x00, 0x51, 0x73, 0xdd, 0xbc, 0x6e, 0x9a, 0x8f, 0xc1, 0xa1, 0xcd, 0x3e,
 0xd8, 0xa3, 0xb6, 0x56, 0x46, 0x44, 0x83, 0xc3, 0x4e, 0xe6, 0xb4, 0xd0, 0xb5, 0x68, 0x1c, 0xc7, 0x1d, 0xd1, 0x58, 0xa9, 0x88, 0x86, 0x0d, 0xf2, 0xc8, 0x0f, 0xe4, 0x44, 0x45, 0x2f, 0x3f, 0x65, 0x5c, 0xce, 0x61, 0x14, 0xea, 0x99, 0x02, 0xe4, 0xc5, 0x1a, 0x3b, 0x48, 0x50, 0xb7, 0xa5, 0xb8, 0x48, 0x94, 0x19, 0x81, 0x98, 0x49, 0xfe, 0x63, 0x2c, 0x9f, 0xff, 0x25, 0xb9, 0xe2, 0x49, 0xa9, 0xce, 0xea, 0x82, 0xc9, 0x9d, 0xb6, 0x83, 0xc4, 0x14, 0x87, 0x5f, 0xe8, 0x02, 0x0b, 0x2e, 0x43, 0x91, 0x73, 0x8e, 0x4d, 0x64, 0x1e, 0xba, 0x33, 0xb8, 0xcd, 0xbf, 0xc8, 0x4c, 0x2e, 0x48, 0x2f, 0x9c, 0x5b, 0x9e, 0x69, 0xf7, 0x8b, 0x39, 0xf8, 0x3e, 0x58, 0x62, 0x02, 0x4a, 0x7b, 0xfe, 0x7d, 0x0e, 0x80, 0x8e, 0xf8, 0x75, 0xf4, 0x98, 0x70, 0x11, 0x87, 0x5a, 0x5c, 0x9e, 0xb5, 0xb0, 0x62, 0x22, 0x39, 0xb3, 0x54, 0xb7, 0xcf, 0x0d, 0x2e, 0x9b, 0x47, 0x41, 0x47, 0x6a, 0xe5, 0xe2, 0x78, 0x8e, 0x8c, 0xa8, 0x7e, 0x5a, 0xea, 0xca, 0x75, 0x94, 0x83, 0xad, 0x67, 0x7b, 0x45, 0xf8, 0x1e, 0x93, 0x3c, 0x8d, 0x8f, 0x22, 0x75, 0xa4, 0x3d, 0x69, 0x62, 0xd2, 0xf1, 0x9a, 0x16, 0xba, 0x2f, 0x09, 0x8d, 0x71, 0x75, 0x1d, 0xa0, 0x35, 0xec, 0x4f, 0xf4, 0x14, 0xe8, 0x7d, 0x22, 0x67, 0xce, 0x63, 0xd1, 0x7c, 0x84, 0xf4, 0x4c, 0xc5, 0x85, 0x93, 0x20, 0xab, 0x2b, 0x00, 0x4e, 0x09, 0x09, 0xa8, 0x0c, 0x1d, 0xd0, 0x56, 0x64, 0x22, 0x08, 0x82, 0xa0, 0xd9, 0x34, 0xc9, 0xc3, 0x02, 0x72, 0x9b, 0x05, 0xbb, 0xf6, 0x51, 0x3e, 0x7f, 0x27, 0x17, 0xc1, 0x92, 0x6a, 0xb9, 0x92, 0x5f, 0xcb, 0x6d, 0x15, 0x3e, 0x1d, 0x4e, 0x8b, 0x14, 0xfd, 0xb4, 0xa2, 0xf4, 0x21, 0xdf, 0x4a, 0xb6, 0x71, 0x08, 0xba, 0xa4, 0x23, 0xcd, 0x28, 0x4a, 0x5e, 0x29, 0xa6, 0xa0, 0xa9, 0x2c, 0x96, 0x07, 0x4a, 0x94, 0xaf, 0x6c, 0x92, 0xab, 0x2a, 0xf5, 0x1b, 0x0c, 0x19, 0x46, 0x34, 0x84, 0xf4, 0xbd, 0xb4, 0x1d, 0xd3, 0xf8, 0xd4, 0x58, 0x14, 0x6b, 0xc6, 0x31, 0x2a, 0xfe, 0x8e, 0xba, 0xaa, 0x03, 0xc6, 0xa3, 0xeb, 0x72, 0x5a, 0x9f, 0x28, 0xc2, 0x26, 0x77, 0x34, 0x12, 0x60, 0x1f, 0x34, 0x1b, 0x38, 0x31, 0x3b, 0xaf, 0x64, 0x11, 0x38, 0x57, 0xbc, 0x0b, 0xbe, 0xee, 0x64, 0x32, 0x03, 0x79, 0x4c, 0xfc, 0x1a, 0xea, 0x21, 0xc1, 0xf0, 0xa1, 0x3f, 0x43, 0xb4, 0x00, 0xea, 0xf1, 0x82, 0x33, 0x9d, 0x23, 0x74, 0x15, 0x66, 0x43, 0x2d, 0x11, 0xc4, 0x64, 0xdc, 0x15, 0x64, 0x83, 0xd1, 0x63, 0xd9, 0xe1, 0x0a, 0xb0, 0x87, 0x57, 0xbd, 0x96, 0x67, 0x1a, 0x5c, 0x1c, 0xdf, 0x58, 0xdb, 0xca, 0xf1, 0x71, 0x68, 0x06, 0xff, 0xf9, 0x47, 0xe0, 0x43, 0x24, 0xeb, 0x40, 0x61, 0x0a, 0x90, 0xa6, 0xe6, 0x5e, 0xd1, 0x57, 0x84, 0x6c, 0x8f, 0xc6, 0xed, 0x78, 0x66, 0xda, 0xb6, 0x01, 0x9c, 0x56, 0xe1, 0x45, 0x51, 0x3d, 0xbe, 0x0c, 0x59, 0xef, 0x96, 0xd0, 0x0e, 0x27, 0xcc, 0x4f, 0x4a, 0x0b, 0x65, 0x2d, 0x37, 0xcd, 0xd6, 0xd3, 0xca, 0xe6, 0x01, 0x19, 0x51, 0x2f, 0xee, 0x12, 0x16, 0xfd, 0x90, 0x84, 0x22, 0x95, 0x83, 0xb5, 0x4d, 0x12, 0xef, 0xc8, 0xc1, 0x80, 0xa1, 0xf2, 0x76, 0x83, 0x89, 0xbc, 0x54, 0x9c, 0xc4, 0x80, 0xdf, 0x10, 0x64, 0x83, 0xd4, 0x62, 0xba, 0x9f, 0x17, 0xe9, 0x53, 0xf0, 0x4d, 0x19, 0x34, 0x4f, 0x7c, 0xc6, 0x93, 0x69, 0x52, 0xb8, 0xe9, 0x46, 0x37, 0x3d, 0xee, 0x9f, 0x71, 0xd7, 0xd1, 0xc2, 0x3f, 0xe8, 0x7e, 0xfa, 0x68, 0x55, 0x16, 0xec, 0x5a, 0x31, 0xf4, 0x4f, 0xb9, 0xbb, 0x38, 0xc4, 0x0f, 0xbb, 0xc3, 0xe4, 0xd2, 0xe7, 0x34, 0x49, 0x57, 0x47, 0xd0, 0x27, 0xcf, 0xe5, 0x00, 0x30, 0x03, 0xf3, 0xd2, 0xf5, 0x81, 0x47, 0x01, 0x03, 0x9e, 0x12, 0x55, 0x4a, 0x11, 0x55, 0x47, 0x1e, 0xe3, 0x60, 0x49, 0x12, 0x1e, 0xc0, 0xd5, 0x11, 0xfd, 0xbd, 0x43, 0x31, 0x15, 0x25, 0xd7, 0x03, 0x28, 0x8f, 0xd9, 0x1f, 0x32, 0x59, 0xcf, 0x22, 0x54, 0xfb, 0x81, 0x83, 0x84, 0xc5, 0xde, 0x91, 0x05, 0xe3, 0x8c, 0x38, 0x6e, 0x3c, 0x84, 0xc3, 0x4b, 0x8d, 0xd5, 0x50, 0x4c, 0x67, 0xd1, 0xaf, 0x7f, 0x03, 0xd2, 0x09, 0xa5, 0xe5, 0x9a, 0x29, 0xb5, 0x31, 0x86, 0x64, 0xda, 0xcb, 0x4b, 0x15, 0x9f, 0x36, 0x15, 0x07, 0x09, 0x50, 0x1b, 0x8c, 0x4e, 0x98, 0x82, 0x2b, 0x74, 0x19, 0x3f, 0x02, 0xb2, 0x47, 0x01, 0x90, 0x66, 0x4d, 0x16, 0x94, 0x85, 0xec, 0x31, 0x32, 0x7a, 0xea, 0x54, 0xa8, 0x4b, 0x16, 0x19, 0xd6, 0xaa, 0x5e, 0xe3, 0x5f, 0x8c, 0x53, 0xe0, 0x6a, 0x69, 0xb9, 0xe7, 0xec, 0x74, 0x29, 0x30, 0x23, 0x7c, 0x60, 0x53, 0x29, 0xac, 0x0a, 0x8e, 0x39, 0xaa, 0xe3, 0x79, 0x6b, 0xde, 0x71, 0xbe, 0xe6, 0x6b, 0x35, 0x95, 0x70, 0x23, 0x0c, 0x89, 0xb9, 0x19, 0xac, 0x76, 0xa9, 0xed, 0x2e, 0x8f, 0x22, 0xe6, 0x2a, 0x0d, 0x74, 0x43, 0xf2, 0xca, 0x94, 0xbd, 0x57, 0x38, 0x94, 0xe8, 0x46, 0x1a, 0xc0, 0x50, 0x59, 0xcd, 0xbe, 0xb6, 0x18, 0x28, 0x30, 0x1b, 0x53, 0x7c, 0xea, 0x9e, 0x2c, 0x49, 0x7b, 0xa0, 0xdc, 0x45, 0x0d, 0xe2, 0x0c, 0x4f, 0x8b, 0x01, 0xf4, 0xae, 0xd0, 0x6f, 0x49, 0x2a, 0x4a, 0xdb, 0x14, 0xa1, 0xae, 0xa9, 0x11, 0xa0, 0x80, 0x60, 0x05, 0xbb, 0xc2, 0xd1, 0x24, 0xf6, 0xe9, 0x2a, 0x14, 0x0b, 0xc1, 0x3c, 0x6a, 0x7c, 0x56, 0xb0, 0x65, 0xa0, 0xe1, 0x73, 0x1d, 0xe9, 0x35, 0xed, 0x2b, 0x04, 0x17, 0xbf, 0x50, 0xab, 0x4e, 0xc7, 0xdb, 0xba, 0x33, 0xe5, 0x2c, 0x98, 0xa1, 0x35, 0x13, 0x78, 0xfe, 0xa2, 0x0b, 0x4c, 0x27, 0xc5, 0x2b, 0x98, 0x86, 0x2c, 0x54, 0xa5, 0xab, 0x2c, 0x29, 0x86, 0xd3, 0x5e, 0x75, 0xf3, 0x4d, 0x4c, 0x4d, 0x21, 0x55, 0xbc, 0xe8, 0x5b, 0xc8, 0x55, 0x9f, 0xc6, 0xce, 0x95, 0x54, 0xc9, 0xba, 0x11, 0xc6, 0xb2, 0x50, 0x8c, 0x91, 0x0b, 0x20, 0x93, 0x7a, 0xb5, 0xe3, 0xf1, 0x70, 0x7e, 0x8a, 0x85, 0x19, 0xaa, 0xd1, 0x18, 0xe9, 0x2c, 0x20, 0x0b, 0xa9, 0x9c, 0xad, 0x2a, 0x21, 0x54, 0xba, 0xe9, 0x9c, 0x9e, 0x32, 0xea, 0x96, 0x04, 0x39, 0x7d, 0x6b, 0x74, 0x29, 0x70, 0xb4, 0x0c, 0x1c, 0xba, 0x62, 0x65, 0x61, 0x89, 0x7a, 0x61, 0x37, 0xc3, 0x85, 0x96, 0xf9, 0x57, 0x8d, 0x01,
 };
-uint8_t H_bpoly_MINSEC[5*NEWHOPE_POLYBYTES] = {
+uint8_t H_bpoly_MINSEC[5*NEWHOPE_RINGCT20_POLYBYTES] = {
 0xc7, 0x2a, 0x06, 0x40, 0xa2, 0xa6, 0x0b, 0xd5, 0xd5, 0x08, 0xba, 0xcd, 0x44, 0x4c, 0xbe, 0x9f, 0x44, 0xf7, 0x0c, 0x1c, 0x1b, 0xc2, 0xcf, 0x12, 0xc1, 0x75, 0x46, 0x23, 0x83, 0xcf, 0x2e, 0x61, 0xe2, 0xb8, 0x96, 0x17, 0xa9, 0x45, 0x19, 0xba, 0xce, 0x56, 0xcc, 0xd3, 0x35, 0x71, 0xcd, 0x89, 0x2b, 0x6f, 0xd7, 0x46, 0x16, 0x2d, 0xb8, 0xbb, 0x4f, 0x4f, 0x47, 0x70, 0x7b, 0x5a, 0x13, 0x01, 0x0a, 0x61, 0x29, 0xa2, 0xd6, 0x7b, 0xc8, 0xe7, 0xf9, 0x53, 0x36, 0xda, 0x9c, 0x37, 0xc9, 0x9f, 0x14, 0x9d, 0xea, 0x39, 0xe2, 0xc5, 0x4a, 0xa8, 0xc2, 0xa1, 0x91, 0xa5, 0x65, 0x78, 0x16, 0xc5, 0x4a, 0x30, 0xd7, 0xc7, 0xcf, 0xa0, 0xea, 0x68, 0xb7, 0x29, 0x50, 0x96, 0xf6, 0x2d, 0xcc, 0x55, 0x80, 0x82, 0x54, 0x19, 0xaa, 0x95, 0x42, 0xf8, 0xa9, 0x14, 0xe1, 0xe3, 0xee, 0xad, 0x2c, 0xe8, 0xd4, 0xdb, 0xa9, 0x19, 0x89, 0x68, 0xc9, 0x3c, 0xf0, 0x51, 0x38, 0x1d, 0xf8, 0x83, 0x88, 0x75, 0x7b, 0x3e, 0x40, 0x1d, 0x20, 0x9e, 0x00, 0xad, 0x51, 0x8c, 0x00, 0x46, 0x04, 0x67, 0x61, 0xb0, 0x42, 0xac, 0x25, 0x93, 0x94, 0xa3, 0x54, 0x33, 0xc2, 0xd9, 0xb5, 0x52, 0x84, 0xea, 0x51, 0x1b, 0x4a, 0xee, 0xfb, 0xa9, 0x84, 0x11, 0xf7, 0x9e, 0x99, 0x15, 0xc5, 0x2a, 0x64, 0x48, 0x91, 0x59, 0x09, 0x4a, 0x80, 0x68, 0xcf, 0x24, 0x2d, 0x83, 0x17, 0x82, 0x16, 0xe1, 0x12, 0x48, 0x7a, 0xd9, 0xac, 0x97, 0xeb, 0x48, 0x5b, 0x9a, 0x5a, 0xba, 0xb1, 0x4b, 0xa9, 0x65, 0x81, 0xec, 0x11, 0x9a, 0x31, 0xe2, 0x12, 0x17, 0x43, 0xf1, 0x0a, 0xee, 0x82, 0x28, 0x9b, 0x88, 0x9c, 0xbc, 0xba, 0x2d, 0x89, 0x28, 0xb2, 0xa8, 0x7b, 0x18, 0x60, 0x45, 0x66, 0x90, 0x8c, 0x36, 0x1d, 0x9b, 0xdb, 0xb5, 0xf0, 0x69, 0xb8, 0x17, 0x5e, 0x8f, 0x69, 0x83, 0x49, 0x89, 0xe2, 0x84, 0xd4, 0xa8, 0x65, 0x9d, 0xbc, 0x83, 0xda, 0x6c, 0x69, 0x74, 0xfa, 0x13, 0x87, 0xe9, 0x5b, 0x67, 0x32, 0x3e, 0x47, 0x79, 0xa9, 0x1a, 0xab, 0x06, 0xe8, 0xab, 0xdb, 0xac, 0x57, 0xb1, 0xba, 0xed, 0x1a, 0x75, 0xd9, 0x06, 0x36, 0xeb, 0x44, 0x50, 0x8b, 0x83, 0x02, 0x9b, 0x68, 0x45, 0x40, 0xf8, 0xc6, 0xe7, 0x8a, 0xc4, 0x00, 0x96, 0x56, 0xcf, 0xa2, 0xa6, 0xc0, 0xec, 0x09, 0x26, 0x47, 0xaf, 0xcb, 0x8d, 0x3e, 0x21, 0x80, 0x4f, 0xb6, 0x62, 0x23, 0x7d, 0x9c, 0x4e, 0x4f, 0x11, 0xbb, 0x9a, 0x05, 0x0f, 0x46, 0x8f, 0x3d, 0x75, 0x3f, 0x95, 0x20, 0x69, 0x59, 0x98, 0x39, 0xb4, 0x7d, 0x65, 0xdb, 0x90, 0xd0, 0x4b, 0xa4, 0x1a, 0xb2, 0x6e, 0xe3, 0xc0, 0xe9, 0xf1, 0x12, 0x82, 0xcc, 0x07, 0xcb, 0xa6, 0x59, 0x61, 0x50, 0x52, 0x0e, 0x95, 0x24, 0x2d, 0x51, 0x4d, 0x2c, 0x25, 0x5f, 0x30, 0x65, 0xe5, 0xaf, 0xa1, 0xaa, 0xa7, 0x01, 0x15, 0x1a, 0x0a, 0xb8, 0x09, 0x86, 0x2b, 0x42, 0xf8, 0xba, 0xc5, 0x41, 0x5a, 0x91, 0x14, 0x26, 0x95, 0xb3, 0x8a, 0x90, 0xf0, 0x89, 0x24, 0xa4, 0x97, 0x44, 0x71, 0x1b, 0xee, 0xc2, 0x4c, 0xee, 0xc5, 0xc6, 0xd9, 0x92, 0xdd, 0x20, 0x2e, 0xa8, 0x62, 0x41, 0xab, 0xf8, 0x58, 0xeb, 0x2a, 0x03, 0xb4, 0x1f, 0xac, 0xa3, 0x39, 0xa1, 0x04, 0x37, 0x99, 0x48, 0x6d, 0x09, 0x5d, 0x07, 0x88, 0x0d, 0x3d, 0x05, 0x54, 0x8f, 0x49, 0x88, 0x5f, 0x92, 0x49, 0x28, 0xe1, 0x5c, 0x16, 0xb0, 0x49, 0x5f, 0xea, 0xdc, 0x58, 0xb4, 0xf8, 0x90, 0x3e, 0xe1, 0x95, 0x64, 0x0a, 0xdf, 0x4d, 0x1b, 0x63, 0xc5, 0x53, 0x01, 0x75, 0x59, 0x37, 0x55, 0x41, 0x11, 0xf8, 0x3b, 0x2c, 0x60, 0xa4, 0xc0, 0xfe, 0x45, 0x8a, 0xc0, 0x0d, 0x90, 0x81, 0xc2, 0xf1, 0x76, 0x8d, 0x50, 0xe3, 0xca, 0xbd, 0xa5, 0x04, 0xc2, 0x03, 0xf8, 0xcd, 0xdf, 0xea, 0xce, 0xc2, 0x9c, 0x5a, 0x88, 0x78, 0xa7, 0x57, 0x14, 0xa2, 0x1f, 0xe6, 0x1f, 0x06, 0x00, 0xdd, 0xbd, 0x90, 0x50, 0x78, 0x75, 0x72, 0xb1, 0x6b, 0x25, 0x16, 0x12, 0xa9, 0x50, 0xa6, 0x77, 0x42, 0x29, 0x6e, 0x4b, 0x21, 0xf6, 0x91, 0xc3, 0x6b, 0xef, 0xc3, 0x11, 0xbd, 0x86, 0x0c, 0x5a, 0x67, 0x99, 0xc7, 0x7a, 0x11, 0xe2, 0xc7, 0xbd, 0x95, 0x9f, 0x6d, 0x85, 0xa6, 0x47, 0x8b, 0x17, 0xe6, 0x72, 0x50, 0x83, 0x5e, 0x15, 0xb0, 0xfc, 0x52, 0x0d, 0xa2, 0xdb, 0x0c, 0x01, 0xe1, 0xed, 0xae, 0x99, 0x2d, 0xea, 0xc0, 0x53, 0xe6, 0x32, 0xfe, 0x44, 0x54, 0x42, 0x74, 0x3e, 0x5e, 0x23, 0x2e, 0xfc, 0xca, 0x14, 0x79, 0x0f, 0xd6, 0x6b, 0x75, 0x30, 0x46, 0x64, 0x28, 0xe8, 0xc0, 0x42, 0x60, 0xad, 0x98, 0x35, 0xaa, 0x29, 0x1f, 0xb1, 0xa5, 0x5d, 0x22, 0x53, 0x06, 0x0b, 0x95, 0x8f, 0x5d, 0xa3, 0x53, 0xe4, 0xab, 0xf9, 0x96, 0x16, 0x1f, 0x3e, 0x12, 0x29, 0xc1, 0xbd, 0xd8, 0x3a, 0x6a, 0x9d, 0x27, 0xdb, 0x36, 0x91, 0x8e, 0x79, 0x84, 0x58, 0xc4, 0xcb, 0x64, 0xa1, 0x33, 0x1c, 0xee, 0xa9, 0xd0, 0xa0, 0x64, 0xb9, 0x07, 0x3d, 0x38, 0x89, 0x36, 0x6a, 0xc0, 0x60, 0x5e, 0x0a, 0x81, 0x24, 0x84, 0x1f, 0x0b, 0xdf, 0xa8, 0xd5, 0xdd, 0x8d, 0xdb, 0x1d, 0x3c, 0xa1, 0x28, 0xd4, 0x82, 0x3a, 0xd4, 0xd8, 0xb9, 0xdb, 0xc1, 0x52, 0x3a, 0x4d, 0xc4, 0x75, 0x98, 0xa8, 0x53, 0x1f, 0xd2, 0x27, 0xc9, 0xc4, 0x31, 0x5a, 0x3a, 0x84, 0x70, 0x93, 0x45, 0x8d, 0x01, 0x4e, 0x5f, 0x08, 0x86, 0x8a, 0x9a, 0x4b, 0x34, 0x46, 0x04, 0x4a, 0x6e, 0x8e, 0x17, 0x8c, 0x14, 0xd9, 0x2b, 0xd1, 0xe1, 0x6f, 0xbb, 0x1b, 0x95, 0xc7, 0x36, 0x70, 0x05, 0xe4, 0x0a, 0x97, 0x87, 0x05, 0xdd, 0x8d, 0x67, 0x80, 0x4d, 0x43, 0xbf, 0x11, 0x38, 0x23, 0x93, 0x08, 0xd1, 0xc3, 0x06, 0x1a, 0x02, 0x86, 0x3c, 0x08, 0x3b, 0xf4, 0x61, 0x49, 0xc2, 0xf5, 0xea, 0xdf, 0xe2, 0xa3, 0x76, 0xe5, 0x0d, 0xd0, 0x35, 0x9a, 0x8c, 0xc6, 0x18, 0xa0, 0x7b, 0x18, 0xcd, 0x51, 0xdc, 0x8f, 0xc2, 0x88, 0x02, 0x3e, 0x8d, 0x30, 0x68, 0xcf, 0x12, 0x11, 0x46, 0xbf, 0xa2, 0x53, 0x42, 0x00, 0xe5, 0x99, 0x85, 0x03, 0xeb, 0xf1, 0x85, 0x11, 0x7a, 0x82, 0xc8, 0x18, 0x51, 0xd0, 0xe1, 0x7a, 0x5b, 0x7f, 0x1e, 0xaf, 0x19, 0xde, 0x44, 0x2f, 0x80, 0x9f, 0x13, 0x29, 0x09, 0xd9, 0x9d, 0x8d, 0xce, 0xa3, 0xb3, 0xbd, 0xf5, 0x2f, 0xaa, 0xd2, 0x09, 0xa3, 0xfb, 0xb2, 0x5a,
 0x56, 0xe9, 0xd1, 0xc8, 0x7f, 0xcc, 0x42, 0x2b, 0x51, 0x3f, 0xf5, 0xc9, 0x90, 0x4e, 0xe3, 0x94, 0xb9, 0x27, 0xe9, 0xe6, 0xa3, 0xdd, 0x9f, 0xaa, 0x12, 0x6a, 0x42, 0x16, 0x7d, 0x5d, 0x9f, 0x1b, 0xef, 0xa0, 0x6a, 0x86, 0x4d, 0xbe, 0xc4, 0x6b, 0x1d, 0x31, 0x74, 0x1b, 0x14, 0x18, 0x00, 0x12, 0x90, 0xa7, 0xc5, 0xb0, 0x28, 0x4a, 0xcd, 0xb6, 0x43, 0x6d, 0x00, 0x3b, 0xd6, 0x65, 0x0f, 0x99, 0xe6, 0x4b, 0xc5, 0xe0, 0xc4, 0x8d, 0xb0, 0x09, 0x41, 0xf8, 0x57, 0x1c, 0x4a, 0xaf, 0x20, 0xf1, 0x67, 0xb2, 0xa6, 0x39, 0xc8, 0xe5, 0x2f, 0x73, 0xb5, 0x42, 0x11, 0xe0, 0xc2, 0x19, 0xfa, 0x26, 0x52, 0x79, 0x84, 0x2b, 0x69, 0xd5, 0x2e, 0xf4, 0x30, 0x2d, 0xde, 0x11, 0x98, 0x00, 0xbc, 0xb2, 0xbc, 0xe8, 0xc8, 0xe3, 0x96, 0x20, 0x2e, 0x9e, 0xcd, 0x20, 0xfa, 0xef, 0xa5, 0x7b, 0x27, 0x2f, 0xeb, 0xa8, 0x0d, 0x94, 0x84, 0xd0, 0x15, 0xb2, 0xe5, 0xa4, 0x7d, 0x88, 0xa3, 0x98, 0x66, 0x66, 0x3f, 0x86, 0x42, 0x05, 0xd7, 0x25, 0xc8, 0xfb, 0xc8, 0x0f, 0x9a, 0x51, 0xe7, 0x8a, 0x3a, 0x0a, 0x88, 0x4a, 0x28, 0x69, 0xb2, 0x70, 0xa5, 0x82, 0xda, 0x59, 0x0a, 0x04, 0x68, 0x48, 0x29, 0x55, 0x5e, 0x2a, 0x16, 0x27, 0x88, 0x9a, 0xce, 0x95, 0x7d, 0x04, 0x41, 0x6c, 0xa9, 0x36, 0xa1, 0xf7, 0x30, 0x48, 0xb2, 0x56, 0xfb, 0x85, 0xc6, 0x25, 0xd0, 0xb8, 0x0d, 0x8a, 0x09, 0x24, 0xd9, 0xf0, 0x59, 0xa8, 0x99, 0xd6, 0x56, 0x67, 0x94, 0xb9, 0x30, 0x81, 0xca, 0x30, 0xea, 0x50, 0x64, 0x7f, 0xc5, 0x98, 0x8f, 0x36, 0xca, 0xb9, 0x3d, 0x4f, 0x5e, 0x26, 0x26, 0xe0, 0x34, 0x66, 0x7f, 0x87, 0x12, 0x9a, 0xf5, 0x26, 0xa2, 0xf7, 0x89, 0xf3, 0xe2, 0x5b, 0x4c, 0x9f, 0x91, 0x1d, 0x93, 0x76, 0xe9, 0xd8, 0x69, 0x1d, 0x57, 0xdc, 0x91, 0xa6, 0xf2, 0x21, 0xf4, 0x1d, 0x5a, 0x19, 0xdb, 0x2a, 0x1d, 0xbd, 0x24, 0xbd, 0x77, 0x72, 0x52, 0x5b, 0x85, 0xec, 0x2e, 0xa1, 0x31, 0x75, 0x8d, 0x60, 0xe3, 0x5c, 0x58, 0xbf, 0x02, 0x75, 0xea, 0x09, 0xdd, 0x45, 0x19, 0x00, 0x41, 0x5e, 0xe5, 0x7b, 0x46, 0xe7, 0xa8, 0x84, 0xd7, 0x28, 0xae, 0x53, 0x4e, 0x2d, 0x44, 0xf5, 0xda, 0x70, 0x96, 0xa3, 0x44, 0x86, 0xfd, 0x1e, 0x68, 0xea, 0x4c, 0xa0, 0x58, 0x33, 0x6b, 0x3c, 0x6a, 0x23, 0x81, 0xa3, 0xa8, 0x6f, 0x30, 0x39, 0xcb, 0xe9, 0x67, 0x0f, 0xc5, 0x21, 0x00, 0x61, 0xec, 0x20, 0x8f, 0xd8, 0x38, 0xc7, 0x6b, 0x3e, 0x7b, 0x66, 0x8c, 0x7b, 0x30, 0xf6, 0x28, 0x60, 0x61, 0xaa, 0xf3, 0x85, 0xc9, 0xc0, 0x56, 0x56, 0x41, 0x27, 0x01, 0x54, 0xb8, 0xa7, 0xab, 0xdf, 0x59, 0xf2, 0x24, 0xd5, 0xb3, 0x47, 0xe0, 0xa2, 0x06, 0x94, 0xb5, 0x01, 0x5e, 0x17, 0x43, 0x36, 0x73, 0xa6, 0x91, 0x05, 0xe6, 0x58, 0xda, 0x0c, 0x02, 0x7a, 0xa7, 0xeb, 0xce, 0x7a, 0xf2, 0x41, 0x7c, 0xc4, 0xcd, 0x7d, 0x29, 0x35, 0x46, 0xad, 0x93, 0x07, 0x54, 0x19, 0x57, 0xc0, 0x70, 0x94, 0x9b, 0xb3, 0x45, 0x83, 0x1a, 0x4f, 0x0b, 0x03, 0x78, 0x13, 0xca, 0xf5, 0x67, 0x50, 0xc3, 0x8f, 0x28, 0x6c, 0xce, 0x4a, 0x77, 0x20, 0x4d, 0xd7, 0x86, 0xae, 0xbc, 0x99, 0x98, 0x3a, 0xf0, 0x6b, 0x35, 0xbf, 0x7c, 0xe1, 0xe4, 0x26, 0xda, 0x72, 0x96, 0xd3, 0x58, 0xfd, 0x77, 0x1b, 0x06, 0x75, 0xd8, 0xd4, 0xab, 0xf4, 0x7e, 0x11, 0x4f, 0xbe, 0x16, 0xfb, 0xd4, 0x56, 0x1e, 0x02, 0xd5, 0xe3, 0x42, 0x0a, 0x14, 0x99, 0x69, 0xb5, 0x19, 0x4c, 0x12, 0x5d, 0x08, 0x65, 0xc4, 0x03, 0xc8, 0x60, 0x72, 0x6a, 0x84, 0x85, 0x81, 0x81, 0xa5, 0x61, 0x6e, 0x45, 0xf1, 0x13, 0x57, 0x27, 0x07, 0xd9, 0x67, 0x9e, 0xc4, 0x2d, 0x94, 0x72, 0xe1, 0xa8, 0xa3, 0x81, 0xbf, 0xb4, 0xc8, 0x9e, 0x86, 0x93, 0x82, 0x3f, 0xc5, 0xd3, 0x29, 0xa7, 0xe6, 0x02, 0x73, 0x62, 0xe1, 0xea, 0x9b, 0xe2, 0x13, 0xc3, 0xa8, 0x5e, 0xf5, 0xbc, 0xcb, 0xc7, 0xa2, 0x93, 0x1b, 0xf6, 0x6e, 0x10, 0x99, 0x60, 0x37, 0x19, 0x7c, 0xb2, 0xb8, 0xd8, 0xe8, 0x16, 0xe1, 0x42, 0x7b, 0x3f, 0x56, 0x4e, 0x82, 0x11, 0xee, 0x80, 0x15, 0x9a, 0xe9, 0xd0, 0xc3, 0x0a, 0x07, 0x91, 0x1e, 0xb6, 0x83, 0xf5, 0x28, 0x4c, 0xf2, 0x2d, 0x3c, 0x77, 0xa2, 0x8c, 0x0b, 0x41, 0xcb, 0xa5, 0xd4, 0xb4, 0x84, 0x82, 0xce, 0x15, 0xe0, 0x22, 0xed, 0x4c, 0x40, 0x7c, 0x4c, 0x7e, 0x72, 0x4b, 0xd9, 0x71, 0x51, 0x08, 0x38, 0x80, 0x35, 0xd8, 0x88, 0x7a, 0x4c, 0x6d, 0x45, 0xce, 0x59, 0x3a, 0x50, 0xaf, 0x6f, 0x99, 0x8a, 0x18, 0xae, 0xb0, 0xab, 0x31, 0x03, 0x3a, 0x7d, 0x0c, 0xd3, 0x62, 0x47, 0xb3, 0xa9, 0x62, 0x03, 0x69, 0x84, 0x5f, 0xba, 0x7e, 0x36, 0x31, 0x12, 0x95, 0xfa, 0x72, 0x1b, 0x05, 0x5e, 0x44, 0x95, 0xe2, 0x24, 0x4e, 0xe5, 0x6c, 0xdc, 0x6b, 0x28, 0x4b, 0x3f, 0xea, 0x1b, 0xad, 0x5c, 0xbb, 0x2b, 0x73, 0xe5, 0x9c, 0xab, 0x96, 0x6a, 0x76, 0x41, 0x88, 0x9a, 0x32, 0x99, 0x1c, 0x38, 0x36, 0x18, 0x16, 0xca, 0xaa, 0x11, 0xd4, 0x31, 0x88, 0x4d, 0x16, 0x1b, 0x52, 0x92, 0x27, 0x60, 0x24, 0xb3, 0xee, 0xe4, 0x76, 0x5b, 0xd1, 0x10, 0xbc, 0x2f, 0x86, 0xd6, 0x47, 0x60, 0x7c, 0x47, 0x24, 0x0a, 0x66, 0x45, 0xa6, 0x05, 0xde, 0x99, 0x06, 0xd2, 0xbe, 0x8d, 0xbd, 0x43, 0xe5, 0x68, 0x30, 0x54, 0xde, 0x8f, 0xaf, 0xea, 0x35, 0x82, 0xcd, 0x52, 0x06, 0x80, 0x6a, 0xa5, 0x16, 0xb1, 0x54, 0xb5, 0xcf, 0x64, 0x65, 0xd6, 0xff, 0x15, 0xa4, 0x29, 0x09, 0x7f, 0xb4, 0xe6, 0x3d, 0xa2, 0xb4, 0x4a, 0x54, 0xea, 0x1c, 0x1a, 0x2d, 0x50, 0x21, 0xd6, 0xf6, 0x19, 0x8c, 0x5a, 0x08, 0x67, 0xde, 0xb8, 0x88, 0xd5, 0x02, 0xa5, 0x6d, 0x49, 0x82, 0xf4, 0x2a, 0x3e, 0x6e, 0x80, 0x81, 0x04, 0x43, 0x24, 0x71, 0x47, 0x1b, 0x73, 0x16, 0x88, 0xc5, 0xac, 0x32, 0xce, 0x0a, 0x79, 0xb4, 0x18, 0x10, 0x8a, 0xc7, 0x4e, 0x2b, 0x4a, 0xa2, 0xb3, 0x27, 0xcf, 0x38, 0xd6, 0x3e, 0x5a, 0x08, 0x29, 0x2e, 0xf9, 0x48, 0x9e, 0xee, 0xa4, 0x6e, 0x42, 0xe0, 0x19, 0xf5, 0x4c, 0x58, 0x0c, 0x1b, 0x4c, 0x8a, 0x76, 0x29, 0x3e, 0x8d, 0x19, 0xa1, 0x67, 0x0f, 0x1c, 0x8d, 0x67, 0x19, 0x77, 0x52, 0x89, 0x35, 0x09, 0x00, 0x9c, 0x53, 0x01, 0xf8, 0x74, 0x7f,
 0x7c, 0x40, 0xff, 0xdb, 0x7e, 0x15, 0x04, 0xad, 0xe4, 0x14, 0xaa, 0x70, 0xdd, 0xa1, 0xa9, 0x94, 0x9c, 0x55, 0xa1, 0x49, 0x5c, 0xde, 0x98, 0x3f, 0x58, 0x0e, 0x38, 0x6e, 0x1e, 0xa2, 0x37, 0x71, 0x44, 0x8c, 0x1d, 0x14, 0xc9, 0xd2, 0xb6, 0x9a, 0x25, 0x60, 0x77, 0x03, 0x92, 0x26, 0xe5, 0xda, 0x21, 0xd2, 0x0c, 0x32, 0xb1, 0x40, 0x7d, 0x89, 0x5a, 0xde, 0xdc, 0xe7, 0x4b, 0x8e, 0x92, 0xb8, 0xe2, 0xdd, 0x77, 0xae, 0x98, 0x13, 0x00, 0x25, 0x4c, 0xd3, 0x7d, 0x80, 0x16, 0x5d, 0x10, 0xe5, 0xb4, 0x32, 0xe8, 0x71, 0x91, 0xaa, 0x1c, 0x48, 0xc8, 0x68, 0x3e, 0xa2, 0xa2, 0xa6, 0x1a, 0x01, 0xfe, 0xa0, 0xff, 0x9c, 0xef, 0xd7, 0x1a, 0xe1, 0xb9, 0x11, 0x95, 0x0f, 0x94, 0xc5, 0x4d, 0x40, 0xe2, 0x45, 0x87, 0x22, 0x44, 0x6e, 0x69, 0x11, 0x13, 0xc7, 0x70, 0xa9, 0x76, 0x4e, 0x03, 0x1f, 0xa8, 0x9b, 0x1b, 0x60, 0x91, 0xd0, 0x89, 0x99, 0x77, 0x9f, 0xc5, 0x94, 0xac, 0x8a, 0xe2, 0x66, 0x09, 0xa8, 0x84, 0x41, 0x13, 0x68, 0x41, 0x2f, 0xf6, 0xab, 0x7f, 0xa7, 0xd3, 0xe7, 0xa3, 0x2e, 0x15, 0x00, 0xe8, 0x9b, 0x43, 0x9a, 0x89, 0x34, 0x38, 0xdb, 0x8c, 0x7b, 0x00, 0xba, 0x0f, 0x32, 0x49, 0x31, 0x64, 0xf4, 0x72, 0xa7, 0x9c, 0x92, 0x4a, 0x33, 0x66, 0x74, 0xab, 0xd7, 0x49, 0x03, 0xf0, 0xe4, 0x6e, 0x86, 0xbd, 0xc4, 0x10, 0xf7, 0xc3, 0xf5, 0x4f, 0xed, 0x1a, 0x6c, 0xf9, 0xac, 0xbe, 0xa8, 0x7d, 0x4b, 0x4c, 0xc2, 0x04, 0x26, 0xa9, 0xc7, 0x97, 0x43, 0x52, 0xbf, 0xc8, 0x8a, 0x32, 0x17, 0x99, 0x13, 0x47, 0x41, 0x6b, 0xde, 0x6e, 0x86, 0x57, 0x5a, 0x45, 0xaa, 0x1b, 0xe4, 0x68, 0xe3, 0xbb, 0x21, 0xb9, 0x2d, 0x89, 0xf0, 0xb6, 0x76, 0x44, 0x47, 0xc6, 0x8d, 0xe3, 0x9a, 0x72, 0xaa, 0xa5, 0xe5, 0x93, 0x30, 0x35, 0x86, 0x1e, 0x47, 0x48, 0x11, 0x61, 0x4a, 0x7b, 0x36, 0x60, 0x3d, 0x51, 0x97, 0xc2, 0x7b, 0x5a, 0xb9, 0x8a, 0x0d, 0x3d, 0xc1, 0xef, 0x1e, 0x6f, 0xe0, 0x52, 0x12, 0x21, 0x6f, 0x39, 0x52, 0x29, 0x06, 0xaa, 0xe7, 0x71, 0x64, 0x4b, 0x1e, 0x2b, 0x23, 0x54, 0xd8, 0x90, 0x2b, 0xf1, 0x83, 0x17, 0x84, 0xa1, 0x29, 0xa6, 0xd2, 0x07, 0x66, 0x5a, 0xe4, 0x0d, 0x6f, 0x96, 0x45, 0x63, 0x56, 0xe9, 0xfd, 0xb9, 0xc7, 0x90, 0x38, 0x84, 0x91, 0xb6, 0x10, 0x1a, 0xc4, 0x96, 0x64, 0xed, 0x32, 0x71, 0xf5, 0x4f, 0x41, 0x3a, 0x6b, 0x00, 0x6d, 0x7d, 0xad, 0xb4, 0xf7, 0x1e, 0x95, 0x20, 0x1d, 0x5b, 0xc5, 0x90, 0xba, 0xce, 0x68, 0x42, 0xd4, 0x88, 0x14, 0x17, 0x3e, 0x68, 0x27, 0x23, 0xeb, 0x1b, 0x0a, 0x8c, 0xa8, 0xe9, 0x55, 0xb5, 0x46, 0xef, 0x88, 0x82, 0xd0, 0x65, 0x36, 0x28, 0x9b, 0x5c, 0x17, 0xc5, 0x0f, 0x45, 0x07, 0x27, 0x84, 0x66, 0xa2, 0x49, 0x17, 0x35, 0x7a, 0xa2, 0x0d, 0xf4, 0x5d, 0xf5, 0x47, 0x86, 0xfd, 0x36, 0x74, 0xc4, 0x65, 0xf7, 0xf7, 0x6c, 0xa0, 0x13, 0x4d, 0x66, 0x52, 0x03, 0xf2, 0x4a, 0x12, 0xc3, 0xb4, 0xc6, 0x95, 0xd1, 0x1b, 0xcb, 0xcb, 0xed, 0xb0, 0x7a, 0xe0, 0x9b, 0xd5, 0xe9, 0xc9, 0x1a, 0x2a, 0xf8, 0x25, 0xc5, 0xef, 0xbb, 0x84, 0x4f, 0xa2, 0xb4, 0x67, 0xac, 0x39, 0xa8, 0x6a, 0x10, 0x5c, 0x4d, 0x98, 0x23, 0xc4, 0x22, 0xd5, 0x68, 0x97, 0x4f, 0xb1, 0x21, 0xfb, 0x20, 0x28, 0xf0, 0x8a, 0x65, 0x77, 0xf4, 0xfa, 0xa0, 0x29, 0xec, 0xc5, 0xc9, 0x74, 0xaa, 0x2c, 0xbb, 0x15, 0xba, 0xb4, 0x7d, 0x1c, 0xab, 0x1b, 0x05, 0xbc, 0xd7, 0xc8, 0x90, 0x3f, 0x0b, 0x5f, 0xef, 0xa0, 0xa5, 0x68, 0xbb, 0x7a, 0xcd, 0x6b, 0x4b, 0xfe, 0xb8, 0x77, 0xdf, 0xc6, 0x9d, 0x48, 0x63, 0x11, 0x35, 0x4b, 0x69, 0x98, 0x77, 0x60, 0x74, 0x03, 0x21, 0xdf, 0x79, 0xd7, 0x64, 0x1c, 0x6d, 0x05, 0x59, 0xf8, 0x93, 0xef, 0xc5, 0x16, 0x34, 0xc4, 0x67, 0x61, 0xa5, 0xfa, 0xb2, 0x7b, 0x1a, 0x29, 0xbb, 0x63, 0xa2, 0x5d, 0x3a, 0x1d, 0x78, 0x98, 0xb2, 0x80, 0x74, 0x67, 0x80, 0x27, 0x07, 0x84, 0x60, 0x38, 0x86, 0x94, 0x11, 0xf6, 0xec, 0x71, 0x71, 0x0a, 0x57, 0xa0, 0x85, 0x24, 0xc4, 0xae, 0x9c, 0xd0, 0x61, 0x31, 0xdb, 0x8a, 0x33, 0xc9, 0x50, 0x0d, 0x78, 0xc3, 0xd4, 0x07, 0xd3, 0x18, 0x1d, 0xc7, 0x2a, 0x4a, 0xbb, 0x45, 0x13, 0x3c, 0x0a, 0x8d, 0x68, 0x29, 0xa2, 0x2b, 0x0b, 0xa3, 0x99, 0x89, 0x34, 0x2d, 0x0b, 0xcd, 0x26, 0x7d, 0x55, 0x19, 0x0a, 0x21, 0x38, 0x88, 0x8a, 0x6d, 0x0b, 0x77, 0x20, 0xb7, 0x23, 0x1d, 0xc5, 0x22, 0x4b, 0xaf, 0xce, 0xe8, 0xe0, 0x99, 0x26, 0x0f, 0x62, 0xf7, 0x9a, 0x34, 0x54, 0x5c, 0x6b, 0x97, 0x11, 0xe8, 0x3b, 0x0c, 0x9b, 0xf0, 0x09, 0x14, 0xc8, 0x61, 0x10, 0x7f, 0x41, 0x47, 0xfe, 0x77, 0x7b, 0x5e, 0xa4, 0x03, 0x6a, 0xc6, 0xd9, 0x28, 0x99, 0x90, 0xd2, 0x10, 0x79, 0x45, 0x70, 0xdd, 0x69, 0xdc, 0x41, 0x59, 0xa0, 0xa9, 0x29, 0x11, 0xc5, 0x6d, 0xc3, 0x48, 0x92, 0xae, 0x04, 0x1d, 0xdb, 0x53, 0x84, 0x9a, 0x6c, 0x8d, 0xca, 0x03, 0x13, 0x67, 0x10, 0x02, 0xbd, 0x66, 0x84, 0xdd, 0x47, 0x22, 0xd5, 0xad, 0x58, 0xe9, 0x97, 0x8b, 0x13, 0x16, 0x4c, 0x74, 0xea, 0x2e, 0xe1, 0x3b, 0x69, 0x7a, 0x37, 0x9c, 0x1d, 0xcb, 0x0f, 0x0c, 0xbc, 0x22, 0x18, 0x61, 0x80, 0x54, 0x95, 0x6c, 0x1c, 0x22, 0xbc, 0xa1, 0xa4, 0x61, 0x3c, 0x66, 0x5c, 0x5f, 0x74, 0x08, 0xf4, 0xa6, 0x03, 0x05, 0xb5, 0xc6, 0xee, 0x71, 0x69, 0xcf, 0x85, 0xdc, 0x96, 0xe0, 0x0c, 0x8b, 0x83, 0xd9, 0x98, 0x49, 0xc5, 0x50, 0xab, 0x31, 0xd9, 0x58, 0x60, 0x93, 0x8c, 0x12, 0x69, 0x86, 0xd8, 0x27, 0xad, 0xfc, 0x1b, 0x82, 0x4d, 0x1c, 0xe7, 0xd0, 0x8a, 0xb2, 0x7c, 0x48, 0xbe, 0x56, 0x4a, 0x91, 0xb9, 0x32, 0x19, 0x13, 0xf2, 0x24, 0xb2, 0x61, 0x77, 0x11, 0x47, 0xc9, 0xe7, 0xc4, 0x00, 0xad, 0x0d, 0x4e, 0xba, 0xa5, 0xf9, 0x4c, 0x17, 0x2f, 0x9b, 0xd1, 0x2a, 0xce, 0x21, 0x45, 0x99, 0xf3, 0x08, 0xb2, 0x64, 0x08, 0x0c, 0x50, 0x68, 0x58, 0xed, 0xa0, 0xb8, 0xf0, 0xa7, 0xb3, 0x41, 0x06, 0x28, 0x12, 0x5a, 0x06, 0x03, 0x53, 0xb0, 0x85, 0x4e, 0x07, 0xe0, 0x49, 0x76, 0x07, 0x15, 0x1b, 0x3f, 0x0a, 0x4f, 0x05, 0xee, 0x51, 0x33, 0x87, 0x65, 0x76, 0x41, 0xcb, 0xdc, 0x05,
 0x8b, 0x4b, 0x55, 0x60, 0xcb, 0xe5, 0x46, 0x53, 0x14, 0x17, 0x98, 0x7e, 0x71, 0x42, 0x65, 0x2d, 0x3c, 0x05, 0x0b, 0x02, 0x7d, 0x3a, 0x93, 0x3f, 0xd3, 0xea, 0x68, 0x91, 0x08, 0x61, 0xb1, 0x86, 0x50, 0x4e, 0x27, 0xc5, 0x24, 0x6c, 0x72, 0x78, 0x26, 0xae, 0xde, 0x18, 0x98, 0x11, 0xad, 0xb4, 0xab, 0x98, 0xdc, 0x6a, 0x8b, 0x9a, 0x66, 0x81, 0x31, 0x91, 0x69, 0x59, 0xcf, 0x78, 0x5b, 0xc8, 0x9a, 0x3b, 0x36, 0x2e, 0xfe, 0x1d, 0x88, 0x0b, 0xe0, 0x39, 0xb7, 0x5d, 0x67, 0xc6, 0x87, 0x59, 0x2b, 0x6a, 0x45, 0x8e, 0xbd, 0x00, 0x0b, 0x78, 0xb1, 0x68, 0x58, 0x18, 0xcb, 0x2c, 0x27, 0x16, 0x48, 0xa5, 0x38, 0x4f, 0x03, 0x76, 0x3d, 0x4c, 0x46, 0x46, 0x0c, 0x6a, 0xe1, 0xba, 0x85, 0xb1, 0xea, 0xe9, 0x3c, 0x11, 0x88, 0xe1, 0x66, 0x07, 0xca, 0x70, 0x28, 0x04, 0x01, 0x44, 0x2b, 0x80, 0x30, 0x2b, 0x96, 0x65, 0x1f, 0xb2, 0x57, 0x4b, 0x02, 0x3d, 0x5e, 0x01, 0x45, 0xc5, 0xa7, 0x34, 0x0a, 0xc5, 0x14, 0xfe, 0x2d, 0x31, 0x80, 0xf3, 0xed, 0x96, 0x9d, 0xca, 0x50, 0x7a, 0x51, 0x3d, 0x64, 0xa5, 0xd5, 0x70, 0x60, 0x26, 0x30, 0x45, 0xa5, 0x13, 0x89, 0x13, 0xcc, 0xec, 0x48, 0x25, 0xd6, 0x70, 0x21, 0xa2, 0x92, 0x78, 0x35, 0xdb, 0xa0, 0x58, 0x2e, 0x9a, 0xb3, 0x61, 0xd1, 0x47, 0x31, 0x2c, 0x38, 0xad, 0x61, 0x54, 0xde, 0x6b, 0x00, 0x19, 0xb3, 0x2e, 0xa1, 0x32, 0xd6, 0xed, 0x42, 0x2e, 0xc8, 0x2a, 0xc0, 0x66, 0x6d, 0x99, 0x21, 0x0a, 0x27, 0x6c, 0xe5, 0xb9, 0x54, 0x4d, 0xec, 0x46, 0x2f, 0x25, 0xe7, 0x55, 0x88, 0x0a, 0x91, 0x8e, 0x14, 0xca, 0x84, 0x14, 0xd6, 0x40, 0x32, 0xe1, 0x03, 0xe8, 0xb1, 0x90, 0x0c, 0x0d, 0x56, 0x13, 0xb8, 0x1c, 0x28, 0x26, 0x5a, 0x06, 0x76, 0x70, 0x77, 0x14, 0xee, 0x83, 0xe1, 0x6f, 0x1d, 0x7a, 0x87, 0x54, 0x82, 0x1b, 0x9e, 0x55, 0x50, 0x7a, 0xd7, 0x7b, 0x93, 0xa5, 0x9e, 0x0b, 0xbe, 0x1d, 0x10, 0xc5, 0x2a, 0xfe, 0xa4, 0xab, 0x94, 0xd2, 0xe6, 0xb0, 0xe9, 0x75, 0xba, 0x4a, 0x65, 0x05, 0x52, 0xbc, 0x94, 0xae, 0x56, 0x33, 0x84, 0xee, 0x52, 0x46, 0x73, 0x99, 0xca, 0xa9, 0x4d, 0x64, 0x0a, 0x07, 0xec, 0x77, 0x38, 0xd0, 0xc0, 0x1f, 0xaf, 0x58, 0x0a, 0xf4, 0xa4, 0x0a, 0x72, 0x62, 0x9c, 0xfc, 0xc6, 0xf0, 0x20, 0x5c, 0xc2, 0x48, 0x49, 0x79, 0x00, 0x05, 0x5d, 0xf8, 0xa9, 0x67, 0x9a, 0xb0, 0x80, 0x24, 0x5e, 0x94, 0xd8, 0x01, 0xcc, 0x31, 0x75, 0x11, 0x0a, 0x6f, 0x43, 0xac, 0xad, 0x0b, 0x26, 0xd2, 0x7a, 0x3b, 0x01, 0xe0, 0x25, 0x87, 0x45, 0xe7, 0x6a, 0xe5, 0x36, 0x1d, 0x6f, 0x69, 0xcf, 0xcb, 0x1c, 0xda, 0x67, 0x3f, 0x59, 0x38, 0xa7, 0x9e, 0xf0, 0x8e, 0xb1, 0x91, 0xd5, 0x29, 0xa5, 0x31, 0x8c, 0x6d, 0xee, 0xba, 0xb1, 0x3a, 0xc8, 0x07, 0x29, 0xad, 0x8d, 0xc0, 0x54, 0x68, 0x17, 0x2e, 0x9c, 0xd0, 0x21, 0xcf, 0x1c, 0x87, 0xaf, 0x8f, 0x68, 0xf1, 0x8d, 0x19, 0x23, 0xe8, 0x6c, 0x78, 0x3a, 0x5f, 0x80, 0x90, 0x0f, 0x4a, 0x6d, 0xa0, 0xc4, 0x8a, 0x58, 0x36, 0xa5, 0x1f, 0x04, 0x2e, 0x6a, 0x14, 0x3e, 0xce, 0x7e, 0xc6, 0xe2, 0x65, 0x67, 0x5c, 0xcc, 0xde, 0x5b, 0xfb, 0xac, 0xa3, 0xc7, 0x83, 0x31, 0xc6, 0x11, 0xa6, 0xbd, 0x70, 0x68, 0x42, 0x55, 0x87, 0x39, 0x3b, 0xfe, 0x96, 0x7f, 0x93, 0x49, 0xbc, 0x49, 0xd6, 0xc9, 0x8a, 0x93, 0xe9, 0xa0, 0x9c, 0x41, 0xd6, 0x7f, 0x82, 0x01, 0xc6, 0x4e, 0x31, 0xa0, 0x35, 0x84, 0x5a, 0xbd, 0x4d, 0xb0, 0x6f, 0xf5, 0xc9, 0x83, 0x06, 0x2c, 0x82, 0xdd, 0x55, 0xdb, 0x13, 0x1a, 0x0a, 0xfa, 0xe2, 0x0f, 0x98, 0xcb, 0x1e, 0x8e, 0x3e, 0xa2, 0x39, 0x63, 0x2e, 0x85, 0x0c, 0xf6, 0x6c, 0x00, 0x89, 0xe3, 0x5d, 0x14, 0x22, 0x13, 0x5b, 0x56, 0xbc, 0x90, 0xb3, 0xe3, 0xd3, 0x8f, 0xf2, 0x3d, 0x76, 0x0f, 0x51, 0xaf, 0x6a, 0xab, 0x04, 0xbe, 0x4b, 0x97, 0x6d, 0x51, 0xeb, 0x6b, 0x00, 0x8d, 0xfd, 0xdd, 0xfc, 0x35, 0x80, 0xd0, 0x1c, 0x0d, 0x9c, 0xe2, 0x68, 0x60, 0xfc, 0x80, 0xdb, 0xa5, 0x14, 0x41, 0x90, 0x4c, 0x57, 0xfe, 0x61, 0x82, 0x76, 0x4a, 0x1d, 0x0f, 0xfb, 0x97, 0xa7, 0x54, 0xb5, 0x14, 0x15, 0xda, 0xd9, 0x5b, 0x94, 0x93, 0xd4, 0x5a, 0x85, 0xd3, 0xd9, 0xa1, 0xeb, 0xd0, 0xa9, 0xa2, 0xe7, 0x1c, 0x39, 0x56, 0xc8, 0x7e, 0x5e, 0xa7, 0xb5, 0x35, 0xd7, 0xfe, 0x31, 0xc1, 0xc1, 0x30, 0x59, 0x63, 0xc8, 0x92, 0xc1, 0x43, 0xa9, 0x33, 0xc4, 0xdd, 0x16, 0x29, 0xef, 0x95, 0xe8, 0x46, 0x16, 0xa9, 0x9d, 0x25, 0x60, 0x37, 0xd1, 0xde, 0x2b, 0xae, 0x13, 0xa5, 0x00, 0x9a, 0x65, 0x10, 0xd4, 0x93, 0xad, 0x16, 0x3e, 0xf1, 0xa1, 0x6d, 0x57, 0x36, 0x40, 0xdc, 0x4c, 0x32, 0x00, 0x5c, 0x12, 0x88, 0x14, 0x9a, 0x2c, 0x21, 0xd2, 0xc9, 0x47, 0xfc, 0x80, 0x30, 0xf7, 0x49, 0x9d, 0x64, 0x7f, 0x96, 0x54, 0x8a, 0x53, 0xba, 0x42, 0xdf, 0x51, 0x38, 0x9f, 0xdf, 0xc2, 0xbb, 0x12, 0xf8, 0xb5, 0xe4, 0x87, 0x68, 0x52, 0x9b, 0x61, 0x2d, 0xcc, 0x07, 0xfa, 0x82, 0xa8, 0x24, 0x67, 0x55, 0x1e, 0xd7, 0x18, 0x33, 0x94, 0x3c, 0xda, 0x12, 0xe9, 0xe9, 0x59, 0x88, 0x02, 0xa8, 0x82, 0x7e, 0x33, 0xa4, 0xb9, 0x6a, 0xd0, 0x0a, 0xc5, 0x49, 0x86, 0x9a, 0xbd, 0x84, 0x94, 0x0a, 0xa7, 0x8a, 0x38, 0xbf, 0x49, 0xa5, 0xa8, 0x95, 0x41, 0xb2, 0x1b, 0x6c, 0x54, 0x6e, 0x7b, 0xcb, 0x00, 0x7c, 0xbe, 0xad, 0xde, 0x46, 0x15, 0x8e, 0x6f, 0x51, 0x98, 0x68, 0x92, 0x29, 0x0c, 0x3f, 0x44, 0x9e, 0xce, 0x33, 0x9b, 0x24, 0x8f, 0x54, 0x9b, 0x94, 0xb5, 0x04, 0x46, 0x1c, 0xe1, 0x88, 0xe8, 0x24, 0x0c, 0xb9, 0x69, 0x8a, 0x68, 0x66, 0xa1, 0x40, 0x49, 0x69, 0x12, 0x9c, 0xdc, 0x05, 0x85, 0xa0, 0x89, 0x9a, 0x1e, 0xdb, 0x6b, 0x3f, 0x40, 0x2c, 0x4f, 0xa7, 0xb0, 0xf7, 0xdc, 0xa4, 0x2c, 0x6d, 0x21, 0xc4, 0x40, 0x4b, 0xb5, 0x76, 0x77, 0x63, 0xa7, 0xeb, 0x77, 0x1c, 0x35, 0x87, 0x17, 0x17, 0x87, 0x90, 0x78, 0x2f, 0x7f, 0xa5, 0x34, 0x82, 0x93, 0xc4, 0xb4, 0x4a, 0x86, 0xc5, 0x20, 0x33, 0x08, 0xb0, 0x1a, 0x9b, 0x5b, 0xd1, 0x77, 0x95, 0x2d, 0xa2, 0x9c, 0xa5, 0xd5, 0x13, 0x09, 0x78, 0x5a, 0x62, 0xf3, 0xf3, 0x6a, 0x59, 0x7f,
 0x6e, 0x82, 0x83, 0x60, 0x72, 0x79, 0xb6, 0x09, 0x54, 0x7f, 0x69, 0x0d, 0x65, 0x06, 0x13, 0x9d, 0xbf, 0x6b, 0x58, 0xa8, 0x1a, 0x7e, 0xce, 0xb7, 0x80, 0xbf, 0xb9, 0xac, 0x92, 0xa8, 0x13, 0xd3, 0x9c, 0x45, 0x55, 0x0a, 0x5a, 0xe2, 0xb8, 0xe2, 0x3e, 0xac, 0x93, 0x4f, 0xb4, 0xe3, 0xfa, 0xb0, 0xa7, 0xce, 0xe0, 0x5c, 0x72, 0xf1, 0x75, 0xa7, 0x2a, 0x55, 0xaf, 0x2a, 0x44, 0x9c, 0x00, 0xad, 0x04, 0xea, 0x69, 0x7e, 0xac, 0x9f, 0x40, 0x12, 0x86, 0xc3, 0xe5, 0xa2, 0x19, 0x0e, 0x89, 0x57, 0x96, 0x08, 0x6c, 0x1c, 0x9e, 0x5c, 0xf1, 0xc2, 0x63, 0xbc, 0x25, 0x35, 0x5c, 0xa2, 0xb5, 0xc8, 0xa8, 0x40, 0x02, 0x2d, 0x76, 0x4b, 0x6b, 0xca, 0x9a, 0xc8, 0xc8, 0x6e, 0xf9, 0x99, 0xcd, 0x8a, 0xae, 0x47, 0x9a, 0xba, 0xca, 0x4c, 0x81, 0x14, 0xd4, 0x82, 0x21, 0x53, 0xcd, 0x80, 0x8a, 0x92, 0x9a, 0xba, 0x12, 0x64, 0x80, 0x1d, 0x0b, 0x0f, 0xe2, 0xd1, 0x9e, 0x3b, 0x64, 0x6c, 0xdb, 0x27, 0x19, 0x8a, 0x3e, 0xd5, 0x43, 0x81, 0x90, 0x67, 0x0e, 0x04, 0x41, 0x1c, 0xcf, 0x52, 0x56, 0x1d, 0x77, 0x9b, 0x6a, 0x74, 0x89, 0xe6, 0xc1, 0x97, 0xb2, 0x23, 0x46, 0x74, 0xb2, 0xc8, 0x2c, 0x76, 0x8f, 0xa6, 0xd4, 0x88, 0xaa, 0x71, 0xcb, 0x4b, 0x57, 0x1b, 0xf0, 0x08, 0x88, 0x04, 0x22, 0x5a, 0xf8, 0x03, 0x99, 0x56, 0x72, 0xc2, 0xf7, 0x15, 0x51, 0x76, 0x26, 0x12, 0x9e, 0xc4, 0xa6, 0x38, 0xec, 0x58, 0xb2, 0x2c, 0x77, 0x66, 0x48, 0x05, 0x90, 0x61, 0x05, 0x71, 0x6a, 0x70, 0x26, 0x9d, 0x09, 0x1b, 0xcb, 0x57, 0x1d, 0x70, 0x35, 0x5c, 0xdd, 0xaf, 0x01, 0xd3, 0x79, 0x73, 0x96, 0x0f, 0xc1, 0x69, 0xa2, 0xed, 0xa2, 0x7e, 0x24, 0x87, 0x76, 0x13, 0x86, 0x74, 0x62, 0x1a, 0xed, 0x37, 0xa8, 0x54, 0x31, 0x57, 0x5a, 0xeb, 0x9a, 0x1f, 0xc8, 0xb3, 0xc3, 0x2e, 0x57, 0x19, 0x6c, 0x59, 0x81, 0x34, 0x9b, 0x36, 0x6b, 0xa6, 0x88, 0x74, 0x58, 0x22, 0x8a, 0x27, 0xdd, 0xe5, 0x97, 0x51, 0x69, 0x7c, 0xb2, 0x65, 0xa2, 0x3f, 0x2f, 0x25, 0x85, 0x74, 0x20, 0x7e, 0x98, 0xed, 0x52, 0x99, 0x75, 0x5a, 0xa5, 0x05, 0x6f, 0x9a, 0x6f, 0x75, 0xc4, 0xcc, 0x97, 0x56, 0x1f, 0xb4, 0x29, 0xe3, 0xed, 0x30, 0xe9, 0xa0, 0xae, 0x07, 0xb2, 0xe2, 0x24, 0x6c, 0x0d, 0xb8, 0x6b, 0x73, 0x4c, 0x8e, 0x51, 0xd1, 0x32, 0xa1, 0x65, 0xda, 0x96, 0x47, 0xec, 0x24, 0x0a, 0x1a, 0xfe, 0xb5, 0x31, 0x14, 0x59, 0x8a, 0x19, 0x8e, 0x74, 0x98, 0x5c, 0xf6, 0x04, 0xb5, 0xc9, 0x10, 0x0b, 0x8d, 0xfb, 0x68, 0x1c, 0x46, 0x3b, 0x04, 0x9e, 0x6f, 0x07, 0x15, 0x89, 0x28, 0x4e, 0xdc, 0x9e, 0xe6, 0x9f, 0x95, 0x7e, 0x5d, 0xd9, 0xc2, 0xf1, 0xb4, 0x0e, 0x36, 0x5d, 0xa3, 0x8a, 0xb9, 0xe5, 0x1c, 0x0c, 0x25, 0x6e, 0x3b, 0xe5, 0x58, 0x30, 0x01, 0x03, 0x9a, 0xbf, 0x90, 0x53, 0x5d, 0x03, 0x00, 0x19, 0x16, 0x15, 0xa3, 0xa0, 0x89, 0x13, 0x27, 0x7b, 0x47, 0xbd, 0x80, 0x6a, 0x9d, 0x9d, 0x83, 0x29, 0x27, 0x0e, 0x38, 0x7f, 0x98, 0x4e, 0x94, 0x82, 0x04, 0x4f, 0x3e, 0x68, 0x0e, 0xb3, 0x2a, 0xf1, 0x21, 0x77, 0x6a, 0x02, 0xc5, 0x49, 0x56, 0x07, 0x24, 0xd8, 0xdc, 0x89, 0x88, 0xe8, 0x7b, 0x21, 0xce, 0x8e, 0xf8, 0x7f, 0xae, 0x04, 0x4d, 0xa8, 0x85, 0x7a, 0x2e, 0x90, 0x54, 0x0d, 0x65, 0x22, 0x2b, 0x0c, 0x4e, 0xaa, 0x60, 0x82, 0x04, 0x66, 0x7e, 0x14, 0x8d, 0xeb, 0x27, 0x69, 0x3a, 0xb9, 0xea, 0x95, 0xea, 0x97, 0x31, 0x2b, 0xdd, 0x4c, 0x23, 0xd9, 0x0f, 0x63, 0x98, 0xfc, 0xfc, 0x49, 0xd5, 0x8e, 0xd4, 0x64, 0x87, 0x7c, 0x58, 0x2c, 0x49, 0x6b, 0x49, 0x83, 0x8d, 0x97, 0x20, 0xe1, 0x15, 0x79, 0x94, 0xb0, 0x6f, 0x5b, 0x07, 0x39, 0xc4, 0x96, 0xee, 0x87, 0x88, 0xa2, 0x88, 0x2a, 0x11, 0x0c, 0x1a, 0x0f, 0x41, 0xc9, 0xf3, 0x42, 0xe8, 0x05, 0xe4, 0x2e, 0x0a, 0x39, 0xce, 0x81, 0x3b, 0x36, 0x53, 0xf1, 0x19, 0x7c, 0x84, 0x5d, 0xa6, 0x17, 0x94, 0x3a, 0x51, 0x44, 0x78, 0x09, 0xdf, 0xc3, 0xc9, 0x7b, 0x38, 0x4c, 0xc6, 0x9a, 0xe3, 0x54, 0xa8, 0x3d, 0x8f, 0xc3, 0xde, 0xfb, 0x77, 0x7c, 0x21, 0x9a, 0x86, 0x54, 0x99, 0x83, 0x68, 0x59, 0x2f, 0x95, 0x91, 0xea, 0xe4, 0x5e, 0x24, 0x71, 0x72, 0xd8, 0xba, 0x06, 0x4f, 0x8d, 0x7b, 0x43, 0x6a, 0x8a, 0x91, 0xdd, 0x70, 0xae, 0x03, 0x84, 0x36, 0x91, 0x4e, 0xad, 0x90, 0x72, 0x06, 0xdd, 0x7b, 0x09, 0x21, 0x28, 0xd0, 0x08, 0x2d, 0x92, 0xd8, 0x2e, 0x33, 0x1d, 0xa9, 0xdc, 0x14, 0x63, 0x05, 0x5c, 0x1a, 0xd6, 0x16, 0x50, 0x6d, 0x5e, 0xaa, 0x53, 0x25, 0xb3, 0xea, 0x11, 0x2d, 0xa2, 0xaf, 0x41, 0x14, 0x36, 0x3c, 0x84, 0x49, 0xbd, 0x95, 0x55, 0x94, 0x22, 0x54, 0x72, 0x38, 0x49, 0x9f, 0xfa, 0x59, 0x6c, 0x44, 0xc7, 0xe3, 0x9b, 0xba, 0x18, 0x1a, 0xa7, 0x43, 0x61, 0xf7, 0x6b, 0xc2, 0x76, 0x18, 0x73, 0x8d, 0xe3, 0xe3, 0xdf, 0xa9, 0x27, 0xe2, 0x1c, 0x79, 0xc9, 0x43, 0x96, 0xaa, 0x27, 0x05, 0xff, 0x93, 0x32, 0xd9, 0x9a, 0x76, 0x23, 0x46, 0xf2, 0x5b, 0x89, 0x40, 0xb7, 0x05, 0x3c, 0x22, 0x26, 0x39, 0x80, 0xf6, 0x65, 0x1a, 0x22, 0x89, 0x90, 0x59, 0xe2, 0x48, 0x2d, 0xfb, 0xdc, 0xd1, 0xb6, 0x72, 0xa9, 0xba, 0xc1, 0x1e, 0x29, 0xa4, 0x91, 0xdc, 0x91, 0xd5, 0xaa, 0xd9, 0x01, 0xbf, 0x8e, 0x47, 0xb8, 0xd0, 0x19, 0x93, 0x25, 0x58, 0x50, 0x80, 0xd5, 0x00, 0xbf, 0xdc, 0xd1, 0x2a, 0x15, 0xba, 0x21, 0x8b, 0x48, 0xc0, 0xd1, 0x11, 0xd0, 0xdc, 0x5c, 0x6e, 0x21, 0xa4, 0xd8, 0x6b, 0x18, 0x7d, 0xd0, 0x8c, 0xc1, 0x15, 0xb1, 0xd2, 0x14, 0x2b, 0x40, 0x67, 0x2b, 0x3a, 0xfd, 0x28, 0x72, 0x09, 0x55, 0x72, 0x4e, 0x28, 0x98, 0xf6, 0x14, 0x0d, 0x81, 0xb7, 0x3e, 0x34, 0x06, 0xd1, 0x27, 0x87, 0xf8, 0x42, 0x20, 0x5e, 0x06, 0x96, 0xc7, 0xf9, 0x88, 0x6b, 0x89, 0x98, 0x4a, 0x4b, 0xd1, 0xf4, 0x12, 0x4d, 0x85, 0xd5, 0x46, 0xdd, 0x90, 0x0e, 0x9f, 0x13, 0x53, 0x84, 0xd5, 0xa6, 0x5d, 0xf2, 0x0a, 0x86, 0xa0, 0xa7, 0x49, 0x0c, 0x1d, 0x11, 0x54, 0x4b, 0xc3, 0xdd, 0x07, 0x4d, 0x44, 0x4d, 0x51, 0x06, 0xdd, 0x7a, 0x29, 0xe6, 0xa9, 0xf1, 0xa8, 0xfc, 0x70, 0xb1, 0x49, 0x84, 0xd1, 0xa0, 0xac, 0x94,
 };
-uint8_t A_bpoly_MIDSEC[9*NEWHOPE_POLYBYTES] = {
+uint8_t A_bpoly_MIDSEC[9*NEWHOPE_RINGCT20_POLYBYTES] = {
 0x32, 0xca, 0xd3, 0x14, 0x15, 0x0d, 0x4d, 0xc3, 0x81, 0x6f, 0x3b, 0xef, 0xc8, 0x3c, 0xc7, 0xe7, 0x8f, 0x77, 0xf8, 0xde, 0x5d, 0xb0, 0xdc, 0xb5, 0x62, 0x90, 0x26, 0x12, 0xce, 0x0d, 0xdd, 0x05, 0xe5, 0xd1, 0xb5, 0xb9, 0xec, 0x60, 0x29, 0x85, 0x54, 0x81, 0xe8, 0x5c, 0x26, 0x18, 0x1c, 0x4d, 0x79, 0xa1, 0x2e, 0x4a, 0x6b, 0xba, 0x3c, 0x1b, 0xb6, 0x5f, 0x4a, 0xc3, 0xd1, 0xc6, 0x67, 0xf2, 0x98, 0x23, 0xe4, 0x30, 0x26, 0x11, 0xbd, 0xc7, 0xe3, 0x44, 0x26, 0x92, 0x7b, 0xed, 0x9f, 0xda, 0x17, 0xc3, 0x42, 0x1d, 0xb1, 0xcd, 0xa1, 0xcb, 0x03, 0xfc, 0x76, 0xe8, 0x83, 0x66, 0xb4, 0x4b, 0xee, 0x0f, 0x1f, 0x4a, 0x7b, 0x70, 0xc7, 0x48, 0x37, 0x40, 0x96, 0xb1, 0x65, 0xed, 0xca, 0x10, 0x63, 0x0f, 0xf6, 0x5a, 0x55, 0x1d, 0xaf, 0x75, 0xcd, 0xf0, 0x75, 0x73, 0x9a, 0x9a, 0xa7, 0x45, 0x6f, 0xd5, 0xb0, 0x74, 0xa6, 0xe6, 0xc0, 0x88, 0xe0, 0x79, 0x70, 0x97, 0x18, 0xa2, 0x1f, 0x16, 0x1c, 0x94, 0x42, 0xe0, 0x21, 0xab, 0xaa, 0x27, 0x0c, 0x7c, 0x28, 0x1f, 0xe6, 0x2a, 0xfe, 0x58, 0x25, 0xbc, 0xd1, 0xa4, 0x0a, 0xae, 0x44, 0x15, 0x69, 0xc1, 0x98, 0x72, 0xe7, 0xb4, 0xbb, 0x61, 0x6c, 0x06, 0xc6, 0x6c, 0xf8, 0x44, 0x30, 0xee, 0x09, 0xc4, 0x17, 0xf2, 0x65, 0xba, 0x07, 0xe8, 0x12, 0x5d, 0xa6, 0x66, 0x97, 0x65, 0x50, 0xa9, 0x89, 0xf1, 0x4c, 0x39, 0x22, 0x5b, 0xa6, 0xf8, 0xf5, 0x4c, 0x98, 0xc5, 0x61, 0xc2, 0xea, 0x5a, 0x4d, 0x78, 0xaa, 0xa0, 0x11, 0x8f, 0xc1, 0x15, 0xc6, 0xde, 0xdb, 0x40, 0xd6, 0xca, 0x55, 0x50, 0x01, 0xb9, 0x02, 0xfe, 0xd8, 0x85, 0x73, 0x67, 0x90, 0x51, 0xa0, 0x3e, 0x10, 0x1d, 0xa5, 0xa5, 0xb7, 0x3b, 0x20, 0x92, 0xf5, 0xcb, 0xe4, 0xaa, 0x01, 0xd0, 0x42, 0xd0, 0x54, 0x2c, 0xe0, 0x2d, 0x28, 0x82, 0x80, 0x80, 0x4b, 0x76, 0x4c, 0xc9, 0x6f, 0xb7, 0x9d, 0xd9, 0x50, 0x6e, 0x2c, 0x86, 0xb3, 0x1a, 0xa4, 0xc2, 0x20, 0x98, 0x25, 0x0e, 0x43, 0x5a, 0x67, 0x94, 0xe9, 0x11, 0x10, 0x61, 0x21, 0x42, 0x48, 0x74, 0x28, 0x1b, 0x40, 0x72, 0xa7, 0x1c, 0x79, 0x07, 0xa0, 0xce, 0x9d, 0x32, 0xeb, 0x30, 0x64, 0x06, 0x5b, 0x83, 0x4a, 0x83, 0x45, 0x19, 0x33, 0x08, 0x7b, 0x39, 0x2a, 0xf4, 0x98, 0x43, 0x4e, 0xfa, 0xa7, 0x69, 0x30, 0x66, 0xc2, 0xd0, 0xd0, 0x1b, 0x70, 0x19, 0x10, 0xf4, 0x9f, 0x6c, 0x08, 0x8b, 0x18, 0x4c, 0x73, 0x2e, 0x96, 0x1a, 0xe4, 0x34, 0x1a, 0x97, 0xa5, 0x30, 0x32, 0xe1, 0xee, 0x2a, 0x56, 0x67, 0x18, 0xcb, 0x49, 0xb1, 0x36, 0x26, 0xa6, 0x67, 0x18, 0x8c, 0x19, 0x87, 0xc4, 0x83, 0xf5, 0x60, 0x45, 0x31, 0x34, 0x98, 0x95, 0x23, 0xb0, 0xa6, 0xc5, 0x63, 0x81, 0x69, 0x67, 0xc0, 0xa0, 0x45, 0x9c, 0xda, 0xde, 0x8d, 0x85, 0x09, 0x01, 0x30, 0xff, 0x26, 0xd0, 0x6a, 0xf9, 0x9c, 0x7e, 0x50, 0xaf, 0x7d, 0xd7, 0xcf, 0x1e, 0x7e, 0x2c, 0xde, 0x72, 0x79, 0x38, 0x21, 0x21, 0x88, 0x66, 0x9a, 0x47, 0x82, 0x2e, 0x1b, 0x0e, 0xcf, 0xf0, 0xfb, 0x21, 0x12, 0x70, 0xdc, 0xac, 0x16, 0x26, 0x41, 0x6a, 0x7e, 0x60, 0xde, 0x22, 0xca, 0x2b, 0xa4, 0x36, 0x94, 0x1f, 0xfd, 0x95, 0x11, 0xf6, 0xb4, 0xdf, 0x07, 0x57, 0xda, 0x70, 0xf4, 0x5f, 0x57, 0x05, 0x24, 0xa0, 0x9a, 0x25, 0xa1, 0x6f, 0x52, 0x5d, 0x23, 0xe8, 0x5c, 0x2b, 0xca, 0x81, 0xf4, 0xb0, 0x3e, 0xd6, 0x42, 0x3f, 0x4d, 0x77, 0x85, 0x25, 0x58, 0x70, 0x70, 0x66, 0x07, 0x13, 0x56, 0xf8, 0x69, 0xf4, 0x62, 0x68, 0x3a, 0xae, 0x26, 0x38, 0xd5, 0xd4, 0xc2, 0x22, 0x2f, 0x2d, 0x62, 0xb9, 0x57, 0x70, 0x85, 0x9a, 0x06, 0x4b, 0xbe, 0xa4, 0x41, 0xe9, 0x13, 0x2a, 0xa3, 0xb2, 0x54, 0x7c, 0x94, 0x20, 0xe4, 0x38, 0xe1, 0x2e, 0x7c, 0x96, 0x90, 0xc2, 0x12, 0x87, 0x28, 0x14, 0xd8, 0xff, 0x71, 0xa9, 0x37, 0x6f, 0x03, 0x45, 0xf2, 0x58, 0xb4, 0x97, 0x00, 0xb8, 0x5a, 0x40, 0x1d, 0xab, 0x63, 0x82, 0x0e, 0xe6, 0xdb, 0x30, 0x0a, 0xe5, 0x0d, 0x60, 0xf5, 0xdf, 0x8c, 0x61, 0x16, 0x5e, 0x06, 0x47, 0x4e, 0x90, 0x08, 0x34, 0x9d, 0x67, 0x45, 0x0b, 0xd2, 0x0c, 0xca, 0x25, 0xea, 0xe2, 0x56, 0xc6, 0x82, 0x89, 0xe1, 0x07, 0x2b, 0x2c, 0x55, 0xb6, 0x4a, 0x8a, 0x3e, 0x36, 0x7f, 0x22, 0x2b, 0xe9, 0xc9, 0xb1, 0xb4, 0xb7, 0x56, 0x8e, 0xae, 0x56, 0x97, 0x21, 0xc2, 0xa6, 0x8b, 0xf2, 0x61, 0x52, 0x90, 0x8f, 0x34, 0xb7, 0x2a, 0x84, 0x2d, 0xb2, 0x5e, 0xba, 0xb0, 0xf7, 0x14, 0xb5, 0xea, 0xcc, 0x54, 0x3d, 0x55, 0xdc, 0x10, 0x7a, 0x59, 0xd0, 0x36, 0xbe, 0xef, 0x72, 0x08, 0xb0, 0xdc, 0x59, 0x77, 0xa3, 0xd0, 0x49, 0x24, 0x91, 0x4b, 0xff, 0xa0, 0xe3, 0x55, 0x4c, 0x02, 0x19, 0x33, 0x13, 0xcb, 0x42, 0xfd, 0x7d, 0xa1, 0x72, 0x29, 0xdf, 0x38, 0xb6, 0x9c, 0x4a, 0x3b, 0x24, 0xfc, 0x02, 0xec, 0xd5, 0x07, 0x27, 0x0f, 0xf3, 0x9b, 0x7a, 0x42, 0x7e, 0x25, 0x62, 0x2f, 0xaa, 0x32, 0xe9, 0x4c, 0xc2, 0xa6, 0x91, 0xd9, 0xfa, 0x04, 0x13, 0x03, 0xdf, 0xaf, 0x05, 0xa2, 0x46, 0x05, 0xc5, 0x89, 0x34, 0x12, 0x62, 0x88, 0xb2, 0x3b, 0x1d, 0x49, 0x8b, 0x6f, 0xb5, 0x2b, 0x5d, 0x05, 0x93, 0xd1, 0xad, 0x1c, 0x3a, 0xeb, 0xe0, 0x4c, 0x15, 0x34, 0x88, 0xab, 0xdc, 0xeb, 0xab, 0x03, 0xe1, 0xdd, 0x28, 0x93, 0x84, 0x34, 0x42, 0x4c, 0x01, 0x28, 0x44, 0x06, 0x3f, 0x10, 0x8e, 0x44, 0xbc, 0x40, 0xa4, 0x0f, 0x7a, 0xb3, 0x81, 0x88, 0xed, 0xa5, 0x0c, 0x23, 0x8e, 0x42, 0x34, 0x5d, 0x07, 0xac, 0x28, 0xea, 0xe2, 0x46, 0x60, 0xec, 0x2d, 0xbb, 0xff, 0xdd, 0x04, 0xd1, 0x21, 0xa6, 0xc7, 0xc4, 0x7c, 0x2a, 0x3d, 0x6a, 0xcd, 0xba, 0x87, 0x86, 0x66, 0x3e, 0xc6, 0x74, 0x16, 0x9a, 0x70, 0x08, 0x2a, 0xc5, 0xe0, 0x94, 0xec, 0x08, 0x79, 0x81, 0x8e, 0xbc, 0x19, 0x57, 0xe8, 0x2f, 0x2f, 0x80, 0xac, 0x46, 0xe1, 0x58, 0x80, 0x09, 0x61, 0x58, 0xcb, 0x86, 0xa4, 0x2f, 0xb6, 0xae, 0xd0, 0x25, 0x7f, 0x6a, 0x09, 0x13, 0x2f, 0xad, 0xe4, 0x89, 0x01, 0x15, 0x79, 0x57, 0xdf, 0x22, 0x8f, 0xbc, 0x87, 0xd1, 0x60, 0xa2, 0x50, 0x51, 0xc6, 0xa7, 0xa2, 0xe0, 0xfd, 0xb7, 0x06, 0x05, 0x64, 0x38, 0xab, 0x34, 0x26, 0xa8, 0x71, 0x60,
 0x6b, 0x18, 0x6e, 0x85, 0x40, 0x8a, 0x54, 0xe7, 0x61, 0x90, 0xe8, 0xb6, 0x94, 0x81, 0x35, 0x8e, 0xf7, 0x96, 0x9a, 0x39, 0x34, 0x92, 0x13, 0x93, 0xf8, 0x71, 0x7e, 0x06, 0x6e, 0xd6, 0x51, 0x3b, 0xa1, 0x25, 0x0b, 0x0b, 0x52, 0xd3, 0x52, 0x51, 0xaa, 0x62, 0xb7, 0x6f, 0x17, 0x59, 0x45, 0x16, 0x23, 0xf2, 0x48, 0x68, 0x57, 0x1f, 0x3a, 0x29, 0x9e, 0x43, 0x7a, 0x4b, 0x0a, 0x78, 0x89, 0xb9, 0xac, 0x3c, 0x47, 0x88, 0x54, 0x04, 0xf5, 0x90, 0x32, 0x18, 0x17, 0x1d, 0x92, 0x8d, 0xe8, 0x79, 0xdb, 0xbd, 0xa6, 0x67, 0x7a, 0x47, 0x84, 0x16, 0x68, 0xb1, 0x5c, 0x7e, 0x5a, 0xcb, 0xd0, 0x9d, 0x08, 0x01, 0xe5, 0xc5, 0x54, 0xf0, 0x6f, 0x6e, 0x6c, 0x61, 0x53, 0x1a, 0x26, 0x50, 0x62, 0x88, 0x62, 0x1b, 0xbe, 0xd0, 0x40, 0xec, 0x30, 0x7c, 0x56, 0x62, 0x07, 0x4c, 0x01, 0x7d, 0x7e, 0x88, 0x56, 0x89, 0x13, 0x76, 0x6b, 0x2f, 0x0e, 0x7e, 0xe2, 0x1a, 0x2e, 0x87, 0x8d, 0x46, 0xcf, 0x39, 0x54, 0x3e, 0x25, 0xd7, 0x2d, 0x14, 0x77, 0x59, 0x79, 0x9b, 0x89, 0x65, 0x42, 0x92, 0xe8, 0xcc, 0x05, 0xe7, 0x5a, 0xf4, 0x9b, 0xcc, 0x6c, 0x3c, 0x16, 0x2c, 0xf9, 0xf1, 0x05, 0x1c, 0x6f, 0x58, 0x6e, 0xcd, 0x49, 0x85, 0x0c, 0xa6, 0x3e, 0x4e, 0x11, 0x30, 0xdf, 0xa2, 0xa6, 0x2e, 0x2a, 0x4b, 0x3b, 0x82, 0xce, 0x52, 0xbb, 0xcb, 0x7b, 0xc6, 0xd5, 0x71, 0x4e, 0x37, 0x8f, 0x80, 0xd7, 0x4c, 0x25, 0x77, 0x77, 0x0b, 0xf6, 0x87, 0x02, 0xe8, 0x73, 0xc1, 0x96, 0xa7, 0xf5, 0x0c, 0x65, 0x10, 0x7e, 0xae, 0x5c, 0x29, 0x90, 0x11, 0x14, 0xb4, 0x49, 0x87, 0x82, 0x67, 0xe1, 0x05, 0x19, 0x41, 0xc3, 0x26, 0x5f, 0x45, 0x6f, 0x54, 0xe4, 0xd4, 0xd0, 0xf3, 0x12, 0x01, 0x4f, 0x2b, 0x21, 0x75, 0x0f, 0x91, 0x54, 0x23, 0x4c, 0x6f, 0xd0, 0x96, 0xd2, 0xa2, 0xad, 0x92, 0x12, 0x66, 0xcd, 0x39, 0x25, 0xc3, 0x6b, 0x82, 0xc4, 0xcf, 0x6a, 0xad, 0x0c, 0x22, 0xda, 0x73, 0x08, 0xcc, 0x99, 0xdb, 0x2b, 0x4b, 0x9a, 0x4e, 0xf6, 0x74, 0x5a, 0xc1, 0x8f, 0x78, 0xa4, 0x4c, 0xb7, 0xa1, 0x5a, 0x3a, 0x15, 0x77, 0x01, 0xab, 0xde, 0x51, 0x7c, 0x8a, 0x8b, 0x29, 0x51, 0x24, 0x14, 0xaf, 0xda, 0xe5, 0x2a, 0xb1, 0xa3, 0x4d, 0xfd, 0x41, 0x27, 0x3e, 0x94, 0xdc, 0xd7, 0x88, 0x05, 0x5f, 0x46, 0x5d, 0xe7, 0x29, 0x60, 0x37, 0x88, 0xa2, 0x8f, 0xd1, 0x97, 0xc9, 0x43, 0x90, 0xa6, 0x1a, 0x81, 0x1d, 0x17, 0x39, 0xcf, 0x22, 0xac, 0x80, 0x26, 0x2f, 0xa6, 0x7d, 0xb4, 0x22, 0xef, 0xa8, 0xce, 0x08, 0xe4, 0xb1, 0x80, 0x65, 0x4f, 0xad, 0x60, 0xfd, 0xb1, 0x95, 0x5a, 0x5d, 0x2f, 0x41, 0x4d, 0xbc, 0x7d, 0x94, 0xe0, 0x87, 0xbb, 0x8a, 0xa8, 0xad, 0x3b, 0xe7, 0x32, 0xbb, 0x82, 0x61, 0x35, 0x30, 0xe9, 0x38, 0x72, 0x9b, 0x7e, 0x9b, 0x58, 0x83, 0xe3, 0x07, 0x8c, 0x91, 0x8c, 0x19, 0xda, 0xae, 0x78, 0x7f, 0x6c, 0x21, 0xea, 0x50, 0x9c, 0xfb, 0x40, 0x28, 0x96, 0x8a, 0x13, 0x6e, 0x6b, 0x51, 0x85, 0x67, 0x37, 0x66, 0xc4, 0x55, 0x25, 0x88, 0xb1, 0x28, 0x2e, 0xfc, 0xd8, 0x78, 0xe6, 0x38, 0xb2, 0x89, 0xc3, 0x92, 0xa4, 0x16, 0x77, 0x28, 0x80, 0x4b, 0x17, 0x32, 0xf2, 0xb3, 0xbe, 0x51, 0x7d, 0x34, 0x5f, 0xf0, 0x2d, 0xc7, 0x27, 0x04, 0xdb, 0x8f, 0x26, 0xa4, 0xed, 0xa8, 0xdf, 0xf7, 0xaf, 0xb8, 0x13, 0xfb, 0x60, 0x16, 0x09, 0x7c, 0xa4, 0x01, 0x5a, 0x50, 0x3b, 0xca, 0xe9, 0xd6, 0x66, 0xff, 0xe9, 0x95, 0xa0, 0x75, 0x29, 0x87, 0xc0, 0x43, 0x55, 0xd5, 0x3f, 0x8a, 0x74, 0x08, 0x40, 0x4e, 0x69, 0xd3, 0xe1, 0x73, 0x91, 0x87, 0xf5, 0x33, 0x0e, 0x12, 0x0e, 0x74, 0x43, 0x01, 0x75, 0x21, 0x81, 0x8a, 0x59, 0xd7, 0xe2, 0x50, 0x23, 0x51, 0x1d, 0x58, 0xa2, 0x8c, 0xa3, 0x6a, 0xd2, 0xbd, 0x98, 0xe9, 0x03, 0x13, 0x4d, 0x68, 0xa3, 0xd1, 0x2e, 0x47, 0xe3, 0x75, 0xb4, 0xb4, 0xac, 0x40, 0x1a, 0x87, 0x28, 0xce, 0xa7, 0x67, 0xa3, 0xb4, 0x18, 0x17, 0x45, 0x6b, 0xb9, 0x41, 0x57, 0x20, 0x98, 0xfa, 0x09, 0x2b, 0x44, 0x25, 0xb8, 0x16, 0x4d, 0x7a, 0x16, 0xc6, 0xcf, 0x54, 0xaf, 0x34, 0x12, 0x91, 0x21, 0x6e, 0x45, 0xb8, 0x2d, 0x6f, 0x4b, 0xcb, 0x8a, 0x51, 0x03, 0x86, 0xb5, 0xb8, 0xc9, 0xa1, 0xf8, 0x39, 0x09, 0x61, 0x13, 0x1c, 0x35, 0x80, 0x79, 0x31, 0x26, 0x27, 0x83, 0x4c, 0xa4, 0x25, 0x28, 0x66, 0x3f, 0x6b, 0x35, 0x91, 0xa2, 0x96, 0x99, 0x82, 0x03, 0x5b, 0xb3, 0x3a, 0xfd, 0x8e, 0x8c, 0xae, 0xda, 0xf4, 0x9c, 0x75, 0x81, 0xa8, 0x06, 0xea, 0x8b, 0x11, 0x3d, 0x8d, 0x06, 0x27, 0x5e, 0x94, 0xa7, 0x61, 0x1f, 0x1b, 0x65, 0x68, 0x24, 0xc5, 0xb0, 0x61, 0x45, 0x2e, 0x21, 0x81, 0xfa, 0xbe, 0xb1, 0x64, 0xc3, 0x86, 0x46, 0x6c, 0x74, 0x62, 0x3d, 0x96, 0xe6, 0x61, 0x97, 0x04, 0xbf, 0xef, 0x4f, 0xdc, 0xaa, 0x21, 0x79, 0x8f, 0x13, 0xa5, 0xbc, 0x60, 0xfd, 0x2d, 0x5c, 0x19, 0xd9, 0xa5, 0x3b, 0xed, 0xf0, 0xaa, 0xda, 0x9b, 0x7f, 0x07, 0x13, 0x21, 0xbd, 0xbd, 0x13, 0x68, 0x30, 0x34, 0xcd, 0xbf, 0x42, 0x56, 0xac, 0x6b, 0x3d, 0xae, 0x84, 0x74, 0x8b, 0xef, 0xb6, 0x4d, 0x28, 0x99, 0x0f, 0x1e, 0x35, 0xe9, 0x86, 0xe1, 0x08, 0xbc, 0x07, 0x6e, 0x86, 0x9d, 0x5a, 0x34, 0x0d, 0x2a, 0xe4, 0x32, 0xcb, 0x82, 0x03, 0x69, 0x65, 0xaa, 0x43, 0xfd, 0x00, 0x12, 0x9b, 0x57, 0x80, 0x0b, 0xae, 0x1a, 0x9a, 0xa1, 0xdd, 0x66, 0xda, 0x33, 0x1d, 0x26, 0x51, 0xe9, 0x4e, 0x80, 0xe4, 0x6c, 0xa4, 0x8a, 0x90, 0x61, 0xd1, 0x30, 0x3a, 0x64, 0x1f, 0x6e, 0xb8, 0xe0, 0xa6, 0x78, 0x3b, 0xb0, 0xda, 0x7e, 0x44, 0x33, 0xb9, 0x7c, 0x22, 0x2b, 0x20, 0x20, 0xab, 0xa9, 0x44, 0x3b, 0x1f, 0x5c, 0x8b, 0x2d, 0xbe, 0x3d, 0xfe, 0xd7, 0xa0, 0x1a, 0xec, 0x1c, 0x1f, 0xa8, 0x4c, 0xb7, 0xe5, 0xfc, 0x7c, 0xb6, 0xd6, 0x93, 0x37, 0x06, 0x38, 0x34, 0x6c, 0x95, 0x28, 0xd5, 0xf7, 0xa4, 0xce, 0xb6, 0x3f, 0xeb, 0x13, 0x91, 0x79, 0xb4, 0x99, 0x3c, 0x9c, 0x4b, 0xd0, 0x05, 0xc0, 0x76, 0x42, 0xde, 0x2e, 0x27, 0x9a, 0x7d, 0x5f, 0x58, 0x1b, 0x4d, 0x88, 0xa8, 0x4c, 0x10, 0x47, 0x1f, 0x1f, 0x10, 0xc9, 0x78, 0x27, 0xa9, 0xd0, 0x8b, 0xe4, 0x1a, 0x04, 0x0c,
 0x57, 0x6a, 0xe3, 0xd2, 0x3b, 0x55, 0x16, 0x40, 0x01, 0x79, 0x7b, 0xf3, 0x2e, 0xb0, 0x74, 0x48, 0xf1, 0xdb, 0xc8, 0xc6, 0x44, 0x0f, 0xe7, 0x73, 0x90, 0x19, 0x58, 0x5a, 0x58, 0x4d, 0xbf, 0x31, 0xd4, 0xa6, 0x80, 0xf1, 0x4b, 0xbc, 0x92, 0x21, 0x64, 0x89, 0x78, 0x4a, 0x38, 0xb5, 0xd2, 0x81, 0x57, 0x55, 0x65, 0x76, 0x12, 0x77, 0x2c, 0x2f, 0xb7, 0xe4, 0xbb, 0x4a, 0x02, 0xb8, 0x0d, 0xb5, 0x6f, 0x98, 0xdb, 0xb0, 0x7e, 0x2b, 0x01, 0x1b, 0xa9, 0xb3, 0x1e, 0x44, 0x7b, 0x40, 0x1b, 0x3f, 0xab, 0x50, 0x22, 0xb9, 0x6d, 0x4e, 0xe6, 0x74, 0xd2, 0xa2, 0x3b, 0x58, 0xd4, 0x5f, 0x54, 0x39, 0x6d, 0xbf, 0x37, 0x68, 0xf9, 0x37, 0x8c, 0x0c, 0x91, 0x4e, 0x8a, 0xb7, 0xe2, 0x8c, 0xa2, 0x0b, 0x72, 0x5a, 0xbd, 0x31, 0x40, 0x3d, 0xb1, 0x3e, 0xc0, 0x4a, 0xd4, 0x7e, 0x5d, 0x35, 0xf3, 0x16, 0x0a, 0x94, 0x63, 0x09, 0xa8, 0x78, 0xdb, 0xe8, 0xcb, 0x63, 0x5c, 0x44, 0x93, 0x84, 0x3d, 0x44, 0xe6, 0x04, 0xa3, 0x1d, 0x17, 0x32, 0x42, 0x89, 0x41, 0x7d, 0x32, 0x26, 0x4d, 0x13, 0x39, 0x6c, 0x8d, 0xf7, 0x62, 0xf2, 0x3b, 0x40, 0xfd, 0x7a, 0x47, 0x25, 0x5c, 0xd0, 0xd2, 0x79, 0xb5, 0x08, 0x51, 0x3b, 0x39, 0x2b, 0xca, 0x0d, 0x29, 0xd6, 0x46, 0xc2, 0x71, 0xfc, 0x3f, 0x18, 0x0f, 0xf9, 0xb8, 0x95, 0xca, 0x37, 0xd5, 0x6e, 0xb7, 0xe9, 0x7c, 0x85, 0xbb, 0x81, 0xdd, 0x72, 0x70, 0x78, 0xe1, 0x5f, 0x82, 0x05, 0xbb, 0x21, 0x11, 0x7c, 0x8b, 0x6f, 0x0e, 0x5d, 0xb5, 0x45, 0x3a, 0x53, 0xfa, 0x5f, 0x1f, 0x65, 0x75, 0x76, 0x68, 0x78, 0xa5, 0x13, 0xe2, 0x21, 0x29, 0x2b, 0x71, 0xdf, 0x24, 0x03, 0x79, 0x7c, 0x91, 0x5a, 0x40, 0x4d, 0xa0, 0x80, 0x08, 0x37, 0x17, 0x66, 0x3f, 0x05, 0x75, 0xf4, 0x91, 0xb6, 0xa5, 0x08, 0x98, 0x13, 0x48, 0x95, 0x93, 0x22, 0x2a, 0x14, 0x2b, 0xbe, 0x60, 0xa0, 0xd7, 0x82, 0xf1, 0xd0, 0x41, 0x2c, 0x3a, 0x4d, 0xbb, 0x7b, 0xb1, 0x11, 0x03, 0xdd, 0x8f, 0x19, 0x18, 0xa8, 0xb1, 0x90, 0x34, 0x9c, 0xc0, 0x49, 0x18, 0xba, 0x45, 0x86, 0x2a, 0x9a, 0x6a, 0xd4, 0xea, 0x1a, 0x05, 0x22, 0xe5, 0xc0, 0xf6, 0x14, 0x01, 0x0f, 0xe3, 0xab, 0xfb, 0xd3, 0xfe, 0xad, 0xf4, 0x07, 0xcf, 0x13, 0x90, 0x62, 0xbe, 0xc2, 0xcd, 0x0b, 0x82, 0xe7, 0x21, 0x12, 0x81, 0x64, 0x9c, 0x04, 0x58, 0x48, 0x83, 0x35, 0xa6, 0x39, 0x4b, 0x84, 0xf8, 0x8b, 0xb9, 0xa4, 0x50, 0xb3, 0x2c, 0x41, 0x62, 0xb2, 0x8b, 0xc5, 0x68, 0xf1, 0xf1, 0x48, 0xaf, 0x0b, 0x40, 0xc5, 0xcb, 0x5c, 0x7e, 0x39, 0xe5, 0xfb, 0x90, 0xde, 0xc8, 0x7a, 0xb9, 0x05, 0x8b, 0xa7, 0xa9, 0xd5, 0x56, 0x72, 0x57, 0xf9, 0x13, 0x7a, 0xf0, 0x7a, 0xff, 0x56, 0xcc, 0xa7, 0x71, 0x7a, 0x13, 0xf6, 0x01, 0xa0, 0xa5, 0xdd, 0x32, 0x83, 0x73, 0x56, 0xbb, 0xa5, 0xec, 0xf2, 0x85, 0xa2, 0x2d, 0x91, 0xb5, 0xe3, 0xb8, 0x62, 0xa8, 0xa9, 0x65, 0x83, 0x73, 0x0d, 0x94, 0x54, 0x9e, 0x36, 0xe1, 0x8e, 0x68, 0xa6, 0xc8, 0x52, 0x57, 0x33, 0x30, 0x22, 0x6e, 0x3c, 0x80, 0xf6, 0x00, 0x4c, 0xc1, 0x31, 0xb2, 0xae, 0x97, 0xca, 0x62, 0x84, 0x1f, 0xc2, 0x4f, 0xd2, 0xa1, 0x4e, 0xa0, 0x8e, 0xaa, 0xc5, 0x52, 0xcb, 0x7e, 0x78, 0x0e, 0x4b, 0x6b, 0xf3, 0xe3, 0x35, 0x91, 0x24, 0x01, 0x25, 0xd8, 0x70, 0x59, 0x11, 0x57, 0x4d, 0x1c, 0x94, 0xd5, 0xe2, 0xa2, 0x38, 0xfd, 0xaf, 0xe8, 0x73, 0x06, 0x40, 0x5b, 0xa4, 0xa6, 0x85, 0xf1, 0x25, 0xf8, 0xb1, 0x99, 0xe5, 0x26, 0x58, 0x04, 0x54, 0x36, 0x53, 0x85, 0xd6, 0x12, 0x0d, 0xb5, 0x33, 0x4c, 0x8a, 0x37, 0x34, 0x35, 0x4e, 0x48, 0xaf, 0x9f, 0x9c, 0x0a, 0xd9, 0x49, 0x82, 0x8c, 0x54, 0x87, 0x1a, 0xb6, 0xf2, 0x63, 0x6f, 0xdc, 0xbf, 0xab, 0xbc, 0x1a, 0x02, 0x56, 0xac, 0xec, 0xe5, 0x53, 0xda, 0x15, 0xa0, 0xa7, 0x94, 0xd1, 0x5c, 0x50, 0xb5, 0x94, 0x53, 0x85, 0x36, 0x46, 0x18, 0x44, 0x74, 0xec, 0x04, 0x07, 0x7a, 0xba, 0x86, 0x8f, 0x64, 0xa8, 0xc1, 0xa5, 0x39, 0x2e, 0x47, 0xcd, 0x4c, 0x17, 0xf8, 0xa1, 0x22, 0x70, 0x0b, 0x18, 0x29, 0x68, 0xb0, 0x15, 0x1c, 0x9c, 0xb4, 0x08, 0xdf, 0xad, 0x63, 0xf3, 0x5d, 0xea, 0x33, 0xeb, 0x71, 0x7a, 0x85, 0x43, 0xf3, 0x48, 0x4a, 0xf9, 0x16, 0x4f, 0x4d, 0xa3, 0xcb, 0xf5, 0x5e, 0xaf, 0xe6, 0x9e, 0x93, 0xf8, 0xca, 0xb6, 0x44, 0x29, 0x2a, 0x5c, 0x40, 0x7c, 0xb2, 0x2d, 0xb0, 0xea, 0xc4, 0x71, 0xb0, 0xc6, 0x1c, 0xc3, 0xe7, 0x38, 0xe0, 0xfc, 0x0a, 0x87, 0x9f, 0x41, 0x05, 0x09, 0x13, 0xc0, 0x85, 0xae, 0x18, 0x61, 0x5a, 0xe9, 0x85, 0x5c, 0x51, 0x63, 0x5d, 0x14, 0xc0, 0x5e, 0x51, 0x16, 0x4e, 0x34, 0x59, 0xcc, 0x82, 0x4e, 0x16, 0x91, 0x8a, 0x06, 0x89, 0xac, 0x49, 0xd9, 0xce, 0x11, 0x85, 0x83, 0x7c, 0x02, 0x99, 0xea, 0x53, 0xf5, 0xfc, 0x55, 0x10, 0x72, 0xe1, 0xc1, 0xd7, 0xd2, 0x16, 0x68, 0x5b, 0xea, 0x24, 0xeb, 0xbf, 0x01, 0x35, 0x55, 0x94, 0xe1, 0xa7, 0x28, 0x4d, 0xb5, 0xb3, 0x10, 0x15, 0x72, 0x1a, 0xae, 0x77, 0x69, 0x22, 0x2a, 0x9a, 0x10, 0x56, 0x47, 0x9c, 0xc4, 0x30, 0xd4, 0x2c, 0x79, 0x22, 0xb5, 0xd2, 0xb9, 0x71, 0x5e, 0x72, 0x96, 0xc6, 0xa7, 0xf0, 0xd7, 0xbe, 0x82, 0x1d, 0xcd, 0x21, 0x4b, 0x22, 0x64, 0x1a, 0x18, 0xf7, 0x10, 0x26, 0x19, 0xcf, 0xde, 0x6f, 0x84, 0x4a, 0xee, 0xc5, 0x37, 0x78, 0x95, 0xa0, 0xc4, 0x41, 0xb2, 0xf2, 0x58, 0x7c, 0x0a, 0x5e, 0xd8, 0x20, 0xa4, 0x5d, 0x94, 0x88, 0xcd, 0xf9, 0x99, 0x81, 0xd9, 0x4e, 0xce, 0x04, 0xad, 0xc8, 0x16, 0xd2, 0x48, 0x26, 0x29, 0x0d, 0x6a, 0xf8, 0x8e, 0x5f, 0x02, 0xac, 0xd9, 0xf5, 0x9e, 0x40, 0x4d, 0x15, 0xe7, 0x9a, 0xc6, 0x4b, 0x80, 0xad, 0x5c, 0x23, 0xfe, 0x07, 0x71, 0xaa, 0x50, 0x05, 0xae, 0xc1, 0xaa, 0xc2, 0x8e, 0x1a, 0x00, 0x2d, 0xaa, 0x29, 0x44, 0xbe, 0x2f, 0x00, 0xa7, 0x3e, 0x2a, 0xc8, 0xf2, 0x46, 0xb0, 0x2b, 0x4d, 0xa2, 0x4d, 0x98, 0x74, 0xe6, 0x0f, 0xea, 0x67, 0x2a, 0x45, 0x19, 0xec, 0x52, 0xc7, 0x49, 0x73, 0xf2, 0x0e, 0x0e, 0x84, 0x5c, 0x15, 0x82, 0x56, 0x98, 0x20, 0x1b, 0xa9, 0x90, 0xa2, 0x6a, 0x0e, 0xa6, 0x93, 0x80, 0x05, 0x32, 0xed, 0x6f,
@@ -27,7 +27,7 @@ uint8_t A_bpoly_MIDSEC[9*NEWHOPE_POLYBYTES] = {
 0xa7, 0x12, 0x21, 0x1b, 0xc5, 0x80, 0x21, 0x51, 0x45, 0x90, 0x66, 0x5d, 0xf9, 0x62, 0x5b, 0xdd, 0xbb, 0x20, 0x6d, 0x15, 0x20, 0x45, 0x5f, 0xda, 0xa0, 0xb2, 0x5e, 0x53, 0x9d, 0x19, 0x33, 0x45, 0x86, 0x58, 0x44, 0xe2, 0x44, 0xce, 0x14, 0x99, 0x0a, 0x80, 0xfa, 0x82, 0x4b, 0xda, 0xb9, 0x25, 0x50, 0xd9, 0x90, 0xe4, 0x06, 0xeb, 0xa0, 0x42, 0xdb, 0x6b, 0x66, 0x55, 0x61, 0xce, 0x4c, 0x9e, 0x8b, 0x54, 0x65, 0x67, 0x78, 0x73, 0x5b, 0x46, 0x68, 0x69, 0x65, 0xc9, 0x2e, 0x62, 0x84, 0xe0, 0x25, 0x3c, 0x68, 0x2c, 0x5d, 0x68, 0x30, 0x82, 0x89, 0x71, 0x68, 0x96, 0x1f, 0x27, 0x82, 0x30, 0xa2, 0x2b, 0x66, 0x03, 0x23, 0x20, 0x26, 0xce, 0x44, 0x98, 0x58, 0xf8, 0x50, 0xe9, 0x16, 0x43, 0xe1, 0xe9, 0x33, 0x21, 0xe6, 0x1d, 0x97, 0xef, 0x18, 0xfc, 0xfa, 0xfc, 0x44, 0x37, 0xef, 0xa1, 0xbd, 0x04, 0x43, 0x4a, 0x90, 0xaa, 0x84, 0x74, 0xe9, 0xa5, 0xc8, 0x16, 0x71, 0xd0, 0xd1, 0x80, 0x54, 0x32, 0xa4, 0xe7, 0x85, 0x3a, 0xf9, 0xa3, 0xb9, 0x74, 0x3d, 0xce, 0xea, 0xd3, 0x64, 0x5d, 0x95, 0xd3, 0x24, 0xf6, 0x1a, 0x40, 0x20, 0x25, 0x9d, 0x2d, 0x5e, 0x06, 0xba, 0xae, 0xa5, 0x5f, 0xcc, 0x75, 0x70, 0xf3, 0x25, 0x81, 0x2d, 0x80, 0xe6, 0x8a, 0x7d, 0xf4, 0x57, 0x63, 0xd0, 0x55, 0xb4, 0x66, 0x30, 0x86, 0x8a, 0xe6, 0x83, 0xdb, 0xbb, 0x1d, 0x73, 0xa1, 0x5a, 0x2a, 0xe1, 0xd5, 0xb8, 0x14, 0xa1, 0xe7, 0xf2, 0x0a, 0xd5, 0x05, 0x4f, 0x94, 0xd0, 0x73, 0x59, 0xea, 0x82, 0x6e, 0xda, 0x95, 0x6e, 0x6a, 0xb5, 0x56, 0xb2, 0x6f, 0x45, 0xd7, 0x72, 0xac, 0x86, 0x6f, 0xdb, 0xd4, 0x69, 0xa9, 0x61, 0xfc, 0xa7, 0xd8, 0x57, 0x62, 0x1a, 0x87, 0xea, 0x64, 0xb8, 0x69, 0x50, 0x02, 0x62, 0x9a, 0x1e, 0xbd, 0x0c, 0x74, 0xd2, 0xd9, 0xa9, 0x17, 0xe1, 0x85, 0xe6, 0x87, 0xb0, 0x60, 0x26, 0x6b, 0x2c, 0x70, 0x40, 0x2c, 0xa6, 0x9d, 0x9f, 0xea, 0xdb, 0xb0, 0x6c, 0xc6, 0x52, 0x9a, 0x24, 0x23, 0x39, 0x9a, 0x04, 0x66, 0x8f, 0x8a, 0x8c, 0xb2, 0x04, 0xb4, 0x9b, 0x89, 0x03, 0x7f, 0xa8, 0xfb, 0xad, 0xb5, 0x20, 0xdb, 0xcc, 0x8a, 0x60, 0x16, 0x11, 0x1f, 0x58, 0x2d, 0x98, 0xdb, 0x44, 0x7e, 0x35, 0x9e, 0x90, 0xf1, 0xf8, 0x86, 0xbf, 0xe2, 0x97, 0x96, 0x5a, 0xdd, 0xd9, 0x39, 0xd6, 0x09, 0x97, 0x44, 0xc4, 0xa0, 0x26, 0x13, 0x9b, 0x50, 0xca, 0xa7, 0x6e, 0x01, 0xb6, 0x9b, 0xab, 0x76, 0x4b, 0x2e, 0x1a, 0x75, 0x6c, 0xc9, 0x41, 0xd2, 0x91, 0x45, 0x76, 0x8f, 0x2c, 0x90, 0xf1, 0xd2, 0x0f, 0xd2, 0x13, 0xa0, 0x68, 0xa3, 0xf2, 0x88, 0xce, 0xac, 0x1f, 0x95, 0x7a, 0xc6, 0x01, 0x8d, 0x07, 0xac, 0x70, 0xc7, 0x5d, 0x24, 0x2e, 0x60, 0x4a, 0xc2, 0xbf, 0x62, 0x51, 0x95, 0x26, 0x25, 0xab, 0xa7, 0xb5, 0x53, 0x24, 0xe6, 0xb6, 0x27, 0x16, 0x6a, 0xb1, 0xc9, 0xec, 0x76, 0xd2, 0x81, 0xfc, 0xb7, 0x73, 0x17, 0xdf, 0xcb, 0xae, 0xbc, 0xb9, 0x26, 0xa7, 0xa0, 0x33, 0x61, 0x06, 0x65, 0x1b, 0xc9, 0xb7, 0x20, 0x51, 0xe4, 0xb1, 0x5e, 0x67, 0x5d, 0x0b, 0x96, 0xc2, 0x01, 0xf3, 0x02, 0x78, 0x98, 0x3f, 0x68, 0x45, 0x94, 0x1f, 0xce, 0x29, 0x6b, 0x5e, 0x59, 0xf6, 0x84, 0xf6, 0x51, 0x3c, 0x3c, 0x68, 0xfe, 0x56, 0xb3, 0xd6, 0x99, 0x26, 0x17, 0xe2, 0x5a, 0x9a, 0x42, 0xfe, 0x52, 0x59, 0x87, 0x14, 0x7c, 0x55, 0xe8, 0x28, 0x49, 0x9d, 0x9d, 0x43, 0x65, 0xee, 0xc6, 0x3a, 0xe9, 0xa6, 0xe2, 0xa1, 0x90, 0x50, 0x64, 0xc1, 0x2f, 0xfe, 0x18, 0xe7, 0x6d, 0x6c, 0x85, 0x6d, 0x8b, 0x91, 0xdc, 0xc5, 0x5d, 0x88, 0x2f, 0x02, 0x07, 0xee, 0x39, 0x24, 0xbe, 0x4f, 0x12, 0x58, 0xe2, 0x14, 0x2b, 0x9b, 0xcd, 0xa9, 0x77, 0x7d, 0x4c, 0x22, 0xed, 0xa9, 0x63, 0x78, 0x34, 0x9a, 0x0c, 0x18, 0xe6, 0xed, 0x78, 0x2a, 0x4d, 0x44, 0x52, 0x44, 0x03, 0x5a, 0x79, 0x35, 0x70, 0x48, 0x58, 0x21, 0x6a, 0xdb, 0x82, 0x8a, 0x34, 0xaf, 0xe3, 0x63, 0xf4, 0x0a, 0xa8, 0x13, 0x4e, 0x15, 0x23, 0xf3, 0x59, 0x84, 0x3a, 0x61, 0xa8, 0x21, 0x8b, 0x8e, 0x84, 0xa4, 0x42, 0xbd, 0x35, 0x80, 0x61, 0x36, 0x05, 0x83, 0x81, 0x95, 0xe2, 0x7d, 0x73, 0xf2, 0x4c, 0xb6, 0x13, 0xbf, 0xf9, 0x60, 0x28, 0x2d, 0xc3, 0xa6, 0xea, 0x4d, 0xb1, 0x0a, 0xe8, 0xb6, 0x77, 0xf8, 0x6a, 0x5a, 0x80, 0x0c, 0x1c, 0xf5, 0x43, 0xb6, 0x4a, 0xfe, 0xdc, 0xe3, 0x94, 0xac, 0x90, 0x8b, 0xba, 0x83, 0xaf, 0x69, 0x91, 0x46, 0x57, 0x35, 0x18, 0xa7, 0x67, 0x69, 0x42, 0x03, 0x70, 0x09, 0x43, 0x06, 0xd2, 0xfe, 0x4f, 0x1e, 0x29, 0x48, 0x8a, 0xbf, 0xda, 0x38, 0x60, 0xcf, 0x17, 0x22, 0xcb, 0xf0, 0x44, 0x49, 0x46, 0xca, 0x99, 0x1e, 0x22, 0xa5, 0x34, 0x29, 0x6e, 0x5b, 0xf9, 0xdd, 0x0e, 0x7e, 0x0d, 0xb3, 0x87, 0x67, 0x18, 0x32, 0xe0, 0x0b, 0x36, 0xf6, 0x5e, 0x4a, 0x7d, 0xcb, 0x18, 0xce, 0x72, 0xe4, 0xc1, 0x8c, 0xe7, 0x00, 0x2c, 0xf0, 0x11, 0x50, 0x34, 0x4a, 0xe9, 0xe7, 0x87, 0x62, 0xa0, 0x71, 0xbe, 0xdd, 0x71, 0xc1, 0x2c, 0xea, 0x72, 0x96, 0xc6, 0x71, 0x75, 0x49, 0xb0, 0x56, 0x43, 0xa5, 0xfb, 0xe8, 0x3d, 0xac, 0x2e, 0x9d, 0x95, 0x33, 0x26, 0x24, 0xdc, 0x78, 0xdb, 0x6e, 0x64, 0x48, 0x13, 0xac, 0x4b, 0x36, 0x40, 0x71, 0x15, 0xda, 0x0e, 0x52, 0x77, 0x51, 0x53, 0xd6, 0x85, 0x88, 0xae, 0x6f, 0xca, 0x50, 0x66, 0x1c, 0x5d, 0x80, 0xe0, 0x03, 0x1d, 0xeb, 0xe3, 0xea, 0x5f, 0x83, 0x47, 0xbf, 0xc7, 0x87, 0x0a, 0x32, 0xe3, 0x1a, 0x82, 0xf1, 0x76, 0xf6, 0x03, 0x86, 0x17, 0x80, 0xd8, 0x61, 0xca, 0x36, 0x39, 0xd2, 0x83, 0x65, 0x41, 0xb0, 0x41, 0x42, 0x69, 0x0d, 0xa2, 0x32, 0x26, 0x4d, 0xbe, 0x8b, 0x94, 0x40, 0x10, 0x60, 0xa7, 0x3d, 0xab, 0x02, 0xc2, 0x69, 0xca, 0x82, 0x8f, 0xdc, 0x6e, 0xc2, 0xf2, 0x49, 0xa0, 0x94, 0x25, 0x33, 0x02, 0x15, 0xec, 0x67, 0x3f, 0x49, 0xff, 0xf9, 0xbe, 0xba, 0x45, 0x88, 0xe3, 0x00, 0xe8, 0x6c, 0x2a, 0x41, 0x41, 0xdc, 0xd2, 0xd6, 0x69, 0x74, 0x4b, 0x33, 0xa0, 0x3e, 0x67, 0x8f, 0xd5, 0xa9, 0x3b, 0x42, 0x6f, 0x11, 0x3d, 0x84, 0x8a, 0xff, 0x57, 0xb5, 0x0b, 0x77, 0x84, 0x15, 0xc0, 0x09, 0x28, 0x1b, 0xd5, 0xc0, 0x31,
 0x68, 0x05, 0xed, 0x99, 0x1a, 0xd9, 0x3c, 0x9c, 0xd2, 0x0a, 0x0b, 0x33, 0x88, 0x05, 0x4a, 0x6e, 0x7c, 0x52, 0x94, 0x72, 0xb1, 0x3f, 0xc7, 0x02, 0x8b, 0xb5, 0x48, 0x39, 0x47, 0x53, 0xb3, 0x23, 0x90, 0xa2, 0x6c, 0x24, 0x2c, 0x0e, 0x33, 0xd2, 0xea, 0x2e, 0xac, 0xa0, 0xe8, 0xfb, 0x10, 0x72, 0x42, 0x73, 0x5f, 0x31, 0xe8, 0xe4, 0xfc, 0x65, 0x6b, 0x49, 0x1f, 0xab, 0x1f, 0x6d, 0x2a, 0x7c, 0x23, 0x1e, 0xfb, 0x4b, 0xbd, 0x22, 0x22, 0x55, 0x31, 0xf6, 0x29, 0xe1, 0x8f, 0x32, 0xae, 0xb4, 0x22, 0x07, 0x00, 0x6b, 0xb1, 0xd5, 0xa0, 0xa9, 0x4f, 0x35, 0x21, 0x79, 0x81, 0xb9, 0xd3, 0x6d, 0x58, 0x5c, 0xb5, 0x8e, 0xf9, 0x15, 0x05, 0x4a, 0xa6, 0xb0, 0x6a, 0x8d, 0xc3, 0x49, 0x2c, 0x92, 0x46, 0xd3, 0xe5, 0xf0, 0x13, 0xb0, 0x29, 0x6d, 0x80, 0x44, 0x60, 0xc1, 0xf1, 0xa0, 0xbc, 0x08, 0x05, 0xca, 0xdb, 0xe8, 0x90, 0x2f, 0x1c, 0x0c, 0x44, 0xae, 0x28, 0x6f, 0xb9, 0xc7, 0xcd, 0x03, 0x7d, 0xf6, 0x13, 0xfb, 0x6d, 0x4b, 0x20, 0xe1, 0x61, 0x78, 0x65, 0x26, 0xb2, 0xd9, 0xdc, 0xa8, 0x69, 0xfe, 0x23, 0x03, 0x01, 0xb9, 0xd6, 0x25, 0x54, 0x23, 0xef, 0x90, 0x12, 0x8a, 0x92, 0xe5, 0x59, 0x6b, 0xe3, 0x42, 0xb1, 0x92, 0xfa, 0xaf, 0x3a, 0xc0, 0x3e, 0xf6, 0x77, 0xc1, 0xa5, 0x09, 0xab, 0x0b, 0x06, 0x06, 0xd0, 0xe2, 0xef, 0xe3, 0x32, 0xc4, 0x15, 0x4e, 0xe9, 0x9f, 0x27, 0x80, 0x04, 0x2c, 0xb9, 0x50, 0x02, 0x35, 0x09, 0xa6, 0xad, 0x2b, 0x6c, 0x3a, 0xa1, 0x1c, 0xb4, 0x18, 0xdf, 0xea, 0x6c, 0xb2, 0x9f, 0xc9, 0x30, 0xe2, 0xd0, 0x7a, 0x9b, 0xf0, 0xac, 0xbc, 0x29, 0x8a, 0x9c, 0xa0, 0x87, 0x96, 0xa3, 0xa4, 0x0a, 0xb4, 0x64, 0xe4, 0xad, 0x69, 0xa1, 0xef, 0x51, 0x67, 0xdc, 0x98, 0x97, 0xb0, 0x6a, 0x5f, 0x78, 0x98, 0x75, 0x0a, 0x56, 0xd7, 0x1c, 0x83, 0xd6, 0x42, 0xa4, 0x2f, 0x28, 0x57, 0x78, 0xcb, 0x25, 0x2b, 0x69, 0x54, 0x86, 0x23, 0x0a, 0x0a, 0xac, 0x93, 0x51, 0x89, 0x03, 0xd6, 0xc6, 0x81, 0x96, 0x04, 0x06, 0xf0, 0xad, 0xe4, 0x87, 0x49, 0x13, 0x01, 0xa9, 0xff, 0x05, 0x53, 0xa7, 0x02, 0x96, 0x73, 0xa1, 0xe6, 0x6d, 0xc5, 0x1e, 0xca, 0x37, 0x59, 0xf5, 0xab, 0xec, 0xeb, 0xf7, 0x45, 0xf3, 0xe0, 0x83, 0x50, 0xab, 0x11, 0xfb, 0x95, 0x59, 0x2c, 0xca, 0x07, 0x68, 0x1a, 0xfb, 0xd8, 0x86, 0xbc, 0x05, 0x86, 0x6a, 0x08, 0xc8, 0x21, 0xb3, 0x8d, 0x2d, 0x9b, 0xea, 0xb8, 0x75, 0x2f, 0x09, 0x43, 0x76, 0x4a, 0xca, 0x59, 0xed, 0xc2, 0x9f, 0xa2, 0x3b, 0x9d, 0x71, 0x57, 0x8a, 0x26, 0x4a, 0x9f, 0xc4, 0x17, 0x44, 0x03, 0xb8, 0xa2, 0xfc, 0xed, 0xa8, 0x4c, 0x93, 0x0c, 0x81, 0x61, 0x09, 0x9d, 0x8f, 0x2b, 0xfd, 0x98, 0x02, 0x34, 0x6e, 0xd1, 0x56, 0xbf, 0x01, 0xd0, 0x9c, 0x1a, 0x62, 0x60, 0xe5, 0x13, 0x0b, 0x8a, 0x71, 0xfc, 0xa4, 0xd3, 0x76, 0x2d, 0x79, 0x7d, 0x95, 0x68, 0xf6, 0x8b, 0xa7, 0x12, 0x8d, 0x2b, 0xcb, 0x73, 0x82, 0x03, 0xc4, 0x4b, 0x92, 0xdb, 0xfd, 0x39, 0x08, 0x71, 0xbb, 0x00, 0x92, 0xc7, 0x12, 0x6f, 0x3d, 0x3d, 0x22, 0x5d, 0x3d, 0x22, 0xb4, 0x79, 0x73, 0xb5, 0xe6, 0x13, 0x96, 0x15, 0x5e, 0x55, 0xeb, 0x45, 0x8c, 0x84, 0x87, 0x5e, 0xa2, 0xcf, 0xda, 0x99, 0xc8, 0x34, 0x12, 0x02, 0x9d, 0xe4, 0x02, 0x07, 0xa0, 0x7c, 0x61, 0x1a, 0xa8, 0xb2, 0x88, 0xad, 0x04, 0x8c, 0xbd, 0x43, 0xd8, 0x4a, 0x0c, 0x1e, 0x43, 0x99, 0x0d, 0x4a, 0x62, 0x52, 0xca, 0x90, 0xe8, 0x1e, 0x41, 0xd4, 0x48, 0xae, 0x98, 0x01, 0x9a, 0xed, 0x76, 0xee, 0x69, 0x79, 0xaf, 0x4a, 0xf6, 0x74, 0x4e, 0x80, 0x7b, 0x96, 0x51, 0x48, 0x03, 0xd6, 0x60, 0x8b, 0x02, 0x81, 0xa8, 0xc6, 0xa7, 0x54, 0x4e, 0xbe, 0x6f, 0x4c, 0x80, 0xef, 0xd8, 0x92, 0x53, 0xab, 0x87, 0x4a, 0x24, 0xca, 0x91, 0x06, 0x0f, 0x8e, 0x92, 0x85, 0x56, 0x9c, 0xbb, 0xeb, 0x50, 0x50, 0x23, 0x3e, 0xba, 0x45, 0x18, 0x58, 0x03, 0xfb, 0x7e, 0x25, 0x59, 0xcb, 0x36, 0x33, 0xb9, 0x01, 0x7d, 0x4f, 0xd5, 0x3b, 0x47, 0x9a, 0xa1, 0x4a, 0x55, 0x45, 0x9a, 0x75, 0xe5, 0x14, 0x7b, 0xf7, 0x80, 0x07, 0x42, 0xb7, 0x88, 0xb4, 0x30, 0x10, 0x99, 0x44, 0x8b, 0xda, 0x59, 0x21, 0xee, 0xdb, 0x80, 0xf1, 0x60, 0xb7, 0x60, 0x01, 0x6f, 0xd8, 0xca, 0x68, 0x93, 0x73, 0x83, 0x6d, 0x23, 0xe2, 0x14, 0x1d, 0xb9, 0xd0, 0xf9, 0xd1, 0x24, 0xe2, 0x42, 0xf6, 0xac, 0x68, 0x56, 0xec, 0xd1, 0x9e, 0x35, 0x5f, 0x32, 0x11, 0x98, 0xec, 0x06, 0x4f, 0x8e, 0xe1, 0x7a, 0xbe, 0x9a, 0x00, 0x49, 0xc6, 0x39, 0x21, 0x2b, 0x31, 0x12, 0xc0, 0x83, 0xd5, 0x6b, 0x91, 0xe2, 0x3c, 0x79, 0xd0, 0xd1, 0xf4, 0xf6, 0xca, 0xa4, 0x39, 0x64, 0x7a, 0x38, 0xa9, 0x5e, 0x77, 0x75, 0xa2, 0x59, 0x6b, 0x9e, 0x04, 0x1e, 0x12, 0x6a, 0x83, 0xd5, 0x69, 0x45, 0x0e, 0xf2, 0xe8, 0xbf, 0x83, 0xe7, 0xb2, 0x35, 0xab, 0x17, 0x8e, 0xc7, 0x83, 0xfe, 0x96, 0x7e, 0xa2, 0x08, 0xaa, 0x4b, 0x61, 0x14, 0xd0, 0x44, 0x31, 0x86, 0x15, 0x3c, 0x4d, 0xc2, 0xcd, 0x00, 0xd0, 0xb7, 0x0c, 0x4b, 0x04, 0x42, 0x2b, 0x91, 0xe2, 0xc0, 0xba, 0xf8, 0x2c, 0xde, 0x62, 0x33, 0x00, 0xab, 0x6e, 0x5c, 0x7f, 0x7b, 0xa6, 0x88, 0x62, 0xf8, 0x22, 0x2f, 0x9a, 0x7e, 0x16, 0x9b, 0x45, 0xd0, 0x2b, 0x62, 0xbd, 0x20, 0x6a, 0x53, 0x25, 0xc9, 0x8b, 0x84, 0x72, 0x2d, 0xac, 0x6a, 0x1a, 0x71, 0xcf, 0xe8, 0x45, 0xb6, 0x08, 0xf1, 0x27, 0xc5, 0x76, 0x9a, 0xac, 0x98, 0x0c, 0xa2, 0xdc, 0x7a, 0xaf, 0x0c, 0x28, 0xab, 0x48, 0xcf, 0x79, 0xb2, 0x37, 0x02, 0x51, 0x37, 0xa9, 0xa2, 0x9c, 0x2d, 0x47, 0x25, 0x78, 0xb7, 0xc5, 0x3d, 0x88, 0x97, 0x86, 0x11, 0x82, 0x2e, 0x21, 0x46, 0x26, 0x76, 0x74, 0x30, 0x19, 0x06, 0xf5, 0x0f, 0x60, 0xb9, 0xc5, 0x65, 0xb4, 0xa3, 0x59, 0xf3, 0x33, 0xeb, 0x10, 0x74, 0xaf, 0xc4, 0x8d, 0x0a, 0x4d, 0x20, 0x7d, 0x0f, 0x92, 0x69, 0x57, 0xd9, 0x92, 0x4e, 0x40, 0x07, 0x7d, 0xb6, 0x17, 0x99, 0x47, 0x88, 0x5d, 0xdb, 0xd2, 0x13, 0xd9, 0x42, 0xcb, 0x0a, 0xff, 0xe9, 0xd3, 0x26, 0x80, 0xfa, 0x00, 0xc9, 0x7a, 0xee, 0xd5, 0x71, 0xb0, 0xdb, 0x49, 0x10, 0xb8, 0xfd, 0x01,
 };
-uint8_t H_bpoly_MIDSEC[9*NEWHOPE_POLYBYTES] = {
+uint8_t H_bpoly_MIDSEC[9*NEWHOPE_RINGCT20_POLYBYTES] = {
 0x2d, 0x49, 0x5e, 0x31, 0x60, 0x14, 0x2a, 0x8e, 0x1a, 0x93, 0x55, 0xab, 0x21, 0xbe, 0x55, 0x59, 0x6d, 0x2b, 0x0d, 0x92, 0xa9, 0x85, 0x23, 0xa3, 0xc8, 0x6c, 0x5a, 0x85, 0x56, 0xc4, 0x9e, 0x32, 0x74, 0x82, 0xb8, 0x3d, 0xd0, 0x17, 0x03, 0xe2, 0xb2, 0x61, 0xd0, 0x63, 0xe9, 0xd9, 0xad, 0x04, 0x98, 0x64, 0x9c, 0xd9, 0xc9, 0x7d, 0x95, 0x98, 0x57, 0xa0, 0x58, 0x32, 0x68, 0x84, 0x3d, 0xd8, 0xe6, 0x0f, 0xc7, 0x02, 0x81, 0x65, 0x02, 0x50, 0xd8, 0xa8, 0xfe, 0xda, 0x5f, 0x83, 0xa4, 0x2f, 0xe6, 0xb4, 0xad, 0x4e, 0x2d, 0xc3, 0x6b, 0xe4, 0xf6, 0xf5, 0xb9, 0xee, 0x6b, 0xb2, 0x4a, 0x4d, 0xd9, 0x17, 0xea, 0x2e, 0xa8, 0xca, 0x50, 0x25, 0x4c, 0x7d, 0x80, 0xcc, 0xd9, 0xdd, 0xda, 0x7d, 0x43, 0x57, 0xc2, 0xeb, 0x98, 0xb0, 0x88, 0x54, 0x11, 0x29, 0xc3, 0xf0, 0x51, 0x32, 0x6e, 0x4a, 0x12, 0xfa, 0x75, 0xce, 0x38, 0xed, 0x21, 0x42, 0x89, 0xda, 0xfc, 0x1e, 0x74, 0xe8, 0x69, 0x0a, 0x7d, 0x0c, 0x78, 0xb7, 0x03, 0x0d, 0xba, 0xac, 0x89, 0x63, 0x6c, 0x5f, 0x98, 0x87, 0x4c, 0x91, 0x8f, 0xd3, 0x9d, 0x53, 0x07, 0xdd, 0x64, 0x9d, 0x5d, 0x66, 0xca, 0x55, 0x72, 0x2e, 0x97, 0x50, 0x6d, 0x8a, 0x75, 0xe9, 0x85, 0x96, 0x5a, 0x5c, 0x4c, 0xe3, 0xea, 0xd0, 0x8c, 0x0a, 0xdf, 0x55, 0x02, 0x85, 0x3d, 0x74, 0x7c, 0x18, 0x70, 0xc7, 0xcc, 0x5d, 0x4f, 0xe6, 0xd4, 0x96, 0xb8, 0x53, 0x54, 0x87, 0x69, 0x06, 0xdc, 0x61, 0xa3, 0x6a, 0x53, 0x6e, 0xe2, 0xe2, 0x26, 0x78, 0xf5, 0x59, 0xaa, 0x13, 0x4e, 0xc4, 0xe7, 0x4a, 0x41, 0xbf, 0xa6, 0x54, 0x11, 0xfc, 0x16, 0x86, 0x11, 0xae, 0x39, 0x04, 0x9f, 0xa6, 0x73, 0x23, 0xe3, 0x4c, 0x4a, 0x3a, 0x19, 0x72, 0x69, 0x8c, 0xff, 0x86, 0x7d, 0x76, 0x58, 0xb5, 0xe4, 0xf2, 0x15, 0xca, 0xdc, 0x8d, 0x16, 0x4c, 0x42, 0xe6, 0x07, 0x58, 0x4c, 0x42, 0x0d, 0xbc, 0xc9, 0x34, 0xdd, 0x36, 0xa7, 0xa8, 0x11, 0xc5, 0x43, 0x11, 0x84, 0xac, 0x45, 0xb5, 0x27, 0x77, 0x32, 0x5f, 0x8b, 0xe4, 0x7c, 0xe7, 0x79, 0x86, 0xaf, 0xc4, 0x08, 0x91, 0x48, 0x1e, 0xf5, 0x97, 0xfe, 0x55, 0x9c, 0x9b, 0x6e, 0x90, 0x15, 0x4d, 0x58, 0x79, 0x60, 0xef, 0x18, 0x32, 0x13, 0xee, 0x96, 0x8b, 0xd2, 0x24, 0x94, 0xd2, 0x4c, 0xec, 0x79, 0xcc, 0xfc, 0x21, 0x63, 0xa5, 0x0e, 0xd4, 0x65, 0x06, 0x1c, 0x34, 0x4c, 0xcb, 0x93, 0x19, 0xfa, 0xbb, 0xda, 0xd8, 0xbc, 0xb2, 0x0c, 0xac, 0xa0, 0x8d, 0x4c, 0x9a, 0xa6, 0xd3, 0x96, 0x4b, 0xa3, 0x58, 0x36, 0x17, 0xab, 0x70, 0x96, 0xae, 0x95, 0x77, 0x51, 0xa9, 0x52, 0x47, 0x87, 0x27, 0x3d, 0xc0, 0xcb, 0xe8, 0x5c, 0x7e, 0x04, 0xd5, 0x47, 0x01, 0x44, 0x82, 0xf4, 0xe7, 0xd3, 0xd1, 0xd2, 0x2d, 0x8f, 0x49, 0x2b, 0xb9, 0x26, 0x55, 0xd8, 0x17, 0x18, 0x63, 0x3d, 0x29, 0x88, 0x7d, 0x2d, 0xc0, 0x83, 0x1f, 0xa0, 0x2c, 0x39, 0x8b, 0xb1, 0x2a, 0xf7, 0xe6, 0xb5, 0x20, 0x9c, 0x54, 0xc7, 0x19, 0x8a, 0xac, 0x06, 0x02, 0x4c, 0x0c, 0x1f, 0x95, 0x11, 0xd4, 0xb2, 0x7b, 0x1d, 0xdc, 0x91, 0x80, 0xbc, 0x08, 0x29, 0x17, 0xf4, 0x43, 0x1c, 0x7c, 0x61, 0xcd, 0x4b, 0x79, 0xba, 0x96, 0xf5, 0x27, 0x40, 0x20, 0x5e, 0x87, 0xfa, 0x62, 0x31, 0x45, 0x40, 0x2e, 0x64, 0x23, 0xc4, 0x73, 0x8d, 0x92, 0xae, 0x13, 0xb3, 0xd8, 0x3a, 0xcf, 0xe4, 0xbf, 0x64, 0xee, 0x5e, 0x85, 0xe0, 0xd5, 0x79, 0xa3, 0xe8, 0xca, 0xb8, 0x7c, 0xae, 0xde, 0x0b, 0x0a, 0xbc, 0x50, 0xb4, 0x46, 0x6e, 0x91, 0xec, 0x28, 0x74, 0x92, 0x1c, 0xde, 0x3b, 0x75, 0x51, 0xab, 0x49, 0xec, 0x9b, 0x47, 0x15, 0x92, 0x4e, 0x75, 0x54, 0x63, 0xa1, 0x96, 0x6c, 0x14, 0x90, 0x48, 0xbd, 0x20, 0xe9, 0xd8, 0x45, 0xcc, 0x83, 0xb7, 0xe4, 0x62, 0x2d, 0x8f, 0x9a, 0x4c, 0x59, 0xd5, 0xc6, 0x4e, 0x2e, 0x9e, 0xa7, 0x23, 0xcb, 0x3d, 0x2e, 0x22, 0x45, 0x13, 0xf1, 0x13, 0xcb, 0x15, 0x79, 0xec, 0x4b, 0x0f, 0xda, 0x71, 0x61, 0x82, 0xd7, 0x2d, 0x08, 0x73, 0x63, 0xf5, 0x81, 0x8c, 0xed, 0xb3, 0x88, 0x69, 0xed, 0x8f, 0x8f, 0x6e, 0xf8, 0x52, 0x4f, 0x14, 0x2d, 0x94, 0x14, 0xaa, 0x63, 0xfe, 0xa8, 0x66, 0xcc, 0xa7, 0xd8, 0xe8, 0x1b, 0x3e, 0xbc, 0x99, 0xd2, 0x79, 0xaa, 0xcf, 0xd8, 0x4a, 0x9c, 0x02, 0x96, 0x90, 0x59, 0xc2, 0x1c, 0xbf, 0xc7, 0xc6, 0x33, 0x65, 0x19, 0x1b, 0xca, 0x12, 0x28, 0x61, 0x61, 0x7e, 0x2f, 0xe7, 0xc9, 0x7b, 0xab, 0x32, 0x66, 0x3d, 0xb3, 0x1e, 0xbb, 0xf6, 0x5a, 0xba, 0x67, 0xa0, 0x0c, 0x45, 0x67, 0x09, 0xec, 0x02, 0x3e, 0xde, 0x46, 0x62, 0xd3, 0xe2, 0xae, 0x3d, 0x46, 0xa9, 0xc1, 0x74, 0x3a, 0x24, 0xaa, 0x6c, 0xac, 0xc4, 0x10, 0x94, 0x56, 0x1c, 0xcb, 0x17, 0xd0, 0x54, 0x41, 0x39, 0xf8, 0x95, 0xc7, 0x95, 0xd0, 0xda, 0x09, 0x62, 0xa6, 0xf0, 0x1a, 0x2b, 0xd0, 0x2c, 0xca, 0xec, 0xef, 0x45, 0x59, 0x69, 0xa5, 0xbc, 0xa7, 0x0a, 0x05, 0x90, 0x30, 0x40, 0x54, 0xd0, 0xb2, 0xc8, 0x40, 0xa5, 0x21, 0x65, 0xee, 0xba, 0x01, 0xf9, 0xcd, 0x2c, 0x3c, 0x66, 0xe2, 0x67, 0x25, 0x24, 0x04, 0x04, 0x96, 0x59, 0x21, 0xab, 0xa0, 0x5c, 0xe7, 0xd6, 0xa4, 0x28, 0xad, 0x1c, 0x4d, 0x89, 0x21, 0xab, 0xc5, 0xd3, 0x9a, 0x60, 0x6a, 0x44, 0x34, 0xc0, 0x0a, 0xa4, 0x28, 0xd8, 0xe4, 0x4b, 0x81, 0x27, 0x49, 0x48, 0x86, 0x0c, 0x88, 0xe8, 0x9a, 0xc6, 0x3a, 0xb1, 0x63, 0xf4, 0xc4, 0x7e, 0xa2, 0x94, 0xc1, 0x02, 0x55, 0x11, 0xf8, 0xe9, 0x60, 0x82, 0x94, 0xbf, 0xa4, 0x6c, 0x2d, 0x69, 0x6f, 0x50, 0x80, 0x64, 0xe1, 0x68, 0xa2, 0x5a, 0x43, 0xb1, 0xc2, 0x28, 0xcc, 0x7d, 0x84, 0xa8, 0xe4, 0x5b, 0xbd, 0xed, 0xb6, 0xac, 0x4c, 0x67, 0x51, 0xce, 0x59, 0x99, 0xe6, 0x22, 0xad, 0x22, 0x2c, 0xf0, 0xb7, 0x36, 0x90, 0x57, 0xf0, 0x5c, 0x75, 0x4b, 0x3d, 0xaf, 0x58, 0xcb, 0xc4, 0x05, 0x8e, 0xaf, 0x93, 0x1b, 0x25, 0x1d, 0x68, 0xa5, 0x8d, 0x01, 0xef, 0xb7, 0x4f, 0x49, 0x10, 0x72, 0x41, 0xf3, 0x73, 0x5d, 0x00, 0x70, 0x2e, 0xab, 0x84, 0xe8, 0xa1, 0x8a, 0x29, 0x24, 0x96, 0x7c, 0xd6, 0x1f, 0x8c, 0x97, 0x10, 0x50, 0x2b, 0x58, 0x5b, 0x19, 0x3a, 0x03, 0x2b, 0x6a, 0xf0, 0x2b, 0x2c, 0x3e,
 0x59, 0x5a, 0xe8, 0xe0, 0x4f, 0xed, 0x19, 0x3a, 0x82, 0x39, 0xb9, 0x74, 0x8d, 0x66, 0xff, 0x6f, 0x3f, 0x29, 0x23, 0x95, 0x96, 0x65, 0xa8, 0xa0, 0x8b, 0xc4, 0xa4, 0x78, 0xf4, 0xa1, 0x8f, 0xdb, 0x31, 0x0d, 0x47, 0xc1, 0x2f, 0xe4, 0xa1, 0x27, 0xa1, 0x24, 0xfe, 0xae, 0xf1, 0xea, 0x75, 0x75, 0x21, 0x63, 0x62, 0xea, 0xe3, 0x3f, 0xcd, 0x5f, 0xee, 0x2f, 0xff, 0x16, 0x5d, 0xe4, 0xbb, 0xec, 0xa8, 0x8e, 0x13, 0x59, 0x5c, 0x2c, 0xad, 0x97, 0xd3, 0x0a, 0x65, 0x76, 0x7c, 0x8e, 0x9a, 0x7a, 0x65, 0x96, 0x95, 0x0f, 0xf0, 0x8d, 0xe6, 0x16, 0x1b, 0x72, 0x27, 0x3b, 0x42, 0xed, 0xca, 0x0c, 0xae, 0x80, 0x45, 0xc6, 0xb0, 0x43, 0xd9, 0x82, 0x2c, 0x88, 0xd9, 0x5c, 0x61, 0x32, 0x1c, 0x9c, 0x17, 0x29, 0xf2, 0xa8, 0x2d, 0xb6, 0x38, 0xf1, 0xcb, 0xea, 0x51, 0x42, 0x96, 0x2a, 0x09, 0x0b, 0xee, 0x53, 0xb5, 0x1d, 0x1d, 0x43, 0x19, 0xc8, 0xd1, 0xa5, 0xc2, 0x20, 0xf8, 0x9c, 0xc6, 0x86, 0x0c, 0xf8, 0x3f, 0x51, 0x8b, 0x28, 0x46, 0xf3, 0x9a, 0xb9, 0xeb, 0x14, 0xcf, 0xf1, 0x1e, 0xf1, 0xb1, 0x04, 0x2e, 0x67, 0x50, 0xfa, 0x38, 0x92, 0x88, 0xe3, 0x13, 0xd4, 0x45, 0x2c, 0x3e, 0x11, 0xe4, 0xb2, 0x03, 0xf3, 0x44, 0xa2, 0x28, 0xab, 0x14, 0xe1, 0xcc, 0xdd, 0x70, 0x36, 0xa9, 0xdc, 0x04, 0x73, 0xbd, 0x73, 0xb0, 0xeb, 0x49, 0x09, 0x1f, 0xc9, 0x6f, 0x0e, 0xaf, 0x93, 0xea, 0x26, 0xba, 0x94, 0x0c, 0x96, 0x36, 0xf7, 0x5c, 0x36, 0x5d, 0x7d, 0x54, 0x39, 0x57, 0x61, 0x71, 0x6f, 0xad, 0xac, 0x75, 0xa9, 0xfb, 0x3d, 0x93, 0x3d, 0x6a, 0xa1, 0x71, 0xcd, 0x94, 0x25, 0xe2, 0xcc, 0x5f, 0x17, 0x79, 0x29, 0x32, 0x48, 0x25, 0xa7, 0x54, 0x03, 0x75, 0xa3, 0x75, 0x06, 0xae, 0x85, 0x40, 0x82, 0x05, 0x5a, 0x92, 0x40, 0x31, 0x66, 0xe2, 0xa5, 0x50, 0x94, 0x37, 0xe0, 0x31, 0xad, 0x66, 0x57, 0x19, 0xf0, 0x21, 0x05, 0x9d, 0x8b, 0xbf, 0x2e, 0xab, 0x40, 0x6d, 0x4a, 0x11, 0x27, 0xae, 0xd9, 0x25, 0x1f, 0xea, 0xab, 0x95, 0xa7, 0x42, 0x37, 0xbc, 0x3c, 0x2b, 0xc1, 0x2d, 0x89, 0x74, 0x6b, 0xc6, 0x76, 0xb6, 0xc4, 0xcc, 0xe9, 0x70, 0x21, 0x62, 0xe3, 0x4a, 0x8f, 0x82, 0xc2, 0x08, 0x40, 0x04, 0x29, 0x75, 0x6b, 0x57, 0xb8, 0x4d, 0x66, 0x55, 0xa6, 0x96, 0x29, 0xb9, 0x2e, 0xd7, 0x94, 0x7f, 0xa4, 0xf9, 0x9d, 0x71, 0x0f, 0x05, 0x1c, 0x4a, 0xa0, 0x56, 0xb7, 0xd5, 0x40, 0x5d, 0x4a, 0x22, 0x20, 0x72, 0x8f, 0x17, 0x3c, 0xd5, 0xaf, 0x0a, 0x6c, 0xcb, 0xd8, 0xdb, 0x35, 0x43, 0xb1, 0x3b, 0x02, 0x69, 0xc2, 0x43, 0x39, 0x38, 0x77, 0x54, 0xe8, 0x39, 0xab, 0x8b, 0x9a, 0x94, 0x52, 0xcc, 0xdd, 0xf5, 0x09, 0xb6, 0x79, 0x69, 0x59, 0x58, 0xf8, 0x79, 0x3a, 0x9b, 0x49, 0x69, 0xdd, 0xc8, 0xf9, 0x0d, 0x3d, 0xbe, 0x6c, 0x8a, 0x26, 0x0a, 0xd0, 0x52, 0x58, 0x4b, 0xe6, 0xe5, 0x15, 0xca, 0x6e, 0xe7, 0x60, 0xb9, 0x37, 0x94, 0x45, 0x45, 0x1e, 0x1d, 0x0c, 0xa1, 0xa8, 0x49, 0x79, 0x25, 0x46, 0xc0, 0x08, 0xb3, 0x32, 0x5a, 0xd0, 0x8a, 0xc9, 0x21, 0x81, 0xb2, 0x2b, 0xcf, 0x19, 0x06, 0x58, 0x27, 0x0a, 0x53, 0xd1, 0x8c, 0xba, 0x42, 0x9a, 0xe0, 0x0c, 0x4a, 0xae, 0x22, 0x82, 0xa6, 0x3d, 0x44, 0xa8, 0x0a, 0xdf, 0x87, 0xc1, 0x26, 0x55, 0xf1, 0x0f, 0x4c, 0x59, 0x43, 0xc0, 0x1d, 0xd9, 0x96, 0x4a, 0x25, 0x74, 0x49, 0x5f, 0x61, 0x5d, 0xb5, 0x88, 0x72, 0xdc, 0x61, 0x85, 0xd3, 0x7c, 0xe6, 0x73, 0x80, 0xb9, 0x97, 0x91, 0x83, 0x40, 0xf8, 0xd8, 0xbb, 0x5f, 0x0d, 0x13, 0x01, 0x0b, 0x9a, 0x2e, 0xdc, 0xaf, 0x65, 0x12, 0x82, 0x3c, 0x8c, 0x65, 0x11, 0x1a, 0xa0, 0x34, 0x62, 0x23, 0xd0, 0x47, 0x4d, 0x94, 0x6c, 0x6c, 0x51, 0x0c, 0xc1, 0xee, 0x36, 0x41, 0xea, 0x14, 0x0e, 0x8b, 0xd4, 0xc5, 0x6a, 0x85, 0x70, 0x39, 0xee, 0x3e, 0x31, 0x91, 0x82, 0x3d, 0x89, 0xa9, 0xaf, 0xa6, 0x0c, 0x19, 0xb9, 0x3d, 0xa2, 0x17, 0xf2, 0x6c, 0x48, 0x5f, 0xb9, 0xdf, 0x34, 0x0b, 0xf4, 0x16, 0xa6, 0xe7, 0x10, 0xb7, 0x33, 0x1d, 0x2c, 0x80, 0xea, 0xd4, 0x0b, 0xb5, 0x14, 0x0a, 0xac, 0x74, 0x4a, 0x90, 0x5b, 0xe7, 0x0d, 0xad, 0xce, 0xe4, 0x5f, 0x96, 0x00, 0x4a, 0x43, 0x14, 0x10, 0x25, 0x56, 0x6e, 0x34, 0x57, 0xaf, 0x11, 0x43, 0xa6, 0x0f, 0xf2, 0xbf, 0xd2, 0x64, 0x7b, 0xe3, 0x02, 0xac, 0x8d, 0x36, 0x8a, 0x7d, 0x06, 0x3c, 0x61, 0x7c, 0x1a, 0x1e, 0x01, 0xf3, 0x5c, 0x60, 0x56, 0x5a, 0xca, 0xa5, 0xea, 0x89, 0x14, 0x4a, 0x44, 0x51, 0xf1, 0xe1, 0xef, 0xd6, 0x5b, 0xbc, 0x0f, 0xce, 0x59, 0x83, 0x66, 0x07, 0x9e, 0xe2, 0xe6, 0x26, 0xda, 0x8d, 0x6c, 0x4e, 0x23, 0xa7, 0x40, 0xc4, 0x7c, 0x75, 0xca, 0x4b, 0x94, 0x44, 0xa1, 0x65, 0x94, 0x08, 0xcc, 0x6e, 0xda, 0x5a, 0xf5, 0x6d, 0x43, 0x48, 0xc3, 0x64, 0x49, 0xb1, 0x55, 0xc6, 0x61, 0xef, 0x7b, 0xe8, 0x78, 0xb5, 0x68, 0x43, 0x1b, 0x20, 0x0b, 0xd4, 0x73, 0x9e, 0x27, 0xb8, 0xd5, 0x2f, 0x66, 0x17, 0xb2, 0x58, 0x53, 0x52, 0xf1, 0x25, 0x39, 0x7a, 0x96, 0x97, 0x50, 0x0c, 0x50, 0x23, 0x2f, 0x40, 0x4a, 0x17, 0x60, 0xc8, 0x70, 0x3a, 0xcc, 0x62, 0x98, 0xc1, 0x50, 0x09, 0x13, 0x20, 0x5a, 0x03, 0x46, 0x41, 0x00, 0x31, 0x8b, 0x33, 0x73, 0x2f, 0x31, 0xb7, 0x2b, 0x9b, 0x5d, 0xc6, 0xd7, 0x7a, 0x6c, 0x55, 0x21, 0x82, 0x95, 0x98, 0xce, 0x1c, 0xfa, 0x5d, 0x86, 0xb2, 0x3e, 0x29, 0x5e, 0x53, 0xc5, 0x12, 0xc5, 0x67, 0x5c, 0x8d, 0x98, 0x8d, 0x78, 0x77, 0x57, 0x30, 0x29, 0xe4, 0x94, 0x99, 0x50, 0x26, 0x05, 0x86, 0x3a, 0x04, 0xb6, 0x5b, 0xf0, 0x44, 0xb3, 0xa8, 0xd4, 0x60, 0xba, 0xd0, 0x96, 0x44, 0x45, 0x92, 0x60, 0xa5, 0x7c, 0xe9, 0x45, 0x43, 0x51, 0x5e, 0xc8, 0x45, 0xec, 0xa4, 0xb1, 0x66, 0x38, 0x88, 0xf9, 0x4c, 0x6e, 0x18, 0xa1, 0xbe, 0x07, 0x44, 0x76, 0x26, 0x89, 0x4f, 0xf6, 0x74, 0x1e, 0x14, 0x3c, 0x59, 0x23, 0x6e, 0x07, 0xb2, 0x22, 0xa0, 0x9d, 0x89, 0x84, 0x89, 0x12, 0xc8, 0x5f, 0x4a, 0x90, 0x5c, 0x97, 0x18, 0x38, 0x78, 0x4e, 0x89, 0x30, 0x6b, 0x05, 0xb9, 0x52, 0xdd, 0x29, 0xe1, 0x36, 0xf1, 0x65, 0x6a, 0x59, 0x57, 0xb4, 0xf5, 0x36, 0xb1, 0xa7,
 0x29, 0x29, 0x2f, 0x86, 0xae, 0x92, 0x80, 0xb5, 0xdb, 0x2a, 0x11, 0x61, 0x6c, 0x7a, 0x70, 0xe4, 0xe9, 0xd1, 0xea, 0xe1, 0xb6, 0xfa, 0x26, 0x03, 0x05, 0xa9, 0x6a, 0x3b, 0xaa, 0x66, 0xda, 0x63, 0x9a, 0xb4, 0x71, 0x49, 0xdb, 0x6f, 0x68, 0x03, 0x7d, 0x92, 0x2d, 0xc2, 0x3d, 0x55, 0x23, 0xb8, 0xb2, 0xb4, 0xab, 0x16, 0x36, 0x86, 0xb0, 0x11, 0x59, 0x12, 0xc0, 0x13, 0x2b, 0x84, 0x64, 0x7e, 0xe6, 0x3d, 0xab, 0xbb, 0x3a, 0x50, 0x12, 0xae, 0x5e, 0x0b, 0x32, 0xd9, 0x48, 0xb5, 0x82, 0xed, 0x50, 0x4b, 0xb4, 0x78, 0x19, 0xc2, 0xb7, 0xc4, 0x19, 0x86, 0x1f, 0x96, 0xc4, 0xed, 0x95, 0xb8, 0x15, 0x23, 0x4c, 0x0e, 0xb4, 0x66, 0x73, 0x0a, 0x50, 0x76, 0x03, 0xf9, 0x1b, 0xa0, 0x9a, 0xba, 0xe3, 0x8b, 0xe2, 0x0b, 0x5e, 0x6d, 0x75, 0x81, 0x8d, 0x73, 0x0b, 0xe1, 0x80, 0x33, 0x75, 0x0c, 0x32, 0xc7, 0xe6, 0xde, 0x06, 0x3a, 0xe7, 0x18, 0x8b, 0x88, 0x3e, 0x3d, 0x7c, 0xc4, 0x44, 0xaa, 0x9f, 0x16, 0x35, 0xca, 0x6b, 0x40, 0x24, 0x46, 0x29, 0xb3, 0x06, 0x8c, 0x7a, 0x02, 0x95, 0x3c, 0x10, 0x24, 0xc1, 0x3c, 0xba, 0xe5, 0x82, 0x63, 0x7f, 0xc8, 0x08, 0xc0, 0x1b, 0x36, 0x4e, 0x18, 0x89, 0x0d, 0x25, 0x12, 0xf9, 0x20, 0xac, 0x5c, 0x60, 0x11, 0x5b, 0xde, 0x7c, 0xd4, 0x66, 0xbc, 0x9b, 0xc8, 0x4d, 0x30, 0x2e, 0x64, 0x80, 0x00, 0x73, 0x79, 0x1c, 0xd8, 0x21, 0xe9, 0x25, 0xcf, 0x61, 0x54, 0x8b, 0xef, 0x0d, 0xe1, 0xc6, 0x8c, 0xaa, 0xdc, 0xde, 0xf8, 0xd3, 0x0d, 0xb4, 0x6a, 0xa9, 0x50, 0x87, 0x91, 0x5f, 0x66, 0x14, 0x91, 0x94, 0x89, 0x7a, 0x13, 0xd1, 0x1f, 0x37, 0x1e, 0xf2, 0xeb, 0xff, 0xa4, 0x94, 0xdc, 0x07, 0x69, 0x8a, 0xe5, 0x6c, 0x9d, 0xc6, 0x0b, 0x62, 0x3a, 0x4b, 0x3e, 0x73, 0xbc, 0x28, 0x60, 0xf0, 0xab, 0x5a, 0x6c, 0xfa, 0x22, 0x74, 0xb3, 0x0a, 0x3d, 0xba, 0x22, 0x48, 0x51, 0xf5, 0x5d, 0x8e, 0x6b, 0x2c, 0x46, 0x14, 0xf4, 0x62, 0x28, 0x2c, 0xa1, 0x9e, 0x3e, 0x49, 0x22, 0xd9, 0x7c, 0x59, 0xa7, 0xa0, 0x59, 0xf0, 0x18, 0x5f, 0x33, 0xd3, 0x6e, 0x57, 0x6d, 0xf4, 0xa3, 0x84, 0xdc, 0xb2, 0xea, 0xb6, 0xaa, 0x3c, 0xe2, 0x07, 0xda, 0xe2, 0x5e, 0x74, 0xb9, 0x86, 0x06, 0x6b, 0x18, 0xfe, 0x6c, 0x1a, 0x3c, 0x61, 0x89, 0x7b, 0x58, 0x65, 0x96, 0xc8, 0x58, 0x9a, 0x15, 0xa8, 0x64, 0x89, 0xfb, 0xdc, 0x9e, 0x80, 0x5b, 0x1c, 0x33, 0x56, 0xe4, 0x93, 0x74, 0xe7, 0x25, 0x69, 0x0a, 0xa0, 0x93, 0x54, 0x1d, 0xaa, 0x20, 0x6f, 0xad, 0x1d, 0x03, 0xfa, 0x2c, 0xba, 0x66, 0x12, 0xf6, 0xeb, 0x03, 0xe8, 0x59, 0x3a, 0x1e, 0xd7, 0x9b, 0x2d, 0x2c, 0x32, 0xeb, 0x6c, 0x35, 0x89, 0x1b, 0xf2, 0xa7, 0x18, 0x53, 0xea, 0x51, 0xea, 0x49, 0xaa, 0x5f, 0x8e, 0x99, 0x64, 0x49, 0xd0, 0x99, 0xd8, 0x43, 0x44, 0xa6, 0x98, 0x94, 0x43, 0xe7, 0x4f, 0x17, 0x97, 0x39, 0xf6, 0x95, 0xc6, 0x56, 0x5a, 0x08, 0x32, 0x5a, 0x6a, 0xc0, 0x99, 0x07, 0xbb, 0x46, 0x14, 0x7d, 0x8e, 0xc7, 0x83, 0xda, 0x39, 0xd2, 0xb2, 0xdf, 0xde, 0x07, 0x45, 0xf6, 0xc9, 0x4d, 0x5f, 0x91, 0x57, 0x8a, 0x73, 0x10, 0x77, 0x97, 0x9c, 0x74, 0x02, 0xa2, 0x18, 0x40, 0x60, 0xa1, 0xba, 0xd1, 0xdc, 0xd8, 0x2c, 0x4f, 0xcb, 0x10, 0x41, 0x76, 0x2d, 0x16, 0x5c, 0x6e, 0x38, 0xa2, 0xca, 0x4c, 0x3e, 0xa3, 0x56, 0xd2, 0x61, 0x9d, 0x15, 0x77, 0x69, 0xc7, 0xc2, 0xb2, 0xcb, 0x19, 0x9f, 0xa3, 0x46, 0xd3, 0xa8, 0x01, 0x2a, 0x72, 0xdb, 0xa7, 0xd4, 0x44, 0x58, 0x0c, 0x8e, 0x91, 0x1d, 0xdb, 0x32, 0xd8, 0xfd, 0x3f, 0x66, 0xe8, 0xc9, 0xe1, 0xb3, 0x26, 0x47, 0x28, 0x28, 0xa3, 0x8b, 0x51, 0xe2, 0x31, 0x90, 0x95, 0x73, 0xe0, 0xa0, 0xec, 0x08, 0xc5, 0xd6, 0xb4, 0x4b, 0xca, 0x6c, 0x80, 0x87, 0xe1, 0x37, 0xb7, 0x4f, 0x46, 0x0d, 0xaf, 0x4f, 0x1f, 0x09, 0x6c, 0xfa, 0x97, 0xb5, 0x67, 0xc8, 0xf1, 0x0c, 0x41, 0x35, 0xbc, 0xd5, 0xd4, 0xb1, 0x2e, 0xd5, 0x11, 0x5e, 0xd5, 0xb8, 0x02, 0xd3, 0x3e, 0x89, 0xcf, 0x95, 0xee, 0xca, 0xfb, 0x94, 0xb8, 0xb6, 0x87, 0x87, 0x36, 0x1c, 0xfe, 0x49, 0x46, 0x00, 0x54, 0x28, 0x4a, 0x46, 0x59, 0xe8, 0xd3, 0xab, 0x05, 0xdc, 0x66, 0x42, 0x2d, 0x44, 0x29, 0xb1, 0xd1, 0x8a, 0xaa, 0x82, 0xc5, 0x95, 0xd7, 0xdf, 0xdd, 0x16, 0x21, 0x83, 0x3c, 0x96, 0x4a, 0x8c, 0x54, 0xcc, 0x50, 0x87, 0x40, 0x60, 0x3e, 0xa5, 0x89, 0xc2, 0x3d, 0xab, 0x93, 0x3d, 0x80, 0xc2, 0x94, 0x95, 0x17, 0xe0, 0x9c, 0x90, 0x62, 0x85, 0xd3, 0x82, 0x4e, 0x62, 0x80, 0xd3, 0xca, 0x0e, 0xd4, 0x01, 0x61, 0x0a, 0x6a, 0xd0, 0x09, 0x4b, 0x32, 0x9e, 0x5e, 0x29, 0x1d, 0x4e, 0x7a, 0xb2, 0xae, 0x41, 0xdd, 0xd3, 0xf7, 0x21, 0xd9, 0xf1, 0x65, 0x64, 0x03, 0x73, 0xc0, 0xd6, 0x7d, 0x5f, 0xdf, 0x64, 0xfc, 0x78, 0xb5, 0x54, 0x29, 0x8e, 0x2c, 0x48, 0xc8, 0xc9, 0xe5, 0x94, 0x13, 0xa1, 0x67, 0x14, 0x41, 0xf4, 0x6b, 0x50, 0x46, 0x05, 0xc9, 0x30, 0x7c, 0x45, 0xb1, 0x91, 0xb3, 0x34, 0x21, 0x25, 0x5e, 0x44, 0x9a, 0x9b, 0x3a, 0x43, 0x70, 0x35, 0x71, 0x2e, 0x9f, 0xc3, 0x4f, 0xed, 0x68, 0x5b, 0x21, 0x14, 0xb0, 0x79, 0xd5, 0x00, 0x6c, 0xe4, 0x9c, 0x04, 0x4d, 0xd4, 0x4e, 0x8e, 0x42, 0x60, 0x52, 0x43, 0xbc, 0x86, 0x01, 0x56, 0x63, 0x1a, 0x94, 0xd6, 0x6a, 0x15, 0x21, 0x2f, 0x53, 0x49, 0x9d, 0x71, 0xb2, 0x67, 0x52, 0xb8, 0xcd, 0x90, 0x19, 0xce, 0x28, 0xcd, 0x21, 0x94, 0x82, 0x2b, 0x76, 0x8b, 0x1c, 0xe3, 0x8f, 0xf9, 0x4b, 0xb8, 0x96, 0xd8, 0xfb, 0xd7, 0x58, 0x9b, 0xdf, 0x1b, 0x47, 0x92, 0x09, 0x81, 0x51, 0x0a, 0xe2, 0xb7, 0x81, 0xfe, 0x3c, 0x53, 0x5f, 0x03, 0xd1, 0xb8, 0xb4, 0x26, 0xaa, 0x03, 0x89, 0x7a, 0x97, 0xb9, 0xfd, 0xb0, 0x6a, 0x48, 0xb2, 0x24, 0x55, 0x4e, 0x59, 0xeb, 0x5b, 0x0a, 0x2a, 0x0b, 0xb8, 0x27, 0x7f, 0x92, 0x08, 0xa3, 0xdc, 0x4a, 0x20, 0x7d, 0x82, 0xd9, 0x1a, 0x57, 0x32, 0x85, 0x03, 0x2f, 0xb6, 0x83, 0x87, 0x1d, 0x2e, 0x94, 0x40, 0xb2, 0xa5, 0x63, 0xd0, 0x39, 0x85, 0x8b, 0xe7, 0xb8, 0xd3, 0x82, 0x4a, 0xe4, 0x18, 0x5c, 0xd5, 0x92, 0x36, 0x7c, 0x1b, 0x95, 0x49, 0xb1, 0xbc, 0x3a, 0x77,
@@ -38,7 +38,7 @@ uint8_t H_bpoly_MIDSEC[9*NEWHOPE_POLYBYTES] = {
 0x99, 0x66, 0xdb, 0xf0, 0x45, 0xfc, 0xa4, 0xc3, 0x62, 0x0b, 0x47, 0x9b, 0x59, 0xa0, 0xb2, 0x8a, 0x34, 0x13, 0x27, 0x0c, 0xa4, 0x32, 0xce, 0x07, 0x19, 0x82, 0x32, 0xa9, 0x56, 0x8d, 0x30, 0xea, 0x25, 0x8e, 0xa8, 0x1a, 0x84, 0x1f, 0xb0, 0xa2, 0xa9, 0x6c, 0x9b, 0x5a, 0x6e, 0x69, 0x31, 0xa4, 0x72, 0x71, 0x0f, 0xf6, 0x3a, 0xcb, 0xe6, 0x71, 0xa5, 0x88, 0x7b, 0x69, 0x96, 0x52, 0x4f, 0x56, 0x6f, 0x68, 0x97, 0x2f, 0xa5, 0x43, 0x1f, 0x28, 0x76, 0x50, 0xcd, 0x24, 0xb2, 0xae, 0xef, 0xc2, 0xcb, 0xc3, 0x34, 0x4a, 0x51, 0x85, 0x14, 0xe8, 0x8b, 0xde, 0xba, 0xe2, 0xa1, 0x34, 0x79, 0xba, 0x7c, 0x44, 0x29, 0x9d, 0x22, 0x09, 0xe7, 0x35, 0x10, 0xee, 0x27, 0xf0, 0x48, 0xec, 0x48, 0x5e, 0xcc, 0x49, 0x78, 0x3b, 0x27, 0xaa, 0x21, 0x46, 0x11, 0xe1, 0x58, 0xd3, 0x16, 0x25, 0x5a, 0x92, 0xf9, 0x62, 0x6f, 0xf5, 0x47, 0x47, 0x6c, 0x75, 0x93, 0xbf, 0x7a, 0x86, 0x1a, 0x1c, 0xdc, 0x2a, 0x28, 0xb9, 0x01, 0x30, 0x45, 0xa6, 0xeb, 0x3d, 0x18, 0x9f, 0x13, 0x5e, 0x5c, 0x50, 0x50, 0x6d, 0x7e, 0xa3, 0xa2, 0x50, 0x21, 0xf4, 0x12, 0x0c, 0xdf, 0x1a, 0x0e, 0xeb, 0x95, 0x1a, 0x43, 0x95, 0x02, 0xd5, 0xc2, 0x73, 0x01, 0x18, 0xd5, 0x43, 0x9e, 0x4a, 0x2b, 0x91, 0x5a, 0xaa, 0x16, 0xf4, 0x01, 0x57, 0xad, 0x7e, 0x24, 0xcd, 0x3d, 0x15, 0xed, 0xfc, 0x99, 0x14, 0x10, 0xa1, 0x38, 0x5e, 0x51, 0x49, 0x7b, 0x1f, 0xd4, 0x59, 0x2f, 0x25, 0x84, 0x9f, 0xcb, 0xb9, 0x1b, 0x20, 0xf8, 0x1b, 0x2c, 0x8c, 0x3c, 0xeb, 0x93, 0x50, 0x71, 0x27, 0xcf, 0xcb, 0xf6, 0x41, 0x75, 0x19, 0x09, 0x86, 0xf1, 0x93, 0x5f, 0x52, 0x8c, 0xd1, 0xe7, 0xa6, 0x41, 0x7e, 0x6d, 0x3f, 0xc3, 0x52, 0x69, 0xd9, 0x49, 0xb6, 0x00, 0x30, 0x59, 0x1c, 0xba, 0xf3, 0xb8, 0x49, 0x65, 0xd4, 0xae, 0x08, 0x36, 0x7e, 0x6b, 0x32, 0x05, 0x9a, 0xba, 0xa4, 0x31, 0xb0, 0x30, 0x54, 0xe7, 0x07, 0x26, 0x41, 0x61, 0x70, 0x96, 0xdc, 0x05, 0xd2, 0xd1, 0xa3, 0xc7, 0x0a, 0x08, 0x67, 0xf5, 0xd1, 0x05, 0x1e, 0x84, 0x7a, 0xb0, 0x1b, 0xac, 0x85, 0xe7, 0x11, 0xf8, 0xc8, 0x6c, 0x22, 0x89, 0x46, 0x59, 0x68, 0xf0, 0x74, 0xcd, 0x0f, 0x07, 0xda, 0xa5, 0x07, 0x55, 0x98, 0x1d, 0x83, 0x62, 0x77, 0x27, 0x9b, 0x34, 0x09, 0xad, 0x05, 0x82, 0x68, 0x2c, 0x18, 0x18, 0x41, 0x9e, 0xae, 0x39, 0x09, 0xe5, 0x3f, 0x7b, 0xcf, 0xb7, 0xb4, 0x7d, 0xa8, 0x91, 0xce, 0x1c, 0x5b, 0xd9, 0xd0, 0x2d, 0x04, 0x52, 0x8b, 0x41, 0x93, 0x3a, 0xa9, 0x75, 0x92, 0x69, 0x9a, 0xa9, 0x46, 0xfa, 0x3e, 0x75, 0xca, 0x7a, 0x4a, 0x1a, 0x22, 0x0b, 0x69, 0x6f, 0x4d, 0xb4, 0x4e, 0x0c, 0x2d, 0x63, 0xcd, 0x15, 0x59, 0x66, 0x9c, 0xa8, 0xd0, 0x8c, 0xca, 0xab, 0x70, 0xe6, 0x1b, 0x88, 0xd9, 0xad, 0x68, 0x07, 0x68, 0x13, 0x28, 0x98, 0x88, 0x98, 0xae, 0x49, 0x47, 0x05, 0x89, 0x20, 0xd4, 0x08, 0x7d, 0x74, 0x81, 0xe6, 0xc5, 0x03, 0xc5, 0x55, 0x10, 0x7d, 0xca, 0x01, 0xe6, 0x5e, 0x28, 0x68, 0x52, 0xe2, 0x61, 0x16, 0x4d, 0x28, 0x38, 0x37, 0xdb, 0xa6, 0x3b, 0xa1, 0x24, 0x97, 0xd1, 0x1b, 0x56, 0x91, 0x01, 0xce, 0x59, 0x11, 0x2d, 0x88, 0x1b, 0x8f, 0x51, 0x59, 0x83, 0x68, 0x77, 0x39, 0x4d, 0xd8, 0x09, 0x2f, 0xe1, 0x55, 0x69, 0x62, 0xed, 0x3e, 0x05, 0xe2, 0x34, 0xd9, 0xaf, 0x8a, 0x5f, 0x0c, 0xe2, 0x80, 0xb5, 0x29, 0xdc, 0x02, 0x28, 0x50, 0xe3, 0x5a, 0xad, 0x70, 0x09, 0x57, 0xe5, 0xfb, 0xc5, 0xe9, 0xa6, 0x87, 0x27, 0xdf, 0x23, 0xf8, 0x1e, 0x6e, 0xb7, 0x00, 0x2c, 0x93, 0x83, 0x40, 0x6d, 0x60, 0x77, 0xd6, 0xc1, 0x60, 0x75, 0x21, 0x14, 0xf9, 0x9b, 0xd4, 0xf2, 0xd0, 0x79, 0x41, 0xf6, 0x07, 0xf6, 0xd3, 0xf5, 0xf8, 0x19, 0x0b, 0x52, 0xaa, 0xe1, 0xe8, 0xf1, 0xb7, 0x17, 0xa1, 0x82, 0x74, 0x4e, 0x48, 0xab, 0xe9, 0x61, 0x01, 0x78, 0x47, 0x22, 0x86, 0xbd, 0x8b, 0x50, 0xd8, 0xee, 0xd5, 0x9f, 0x67, 0x15, 0x56, 0x4a, 0x8d, 0xf0, 0x79, 0xb8, 0xef, 0xaf, 0x43, 0x20, 0x18, 0x87, 0x74, 0x40, 0x4f, 0x1a, 0x20, 0xb5, 0x31, 0x12, 0xd0, 0xfb, 0x16, 0x24, 0x94, 0x20, 0xb7, 0xaf, 0x2a, 0x4a, 0xd3, 0xa1, 0xa6, 0x00, 0xef, 0x75, 0xd1, 0x7b, 0x66, 0xb1, 0xbf, 0x25, 0x49, 0x88, 0xb5, 0x30, 0xa5, 0x08, 0xa6, 0x8c, 0x78, 0xa0, 0x41, 0x22, 0xdb, 0x27, 0x5e, 0xa9, 0x62, 0xd2, 0xa3, 0x97, 0x49, 0x8b, 0xc5, 0xa8, 0x96, 0x21, 0xf3, 0xe8, 0xeb, 0xe2, 0x7d, 0x0d, 0xae, 0xb5, 0xe6, 0xbc, 0xd7, 0x35, 0x5d, 0x18, 0xbb, 0xc4, 0xdf, 0x07, 0x10, 0xa5, 0x76, 0x97, 0x63, 0x1d, 0x15, 0xdb, 0x2e, 0x47, 0x12, 0xa5, 0x34, 0x3a, 0x90, 0xf4, 0x55, 0x9a, 0xa6, 0x33, 0xb9, 0x5f, 0xd5, 0x37, 0xcc, 0x53, 0xfe, 0x51, 0x87, 0x26, 0xa2, 0x46, 0x5f, 0xc0, 0xc5, 0x0c, 0xa5, 0x35, 0x17, 0x03, 0x24, 0x53, 0x11, 0x55, 0x06, 0x4b, 0x0d, 0x8e, 0xf2, 0x66, 0x12, 0x70, 0x4f, 0xcb, 0x66, 0xa6, 0x8d, 0x8c, 0xb0, 0x7d, 0x07, 0xc2, 0xc8, 0x5c, 0x85, 0x65, 0x3d, 0xde, 0x09, 0xf8, 0xd3, 0xf4, 0x97, 0x27, 0x42, 0xb7, 0xa4, 0x11, 0x66, 0x30, 0x26, 0xca, 0xd4, 0x81, 0x9a, 0x94, 0x5b, 0x0d, 0x1d, 0x38, 0xc8, 0x40, 0xce, 0xac, 0x70, 0x99, 0x54, 0x24, 0x2c, 0x99, 0x73, 0xc2, 0xd9, 0x16, 0x15, 0x58, 0x79, 0x4c, 0x4f, 0x1e, 0xbf, 0xd1, 0xe1, 0x52, 0x7f, 0x00, 0x90, 0x5f, 0x3a, 0xd5, 0x2d, 0x9d, 0x2a, 0x27, 0xdb, 0xaa, 0x4c, 0x64, 0x80, 0x02, 0x67, 0xfd, 0x43, 0xc7, 0xb9, 0x35, 0x47, 0x5c, 0x12, 0xb0, 0xd9, 0xfe, 0xbf, 0x52, 0x4e, 0x7c, 0x70, 0x42, 0x95, 0x5c, 0x1d, 0x58, 0xf0, 0x09, 0x82, 0x8c, 0x2d, 0x15, 0x2a, 0xeb, 0x33, 0xe3, 0x2e, 0x44, 0x92, 0xeb, 0x17, 0x56, 0x70, 0xe2, 0x14, 0xb4, 0xcd, 0xd7, 0x50, 0xb9, 0x84, 0x1c, 0xe5, 0xac, 0xb2, 0xe6, 0xee, 0xbd, 0x30, 0x84, 0xa7, 0x54, 0xe6, 0x5c, 0xf0, 0xa1, 0x4c, 0x1e, 0xd1, 0x8b, 0xea, 0x92, 0x6d, 0x4c, 0x91, 0x93, 0x80, 0xf8, 0x92, 0x8b, 0x5a, 0xa2, 0x76, 0x97, 0x74, 0xcd, 0x2e, 0x79, 0xea, 0x13, 0x72, 0xf9, 0xc8, 0x40, 0x93, 0x9b, 0xd5, 0x12, 0x72, 0xf2, 0x15, 0x55, 0x43, 0x55, 0xc7, 0x3c, 0x91, 0x87,
 0x61, 0x9e, 0x1b, 0x10, 0x65, 0xf6, 0x2e, 0x4c, 0x42, 0xab, 0xa0, 0x89, 0x06, 0xa2, 0xf6, 0xc4, 0x3c, 0xb5, 0xfc, 0x32, 0x59, 0xdb, 0x84, 0x9f, 0xe4, 0x99, 0xa9, 0x21, 0x8c, 0x23, 0x16, 0xaa, 0x57, 0x0d, 0x09, 0x92, 0xc8, 0xe7, 0x21, 0xfd, 0x24, 0x88, 0x4b, 0x1e, 0xc3, 0x9a, 0xd6, 0x61, 0x79, 0xdc, 0x1d, 0x24, 0x30, 0x43, 0x88, 0x6b, 0x89, 0x6d, 0x45, 0xdb, 0x30, 0x3e, 0x75, 0x67, 0x29, 0xfc, 0x2a, 0x13, 0xb8, 0x2e, 0x92, 0x64, 0x7c, 0xd4, 0x0d, 0x69, 0x08, 0xe4, 0xd1, 0x77, 0x68, 0x8b, 0x84, 0x2c, 0x90, 0x0f, 0x7e, 0xb3, 0x25, 0x1a, 0x3c, 0x9d, 0xda, 0x74, 0x22, 0xa2, 0xb2, 0x5e, 0x51, 0xa4, 0xd1, 0x94, 0xdc, 0x30, 0x56, 0x5d, 0xac, 0x1c, 0x54, 0x8f, 0xe9, 0x0d, 0x37, 0xe2, 0xa4, 0xd8, 0xd6, 0x1c, 0x2c, 0x00, 0xcb, 0xdf, 0xda, 0x1c, 0x82, 0x03, 0x41, 0xc3, 0xfa, 0xfa, 0xed, 0x9a, 0x6c, 0xc6, 0xcf, 0x30, 0xe6, 0x56, 0x28, 0x4d, 0x01, 0x12, 0xed, 0x19, 0x3d, 0x68, 0x98, 0xc3, 0x1e, 0xa7, 0xe9, 0x97, 0x98, 0x15, 0x01, 0x00, 0x60, 0x3b, 0x17, 0x8e, 0x17, 0x19, 0x12, 0x5a, 0x60, 0x4b, 0xe4, 0x02, 0x97, 0x28, 0x26, 0x75, 0xa0, 0x72, 0x20, 0x30, 0x28, 0xa7, 0x90, 0x71, 0xae, 0x94, 0x40, 0x99, 0xfd, 0xb5, 0x1a, 0xa1, 0x6f, 0xde, 0x29, 0x64, 0x75, 0x6d, 0x7d, 0x74, 0x1d, 0xd4, 0x67, 0xcb, 0x9d, 0xae, 0x12, 0x89, 0xdc, 0x88, 0xc6, 0xc7, 0x01, 0x5b, 0xf7, 0xe8, 0x06, 0x89, 0x1b, 0x34, 0x21, 0x5e, 0xaf, 0x04, 0xd5, 0x5e, 0x28, 0x39, 0x90, 0x14, 0x01, 0x5b, 0x02, 0xc9, 0x55, 0xc9, 0x5a, 0x53, 0xe7, 0xd7, 0x01, 0xbc, 0xa0, 0x43, 0x91, 0xb3, 0xb7, 0x6a, 0x81, 0xcd, 0x81, 0x49, 0x80, 0x82, 0x42, 0x98, 0x21, 0x05, 0x81, 0xd3, 0xd2, 0x50, 0xa0, 0xb1, 0x24, 0xf7, 0x50, 0x63, 0xb1, 0xaf, 0x86, 0x96, 0x31, 0x7a, 0x4d, 0x06, 0x98, 0x9f, 0x62, 0xd4, 0x07, 0x85, 0xf4, 0x90, 0x0e, 0x0b, 0xf9, 0xf4, 0x3c, 0x01, 0x9f, 0x3a, 0xc8, 0x97, 0x43, 0x07, 0x29, 0x6a, 0x72, 0xe8, 0x41, 0xf5, 0x2a, 0x7e, 0x5e, 0xad, 0xe6, 0x3f, 0xa5, 0x72, 0xbe, 0x99, 0x1e, 0x80, 0x87, 0x07, 0xc8, 0xe2, 0x94, 0x1b, 0x6d, 0x5b, 0xba, 0x31, 0x55, 0x8b, 0xbc, 0x66, 0x86, 0xe5, 0x25, 0x22, 0x10, 0x3a, 0xa6, 0xb6, 0x58, 0x5d, 0x81, 0x6d, 0x74, 0xc3, 0x25, 0xf1, 0x3a, 0xd2, 0x55, 0x62, 0x8d, 0x24, 0x77, 0x0a, 0xbd, 0x2d, 0x42, 0xac, 0xcc, 0x20, 0xfb, 0x54, 0x8c, 0x20, 0x8f, 0x0a, 0x63, 0x05, 0x80, 0x07, 0x98, 0x5c, 0x23, 0x7b, 0x1c, 0x78, 0x2f, 0x37, 0xaf, 0xb9, 0xe8, 0xa2, 0xcc, 0x98, 0x6d, 0x98, 0x3e, 0x88, 0x45, 0xc9, 0x82, 0x4b, 0x5c, 0xe6, 0x85, 0x95, 0x29, 0xa3, 0x68, 0x51, 0x49, 0x31, 0xfe, 0x68, 0xa8, 0x11, 0x54, 0x67, 0x26, 0xb8, 0x88, 0xb9, 0x48, 0xac, 0x53, 0x11, 0x35, 0xf6, 0x81, 0xa5, 0xce, 0x3c, 0xa0, 0xae, 0x88, 0x53, 0xf1, 0xcc, 0xf4, 0x89, 0x4f, 0xfa, 0x9e, 0xdf, 0x81, 0xff, 0xf8, 0xa8, 0x71, 0x03, 0xdd, 0xc0, 0x4e, 0x8b, 0x3a, 0xb0, 0x9b, 0x0a, 0x68, 0x66, 0x13, 0x14, 0x41, 0xbe, 0x11, 0x68, 0x54, 0x92, 0xb8, 0x38, 0x4f, 0x41, 0xd7, 0x91, 0xf3, 0x44, 0xa8, 0xac, 0x9d, 0x54, 0xbf, 0x8b, 0x90, 0x08, 0x11, 0x7c, 0x90, 0x93, 0x38, 0x29, 0x22, 0xa6, 0xa7, 0x59, 0x1e, 0x4b, 0xcd, 0x2e, 0xb5, 0xed, 0xeb, 0xf8, 0xc9, 0xcd, 0x2c, 0x20, 0x77, 0x80, 0x3f, 0x82, 0x69, 0x0e, 0x8c, 0x24, 0x01, 0x05, 0x68, 0x65, 0x90, 0x5f, 0x03, 0x9e, 0x22, 0x51, 0xe1, 0xcd, 0x21, 0x82, 0x22, 0xef, 0x75, 0xcd, 0x68, 0x6f, 0xa1, 0x07, 0x62, 0x0a, 0xbb, 0xad, 0x38, 0x67, 0x6c, 0xcd, 0xd7, 0x2f, 0xbc, 0x7f, 0xb0, 0x05, 0x69, 0x60, 0x45, 0x76, 0xb1, 0x37, 0xee, 0xec, 0xc7, 0x7a, 0x11, 0x7b, 0x08, 0xd2, 0x1d, 0xa3, 0x9d, 0x08, 0xa9, 0x6c, 0xac, 0x1a, 0xca, 0xfe, 0x88, 0x4f, 0x4a, 0x85, 0x5e, 0xc4, 0xec, 0x95, 0x91, 0xbd, 0x40, 0xce, 0x53, 0x0d, 0xcd, 0x97, 0x92, 0x43, 0x53, 0x17, 0x32, 0xaa, 0xb4, 0xda, 0x58, 0xc6, 0xbb, 0xc1, 0x32, 0x63, 0x31, 0x6d, 0x5f, 0x51, 0x5d, 0xd9, 0xa4, 0xc8, 0xc6, 0x1d, 0x43, 0x9e, 0x76, 0xa0, 0x19, 0x02, 0x58, 0x81, 0x2e, 0xb4, 0x1e, 0x4a, 0x13, 0x44, 0xb4, 0x0a, 0xdc, 0x8d, 0xd4, 0x63, 0x3e, 0x12, 0x22, 0x9a, 0x39, 0xa7, 0xa5, 0xa6, 0xd3, 0x73, 0x39, 0x92, 0x46, 0x57, 0xa9, 0xb6, 0x8e, 0xd8, 0x78, 0x5f, 0xaa, 0x6a, 0x49, 0x21, 0x6a, 0x41, 0x1d, 0x65, 0xf3, 0x07, 0x55, 0x60, 0xa9, 0x17, 0x99, 0xe1, 0x7a, 0x13, 0xf6, 0x35, 0x70, 0x4f, 0x95, 0x10, 0x03, 0x20, 0x37, 0xb0, 0x89, 0xb9, 0x24, 0xa4, 0xf0, 0x5d, 0x97, 0x54, 0x26, 0x68, 0x85, 0x48, 0x35, 0xfd, 0xa0, 0x19, 0xd4, 0x66, 0x19, 0x76, 0xf1, 0xd4, 0x13, 0xe3, 0x6e, 0xa5, 0x4b, 0x7d, 0x82, 0xb6, 0x4b, 0x61, 0x52, 0x35, 0xbf, 0x5c, 0xc7, 0xdb, 0x51, 0x1a, 0x23, 0xe6, 0x4d, 0x96, 0x60, 0xad, 0x22, 0x01, 0xb2, 0x1a, 0xd9, 0xb2, 0x89, 0xce, 0x43, 0x93, 0xa2, 0xdf, 0x41, 0x20, 0xdc, 0x36, 0x81, 0xd3, 0x0d, 0x28, 0x7c, 0xf6, 0x9c, 0xd4, 0x16, 0x28, 0x45, 0xda, 0x00, 0x3d, 0x91, 0x62, 0x66, 0x7a, 0x6b, 0xbc, 0xb4, 0x30, 0x92, 0xb8, 0xd1, 0x46, 0x1c, 0x71, 0x1e, 0x67, 0x10, 0xb3, 0xe3, 0xf1, 0x06, 0xb7, 0x5f, 0x31, 0xd6, 0xe0, 0x26, 0x24, 0x3d, 0x01, 0x32, 0x64, 0xc6, 0x89, 0x47, 0x11, 0xa0, 0x4a, 0x6b, 0xb2, 0x0d, 0x06, 0x51, 0x49, 0xc8, 0x40, 0xc4, 0x6d, 0x4c, 0x51, 0x5c, 0xec, 0x94, 0x72, 0x34, 0xa7, 0xeb, 0x22, 0xab, 0x05, 0x3b, 0x15, 0x6f, 0x66, 0xd4, 0xea, 0x3b, 0x05, 0xe9, 0x53, 0xe0, 0x26, 0x7f, 0xa2, 0x54, 0x29, 0x34, 0x5b, 0x1a, 0xae, 0xe7, 0x6e, 0xd0, 0x54, 0x9f, 0xc8, 0xd7, 0x55, 0x09, 0x1a, 0x3e, 0xea, 0x28, 0x85, 0x91, 0x52, 0x41, 0x4e, 0x67, 0x43, 0x16, 0xb6, 0xc8, 0xcc, 0x06, 0xbb, 0x00, 0x0c, 0x47, 0x82, 0xf5, 0x64, 0x44, 0x2e, 0xf7, 0xcb, 0x42, 0x6c, 0x78, 0x53, 0xdf, 0xe0, 0x5a, 0x9f, 0x22, 0x61, 0x89, 0x66, 0xe0, 0x51, 0x05, 0x20, 0x2f, 0x7b, 0x1a, 0x69, 0xf2, 0xd7, 0xf5, 0x65, 0x06, 0xdb, 0x99, 0x51, 0xa1, 0xec, 0xbb, 0xb7, 0x96, 0x91, 0xc2, 0xfd, 0x58, 0x15,
 };
-uint8_t A_bpoly_MAXSEC[14*NEWHOPE_POLYBYTES] = {
+uint8_t A_bpoly_MAXSEC[14*NEWHOPE_RINGCT20_POLYBYTES] = {
 0x48, 0x13, 0xa2, 0xdb, 0x76, 0x2d, 0x63, 0x4a, 0xdf, 0x02, 0xc8, 0xd3, 0x45, 0x5a, 0xc3, 0x6c, 0x10, 0xc7, 0x46, 0x1c, 0x52, 0x8f, 0x09, 0xc2, 0x77, 0x99, 0xc2, 0x88, 0x79, 0x6f, 0x0b, 0xd9, 0xdf, 0xd0, 0x02, 0xb1, 0xc5, 0x52, 0xa6, 0x49, 0xc4, 0x07, 0xef, 0x8d, 0x11, 0x96, 0xa5, 0x21, 0x03, 0xfd, 0x03, 0x44, 0xb0, 0xe6, 0x90, 0x23, 0xbe, 0xc6, 0x69, 0x1a, 0xea, 0x5d, 0x5c, 0x18, 0xca, 0xaa, 0x03, 0x50, 0xb9, 0x15, 0x4d, 0xce, 0x87, 0xd8, 0xdb, 0xb8, 0x8b, 0x40, 0xac, 0xa8, 0xf8, 0xd6, 0xf9, 0x5f, 0x18, 0x41, 0x9d, 0xd4, 0x4a, 0xf1, 0x73, 0x93, 0x24, 0x1c, 0x73, 0xa2, 0xfa, 0xaa, 0xfa, 0x84, 0x88, 0x60, 0x5d, 0x3c, 0x96, 0xd1, 0x97, 0x9f, 0x13, 0xbe, 0x34, 0x61, 0x54, 0x05, 0x09, 0xb0, 0xb0, 0x9d, 0x00, 0xa8, 0xc3, 0x88, 0x58, 0xb5, 0x12, 0x62, 0x68, 0x9f, 0xf4, 0x7b, 0xb0, 0x71, 0xbf, 0xbf, 0x86, 0x7b, 0xb7, 0xac, 0xb4, 0x55, 0x85, 0x53, 0x3d, 0xe6, 0x1d, 0x4e, 0x99, 0x9c, 0x01, 0xaf, 0xf8, 0x56, 0xde, 0x75, 0xa3, 0x60, 0xa8, 0x9b, 0x88, 0x4c, 0x8f, 0x42, 0xd9, 0x2a, 0x84, 0x08, 0xc4, 0x40, 0x58, 0x1a, 0x10, 0x98, 0xb7, 0x19, 0x87, 0x08, 0x0f, 0x2f, 0xb4, 0xbd, 0x6c, 0x75, 0xb4, 0x57, 0x98, 0x02, 0xab, 0xb0, 0xae, 0x8f, 0x09, 0xac, 0x8a, 0x0c, 0xfa, 0x99, 0x5c, 0x89, 0xe2, 0x37, 0x7e, 0x1d, 0x06, 0x44, 0x62, 0xa2, 0x91, 0xd8, 0x92, 0xba, 0x69, 0xa4, 0x92, 0x71, 0x9e, 0x72, 0xa1, 0x97, 0x40, 0x3e, 0x65, 0xf2, 0xd0, 0x56, 0x8a, 0x67, 0x7b, 0xa5, 0x40, 0x44, 0x79, 0x2f, 0xd1, 0x70, 0xc9, 0xee, 0x34, 0xa4, 0xee, 0x17, 0x52, 0xc2, 0x4e, 0xfc, 0x73, 0xa7, 0xc8, 0xd6, 0xba, 0xdc, 0xee, 0x07, 0x21, 0xa5, 0xd2, 0xa9, 0x36, 0xb5, 0x5f, 0x0b, 0xae, 0x47, 0x21, 0xe7, 0xa1, 0x92, 0x6e, 0xd5, 0xf8, 0xb7, 0x3f, 0x4c, 0x61, 0x2d, 0x24, 0x19, 0xa8, 0x4d, 0x42, 0x3a, 0xb7, 0x4f, 0x47, 0xf9, 0x7d, 0x48, 0x52, 0x11, 0x2f, 0x42, 0x2a, 0x43, 0x26, 0x04, 0x25, 0x21, 0x5c, 0xc1, 0x6e, 0x8d, 0x0a, 0xe7, 0x60, 0x1a, 0x86, 0x9f, 0xf6, 0x28, 0xec, 0x45, 0x60, 0x13, 0xcf, 0x85, 0x0f, 0xda, 0xc5, 0xc1, 0x21, 0x87, 0x3a, 0x70, 0x36, 0x66, 0xc9, 0x21, 0x41, 0xc9, 0x37, 0x71, 0xc6, 0x02, 0xd4, 0x48, 0x41, 0xb1, 0x3c, 0x68, 0x87, 0xe3, 0xf7, 0xd8, 0x7b, 0x61, 0x8f, 0x4d, 0xfb, 0xfd, 0xa8, 0xb7, 0x34, 0xeb, 0x3a, 0x52, 0xea, 0x54, 0x4d, 0x54, 0x42, 0xc1, 0x95, 0xe0, 0x18, 0x00, 0x1b, 0xcc, 0xda, 0x67, 0x4f, 0xcc, 0x78, 0xe5, 0x66, 0x02, 0x55, 0x5f, 0x05, 0x2b, 0x1c, 0xeb, 0xe1, 0xc0, 0x1a, 0xb9, 0x62, 0x30, 0x66, 0x55, 0x18, 0x31, 0x09, 0x9f, 0x05, 0x9f, 0x22, 0xc9, 0x39, 0xe1, 0x8f, 0x07, 0xd2, 0x3b, 0x80, 0x6e, 0xa6, 0xbc, 0xf2, 0x1f, 0xe4, 0xb2, 0xba, 0x1e, 0xb2, 0xe7, 0x46, 0x0c, 0x2b, 0xee, 0x14, 0x33, 0xe3, 0xd5, 0xa7, 0x74, 0x6f, 0xc4, 0xb3, 0xb8, 0x98, 0x20, 0x48, 0x7b, 0xd2, 0x95, 0x14, 0xe9, 0xc8, 0xca, 0x79, 0x02, 0xb5, 0x8a, 0xc9, 0x95, 0x58, 0xb1, 0x69, 0x4c, 0xc2, 0x5f, 0x00, 0x18, 0xd6, 0xb2, 0x5e, 0x26, 0x91, 0xe1, 0x03, 0x7a, 0x79, 0x27, 0x26, 0x20, 0xf9, 0xb3, 0xf8, 0x68, 0x86, 0x67, 0x0d, 0x7d, 0x86, 0x4d, 0x4a, 0x84, 0x6c, 0x48, 0x93, 0xf2, 0x5a, 0x7a, 0x62, 0x17, 0x59, 0xbd, 0xb0, 0x17, 0x40, 0x62, 0x6e, 0x8e, 0xeb, 0x03, 0x3d, 0x74, 0x13, 0x0a, 0x64, 0x93, 0x32, 0xd0, 0x16, 0x61, 0xd2, 0x07, 0xd2, 0x88, 0xc7, 0x48, 0x25, 0xf0, 0x1c, 0xa8, 0xd0, 0x85, 0xad, 0x45, 0xbc, 0x47, 0x0b, 0x72, 0x9d, 0xe0, 0x3e, 0xf3, 0x53, 0xee, 0xf9, 0x3f, 0x29, 0xa1, 0x82, 0x59, 0x95, 0x65, 0x6c, 0x14, 0x0d, 0x0a, 0x60, 0x7f, 0xf3, 0x8e, 0x0e, 0x7f, 0xf7, 0x6a, 0xd0, 0x57, 0xd4, 0x48, 0x6b, 0x05, 0xa4, 0xfc, 0x69, 0x66, 0x0d, 0x3a, 0x98, 0xaa, 0x0d, 0x65, 0xd0, 0x94, 0x15, 0x2d, 0x41, 0xe3, 0x67, 0x33, 0x4d, 0x11, 0xfc, 0x46, 0x36, 0xaa, 0x82, 0xc1, 0x28, 0xdd, 0x5d, 0x12, 0xb5, 0x5f, 0x9a, 0x55, 0xbd, 0x2b, 0xf6, 0x92, 0xbe, 0x05, 0x3f, 0x64, 0x50, 0xc4, 0xe7, 0x58, 0x44, 0xb0, 0x47, 0x41, 0xf0, 0x86, 0xa7, 0xe0, 0x49, 0x45, 0xa2, 0xde, 0x57, 0x0f, 0xb1, 0x3e, 0xb7, 0x5b, 0xf2, 0xc0, 0xde, 0xc0, 0x59, 0x15, 0xd4, 0x43, 0x90, 0xfb, 0x34, 0x1d, 0xd9, 0xc2, 0x80, 0xc3, 0x37, 0xd9, 0xaa, 0x6a, 0x17, 0x31, 0x2b, 0xe0, 0x0c, 0x5d, 0x63, 0x64, 0xc0, 0xd8, 0x4c, 0x0a, 0x4d, 0x74, 0x06, 0xe2, 0xf8, 0x3c, 0x09, 0x65, 0x57, 0x42, 0xea, 0x79, 0xfd, 0xe9, 0x74, 0xa1, 0x0f, 0xb5, 0x73, 0x9b, 0xd0, 0x7c, 0xde, 0x66, 0xe3, 0xaa, 0x63, 0x04, 0x7e, 0x1d, 0x92, 0xf3, 0x34, 0x8e, 0x00, 0x61, 0xb2, 0x84, 0x8e, 0xa9, 0xfc, 0x31, 0x93, 0xa0, 0x64, 0x33, 0x79, 0xdd, 0x0d, 0x51, 0x2a, 0x56, 0x3c, 0xea, 0xf9, 0xea, 0x0b, 0x9b, 0x07, 0x58, 0x67, 0xc4, 0xbd, 0x1a, 0x5b, 0x50, 0x01, 0x66, 0x38, 0x88, 0x7b, 0xb6, 0x1e, 0xeb, 0x66, 0x9d, 0xcc, 0x84, 0x80, 0x2e, 0xe8, 0xc2, 0x68, 0x52, 0xa7, 0xc7, 0xee, 0xf3, 0x68, 0x65, 0x30, 0x3d, 0x83, 0x87, 0xc8, 0x00, 0xc3, 0xf0, 0x16, 0xa0, 0x47, 0xa5, 0xf7, 0x45, 0xce, 0xa8, 0x6d, 0xc0, 0x91, 0x10, 0xee, 0x92, 0x59, 0x0d, 0xd8, 0x04, 0xf7, 0x30, 0x80, 0x1c, 0xdd, 0x9b, 0x79, 0x1a, 0x2e, 0xbd, 0x6e, 0x58, 0x64, 0xeb, 0x01, 0x83, 0x4a, 0x93, 0xe6, 0x0b, 0x0c, 0x61, 0xbb, 0xe5, 0x01, 0x73, 0xdf, 0xf0, 0x93, 0x99, 0x78, 0x88, 0x91, 0xa5, 0xdb, 0xeb, 0xa5, 0xa8, 0xa0, 0x7b, 0xab, 0x6b, 0x54, 0xd7, 0xca, 0x7d, 0x09, 0x89, 0x3c, 0xa4, 0x2e, 0x85, 0x22, 0x73, 0x8d, 0xe0, 0xaa, 0xf5, 0x41, 0x10, 0x35, 0x86, 0xfb, 0x0b, 0x88, 0xed, 0x6c, 0xaf, 0x2d, 0xc4, 0xc0, 0x8f, 0x28, 0x1a, 0x4b, 0x6f, 0xe5, 0xa2, 0x48, 0x46, 0x39, 0x7d, 0x46, 0x5f, 0x68, 0x27, 0x72, 0x5e, 0xdf, 0x11, 0x6b, 0x14, 0xb4, 0x9d, 0x65, 0xd4, 0xe7, 0x76, 0xd5, 0xd0, 0x06, 0x37, 0xe7, 0x5b, 0x72, 0x27, 0xc3, 0x0d, 0x15, 0x6f, 0x5c, 0x98, 0x53, 0x5e, 0x24, 0xa3, 0x2c, 0x86, 0x4d, 0x79, 0x6c, 0xf8, 0xab, 0x38, 0x43, 0x80, 0x79, 0xd6, 0x5a, 0x1b,
 0x9e, 0x25, 0xcf, 0x48, 0xe5, 0x5d, 0x26, 0x53, 0x8a, 0x1e, 0x18, 0xd1, 0x24, 0xac, 0x3b, 0xde, 0xed, 0x61, 0xd1, 0x6d, 0x87, 0x05, 0x4c, 0xc7, 0x72, 0x60, 0x54, 0x90, 0x5e, 0x25, 0x8e, 0x96, 0x64, 0x92, 0x02, 0x4d, 0x8a, 0x75, 0x94, 0x9d, 0x00, 0x97, 0x08, 0x1c, 0xac, 0x28, 0x80, 0xc6, 0x78, 0x15, 0x6a, 0xaf, 0xd0, 0x37, 0x46, 0x7b, 0xaf, 0xef, 0x07, 0xe9, 0xda, 0x34, 0xb4, 0xd0, 0xc3, 0xc8, 0x45, 0x9e, 0xae, 0x4f, 0xe6, 0x22, 0x49, 0x62, 0xd2, 0x1e, 0x6f, 0x12, 0x5b, 0x7a, 0x05, 0x11, 0x01, 0x4f, 0xb6, 0xc9, 0x52, 0xe8, 0xf6, 0x65, 0x6a, 0x21, 0x20, 0x25, 0x74, 0x60, 0x80, 0x9f, 0x76, 0xc8, 0x11, 0x18, 0x26, 0x58, 0x50, 0x0d, 0xd3, 0xdf, 0x44, 0xd3, 0xba, 0x28, 0x5f, 0xa8, 0x67, 0xd4, 0x0f, 0x8e, 0x9f, 0xbb, 0xed, 0x91, 0x04, 0x5a, 0x65, 0x64, 0xe3, 0x99, 0xec, 0x02, 0x45, 0xdc, 0x07, 0x91, 0x12, 0xbd, 0x85, 0x7c, 0x34, 0x2a, 0xb8, 0x23, 0x92, 0x93, 0x2a, 0x3c, 0xa0, 0x87, 0xe2, 0xbe, 0xc0, 0x5d, 0xec, 0x78, 0xf6, 0x2b, 0x6d, 0x32, 0x08, 0xf6, 0x5d, 0xeb, 0xca, 0xfe, 0x2b, 0x7c, 0x8e, 0x09, 0x27, 0x9b, 0xf1, 0x28, 0x03, 0xb2, 0x46, 0x3f, 0xd3, 0x68, 0x96, 0xdc, 0xc6, 0x13, 0xba, 0xe1, 0x14, 0x02, 0x56, 0x60, 0x56, 0xd7, 0xd2, 0xd6, 0xf8, 0xe6, 0xc4, 0x4c, 0xc0, 0x65, 0xd4, 0x9a, 0x53, 0xe2, 0x4b, 0x96, 0x19, 0xfd, 0x1a, 0x6a, 0x2e, 0x00, 0x1e, 0x00, 0x36, 0xa7, 0x55, 0x2c, 0x93, 0xf5, 0x22, 0xf3, 0x3a, 0xec, 0x34, 0x22, 0x87, 0xec, 0xa6, 0xf4, 0x2e, 0x9a, 0x85, 0x5f, 0x23, 0x26, 0x9a, 0xaf, 0x85, 0xb8, 0x88, 0x5d, 0x6b, 0x13, 0x58, 0x1e, 0x7d, 0x51, 0x6b, 0x07, 0x56, 0x04, 0x56, 0x8e, 0xa5, 0xaf, 0xbb, 0x25, 0x3c, 0xe2, 0xa4, 0x42, 0xa6, 0xb9, 0x33, 0x0c, 0x09, 0x0d, 0xe5, 0x83, 0x1b, 0xa5, 0x09, 0xe4, 0x14, 0x1c, 0x96, 0xfd, 0xb5, 0xc9, 0xa9, 0xb3, 0xaa, 0x59, 0xef, 0xe2, 0x7a, 0x8e, 0x1d, 0xdb, 0x9b, 0x17, 0x0b, 0xe8, 0x65, 0xb9, 0xe3, 0xd7, 0xd2, 0x35, 0x2f, 0x56, 0x39, 0x6a, 0x49, 0x2f, 0xfa, 0xd4, 0x94, 0x4d, 0xeb, 0x83, 0x85, 0x3b, 0xb0, 0x29, 0xb5, 0xec, 0x60, 0x2f, 0xb3, 0x05, 0x06, 0x98, 0xab, 0x0b, 0x29, 0x59, 0x58, 0x81, 0x02, 0x81, 0xd5, 0x7e, 0x55, 0xca, 0x40, 0xb1, 0xa7, 0x08, 0xc2, 0x9b, 0x8d, 0x68, 0x71, 0x76, 0x16, 0xdd, 0xf9, 0x2d, 0xee, 0x48, 0x88, 0x61, 0x12, 0xd9, 0x0a, 0x0c, 0x65, 0x3c, 0xd5, 0x61, 0xd7, 0xa7, 0x14, 0x43, 0x95, 0x6b, 0xbd, 0x88, 0x7b, 0xca, 0x82, 0xf2, 0xc6, 0x40, 0xab, 0xe9, 0x58, 0x54, 0x63, 0xe5, 0x17, 0x82, 0xe3, 0x7e, 0x2e, 0x75, 0x81, 0x49, 0x52, 0xfc, 0x04, 0x92, 0x0a, 0x6a, 0xf9, 0x00, 0xf4, 0xa8, 0x61, 0x10, 0x6b, 0x2d, 0x0a, 0xc9, 0xea, 0xa5, 0x73, 0x47, 0xcd, 0xb3, 0x38, 0xac, 0x9e, 0xf6, 0xeb, 0x4c, 0x30, 0x12, 0xe2, 0x2c, 0x95, 0x93, 0x92, 0xcb, 0x26, 0xf4, 0x4c, 0x2c, 0x01, 0xf7, 0x31, 0x9e, 0xa9, 0x85, 0x87, 0xe6, 0x8c, 0xc5, 0xd1, 0x42, 0x5b, 0x2c, 0x9d, 0xcb, 0x27, 0x6c, 0x1c, 0x2d, 0x83, 0x09, 0x1e, 0x8b, 0xc7, 0x52, 0x1b, 0x0e, 0x6f, 0x78, 0x44, 0xf9, 0x04, 0x18, 0xc7, 0x58, 0xac, 0x29, 0x64, 0xde, 0x61, 0xa0, 0x4a, 0xd9, 0xd0, 0x6e, 0xd2, 0x2e, 0xde, 0x81, 0x01, 0x23, 0xf2, 0x00, 0x17, 0xdb, 0x29, 0xf9, 0x40, 0x1a, 0x1a, 0x57, 0xeb, 0x29, 0xc4, 0xd7, 0x3c, 0xbc, 0x08, 0x35, 0xa9, 0xc1, 0x76, 0x9b, 0x40, 0x49, 0x94, 0xcf, 0xbb, 0x24, 0xb9, 0x8d, 0x18, 0x98, 0x54, 0x77, 0xa2, 0x1f, 0xb5, 0xa2, 0x5d, 0x08, 0x58, 0xcb, 0x31, 0x36, 0x80, 0xb4, 0x98, 0x41, 0x2a, 0x21, 0x3c, 0x09, 0xc2, 0x5e, 0x61, 0x21, 0xfe, 0xec, 0x2f, 0x1f, 0xe0, 0x17, 0x3b, 0x01, 0xd0, 0x53, 0x8c, 0x86, 0x76, 0x91, 0x8d, 0x66, 0x96, 0x4d, 0x11, 0x66, 0xe1, 0x0c, 0x96, 0x71, 0x2d, 0x65, 0xfe, 0xf6, 0x62, 0x2a, 0x71, 0x80, 0xea, 0xaa, 0x52, 0x60, 0x38, 0xba, 0x95, 0xde, 0xab, 0x78, 0x8a, 0x1c, 0x5c, 0xae, 0xce, 0x0d, 0x17, 0xb1, 0x00, 0x92, 0x8b, 0x9d, 0x2a, 0xc4, 0xf6, 0x65, 0x85, 0x15, 0x6b, 0xc3, 0x2b, 0x21, 0xfe, 0x19, 0xcd, 0x29, 0x55, 0xc1, 0xf3, 0xc5, 0x84, 0xeb, 0x6b, 0x07, 0x67, 0x78, 0xf0, 0x90, 0xd0, 0x2f, 0xdf, 0x61, 0x3f, 0x9a, 0x7d, 0x00, 0xa6, 0x39, 0x22, 0xbb, 0x58, 0x4e, 0x12, 0xcf, 0x03, 0x18, 0x14, 0x58, 0x0b, 0x01, 0x14, 0x8a, 0xa4, 0xc0, 0xf0, 0xb2, 0x0f, 0xe7, 0xeb, 0xa3, 0x9b, 0xf4, 0xbc, 0x63, 0x28, 0x8b, 0x21, 0xef, 0x1e, 0xa5, 0xec, 0x64, 0x4e, 0xa2, 0x2f, 0x06, 0xa0, 0x02, 0xa5, 0x9c, 0x23, 0xbb, 0x61, 0xb9, 0x4d, 0xdf, 0xf6, 0x05, 0x3b, 0x66, 0x03, 0x22, 0x41, 0x3a, 0xf0, 0x83, 0xf0, 0x7f, 0x57, 0xd4, 0x2e, 0xf4, 0xae, 0x42, 0xb7, 0xd0, 0x63, 0x5a, 0x83, 0xd6, 0x64, 0x5b, 0x5d, 0x9d, 0xa5, 0xb1, 0x35, 0x66, 0x17, 0xc5, 0x5e, 0x6c, 0x95, 0xa3, 0xa0, 0x59, 0xe4, 0xda, 0x6e, 0xea, 0xc8, 0x95, 0x81, 0xf5, 0x1a, 0xb6, 0xb7, 0x92, 0xa1, 0x90, 0xfb, 0x1c, 0x40, 0x94, 0x5a, 0x96, 0x03, 0xf2, 0x06, 0x17, 0xb7, 0xf5, 0xb8, 0x39, 0xbd, 0x22, 0x15, 0x80, 0x02, 0x36, 0x39, 0x1b, 0x85, 0x31, 0x61, 0xf3, 0xaa, 0xbd, 0xb9, 0x64, 0x08, 0xe4, 0x0d, 0x30, 0x7a, 0xef, 0xdb, 0xa6, 0xb6, 0x80, 0x2e, 0x18, 0xb9, 0x5c, 0x10, 0x6a, 0xd6, 0xca, 0x0c, 0x58, 0x99, 0xef, 0x76, 0x7b, 0x72, 0x1d, 0x78, 0x01, 0xdc, 0xa2, 0xcb, 0x71, 0xb9, 0xd6, 0xdb, 0x97, 0xaa, 0x21, 0xe2, 0x9d, 0xfd, 0xeb, 0xec, 0x87, 0xb8, 0xe6, 0xb8, 0x72, 0x1a, 0x2d, 0xe0, 0xce, 0x81, 0x90, 0x67, 0x19, 0x5c, 0x33, 0x97, 0xce, 0x31, 0x39, 0x4b, 0x01, 0x20, 0xa4, 0xfd, 0x05, 0xa5, 0x0c, 0xbd, 0x28, 0xac, 0x24, 0x5d, 0x8e, 0x0d, 0xfc, 0xa0, 0xc4, 0x40, 0x79, 0x32, 0xd1, 0x52, 0x62, 0x58, 0x05, 0x5a, 0xc9, 0x20, 0xe2, 0x26, 0x58, 0xb2, 0x9c, 0xe3, 0x9e, 0xcd, 0xc0, 0x21, 0xba, 0x1b, 0x5e, 0x18, 0x4a, 0x37, 0x1f, 0xc1, 0x5b, 0x39, 0x6d, 0x66, 0xab, 0xe3, 0xc1, 0x60, 0x22, 0x6f, 0xc4, 0xe1, 0x20, 0x69, 0xbb, 0x6b, 0x21, 0xed, 0x03, 0x77, 0x92, 0x08, 0x40, 0x87, 0xb4, 0x45, 0xb1, 0xa9, 0x70,
 0xae, 0x19, 0x2f, 0x02, 0x9a, 0xdc, 0x5e, 0x08, 0xa7, 0xfe, 0xaa, 0xa2, 0x02, 0x34, 0x6f, 0xc9, 0x20, 0x56, 0x19, 0x62, 0x8e, 0x3a, 0xe8, 0x6d, 0x4b, 0x92, 0x70, 0x8b, 0x1b, 0x99, 0x94, 0x01, 0x06, 0x71, 0xb0, 0x8d, 0xaf, 0x3b, 0x4a, 0xa6, 0x92, 0x45, 0x40, 0x51, 0xa6, 0x7a, 0x4f, 0xa5, 0x10, 0x34, 0x0c, 0x5f, 0xf0, 0xa8, 0x44, 0xa4, 0x01, 0x08, 0x13, 0x9b, 0x1b, 0xdd, 0x7e, 0x83, 0xca, 0x38, 0xd3, 0x5b, 0xe6, 0x8a, 0x78, 0x1a, 0x6b, 0x64, 0x9d, 0x2a, 0x70, 0x20, 0x27, 0x36, 0x30, 0xeb, 0xe0, 0x0f, 0x7b, 0x86, 0x79, 0xd1, 0x6c, 0xad, 0x06, 0x46, 0x2f, 0x12, 0x69, 0xa1, 0xc9, 0x45, 0xa9, 0x40, 0x9c, 0xd4, 0x51, 0x19, 0x92, 0x7b, 0x15, 0x70, 0xb8, 0xe1, 0x82, 0xa5, 0xd3, 0xe8, 0xb1, 0x67, 0x01, 0xd8, 0x2f, 0x3f, 0x4d, 0xab, 0x68, 0xfe, 0x4c, 0x75, 0x89, 0x48, 0xfd, 0x22, 0xe7, 0xc0, 0xab, 0xfe, 0x84, 0x4b, 0xb7, 0x75, 0xb0, 0xaf, 0xc2, 0x8f, 0x7d, 0x66, 0xfa, 0x95, 0x53, 0x8e, 0x89, 0x3c, 0xb7, 0xbc, 0x6e, 0x86, 0xf0, 0xea, 0x59, 0x8b, 0x32, 0xa9, 0x88, 0xf6, 0xa9, 0xa9, 0x84, 0xfc, 0x60, 0x47, 0x4c, 0x1d, 0x54, 0x78, 0xb8, 0x9e, 0x2d, 0xa0, 0x91, 0x04, 0xa3, 0x23, 0x2d, 0x8f, 0x7b, 0x23, 0xc8, 0x72, 0x7d, 0x06, 0x58, 0xf0, 0x43, 0x76, 0xf8, 0x72, 0xc5, 0x30, 0x56, 0xe1, 0x1d, 0x92, 0x03, 0xb2, 0x8d, 0x05, 0x94, 0x7a, 0xc1, 0xc9, 0x02, 0x65, 0xf7, 0x5a, 0xc2, 0xaa, 0xe8, 0xec, 0x89, 0x19, 0x2a, 0x85, 0x00, 0xf2, 0x56, 0x7f, 0x6a, 0xc3, 0x91, 0x57, 0x38, 0x35, 0x5e, 0xd0, 0x94, 0x2b, 0x46, 0xed, 0x65, 0x4e, 0x28, 0xe0, 0x68, 0xb4, 0x60, 0x26, 0xbb, 0xd0, 0xea, 0x10, 0xf5, 0xcd, 0x89, 0x52, 0x32, 0x28, 0xd2, 0x42, 0x4a, 0x30, 0x74, 0xe3, 0xe1, 0x25, 0xd7, 0x84, 0x50, 0x12, 0xb0, 0x99, 0xbb, 0xe5, 0x2f, 0x01, 0x48, 0x7c, 0xab, 0xbd, 0xba, 0xf9, 0x59, 0x7a, 0xf5, 0x58, 0xc4, 0xb6, 0x30, 0xf9, 0x3b, 0xa4, 0x0b, 0x6b, 0xd4, 0x56, 0x5d, 0x1b, 0xc6, 0xda, 0xf3, 0xca, 0x10, 0x1c, 0x18, 0x72, 0x2b, 0xe3, 0x94, 0x7a, 0x99, 0x6d, 0xf8, 0x2c, 0x00, 0x2c, 0x22, 0x3d, 0x08, 0xeb, 0x14, 0x92, 0xe4, 0x6b, 0xb4, 0x87, 0xab, 0x0f, 0x63, 0x5a, 0x57, 0x80, 0x43, 0x70, 0xe8, 0xad, 0xd4, 0xdb, 0xe9, 0xbc, 0x81, 0x80, 0xec, 0xa6, 0x8a, 0x08, 0x69, 0xdc, 0x86, 0xfd, 0x3b, 0x7f, 0xc4, 0xaa, 0x2f, 0xc5, 0x16, 0x92, 0x2c, 0x66, 0xa1, 0xaf, 0x2e, 0x4b, 0xc3, 0xf7, 0x0d, 0x34, 0xbe, 0x17, 0xe2, 0xb5, 0xf0, 0x3e, 0x3b, 0x6b, 0xaf, 0x50, 0xa0, 0x20, 0x58, 0xa5, 0x59, 0x05, 0x4a, 0x95, 0xed, 0x66, 0x8a, 0x5a, 0x65, 0x93, 0xf5, 0xa9, 0x55, 0x5b, 0x67, 0xd0, 0x0b, 0x09, 0xb2, 0xf9, 0x13, 0x73, 0x97, 0x26, 0x47, 0xe8, 0x31, 0x03, 0x91, 0xd1, 0x25, 0x29, 0x08, 0xcd, 0x1a, 0x54, 0x19, 0x7d, 0xc3, 0x7f, 0xba, 0x7c, 0xc3, 0x6e, 0x8e, 0xba, 0xf4, 0x51, 0x7a, 0x57, 0xa5, 0x33, 0x3b, 0x3a, 0x1d, 0x1f, 0x28, 0xe3, 0xe6, 0xc8, 0x83, 0xde, 0x00, 0xb5, 0x80, 0xeb, 0xf8, 0x16, 0x0d, 0x68, 0xc0, 0x9e, 0xd6, 0x48, 0x3f, 0x7d, 0x67, 0xd9, 0xee, 0xbd, 0xfa, 0xa7, 0xba, 0x8b, 0x5f, 0x66, 0x7b, 0x9b, 0x6f, 0x20, 0x4a, 0x26, 0xed, 0x58, 0x48, 0x20, 0x49, 0x2f, 0xcd, 0x9e, 0x19, 0x17, 0x5c, 0x30, 0x62, 0x6b, 0x69, 0x6c, 0xc6, 0xce, 0x9c, 0x22, 0x8f, 0x50, 0xa9, 0x29, 0xe6, 0x41, 0x5d, 0xd4, 0x4c, 0x66, 0xf6, 0x73, 0x71, 0x85, 0x10, 0x4a, 0x50, 0x43, 0xf4, 0xac, 0x1c, 0xb6, 0xee, 0x2f, 0x9a, 0xb5, 0xca, 0x28, 0xcf, 0xe8, 0x37, 0x20, 0x30, 0x9a, 0x89, 0xbb, 0xe1, 0xfa, 0x94, 0x22, 0x81, 0xa0, 0x74, 0x5b, 0xbf, 0xc6, 0x7a, 0x5e, 0x15, 0x17, 0xca, 0x41, 0x75, 0xcf, 0x76, 0x78, 0xbb, 0xd3, 0xec, 0x18, 0xa9, 0x8d, 0x0c, 0x09, 0x98, 0x5d, 0x86, 0xec, 0x99, 0xba, 0xb7, 0x46, 0xd8, 0xf5, 0xd0, 0x9e, 0xb6, 0x37, 0xa9, 0x75, 0xb2, 0x47, 0xf2, 0x84, 0x5a, 0x6b, 0xcd, 0x54, 0x6e, 0x1a, 0x18, 0xb2, 0x5c, 0x94, 0xb7, 0x25, 0x84, 0x91, 0x21, 0x05, 0x0f, 0x25, 0xb5, 0x20, 0x83, 0xe3, 0x1c, 0xde, 0x61, 0x09, 0xd5, 0x34, 0x43, 0xef, 0x0d, 0x80, 0x4a, 0xf1, 0x65, 0x8a, 0x43, 0xf0, 0x52, 0xcb, 0x95, 0x17, 0x95, 0x84, 0x1d, 0xca, 0x77, 0xe2, 0x2f, 0x4b, 0x20, 0x31, 0x64, 0xe5, 0x30, 0xab, 0xad, 0x1f, 0x02, 0x39, 0xbe, 0x7d, 0x77, 0x86, 0xda, 0x54, 0x75, 0x78, 0x6c, 0x3e, 0xcc, 0x81, 0x09, 0xc3, 0x70, 0x98, 0x3f, 0xf3, 0xec, 0xc9, 0x1b, 0x50, 0x6c, 0x16, 0x63, 0xc7, 0xa0, 0xd5, 0x91, 0xde, 0x35, 0x20, 0xab, 0xb8, 0x95, 0x2b, 0x1a, 0x94, 0x69, 0x17, 0x02, 0x88, 0x28, 0xe6, 0x2c, 0xcf, 0x43, 0xcc, 0x07, 0x71, 0xa9, 0x7e, 0xd2, 0xcd, 0xe3, 0xa0, 0xcf, 0x31, 0xb2, 0x41, 0x82, 0xe9, 0xbb, 0xe5, 0x92, 0xa8, 0xc6, 0x2e, 0xc7, 0xf0, 0xf8, 0x41, 0x96, 0x7a, 0x06, 0x59, 0x02, 0xbd, 0x55, 0xb7, 0x5a, 0x81, 0x8b, 0x68, 0x45, 0x30, 0x3b, 0x07, 0x13, 0x78, 0xd5, 0xcf, 0xf1, 0x3d, 0x61, 0xe5, 0x23, 0x57, 0x53, 0xb0, 0x85, 0x6e, 0xd9, 0x4d, 0x89, 0x2c, 0x68, 0x6d, 0x69, 0x05, 0x4e, 0xc6, 0x2a, 0x6d, 0x8c, 0x00, 0xad, 0xa6, 0x65, 0x79, 0x6d, 0x4b, 0xf1, 0x49, 0x42, 0x31, 0x41, 0x59, 0x0d, 0x71, 0x0e, 0x3f, 0x83, 0xdd, 0x2a, 0x44, 0x16, 0x2d, 0xb7, 0x25, 0xb6, 0xf2, 0x9f, 0x17, 0x02, 0xc1, 0x71, 0xa9, 0x5d, 0x6c, 0x6e, 0x87, 0xe7, 0xf2, 0x68, 0xdd, 0x69, 0x57, 0x5d, 0x35, 0x40, 0x19, 0x7e, 0x0f, 0x8a, 0x0f, 0x48, 0x71, 0x18, 0x1e, 0x8c, 0x92, 0xa6, 0x6a, 0xd1, 0x8a, 0x41, 0x89, 0xd9, 0x4d, 0xf8, 0x9a, 0xbc, 0x4a, 0x09, 0xe9, 0x95, 0x71, 0x09, 0x31, 0xb0, 0x51, 0xf8, 0x8c, 0x64, 0xa4, 0x40, 0xd0, 0x75, 0x27, 0x82, 0xa9, 0xc2, 0xd5, 0x29, 0x5f, 0xef, 0xc5, 0x4a, 0x96, 0xef, 0x81, 0x9a, 0x0c, 0x80, 0x98, 0xba, 0x97, 0xdc, 0x03, 0xbd, 0xc0, 0x26, 0x92, 0x0f, 0x1a, 0xbc, 0xde, 0x66, 0x97, 0xca, 0x08, 0xe4, 0x19, 0x53, 0x93, 0x5d, 0xc5, 0x1b, 0x4e, 0x17, 0x52, 0x63, 0x7e, 0x39, 0x77, 0xc8, 0x69, 0xdc, 0xe8, 0x9e, 0x86, 0xb7, 0x19, 0x6d, 0x5c, 0x05, 0x5c, 0x57, 0x28, 0x88, 0xa7,
@@ -54,7 +54,7 @@ uint8_t A_bpoly_MAXSEC[14*NEWHOPE_POLYBYTES] = {
 0x5c, 0x66, 0x0e, 0x58, 0x76, 0x39, 0xa4, 0x48, 0x9d, 0xea, 0xc1, 0x6c, 0xc9, 0x86, 0x98, 0x2e, 0x15, 0x55, 0x4e, 0xfd, 0x69, 0xf1, 0xdf, 0xce, 0x46, 0xb3, 0x84, 0x92, 0xe3, 0x8c, 0xfc, 0x09, 0xf4, 0xa0, 0xa4, 0xe1, 0x4f, 0x21, 0xc5, 0xc2, 0x06, 0x62, 0x0d, 0x87, 0x42, 0xc0, 0x2a, 0x61, 0x02, 0x70, 0x10, 0x07, 0xd2, 0x2d, 0x84, 0x5b, 0xba, 0xdc, 0xd4, 0x45, 0x8d, 0x8a, 0x59, 0xf5, 0x5d, 0xc3, 0x9b, 0x28, 0x6c, 0x12, 0xd2, 0xa4, 0x6b, 0x93, 0xfd, 0xdd, 0x06, 0x1b, 0x1a, 0xcb, 0x20, 0xd3, 0xe1, 0x71, 0x60, 0xa0, 0x61, 0x59, 0xe8, 0xf5, 0x64, 0x0c, 0x2b, 0x6e, 0xaa, 0x6e, 0xbd, 0x41, 0xaf, 0x9c, 0x11, 0x73, 0xbb, 0x65, 0x58, 0xff, 0x2e, 0xbb, 0x3b, 0xab, 0x20, 0x75, 0x42, 0x5e, 0x11, 0x54, 0xa3, 0x80, 0x91, 0xa6, 0x99, 0x11, 0x1b, 0x13, 0xa2, 0xac, 0x9a, 0x64, 0xe5, 0x34, 0xb3, 0xa5, 0x47, 0xdf, 0xa8, 0x9f, 0x1a, 0x8d, 0x16, 0x10, 0x32, 0x67, 0x8c, 0x06, 0xaf, 0x99, 0x52, 0x3c, 0x92, 0x3a, 0x23, 0x23, 0x41, 0x30, 0xf7, 0x66, 0x4a, 0x13, 0x76, 0xa4, 0x81, 0x6c, 0x59, 0x6c, 0x57, 0x5c, 0xc1, 0x1b, 0x1f, 0x50, 0x6f, 0x44, 0xd0, 0x2c, 0xbf, 0x3c, 0x03, 0xda, 0x82, 0xde, 0x16, 0xa2, 0x98, 0x8c, 0xef, 0x00, 0xc0, 0x1d, 0x15, 0x4d, 0x0c, 0x6c, 0xd7, 0x0a, 0xc9, 0x8e, 0x07, 0x12, 0xe9, 0xa6, 0x41, 0x5d, 0x98, 0x0b, 0xe9, 0x07, 0x77, 0xfd, 0xd9, 0xad, 0x45, 0x99, 0x87, 0x86, 0x87, 0x38, 0x68, 0x91, 0x19, 0x80, 0x29, 0x13, 0x8e, 0xb9, 0x0b, 0xd5, 0xda, 0xf4, 0x50, 0x45, 0x89, 0xc6, 0x45, 0xcc, 0x65, 0x4d, 0x24, 0x12, 0x0b, 0xcd, 0x83, 0x04, 0x02, 0x36, 0x4f, 0x36, 0x1a, 0x9b, 0x2b, 0xb9, 0xe9, 0x6a, 0x67, 0x09, 0x53, 0xb0, 0x91, 0xc9, 0xb3, 0xc5, 0x06, 0xdd, 0x64, 0xcd, 0xcc, 0x41, 0x13, 0x0d, 0x9b, 0x39, 0x73, 0x62, 0x9a, 0x22, 0x6b, 0xbf, 0xe7, 0x47, 0x2e, 0x16, 0x52, 0x86, 0x43, 0x32, 0xa5, 0x8d, 0x33, 0xf8, 0x19, 0x92, 0x1b, 0x41, 0xc9, 0x92, 0xa2, 0xe8, 0xba, 0x85, 0x64, 0xc0, 0x1c, 0x71, 0x93, 0xe8, 0x78, 0xbf, 0x3c, 0x3e, 0xc9, 0x2c, 0x5d, 0x42, 0x1a, 0xbc, 0x9c, 0xe1, 0x14, 0xbf, 0x33, 0xf1, 0x8d, 0xa6, 0xe0, 0x0b, 0xaa, 0x06, 0x4d, 0xf0, 0x1d, 0xe9, 0x54, 0x85, 0xcb, 0xba, 0x9a, 0x33, 0xbf, 0x17, 0x42, 0xe1, 0x1c, 0x1a, 0x08, 0x26, 0x12, 0xcc, 0x4a, 0x51, 0x96, 0x31, 0xb5, 0xc0, 0x7d, 0x2b, 0x5c, 0x9d, 0x7c, 0x01, 0x9c, 0x01, 0x34, 0x65, 0x4d, 0x77, 0xc8, 0x5d, 0xf6, 0x25, 0xfb, 0xcc, 0x4a, 0x84, 0x5d, 0x40, 0x36, 0xde, 0x59, 0x74, 0xc2, 0x02, 0xea, 0xd2, 0x7c, 0x36, 0x9c, 0xae, 0xcc, 0xb7, 0x76, 0x73, 0xea, 0xa4, 0x80, 0x84, 0x20, 0x75, 0x66, 0x7a, 0x1d, 0xa8, 0x06, 0xae, 0xa6, 0x60, 0xfc, 0x83, 0x67, 0x45, 0x93, 0x97, 0x9b, 0xee, 0x17, 0x97, 0xd8, 0x4f, 0x39, 0xc1, 0x60, 0x92, 0x63, 0x6a, 0xcd, 0x30, 0xb9, 0x5c, 0xb0, 0xe0, 0x42, 0xd2, 0x73, 0xd1, 0x76, 0x3a, 0xd7, 0x69, 0xd5, 0x98, 0x4e, 0x29, 0x54, 0xe4, 0x08, 0x1a, 0x84, 0x5e, 0x75, 0xa3, 0xa1, 0x23, 0xad, 0x69, 0x89, 0x41, 0x17, 0x19, 0xd2, 0x6b, 0xf4, 0xae, 0xaa, 0x0c, 0x97, 0x1f, 0x36, 0x7a, 0x7b, 0xa8, 0x6f, 0x93, 0x8e, 0x3d, 0x4a, 0x68, 0x7d, 0xac, 0x01, 0x6b, 0x97, 0x28, 0x3b, 0x10, 0x1c, 0xb3, 0x2b, 0xb7, 0x86, 0x52, 0xf1, 0x28, 0x70, 0x56, 0x93, 0xa9, 0x53, 0x91, 0x90, 0x6e, 0x19, 0xb6, 0xe6, 0x4f, 0x41, 0x28, 0x38, 0x62, 0x67, 0xe9, 0xc2, 0x84, 0x89, 0xc3, 0xd0, 0xe5, 0x66, 0xd5, 0x15, 0x2f, 0x2f, 0xac, 0x6b, 0xd6, 0x3f, 0x41, 0x17, 0x05, 0x22, 0xaf, 0x45, 0x1d, 0x38, 0xa0, 0x3a, 0x55, 0x13, 0x85, 0x51, 0x08, 0x79, 0x13, 0xc0, 0x25, 0x36, 0x8f, 0x5c, 0x3d, 0xf5, 0x86, 0xaa, 0x16, 0xfa, 0x9d, 0xbd, 0xe2, 0x43, 0xa7, 0x32, 0x0c, 0x08, 0x28, 0x49, 0x58, 0x04, 0x72, 0xec, 0x70, 0x0f, 0x36, 0x4b, 0x26, 0x65, 0x88, 0x68, 0x76, 0x38, 0xe0, 0xe8, 0xf4, 0x51, 0xe5, 0x7e, 0x8f, 0xd3, 0x78, 0x45, 0xa2, 0x89, 0xaf, 0xfe, 0x23, 0x75, 0x17, 0x43, 0x6c, 0xbf, 0x8f, 0x03, 0xcb, 0x28, 0x08, 0x12, 0xbe, 0xc6, 0xec, 0x46, 0x85, 0x46, 0x01, 0xa5, 0x82, 0x2e, 0xa9, 0xb1, 0xb7, 0xb5, 0x62, 0xe2, 0x24, 0x7c, 0xea, 0x41, 0xae, 0x10, 0x35, 0xa7, 0xef, 0x01, 0x8e, 0x42, 0xa3, 0xe2, 0x04, 0x68, 0x4a, 0x98, 0xed, 0x97, 0xb4, 0xd0, 0x5d, 0xd6, 0x48, 0x95, 0xa4, 0xfe, 0xea, 0x76, 0x61, 0x72, 0x6c, 0x05, 0xb5, 0x62, 0xfb, 0x21, 0xe7, 0x5c, 0x57, 0x99, 0x8c, 0x67, 0x4a, 0x95, 0x18, 0x92, 0xc8, 0x0e, 0xea, 0x39, 0x2d, 0xe1, 0x35, 0x93, 0xd4, 0xd9, 0x35, 0x6e, 0x69, 0x55, 0xc1, 0x43, 0xe4, 0xab, 0x8f, 0x66, 0x83, 0x94, 0xee, 0x4a, 0xc0, 0x89, 0x15, 0x2e, 0x43, 0x17, 0x51, 0x95, 0xf1, 0x01, 0x50, 0x7e, 0x20, 0x83, 0x13, 0x00, 0x64, 0x9a, 0xe9, 0x47, 0x59, 0x66, 0x18, 0xb2, 0x79, 0x83, 0x4e, 0xde, 0x92, 0xf2, 0xee, 0x87, 0x59, 0x96, 0xd6, 0xd7, 0xc7, 0xba, 0x44, 0x66, 0xda, 0xdd, 0x57, 0xa7, 0xa9, 0x7c, 0xa3, 0x0e, 0x31, 0xbb, 0x88, 0x85, 0x8d, 0xdd, 0x4e, 0x92, 0xc4, 0x95, 0xc9, 0x07, 0x81, 0x26, 0xb6, 0xf7, 0x64, 0xc5, 0x89, 0x61, 0x9e, 0x0f, 0x99, 0x94, 0x38, 0x43, 0x1f, 0x6f, 0x5e, 0x82, 0xd5, 0x59, 0x0a, 0x5e, 0xdc, 0x71, 0x43, 0xd9, 0x58, 0x33, 0xf3, 0x9d, 0xb5, 0xba, 0xfd, 0x92, 0x49, 0x32, 0x29, 0x04, 0xe8, 0xc9, 0x2e, 0x96, 0x66, 0x1c, 0x4a, 0x87, 0x4e, 0x8e, 0x71, 0xb6, 0x15, 0xf7, 0x42, 0xc3, 0x5e, 0x66, 0x9b, 0xc1, 0x0e, 0x3a, 0x1b, 0x8c, 0xa7, 0x42, 0x08, 0xab, 0x1b, 0x28, 0xdc, 0x1d, 0x35, 0xe4, 0xb1, 0x29, 0x8e, 0x38, 0x4d, 0x2c, 0xc6, 0xd8, 0x78, 0xe7, 0x21, 0x11, 0x55, 0x96, 0x32, 0x73, 0x67, 0xfd, 0xba, 0x4f, 0x10, 0xb0, 0x75, 0xd1, 0x51, 0x16, 0x08, 0x45, 0xb6, 0x14, 0xea, 0x2a, 0x97, 0x39, 0xa6, 0xf8, 0x08, 0x72, 0xc6, 0xa9, 0xbf, 0x5d, 0xeb, 0xc0, 0xb5, 0xfc, 0x2a, 0x30, 0x09, 0xb5, 0x03, 0x0e, 0xd9, 0x08, 0xc8, 0xcd, 0x28, 0x06, 0x7c, 0xa9, 0x56, 0x03, 0x40, 0xba, 0x44, 0x47, 0xdd, 0x98, 0x19, 0x88, 0x5a, 0x36, 0xab, 0xd0, 0x48,
 0x55, 0x53, 0xaf, 0x3b, 0xfb, 0x90, 0x8f, 0xb0, 0x50, 0xbe, 0x02, 0x7c, 0x40, 0xb2, 0xee, 0x6b, 0x7b, 0xc9, 0x23, 0x51, 0x9a, 0xc7, 0x9b, 0x66, 0x00, 0xfe, 0x72, 0x10, 0x13, 0x6b, 0x32, 0x80, 0xa6, 0x1a, 0xb3, 0xed, 0x8e, 0x2f, 0x81, 0xa7, 0x5e, 0x87, 0x89, 0x2c, 0xb0, 0x55, 0xd5, 0x54, 0x6b, 0xe2, 0x18, 0xf0, 0x3b, 0xc8, 0x8e, 0x7d, 0x47, 0x00, 0xc5, 0xa2, 0x61, 0x88, 0xac, 0xc8, 0x9e, 0xdd, 0x81, 0x68, 0x3e, 0xa6, 0x87, 0xda, 0xd9, 0x61, 0x5f, 0xa4, 0x62, 0x73, 0x0c, 0x55, 0x5b, 0x92, 0xca, 0x62, 0x4b, 0xc9, 0x50, 0x08, 0xbd, 0xb0, 0x6a, 0x38, 0xc7, 0x5f, 0x38, 0xa3, 0x2c, 0xb1, 0xf4, 0x45, 0xc0, 0xd3, 0xac, 0x35, 0x18, 0x96, 0x99, 0xee, 0x13, 0x97, 0xf9, 0x4a, 0x47, 0x17, 0xa7, 0x59, 0x2f, 0x72, 0x30, 0x7c, 0x8c, 0xab, 0x95, 0x9a, 0x56, 0x6e, 0x2a, 0xc3, 0x00, 0x49, 0x15, 0x21, 0x61, 0x52, 0xa2, 0xf1, 0xc7, 0x85, 0x36, 0xa0, 0x09, 0xc6, 0x40, 0x09, 0xfc, 0x42, 0x06, 0x5b, 0xe3, 0x5a, 0xb2, 0xa2, 0xc6, 0xa5, 0x30, 0xcc, 0xe5, 0x22, 0x38, 0x58, 0x26, 0xea, 0xc2, 0x1b, 0x65, 0xde, 0xd6, 0x6e, 0xdc, 0x24, 0xe4, 0x26, 0x1f, 0x7c, 0x90, 0x91, 0x57, 0x90, 0xc4, 0x53, 0x55, 0x57, 0x4a, 0x94, 0x78, 0xd5, 0xb3, 0xf8, 0xbd, 0xb4, 0x27, 0xff, 0xb7, 0xfb, 0x90, 0x5a, 0x70, 0x5e, 0x61, 0x42, 0x1b, 0xec, 0x9e, 0x5b, 0x41, 0x65, 0x43, 0xed, 0x82, 0x6f, 0x3f, 0x1d, 0xab, 0xfa, 0xbe, 0x92, 0xb3, 0xd8, 0xd2, 0x9e, 0x66, 0xd7, 0xed, 0x8f, 0x96, 0xc8, 0xcc, 0x61, 0x03, 0xc8, 0x72, 0x98, 0x29, 0xcb, 0x25, 0xba, 0x1a, 0x58, 0xc1, 0xe2, 0x73, 0x85, 0xee, 0xed, 0xb3, 0x24, 0xce, 0xec, 0x90, 0x17, 0x32, 0x37, 0x76, 0xa3, 0x1a, 0x4b, 0x19, 0x8a, 0x13, 0x04, 0x67, 0x25, 0xe2, 0x6d, 0x2d, 0xb9, 0x16, 0x8b, 0x5e, 0xd6, 0x64, 0x14, 0xae, 0x8c, 0x2d, 0x44, 0x30, 0x8e, 0xac, 0xbb, 0x50, 0x42, 0x83, 0x29, 0x36, 0xcd, 0x3f, 0x76, 0xa2, 0x63, 0x79, 0x73, 0x36, 0x49, 0x36, 0xda, 0x7b, 0xa2, 0x1e, 0x36, 0x89, 0x7d, 0x59, 0xe2, 0x12, 0xee, 0x1d, 0x5d, 0x9b, 0xc8, 0xed, 0x90, 0xa7, 0x99, 0x40, 0x25, 0xc9, 0xc5, 0x3a, 0x6e, 0x4d, 0x94, 0x2d, 0xe8, 0xc7, 0x55, 0xce, 0x2e, 0x72, 0xa1, 0xce, 0xba, 0x76, 0xe1, 0x1e, 0x94, 0x07, 0x9a, 0x7f, 0xf9, 0x53, 0x16, 0x0f, 0x7f, 0x91, 0xb0, 0x54, 0x8f, 0x4c, 0x76, 0x0d, 0x4b, 0xf6, 0xba, 0x37, 0x4c, 0x74, 0x80, 0x57, 0x21, 0x2a, 0xd4, 0x4c, 0x4e, 0x20, 0x9b, 0x19, 0xaa, 0x82, 0x66, 0x8b, 0xc6, 0x2f, 0x1a, 0xa0, 0xa7, 0xfc, 0x72, 0x86, 0xa7, 0x11, 0xf5, 0x5e, 0x19, 0x10, 0x2a, 0x4b, 0xb9, 0x19, 0x78, 0x6d, 0x28, 0xe6, 0x47, 0xab, 0x64, 0x9e, 0x79, 0x92, 0x27, 0xac, 0x05, 0x02, 0xf6, 0x50, 0x97, 0x45, 0x69, 0xf1, 0x93, 0x12, 0xd5, 0x83, 0xdc, 0xc5, 0x5a, 0x8b, 0x5d, 0xd2, 0x48, 0xd3, 0xa1, 0xc2, 0x1b, 0x36, 0x20, 0x9c, 0x34, 0xca, 0x7b, 0x80, 0x30, 0x2c, 0xb4, 0xcc, 0xcf, 0x90, 0x01, 0xc7, 0xae, 0x7e, 0x21, 0x86, 0x30, 0x46, 0x7c, 0x70, 0x48, 0xf5, 0x58, 0x75, 0xc7, 0xdc, 0x05, 0xb1, 0xa0, 0x47, 0x8b, 0x40, 0x42, 0xb1, 0x7b, 0xfa, 0xd6, 0xd3, 0x60, 0xaa, 0x5d, 0x2a, 0x4c, 0x2c, 0xf8, 0x11, 0xe1, 0x06, 0x44, 0x99, 0xe5, 0xdc, 0x10, 0x2d, 0x98, 0x6d, 0x30, 0x48, 0x7c, 0xe6, 0xb4, 0x89, 0x30, 0xc8, 0x52, 0xa5, 0xb7, 0x38, 0xf8, 0xbc, 0x6c, 0x1a, 0x93, 0xd2, 0x5d, 0xc6, 0xa2, 0x63, 0xa3, 0x70, 0x63, 0xfe, 0x99, 0x5d, 0x18, 0x9a, 0x10, 0xf5, 0x1e, 0xe0, 0x57, 0x80, 0x9e, 0x3e, 0x36, 0x5b, 0x1a, 0x6b, 0xea, 0xd7, 0x21, 0x54, 0x42, 0x06, 0xb1, 0x63, 0xe4, 0xf4, 0x75, 0x7e, 0xb6, 0x85, 0x55, 0x0c, 0x81, 0x60, 0x42, 0x15, 0x8f, 0xf4, 0xc0, 0xab, 0x65, 0x76, 0x76, 0x19, 0x40, 0x2b, 0x72, 0xc8, 0x62, 0x2a, 0x88, 0x63, 0xe7, 0xfa, 0x38, 0xad, 0x65, 0x8d, 0x88, 0x1d, 0x84, 0x48, 0x74, 0xc9, 0x0a, 0xc4, 0x5a, 0xee, 0xd3, 0xd3, 0x08, 0x43, 0x69, 0x20, 0x69, 0xf5, 0xe6, 0xe9, 0xbf, 0x91, 0x04, 0xbf, 0xda, 0x9a, 0xc6, 0x84, 0xcb, 0x19, 0xc5, 0xb9, 0x1c, 0xc2, 0x7f, 0x79, 0x4f, 0x0f, 0x08, 0xae, 0x7c, 0x1c, 0x3d, 0xc3, 0x0c, 0x08, 0x07, 0xc0, 0x7f, 0x92, 0xca, 0xb4, 0xc3, 0xa5, 0x36, 0xaa, 0x96, 0x88, 0xdc, 0xc3, 0x68, 0x06, 0x15, 0x59, 0xa5, 0xf5, 0x03, 0xe2, 0xb4, 0x79, 0x6e, 0x8f, 0x5a, 0x00, 0xa4, 0x4a, 0x0e, 0xab, 0x6c, 0x98, 0x84, 0x85, 0x86, 0xa4, 0x83, 0x4f, 0x40, 0x66, 0x47, 0xaa, 0x97, 0x58, 0x5b, 0xb4, 0x72, 0x1e, 0x2c, 0x7a, 0x03, 0xe4, 0xd2, 0x20, 0x81, 0x8a, 0x04, 0x1b, 0x80, 0xe3, 0x11, 0x2b, 0x02, 0x6f, 0x5b, 0xad, 0x7e, 0xb3, 0x45, 0xbd, 0xb7, 0x40, 0x20, 0xf5, 0x47, 0xeb, 0xa0, 0xbd, 0xdd, 0x64, 0x02, 0xd1, 0x1a, 0xbe, 0x8e, 0x0c, 0x24, 0x78, 0xa9, 0x04, 0x18, 0x9a, 0xd9, 0x6d, 0xf1, 0xa2, 0x06, 0x5e, 0x59, 0x59, 0xc8, 0xea, 0xf0, 0x44, 0xf2, 0xbb, 0xf1, 0xc8, 0x31, 0x33, 0xdc, 0xc8, 0x19, 0x9a, 0xc2, 0x2c, 0x77, 0xce, 0xca, 0x9c, 0xe3, 0xa8, 0xd5, 0xd0, 0x5a, 0xb9, 0x11, 0x52, 0x6d, 0x1b, 0x95, 0x70, 0x5c, 0x97, 0xbb, 0x9b, 0x8f, 0xd8, 0xb2, 0x21, 0x37, 0x29, 0x6c, 0x2a, 0x28, 0xe9, 0xf0, 0x4b, 0x33, 0xcc, 0x95, 0xc6, 0x84, 0x61, 0x01, 0xe1, 0x06, 0xac, 0xb6, 0x3a, 0x94, 0xb6, 0xc4, 0x1e, 0xe9, 0x5a, 0xc1, 0x16, 0x7c, 0x6e, 0x59, 0x98, 0xc1, 0xcd, 0x29, 0x81, 0x02, 0x2d, 0x67, 0x00, 0xdb, 0x9d, 0x0a, 0x84, 0x2e, 0xf8, 0xf0, 0x49, 0xf4, 0x11, 0x47, 0x0d, 0x36, 0x18, 0x21, 0x69, 0x25, 0xfb, 0x10, 0x15, 0x25, 0x2b, 0xb8, 0x43, 0x35, 0x68, 0xce, 0x93, 0x20, 0x90, 0x06, 0xc6, 0x57, 0x3d, 0x70, 0x98, 0x42, 0x6c, 0x1b, 0x25, 0xdd, 0x46, 0x57, 0xe5, 0x40, 0xe3, 0x4e, 0xe0, 0x1b, 0xba, 0x26, 0x10, 0xb4, 0x87, 0x6c, 0xb8, 0x44, 0x86, 0x3d, 0x92, 0x0c, 0x88, 0x18, 0xd2, 0x6c, 0xa1, 0x5f, 0xdb, 0x2c, 0x66, 0x88, 0x39, 0x73, 0xd0, 0x23, 0xe8, 0x2a, 0x96, 0xa6, 0x0b, 0x18, 0x6a, 0xb0, 0x97, 0x7f, 0xb8, 0x2a, 0x7c, 0xd9, 0xbd, 0xd0, 0xbd, 0x56, 0x0c, 0x76, 0x12, 0xaa, 0xc7, 0x49, 0x25, 0x14,
 };
-uint8_t H_bpoly_MAXSEC[14*NEWHOPE_POLYBYTES] = {
+uint8_t H_bpoly_MAXSEC[14*NEWHOPE_RINGCT20_POLYBYTES] = {
 0x43, 0x23, 0xa2, 0x78, 0xf2, 0x74, 0x24, 0x23, 0x54, 0xb9, 0xe2, 0x58, 0x50, 0x64, 0x52, 0x61, 0xde, 0x64, 0xe4, 0x61, 0x14, 0x74, 0xc1, 0x77, 0xe5, 0x53, 0xc9, 0x07, 0xa6, 0x25, 0x4b, 0x73, 0x18, 0xb0, 0x10, 0x07, 0x0b, 0x01, 0xb9, 0xe7, 0x11, 0x7c, 0xf6, 0x91, 0x96, 0x72, 0x8c, 0xe9, 0x8f, 0x46, 0x9e, 0xdd, 0x19, 0x07, 0x6a, 0xa1, 0xd5, 0xd7, 0x87, 0xc6, 0x9d, 0x38, 0xb6, 0xd0, 0x86, 0xbd, 0xf8, 0x71, 0xdd, 0x9b, 0x81, 0x91, 0x67, 0x51, 0xee, 0x9e, 0x03, 0x45, 0x27, 0xd6, 0x73, 0x12, 0x60, 0x2d, 0xc1, 0xa4, 0xc2, 0xa1, 0x7f, 0xa0, 0x82, 0x22, 0x9b, 0x88, 0x13, 0xf8, 0xa0, 0x2f, 0x76, 0x46, 0x3e, 0xda, 0xb8, 0xe8, 0x9c, 0x1c, 0xc5, 0x2d, 0x23, 0x80, 0xbd, 0x8b, 0x53, 0x56, 0x83, 0x36, 0xc9, 0xd2, 0x8b, 0x97, 0xe5, 0x94, 0x09, 0x3c, 0xae, 0x61, 0xca, 0xd5, 0x37, 0xfa, 0x13, 0xd6, 0x11, 0xfb, 0x50, 0x6f, 0x06, 0x5d, 0x44, 0xa7, 0xbe, 0x2d, 0xf4, 0xa1, 0xda, 0x88, 0x00, 0xdb, 0x88, 0xa5, 0x4b, 0x25, 0x85, 0x3e, 0x96, 0x97, 0x20, 0x2b, 0x8c, 0x48, 0xb6, 0x09, 0x26, 0x0b, 0x76, 0xb3, 0x00, 0x42, 0xcf, 0x92, 0x9e, 0xa7, 0x05, 0x48, 0xa5, 0xea, 0x59, 0x4c, 0xfa, 0x01, 0xe9, 0x76, 0x5e, 0xe6, 0x56, 0x36, 0x24, 0x30, 0x12, 0x07, 0xc5, 0xea, 0xe7, 0xd8, 0x08, 0x64, 0x28, 0x1a, 0xa6, 0xca, 0x4f, 0xf0, 0x69, 0xf3, 0xce, 0x51, 0xc6, 0xab, 0x56, 0x51, 0x3c, 0x2e, 0x5d, 0xe0, 0x24, 0x8a, 0xa7, 0x8a, 0x82, 0xaf, 0x88, 0xc9, 0xa9, 0x54, 0xdb, 0xdb, 0x0b, 0xc3, 0x6b, 0x0a, 0x5a, 0x7a, 0x1c, 0x47, 0x43, 0x3a, 0x12, 0x01, 0x12, 0xa0, 0x19, 0xfa, 0xf2, 0x7d, 0xb9, 0x52, 0x02, 0x70, 0x66, 0x50, 0xed, 0x82, 0x63, 0xd6, 0x0b, 0x60, 0x93, 0xf9, 0x21, 0x48, 0x1b, 0x25, 0x6b, 0xe1, 0xc8, 0xba, 0x09, 0x85, 0xdb, 0x1b, 0xe7, 0x81, 0xb6, 0x31, 0xa0, 0x02, 0xf5, 0x35, 0x64, 0x5c, 0xa6, 0x00, 0x7d, 0x23, 0x58, 0x3a, 0x16, 0x94, 0x07, 0x56, 0x84, 0x07, 0x28, 0x86, 0x85, 0x88, 0xc4, 0xf4, 0x64, 0x15, 0x86, 0x8e, 0xe6, 0x1a, 0x17, 0x26, 0xee, 0x59, 0x5e, 0x06, 0x69, 0xab, 0x1e, 0x0e, 0x39, 0x51, 0x02, 0x1b, 0xd4, 0x69, 0x0c, 0x44, 0x1b, 0xdc, 0x62, 0x36, 0x69, 0x2e, 0xa2, 0xd4, 0xc5, 0x1b, 0x2b, 0x78, 0x9d, 0x2e, 0x5b, 0x59, 0xcd, 0xc9, 0x4b, 0x68, 0xb6, 0x98, 0x91, 0xf7, 0xcb, 0xdf, 0x04, 0x18, 0x91, 0xc4, 0x74, 0x21, 0x82, 0x69, 0x83, 0x2d, 0x6c, 0x46, 0x07, 0x5d, 0x10, 0xa3, 0x3c, 0x12, 0x64, 0xb3, 0x9d, 0xc0, 0x1e, 0x55, 0xab, 0x67, 0x68, 0xe2, 0xa2, 0x8e, 0x05, 0x8e, 0x5b, 0xea, 0xb1, 0xec, 0x29, 0xd7, 0x1a, 0xd8, 0xe4, 0xc7, 0xb4, 0x8d, 0x3b, 0x88, 0xbf, 0x73, 0xd0, 0x48, 0x80, 0x35, 0xd1, 0xb0, 0x83, 0x53, 0xba, 0xa0, 0x1e, 0x59, 0xe0, 0xc2, 0x64, 0xf1, 0xb4, 0x6f, 0xa9, 0x22, 0xb3, 0xcd, 0x19, 0x43, 0xa0, 0xde, 0xd6, 0x98, 0x72, 0x91, 0x35, 0xf2, 0x1f, 0x92, 0xc5, 0x18, 0x6a, 0x4d, 0xd8, 0x80, 0x91, 0xe7, 0x7a, 0x49, 0xac, 0x80, 0xab, 0xdd, 0xc2, 0x32, 0x29, 0x4e, 0xca, 0xdd, 0x82, 0x91, 0xbf, 0xe1, 0x94, 0x59, 0xae, 0x79, 0x27, 0x4d, 0x3c, 0xa7, 0xfd, 0x97, 0x88, 0x47, 0x8d, 0x86, 0x77, 0x1d, 0x13, 0xaf, 0x69, 0x85, 0xce, 0x1b, 0xdd, 0x0f, 0x72, 0x0b, 0xf0, 0x4e, 0x9b, 0xd8, 0x4c, 0x64, 0x43, 0xd6, 0x00, 0xb1, 0xab, 0x10, 0x75, 0xcb, 0x1c, 0x39, 0xb0, 0x8d, 0xd5, 0xca, 0x37, 0x18, 0xee, 0x07, 0xd2, 0x97, 0x21, 0x64, 0x9c, 0x3d, 0x8e, 0x16, 0xa4, 0x64, 0xb0, 0xc0, 0x90, 0x50, 0x48, 0x2f, 0xdf, 0x60, 0x6a, 0x8e, 0x4e, 0x6b, 0x51, 0xbc, 0x05, 0xc0, 0x76, 0x0a, 0xcd, 0x5a, 0xb7, 0xc3, 0xf1, 0x1d, 0x26, 0x68, 0xa9, 0x35, 0x22, 0x74, 0xfa, 0x5b, 0x93, 0x09, 0x22, 0x95, 0x22, 0xfe, 0x6c, 0x52, 0xd7, 0x05, 0x33, 0xf1, 0x0e, 0x8f, 0xbe, 0x84, 0xa9, 0xf3, 0x11, 0xf0, 0xbc, 0x17, 0xed, 0x95, 0x4a, 0xb9, 0xb4, 0x63, 0x21, 0xc9, 0xe7, 0x54, 0x00, 0xf2, 0x01, 0x53, 0xc3, 0x60, 0x4b, 0xda, 0x05, 0xbe, 0x08, 0x42, 0xff, 0x7a, 0x9d, 0xb8, 0x80, 0x80, 0x0a, 0x8a, 0xf3, 0xd4, 0x70, 0x5e, 0x72, 0xc5, 0x59, 0xa2, 0x02, 0x10, 0x14, 0x47, 0x6f, 0x61, 0x98, 0x2a, 0xe9, 0x29, 0x65, 0xc4, 0x5c, 0x08, 0xa0, 0xcc, 0x6f, 0xac, 0x09, 0x72, 0x94, 0xa6, 0x15, 0x21, 0x45, 0xe2, 0x75, 0x61, 0xa7, 0x46, 0x5f, 0xb3, 0xe8, 0xf6, 0xaa, 0xc9, 0x4d, 0x93, 0x42, 0x6c, 0x6a, 0xe3, 0xe8, 0x64, 0x1a, 0x15, 0xac, 0x93, 0xa0, 0xd8, 0x02, 0xb3, 0xc5, 0x26, 0x3f, 0x24, 0x08, 0xc9, 0xbc, 0xb4, 0x5d, 0xb8, 0x67, 0x33, 0xfe, 0x6d, 0x7f, 0x28, 0xd2, 0x88, 0xdb, 0x84, 0x60, 0x84, 0xd6, 0x91, 0xc0, 0x8e, 0x39, 0x78, 0x4c, 0x4f, 0x63, 0x78, 0x52, 0x44, 0x2e, 0x71, 0x1e, 0xbf, 0xe8, 0x0c, 0xc4, 0x1c, 0xa0, 0x82, 0x82, 0x55, 0x55, 0xa5, 0x02, 0xad, 0x9f, 0xa8, 0xc1, 0x8c, 0xa5, 0xaa, 0x79, 0xec, 0x10, 0x25, 0xf3, 0x2c, 0x4e, 0xb9, 0x6d, 0xc5, 0xa2, 0x73, 0xcc, 0x23, 0x79, 0xac, 0xfa, 0xa0, 0x14, 0xba, 0x6f, 0xbf, 0x46, 0xaa, 0xa2, 0xfd, 0x0d, 0x51, 0xbb, 0x65, 0x13, 0xa7, 0xd8, 0x3d, 0x97, 0x0a, 0xa0, 0x23, 0x40, 0xaa, 0x25, 0x01, 0xb6, 0xc4, 0x2c, 0x03, 0x84, 0x39, 0x02, 0x86, 0x0b, 0x23, 0x54, 0xdf, 0x49, 0x88, 0x68, 0xa2, 0x6e, 0x65, 0x92, 0xc8, 0x64, 0xff, 0x80, 0xfb, 0xf5, 0xfe, 0x41, 0x1a, 0x1d, 0x47, 0xb8, 0x72, 0xb9, 0x18, 0x57, 0xc6, 0x19, 0xab, 0xc2, 0x82, 0x91, 0x12, 0xa7, 0x63, 0xbe, 0x41, 0x62, 0x90, 0x23, 0x5e, 0x2e, 0x82, 0x5a, 0x1c, 0x26, 0x02, 0xfb, 0x86, 0x3b, 0xb0, 0x51, 0x50, 0xa2, 0xeb, 0xe6, 0x17, 0xa7, 0x7a, 0xb4, 0x90, 0x83, 0x82, 0x61, 0x46, 0x1c, 0xc1, 0x17, 0x6d, 0x6c, 0x55, 0xf4, 0x9e, 0x36, 0x21, 0xc9, 0x5f, 0x20, 0x38, 0x09, 0x00, 0xb2, 0x91, 0x4e, 0x17, 0xc8, 0x99, 0x60, 0x10, 0xb8, 0x2f, 0x66, 0x2a, 0xde, 0x99, 0x99, 0x55, 0xd9, 0xc6, 0xb3, 0x4b, 0xe4, 0x69, 0xec, 0x28, 0xaf, 0xd2, 0x6a, 0x0d, 0x3c, 0x3b, 0x42, 0xf5, 0x79, 0x87, 0x50, 0x1a, 0x7f, 0x6a, 0x54, 0x99, 0xa9, 0xee, 0xae, 0x9d, 0x6e, 0xa0, 0x4a, 0xa8, 0xe1, 0x74,
 0x7b, 0x22, 0x1f, 0x93, 0xbf, 0x2e, 0x5c, 0x3b, 0xa8, 0xe1, 0x51, 0xb8, 0x8e, 0x63, 0x7c, 0x13, 0xcd, 0xc1, 0x30, 0xc0, 0x78, 0x5c, 0xac, 0xb4, 0xa3, 0xfb, 0x24, 0x43, 0xe6, 0x90, 0x2c, 0x88, 0x5f, 0x30, 0x60, 0xa4, 0x62, 0xa0, 0x11, 0xc3, 0xc6, 0x82, 0xb5, 0xe9, 0x55, 0x28, 0xd8, 0x35, 0xb7, 0x67, 0x2d, 0x7c, 0x6a, 0x24, 0xca, 0x04, 0xea, 0x4c, 0xec, 0x80, 0xd7, 0xec, 0x81, 0x9d, 0x6f, 0x1e, 0x02, 0xe7, 0xf8, 0x6b, 0xe5, 0x10, 0x61, 0xd5, 0x99, 0x68, 0x86, 0x52, 0x54, 0x6e, 0x77, 0x7a, 0xad, 0x25, 0x87, 0xe2, 0xb4, 0xa9, 0xbe, 0x61, 0x10, 0x02, 0xdc, 0xe1, 0x41, 0x42, 0x79, 0x57, 0x2c, 0xd3, 0x60, 0x46, 0x99, 0x09, 0xbd, 0x9e, 0x49, 0x09, 0x61, 0x46, 0x39, 0x0d, 0x89, 0xa9, 0x97, 0x47, 0x6e, 0x2d, 0x91, 0x09, 0xca, 0xbe, 0x2a, 0xdb, 0xfd, 0x02, 0xcb, 0xc5, 0x2b, 0xa3, 0x17, 0x0c, 0x0c, 0x90, 0x42, 0x9f, 0x40, 0xcf, 0x06, 0x7f, 0x36, 0xa4, 0x33, 0xab, 0xde, 0x41, 0x37, 0xe4, 0xc2, 0x70, 0x0a, 0xeb, 0xf9, 0x47, 0x74, 0xe1, 0x94, 0xca, 0x94, 0x05, 0xac, 0x79, 0x91, 0xd6, 0x7b, 0x33, 0xa8, 0xa8, 0xeb, 0x9f, 0x53, 0x61, 0xa1, 0xf6, 0x4d, 0x00, 0xa2, 0xed, 0x8b, 0x56, 0x86, 0x4d, 0xd1, 0x9b, 0xb9, 0xf8, 0xfe, 0xf6, 0x8b, 0x3f, 0x66, 0x24, 0x7b, 0x78, 0x96, 0x30, 0x0c, 0xd7, 0x5a, 0xe6, 0xb8, 0x39, 0x24, 0x1a, 0x8a, 0x33, 0x13, 0xa6, 0xa2, 0x44, 0x4f, 0xa6, 0x9c, 0xda, 0x77, 0x8d, 0x63, 0xe2, 0x01, 0x09, 0xb0, 0xbb, 0x49, 0xa5, 0x42, 0x8f, 0xa9, 0xa8, 0xae, 0x09, 0x20, 0x18, 0x02, 0xf2, 0xf1, 0x1b, 0xd6, 0xa8, 0x70, 0x9c, 0xe6, 0x02, 0xb1, 0x6a, 0x62, 0x9f, 0xd6, 0x7d, 0x93, 0xea, 0x0a, 0x39, 0x35, 0x51, 0xd6, 0x26, 0xe7, 0xe5, 0x30, 0x51, 0xa7, 0x18, 0xc6, 0x6b, 0xb9, 0x28, 0x01, 0x29, 0x63, 0x71, 0x63, 0xec, 0x7c, 0x37, 0x92, 0xf1, 0x69, 0x8d, 0xd6, 0x95, 0xcd, 0xaf, 0x05, 0xe4, 0x2a, 0x65, 0x0a, 0x99, 0x59, 0x22, 0x64, 0xc2, 0x5d, 0x80, 0xfa, 0xe6, 0xa4, 0xd6, 0x52, 0x35, 0x2e, 0x48, 0x23, 0x63, 0xa0, 0x5b, 0x3c, 0x98, 0x04, 0x16, 0xf3, 0xd6, 0xf1, 0x38, 0x3a, 0xb3, 0x68, 0x72, 0x25, 0x19, 0x92, 0x3d, 0x52, 0x44, 0x95, 0x61, 0x61, 0xbc, 0x67, 0x79, 0x4f, 0xb2, 0x54, 0xb6, 0xf5, 0xab, 0x05, 0x01, 0x07, 0x91, 0x10, 0x71, 0x85, 0x61, 0x81, 0xc6, 0x84, 0x37, 0xea, 0x8d, 0x06, 0xed, 0x60, 0x96, 0xd7, 0x95, 0xac, 0x30, 0x1a, 0xf3, 0x07, 0xc4, 0xdc, 0xad, 0x3a, 0xef, 0x7e, 0x3a, 0x17, 0xaa, 0x71, 0x6c, 0x47, 0x6b, 0x89, 0xcd, 0x62, 0x92, 0x08, 0xa0, 0xc9, 0x9a, 0x8e, 0xc4, 0x2b, 0xba, 0xa0, 0x65, 0x67, 0xde, 0xd1, 0xaa, 0x7e, 0xd7, 0xf8, 0x22, 0xf0, 0xa5, 0xbd, 0xb9, 0x68, 0xec, 0x44, 0x0b, 0x38, 0x0a, 0xba, 0xe3, 0xfc, 0xfa, 0x63, 0xb6, 0x2a, 0x85, 0x49, 0x7b, 0xc6, 0x29, 0x66, 0x5f, 0xa4, 0x49, 0xf1, 0x56, 0x24, 0xb1, 0x8e, 0xd8, 0x0c, 0x3c, 0xc5, 0x52, 0xa6, 0x03, 0x35, 0x12, 0xd9, 0x90, 0x6e, 0x25, 0x16, 0xe7, 0x0b, 0x21, 0xb7, 0x7b, 0x79, 0x50, 0x51, 0x8b, 0xbf, 0x44, 0xac, 0x3e, 0xb6, 0x9b, 0x1b, 0x7e, 0x52, 0x38, 0xda, 0x9d, 0xdc, 0x07, 0x5c, 0x3a, 0xd7, 0x36, 0x0b, 0x88, 0x0b, 0xbd, 0x51, 0x9e, 0x5e, 0x46, 0x27, 0x5c, 0xea, 0x17, 0x3a, 0x20, 0x87, 0xa7, 0xaf, 0x4d, 0x09, 0xbc, 0xa9, 0x6a, 0x82, 0x18, 0xb7, 0xa8, 0xe2, 0x96, 0x18, 0x4c, 0x47, 0x88, 0x20, 0x82, 0xf0, 0x4b, 0x01, 0xdd, 0x2a, 0x14, 0xe7, 0xf4, 0x5b, 0x57, 0x28, 0x9d, 0xa7, 0x8a, 0xb9, 0x4b, 0x02, 0xec, 0x4b, 0x30, 0x7e, 0xa1, 0x0a, 0x29, 0x6e, 0x72, 0xbb, 0xb3, 0x36, 0x4e, 0xb3, 0xe3, 0x82, 0x95, 0xd5, 0x02, 0x59, 0xe4, 0x04, 0x35, 0x5a, 0x5e, 0xf1, 0x43, 0x03, 0x2a, 0xad, 0xa7, 0x74, 0x84, 0x20, 0x47, 0x9a, 0xd3, 0x24, 0x4e, 0x8a, 0x91, 0x1a, 0x0b, 0x42, 0x12, 0xf6, 0x49, 0x61, 0x82, 0x81, 0xa8, 0x73, 0xa0, 0x8e, 0x49, 0x09, 0x25, 0xe7, 0x15, 0x9f, 0x85, 0x19, 0x23, 0x82, 0x94, 0x30, 0xf1, 0xc4, 0x0c, 0xbf, 0x95, 0x4a, 0x93, 0xfd, 0x19, 0xb5, 0x1c, 0xcf, 0x1f, 0x3b, 0x2d, 0xfa, 0x00, 0x49, 0x16, 0xf0, 0xf6, 0xfd, 0xa6, 0x17, 0x70, 0xec, 0x3b, 0x3b, 0x10, 0xb1, 0x50, 0x6b, 0x97, 0xb7, 0x37, 0xc8, 0xe4, 0xa8, 0x52, 0x06, 0x0c, 0x53, 0x1f, 0x3e, 0x1d, 0x8c, 0x65, 0x9a, 0xea, 0xa2, 0x52, 0x73, 0x2f, 0xc3, 0x1f, 0x98, 0xda, 0x38, 0xaf, 0x5e, 0x2b, 0x63, 0x25, 0x04, 0x82, 0x75, 0x52, 0xad, 0x49, 0xa4, 0x8e, 0x4a, 0xa1, 0xe4, 0x06, 0x09, 0x0b, 0x19, 0xf9, 0x57, 0xcd, 0x65, 0xef, 0xa8, 0x2d, 0xea, 0x6f, 0x62, 0x01, 0x2e, 0x72, 0x3d, 0x5c, 0x15, 0x18, 0x9a, 0x63, 0xe5, 0x81, 0x06, 0x74, 0x5d, 0x91, 0xb3, 0x18, 0xb5, 0xe8, 0x3b, 0x35, 0xa5, 0xe7, 0xa5, 0x87, 0x76, 0x66, 0xb8, 0x69, 0x33, 0xa9, 0xfb, 0x9e, 0xa2, 0xd3, 0x96, 0x40, 0xb5, 0x84, 0x5a, 0x8b, 0xc6, 0x0b, 0xd8, 0x53, 0x8f, 0x11, 0x0c, 0x5a, 0x22, 0xd5, 0xc1, 0xf8, 0x2d, 0x7c, 0x32, 0x1f, 0xdd, 0x40, 0x3f, 0x21, 0x95, 0xad, 0x2a, 0x87, 0x31, 0xce, 0x2c, 0xbd, 0x6d, 0xe2, 0x5d, 0x54, 0x95, 0xc0, 0x04, 0x7c, 0x9a, 0xed, 0xd2, 0x43, 0x75, 0xb6, 0xf0, 0x5a, 0xd5, 0x59, 0x7d, 0xd9, 0x28, 0x1f, 0x45, 0x21, 0x13, 0xd0, 0xfd, 0x24, 0x92, 0x08, 0xcf, 0xc9, 0x1e, 0x39, 0xa4, 0xa9, 0xcf, 0xcc, 0xf9, 0x46, 0x58, 0x5b, 0xed, 0x55, 0x68, 0x31, 0xfa, 0xf0, 0x90, 0x49, 0xd3, 0xc4, 0x73, 0xc4, 0x58, 0x7a, 0x8e, 0xc6, 0x6d, 0x04, 0x76, 0x05, 0x9f, 0x68, 0x6e, 0xb5, 0x74, 0x21, 0xf1, 0x46, 0x0c, 0x83, 0x52, 0x75, 0xc4, 0x69, 0xa8, 0xde, 0x25, 0x08, 0x93, 0x8f, 0x36, 0x82, 0xa3, 0xca, 0x48, 0x4a, 0xf9, 0x25, 0x7e, 0xc8, 0xc3, 0x71, 0x75, 0x86, 0x99, 0x0b, 0xee, 0x2b, 0x17, 0xab, 0x7f, 0xa9, 0x3b, 0xeb, 0x0e, 0xe1, 0x6b, 0xbe, 0x89, 0xa8, 0xa6, 0x25, 0xb8, 0x60, 0x3e, 0xa2, 0x2b, 0x6c, 0x43, 0xf2, 0x3b, 0x63, 0xae, 0x39, 0xdc, 0xa4, 0x04, 0x43, 0x14, 0x48, 0x25, 0xb9, 0x9d, 0xc9, 0xdb, 0x60, 0x69, 0x64, 0x3f, 0x48, 0x6a, 0xa5, 0x77, 0xb1, 0x56, 0xdd, 0x91, 0x38, 0xc0, 0xb8, 0x11, 0x88,
 0xb5, 0xac, 0x4f, 0xbb, 0x18, 0x6d, 0x65, 0x7a, 0xc4, 0x3f, 0x26, 0x89, 0x10, 0x88, 0x63, 0xa6, 0x6c, 0x23, 0x7f, 0x1d, 0x13, 0xac, 0x83, 0x27, 0xe1, 0x46, 0x8e, 0x24, 0x05, 0x05, 0x93, 0x76, 0x1f, 0x71, 0x24, 0x59, 0xa6, 0xa7, 0xf7, 0x93, 0x56, 0x25, 0x77, 0x67, 0xa3, 0xa3, 0xd8, 0x1c, 0x53, 0x47, 0x2d, 0x36, 0xa3, 0x9a, 0x36, 0x1d, 0x34, 0x4f, 0x34, 0x87, 0x92, 0x4d, 0x00, 0x6a, 0x89, 0x34, 0xa2, 0xa9, 0x84, 0xb2, 0x5d, 0x42, 0xbc, 0xe5, 0xd1, 0x8c, 0x79, 0x1a, 0x23, 0x6d, 0x99, 0xff, 0x09, 0x82, 0xd1, 0x66, 0x29, 0x80, 0x6d, 0x12, 0x62, 0xca, 0xd1, 0x52, 0x52, 0xab, 0x7a, 0x9d, 0xde, 0x80, 0x26, 0x17, 0x1c, 0xed, 0xb9, 0xe2, 0xab, 0x12, 0xb0, 0x53, 0x58, 0x90, 0x40, 0xee, 0xb5, 0x80, 0xdb, 0x5c, 0xa1, 0xd3, 0x40, 0xd3, 0xf2, 0x72, 0x55, 0x27, 0x1f, 0x00, 0xce, 0x01, 0xc0, 0x2e, 0x29, 0x5e, 0xd1, 0x83, 0x26, 0x07, 0x31, 0x8e, 0x74, 0xc0, 0x6f, 0x89, 0x2b, 0xee, 0x81, 0xd8, 0x9d, 0xcb, 0x8a, 0x19, 0x86, 0x51, 0xa4, 0x0e, 0xdb, 0xe2, 0xbf, 0x2c, 0x66, 0x4f, 0x9d, 0xac, 0x62, 0x89, 0x2a, 0x5e, 0xbd, 0x5c, 0xfa, 0x2a, 0xd0, 0x18, 0x51, 0x31, 0x02, 0x6a, 0x56, 0x62, 0x3a, 0x37, 0x93, 0x55, 0xa1, 0xd7, 0x48, 0x25, 0x25, 0x46, 0x95, 0x25, 0x00, 0x24, 0x12, 0x4f, 0xed, 0x92, 0x5f, 0x87, 0xfd, 0xa8, 0x6e, 0x67, 0x9c, 0x73, 0x7a, 0xe4, 0x40, 0x83, 0xae, 0x64, 0x72, 0x8b, 0x2a, 0x66, 0x74, 0xa4, 0x9f, 0x9e, 0x34, 0x21, 0xb6, 0x96, 0x26, 0xc5, 0x1d, 0x00, 0x85, 0xe0, 0x7d, 0x2e, 0x26, 0xb3, 0x12, 0x74, 0xc9, 0x59, 0xa5, 0x99, 0x9c, 0x43, 0x85, 0xdd, 0x99, 0xd6, 0x55, 0x1c, 0x47, 0x62, 0xe2, 0x3e, 0x24, 0x90, 0x4d, 0x7a, 0x54, 0x68, 0x45, 0x9b, 0xee, 0xbb, 0x19, 0x4a, 0x8a, 0x37, 0xf3, 0xa6, 0xa8, 0xb4, 0x77, 0x0d, 0x12, 0x30, 0xee, 0x4e, 0xea, 0x6c, 0x95, 0x21, 0x4a, 0xec, 0x47, 0x06, 0x8d, 0x70, 0x86, 0xfa, 0x8c, 0x74, 0x80, 0xb4, 0xd5, 0x36, 0x29, 0xd5, 0x05, 0xd4, 0x53, 0xb2, 0x50, 0xa9, 0xdd, 0xfb, 0x66, 0x69, 0xde, 0x91, 0x13, 0x11, 0x04, 0x42, 0x8e, 0x52, 0xad, 0xe2, 0x13, 0xa4, 0xb3, 0x1d, 0x79, 0x37, 0x31, 0x40, 0xfe, 0x20, 0xd8, 0x29, 0x9c, 0xfd, 0xa2, 0x1b, 0x2b, 0x26, 0x00, 0x7f, 0xa4, 0x63, 0xce, 0xe2, 0xa0, 0xe5, 0x64, 0x70, 0x07, 0x32, 0xfb, 0xd5, 0x0c, 0x21, 0x72, 0x5f, 0x3f, 0xaa, 0x84, 0xf8, 0x93, 0x02, 0x8d, 0x37, 0x15, 0x2b, 0x71, 0x6e, 0xe7, 0x03, 0xb2, 0x16, 0x64, 0x1c, 0x3b, 0x57, 0x29, 0x74, 0x59, 0xe4, 0x26, 0x95, 0x50, 0x52, 0xe2, 0xc1, 0x22, 0x3a, 0x47, 0xa8, 0x19, 0xb0, 0x03, 0x7c, 0xd2, 0xa9, 0xde, 0x9f, 0xb3, 0x37, 0x03, 0x21, 0x7b, 0xad, 0x68, 0x74, 0xc0, 0x64, 0x61, 0x36, 0x96, 0x1b, 0x90, 0xd1, 0xb6, 0xe6, 0x2f, 0x7e, 0x56, 0xbd, 0x22, 0xa7, 0x68, 0x91, 0xff, 0x5b, 0xcb, 0xc6, 0xea, 0x10, 0x54, 0xa3, 0x05, 0x3f, 0x04, 0x1e, 0xe8, 0x27, 0x9e, 0xea, 0x02, 0xa8, 0x16, 0x9a, 0x5f, 0xc3, 0x4d, 0x90, 0xe2, 0x82, 0x05, 0x6b, 0xe9, 0x90, 0x9f, 0x87, 0xa1, 0xb9, 0x75, 0x74, 0x41, 0x25, 0x61, 0x89, 0xc9, 0x09, 0xdc, 0x48, 0xfb, 0x82, 0x4b, 0x22, 0x33, 0x87, 0x5e, 0x64, 0xf3, 0x62, 0x71, 0x32, 0x25, 0xde, 0xda, 0x95, 0x72, 0x4e, 0x03, 0x5a, 0x18, 0x7e, 0x25, 0xa2, 0x86, 0x8a, 0xf8, 0x6a, 0xaf, 0x9a, 0xdf, 0x52, 0x50, 0xa5, 0xe1, 0xdb, 0xaa, 0x63, 0x2a, 0x3e, 0xf5, 0x2e, 0x4e, 0xc1, 0x23, 0xa2, 0x02, 0x4b, 0x90, 0x86, 0xc7, 0x68, 0xaa, 0x74, 0xd6, 0xcc, 0xa8, 0xb8, 0x05, 0x12, 0xb8, 0xab, 0x51, 0xb5, 0x6a, 0x16, 0x2a, 0x99, 0xcb, 0x9f, 0x03, 0xa8, 0x9b, 0xb2, 0x69, 0x13, 0xdf, 0x40, 0xb1, 0xc0, 0x0c, 0xaf, 0x4f, 0x12, 0xb5, 0x35, 0x74, 0x7c, 0x42, 0xc7, 0x04, 0x41, 0x82, 0x0f, 0xb5, 0x27, 0xd9, 0x29, 0xee, 0xc3, 0xa5, 0x76, 0x6c, 0x86, 0x6d, 0x8c, 0x9b, 0x04, 0x5a, 0x8a, 0x38, 0x22, 0x8a, 0x42, 0xfc, 0xc1, 0x14, 0x60, 0x8d, 0xb8, 0x75, 0xd9, 0x36, 0xa1, 0xb2, 0x9e, 0x36, 0xb3, 0x8b, 0xe2, 0x15, 0x35, 0x54, 0xd3, 0xaa, 0x24, 0xb2, 0x46, 0x09, 0x9c, 0x27, 0x02, 0xdb, 0x62, 0x7b, 0x9d, 0xc1, 0x42, 0xe8, 0x53, 0xca, 0x99, 0x57, 0xd6, 0x61, 0xeb, 0x62, 0x4a, 0x89, 0x59, 0xed, 0x3a, 0x38, 0xac, 0xda, 0x8c, 0x2c, 0xcd, 0xff, 0x13, 0xe4, 0x92, 0x69, 0x59, 0x09, 0xc7, 0xb7, 0x92, 0x25, 0x47, 0x14, 0x9c, 0x61, 0xa1, 0xe4, 0xfd, 0x76, 0x78, 0x9f, 0x6c, 0xb0, 0x25, 0xba, 0x7d, 0x96, 0x6f, 0x64, 0xfa, 0x45, 0xfd, 0x48, 0x34, 0x6d, 0xad, 0x5b, 0x06, 0x95, 0x20, 0xec, 0xa2, 0x64, 0x8a, 0x14, 0xe6, 0x9d, 0xa5, 0xda, 0xd8, 0xf3, 0x90, 0x95, 0x4a, 0x1e, 0x8e, 0xf6, 0x26, 0x6a, 0x01, 0x40, 0xe3, 0x6c, 0x6b, 0xab, 0xeb, 0xd8, 0x3e, 0x57, 0xdf, 0x8a, 0x48, 0x10, 0xa8, 0x63, 0x9c, 0xd4, 0xf1, 0x91, 0x35, 0xae, 0x97, 0x13, 0x6b, 0x9e, 0x77, 0x73, 0x3a, 0xa6, 0x13, 0x0f, 0x30, 0x6a, 0x74, 0x88, 0x82, 0x09, 0x0e, 0xcb, 0xc4, 0x44, 0x6e, 0x43, 0x75, 0x61, 0x80, 0x19, 0xc2, 0x9e, 0x4a, 0x20, 0x14, 0x7a, 0x67, 0x80, 0xe8, 0x62, 0x6d, 0xe2, 0x3a, 0xd9, 0x86, 0x10, 0xb3, 0x96, 0x4a, 0x71, 0x5a, 0xc9, 0x6a, 0x3c, 0x07, 0x17, 0xd3, 0x2a, 0x37, 0xb8, 0x3f, 0x88, 0x11, 0x47, 0x89, 0xc5, 0xa5, 0x89, 0xd5, 0x1d, 0xe4, 0xfa, 0x43, 0xe1, 0xb6, 0x3f, 0x5e, 0x28, 0x61, 0x4d, 0xcd, 0x10, 0xd8, 0x0b, 0x05, 0x01, 0x7c, 0xd6, 0x58, 0xbe, 0x60, 0xb9, 0xfa, 0x01, 0xae, 0xab, 0x2a, 0x02, 0xa8, 0x58, 0xa6, 0x08, 0x20, 0x88, 0x29, 0x6a, 0x70, 0x48, 0x68, 0x3c, 0x0e, 0xdd, 0xf4, 0x66, 0xf7, 0xfd, 0x9f, 0x6a, 0x44, 0xe2, 0x30, 0xe5, 0x41, 0x82, 0x01, 0x43, 0x63, 0x28, 0xfa, 0x62, 0x06, 0x8d, 0x56, 0xab, 0x74, 0x4a, 0xac, 0xa0, 0x6e, 0x05, 0x79, 0x93, 0x84, 0x74, 0x31, 0xcb, 0x22, 0x00, 0x83, 0x62, 0x6e, 0x41, 0x28, 0xe1, 0xf4, 0xd6, 0xde, 0xd2, 0x5f, 0x81, 0xe9, 0x5e, 0x47, 0xb5, 0x86, 0x36, 0x8d, 0x4c, 0x3d, 0x40, 0x35, 0x48, 0x62, 0x9c, 0xa4, 0x96, 0x93, 0x1e, 0x75, 0x23, 0x28, 0x21, 0x43, 0x94, 0x1e, 0xde, 0x73,
@@ -71,10 +71,10 @@ uint8_t H_bpoly_MAXSEC[14*NEWHOPE_POLYBYTES] = {
 0x83, 0xce, 0xee, 0x26, 0xfe, 0xc8, 0x55, 0xfb, 0xab, 0x61, 0x7a, 0xb4, 0x3e, 0x98, 0xa5, 0x83, 0xa8, 0x74, 0x74, 0x6a, 0x70, 0x92, 0x40, 0x4b, 0x30, 0x6c, 0x24, 0xb1, 0x72, 0x56, 0xd3, 0x41, 0x87, 0x86, 0xaa, 0xc6, 0x46, 0x39, 0x95, 0x16, 0x50, 0xa9, 0x1b, 0xd6, 0x4c, 0x1b, 0xde, 0xd5, 0x5c, 0x7a, 0x47, 0x8c, 0x75, 0xf9, 0x79, 0xad, 0x0b, 0xe1, 0x23, 0xb2, 0xfa, 0xc5, 0x0b, 0xf3, 0x6c, 0xcd, 0x96, 0xcc, 0x8d, 0x35, 0xca, 0xaa, 0xa9, 0xa6, 0xf0, 0xa5, 0x9f, 0xff, 0x25, 0x0a, 0x18, 0x6f, 0x40, 0xbe, 0xda, 0x14, 0xf8, 0xd2, 0x99, 0xc5, 0xb5, 0x2a, 0xad, 0x14, 0x2b, 0x88, 0x9a, 0x75, 0x49, 0x92, 0x0d, 0xd0, 0x6a, 0x75, 0x5c, 0x49, 0x14, 0xda, 0x40, 0x97, 0xb2, 0x73, 0x94, 0x1e, 0xa2, 0xf4, 0x7e, 0xf2, 0x6d, 0xfe, 0x5b, 0x6f, 0xcb, 0xcc, 0x25, 0x8f, 0x60, 0xad, 0x33, 0xfa, 0xff, 0x86, 0x91, 0xd8, 0x8f, 0x7f, 0x68, 0xce, 0xe8, 0x94, 0x6c, 0x26, 0xcf, 0x21, 0xbb, 0xa8, 0x54, 0x2f, 0x90, 0xe6, 0xbb, 0x6b, 0x20, 0x0a, 0xcd, 0x87, 0x8d, 0x05, 0x03, 0xb8, 0x4e, 0xaf, 0xa5, 0x86, 0xe5, 0x46, 0x12, 0x74, 0xe0, 0xa1, 0x06, 0x97, 0xd8, 0xfd, 0x46, 0xb9, 0xd6, 0x48, 0x99, 0x7e, 0xed, 0x42, 0x01, 0xa3, 0x05, 0xc5, 0xff, 0x64, 0xb3, 0x97, 0xa5, 0x6d, 0xb3, 0x9b, 0xa9, 0x7e, 0xda, 0x4a, 0x09, 0xc3, 0x79, 0xc6, 0x23, 0xe7, 0x55, 0x10, 0x58, 0xaa, 0x26, 0x55, 0x14, 0xe6, 0xc2, 0x86, 0xf7, 0x1e, 0x33, 0xba, 0x13, 0xc8, 0x06, 0xe1, 0xa0, 0xa9, 0xd8, 0x07, 0x0b, 0x14, 0xf7, 0x95, 0x23, 0xdc, 0x5b, 0xc3, 0xe8, 0xc9, 0x4c, 0x7f, 0xf5, 0x00, 0x22, 0x76, 0x91, 0xa4, 0x3b, 0xae, 0x8f, 0x50, 0xa4, 0xc2, 0x91, 0x21, 0x41, 0x9a, 0xff, 0xa1, 0x06, 0xbc, 0x18, 0x03, 0xa0, 0xc6, 0x49, 0x37, 0x91, 0x16, 0x2a, 0xdf, 0xa5, 0x78, 0xfe, 0xe1, 0x3f, 0xf1, 0xcc, 0x5b, 0x1a, 0x55, 0xe0, 0x57, 0x6c, 0x89, 0xe3, 0x19, 0x3b, 0x84, 0x67, 0xb2, 0x2e, 0x13, 0xa5, 0xdd, 0xbe, 0x6c, 0xe9, 0x03, 0xac, 0x38, 0x61, 0x69, 0xb9, 0xd5, 0x83, 0xd7, 0x63, 0xd3, 0x8d, 0x9d, 0x30, 0xcc, 0xd1, 0xd0, 0x52, 0x7d, 0xb7, 0x3c, 0x82, 0x41, 0x4a, 0x67, 0x25, 0x25, 0xa0, 0x4c, 0x69, 0x09, 0xa3, 0x1c, 0x0f, 0x2a, 0x2d, 0x86, 0x96, 0xcc, 0xb9, 0x2d, 0x02, 0x5e, 0x30, 0x46, 0x3c, 0x8c, 0x99, 0x26, 0xd0, 0xc6, 0xb2, 0x30, 0x80, 0x81, 0xa2, 0x18, 0xd7, 0xfa, 0xe0, 0xd2, 0x8c, 0x65, 0x17, 0x08, 0xd0, 0x50, 0x54, 0x87, 0x40, 0x5a, 0xa5, 0xf0, 0x6a, 0x84, 0xb6, 0x61, 0x1f, 0x81, 0xc8, 0xdb, 0x0a, 0xa9, 0x30, 0x56, 0x57, 0xd3, 0xf2, 0x20, 0x20, 0xbe, 0xdd, 0x27, 0x52, 0xb7, 0x29, 0x64, 0x55, 0x17, 0xfb, 0x24, 0xe8, 0xd6, 0xbe, 0xc2, 0xc0, 0x9b, 0x1b, 0x20, 0xaa, 0x04, 0x0a, 0x28, 0xe2, 0x00, 0x13, 0x1a, 0x61, 0xfe, 0x8c, 0x4d, 0xd1, 0xd2, 0x46, 0x56, 0xed, 0xc9, 0x30, 0x02, 0xaf, 0xd1, 0x46, 0xaa, 0x8f, 0xcc, 0x85, 0xe2, 0xec, 0x66, 0x59, 0xad, 0x27, 0x2b, 0x72, 0x35, 0x21, 0x0b, 0x95, 0xfb, 0x62, 0xb6, 0x76, 0x1b, 0x33, 0x9f, 0xa5, 0xe6, 0x84, 0x48, 0x43, 0xe7, 0x1f, 0x6b, 0x03, 0x06, 0x31, 0x7d, 0x42, 0xeb, 0x46, 0xd6, 0x9f, 0x40, 0x7c, 0x2f, 0xd1, 0x53, 0x23, 0x84, 0xd5, 0xba, 0x11, 0xde, 0x04, 0xa8, 0x16, 0x2c, 0x67, 0x3f, 0xd7, 0xa2, 0x2b, 0xe3, 0xd1, 0x53, 0xb6, 0xab, 0xdc, 0x4b, 0x2b, 0xec, 0x4d, 0x03, 0xc8, 0x00, 0xd2, 0x20, 0xb2, 0x7f, 0x40, 0xd0, 0xf5, 0x0a, 0x10, 0x74, 0x68, 0xe5, 0x89, 0x7e, 0x21, 0x70, 0x11, 0x3a, 0xc4, 0x95, 0xb6, 0xe4, 0x98, 0x79, 0x75, 0xbf, 0xcc, 0x11, 0xb5, 0x9e, 0x16, 0x3b, 0xbd, 0x19, 0x43, 0xf7, 0xad, 0xc0, 0xa9, 0xc1, 0x9c, 0xdb, 0x47, 0xea, 0x3a, 0x30, 0xf5, 0x08, 0x82, 0x0a, 0xb6, 0x15, 0x47, 0x71, 0x2e, 0x85, 0xf5, 0x47, 0x52, 0x31, 0xce, 0x54, 0xb9, 0x43, 0x40, 0xc1, 0x32, 0xed, 0x20, 0xa6, 0xeb, 0x7f, 0x4c, 0x94, 0x91, 0x29, 0x59, 0xe3, 0x9e, 0x4d, 0x99, 0x92, 0x8c, 0x14, 0x27, 0x9e, 0xc4, 0x0f, 0xab, 0xcb, 0x44, 0x77, 0xc3, 0x5e, 0x4b, 0x2a, 0x13, 0x5d, 0xf0, 0xaf, 0xf0, 0xbc, 0xf4, 0x06, 0xcd, 0x71, 0xc7, 0xc4, 0xba, 0xbe, 0xd4, 0x50, 0x16, 0x3f, 0xcd, 0x63, 0x8c, 0x22, 0xac, 0x90, 0x04, 0xf6, 0x16, 0x60, 0x6c, 0xff, 0x30, 0x6a, 0x95, 0x36, 0x58, 0x29, 0x3b, 0x91, 0xb6, 0xfa, 0xa3, 0xe0, 0x03, 0x4e, 0xc9, 0x4f, 0xc0, 0xb6, 0xe4, 0x5e, 0xb6, 0xb5, 0x47, 0x54, 0x93, 0x9f, 0x4c, 0xc9, 0xca, 0xa0, 0x05, 0x2d, 0xca, 0xd3, 0xef, 0x72, 0x28, 0x68, 0x82, 0xfe, 0x9d, 0x3b, 0x70, 0xd2, 0x38, 0x09, 0x08, 0xc3, 0x00, 0x8a, 0x88, 0xc1, 0x45, 0x28, 0x84, 0x39, 0xd5, 0xa6, 0x91, 0x86, 0x75, 0xa3, 0x37, 0x64, 0xec, 0xe9, 0x1f, 0xdb, 0x15, 0xdb, 0x40, 0x71, 0x15, 0x17, 0xb2, 0xe4, 0x77, 0x60, 0xc6, 0xd0, 0x3c, 0xaf, 0x6c, 0x98, 0x93, 0x1c, 0xba, 0x2a, 0x35, 0x97, 0x45, 0x71, 0x3c, 0xf4, 0x79, 0x3b, 0x0f, 0xbc, 0x58, 0xda, 0x66, 0x2a, 0x67, 0x04, 0x74, 0xe7, 0x40, 0x04, 0x75, 0x65, 0x67, 0x8f, 0x74, 0x5e, 0x75, 0x0e, 0x6b, 0x84, 0x8b, 0xd4, 0x6b, 0xa5, 0x9d, 0x6a, 0xaa, 0x31, 0x66, 0x14, 0x79, 0x0f, 0xd1, 0x93, 0x0a, 0x09, 0x85, 0x5d, 0x31, 0x1c, 0x2e, 0x29, 0xd5, 0xad, 0x00, 0x3f, 0xd0, 0x6b, 0xd5, 0xb8, 0x99, 0xde, 0x13, 0x44, 0x0b, 0x8c, 0xb0, 0xb9, 0xe0, 0x66, 0x08, 0x94, 0xa7, 0x20, 0x36, 0x64, 0x06, 0x20, 0x05, 0xf5, 0xe5, 0x44, 0xb1, 0x0b, 0x37, 0x0d, 0x15, 0x2a, 0x8f, 0x59, 0x3d, 0xd7, 0xd9, 0x6d, 0xb5, 0xed, 0x52, 0x07, 0xa8, 0x98, 0xd5, 0x20, 0xe6, 0xa8, 0x73, 0x59, 0x15, 0xad, 0x3b, 0xb1, 0x14, 0x95, 0xc6, 0xc1, 0x35, 0x82, 0xf7, 0x78, 0xb0, 0xe3, 0x1e, 0x45, 0x25, 0x8e, 0xee, 0x79, 0xc1, 0x85, 0x4a, 0x13, 0x4a, 0xc5, 0x74, 0x3c, 0x55, 0x32, 0x58, 0x42, 0x70, 0xbb, 0x99, 0x80, 0x33, 0x06, 0xc1, 0x71, 0x67, 0x67, 0xd5, 0xf4, 0x38, 0x75, 0x16, 0xac, 0x66, 0xa9, 0x95, 0x93, 0x41, 0x4e, 0x6d, 0xc0, 0x0a, 0x3e, 0x21, 0xa8, 0xfe, 0x59, 0x15, 0x88, 0x02, 0xa1, 0xb2, 0xdd, 0x2b, 0x2b, 0xab, 0xf1, 0x63, 0xe7, 0x1c, 0xae,
 };
 
-#elif (NEWHOPE_N == 1024)
-#error "NEWHOPE_N must be either 512 or 1024.. NEWHOPE_N == 1024 not implemented yet"
+#elif (NEWHOPE_RINGCT20_N == 1024)
+#error "NEWHOPE_RINGCT20_N must be either 512 or 1024.. NEWHOPE_RINGCT20_N == 1024 not implemented yet"
 #elif
-#error "NEWHOPE_N must be either 512 or 1024.."
+#error "NEWHOPE_RINGCT20_N must be either 512 or 1024.."
 #endif
 
 bool ringct20_params_init(ringct20_param_t *ringct20_p, DAP_RINGCT20_SIGN_SECURITY kind)//, const int wLen)
@@ -116,15 +116,15 @@ bool ringct20_params_init(ringct20_param_t *ringct20_p, DAP_RINGCT20_SIGN_SECURI
     ringct20_p->mLen = ringct20_p->M-1;
     ringct20_p->wLen = 3;
     ringct20_p->kind = kind;
-    ringct20_p->POLY_RINGCT20_SIZE_PACKED = NEWHOPE_POLYBYTES;
-    ringct20_p->POLY_RINGCT20_SIZE = NEWHOPE_N*sizeof(uint16_t);
+    ringct20_p->POLY_RINGCT20_SIZE_PACKED = NEWHOPE_RINGCT20_POLYBYTES;
+    ringct20_p->POLY_RINGCT20_SIZE = NEWHOPE_RINGCT20_N*sizeof(uint16_t);
     ringct20_p->A = malloc(ringct20_p->POLY_RINGCT20_SIZE * ringct20_p->mLen);//CRUTCH//dont forget to free
     ringct20_p->H = malloc(ringct20_p->POLY_RINGCT20_SIZE * ringct20_p->mLen);//CRUTCH//dont forget to free
 
     for(int i = 0; i < ringct20_p->mLen; ++i)
     {
-        poly_frombytes(ringct20_p->A + i, A_bpoly + i*NEWHOPE_POLYBYTES);
-        poly_frombytes(ringct20_p->H + i, H_bpoly + i*NEWHOPE_POLYBYTES);
+        poly_frombytes(ringct20_p->A + i, A_bpoly + i*NEWHOPE_RINGCT20_POLYBYTES);
+        poly_frombytes(ringct20_p->H + i, H_bpoly + i*NEWHOPE_RINGCT20_POLYBYTES);
     }
     ringct20_p->RINGCT20_PBK_SIZE = ringct20_p->POLY_RINGCT20_SIZE_PACKED;
     ringct20_p->RINGCT20_PRK_SIZE = ringct20_p->mLen*ringct20_p->POLY_RINGCT20_SIZE_PACKED;
diff --git a/dap-sdk/crypto/src/ringct20/verify.c b/dap-sdk/crypto/src/ringct20/verify.c
deleted file mode 100644
index f87691a1ab8b56957ebd3608037a0dce6abe3b27..0000000000000000000000000000000000000000
--- a/dap-sdk/crypto/src/ringct20/verify.c
+++ /dev/null
@@ -1,52 +0,0 @@
-#include <string.h>
-#include <stdint.h>
-
-/*************************************************
-* Name:        verify_ringct20
-* 
-* Description: Compare two arrays for equality in constant time.
-*
-* Arguments:   const unsigned char *a: pointer to first byte array
-*              const unsigned char *b: pointer to second byte array
-*              size_t len:             length of the byte arrays
-*
-* Returns 0 if the byte arrays are equal, 1 otherwise
-**************************************************/
-int verify_ringct20(const unsigned char *a, const unsigned char *b, size_t len) {
-	uint64_t r;
-	size_t i;
-	r = 0;
-	i = 0; 
-	while (i < len)
-	{
-		if (a[i] != b[i])
-		{
-			r = 1;
-			break;
-		}
-		i++;
-	}
-
-	return r;
-}
-
-/*************************************************
-* Name:        cmov
-* 
-* Description: Copy len bytes from x to r if b is 1;
-*              don't modify x if b is 0. Requires b to be in {0,1};
-*              assumes two's complement representation of negative integers.
-*              Runs in constant time.
-*
-* Arguments:   unsigned char *r:       pointer to output byte array
-*              const unsigned char *x: pointer to input byte array
-*              size_t len:             Amount of bytes to be copied
-*              unsigned char b:        Condition bit; has to be in {0,1}
-**************************************************/
-void cmov(unsigned char *r, const unsigned char *x, size_t len, unsigned char b) {
-	size_t i;
-
-	b = -b;
-	for (i = 0; i < len; i++)
-		r[i] ^= b & (x[i] ^ r[i]);
-}
diff --git a/dap-sdk/crypto/src/ringct20/verify.h b/dap-sdk/crypto/src/ringct20/verify.h
deleted file mode 100644
index 007eaa39e26f0457d2816af0e7b9993c33fbcaf0..0000000000000000000000000000000000000000
--- a/dap-sdk/crypto/src/ringct20/verify.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef VERIFY_H
-#define VERIFY_H
-
-#include <stdio.h>
-
-/* returns 0 for equal strings, 1 for non-equal strings */
-int verify_ringct20(const unsigned char *a, const unsigned char *b, size_t len);
-
-/* b = 1 means mov, b = 0 means don't mov*/
-void cmov(unsigned char *r, const unsigned char *x, size_t len, unsigned char b);
-
-#endif
diff --git a/dap-sdk/crypto/src/seed/modes.h b/dap-sdk/crypto/src/seed/modes.h
new file mode 100644
index 0000000000000000000000000000000000000000..22b609bac7414f596ff34c8a1c968e9a59465557
--- /dev/null
+++ b/dap-sdk/crypto/src/seed/modes.h
@@ -0,0 +1,79 @@
+/*
+ * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#ifndef OPENSSL_MODES_H
+# define OPENSSL_MODES_H
+#include<stddef.h>
+
+# ifdef  __cplusplus
+extern "C" {
+# endif
+typedef void (*block128_f) (const unsigned char in[16],
+                            unsigned char out[16], const void *key);
+
+typedef void (*cbc128_f) (const unsigned char *in, unsigned char *out,
+                          size_t len, const void *key,
+                          unsigned char ivec[16], int enc);
+
+typedef void (*ecb128_f) (const unsigned char *in, unsigned char *out,
+                          size_t len, const void *key,
+                          int enc);
+
+typedef void (*ctr128_f) (const unsigned char *in, unsigned char *out,
+                          size_t blocks, const void *key,
+                          const unsigned char ivec[16]);
+
+typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out,
+                          size_t blocks, const void *key,
+                          const unsigned char ivec[16],
+                          unsigned char cmac[16]);
+
+void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out,
+                           size_t len, const void *key,
+                           unsigned char ivec[16], block128_f block);
+void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out,
+                           size_t len, const void *key,
+                           unsigned char ivec[16], block128_f block);
+
+void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out,
+                           size_t len, const void *key,
+                           unsigned char ivec[16],
+                           unsigned char ecount_buf[16], unsigned int *num,
+                           block128_f block);
+
+void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out,
+                                 size_t len, const void *key,
+                                 unsigned char ivec[16],
+                                 unsigned char ecount_buf[16],
+                                 unsigned int *num, ctr128_f ctr);
+
+void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
+                           size_t len, const void *key,
+                           unsigned char ivec[16], int *num,
+                           block128_f block);
+
+void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out,
+                           size_t len, const void *key,
+                           unsigned char ivec[16], int *num,
+                           int enc, block128_f block);
+void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out,
+                             size_t length, const void *key,
+                             unsigned char ivec[16], int *num,
+                             int enc, block128_f block);
+void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out,
+                             size_t bits, const void *key,
+                             unsigned char ivec[16], int *num,
+                             int enc, block128_f block);
+
+
+# ifdef  __cplusplus
+}
+# endif
+
+#endif
diff --git a/dap-sdk/crypto/src/seed/ofb128.c b/dap-sdk/crypto/src/seed/ofb128.c
new file mode 100644
index 0000000000000000000000000000000000000000..23182677f4be730b598e0ab89c596455792d7609
--- /dev/null
+++ b/dap-sdk/crypto/src/seed/ofb128.c
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include "modes.h"
+
+/*
+ * The input and output encrypted as though 128bit ofb mode is being used.
+ * The extra state information to record how much of the 128bit block we have
+ * used is contained in *num;
+ */
+void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out,
+                           size_t len, const void *key,
+                           unsigned char ivec[16], int *num, block128_f block)
+{
+    unsigned int n;
+    size_t l = 0;
+
+    n = *num;
+
+    if (16 % sizeof(size_t) == 0) { /* always true actually */
+        do {
+            while (n && len) {
+                *(out++) = *(in++) ^ ivec[n];
+                --len;
+                n = (n + 1) % 16;
+            }
+            while (len >= 16) {
+                (*block) (ivec, ivec, key);
+                for (; n < 16; n += sizeof(size_t))
+                    *(size_t *)(out + n) =
+                        *(size_t *)(in + n) ^ *(size_t *)(ivec + n);
+                len -= 16;
+                out += 16;
+                in += 16;
+                n = 0;
+            }
+            if (len) {
+                (*block) (ivec, ivec, key);
+                while (len--) {
+                    out[n] = in[n] ^ ivec[n];
+                    ++n;
+                }
+            }
+            *num = n;
+            return;
+        } while (0);
+    }
+    /* the rest would be commonly eliminated by x86* compiler */
+    while (l < len) {
+        if (n == 0) {
+            (*block) (ivec, ivec, key);
+        }
+        out[l] = in[l] ^ ivec[n];
+        ++l;
+        n = (n + 1) % 16;
+    }
+
+    *num = n;
+}
diff --git a/dap-sdk/crypto/src/seed/seed.c b/dap-sdk/crypto/src/seed/seed.c
new file mode 100644
index 0000000000000000000000000000000000000000..3d0d9d433a58c75004c95b28ce2f57ad2a0beb48
--- /dev/null
+++ b/dap-sdk/crypto/src/seed/seed.c
@@ -0,0 +1,449 @@
+/*
+ * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Neither the name of author nor the names of its contributors may
+ *    be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+
+/*
+ * SEED low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+
+# include "seed.h"
+# include "seed_local.h"
+
+
+#  define G_FUNC(v)       \
+        SS[0][(unsigned char)      (v) & 0xff] ^ \
+        SS[1][(unsigned char) ((v)>>8) & 0xff] ^ \
+        SS[2][(unsigned char)((v)>>16) & 0xff] ^ \
+        SS[3][(unsigned char)((v)>>24) & 0xff]
+
+static const seed_word SS[4][256] = {
+    { 0x2989a1a8, 0x05858184, 0x16c6d2d4, 0x13c3d3d0,
+      0x14445054, 0x1d0d111c, 0x2c8ca0ac, 0x25052124,
+      0x1d4d515c, 0x03434340, 0x18081018, 0x1e0e121c,
+      0x11415150, 0x3cccf0fc, 0x0acac2c8, 0x23436360,
+      0x28082028, 0x04444044, 0x20002020, 0x1d8d919c,
+      0x20c0e0e0, 0x22c2e2e0, 0x08c8c0c8, 0x17071314,
+      0x2585a1a4, 0x0f8f838c, 0x03030300, 0x3b4b7378,
+      0x3b8bb3b8, 0x13031310, 0x12c2d2d0, 0x2ecee2ec,
+      0x30407070, 0x0c8c808c, 0x3f0f333c, 0x2888a0a8,
+      0x32023230, 0x1dcdd1dc, 0x36c6f2f4, 0x34447074,
+      0x2ccce0ec, 0x15859194, 0x0b0b0308, 0x17475354,
+      0x1c4c505c, 0x1b4b5358, 0x3d8db1bc, 0x01010100,
+      0x24042024, 0x1c0c101c, 0x33437370, 0x18889098,
+      0x10001010, 0x0cccc0cc, 0x32c2f2f0, 0x19c9d1d8,
+      0x2c0c202c, 0x27c7e3e4, 0x32427270, 0x03838380,
+      0x1b8b9398, 0x11c1d1d0, 0x06868284, 0x09c9c1c8,
+      0x20406060, 0x10405050, 0x2383a3a0, 0x2bcbe3e8,
+      0x0d0d010c, 0x3686b2b4, 0x1e8e929c, 0x0f4f434c,
+      0x3787b3b4, 0x1a4a5258, 0x06c6c2c4, 0x38487078,
+      0x2686a2a4, 0x12021210, 0x2f8fa3ac, 0x15c5d1d4,
+      0x21416160, 0x03c3c3c0, 0x3484b0b4, 0x01414140,
+      0x12425250, 0x3d4d717c, 0x0d8d818c, 0x08080008,
+      0x1f0f131c, 0x19899198, 0x00000000, 0x19091118,
+      0x04040004, 0x13435350, 0x37c7f3f4, 0x21c1e1e0,
+      0x3dcdf1fc, 0x36467274, 0x2f0f232c, 0x27072324,
+      0x3080b0b0, 0x0b8b8388, 0x0e0e020c, 0x2b8ba3a8,
+      0x2282a2a0, 0x2e4e626c, 0x13839390, 0x0d4d414c,
+      0x29496168, 0x3c4c707c, 0x09090108, 0x0a0a0208,
+      0x3f8fb3bc, 0x2fcfe3ec, 0x33c3f3f0, 0x05c5c1c4,
+      0x07878384, 0x14041014, 0x3ecef2fc, 0x24446064,
+      0x1eced2dc, 0x2e0e222c, 0x0b4b4348, 0x1a0a1218,
+      0x06060204, 0x21012120, 0x2b4b6368, 0x26466264,
+      0x02020200, 0x35c5f1f4, 0x12829290, 0x0a8a8288,
+      0x0c0c000c, 0x3383b3b0, 0x3e4e727c, 0x10c0d0d0,
+      0x3a4a7278, 0x07474344, 0x16869294, 0x25c5e1e4,
+      0x26062224, 0x00808080, 0x2d8da1ac, 0x1fcfd3dc,
+      0x2181a1a0, 0x30003030, 0x37073334, 0x2e8ea2ac,
+      0x36063234, 0x15051114, 0x22022220, 0x38083038,
+      0x34c4f0f4, 0x2787a3a4, 0x05454144, 0x0c4c404c,
+      0x01818180, 0x29c9e1e8, 0x04848084, 0x17879394,
+      0x35053134, 0x0bcbc3c8, 0x0ecec2cc, 0x3c0c303c,
+      0x31417170, 0x11011110, 0x07c7c3c4, 0x09898188,
+      0x35457174, 0x3bcbf3f8, 0x1acad2d8, 0x38c8f0f8,
+      0x14849094, 0x19495158, 0x02828280, 0x04c4c0c4,
+      0x3fcff3fc, 0x09494148, 0x39093138, 0x27476364,
+      0x00c0c0c0, 0x0fcfc3cc, 0x17c7d3d4, 0x3888b0b8,
+      0x0f0f030c, 0x0e8e828c, 0x02424240, 0x23032320,
+      0x11819190, 0x2c4c606c, 0x1bcbd3d8, 0x2484a0a4,
+      0x34043034, 0x31c1f1f0, 0x08484048, 0x02c2c2c0,
+      0x2f4f636c, 0x3d0d313c, 0x2d0d212c, 0x00404040,
+      0x3e8eb2bc, 0x3e0e323c, 0x3c8cb0bc, 0x01c1c1c0,
+      0x2a8aa2a8, 0x3a8ab2b8, 0x0e4e424c, 0x15455154,
+      0x3b0b3338, 0x1cccd0dc, 0x28486068, 0x3f4f737c,
+      0x1c8c909c, 0x18c8d0d8, 0x0a4a4248, 0x16465254,
+      0x37477374, 0x2080a0a0, 0x2dcde1ec, 0x06464244,
+      0x3585b1b4, 0x2b0b2328, 0x25456164, 0x3acaf2f8,
+      0x23c3e3e0, 0x3989b1b8, 0x3181b1b0, 0x1f8f939c,
+      0x1e4e525c, 0x39c9f1f8, 0x26c6e2e4, 0x3282b2b0,
+      0x31013130, 0x2acae2e8, 0x2d4d616c, 0x1f4f535c,
+      0x24c4e0e4, 0x30c0f0f0, 0x0dcdc1cc, 0x08888088,
+      0x16061214, 0x3a0a3238, 0x18485058, 0x14c4d0d4,
+      0x22426260, 0x29092128, 0x07070304, 0x33033330,
+      0x28c8e0e8, 0x1b0b1318, 0x05050104, 0x39497178,
+      0x10809090, 0x2a4a6268, 0x2a0a2228, 0x1a8a9298
+    },
+    { 0x38380830, 0xe828c8e0, 0x2c2d0d21, 0xa42686a2,
+      0xcc0fcfc3, 0xdc1eced2, 0xb03383b3, 0xb83888b0,
+      0xac2f8fa3, 0x60204060, 0x54154551, 0xc407c7c3,
+      0x44044440, 0x6c2f4f63, 0x682b4b63, 0x581b4b53,
+      0xc003c3c3, 0x60224262, 0x30330333, 0xb43585b1,
+      0x28290921, 0xa02080a0, 0xe022c2e2, 0xa42787a3,
+      0xd013c3d3, 0x90118191, 0x10110111, 0x04060602,
+      0x1c1c0c10, 0xbc3c8cb0, 0x34360632, 0x480b4b43,
+      0xec2fcfe3, 0x88088880, 0x6c2c4c60, 0xa82888a0,
+      0x14170713, 0xc404c4c0, 0x14160612, 0xf434c4f0,
+      0xc002c2c2, 0x44054541, 0xe021c1e1, 0xd416c6d2,
+      0x3c3f0f33, 0x3c3d0d31, 0x8c0e8e82, 0x98188890,
+      0x28280820, 0x4c0e4e42, 0xf436c6f2, 0x3c3e0e32,
+      0xa42585a1, 0xf839c9f1, 0x0c0d0d01, 0xdc1fcfd3,
+      0xd818c8d0, 0x282b0b23, 0x64264662, 0x783a4a72,
+      0x24270723, 0x2c2f0f23, 0xf031c1f1, 0x70324272,
+      0x40024242, 0xd414c4d0, 0x40014141, 0xc000c0c0,
+      0x70334373, 0x64274763, 0xac2c8ca0, 0x880b8b83,
+      0xf437c7f3, 0xac2d8da1, 0x80008080, 0x1c1f0f13,
+      0xc80acac2, 0x2c2c0c20, 0xa82a8aa2, 0x34340430,
+      0xd012c2d2, 0x080b0b03, 0xec2ecee2, 0xe829c9e1,
+      0x5c1d4d51, 0x94148490, 0x18180810, 0xf838c8f0,
+      0x54174753, 0xac2e8ea2, 0x08080800, 0xc405c5c1,
+      0x10130313, 0xcc0dcdc1, 0x84068682, 0xb83989b1,
+      0xfc3fcff3, 0x7c3d4d71, 0xc001c1c1, 0x30310131,
+      0xf435c5f1, 0x880a8a82, 0x682a4a62, 0xb03181b1,
+      0xd011c1d1, 0x20200020, 0xd417c7d3, 0x00020202,
+      0x20220222, 0x04040400, 0x68284860, 0x70314171,
+      0x04070703, 0xd81bcbd3, 0x9c1d8d91, 0x98198991,
+      0x60214161, 0xbc3e8eb2, 0xe426c6e2, 0x58194951,
+      0xdc1dcdd1, 0x50114151, 0x90108090, 0xdc1cccd0,
+      0x981a8a92, 0xa02383a3, 0xa82b8ba3, 0xd010c0d0,
+      0x80018181, 0x0c0f0f03, 0x44074743, 0x181a0a12,
+      0xe023c3e3, 0xec2ccce0, 0x8c0d8d81, 0xbc3f8fb3,
+      0x94168692, 0x783b4b73, 0x5c1c4c50, 0xa02282a2,
+      0xa02181a1, 0x60234363, 0x20230323, 0x4c0d4d41,
+      0xc808c8c0, 0x9c1e8e92, 0x9c1c8c90, 0x383a0a32,
+      0x0c0c0c00, 0x2c2e0e22, 0xb83a8ab2, 0x6c2e4e62,
+      0x9c1f8f93, 0x581a4a52, 0xf032c2f2, 0x90128292,
+      0xf033c3f3, 0x48094941, 0x78384870, 0xcc0cccc0,
+      0x14150511, 0xf83bcbf3, 0x70304070, 0x74354571,
+      0x7c3f4f73, 0x34350531, 0x10100010, 0x00030303,
+      0x64244460, 0x6c2d4d61, 0xc406c6c2, 0x74344470,
+      0xd415c5d1, 0xb43484b0, 0xe82acae2, 0x08090901,
+      0x74364672, 0x18190911, 0xfc3ecef2, 0x40004040,
+      0x10120212, 0xe020c0e0, 0xbc3d8db1, 0x04050501,
+      0xf83acaf2, 0x00010101, 0xf030c0f0, 0x282a0a22,
+      0x5c1e4e52, 0xa82989a1, 0x54164652, 0x40034343,
+      0x84058581, 0x14140410, 0x88098981, 0x981b8b93,
+      0xb03080b0, 0xe425c5e1, 0x48084840, 0x78394971,
+      0x94178793, 0xfc3cccf0, 0x1c1e0e12, 0x80028282,
+      0x20210121, 0x8c0c8c80, 0x181b0b13, 0x5c1f4f53,
+      0x74374773, 0x54144450, 0xb03282b2, 0x1c1d0d11,
+      0x24250521, 0x4c0f4f43, 0x00000000, 0x44064642,
+      0xec2dcde1, 0x58184850, 0x50124252, 0xe82bcbe3,
+      0x7c3e4e72, 0xd81acad2, 0xc809c9c1, 0xfc3dcdf1,
+      0x30300030, 0x94158591, 0x64254561, 0x3c3c0c30,
+      0xb43686b2, 0xe424c4e0, 0xb83b8bb3, 0x7c3c4c70,
+      0x0c0e0e02, 0x50104050, 0x38390931, 0x24260622,
+      0x30320232, 0x84048480, 0x68294961, 0x90138393,
+      0x34370733, 0xe427c7e3, 0x24240420, 0xa42484a0,
+      0xc80bcbc3, 0x50134353, 0x080a0a02, 0x84078783,
+      0xd819c9d1, 0x4c0c4c40, 0x80038383, 0x8c0f8f83,
+      0xcc0ecec2, 0x383b0b33, 0x480a4a42, 0xb43787b3
+    },
+    { 0xa1a82989, 0x81840585, 0xd2d416c6, 0xd3d013c3,
+      0x50541444, 0x111c1d0d, 0xa0ac2c8c, 0x21242505,
+      0x515c1d4d, 0x43400343, 0x10181808, 0x121c1e0e,
+      0x51501141, 0xf0fc3ccc, 0xc2c80aca, 0x63602343,
+      0x20282808, 0x40440444, 0x20202000, 0x919c1d8d,
+      0xe0e020c0, 0xe2e022c2, 0xc0c808c8, 0x13141707,
+      0xa1a42585, 0x838c0f8f, 0x03000303, 0x73783b4b,
+      0xb3b83b8b, 0x13101303, 0xd2d012c2, 0xe2ec2ece,
+      0x70703040, 0x808c0c8c, 0x333c3f0f, 0xa0a82888,
+      0x32303202, 0xd1dc1dcd, 0xf2f436c6, 0x70743444,
+      0xe0ec2ccc, 0x91941585, 0x03080b0b, 0x53541747,
+      0x505c1c4c, 0x53581b4b, 0xb1bc3d8d, 0x01000101,
+      0x20242404, 0x101c1c0c, 0x73703343, 0x90981888,
+      0x10101000, 0xc0cc0ccc, 0xf2f032c2, 0xd1d819c9,
+      0x202c2c0c, 0xe3e427c7, 0x72703242, 0x83800383,
+      0x93981b8b, 0xd1d011c1, 0x82840686, 0xc1c809c9,
+      0x60602040, 0x50501040, 0xa3a02383, 0xe3e82bcb,
+      0x010c0d0d, 0xb2b43686, 0x929c1e8e, 0x434c0f4f,
+      0xb3b43787, 0x52581a4a, 0xc2c406c6, 0x70783848,
+      0xa2a42686, 0x12101202, 0xa3ac2f8f, 0xd1d415c5,
+      0x61602141, 0xc3c003c3, 0xb0b43484, 0x41400141,
+      0x52501242, 0x717c3d4d, 0x818c0d8d, 0x00080808,
+      0x131c1f0f, 0x91981989, 0x00000000, 0x11181909,
+      0x00040404, 0x53501343, 0xf3f437c7, 0xe1e021c1,
+      0xf1fc3dcd, 0x72743646, 0x232c2f0f, 0x23242707,
+      0xb0b03080, 0x83880b8b, 0x020c0e0e, 0xa3a82b8b,
+      0xa2a02282, 0x626c2e4e, 0x93901383, 0x414c0d4d,
+      0x61682949, 0x707c3c4c, 0x01080909, 0x02080a0a,
+      0xb3bc3f8f, 0xe3ec2fcf, 0xf3f033c3, 0xc1c405c5,
+      0x83840787, 0x10141404, 0xf2fc3ece, 0x60642444,
+      0xd2dc1ece, 0x222c2e0e, 0x43480b4b, 0x12181a0a,
+      0x02040606, 0x21202101, 0x63682b4b, 0x62642646,
+      0x02000202, 0xf1f435c5, 0x92901282, 0x82880a8a,
+      0x000c0c0c, 0xb3b03383, 0x727c3e4e, 0xd0d010c0,
+      0x72783a4a, 0x43440747, 0x92941686, 0xe1e425c5,
+      0x22242606, 0x80800080, 0xa1ac2d8d, 0xd3dc1fcf,
+      0xa1a02181, 0x30303000, 0x33343707, 0xa2ac2e8e,
+      0x32343606, 0x11141505, 0x22202202, 0x30383808,
+      0xf0f434c4, 0xa3a42787, 0x41440545, 0x404c0c4c,
+      0x81800181, 0xe1e829c9, 0x80840484, 0x93941787,
+      0x31343505, 0xc3c80bcb, 0xc2cc0ece, 0x303c3c0c,
+      0x71703141, 0x11101101, 0xc3c407c7, 0x81880989,
+      0x71743545, 0xf3f83bcb, 0xd2d81aca, 0xf0f838c8,
+      0x90941484, 0x51581949, 0x82800282, 0xc0c404c4,
+      0xf3fc3fcf, 0x41480949, 0x31383909, 0x63642747,
+      0xc0c000c0, 0xc3cc0fcf, 0xd3d417c7, 0xb0b83888,
+      0x030c0f0f, 0x828c0e8e, 0x42400242, 0x23202303,
+      0x91901181, 0x606c2c4c, 0xd3d81bcb, 0xa0a42484,
+      0x30343404, 0xf1f031c1, 0x40480848, 0xc2c002c2,
+      0x636c2f4f, 0x313c3d0d, 0x212c2d0d, 0x40400040,
+      0xb2bc3e8e, 0x323c3e0e, 0xb0bc3c8c, 0xc1c001c1,
+      0xa2a82a8a, 0xb2b83a8a, 0x424c0e4e, 0x51541545,
+      0x33383b0b, 0xd0dc1ccc, 0x60682848, 0x737c3f4f,
+      0x909c1c8c, 0xd0d818c8, 0x42480a4a, 0x52541646,
+      0x73743747, 0xa0a02080, 0xe1ec2dcd, 0x42440646,
+      0xb1b43585, 0x23282b0b, 0x61642545, 0xf2f83aca,
+      0xe3e023c3, 0xb1b83989, 0xb1b03181, 0x939c1f8f,
+      0x525c1e4e, 0xf1f839c9, 0xe2e426c6, 0xb2b03282,
+      0x31303101, 0xe2e82aca, 0x616c2d4d, 0x535c1f4f,
+      0xe0e424c4, 0xf0f030c0, 0xc1cc0dcd, 0x80880888,
+      0x12141606, 0x32383a0a, 0x50581848, 0xd0d414c4,
+      0x62602242, 0x21282909, 0x03040707, 0x33303303,
+      0xe0e828c8, 0x13181b0b, 0x01040505, 0x71783949,
+      0x90901080, 0x62682a4a, 0x22282a0a, 0x92981a8a
+    },
+    { 0x08303838, 0xc8e0e828, 0x0d212c2d, 0x86a2a426,
+      0xcfc3cc0f, 0xced2dc1e, 0x83b3b033, 0x88b0b838,
+      0x8fa3ac2f, 0x40606020, 0x45515415, 0xc7c3c407,
+      0x44404404, 0x4f636c2f, 0x4b63682b, 0x4b53581b,
+      0xc3c3c003, 0x42626022, 0x03333033, 0x85b1b435,
+      0x09212829, 0x80a0a020, 0xc2e2e022, 0x87a3a427,
+      0xc3d3d013, 0x81919011, 0x01111011, 0x06020406,
+      0x0c101c1c, 0x8cb0bc3c, 0x06323436, 0x4b43480b,
+      0xcfe3ec2f, 0x88808808, 0x4c606c2c, 0x88a0a828,
+      0x07131417, 0xc4c0c404, 0x06121416, 0xc4f0f434,
+      0xc2c2c002, 0x45414405, 0xc1e1e021, 0xc6d2d416,
+      0x0f333c3f, 0x0d313c3d, 0x8e828c0e, 0x88909818,
+      0x08202828, 0x4e424c0e, 0xc6f2f436, 0x0e323c3e,
+      0x85a1a425, 0xc9f1f839, 0x0d010c0d, 0xcfd3dc1f,
+      0xc8d0d818, 0x0b23282b, 0x46626426, 0x4a72783a,
+      0x07232427, 0x0f232c2f, 0xc1f1f031, 0x42727032,
+      0x42424002, 0xc4d0d414, 0x41414001, 0xc0c0c000,
+      0x43737033, 0x47636427, 0x8ca0ac2c, 0x8b83880b,
+      0xc7f3f437, 0x8da1ac2d, 0x80808000, 0x0f131c1f,
+      0xcac2c80a, 0x0c202c2c, 0x8aa2a82a, 0x04303434,
+      0xc2d2d012, 0x0b03080b, 0xcee2ec2e, 0xc9e1e829,
+      0x4d515c1d, 0x84909414, 0x08101818, 0xc8f0f838,
+      0x47535417, 0x8ea2ac2e, 0x08000808, 0xc5c1c405,
+      0x03131013, 0xcdc1cc0d, 0x86828406, 0x89b1b839,
+      0xcff3fc3f, 0x4d717c3d, 0xc1c1c001, 0x01313031,
+      0xc5f1f435, 0x8a82880a, 0x4a62682a, 0x81b1b031,
+      0xc1d1d011, 0x00202020, 0xc7d3d417, 0x02020002,
+      0x02222022, 0x04000404, 0x48606828, 0x41717031,
+      0x07030407, 0xcbd3d81b, 0x8d919c1d, 0x89919819,
+      0x41616021, 0x8eb2bc3e, 0xc6e2e426, 0x49515819,
+      0xcdd1dc1d, 0x41515011, 0x80909010, 0xccd0dc1c,
+      0x8a92981a, 0x83a3a023, 0x8ba3a82b, 0xc0d0d010,
+      0x81818001, 0x0f030c0f, 0x47434407, 0x0a12181a,
+      0xc3e3e023, 0xcce0ec2c, 0x8d818c0d, 0x8fb3bc3f,
+      0x86929416, 0x4b73783b, 0x4c505c1c, 0x82a2a022,
+      0x81a1a021, 0x43636023, 0x03232023, 0x4d414c0d,
+      0xc8c0c808, 0x8e929c1e, 0x8c909c1c, 0x0a32383a,
+      0x0c000c0c, 0x0e222c2e, 0x8ab2b83a, 0x4e626c2e,
+      0x8f939c1f, 0x4a52581a, 0xc2f2f032, 0x82929012,
+      0xc3f3f033, 0x49414809, 0x48707838, 0xccc0cc0c,
+      0x05111415, 0xcbf3f83b, 0x40707030, 0x45717435,
+      0x4f737c3f, 0x05313435, 0x00101010, 0x03030003,
+      0x44606424, 0x4d616c2d, 0xc6c2c406, 0x44707434,
+      0xc5d1d415, 0x84b0b434, 0xcae2e82a, 0x09010809,
+      0x46727436, 0x09111819, 0xcef2fc3e, 0x40404000,
+      0x02121012, 0xc0e0e020, 0x8db1bc3d, 0x05010405,
+      0xcaf2f83a, 0x01010001, 0xc0f0f030, 0x0a22282a,
+      0x4e525c1e, 0x89a1a829, 0x46525416, 0x43434003,
+      0x85818405, 0x04101414, 0x89818809, 0x8b93981b,
+      0x80b0b030, 0xc5e1e425, 0x48404808, 0x49717839,
+      0x87939417, 0xccf0fc3c, 0x0e121c1e, 0x82828002,
+      0x01212021, 0x8c808c0c, 0x0b13181b, 0x4f535c1f,
+      0x47737437, 0x44505414, 0x82b2b032, 0x0d111c1d,
+      0x05212425, 0x4f434c0f, 0x00000000, 0x46424406,
+      0xcde1ec2d, 0x48505818, 0x42525012, 0xcbe3e82b,
+      0x4e727c3e, 0xcad2d81a, 0xc9c1c809, 0xcdf1fc3d,
+      0x00303030, 0x85919415, 0x45616425, 0x0c303c3c,
+      0x86b2b436, 0xc4e0e424, 0x8bb3b83b, 0x4c707c3c,
+      0x0e020c0e, 0x40505010, 0x09313839, 0x06222426,
+      0x02323032, 0x84808404, 0x49616829, 0x83939013,
+      0x07333437, 0xc7e3e427, 0x04202424, 0x84a0a424,
+      0xcbc3c80b, 0x43535013, 0x0a02080a, 0x87838407,
+      0xc9d1d819, 0x4c404c0c, 0x83838003, 0x8f838c0f,
+      0xcec2cc0e, 0x0b33383b, 0x4a42480a, 0x87b3b437
+    }
+};
+
+
+/* key schedule constants - golden ratio */
+# define KC0     0x9e3779b9
+# define KC1     0x3c6ef373
+# define KC2     0x78dde6e6
+# define KC3     0xf1bbcdcc
+# define KC4     0xe3779b99
+# define KC5     0xc6ef3733
+# define KC6     0x8dde6e67
+# define KC7     0x1bbcdccf
+# define KC8     0x3779b99e
+# define KC9     0x6ef3733c
+# define KC10    0xdde6e678
+# define KC11    0xbbcdccf1
+# define KC12    0x779b99e3
+# define KC13    0xef3733c6
+# define KC14    0xde6e678d
+# define KC15    0xbcdccf1b
+
+
+void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH],
+                  SEED_KEY_SCHEDULE *ks)
+{
+    seed_word x1, x2, x3, x4;
+    seed_word t0, t1;
+
+    char2word(rawkey, x1);
+    char2word(rawkey + 4, x2);
+    char2word(rawkey + 8, x3);
+    char2word(rawkey + 12, x4);
+
+    t0 = (x1 + x3 - KC0) & 0xffffffff;
+    t1 = (x2 - x4 + KC0) & 0xffffffff;
+    KEYUPDATE_TEMP(t0, t1, &ks->data[0]);
+    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC1);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[2]);
+
+    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC2);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[4]);
+    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC3);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[6]);
+    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC4);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[8]);
+    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC5);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[10]);
+    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC6);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[12]);
+    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC7);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[14]);
+    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC8);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[16]);
+    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC9);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[18]);
+    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC10);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[20]);
+    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC11);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[22]);
+    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC12);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[24]);
+    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC13);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[26]);
+    KEYSCHEDULE_UPDATE0(t0, t1, x1, x2, x3, x4, KC14);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[28]);
+    KEYSCHEDULE_UPDATE1(t0, t1, x1, x2, x3, x4, KC15);
+    KEYUPDATE_TEMP(t0, t1, &ks->data[30]);
+}
+
+void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE],
+                  unsigned char d[SEED_BLOCK_SIZE],
+                  const SEED_KEY_SCHEDULE *ks)
+{
+    seed_word x1, x2, x3, x4;
+    seed_word t0, t1;
+
+    char2word(s, x1);
+    char2word(s + 4, x2);
+    char2word(s + 8, x3);
+    char2word(s + 12, x4);
+
+    E_SEED(t0, t1, x1, x2, x3, x4, 0);
+    E_SEED(t0, t1, x3, x4, x1, x2, 2);
+    E_SEED(t0, t1, x1, x2, x3, x4, 4);
+    E_SEED(t0, t1, x3, x4, x1, x2, 6);
+    E_SEED(t0, t1, x1, x2, x3, x4, 8);
+    E_SEED(t0, t1, x3, x4, x1, x2, 10);
+    E_SEED(t0, t1, x1, x2, x3, x4, 12);
+    E_SEED(t0, t1, x3, x4, x1, x2, 14);
+    E_SEED(t0, t1, x1, x2, x3, x4, 16);
+    E_SEED(t0, t1, x3, x4, x1, x2, 18);
+    E_SEED(t0, t1, x1, x2, x3, x4, 20);
+    E_SEED(t0, t1, x3, x4, x1, x2, 22);
+    E_SEED(t0, t1, x1, x2, x3, x4, 24);
+    E_SEED(t0, t1, x3, x4, x1, x2, 26);
+    E_SEED(t0, t1, x1, x2, x3, x4, 28);
+    E_SEED(t0, t1, x3, x4, x1, x2, 30);
+
+    word2char(x3, d);
+    word2char(x4, d + 4);
+    word2char(x1, d + 8);
+    word2char(x2, d + 12);
+}
+
+void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE],
+                  unsigned char d[SEED_BLOCK_SIZE],
+                  const SEED_KEY_SCHEDULE *ks)
+{
+    seed_word x1, x2, x3, x4;
+    seed_word t0, t1;
+
+    char2word(s, x1);
+    char2word(s + 4, x2);
+    char2word(s + 8, x3);
+    char2word(s + 12, x4);
+
+    E_SEED(t0, t1, x1, x2, x3, x4, 30);
+    E_SEED(t0, t1, x3, x4, x1, x2, 28);
+    E_SEED(t0, t1, x1, x2, x3, x4, 26);
+    E_SEED(t0, t1, x3, x4, x1, x2, 24);
+    E_SEED(t0, t1, x1, x2, x3, x4, 22);
+    E_SEED(t0, t1, x3, x4, x1, x2, 20);
+    E_SEED(t0, t1, x1, x2, x3, x4, 18);
+    E_SEED(t0, t1, x3, x4, x1, x2, 16);
+    E_SEED(t0, t1, x1, x2, x3, x4, 14);
+    E_SEED(t0, t1, x3, x4, x1, x2, 12);
+    E_SEED(t0, t1, x1, x2, x3, x4, 10);
+    E_SEED(t0, t1, x3, x4, x1, x2, 8);
+    E_SEED(t0, t1, x1, x2, x3, x4, 6);
+    E_SEED(t0, t1, x3, x4, x1, x2, 4);
+    E_SEED(t0, t1, x1, x2, x3, x4, 2);
+    E_SEED(t0, t1, x3, x4, x1, x2, 0);
+
+    word2char(x3, d);
+    word2char(x4, d + 4);
+    word2char(x1, d + 8);
+    word2char(x2, d + 12);
+}
diff --git a/dap-sdk/crypto/src/seed/seed.h b/dap-sdk/crypto/src/seed/seed.h
new file mode 100644
index 0000000000000000000000000000000000000000..d8d182d9c9f6366195d925f543ee025a233ce65d
--- /dev/null
+++ b/dap-sdk/crypto/src/seed/seed.h
@@ -0,0 +1,84 @@
+/*
+ * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Neither the name of author nor the names of its contributors may
+ *    be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#ifndef HEADER_SEED_H
+# define HEADER_SEED_H
+
+#include<stddef.h>
+#include<stdint.h>
+#  ifdef  __cplusplus
+extern "C" {
+#  endif
+
+#  define SEED_BLOCK_SIZE 16
+#  define SEED_KEY_LENGTH 16
+
+
+
+typedef struct seed_key_st {
+    uint32_t data[32];
+} SEED_KEY_SCHEDULE;
+
+void SEED_set_key(const unsigned char rawkey[SEED_KEY_LENGTH],
+                                   SEED_KEY_SCHEDULE *ks);
+
+void SEED_encrypt(const unsigned char s[SEED_BLOCK_SIZE],
+                                   unsigned char d[SEED_BLOCK_SIZE],
+                                   const SEED_KEY_SCHEDULE *ks);
+void SEED_decrypt(const unsigned char s[SEED_BLOCK_SIZE],
+                                   unsigned char d[SEED_BLOCK_SIZE],
+                                   const SEED_KEY_SCHEDULE *ks);
+
+void SEED_ecb_encrypt(const unsigned char *in,
+                                       unsigned char *out,
+                                       const SEED_KEY_SCHEDULE *ks, int enc);
+void SEED_cbc_encrypt(const unsigned char *in,
+                                       unsigned char *out, size_t len,
+                                       const SEED_KEY_SCHEDULE *ks,
+                                       unsigned char ivec[SEED_BLOCK_SIZE],
+                                       int enc);
+void SEED_cfb128_encrypt(const unsigned char *in,
+                                          unsigned char *out, size_t len,
+                                          const SEED_KEY_SCHEDULE *ks,
+                                          unsigned char ivec[SEED_BLOCK_SIZE],
+                                          int *num, int enc);
+void SEED_ofb128_encrypt(const unsigned char *in,
+                                          unsigned char *out, size_t len,
+                                          const SEED_KEY_SCHEDULE *ks,
+                                          unsigned char ivec[SEED_BLOCK_SIZE],
+                                          int *num);
+
+#  ifdef  __cplusplus
+}
+#  endif
+#endif
diff --git a/dap-sdk/crypto/src/seed/seed_local.h b/dap-sdk/crypto/src/seed/seed_local.h
new file mode 100644
index 0000000000000000000000000000000000000000..713fa07cdaf9276b0a9aa5328f9d035bb730c9a2
--- /dev/null
+++ b/dap-sdk/crypto/src/seed/seed_local.h
@@ -0,0 +1,106 @@
+/*
+ * Copyright 2007-2018 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Neither the name of author nor the names of its contributors may
+ *    be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ */
+#ifndef OSSL_CRYPTO_SEED_LOCAL_H
+# define OSSL_CRYPTO_SEED_LOCAL_H
+
+# include "seed.h"
+
+typedef uint32_t seed_word;
+
+# define char2word(c, i)  \
+        (i) = ((((seed_word)(c)[0]) << 24) | (((seed_word)(c)[1]) << 16) | (((seed_word)(c)[2]) << 8) | ((seed_word)(c)[3]))
+
+# define word2char(l, c)  \
+        *((c)+0) = (unsigned char)((l)>>24) & 0xff; \
+        *((c)+1) = (unsigned char)((l)>>16) & 0xff; \
+        *((c)+2) = (unsigned char)((l)>> 8) & 0xff; \
+        *((c)+3) = (unsigned char)((l))     & 0xff
+
+# define KEYSCHEDULE_UPDATE0(T0, T1, X1, X2, X3, X4, KC)  \
+        (T0) = (X3);                                     \
+        (X3) = (((X3)<<8) ^ ((X4)>>24)) & 0xffffffff;    \
+        (X4) = (((X4)<<8) ^ ((T0)>>24)) & 0xffffffff;    \
+        (T0) = ((X1) + (X3) - (KC))     & 0xffffffff;    \
+        (T1) = ((X2) + (KC) - (X4))     & 0xffffffff
+
+# define KEYSCHEDULE_UPDATE1(T0, T1, X1, X2, X3, X4, KC)  \
+        (T0) = (X1);                                     \
+        (X1) = (((X1)>>8) ^ ((X2)<<24)) & 0xffffffff;    \
+        (X2) = (((X2)>>8) ^ ((T0)<<24)) & 0xffffffff;    \
+        (T0) = ((X1) + (X3) - (KC))     & 0xffffffff;     \
+        (T1) = ((X2) + (KC) - (X4))     & 0xffffffff
+
+# define KEYUPDATE_TEMP(T0, T1, K)   \
+        (K)[0] = G_FUNC((T0));      \
+        (K)[1] = G_FUNC((T1))
+
+# define XOR_SEEDBLOCK(DST, SRC)      \
+        ((DST))[0] ^= ((SRC))[0];    \
+        ((DST))[1] ^= ((SRC))[1];    \
+        ((DST))[2] ^= ((SRC))[2];    \
+        ((DST))[3] ^= ((SRC))[3]
+
+# define MOV_SEEDBLOCK(DST, SRC)      \
+        ((DST))[0] = ((SRC))[0];     \
+        ((DST))[1] = ((SRC))[1];     \
+        ((DST))[2] = ((SRC))[2];     \
+        ((DST))[3] = ((SRC))[3]
+
+# define CHAR2WORD(C, I)              \
+        char2word((C),    (I)[0]);    \
+        char2word((C+4),  (I)[1]);    \
+        char2word((C+8),  (I)[2]);    \
+        char2word((C+12), (I)[3])
+
+# define WORD2CHAR(I, C)              \
+        word2char((I)[0], (C));       \
+        word2char((I)[1], (C+4));     \
+        word2char((I)[2], (C+8));     \
+        word2char((I)[3], (C+12))
+
+# define E_SEED(T0, T1, X1, X2, X3, X4, rbase)   \
+        (T0) = (X3) ^ (ks->data)[(rbase)];       \
+        (T1) = (X4) ^ (ks->data)[(rbase)+1];     \
+        (T1) ^= (T0);                            \
+        (T1) = G_FUNC((T1));                     \
+        (T0) = ((T0) + (T1)) & 0xffffffff;       \
+        (T0) = G_FUNC((T0));                     \
+        (T1) = ((T1) + (T0)) & 0xffffffff;       \
+        (T1) = G_FUNC((T1));                     \
+        (T0) = ((T0) + (T1)) & 0xffffffff;       \
+        (X1) ^= (T0);                            \
+        (X2) ^= (T1)
+
+#endif                          /* OSSL_CRYPTO_SEED_LOCAL_H */
diff --git a/dap-sdk/crypto/src/seed/seed_ofb.c b/dap-sdk/crypto/src/seed/seed_ofb.c
new file mode 100644
index 0000000000000000000000000000000000000000..9d2226d8a9b8d62fad97fa84e8ca5c0e59e7d5be
--- /dev/null
+++ b/dap-sdk/crypto/src/seed/seed_ofb.c
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
+ * this file except in compliance with the License.  You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+/*
+ * SEED low level APIs are deprecated for public use, but still ok for
+ * internal use.
+ */
+
+#include "seed.h"
+#include "modes.h"
+
+void SEED_ofb128_encrypt(const unsigned char *in, unsigned char *out,
+                         size_t len, const SEED_KEY_SCHEDULE *ks,
+                         unsigned char ivec[SEED_BLOCK_SIZE], int *num)
+{
+    CRYPTO_ofb128_encrypt(in, out, len, ks, ivec, num,
+                          (block128_f) SEED_encrypt);
+}
diff --git a/dap-sdk/crypto/src/sig_picnic/picnic_impl.c b/dap-sdk/crypto/src/sig_picnic/picnic_impl.c
index 2736ff31e7cc049e40f976dec7367036dc04aed1..a98e7fd85aad97e5ece7c90c64a9939c91fc5125 100755
--- a/dap-sdk/crypto/src/sig_picnic/picnic_impl.c
+++ b/dap-sdk/crypto/src/sig_picnic/picnic_impl.c
@@ -32,8 +32,8 @@
 #include "lowmc_constants.h"
 #include "hash.h"
 #include "picnic_types.h"
+#include "dap_common.h"
 
-//#define MAX(a, b) ((a) > (b)) ? (a) : (b)
 
 #define VIEW_OUTPUTS(i, j) viewOutputs[(i) * 3 + (j)]
 
diff --git a/dap-sdk/crypto/src/sig_tesla/sig_tesla.pri b/dap-sdk/crypto/src/sig_tesla/sig_tesla.pri
index 0f45f03ef713e7e8bc12afbbe571366392684236..87cd4cee22ad7125f9430f61805c9b6e76942a66 100755
--- a/dap-sdk/crypto/src/sig_tesla/sig_tesla.pri
+++ b/dap-sdk/crypto/src/sig_tesla/sig_tesla.pri
@@ -2,6 +2,7 @@ HEADERS += $$PWD/tesla_params.h
 
 
 SOURCES +=  $$PWD/consts.c \
+    $$PWD/poly.c \
     $$PWD/sample.c \
     $$PWD/sign.c \
     $$PWD/tesla_params.c
diff --git a/dap-sdk/crypto/test/crypto/dap_enc_test.c b/dap-sdk/crypto/test/crypto/dap_enc_test.c
index 430e1d62e9995f2fd0ece9f15f6ee75216160095..ad3fb8c32e9cebef46abb2b67766c0fd537fa16f 100755
--- a/dap-sdk/crypto/test/crypto/dap_enc_test.c
+++ b/dap-sdk/crypto/test/crypto/dap_enc_test.c
@@ -66,7 +66,7 @@ void test_encypt_decrypt_fast(int count_steps, const dap_enc_key_type_t key_type
     const int max_source_size = 10000;
     dap_print_module_name(dap_enc_get_type_name(key_type));
     char buf_encrypt_out[max_source_size+128];
-    char buf_decrypt_out[max_source_size];
+    char buf_decrypt_out[max_source_size+32];
     int time_beg = get_cur_time_msec();
 
 
@@ -85,6 +85,7 @@ void test_encypt_decrypt_fast(int count_steps, const dap_enc_key_type_t key_type
 
     for(int i = 0; i < count_steps; i++) {
         source_size = 1 + random_uint32_t(max_source_size);
+//        printf("ss = %d\n", source_size);fflush(stdout);
 
         uint8_t *source = DAP_NEW_SIZE(uint8_t,source_size + 0);
         randombytes(source, source_size);//randombase64(source, source_size);
@@ -92,7 +93,7 @@ void test_encypt_decrypt_fast(int count_steps, const dap_enc_key_type_t key_type
 
         size_t encrypted_size = key->enc_na(key, source, source_size, buf_encrypt_out, max_source_size+128);
 
-        size_t result_size = key->dec_na(key, buf_encrypt_out, encrypted_size, buf_decrypt_out, max_source_size);
+        size_t result_size = key->dec_na(key, buf_encrypt_out, encrypted_size, buf_decrypt_out, max_source_size+32);
 
 
 
diff --git a/dap-sdk/crypto/test/crypto/main.c b/dap-sdk/crypto/test/crypto/main.c
index 937cabdf0d27cd7847769b84d9d8b586599aada8..9815690c257a5cdb572465904b8f5367209bee95 100755
--- a/dap-sdk/crypto/test/crypto/main.c
+++ b/dap-sdk/crypto/test/crypto/main.c
@@ -12,43 +12,43 @@
 #include "rand/dap_rand.h"
 
 #include "dap_common.h"
+void dap_enc_newhope_tests_run(const int times);
+
 
 int main(void)
 {
  // switch off debug info from library
     dap_log_level_set(L_CRITICAL);
-
     const int  test_numbers = 100;
-    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012,  32);
-    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012,  32);
-    test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012,  32);
-    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_GOST_OFB,  32);
+    //dap_enc_newhope_tests_run(test_numbers);
+    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_SEED_OFB,  32);
+    test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_SEED_OFB,  32);
+    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012, 32);
+    test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_SALSA2012, 32);
     test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_GOST_OFB,  32);
     test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_GOST_OFB,  32);
     test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_KUZN_OFB,  32);
-    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_KUZN_OFB,  32);
-    test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_KUZN_OFB,  32);
     test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_KUZN_OFB,  32);
     test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_BF_CBC,     0);
     test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_BF_CBC,     0);
     test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_BF_OFB,     0);
     test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_BF_OFB,     0);
-    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_IAES,       32);
-    test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_IAES,       32);
-    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_OAES,       32);
-    test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_OAES,       32);
+    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_IAES,      32);
+    test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_IAES,      32);
+    test_encypt_decrypt      (test_numbers, DAP_ENC_KEY_TYPE_OAES,      32);
+    test_encypt_decrypt_fast (test_numbers, DAP_ENC_KEY_TYPE_OAES,      32);
     dap_enc_ringct20_tests_run(test_numbers);
-    return 0;
+   // return 0;
     dap_enc_tests_run();
 
 
     dap_enc_picnic_tests_run();
     dap_enc_sig_bliss_tests_run();
     dap_enc_dilithium_tests_run();
+    dap_enc_msrln_tests_run();
 
     dap_enc_base64_tests_run();
     dap_enc_base58_tests_run();
-    dap_enc_msrln_tests_run();
     dap_enc_defeo_tests_run();
     dap_enc_tesla_tests_run();
     dap_enc_multi_sign_tests_run();
diff --git a/modules/test/dap_test.c b/modules/test/dap_test.c
index e4603b71d210ea96d5db7dc2690861a920a449a3..55517435e174987576d3ab75178ddd74fc730193 100644
--- a/modules/test/dap_test.c
+++ b/modules/test/dap_test.c
@@ -63,7 +63,7 @@ void benchmark_mgs_rate(const char *test_name, float rate)
 /**
  * @return current time in milliseconds
  */
-static int get_cur_time_msec(void)
+int get_cur_time_msec(void)
 {
     struct timespec time;
     clock_gettime(CLOCK_MONOTONIC, &time);
diff --git a/modules/test/dap_test.h b/modules/test/dap_test.h
index 0c346732faf6f13ae2d744601ee77f1156693b3b..4a6445d82fcdf681290fae32d9a47070c92cf0e2 100644
--- a/modules/test/dap_test.h
+++ b/modules/test/dap_test.h
@@ -66,6 +66,7 @@
 
 #define dap_str_equals(str1, str2) strcmp(str1, str2) == 0
 #define dap_strn_equals(str1, str2, count) strncmp(str1, str2, count) == 0
+int get_cur_time_msec(void);
 
 /*
  How to use benchmark_xxx() functions: