aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/CMakeLists.txt8
-rw-r--r--src/crypto/electrum-words.cpp138
-rw-r--r--src/crypto/electrum-words.h3308
-rw-r--r--src/mnemonics/electrum-words.cpp347
-rw-r--r--src/mnemonics/electrum-words.h100
-rw-r--r--src/mnemonics/wordlists/languages/english2048
-rw-r--r--src/mnemonics/wordlists/languages/japanese2048
-rw-r--r--src/mnemonics/wordlists/languages/portuguese1626
-rw-r--r--src/mnemonics/wordlists/languages/spanish2048
-rw-r--r--src/mnemonics/wordlists/old-word-list1626
-rw-r--r--src/simplewallet/simplewallet.cpp99
-rw-r--r--src/simplewallet/simplewallet.h25
-rw-r--r--src/wallet/wallet2.cpp2
13 files changed, 9966 insertions, 3457 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index e5502cdb9..32115c8f6 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -41,6 +41,9 @@ file(GLOB_RECURSE SIMPLEWALLET simplewallet/*)
file(GLOB_RECURSE CONN_TOOL connectivity_tool/*)
file(GLOB_RECURSE WALLET wallet/*)
file(GLOB_RECURSE MINER miner/*)
+file(GLOB MNEMONICS mnemonics/*)
+
+file(COPY "mnemonics/wordlists/" DESTINATION "${CMAKE_SOURCE_DIR}/build/release/src/wordlists")
source_group(common FILES ${COMMON})
source_group(crypto FILES ${CRYPTO})
@@ -53,10 +56,12 @@ source_group(simplewallet FILES ${SIMPLEWALLET})
source_group(connectivity-tool FILES ${CONN_TOOL})
source_group(wallet FILES ${WALLET})
source_group(simpleminer FILES ${MINER})
+source_group(mnemonics FILES ${MNEMONICS})
add_library(common ${COMMON})
add_library(crypto ${CRYPTO})
add_library(cryptonote_core ${CRYPTONOTE_CORE})
+add_library(mnemonics ${MNEMONICS})
add_executable(daemon ${DAEMON} ${P2P} ${CRYPTONOTE_PROTOCOL})
add_executable(connectivity_tool ${CONN_TOOL})
add_executable(simpleminer ${MINER})
@@ -65,8 +70,9 @@ target_link_libraries(connectivity_tool cryptonote_core crypto common ${UNBOUND_
target_link_libraries(simpleminer cryptonote_core crypto common ${UNBOUND_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
add_library(rpc ${RPC})
add_library(wallet ${WALLET})
+target_link_libraries(wallet mnemonics)
add_executable(simplewallet ${SIMPLEWALLET} )
-target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common ${UNBOUND_LIBRARIES} ${UPNP_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
+target_link_libraries(simplewallet wallet rpc cryptonote_core crypto common mnemonics ${UNBOUND_LIBRARIES} ${UPNP_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
add_dependencies(daemon version)
add_dependencies(rpc version)
add_dependencies(simplewallet version)
diff --git a/src/crypto/electrum-words.cpp b/src/crypto/electrum-words.cpp
deleted file mode 100644
index add71808a..000000000
--- a/src/crypto/electrum-words.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-// Copyright (c) 2014, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-/*
- * This file and its header file are for translating Electrum-style word lists
- * into their equivalent byte representations for cross-compatibility with
- * that method of "backing up" one's wallet keys.
- */
-
-#include <string>
-#include <cassert>
-#include <map>
-#include <cstdint>
-#include <vector>
-#include <boost/algorithm/string.hpp>
-#include "crypto/crypto.h" // for declaration of crypto::secret_key
-
-#include "crypto/electrum-words.h"
-
-namespace crypto
-{
- namespace ElectrumWords
- {
-
- /* convert words to bytes, 3 words -> 4 bytes
- * returns:
- * false if not a multiple of 3 words, or if a words is not in the
- * words list
- *
- * true otherwise
- */
- bool words_to_bytes(const std::string& words, crypto::secret_key& dst)
- {
- int n = NUMWORDS; // hardcoded because this is what electrum uses
-
- std::vector<std::string> wlist;
-
- boost::split(wlist, words, boost::is_any_of(" "));
-
- // error on non-compliant word list
- if (wlist.size() != 12 && wlist.size() != 24) return false;
-
- for (unsigned int i=0; i < wlist.size() / 3; i++)
- {
- uint32_t val;
- uint32_t w1, w2, w3;
-
- // verify all three words exist in the word list
- if (wordsMap.count(wlist[i*3]) == 0 ||
- wordsMap.count(wlist[i*3 + 1]) == 0 ||
- wordsMap.count(wlist[i*3 + 2]) == 0)
- {
- return false;
- }
-
- w1 = wordsMap.at(wlist[i*3]);
- w2 = wordsMap.at(wlist[i*3 + 1]);
- w3 = wordsMap.at(wlist[i*3 + 2]);
-
- val = w1 + n * (((n - w1) + w2) % n) + n * n * (((n - w2) + w3) % n);
-
- if (!(val % n == w1)) return false;
-
- memcpy(dst.data + i * 4, &val, 4); // copy 4 bytes to position
- }
-
- std::string wlist_copy = words;
- if (wlist.size() == 12)
- {
- memcpy(dst.data, dst.data + 16, 16); // if electrum 12-word seed, duplicate
- wlist_copy += ' ';
- wlist_copy += words;
- }
-
- return true;
- }
-
- /* convert bytes to words, 4 bytes-> 3 words
- * returns:
- * false if wrong number of bytes (shouldn't be possible)
- * true otherwise
- */
- bool bytes_to_words(const crypto::secret_key& src, std::string& words)
- {
- int n = NUMWORDS; // hardcoded because this is what electrum uses
-
- if (sizeof(src.data) % 4 != 0) return false;
-
- // 8 bytes -> 3 words. 8 digits base 16 -> 3 digits base 1626
- for (unsigned int i=0; i < sizeof(src.data)/4; i++, words += ' ')
- {
- uint32_t w1, w2, w3;
-
- uint32_t val;
-
- memcpy(&val, (src.data) + (i * 4), 4);
-
- w1 = val % n;
- w2 = ((val / n) + w1) % n;
- w3 = (((val / n) / n) + w2) % n;
-
- words += wordsArray[w1];
- words += ' ';
- words += wordsArray[w2];
- words += ' ';
- words += wordsArray[w3];
- }
- return false;
- }
-
- } // namespace ElectrumWords
-
-} // namespace crypto
diff --git a/src/crypto/electrum-words.h b/src/crypto/electrum-words.h
deleted file mode 100644
index d9e28ada1..000000000
--- a/src/crypto/electrum-words.h
+++ /dev/null
@@ -1,3308 +0,0 @@
-// Copyright (c) 2014, The Monero Project
-//
-// All rights reserved.
-//
-// Redistribution and use in source and binary forms, with or without modification, are
-// permitted provided that the following conditions are met:
-//
-// 1. Redistributions of source code must retain the above copyright notice, this list of
-// conditions and the following disclaimer.
-//
-// 2. Redistributions in binary form must reproduce the above copyright notice, this list
-// of conditions and the following disclaimer in the documentation and/or other
-// materials provided with the distribution.
-//
-// 3. Neither the name of the copyright holder 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
-// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
-// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-/*
- * This file and its cpp file are for translating Electrum-style word lists
- * into their equivalent byte representations for cross-compatibility with
- * that method of "backing up" one's wallet keys.
- */
-
-#include <string>
-#include <cstdint>
-#include <map>
-#include "crypto/crypto.h" // for declaration of crypto::secret_key
-
-namespace crypto
-{
- namespace ElectrumWords
- {
-
- const int NUMWORDS = 1626;
-
- bool words_to_bytes(const std::string& words, crypto::secret_key& dst);
- bool bytes_to_words(const crypto::secret_key& src, std::string& words);
-
- const std::map<std::string,uint32_t> wordsMap = {
- {"like", 0},
- {"just", 1},
- {"love", 2},
- {"know", 3},
- {"never", 4},
- {"want", 5},
- {"time", 6},
- {"out", 7},
- {"there", 8},
- {"make", 9},
- {"look", 10},
- {"eye", 11},
- {"down", 12},
- {"only", 13},
- {"think", 14},
- {"heart", 15},
- {"back", 16},
- {"then", 17},
- {"into", 18},
- {"about", 19},
- {"more", 20},
- {"away", 21},
- {"still", 22},
- {"them", 23},
- {"take", 24},
- {"thing", 25},
- {"even", 26},
- {"through", 27},
- {"long", 28},
- {"always", 29},
- {"world", 30},
- {"too", 31},
- {"friend", 32},
- {"tell", 33},
- {"try", 34},
- {"hand", 35},
- {"thought", 36},
- {"over", 37},
- {"here", 38},
- {"other", 39},
- {"need", 40},
- {"smile", 41},
- {"again", 42},
- {"much", 43},
- {"cry", 44},
- {"been", 45},
- {"night", 46},
- {"ever", 47},
- {"little", 48},
- {"said", 49},
- {"end", 50},
- {"some", 51},
- {"those", 52},
- {"around", 53},
- {"mind", 54},
- {"people", 55},
- {"girl", 56},
- {"leave", 57},
- {"dream", 58},
- {"left", 59},
- {"turn", 60},
- {"myself", 61},
- {"give", 62},
- {"nothing", 63},
- {"really", 64},
- {"off", 65},
- {"before", 66},
- {"something", 67},
- {"find", 68},
- {"walk", 69},
- {"wish", 70},
- {"good", 71},
- {"once", 72},
- {"place", 73},
- {"ask", 74},
- {"stop", 75},
- {"keep", 76},
- {"watch", 77},
- {"seem", 78},
- {"everything", 79},
- {"wait", 80},
- {"got", 81},
- {"yet", 82},
- {"made", 83},
- {"remember", 84},
- {"start", 85},
- {"alone", 86},
- {"run", 87},
- {"hope", 88},
- {"maybe", 89},
- {"believe", 90},
- {"body", 91},
- {"hate", 92},
- {"after", 93},
- {"close", 94},
- {"talk", 95},
- {"stand", 96},
- {"own", 97},
- {"each", 98},
- {"hurt", 99},
- {"help", 100},
- {"home", 101},
- {"god", 102},
- {"soul", 103},
- {"new", 104},
- {"many", 105},
- {"two", 106},
- {"inside", 107},
- {"should", 108},
- {"true", 109},
- {"first", 110},
- {"fear", 111},
- {"mean", 112},
- {"better", 113},
- {"play", 114},
- {"another", 115},
- {"gone", 116},
- {"change", 117},
- {"use", 118},
- {"wonder", 119},
- {"someone", 120},
- {"hair", 121},
- {"cold", 122},
- {"open", 123},
- {"best", 124},
- {"any", 125},
- {"behind", 126},
- {"happen", 127},
- {"water", 128},
- {"dark", 129},
- {"laugh", 130},
- {"stay", 131},
- {"forever", 132},
- {"name", 133},
- {"work", 134},
- {"show", 135},
- {"sky", 136},
- {"break", 137},
- {"came", 138},
- {"deep", 139},
- {"door", 140},
- {"put", 141},
- {"black", 142},
- {"together", 143},
- {"upon", 144},
- {"happy", 145},
- {"such", 146},
- {"great", 147},
- {"white", 148},
- {"matter", 149},
- {"fill", 150},
- {"past", 151},
- {"please", 152},
- {"burn", 153},
- {"cause", 154},
- {"enough", 155},
- {"touch", 156},
- {"moment", 157},
- {"soon", 158},
- {"voice", 159},
- {"scream", 160},
- {"anything", 161},
- {"stare", 162},
- {"sound", 163},
- {"red", 164},
- {"everyone", 165},
- {"hide", 166},
- {"kiss", 167},
- {"truth", 168},
- {"death", 169},
- {"beautiful", 170},
- {"mine", 171},
- {"blood", 172},
- {"broken", 173},
- {"very", 174},
- {"pass", 175},
- {"next", 176},
- {"forget", 177},
- {"tree", 178},
- {"wrong", 179},
- {"air", 180},
- {"mother", 181},
- {"understand", 182},
- {"lip", 183},
- {"hit", 184},
- {"wall", 185},
- {"memory", 186},
- {"sleep", 187},
- {"free", 188},
- {"high", 189},
- {"realize", 190},
- {"school", 191},
- {"might", 192},
- {"skin", 193},
- {"sweet", 194},
- {"perfect", 195},
- {"blue", 196},
- {"kill", 197},
- {"breath", 198},
- {"dance", 199},
- {"against", 200},
- {"fly", 201},
- {"between", 202},
- {"grow", 203},
- {"strong", 204},
- {"under", 205},
- {"listen", 206},
- {"bring", 207},
- {"sometimes", 208},
- {"speak", 209},
- {"pull", 210},
- {"person", 211},
- {"become", 212},
- {"family", 213},
- {"begin", 214},
- {"ground", 215},
- {"real", 216},
- {"small", 217},
- {"father", 218},
- {"sure", 219},
- {"feet", 220},
- {"rest", 221},
- {"young", 222},
- {"finally", 223},
- {"land", 224},
- {"across", 225},
- {"today", 226},
- {"different", 227},
- {"guy", 228},
- {"line", 229},
- {"fire", 230},
- {"reason", 231},
- {"reach", 232},
- {"second", 233},
- {"slowly", 234},
- {"write", 235},
- {"eat", 236},
- {"smell", 237},
- {"mouth", 238},
- {"step", 239},
- {"learn", 240},
- {"three", 241},
- {"floor", 242},
- {"promise", 243},
- {"breathe", 244},
- {"darkness", 245},
- {"push", 246},
- {"earth", 247},
- {"guess", 248},
- {"save", 249},
- {"song", 250},
- {"above", 251},
- {"along", 252},
- {"both", 253},
- {"color", 254},
- {"house", 255},
- {"almost", 256},
- {"sorry", 257},
- {"anymore", 258},
- {"brother", 259},
- {"okay", 260},
- {"dear", 261},
- {"game", 262},
- {"fade", 263},
- {"already", 264},
- {"apart", 265},
- {"warm", 266},
- {"beauty", 267},
- {"heard", 268},
- {"notice", 269},
- {"question", 270},
- {"shine", 271},
- {"began", 272},
- {"piece", 273},
- {"whole", 274},
- {"shadow", 275},
- {"secret", 276},
- {"street", 277},
- {"within", 278},
- {"finger", 279},
- {"point", 280},
- {"morning", 281},
- {"whisper", 282},
- {"child", 283},
- {"moon", 284},
- {"green", 285},
- {"story", 286},
- {"glass", 287},
- {"kid", 288},
- {"silence", 289},
- {"since", 290},
- {"soft", 291},
- {"yourself", 292},
- {"empty", 293},
- {"shall", 294},
- {"angel", 295},
- {"answer", 296},
- {"baby", 297},
- {"bright", 298},
- {"dad", 299},
- {"path", 300},
- {"worry", 301},
- {"hour", 302},
- {"drop", 303},
- {"follow", 304},
- {"power", 305},
- {"war", 306},
- {"half", 307},
- {"flow", 308},
- {"heaven", 309},
- {"act", 310},
- {"chance", 311},
- {"fact", 312},
- {"least", 313},
- {"tired", 314},
- {"children", 315},
- {"near", 316},
- {"quite", 317},
- {"afraid", 318},
- {"rise", 319},
- {"sea", 320},
- {"taste", 321},
- {"window", 322},
- {"cover", 323},
- {"nice", 324},
- {"trust", 325},
- {"lot", 326},
- {"sad", 327},
- {"cool", 328},
- {"force", 329},
- {"peace", 330},
- {"return", 331},
- {"blind", 332},
- {"easy", 333},
- {"ready", 334},
- {"roll", 335},
- {"rose", 336},
- {"drive", 337},
- {"held", 338},
- {"music", 339},
- {"beneath", 340},
- {"hang", 341},
- {"mom", 342},
- {"paint", 343},
- {"emotion", 344},
- {"quiet", 345},
- {"clear", 346},
- {"cloud", 347},
- {"few", 348},
- {"pretty", 349},
- {"bird", 350},
- {"outside", 351},
- {"paper", 352},
- {"picture", 353},
- {"front", 354},
- {"rock", 355},
- {"simple", 356},
- {"anyone", 357},
- {"meant", 358},
- {"reality", 359},
- {"road", 360},
- {"sense", 361},
- {"waste", 362},
- {"bit", 363},
- {"leaf", 364},
- {"thank", 365},
- {"happiness", 366},
- {"meet", 367},
- {"men", 368},
- {"smoke", 369},
- {"truly", 370},
- {"decide", 371},
- {"self", 372},
- {"age", 373},
- {"book", 374},
- {"form", 375},
- {"alive", 376},
- {"carry", 377},
- {"escape", 378},
- {"damn", 379},
- {"instead", 380},
- {"able", 381},
- {"ice", 382},
- {"minute", 383},
- {"throw", 384},
- {"catch", 385},
- {"leg", 386},
- {"ring", 387},
- {"course", 388},
- {"goodbye", 389},
- {"lead", 390},
- {"poem", 391},
- {"sick", 392},
- {"corner", 393},
- {"desire", 394},
- {"known", 395},
- {"problem", 396},
- {"remind", 397},
- {"shoulder", 398},
- {"suppose", 399},
- {"toward", 400},
- {"wave", 401},
- {"drink", 402},
- {"jump", 403},
- {"woman", 404},
- {"pretend", 405},
- {"sister", 406},
- {"week", 407},
- {"human", 408},
- {"joy", 409},
- {"crack", 410},
- {"grey", 411},
- {"pray", 412},
- {"surprise", 413},
- {"dry", 414},
- {"knee", 415},
- {"less", 416},
- {"search", 417},
- {"bleed", 418},
- {"caught", 419},
- {"clean", 420},
- {"embrace", 421},
- {"future", 422},
- {"king", 423},
- {"son", 424},
- {"sorrow", 425},
- {"chest", 426},
- {"hug", 427},
- {"remain", 428},
- {"sat", 429},
- {"worth", 430},
- {"blow", 431},
- {"daddy", 432},
- {"final", 433},
- {"parent", 434},
- {"tight", 435},
- {"also", 436},
- {"create", 437},
- {"lonely", 438},
- {"safe", 439},
- {"cross", 440},
- {"dress", 441},
- {"evil", 442},
- {"silent", 443},
- {"bone", 444},
- {"fate", 445},
- {"perhaps", 446},
- {"anger", 447},
- {"class", 448},
- {"scar", 449},
- {"snow", 450},
- {"tiny", 451},
- {"tonight", 452},
- {"continue", 453},
- {"control", 454},
- {"dog", 455},
- {"edge", 456},
- {"mirror", 457},
- {"month", 458},
- {"suddenly", 459},
- {"comfort", 460},
- {"given", 461},
- {"loud", 462},
- {"quickly", 463},
- {"gaze", 464},
- {"plan", 465},
- {"rush", 466},
- {"stone", 467},
- {"town", 468},
- {"battle", 469},
- {"ignore", 470},
- {"spirit", 471},
- {"stood", 472},
- {"stupid", 473},
- {"yours", 474},
- {"brown", 475},
- {"build", 476},
- {"dust", 477},
- {"hey", 478},
- {"kept", 479},
- {"pay", 480},
- {"phone", 481},
- {"twist", 482},
- {"although", 483},
- {"ball", 484},
- {"beyond", 485},
- {"hidden", 486},
- {"nose", 487},
- {"taken", 488},
- {"fail", 489},
- {"float", 490},
- {"pure", 491},
- {"somehow", 492},
- {"wash", 493},
- {"wrap", 494},
- {"angry", 495},
- {"cheek", 496},
- {"creature", 497},
- {"forgotten", 498},
- {"heat", 499},
- {"rip", 500},
- {"single", 501},
- {"space", 502},
- {"special", 503},
- {"weak", 504},
- {"whatever", 505},
- {"yell", 506},
- {"anyway", 507},
- {"blame", 508},
- {"job", 509},
- {"choose", 510},
- {"country", 511},
- {"curse", 512},
- {"drift", 513},
- {"echo", 514},
- {"figure", 515},
- {"grew", 516},
- {"laughter", 517},
- {"neck", 518},
- {"suffer", 519},
- {"worse", 520},
- {"yeah", 521},
- {"disappear", 522},
- {"foot", 523},
- {"forward", 524},
- {"knife", 525},
- {"mess", 526},
- {"somewhere", 527},
- {"stomach", 528},
- {"storm", 529},
- {"beg", 530},
- {"idea", 531},
- {"lift", 532},
- {"offer", 533},
- {"breeze", 534},
- {"field", 535},
- {"five", 536},
- {"often", 537},
- {"simply", 538},
- {"stuck", 539},
- {"win", 540},
- {"allow", 541},
- {"confuse", 542},
- {"enjoy", 543},
- {"except", 544},
- {"flower", 545},
- {"seek", 546},
- {"strength", 547},
- {"calm", 548},
- {"grin", 549},
- {"gun", 550},
- {"heavy", 551},
- {"hill", 552},
- {"large", 553},
- {"ocean", 554},
- {"shoe", 555},
- {"sigh", 556},
- {"straight", 557},
- {"summer", 558},
- {"tongue", 559},
- {"accept", 560},
- {"crazy", 561},
- {"everyday", 562},
- {"exist", 563},
- {"grass", 564},
- {"mistake", 565},
- {"sent", 566},
- {"shut", 567},
- {"surround", 568},
- {"table", 569},
- {"ache", 570},
- {"brain", 571},
- {"destroy", 572},
- {"heal", 573},
- {"nature", 574},
- {"shout", 575},
- {"sign", 576},
- {"stain", 577},
- {"choice", 578},
- {"doubt", 579},
- {"glance", 580},
- {"glow", 581},
- {"mountain", 582},
- {"queen", 583},
- {"stranger", 584},
- {"throat", 585},
- {"tomorrow", 586},
- {"city", 587},
- {"either", 588},
- {"fish", 589},
- {"flame", 590},
- {"rather", 591},
- {"shape", 592},
- {"spin", 593},
- {"spread", 594},
- {"ash", 595},
- {"distance", 596},
- {"finish", 597},
- {"image", 598},
- {"imagine", 599},
- {"important", 600},
- {"nobody", 601},
- {"shatter", 602},
- {"warmth", 603},
- {"became", 604},
- {"feed", 605},
- {"flesh", 606},
- {"funny", 607},
- {"lust", 608},
- {"shirt", 609},
- {"trouble", 610},
- {"yellow", 611},
- {"attention", 612},
- {"bare", 613},
- {"bite", 614},
- {"money", 615},
- {"protect", 616},
- {"amaze", 617},
- {"appear", 618},
- {"born", 619},
- {"choke", 620},
- {"completely", 621},
- {"daughter", 622},
- {"fresh", 623},
- {"friendship", 624},
- {"gentle", 625},
- {"probably", 626},
- {"six", 627},
- {"deserve", 628},
- {"expect", 629},
- {"grab", 630},
- {"middle", 631},
- {"nightmare", 632},
- {"river", 633},
- {"thousand", 634},
- {"weight", 635},
- {"worst", 636},
- {"wound", 637},
- {"barely", 638},
- {"bottle", 639},
- {"cream", 640},
- {"regret", 641},
- {"relationship", 642},
- {"stick", 643},
- {"test", 644},
- {"crush", 645},
- {"endless", 646},
- {"fault", 647},
- {"itself", 648},
- {"rule", 649},
- {"spill", 650},
- {"art", 651},
- {"circle", 652},
- {"join", 653},
- {"kick", 654},
- {"mask", 655},
- {"master", 656},
- {"passion", 657},
- {"quick", 658},
- {"raise", 659},
- {"smooth", 660},
- {"unless", 661},
- {"wander", 662},
- {"actually", 663},
- {"broke", 664},
- {"chair", 665},
- {"deal", 666},
- {"favorite", 667},
- {"gift", 668},
- {"note", 669},
- {"number", 670},
- {"sweat", 671},
- {"box", 672},
- {"chill", 673},
- {"clothes", 674},
- {"lady", 675},
- {"mark", 676},
- {"park", 677},
- {"poor", 678},
- {"sadness", 679},
- {"tie", 680},
- {"animal", 681},
- {"belong", 682},
- {"brush", 683},
- {"consume", 684},
- {"dawn", 685},
- {"forest", 686},
- {"innocent", 687},
- {"pen", 688},
- {"pride", 689},
- {"stream", 690},
- {"thick", 691},
- {"clay", 692},
- {"complete", 693},
- {"count", 694},
- {"draw", 695},
- {"faith", 696},
- {"press", 697},
- {"silver", 698},
- {"struggle", 699},
- {"surface", 700},
- {"taught", 701},
- {"teach", 702},
- {"wet", 703},
- {"bless", 704},
- {"chase", 705},
- {"climb", 706},
- {"enter", 707},
- {"letter", 708},
- {"melt", 709},
- {"metal", 710},
- {"movie", 711},
- {"stretch", 712},
- {"swing", 713},
- {"vision", 714},
- {"wife", 715},
- {"beside", 716},
- {"crash", 717},
- {"forgot", 718},
- {"guide", 719},
- {"haunt", 720},
- {"joke", 721},
- {"knock", 722},
- {"plant", 723},
- {"pour", 724},
- {"prove", 725},
- {"reveal", 726},
- {"steal", 727},
- {"stuff", 728},
- {"trip", 729},
- {"wood", 730},
- {"wrist", 731},
- {"bother", 732},
- {"bottom", 733},
- {"crawl", 734},
- {"crowd", 735},
- {"fix", 736},
- {"forgive", 737},
- {"frown", 738},
- {"grace", 739},
- {"loose", 740},
- {"lucky", 741},
- {"party", 742},
- {"release", 743},
- {"surely", 744},
- {"survive", 745},
- {"teacher", 746},
- {"gently", 747},
- {"grip", 748},
- {"speed", 749},
- {"suicide", 750},
- {"travel", 751},
- {"treat", 752},
- {"vein", 753},
- {"written", 754},
- {"cage", 755},
- {"chain", 756},
- {"conversation", 757},
- {"date", 758},
- {"enemy", 759},
- {"however", 760},
- {"interest", 761},
- {"million", 762},
- {"page", 763},
- {"pink", 764},
- {"proud", 765},
- {"sway", 766},
- {"themselves", 767},
- {"winter", 768},
- {"church", 769},
- {"cruel", 770},
- {"cup", 771},
- {"demon", 772},
- {"experience", 773},
- {"freedom", 774},
- {"pair", 775},
- {"pop", 776},
- {"purpose", 777},
- {"respect", 778},
- {"shoot", 779},
- {"softly", 780},
- {"state", 781},
- {"strange", 782},
- {"bar", 783},
- {"birth", 784},
- {"curl", 785},
- {"dirt", 786},
- {"excuse", 787},
- {"lord", 788},
- {"lovely", 789},
- {"monster", 790},
- {"order", 791},
- {"pack", 792},
- {"pants", 793},
- {"pool", 794},
- {"scene", 795},
- {"seven", 796},
- {"shame", 797},
- {"slide", 798},
- {"ugly", 799},
- {"among", 800},
- {"blade", 801},
- {"blonde", 802},
- {"closet", 803},
- {"creek", 804},
- {"deny", 805},
- {"drug", 806},
- {"eternity", 807},
- {"gain", 808},
- {"grade", 809},
- {"handle", 810},
- {"key", 811},
- {"linger", 812},
- {"pale", 813},
- {"prepare", 814},
- {"swallow", 815},
- {"swim", 816},
- {"tremble", 817},
- {"wheel", 818},
- {"won", 819},
- {"cast", 820},
- {"cigarette", 821},
- {"claim", 822},
- {"college", 823},
- {"direction", 824},
- {"dirty", 825},
- {"gather", 826},
- {"ghost", 827},
- {"hundred", 828},
- {"loss", 829},
- {"lung", 830},
- {"orange", 831},
- {"present", 832},
- {"swear", 833},
- {"swirl", 834},
- {"twice", 835},
- {"wild", 836},
- {"bitter", 837},
- {"blanket", 838},
- {"doctor", 839},
- {"everywhere", 840},
- {"flash", 841},
- {"grown", 842},
- {"knowledge", 843},
- {"numb", 844},
- {"pressure", 845},
- {"radio", 846},
- {"repeat", 847},
- {"ruin", 848},
- {"spend", 849},
- {"unknown", 850},
- {"buy", 851},
- {"clock", 852},
- {"devil", 853},
- {"early", 854},
- {"false", 855},
- {"fantasy", 856},
- {"pound", 857},
- {"precious", 858},
- {"refuse", 859},
- {"sheet", 860},
- {"teeth", 861},
- {"welcome", 862},
- {"add", 863},
- {"ahead", 864},
- {"block", 865},
- {"bury", 866},
- {"caress", 867},
- {"content", 868},
- {"depth", 869},
- {"despite", 870},
- {"distant", 871},
- {"marry", 872},
- {"purple", 873},
- {"threw", 874},
- {"whenever", 875},
- {"bomb", 876},
- {"dull", 877},
- {"easily", 878},
- {"grasp", 879},
- {"hospital", 880},
- {"innocence", 881},
- {"normal", 882},
- {"receive", 883},
- {"reply", 884},
- {"rhyme", 885},
- {"shade", 886},
- {"someday", 887},
- {"sword", 888},
- {"toe", 889},
- {"visit", 890},
- {"asleep", 891},
- {"bought", 892},
- {"center", 893},
- {"consider", 894},
- {"flat", 895},
- {"hero", 896},
- {"history", 897},
- {"ink", 898},
- {"insane", 899},
- {"muscle", 900},
- {"mystery", 901},
- {"pocket", 902},
- {"reflection", 903},
- {"shove", 904},
- {"silently", 905},
- {"smart", 906},
- {"soldier", 907},
- {"spot", 908},
- {"stress", 909},
- {"train", 910},
- {"type", 911},
- {"view", 912},
- {"whether", 913},
- {"bus", 914},
- {"energy", 915},
- {"explain", 916},
- {"holy", 917},
- {"hunger", 918},
- {"inch", 919},
- {"magic", 920},
- {"mix", 921},
- {"noise", 922},
- {"nowhere", 923},
- {"prayer", 924},
- {"presence", 925},
- {"shock", 926},
- {"snap", 927},
- {"spider", 928},
- {"study", 929},
- {"thunder", 930},
- {"trail", 931},
- {"admit", 932},
- {"agree", 933},
- {"bag", 934},
- {"bang", 935},
- {"bound", 936},
- {"butterfly", 937},
- {"cute", 938},
- {"exactly", 939},
- {"explode", 940},
- {"familiar", 941},
- {"fold", 942},
- {"further", 943},
- {"pierce", 944},
- {"reflect", 945},
- {"scent", 946},
- {"selfish", 947},
- {"sharp", 948},
- {"sink", 949},
- {"spring", 950},
- {"stumble", 951},
- {"universe", 952},
- {"weep", 953},
- {"women", 954},
- {"wonderful", 955},
- {"action", 956},
- {"ancient", 957},
- {"attempt", 958},
- {"avoid", 959},
- {"birthday", 960},
- {"branch", 961},
- {"chocolate", 962},
- {"core", 963},
- {"depress", 964},
- {"drunk", 965},
- {"especially", 966},
- {"focus", 967},
- {"fruit", 968},
- {"honest", 969},
- {"match", 970},
- {"palm", 971},
- {"perfectly", 972},
- {"pillow", 973},
- {"pity", 974},
- {"poison", 975},
- {"roar", 976},
- {"shift", 977},
- {"slightly", 978},
- {"thump", 979},
- {"truck", 980},
- {"tune", 981},
- {"twenty", 982},
- {"unable", 983},
- {"wipe", 984},
- {"wrote", 985},
- {"coat", 986},
- {"constant", 987},
- {"dinner", 988},
- {"drove", 989},
- {"egg", 990},
- {"eternal", 991},
- {"flight", 992},
- {"flood", 993},
- {"frame", 994},
- {"freak", 995},
- {"gasp", 996},
- {"glad", 997},
- {"hollow", 998},
- {"motion", 999},
- {"peer", 1000},
- {"plastic", 1001},
- {"root", 1002},
- {"screen", 1003},
- {"season", 1004},
- {"sting", 1005},
- {"strike", 1006},
- {"team", 1007},
- {"unlike", 1008},
- {"victim", 1009},
- {"volume", 1010},
- {"warn", 1011},
- {"weird", 1012},
- {"attack", 1013},
- {"await", 1014},
- {"awake", 1015},
- {"built", 1016},
- {"charm", 1017},
- {"crave", 1018},
- {"despair", 1019},
- {"fought", 1020},
- {"grant", 1021},
- {"grief", 1022},
- {"horse", 1023},
- {"limit", 1024},
- {"message", 1025},
- {"ripple", 1026},
- {"sanity", 1027},
- {"scatter", 1028},
- {"serve", 1029},
- {"split", 1030},
- {"string", 1031},
- {"trick", 1032},
- {"annoy", 1033},
- {"blur", 1034},
- {"boat", 1035},
- {"brave", 1036},
- {"clearly", 1037},
- {"cling", 1038},
- {"connect", 1039},
- {"fist", 1040},
- {"forth", 1041},
- {"imagination", 1042},
- {"iron", 1043},
- {"jock", 1044},
- {"judge", 1045},
- {"lesson", 1046},
- {"milk", 1047},
- {"misery", 1048},
- {"nail", 1049},
- {"naked", 1050},
- {"ourselves", 1051},
- {"poet", 1052},
- {"possible", 1053},
- {"princess", 1054},
- {"sail", 1055},
- {"size", 1056},
- {"snake", 1057},
- {"society", 1058},
- {"stroke", 1059},
- {"torture", 1060},
- {"toss", 1061},
- {"trace", 1062},
- {"wise", 1063},
- {"bloom", 1064},
- {"bullet", 1065},
- {"cell", 1066},
- {"check", 1067},
- {"cost", 1068},
- {"darling", 1069},
- {"during", 1070},
- {"footstep", 1071},
- {"fragile", 1072},
- {"hallway", 1073},
- {"hardly", 1074},
- {"horizon", 1075},
- {"invisible", 1076},
- {"journey", 1077},
- {"midnight", 1078},
- {"mud", 1079},
- {"nod", 1080},
- {"pause", 1081},
- {"relax", 1082},
- {"shiver", 1083},
- {"sudden", 1084},
- {"value", 1085},
- {"youth", 1086},
- {"abuse", 1087},
- {"admire", 1088},
- {"blink", 1089},
- {"breast", 1090},
- {"bruise", 1091},
- {"constantly", 1092},
- {"couple", 1093},
- {"creep", 1094},
- {"curve", 1095},
- {"difference", 1096},
- {"dumb", 1097},
- {"emptiness", 1098},
- {"gotta", 1099},
- {"honor", 1100},
- {"plain", 1101},
- {"planet", 1102},
- {"recall", 1103},
- {"rub", 1104},
- {"ship", 1105},
- {"slam", 1106},
- {"soar", 1107},
- {"somebody", 1108},
- {"tightly", 1109},
- {"weather", 1110},
- {"adore", 1111},
- {"approach", 1112},
- {"bond", 1113},
- {"bread", 1114},
- {"burst", 1115},
- {"candle", 1116},
- {"coffee", 1117},
- {"cousin", 1118},
- {"crime", 1119},
- {"desert", 1120},
- {"flutter", 1121},
- {"frozen", 1122},
- {"grand", 1123},
- {"heel", 1124},
- {"hello", 1125},
- {"language", 1126},
- {"level", 1127},
- {"movement", 1128},
- {"pleasure", 1129},
- {"powerful", 1130},
- {"random", 1131},
- {"rhythm", 1132},
- {"settle", 1133},
- {"silly", 1134},
- {"slap", 1135},
- {"sort", 1136},
- {"spoken", 1137},
- {"steel", 1138},
- {"threaten", 1139},
- {"tumble", 1140},
- {"upset", 1141},
- {"aside", 1142},
- {"awkward", 1143},
- {"bee", 1144},
- {"blank", 1145},
- {"board", 1146},
- {"button", 1147},
- {"card", 1148},
- {"carefully", 1149},
- {"complain", 1150},
- {"crap", 1151},
- {"deeply", 1152},
- {"discover", 1153},
- {"drag", 1154},
- {"dread", 1155},
- {"effort", 1156},
- {"entire", 1157},
- {"fairy", 1158},
- {"giant", 1159},
- {"gotten", 1160},
- {"greet", 1161},
- {"illusion", 1162},
- {"jeans", 1163},
- {"leap", 1164},
- {"liquid", 1165},
- {"march", 1166},
- {"mend", 1167},
- {"nervous", 1168},
- {"nine", 1169},
- {"replace", 1170},
- {"rope", 1171},
- {"spine", 1172},
- {"stole", 1173},
- {"terror", 1174},
- {"accident", 1175},
- {"apple", 1176},
- {"balance", 1177},
- {"boom", 1178},
- {"childhood", 1179},
- {"collect", 1180},
- {"demand", 1181},
- {"depression", 1182},
- {"eventually", 1183},
- {"faint", 1184},
- {"glare", 1185},
- {"goal", 1186},
- {"group", 1187},
- {"honey", 1188},
- {"kitchen", 1189},
- {"laid", 1190},
- {"limb", 1191},
- {"machine", 1192},
- {"mere", 1193},
- {"mold", 1194},
- {"murder", 1195},
- {"nerve", 1196},
- {"painful", 1197},
- {"poetry", 1198},
- {"prince", 1199},
- {"rabbit", 1200},
- {"shelter", 1201},
- {"shore", 1202},
- {"shower", 1203},
- {"soothe", 1204},
- {"stair", 1205},
- {"steady", 1206},
- {"sunlight", 1207},
- {"tangle", 1208},
- {"tease", 1209},
- {"treasure", 1210},
- {"uncle", 1211},
- {"begun", 1212},
- {"bliss", 1213},
- {"canvas", 1214},
- {"cheer", 1215},
- {"claw", 1216},
- {"clutch", 1217},
- {"commit", 1218},
- {"crimson", 1219},
- {"crystal", 1220},
- {"delight", 1221},
- {"doll", 1222},
- {"existence", 1223},
- {"express", 1224},
- {"fog", 1225},
- {"football", 1226},
- {"gay", 1227},
- {"goose", 1228},
- {"guard", 1229},
- {"hatred", 1230},
- {"illuminate", 1231},
- {"mass", 1232},
- {"math", 1233},
- {"mourn", 1234},
- {"rich", 1235},
- {"rough", 1236},
- {"skip", 1237},
- {"stir", 1238},
- {"student", 1239},
- {"style", 1240},
- {"support", 1241},
- {"thorn", 1242},
- {"tough", 1243},
- {"yard", 1244},
- {"yearn", 1245},
- {"yesterday", 1246},
- {"advice", 1247},
- {"appreciate", 1248},
- {"autumn", 1249},
- {"bank", 1250},
- {"beam", 1251},
- {"bowl", 1252},
- {"capture", 1253},
- {"carve", 1254},
- {"collapse", 1255},
- {"confusion", 1256},
- {"creation", 1257},
- {"dove", 1258},
- {"feather", 1259},
- {"girlfriend", 1260},
- {"glory", 1261},
- {"government", 1262},
- {"harsh", 1263},
- {"hop", 1264},
- {"inner", 1265},
- {"loser", 1266},
- {"moonlight", 1267},
- {"neighbor", 1268},
- {"neither", 1269},
- {"peach", 1270},
- {"pig", 1271},
- {"praise", 1272},
- {"screw", 1273},
- {"shield", 1274},
- {"shimmer", 1275},
- {"sneak", 1276},
- {"stab", 1277},
- {"subject", 1278},
- {"throughout", 1279},
- {"thrown", 1280},
- {"tower", 1281},
- {"twirl", 1282},
- {"wow", 1283},
- {"army", 1284},
- {"arrive", 1285},
- {"bathroom", 1286},
- {"bump", 1287},
- {"cease", 1288},
- {"cookie", 1289},
- {"couch", 1290},
- {"courage", 1291},
- {"dim", 1292},
- {"guilt", 1293},
- {"howl", 1294},
- {"hum", 1295},
- {"husband", 1296},
- {"insult", 1297},
- {"led", 1298},
- {"lunch", 1299},
- {"mock", 1300},
- {"mostly", 1301},
- {"natural", 1302},
- {"nearly", 1303},
- {"needle", 1304},
- {"nerd", 1305},
- {"peaceful", 1306},
- {"perfection", 1307},
- {"pile", 1308},
- {"price", 1309},
- {"remove", 1310},
- {"roam", 1311},
- {"sanctuary", 1312},
- {"serious", 1313},
- {"shiny", 1314},
- {"shook", 1315},
- {"sob", 1316},
- {"stolen", 1317},
- {"tap", 1318},
- {"vain", 1319},
- {"void", 1320},
- {"warrior", 1321},
- {"wrinkle", 1322},
- {"affection", 1323},
- {"apologize", 1324},
- {"blossom", 1325},
- {"bounce", 1326},
- {"bridge", 1327},
- {"cheap", 1328},
- {"crumble", 1329},
- {"decision", 1330},
- {"descend", 1331},
- {"desperately", 1332},
- {"dig", 1333},
- {"dot", 1334},
- {"flip", 1335},
- {"frighten", 1336},
- {"heartbeat", 1337},
- {"huge", 1338},
- {"lazy", 1339},
- {"lick", 1340},
- {"odd", 1341},
- {"opinion", 1342},
- {"process", 1343},
- {"puzzle", 1344},
- {"quietly", 1345},
- {"retreat", 1346},
- {"score", 1347},
- {"sentence", 1348},
- {"separate", 1349},
- {"situation", 1350},
- {"skill", 1351},
- {"soak", 1352},
- {"square", 1353},
- {"stray", 1354},
- {"taint", 1355},
- {"task", 1356},
- {"tide", 1357},
- {"underneath", 1358},
- {"veil", 1359},
- {"whistle", 1360},
- {"anywhere", 1361},
- {"bedroom", 1362},
- {"bid", 1363},
- {"bloody", 1364},
- {"burden", 1365},
- {"careful", 1366},
- {"compare", 1367},
- {"concern", 1368},
- {"curtain", 1369},
- {"decay", 1370},
- {"defeat", 1371},
- {"describe", 1372},
- {"double", 1373},
- {"dreamer", 1374},
- {"driver", 1375},
- {"dwell", 1376},
- {"evening", 1377},
- {"flare", 1378},
- {"flicker", 1379},
- {"grandma", 1380},
- {"guitar", 1381},
- {"harm", 1382},
- {"horrible", 1383},
- {"hungry", 1384},
- {"indeed", 1385},
- {"lace", 1386},
- {"melody", 1387},
- {"monkey", 1388},
- {"nation", 1389},
- {"object", 1390},
- {"obviously", 1391},
- {"rainbow", 1392},
- {"salt", 1393},
- {"scratch", 1394},
- {"shown", 1395},
- {"shy", 1396},
- {"stage", 1397},
- {"stun", 1398},
- {"third", 1399},
- {"tickle", 1400},
- {"useless", 1401},
- {"weakness", 1402},
- {"worship", 1403},
- {"worthless", 1404},
- {"afternoon", 1405},
- {"beard", 1406},
- {"boyfriend", 1407},
- {"bubble", 1408},
- {"busy", 1409},
- {"certain", 1410},
- {"chin", 1411},
- {"concrete", 1412},
- {"desk", 1413},
- {"diamond", 1414},
- {"doom", 1415},
- {"drawn", 1416},
- {"due", 1417},
- {"felicity", 1418},
- {"freeze", 1419},
- {"frost", 1420},
- {"garden", 1421},
- {"glide", 1422},
- {"harmony", 1423},
- {"hopefully", 1424},
- {"hunt", 1425},
- {"jealous", 1426},
- {"lightning", 1427},
- {"mama", 1428},
- {"mercy", 1429},
- {"peel", 1430},
- {"physical", 1431},
- {"position", 1432},
- {"pulse", 1433},
- {"punch", 1434},
- {"quit", 1435},
- {"rant", 1436},
- {"respond", 1437},
- {"salty", 1438},
- {"sane", 1439},
- {"satisfy", 1440},
- {"savior", 1441},
- {"sheep", 1442},
- {"slept", 1443},
- {"social", 1444},
- {"sport", 1445},
- {"tuck", 1446},
- {"utter", 1447},
- {"valley", 1448},
- {"wolf", 1449},
- {"aim", 1450},
- {"alas", 1451},
- {"alter", 1452},
- {"arrow", 1453},
- {"awaken", 1454},
- {"beaten", 1455},
- {"belief", 1456},
- {"brand", 1457},
- {"ceiling", 1458},
- {"cheese", 1459},
- {"clue", 1460},
- {"confidence", 1461},
- {"connection", 1462},
- {"daily", 1463},
- {"disguise", 1464},
- {"eager", 1465},
- {"erase", 1466},
- {"essence", 1467},
- {"everytime", 1468},
- {"expression", 1469},
- {"fan", 1470},
- {"flag", 1471},
- {"flirt", 1472},
- {"foul", 1473},
- {"fur", 1474},
- {"giggle", 1475},
- {"glorious", 1476},
- {"ignorance", 1477},
- {"law", 1478},
- {"lifeless", 1479},
- {"measure", 1480},
- {"mighty", 1481},
- {"muse", 1482},
- {"north", 1483},
- {"opposite", 1484},
- {"paradise", 1485},
- {"patience", 1486},
- {"patient", 1487},
- {"pencil", 1488},
- {"petal", 1489},
- {"plate", 1490},
- {"ponder", 1491},
- {"possibly", 1492},
- {"practice", 1493},
- {"slice", 1494},
- {"spell", 1495},
- {"stock", 1496},
- {"strife", 1497},
- {"strip", 1498},
- {"suffocate", 1499},
- {"suit", 1500},
- {"tender", 1501},
- {"tool", 1502},
- {"trade", 1503},
- {"velvet", 1504},
- {"verse", 1505},
- {"waist", 1506},
- {"witch", 1507},
- {"aunt", 1508},
- {"bench", 1509},
- {"bold", 1510},
- {"cap", 1511},
- {"certainly", 1512},
- {"click", 1513},
- {"companion", 1514},
- {"creator", 1515},
- {"dart", 1516},
- {"delicate", 1517},
- {"determine", 1518},
- {"dish", 1519},
- {"dragon", 1520},
- {"drama", 1521},
- {"drum", 1522},
- {"dude", 1523},
- {"everybody", 1524},
- {"feast", 1525},
- {"forehead", 1526},
- {"former", 1527},
- {"fright", 1528},
- {"fully", 1529},
- {"gas", 1530},
- {"hook", 1531},
- {"hurl", 1532},
- {"invite", 1533},
- {"juice", 1534},
- {"manage", 1535},
- {"moral", 1536},
- {"possess", 1537},
- {"raw", 1538},
- {"rebel", 1539},
- {"royal", 1540},
- {"scale", 1541},
- {"scary", 1542},
- {"several", 1543},
- {"slight", 1544},
- {"stubborn", 1545},
- {"swell", 1546},
- {"talent", 1547},
- {"tea", 1548},
- {"terrible", 1549},
- {"thread", 1550},
- {"torment", 1551},
- {"trickle", 1552},
- {"usually", 1553},
- {"vast", 1554},
- {"violence", 1555},
- {"weave", 1556},
- {"acid", 1557},
- {"agony", 1558},
- {"ashamed", 1559},
- {"awe", 1560},
- {"belly", 1561},
- {"blend", 1562},
- {"blush", 1563},
- {"character", 1564},
- {"cheat", 1565},
- {"common", 1566},
- {"company", 1567},
- {"coward", 1568},
- {"creak", 1569},
- {"danger", 1570},
- {"deadly", 1571},
- {"defense", 1572},
- {"define", 1573},
- {"depend", 1574},
- {"desperate", 1575},
- {"destination", 1576},
- {"dew", 1577},
- {"duck", 1578},
- {"dusty", 1579},
- {"embarrass", 1580},
- {"engine", 1581},
- {"example", 1582},
- {"explore", 1583},
- {"foe", 1584},
- {"freely", 1585},
- {"frustrate", 1586},
- {"generation", 1587},
- {"glove", 1588},
- {"guilty", 1589},
- {"health", 1590},
- {"hurry", 1591},
- {"idiot", 1592},
- {"impossible", 1593},
- {"inhale", 1594},
- {"jaw", 1595},
- {"kingdom", 1596},
- {"mention", 1597},
- {"mist", 1598},
- {"moan", 1599},
- {"mumble", 1600},
- {"mutter", 1601},
- {"observe", 1602},
- {"ode", 1603},
- {"pathetic", 1604},
- {"pattern", 1605},
- {"pie", 1606},
- {"prefer", 1607},
- {"puff", 1608},
- {"rape", 1609},
- {"rare", 1610},
- {"revenge", 1611},
- {"rude", 1612},
- {"scrape", 1613},
- {"spiral", 1614},
- {"squeeze", 1615},
- {"strain", 1616},
- {"sunset", 1617},
- {"suspend", 1618},
- {"sympathy", 1619},
- {"thigh", 1620},
- {"throne", 1621},
- {"total", 1622},
- {"unseen", 1623},
- {"weapon", 1624},
- {"weary", 1625}
- };
-
- const std::string wordsArray[] = {
- "like",
- "just",
- "love",
- "know",
- "never",
- "want",
- "time",
- "out",
- "there",
- "make",
- "look",
- "eye",
- "down",
- "only",
- "think",
- "heart",
- "back",
- "then",
- "into",
- "about",
- "more",
- "away",
- "still",
- "them",
- "take",
- "thing",
- "even",
- "through",
- "long",
- "always",
- "world",
- "too",
- "friend",
- "tell",
- "try",
- "hand",
- "thought",
- "over",
- "here",
- "other",
- "need",
- "smile",
- "again",
- "much",
- "cry",
- "been",
- "night",
- "ever",
- "little",
- "said",
- "end",
- "some",
- "those",
- "around",
- "mind",
- "people",
- "girl",
- "leave",
- "dream",
- "left",
- "turn",
- "myself",
- "give",
- "nothing",
- "really",
- "off",
- "before",
- "something",
- "find",
- "walk",
- "wish",
- "good",
- "once",
- "place",
- "ask",
- "stop",
- "keep",
- "watch",
- "seem",
- "everything",
- "wait",
- "got",
- "yet",
- "made",
- "remember",
- "start",
- "alone",
- "run",
- "hope",
- "maybe",
- "believe",
- "body",
- "hate",
- "after",
- "close",
- "talk",
- "stand",
- "own",
- "each",
- "hurt",
- "help",
- "home",
- "god",
- "soul",
- "new",
- "many",
- "two",
- "inside",
- "should",
- "true",
- "first",
- "fear",
- "mean",
- "better",
- "play",
- "another",
- "gone",
- "change",
- "use",
- "wonder",
- "someone",
- "hair",
- "cold",
- "open",
- "best",
- "any",
- "behind",
- "happen",
- "water",
- "dark",
- "laugh",
- "stay",
- "forever",
- "name",
- "work",
- "show",
- "sky",
- "break",
- "came",
- "deep",
- "door",
- "put",
- "black",
- "together",
- "upon",
- "happy",
- "such",
- "great",
- "white",
- "matter",
- "fill",
- "past",
- "please",
- "burn",
- "cause",
- "enough",
- "touch",
- "moment",
- "soon",
- "voice",
- "scream",
- "anything",
- "stare",
- "sound",
- "red",
- "everyone",
- "hide",
- "kiss",
- "truth",
- "death",
- "beautiful",
- "mine",
- "blood",
- "broken",
- "very",
- "pass",
- "next",
- "forget",
- "tree",
- "wrong",
- "air",
- "mother",
- "understand",
- "lip",
- "hit",
- "wall",
- "memory",
- "sleep",
- "free",
- "high",
- "realize",
- "school",
- "might",
- "skin",
- "sweet",
- "perfect",
- "blue",
- "kill",
- "breath",
- "dance",
- "against",
- "fly",
- "between",
- "grow",
- "strong",
- "under",
- "listen",
- "bring",
- "sometimes",
- "speak",
- "pull",
- "person",
- "become",
- "family",
- "begin",
- "ground",
- "real",
- "small",
- "father",
- "sure",
- "feet",
- "rest",
- "young",
- "finally",
- "land",
- "across",
- "today",
- "different",
- "guy",
- "line",
- "fire",
- "reason",
- "reach",
- "second",
- "slowly",
- "write",
- "eat",
- "smell",
- "mouth",
- "step",
- "learn",
- "three",
- "floor",
- "promise",
- "breathe",
- "darkness",
- "push",
- "earth",
- "guess",
- "save",
- "song",
- "above",
- "along",
- "both",
- "color",
- "house",
- "almost",
- "sorry",
- "anymore",
- "brother",
- "okay",
- "dear",
- "game",
- "fade",
- "already",
- "apart",
- "warm",
- "beauty",
- "heard",
- "notice",
- "question",
- "shine",
- "began",
- "piece",
- "whole",
- "shadow",
- "secret",
- "street",
- "within",
- "finger",
- "point",
- "morning",
- "whisper",
- "child",
- "moon",
- "green",
- "story",
- "glass",
- "kid",
- "silence",
- "since",
- "soft",
- "yourself",
- "empty",
- "shall",
- "angel",
- "answer",
- "baby",
- "bright",
- "dad",
- "path",
- "worry",
- "hour",
- "drop",
- "follow",
- "power",
- "war",
- "half",
- "flow",
- "heaven",
- "act",
- "chance",
- "fact",
- "least",
- "tired",
- "children",
- "near",
- "quite",
- "afraid",
- "rise",
- "sea",
- "taste",
- "window",
- "cover",
- "nice",
- "trust",
- "lot",
- "sad",
- "cool",
- "force",
- "peace",
- "return",
- "blind",
- "easy",
- "ready",
- "roll",
- "rose",
- "drive",
- "held",
- "music",
- "beneath",
- "hang",
- "mom",
- "paint",
- "emotion",
- "quiet",
- "clear",
- "cloud",
- "few",
- "pretty",
- "bird",
- "outside",
- "paper",
- "picture",
- "front",
- "rock",
- "simple",
- "anyone",
- "meant",
- "reality",
- "road",
- "sense",
- "waste",
- "bit",
- "leaf",
- "thank",
- "happiness",
- "meet",
- "men",
- "smoke",
- "truly",
- "decide",
- "self",
- "age",
- "book",
- "form",
- "alive",
- "carry",
- "escape",
- "damn",
- "instead",
- "able",
- "ice",
- "minute",
- "throw",
- "catch",
- "leg",
- "ring",
- "course",
- "goodbye",
- "lead",
- "poem",
- "sick",
- "corner",
- "desire",
- "known",
- "problem",
- "remind",
- "shoulder",
- "suppose",
- "toward",
- "wave",
- "drink",
- "jump",
- "woman",
- "pretend",
- "sister",
- "week",
- "human",
- "joy",
- "crack",
- "grey",
- "pray",
- "surprise",
- "dry",
- "knee",
- "less",
- "search",
- "bleed",
- "caught",
- "clean",
- "embrace",
- "future",
- "king",
- "son",
- "sorrow",
- "chest",
- "hug",
- "remain",
- "sat",
- "worth",
- "blow",
- "daddy",
- "final",
- "parent",
- "tight",
- "also",
- "create",
- "lonely",
- "safe",
- "cross",
- "dress",
- "evil",
- "silent",
- "bone",
- "fate",
- "perhaps",
- "anger",
- "class",
- "scar",
- "snow",
- "tiny",
- "tonight",
- "continue",
- "control",
- "dog",
- "edge",
- "mirror",
- "month",
- "suddenly",
- "comfort",
- "given",
- "loud",
- "quickly",
- "gaze",
- "plan",
- "rush",
- "stone",
- "town",
- "battle",
- "ignore",
- "spirit",
- "stood",
- "stupid",
- "yours",
- "brown",
- "build",
- "dust",
- "hey",
- "kept",
- "pay",
- "phone",
- "twist",
- "although",
- "ball",
- "beyond",
- "hidden",
- "nose",
- "taken",
- "fail",
- "float",
- "pure",
- "somehow",
- "wash",
- "wrap",
- "angry",
- "cheek",
- "creature",
- "forgotten",
- "heat",
- "rip",
- "single",
- "space",
- "special",
- "weak",
- "whatever",
- "yell",
- "anyway",
- "blame",
- "job",
- "choose",
- "country",
- "curse",
- "drift",
- "echo",
- "figure",
- "grew",
- "laughter",
- "neck",
- "suffer",
- "worse",
- "yeah",
- "disappear",
- "foot",
- "forward",
- "knife",
- "mess",
- "somewhere",
- "stomach",
- "storm",
- "beg",
- "idea",
- "lift",
- "offer",
- "breeze",
- "field",
- "five",
- "often",
- "simply",
- "stuck",
- "win",
- "allow",
- "confuse",
- "enjoy",
- "except",
- "flower",
- "seek",
- "strength",
- "calm",
- "grin",
- "gun",
- "heavy",
- "hill",
- "large",
- "ocean",
- "shoe",
- "sigh",
- "straight",
- "summer",
- "tongue",
- "accept",
- "crazy",
- "everyday",
- "exist",
- "grass",
- "mistake",
- "sent",
- "shut",
- "surround",
- "table",
- "ache",
- "brain",
- "destroy",
- "heal",
- "nature",
- "shout",
- "sign",
- "stain",
- "choice",
- "doubt",
- "glance",
- "glow",
- "mountain",
- "queen",
- "stranger",
- "throat",
- "tomorrow",
- "city",
- "either",
- "fish",
- "flame",
- "rather",
- "shape",
- "spin",
- "spread",
- "ash",
- "distance",
- "finish",
- "image",
- "imagine",
- "important",
- "nobody",
- "shatter",
- "warmth",
- "became",
- "feed",
- "flesh",
- "funny",
- "lust",
- "shirt",
- "trouble",
- "yellow",
- "attention",
- "bare",
- "bite",
- "money",
- "protect",
- "amaze",
- "appear",
- "born",
- "choke",
- "completely",
- "daughter",
- "fresh",
- "friendship",
- "gentle",
- "probably",
- "six",
- "deserve",
- "expect",
- "grab",
- "middle",
- "nightmare",
- "river",
- "thousand",
- "weight",
- "worst",
- "wound",
- "barely",
- "bottle",
- "cream",
- "regret",
- "relationship",
- "stick",
- "test",
- "crush",
- "endless",
- "fault",
- "itself",
- "rule",
- "spill",
- "art",
- "circle",
- "join",
- "kick",
- "mask",
- "master",
- "passion",
- "quick",
- "raise",
- "smooth",
- "unless",
- "wander",
- "actually",
- "broke",
- "chair",
- "deal",
- "favorite",
- "gift",
- "note",
- "number",
- "sweat",
- "box",
- "chill",
- "clothes",
- "lady",
- "mark",
- "park",
- "poor",
- "sadness",
- "tie",
- "animal",
- "belong",
- "brush",
- "consume",
- "dawn",
- "forest",
- "innocent",
- "pen",
- "pride",
- "stream",
- "thick",
- "clay",
- "complete",
- "count",
- "draw",
- "faith",
- "press",
- "silver",
- "struggle",
- "surface",
- "taught",
- "teach",
- "wet",
- "bless",
- "chase",
- "climb",
- "enter",
- "letter",
- "melt",
- "metal",
- "movie",
- "stretch",
- "swing",
- "vision",
- "wife",
- "beside",
- "crash",
- "forgot",
- "guide",
- "haunt",
- "joke",
- "knock",
- "plant",
- "pour",
- "prove",
- "reveal",
- "steal",
- "stuff",
- "trip",
- "wood",
- "wrist",
- "bother",
- "bottom",
- "crawl",
- "crowd",
- "fix",
- "forgive",
- "frown",
- "grace",
- "loose",
- "lucky",
- "party",
- "release",
- "surely",
- "survive",
- "teacher",
- "gently",
- "grip",
- "speed",
- "suicide",
- "travel",
- "treat",
- "vein",
- "written",
- "cage",
- "chain",
- "conversation",
- "date",
- "enemy",
- "however",
- "interest",
- "million",
- "page",
- "pink",
- "proud",
- "sway",
- "themselves",
- "winter",
- "church",
- "cruel",
- "cup",
- "demon",
- "experience",
- "freedom",
- "pair",
- "pop",
- "purpose",
- "respect",
- "shoot",
- "softly",
- "state",
- "strange",
- "bar",
- "birth",
- "curl",
- "dirt",
- "excuse",
- "lord",
- "lovely",
- "monster",
- "order",
- "pack",
- "pants",
- "pool",
- "scene",
- "seven",
- "shame",
- "slide",
- "ugly",
- "among",
- "blade",
- "blonde",
- "closet",
- "creek",
- "deny",
- "drug",
- "eternity",
- "gain",
- "grade",
- "handle",
- "key",
- "linger",
- "pale",
- "prepare",
- "swallow",
- "swim",
- "tremble",
- "wheel",
- "won",
- "cast",
- "cigarette",
- "claim",
- "college",
- "direction",
- "dirty",
- "gather",
- "ghost",
- "hundred",
- "loss",
- "lung",
- "orange",
- "present",
- "swear",
- "swirl",
- "twice",
- "wild",
- "bitter",
- "blanket",
- "doctor",
- "everywhere",
- "flash",
- "grown",
- "knowledge",
- "numb",
- "pressure",
- "radio",
- "repeat",
- "ruin",
- "spend",
- "unknown",
- "buy",
- "clock",
- "devil",
- "early",
- "false",
- "fantasy",
- "pound",
- "precious",
- "refuse",
- "sheet",
- "teeth",
- "welcome",
- "add",
- "ahead",
- "block",
- "bury",
- "caress",
- "content",
- "depth",
- "despite",
- "distant",
- "marry",
- "purple",
- "threw",
- "whenever",
- "bomb",
- "dull",
- "easily",
- "grasp",
- "hospital",
- "innocence",
- "normal",
- "receive",
- "reply",
- "rhyme",
- "shade",
- "someday",
- "sword",
- "toe",
- "visit",
- "asleep",
- "bought",
- "center",
- "consider",
- "flat",
- "hero",
- "history",
- "ink",
- "insane",
- "muscle",
- "mystery",
- "pocket",
- "reflection",
- "shove",
- "silently",
- "smart",
- "soldier",
- "spot",
- "stress",
- "train",
- "type",
- "view",
- "whether",
- "bus",
- "energy",
- "explain",
- "holy",
- "hunger",
- "inch",
- "magic",
- "mix",
- "noise",
- "nowhere",
- "prayer",
- "presence",
- "shock",
- "snap",
- "spider",
- "study",
- "thunder",
- "trail",
- "admit",
- "agree",
- "bag",
- "bang",
- "bound",
- "butterfly",
- "cute",
- "exactly",
- "explode",
- "familiar",
- "fold",
- "further",
- "pierce",
- "reflect",
- "scent",
- "selfish",
- "sharp",
- "sink",
- "spring",
- "stumble",
- "universe",
- "weep",
- "women",
- "wonderful",
- "action",
- "ancient",
- "attempt",
- "avoid",
- "birthday",
- "branch",
- "chocolate",
- "core",
- "depress",
- "drunk",
- "especially",
- "focus",
- "fruit",
- "honest",
- "match",
- "palm",
- "perfectly",
- "pillow",
- "pity",
- "poison",
- "roar",
- "shift",
- "slightly",
- "thump",
- "truck",
- "tune",
- "twenty",
- "unable",
- "wipe",
- "wrote",
- "coat",
- "constant",
- "dinner",
- "drove",
- "egg",
- "eternal",
- "flight",
- "flood",
- "frame",
- "freak",
- "gasp",
- "glad",
- "hollow",
- "motion",
- "peer",
- "plastic",
- "root",
- "screen",
- "season",
- "sting",
- "strike",
- "team",
- "unlike",
- "victim",
- "volume",
- "warn",
- "weird",
- "attack",
- "await",
- "awake",
- "built",
- "charm",
- "crave",
- "despair",
- "fought",
- "grant",
- "grief",
- "horse",
- "limit",
- "message",
- "ripple",
- "sanity",
- "scatter",
- "serve",
- "split",
- "string",
- "trick",
- "annoy",
- "blur",
- "boat",
- "brave",
- "clearly",
- "cling",
- "connect",
- "fist",
- "forth",
- "imagination",
- "iron",
- "jock",
- "judge",
- "lesson",
- "milk",
- "misery",
- "nail",
- "naked",
- "ourselves",
- "poet",
- "possible",
- "princess",
- "sail",
- "size",
- "snake",
- "society",
- "stroke",
- "torture",
- "toss",
- "trace",
- "wise",
- "bloom",
- "bullet",
- "cell",
- "check",
- "cost",
- "darling",
- "during",
- "footstep",
- "fragile",
- "hallway",
- "hardly",
- "horizon",
- "invisible",
- "journey",
- "midnight",
- "mud",
- "nod",
- "pause",
- "relax",
- "shiver",
- "sudden",
- "value",
- "youth",
- "abuse",
- "admire",
- "blink",
- "breast",
- "bruise",
- "constantly",
- "couple",
- "creep",
- "curve",
- "difference",
- "dumb",
- "emptiness",
- "gotta",
- "honor",
- "plain",
- "planet",
- "recall",
- "rub",
- "ship",
- "slam",
- "soar",
- "somebody",
- "tightly",
- "weather",
- "adore",
- "approach",
- "bond",
- "bread",
- "burst",
- "candle",
- "coffee",
- "cousin",
- "crime",
- "desert",
- "flutter",
- "frozen",
- "grand",
- "heel",
- "hello",
- "language",
- "level",
- "movement",
- "pleasure",
- "powerful",
- "random",
- "rhythm",
- "settle",
- "silly",
- "slap",
- "sort",
- "spoken",
- "steel",
- "threaten",
- "tumble",
- "upset",
- "aside",
- "awkward",
- "bee",
- "blank",
- "board",
- "button",
- "card",
- "carefully",
- "complain",
- "crap",
- "deeply",
- "discover",
- "drag",
- "dread",
- "effort",
- "entire",
- "fairy",
- "giant",
- "gotten",
- "greet",
- "illusion",
- "jeans",
- "leap",
- "liquid",
- "march",
- "mend",
- "nervous",
- "nine",
- "replace",
- "rope",
- "spine",
- "stole",
- "terror",
- "accident",
- "apple",
- "balance",
- "boom",
- "childhood",
- "collect",
- "demand",
- "depression",
- "eventually",
- "faint",
- "glare",
- "goal",
- "group",
- "honey",
- "kitchen",
- "laid",
- "limb",
- "machine",
- "mere",
- "mold",
- "murder",
- "nerve",
- "painful",
- "poetry",
- "prince",
- "rabbit",
- "shelter",
- "shore",
- "shower",
- "soothe",
- "stair",
- "steady",
- "sunlight",
- "tangle",
- "tease",
- "treasure",
- "uncle",
- "begun",
- "bliss",
- "canvas",
- "cheer",
- "claw",
- "clutch",
- "commit",
- "crimson",
- "crystal",
- "delight",
- "doll",
- "existence",
- "express",
- "fog",
- "football",
- "gay",
- "goose",
- "guard",
- "hatred",
- "illuminate",
- "mass",
- "math",
- "mourn",
- "rich",
- "rough",
- "skip",
- "stir",
- "student",
- "style",
- "support",
- "thorn",
- "tough",
- "yard",
- "yearn",
- "yesterday",
- "advice",
- "appreciate",
- "autumn",
- "bank",
- "beam",
- "bowl",
- "capture",
- "carve",
- "collapse",
- "confusion",
- "creation",
- "dove",
- "feather",
- "girlfriend",
- "glory",
- "government",
- "harsh",
- "hop",
- "inner",
- "loser",
- "moonlight",
- "neighbor",
- "neither",
- "peach",
- "pig",
- "praise",
- "screw",
- "shield",
- "shimmer",
- "sneak",
- "stab",
- "subject",
- "throughout",
- "thrown",
- "tower",
- "twirl",
- "wow",
- "army",
- "arrive",
- "bathroom",
- "bump",
- "cease",
- "cookie",
- "couch",
- "courage",
- "dim",
- "guilt",
- "howl",
- "hum",
- "husband",
- "insult",
- "led",
- "lunch",
- "mock",
- "mostly",
- "natural",
- "nearly",
- "needle",
- "nerd",
- "peaceful",
- "perfection",
- "pile",
- "price",
- "remove",
- "roam",
- "sanctuary",
- "serious",
- "shiny",
- "shook",
- "sob",
- "stolen",
- "tap",
- "vain",
- "void",
- "warrior",
- "wrinkle",
- "affection",
- "apologize",
- "blossom",
- "bounce",
- "bridge",
- "cheap",
- "crumble",
- "decision",
- "descend",
- "desperately",
- "dig",
- "dot",
- "flip",
- "frighten",
- "heartbeat",
- "huge",
- "lazy",
- "lick",
- "odd",
- "opinion",
- "process",
- "puzzle",
- "quietly",
- "retreat",
- "score",
- "sentence",
- "separate",
- "situation",
- "skill",
- "soak",
- "square",
- "stray",
- "taint",
- "task",
- "tide",
- "underneath",
- "veil",
- "whistle",
- "anywhere",
- "bedroom",
- "bid",
- "bloody",
- "burden",
- "careful",
- "compare",
- "concern",
- "curtain",
- "decay",
- "defeat",
- "describe",
- "double",
- "dreamer",
- "driver",
- "dwell",
- "evening",
- "flare",
- "flicker",
- "grandma",
- "guitar",
- "harm",
- "horrible",
- "hungry",
- "indeed",
- "lace",
- "melody",
- "monkey",
- "nation",
- "object",
- "obviously",
- "rainbow",
- "salt",
- "scratch",
- "shown",
- "shy",
- "stage",
- "stun",
- "third",
- "tickle",
- "useless",
- "weakness",
- "worship",
- "worthless",
- "afternoon",
- "beard",
- "boyfriend",
- "bubble",
- "busy",
- "certain",
- "chin",
- "concrete",
- "desk",
- "diamond",
- "doom",
- "drawn",
- "due",
- "felicity",
- "freeze",
- "frost",
- "garden",
- "glide",
- "harmony",
- "hopefully",
- "hunt",
- "jealous",
- "lightning",
- "mama",
- "mercy",
- "peel",
- "physical",
- "position",
- "pulse",
- "punch",
- "quit",
- "rant",
- "respond",
- "salty",
- "sane",
- "satisfy",
- "savior",
- "sheep",
- "slept",
- "social",
- "sport",
- "tuck",
- "utter",
- "valley",
- "wolf",
- "aim",
- "alas",
- "alter",
- "arrow",
- "awaken",
- "beaten",
- "belief",
- "brand",
- "ceiling",
- "cheese",
- "clue",
- "confidence",
- "connection",
- "daily",
- "disguise",
- "eager",
- "erase",
- "essence",
- "everytime",
- "expression",
- "fan",
- "flag",
- "flirt",
- "foul",
- "fur",
- "giggle",
- "glorious",
- "ignorance",
- "law",
- "lifeless",
- "measure",
- "mighty",
- "muse",
- "north",
- "opposite",
- "paradise",
- "patience",
- "patient",
- "pencil",
- "petal",
- "plate",
- "ponder",
- "possibly",
- "practice",
- "slice",
- "spell",
- "stock",
- "strife",
- "strip",
- "suffocate",
- "suit",
- "tender",
- "tool",
- "trade",
- "velvet",
- "verse",
- "waist",
- "witch",
- "aunt",
- "bench",
- "bold",
- "cap",
- "certainly",
- "click",
- "companion",
- "creator",
- "dart",
- "delicate",
- "determine",
- "dish",
- "dragon",
- "drama",
- "drum",
- "dude",
- "everybody",
- "feast",
- "forehead",
- "former",
- "fright",
- "fully",
- "gas",
- "hook",
- "hurl",
- "invite",
- "juice",
- "manage",
- "moral",
- "possess",
- "raw",
- "rebel",
- "royal",
- "scale",
- "scary",
- "several",
- "slight",
- "stubborn",
- "swell",
- "talent",
- "tea",
- "terrible",
- "thread",
- "torment",
- "trickle",
- "usually",
- "vast",
- "violence",
- "weave",
- "acid",
- "agony",
- "ashamed",
- "awe",
- "belly",
- "blend",
- "blush",
- "character",
- "cheat",
- "common",
- "company",
- "coward",
- "creak",
- "danger",
- "deadly",
- "defense",
- "define",
- "depend",
- "desperate",
- "destination",
- "dew",
- "duck",
- "dusty",
- "embarrass",
- "engine",
- "example",
- "explore",
- "foe",
- "freely",
- "frustrate",
- "generation",
- "glove",
- "guilty",
- "health",
- "hurry",
- "idiot",
- "impossible",
- "inhale",
- "jaw",
- "kingdom",
- "mention",
- "mist",
- "moan",
- "mumble",
- "mutter",
- "observe",
- "ode",
- "pathetic",
- "pattern",
- "pie",
- "prefer",
- "puff",
- "rape",
- "rare",
- "revenge",
- "rude",
- "scrape",
- "spiral",
- "squeeze",
- "strain",
- "sunset",
- "suspend",
- "sympathy",
- "thigh",
- "throne",
- "total",
- "unseen",
- "weapon",
- "weary"
- };
- }
-}
diff --git a/src/mnemonics/electrum-words.cpp b/src/mnemonics/electrum-words.cpp
new file mode 100644
index 000000000..d1fae84cb
--- /dev/null
+++ b/src/mnemonics/electrum-words.cpp
@@ -0,0 +1,347 @@
+// Copyright (c) 2014, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/*!
+ * \file electrum-words.cpp
+ *
+ * \brief Mnemonic seed generation and wallet restoration from them.
+ *
+ * This file and its header file are for translating Electrum-style word lists
+ * into their equivalent byte representations for cross-compatibility with
+ * that method of "backing up" one's wallet keys.
+ */
+
+#include <string>
+#include <cassert>
+#include <map>
+#include <cstdint>
+#include <vector>
+#include <boost/algorithm/string.hpp>
+#include "crypto/crypto.h" // for declaration of crypto::secret_key
+#include <fstream>
+#include "mnemonics/electrum-words.h"
+#include <stdexcept>
+#include <boost/filesystem.hpp>
+#include <boost/crc.hpp>
+#include <boost/algorithm/string/join.hpp>
+
+namespace
+{
+ int num_words = 0;
+ const int seed_length = 24;
+
+ std::map<std::string,uint32_t> words_map;
+ std::vector<std::string> words_array;
+
+ bool is_old_style_word_list = false;
+
+ const std::string WORD_LISTS_DIRECTORY = "wordlists";
+ const std::string LANGUAGES_DIRECTORY = "languages";
+ const std::string OLD_WORD_FILE = "old-word-list";
+
+ /*!
+ * \brief Tells if the module hasn't been initialized with a word list file.
+ * \return true if the module hasn't been initialized with a word list file false otherwise.
+ */
+ bool is_uninitialized()
+ {
+ return num_words == 0 ? true : false;
+ }
+
+ /*!
+ * \brief Create word list map and array data structres for use during inter-conversion between
+ * words and secret key.
+ * \param word_file Path to the word list file from pwd.
+ */
+ void create_data_structures(const std::string &word_file)
+ {
+ words_array.clear();
+ words_map.clear();
+ num_words = 0;
+ std::ifstream input_stream;
+ input_stream.open(word_file.c_str(), std::ifstream::in);
+
+ if (!input_stream)
+ throw std::runtime_error("Word list file couldn't be opened.");
+
+ std::string word;
+ while (input_stream >> word)
+ {
+ words_array.push_back(word);
+ words_map[word] = num_words;
+ num_words++;
+ }
+ input_stream.close();
+ }
+
+ /*!
+ * \brief Tells if all the words passed in wlist was present in current word list file.
+ * \param wlist List of words to match.
+ * \return true if all the words were present false if not.
+ */
+ bool word_list_file_match(const std::vector<std::string> &wlist)
+ {
+ for (std::vector<std::string>::const_iterator it = wlist.begin(); it != wlist.end(); it++)
+ {
+ if (words_map.count(*it) == 0)
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /*!
+ * \brief Creates a checksum index in the word list array on the list of words.
+ * \param words Space separated list of words
+ * \return Checksum index
+ */
+ uint32_t create_checksum_index(const std::string &words)
+ {
+ boost::crc_32_type result;
+ result.process_bytes(words.data(), words.length());
+ return result.checksum() % seed_length;
+ }
+}
+
+/*!
+ * \namespace crypto
+ *
+ * \brief crypto namespace.
+ */
+namespace crypto
+{
+ /*!
+ * \namespace crypto::ElectrumWords
+ *
+ * \brief Mnemonic seed word generation and wallet restoration helper functions.
+ */
+ namespace ElectrumWords
+ {
+ /*!
+ * \brief Called to initialize it work with a word list file.
+ * \param language Language of the word list file.
+ * \param old_word_list true it is to use the old style word list file false if not.
+ */
+ void init(const std::string &language, bool old_word_list)
+ {
+ if (old_word_list)
+ {
+ // Use the old word list file if told to.
+ create_data_structures(WORD_LISTS_DIRECTORY + '/' + OLD_WORD_FILE);
+ is_old_style_word_list = true;
+ }
+ else
+ {
+ create_data_structures(WORD_LISTS_DIRECTORY + '/' + LANGUAGES_DIRECTORY + '/' + language);
+ is_old_style_word_list = false;
+ }
+ if (num_words == 0)
+ {
+ throw std::runtime_error(std::string("Word list file is empty: ") +
+ (old_word_list ? OLD_WORD_FILE : (LANGUAGES_DIRECTORY + '/' + language)));
+ }
+ }
+
+ /*!
+ * \brief Converts seed words to bytes (secret key).
+ * \param words String containing the words separated by spaces.
+ * \param dst To put the secret key restored from the words.
+ * \return false if not a multiple of 3 words, or if word is not in the words list
+ */
+ bool words_to_bytes(const std::string& words, crypto::secret_key& dst)
+ {
+ std::vector<std::string> wlist;
+
+ boost::split(wlist, words, boost::is_any_of(" "));
+
+ // If it is seed with a checksum.
+ if (wlist.size() == seed_length + 1)
+ {
+ // The last word is the checksum.
+ std::string last_word = wlist.back();
+ wlist.pop_back();
+
+ std::string checksum = wlist[create_checksum_index(boost::algorithm::join(wlist, " "))];
+
+ if (checksum != last_word)
+ {
+ // Checksum fail
+ return false;
+ }
+ }
+ // Try to find a word list file that contains all the words in the word list.
+ std::vector<std::string> languages;
+ get_language_list(languages);
+
+ std::vector<std::string>::iterator it;
+ for (it = languages.begin(); it != languages.end(); it++)
+ {
+ init(*it);
+ if (word_list_file_match(wlist))
+ {
+ break;
+ }
+ }
+ // If no such file was found, see if the old style word list file has them all.
+ if (it == languages.end())
+ {
+ init("", true);
+ if (!word_list_file_match(wlist))
+ {
+ return false;
+ }
+ }
+ int n = num_words;
+
+ // error on non-compliant word list
+ if (wlist.size() != 12 && wlist.size() != 24) return false;
+
+ for (unsigned int i=0; i < wlist.size() / 3; i++)
+ {
+ uint32_t val;
+ uint32_t w1, w2, w3;
+
+ w1 = words_map.at(wlist[i*3]);
+ w2 = words_map.at(wlist[i*3 + 1]);
+ w3 = words_map.at(wlist[i*3 + 2]);
+
+ val = w1 + n * (((n - w1) + w2) % n) + n * n * (((n - w2) + w3) % n);
+
+ if (!(val % n == w1)) return false;
+
+ memcpy(dst.data + i * 4, &val, 4); // copy 4 bytes to position
+ }
+
+ std::string wlist_copy = words;
+ if (wlist.size() == 12)
+ {
+ memcpy(dst.data, dst.data + 16, 16); // if electrum 12-word seed, duplicate
+ wlist_copy += ' ';
+ wlist_copy += words;
+ }
+
+ return true;
+ }
+
+ /*!
+ * \brief Converts bytes (secret key) to seed words.
+ * \param src Secret key
+ * \param words Space delimited concatenated words get written here.
+ * \return true if successful false if not. Unsuccessful if wrong key size.
+ */
+ bool bytes_to_words(const crypto::secret_key& src, std::string& words)
+ {
+ if (is_uninitialized())
+ {
+ init("english", true);
+ }
+
+ // To store the words for random access to add the checksum word later.
+ std::vector<std::string> words_store;
+ int n = num_words;
+
+ if (sizeof(src.data) % 4 != 0 || sizeof(src.data) == 0) return false;
+
+ // 8 bytes -> 3 words. 8 digits base 16 -> 3 digits base 1626
+ for (unsigned int i=0; i < sizeof(src.data)/4; i++, words += ' ')
+ {
+ uint32_t w1, w2, w3;
+
+ uint32_t val;
+
+ memcpy(&val, (src.data) + (i * 4), 4);
+
+ w1 = val % n;
+ w2 = ((val / n) + w1) % n;
+ w3 = (((val / n) / n) + w2) % n;
+
+ words += words_array[w1];
+ words += ' ';
+ words += words_array[w2];
+ words += ' ';
+ words += words_array[w3];
+
+ words_store.push_back(words_array[w1]);
+ words_store.push_back(words_array[w2]);
+ words_store.push_back(words_array[w3]);
+ }
+
+ words.pop_back();
+ words += (' ' + words_store[create_checksum_index(words)]);
+ return false;
+ }
+
+ /*!
+ * \brief Gets a list of seed languages that are supported.
+ * \param languages The vector is set to the list of languages.
+ */
+ void get_language_list(std::vector<std::string> &languages)
+ {
+ languages.clear();
+ boost::filesystem::path languages_directory("wordlists/languages");
+ if (!boost::filesystem::exists(languages_directory) ||
+ !boost::filesystem::is_directory(languages_directory))
+ {
+ throw std::runtime_error("Word list languages directory is missing.");
+ }
+ boost::filesystem::directory_iterator end;
+ for (boost::filesystem::directory_iterator it(languages_directory); it != end; it++)
+ {
+ languages.push_back(it->path().filename().string());
+ }
+ }
+
+ /*!
+ * \brief Tells if the module is currenly using an old style word list.
+ * \return true if it is currenly using an old style word list false if not.
+ */
+ bool get_is_old_style_word_list()
+ {
+ if (is_uninitialized())
+ {
+ throw std::runtime_error("ElectrumWords hasn't been initialized with a word list yet.");
+ }
+ return is_old_style_word_list;
+ }
+
+ /*!
+ * \brief Tells if the seed passed is an old style seed or not.
+ * \param seed The seed to check (a space delimited concatenated word list)
+ * \return true if the seed passed is a old style seed false if not.
+ */
+ bool get_is_old_style_seed(const std::string &seed)
+ {
+ std::vector<std::string> wlist;
+ boost::split(wlist, seed, boost::is_any_of(" "));
+ return wlist.size() != (seed_length + 1);
+ }
+
+ }
+
+}
diff --git a/src/mnemonics/electrum-words.h b/src/mnemonics/electrum-words.h
new file mode 100644
index 000000000..c10e216e8
--- /dev/null
+++ b/src/mnemonics/electrum-words.h
@@ -0,0 +1,100 @@
+// Copyright (c) 2014, The Monero Project
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without modification, are
+// permitted provided that the following conditions are met:
+//
+// 1. Redistributions of source code must retain the above copyright notice, this list of
+// conditions and the following disclaimer.
+//
+// 2. Redistributions in binary form must reproduce the above copyright notice, this list
+// of conditions and the following disclaimer in the documentation and/or other
+// materials provided with the distribution.
+//
+// 3. Neither the name of the copyright holder 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 THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
+// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
+// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+/*!
+ * \file electrum-words.h
+ *
+ * \brief Mnemonic seed generation and wallet restoration from them.
+ *
+ * This file and its cpp file are for translating Electrum-style word lists
+ * into their equivalent byte representations for cross-compatibility with
+ * that method of "backing up" one's wallet keys.
+ */
+
+#include <string>
+#include <cstdint>
+#include <map>
+#include "crypto/crypto.h" // for declaration of crypto::secret_key
+
+/*!
+ * \namespace crypto
+ *
+ * \brief crypto namespace.
+ */
+namespace crypto
+{
+ /*!
+ * \namespace crypto::ElectrumWords
+ *
+ * \brief Mnemonic seed word generation and wallet restoration helper functions.
+ */
+ namespace ElectrumWords
+ {
+ /*!
+ * \brief Called to initialize it to work with a word list file.
+ * \param language Language of the word list file.
+ * \param old_word_list Whether it is to use the old style word list file.
+ */
+ void init(const std::string &language, bool old_word_list=false);
+
+ /*!
+ * \brief Converts seed words to bytes (secret key).
+ * \param words String containing the words separated by spaces.
+ * \param dst To put the secret key restored from the words.
+ * \return false if not a multiple of 3 words, or if word is not in the words list
+ */
+ bool words_to_bytes(const std::string& words, crypto::secret_key& dst);
+
+ /*!
+ * \brief Converts bytes (secret key) to seed words.
+ * \param src Secret key
+ * \param words Space delimited concatenated words get written here.
+ * \return true if successful false if not. Unsuccessful if wrong key size.
+ */
+ bool bytes_to_words(const crypto::secret_key& src, std::string& words);
+
+ /*!
+ * \brief Gets a list of seed languages that are supported.
+ * \param languages The vector is set to the list of languages.
+ */
+ void get_language_list(std::vector<std::string> &languages);
+
+ /*!
+ * \brief If the module is currenly using an old style word list.
+ * \return true if it is currenly using an old style word list false if not.
+ */
+ bool get_is_old_style_word_list();
+
+ /*!
+ * \brief Tells if the seed passed is an old style seed or not.
+ * \param seed The seed to check (a space delimited concatenated word list)
+ * \return true if the seed passed is a old style seed false if not.
+ */
+ bool get_is_old_style_seed(const std::string &seed);
+ }
+}
diff --git a/src/mnemonics/wordlists/languages/english b/src/mnemonics/wordlists/languages/english
new file mode 100644
index 000000000..942040ed5
--- /dev/null
+++ b/src/mnemonics/wordlists/languages/english
@@ -0,0 +1,2048 @@
+abandon
+ability
+able
+about
+above
+absent
+absorb
+abstract
+absurd
+abuse
+access
+accident
+account
+accuse
+achieve
+acid
+acoustic
+acquire
+across
+act
+action
+actor
+actress
+actual
+adapt
+add
+addict
+address
+adjust
+admit
+adult
+advance
+advice
+aerobic
+affair
+afford
+afraid
+again
+age
+agent
+agree
+ahead
+aim
+air
+airport
+aisle
+alarm
+album
+alcohol
+alert
+alien
+all
+alley
+allow
+almost
+alone
+alpha
+already
+also
+alter
+always
+amateur
+amazing
+among
+amount
+amused
+analyst
+anchor
+ancient
+anger
+angle
+angry
+animal
+ankle
+announce
+annual
+another
+answer
+antenna
+antique
+anxiety
+any
+apart
+apology
+appear
+apple
+approve
+april
+arch
+arctic
+area
+arena
+argue
+arm
+armed
+armor
+army
+around
+arrange
+arrest
+arrive
+arrow
+art
+artefact
+artist
+artwork
+ask
+aspect
+assault
+asset
+assist
+assume
+asthma
+athlete
+atom
+attack
+attend
+attitude
+attract
+auction
+audit
+august
+aunt
+author
+auto
+autumn
+average
+avocado
+avoid
+awake
+aware
+away
+awesome
+awful
+awkward
+axis
+baby
+bachelor
+bacon
+badge
+bag
+balance
+balcony
+ball
+bamboo
+banana
+banner
+bar
+barely
+bargain
+barrel
+base
+basic
+basket
+battle
+beach
+bean
+beauty
+because
+become
+beef
+before
+begin
+behave
+behind
+believe
+below
+belt
+bench
+benefit
+best
+betray
+better
+between
+beyond
+bicycle
+bid
+bike
+bind
+biology
+bird
+birth
+bitter
+black
+blade
+blame
+blanket
+blast
+bleak
+bless
+blind
+blood
+blossom
+blouse
+blue
+blur
+blush
+board
+boat
+body
+boil
+bomb
+bone
+bonus
+book
+boost
+border
+boring
+borrow
+boss
+bottom
+bounce
+box
+boy
+bracket
+brain
+brand
+brass
+brave
+bread
+breeze
+brick
+bridge
+brief
+bright
+bring
+brisk
+broccoli
+broken
+bronze
+broom
+brother
+brown
+brush
+bubble
+buddy
+budget
+buffalo
+build
+bulb
+bulk
+bullet
+bundle
+bunker
+burden
+burger
+burst
+bus
+business
+busy
+butter
+buyer
+buzz
+cabbage
+cabin
+cable
+cactus
+cage
+cake
+call
+calm
+camera
+camp
+can
+canal
+cancel
+candy
+cannon
+canoe
+canvas
+canyon
+capable
+capital
+captain
+car
+carbon
+card
+cargo
+carpet
+carry
+cart
+case
+cash
+casino
+castle
+casual
+cat
+catalog
+catch
+category
+cattle
+caught
+cause
+caution
+cave
+ceiling
+celery
+cement
+census
+century
+cereal
+certain
+chair
+chalk
+champion
+change
+chaos
+chapter
+charge
+chase
+chat
+cheap
+check
+cheese
+chef
+cherry
+chest
+chicken
+chief
+child
+chimney
+choice
+choose
+chronic
+chuckle
+chunk
+churn
+cigar
+cinnamon
+circle
+citizen
+city
+civil
+claim
+clap
+clarify
+claw
+clay
+clean
+clerk
+clever
+click
+client
+cliff
+climb
+clinic
+clip
+clock
+clog
+close
+cloth
+cloud
+clown
+club
+clump
+cluster
+clutch
+coach
+coast
+coconut
+code
+coffee
+coil
+coin
+collect
+color
+column
+combine
+come
+comfort
+comic
+common
+company
+concert
+conduct
+confirm
+congress
+connect
+consider
+control
+convince
+cook
+cool
+copper
+copy
+coral
+core
+corn
+correct
+cost
+cotton
+couch
+country
+couple
+course
+cousin
+cover
+coyote
+crack
+cradle
+craft
+cram
+crane
+crash
+crater
+crawl
+crazy
+cream
+credit
+creek
+crew
+cricket
+crime
+crisp
+critic
+crop
+cross
+crouch
+crowd
+crucial
+cruel
+cruise
+crumble
+crunch
+crush
+cry
+crystal
+cube
+culture
+cup
+cupboard
+curious
+current
+curtain
+curve
+cushion
+custom
+cute
+cycle
+dad
+damage
+damp
+dance
+danger
+daring
+dash
+daughter
+dawn
+day
+deal
+debate
+debris
+decade
+december
+decide
+decline
+decorate
+decrease
+deer
+defense
+define
+defy
+degree
+delay
+deliver
+demand
+demise
+denial
+dentist
+deny
+depart
+depend
+deposit
+depth
+deputy
+derive
+describe
+desert
+design
+desk
+despair
+destroy
+detail
+detect
+develop
+device
+devote
+diagram
+dial
+diamond
+diary
+dice
+diesel
+diet
+differ
+digital
+dignity
+dilemma
+dinner
+dinosaur
+direct
+dirt
+disagree
+discover
+disease
+dish
+dismiss
+disorder
+display
+distance
+divert
+divide
+divorce
+dizzy
+doctor
+document
+dog
+doll
+dolphin
+domain
+donate
+donkey
+donor
+door
+dose
+double
+dove
+draft
+dragon
+drama
+drastic
+draw
+dream
+dress
+drift
+drill
+drink
+drip
+drive
+drop
+drum
+dry
+duck
+dumb
+dune
+during
+dust
+dutch
+duty
+dwarf
+dynamic
+eager
+eagle
+early
+earn
+earth
+easily
+east
+easy
+echo
+ecology
+economy
+edge
+edit
+educate
+effort
+egg
+eight
+either
+elbow
+elder
+electric
+elegant
+element
+elephant
+elevator
+elite
+else
+embark
+embody
+embrace
+emerge
+emotion
+employ
+empower
+empty
+enable
+enact
+end
+endless
+endorse
+enemy
+energy
+enforce
+engage
+engine
+enhance
+enjoy
+enlist
+enough
+enrich
+enroll
+ensure
+enter
+entire
+entry
+envelope
+episode
+equal
+equip
+era
+erase
+erode
+erosion
+error
+erupt
+escape
+essay
+essence
+estate
+eternal
+ethics
+evidence
+evil
+evoke
+evolve
+exact
+example
+excess
+exchange
+excite
+exclude
+excuse
+execute
+exercise
+exhaust
+exhibit
+exile
+exist
+exit
+exotic
+expand
+expect
+expire
+explain
+expose
+express
+extend
+extra
+eye
+eyebrow
+fabric
+face
+faculty
+fade
+faint
+faith
+fall
+false
+fame
+family
+famous
+fan
+fancy
+fantasy
+farm
+fashion
+fat
+fatal
+father
+fatigue
+fault
+favorite
+feature
+february
+federal
+fee
+feed
+feel
+female
+fence
+festival
+fetch
+fever
+few
+fiber
+fiction
+field
+figure
+file
+film
+filter
+final
+find
+fine
+finger
+finish
+fire
+firm
+first
+fiscal
+fish
+fit
+fitness
+fix
+flag
+flame
+flash
+flat
+flavor
+flee
+flight
+flip
+float
+flock
+floor
+flower
+fluid
+flush
+fly
+foam
+focus
+fog
+foil
+fold
+follow
+food
+foot
+force
+forest
+forget
+fork
+fortune
+forum
+forward
+fossil
+foster
+found
+fox
+fragile
+frame
+frequent
+fresh
+friend
+fringe
+frog
+front
+frost
+frown
+frozen
+fruit
+fuel
+fun
+funny
+furnace
+fury
+future
+gadget
+gain
+galaxy
+gallery
+game
+gap
+garage
+garbage
+garden
+garlic
+garment
+gas
+gasp
+gate
+gather
+gauge
+gaze
+general
+genius
+genre
+gentle
+genuine
+gesture
+ghost
+giant
+gift
+giggle
+ginger
+giraffe
+girl
+give
+glad
+glance
+glare
+glass
+glide
+glimpse
+globe
+gloom
+glory
+glove
+glow
+glue
+goat
+goddess
+gold
+good
+goose
+gorilla
+gospel
+gossip
+govern
+gown
+grab
+grace
+grain
+grant
+grape
+grass
+gravity
+great
+green
+grid
+grief
+grit
+grocery
+group
+grow
+grunt
+guard
+guess
+guide
+guilt
+guitar
+gun
+gym
+habit
+hair
+half
+hammer
+hamster
+hand
+happy
+harbor
+hard
+harsh
+harvest
+hat
+have
+hawk
+hazard
+head
+health
+heart
+heavy
+hedgehog
+height
+hello
+helmet
+help
+hen
+hero
+hidden
+high
+hill
+hint
+hip
+hire
+history
+hobby
+hockey
+hold
+hole
+holiday
+hollow
+home
+honey
+hood
+hope
+horn
+horror
+horse
+hospital
+host
+hotel
+hour
+hover
+hub
+huge
+human
+humble
+humor
+hundred
+hungry
+hunt
+hurdle
+hurry
+hurt
+husband
+hybrid
+ice
+icon
+idea
+identify
+idle
+ignore
+ill
+illegal
+illness
+image
+imitate
+immense
+immune
+impact
+impose
+improve
+impulse
+inch
+include
+income
+increase
+index
+indicate
+indoor
+industry
+infant
+inflict
+inform
+inhale
+inherit
+initial
+inject
+injury
+inmate
+inner
+innocent
+input
+inquiry
+insane
+insect
+inside
+inspire
+install
+intact
+interest
+into
+invest
+invite
+involve
+iron
+island
+isolate
+issue
+item
+ivory
+jacket
+jaguar
+jar
+jazz
+jealous
+jeans
+jelly
+jewel
+job
+join
+joke
+journey
+joy
+judge
+juice
+jump
+jungle
+junior
+junk
+just
+kangaroo
+keen
+keep
+ketchup
+key
+kick
+kid
+kidney
+kind
+kingdom
+kiss
+kit
+kitchen
+kite
+kitten
+kiwi
+knee
+knife
+knock
+know
+lab
+label
+labor
+ladder
+lady
+lake
+lamp
+language
+laptop
+large
+later
+latin
+laugh
+laundry
+lava
+law
+lawn
+lawsuit
+layer
+lazy
+leader
+leaf
+learn
+leave
+lecture
+left
+leg
+legal
+legend
+leisure
+lemon
+lend
+length
+lens
+leopard
+lesson
+letter
+level
+liar
+liberty
+library
+license
+life
+lift
+light
+like
+limb
+limit
+link
+lion
+liquid
+list
+little
+live
+lizard
+load
+loan
+lobster
+local
+lock
+logic
+lonely
+long
+loop
+lottery
+loud
+lounge
+love
+loyal
+lucky
+luggage
+lumber
+lunar
+lunch
+luxury
+lyrics
+machine
+mad
+magic
+magnet
+maid
+mail
+main
+major
+make
+mammal
+man
+manage
+mandate
+mango
+mansion
+manual
+maple
+marble
+march
+margin
+marine
+market
+marriage
+mask
+mass
+master
+match
+material
+math
+matrix
+matter
+maximum
+maze
+meadow
+mean
+measure
+meat
+mechanic
+medal
+media
+melody
+melt
+member
+memory
+mention
+menu
+mercy
+merge
+merit
+merry
+mesh
+message
+metal
+method
+middle
+midnight
+milk
+million
+mimic
+mind
+minimum
+minor
+minute
+miracle
+mirror
+misery
+miss
+mistake
+mix
+mixed
+mixture
+mobile
+model
+modify
+mom
+moment
+monitor
+monkey
+monster
+month
+moon
+moral
+more
+morning
+mosquito
+mother
+motion
+motor
+mountain
+mouse
+move
+movie
+much
+muffin
+mule
+multiply
+muscle
+museum
+mushroom
+music
+must
+mutual
+myself
+mystery
+myth
+naive
+name
+napkin
+narrow
+nasty
+nation
+nature
+near
+neck
+need
+negative
+neglect
+neither
+nephew
+nerve
+nest
+net
+network
+neutral
+never
+news
+next
+nice
+night
+noble
+noise
+nominee
+noodle
+normal
+north
+nose
+notable
+note
+nothing
+notice
+novel
+now
+nuclear
+number
+nurse
+nut
+oak
+obey
+object
+oblige
+obscure
+observe
+obtain
+obvious
+occur
+ocean
+october
+odor
+off
+offer
+office
+often
+oil
+okay
+old
+olive
+olympic
+omit
+once
+one
+onion
+online
+only
+open
+opera
+opinion
+oppose
+option
+orange
+orbit
+orchard
+order
+ordinary
+organ
+orient
+original
+orphan
+ostrich
+other
+outdoor
+outer
+output
+outside
+oval
+oven
+over
+own
+owner
+oxygen
+oyster
+ozone
+pact
+paddle
+page
+pair
+palace
+palm
+panda
+panel
+panic
+panther
+paper
+parade
+parent
+park
+parrot
+party
+pass
+patch
+path
+patient
+patrol
+pattern
+pause
+pave
+payment
+peace
+peanut
+pear
+peasant
+pelican
+pen
+penalty
+pencil
+people
+pepper
+perfect
+permit
+person
+pet
+phone
+photo
+phrase
+physical
+piano
+picnic
+picture
+piece
+pig
+pigeon
+pill
+pilot
+pink
+pioneer
+pipe
+pistol
+pitch
+pizza
+place
+planet
+plastic
+plate
+play
+please
+pledge
+pluck
+plug
+plunge
+poem
+poet
+point
+polar
+pole
+police
+pond
+pony
+pool
+popular
+portion
+position
+possible
+post
+potato
+pottery
+poverty
+powder
+power
+practice
+praise
+predict
+prefer
+prepare
+present
+pretty
+prevent
+price
+pride
+primary
+print
+priority
+prison
+private
+prize
+problem
+process
+produce
+profit
+program
+project
+promote
+proof
+property
+prosper
+protect
+proud
+provide
+public
+pudding
+pull
+pulp
+pulse
+pumpkin
+punch
+pupil
+puppy
+purchase
+purity
+purpose
+purse
+push
+put
+puzzle
+pyramid
+quality
+quantum
+quarter
+question
+quick
+quit
+quiz
+quote
+rabbit
+raccoon
+race
+rack
+radar
+radio
+rail
+rain
+raise
+rally
+ramp
+ranch
+random
+range
+rapid
+rare
+rate
+rather
+raven
+raw
+razor
+ready
+real
+reason
+rebel
+rebuild
+recall
+receive
+recipe
+record
+recycle
+reduce
+reflect
+reform
+refuse
+region
+regret
+regular
+reject
+relax
+release
+relief
+rely
+remain
+remember
+remind
+remove
+render
+renew
+rent
+reopen
+repair
+repeat
+replace
+report
+require
+rescue
+resemble
+resist
+resource
+response
+result
+retire
+retreat
+return
+reunion
+reveal
+review
+reward
+rhythm
+rib
+ribbon
+rice
+rich
+ride
+ridge
+rifle
+right
+rigid
+ring
+riot
+ripple
+risk
+ritual
+rival
+river
+road
+roast
+robot
+robust
+rocket
+romance
+roof
+rookie
+room
+rose
+rotate
+rough
+round
+route
+royal
+rubber
+rude
+rug
+rule
+run
+runway
+rural
+sad
+saddle
+sadness
+safe
+sail
+salad
+salmon
+salon
+salt
+salute
+same
+sample
+sand
+satisfy
+satoshi
+sauce
+sausage
+save
+say
+scale
+scan
+scare
+scatter
+scene
+scheme
+school
+science
+scissors
+scorpion
+scout
+scrap
+screen
+script
+scrub
+sea
+search
+season
+seat
+second
+secret
+section
+security
+seed
+seek
+segment
+select
+sell
+seminar
+senior
+sense
+sentence
+series
+service
+session
+settle
+setup
+seven
+shadow
+shaft
+shallow
+share
+shed
+shell
+sheriff
+shield
+shift
+shine
+ship
+shiver
+shock
+shoe
+shoot
+shop
+short
+shoulder
+shove
+shrimp
+shrug
+shuffle
+shy
+sibling
+sick
+side
+siege
+sight
+sign
+silent
+silk
+silly
+silver
+similar
+simple
+since
+sing
+siren
+sister
+situate
+six
+size
+skate
+sketch
+ski
+skill
+skin
+skirt
+skull
+slab
+slam
+sleep
+slender
+slice
+slide
+slight
+slim
+slogan
+slot
+slow
+slush
+small
+smart
+smile
+smoke
+smooth
+snack
+snake
+snap
+sniff
+snow
+soap
+soccer
+social
+sock
+soda
+soft
+solar
+soldier
+solid
+solution
+solve
+someone
+song
+soon
+sorry
+sort
+soul
+sound
+soup
+source
+south
+space
+spare
+spatial
+spawn
+speak
+special
+speed
+spell
+spend
+sphere
+spice
+spider
+spike
+spin
+spirit
+split
+spoil
+sponsor
+spoon
+sport
+spot
+spray
+spread
+spring
+spy
+square
+squeeze
+squirrel
+stable
+stadium
+staff
+stage
+stairs
+stamp
+stand
+start
+state
+stay
+steak
+steel
+stem
+step
+stereo
+stick
+still
+sting
+stock
+stomach
+stone
+stool
+story
+stove
+strategy
+street
+strike
+strong
+struggle
+student
+stuff
+stumble
+style
+subject
+submit
+subway
+success
+such
+sudden
+suffer
+sugar
+suggest
+suit
+summer
+sun
+sunny
+sunset
+super
+supply
+supreme
+sure
+surface
+surge
+surprise
+surround
+survey
+suspect
+sustain
+swallow
+swamp
+swap
+swarm
+swear
+sweet
+swift
+swim
+swing
+switch
+sword
+symbol
+symptom
+syrup
+system
+table
+tackle
+tag
+tail
+talent
+talk
+tank
+tape
+target
+task
+taste
+tattoo
+taxi
+teach
+team
+tell
+ten
+tenant
+tennis
+tent
+term
+test
+text
+thank
+that
+theme
+then
+theory
+there
+they
+thing
+this
+thought
+three
+thrive
+throw
+thumb
+thunder
+ticket
+tide
+tiger
+tilt
+timber
+time
+tiny
+tip
+tired
+tissue
+title
+toast
+tobacco
+today
+toddler
+toe
+together
+toilet
+token
+tomato
+tomorrow
+tone
+tongue
+tonight
+tool
+tooth
+top
+topic
+topple
+torch
+tornado
+tortoise
+toss
+total
+tourist
+toward
+tower
+town
+toy
+track
+trade
+traffic
+tragic
+train
+transfer
+trap
+trash
+travel
+tray
+treat
+tree
+trend
+trial
+tribe
+trick
+trigger
+trim
+trip
+trophy
+trouble
+truck
+true
+truly
+trumpet
+trust
+truth
+try
+tube
+tuition
+tumble
+tuna
+tunnel
+turkey
+turn
+turtle
+twelve
+twenty
+twice
+twin
+twist
+two
+type
+typical
+ugly
+umbrella
+unable
+unaware
+uncle
+uncover
+under
+undo
+unfair
+unfold
+unhappy
+uniform
+unique
+unit
+universe
+unknown
+unlock
+until
+unusual
+unveil
+update
+upgrade
+uphold
+upon
+upper
+upset
+urban
+urge
+usage
+use
+used
+useful
+useless
+usual
+utility
+vacant
+vacuum
+vague
+valid
+valley
+valve
+van
+vanish
+vapor
+various
+vast
+vault
+vehicle
+velvet
+vendor
+venture
+venue
+verb
+verify
+version
+very
+vessel
+veteran
+viable
+vibrant
+vicious
+victory
+video
+view
+village
+vintage
+violin
+virtual
+virus
+visa
+visit
+visual
+vital
+vivid
+vocal
+voice
+void
+volcano
+volume
+vote
+voyage
+wage
+wagon
+wait
+walk
+wall
+walnut
+want
+warfare
+warm
+warrior
+wash
+wasp
+waste
+water
+wave
+way
+wealth
+weapon
+wear
+weasel
+weather
+web
+wedding
+weekend
+weird
+welcome
+west
+wet
+whale
+what
+wheat
+wheel
+when
+where
+whip
+whisper
+wide
+width
+wife
+wild
+will
+win
+window
+wine
+wing
+wink
+winner
+winter
+wire
+wisdom
+wise
+wish
+witness
+wolf
+woman
+wonder
+wood
+wool
+word
+work
+world
+worry
+worth
+wrap
+wreck
+wrestle
+wrist
+write
+wrong
+yard
+year
+yellow
+you
+young
+youth
+zebra
+zero
+zone
+zoo
diff --git a/src/mnemonics/wordlists/languages/japanese b/src/mnemonics/wordlists/languages/japanese
new file mode 100644
index 000000000..aa7673fce
--- /dev/null
+++ b/src/mnemonics/wordlists/languages/japanese
@@ -0,0 +1,2048 @@
+あい
+あいこくしん
+あう
+あお
+あおぞら
+あか
+あかちゃん
+あき
+あきる
+あく
+あさ
+あさひ
+あし
+あずき
+あせ
+あそぶ
+あたる
+あつい
+あな
+あに
+あね
+あひる
+あまい
+あみ
+あめ
+あめりか
+あやまる
+あゆむ
+あらいぐま
+あらし
+あり
+ある
+あれ
+あわ
+あんこ
+いう
+いえ
+いおん
+いか
+いがい
+いかいよう
+いけ
+いけん
+いこく
+いこつ
+いさん
+いし
+いじゅう
+いす
+いせい
+いせえび
+いせかい
+いせき
+いそうろう
+いそがしい
+いたりあ
+いてざ
+いてん
+いと
+いない
+いなか
+いぬ
+いね
+いのち
+いのる
+いはつ
+いはん
+いびき
+いひん
+いふく
+いへん
+いほう
+いま
+いみ
+いみん
+いも
+いもうと
+いもたれ
+いもり
+いや
+いやす
+いよかん
+いよく
+いらい
+いらすと
+いりぐち
+いりょう
+いりょうひ
+いる
+いれい
+いれもの
+いれる
+いろ
+いろえんぴつ
+いわ
+いわう
+いわかん
+いんげんまめ
+うえ
+うおざ
+うかぶ
+うきわ
+うく
+うくらいな
+うくれれ
+うけつぐ
+うけつけ
+うける
+うごく
+うこん
+うさぎ
+うし
+うしなう
+うしろ
+うしろがみ
+うすい
+うすぎ
+うせつ
+うそ
+うた
+うちあわせ
+うちがわ
+うちき
+うつ
+うなぎ
+うなじ
+うに
+うねる
+うのう
+うぶげ
+うぶごえ
+うま
+うまれる
+うみ
+うむ
+うめ
+うめる
+うもう
+うやまう
+うよく
+うら
+うらない
+うる
+うるさい
+うれしい
+うろこ
+うわき
+うわさ
+えい
+えいえん
+えいが
+えいぎょう
+えいご
+えおり
+えき
+えきたい
+えくせる
+えさ
+えしゃく
+えすて
+えつらん
+えと
+えのぐ
+えび
+えほうまき
+えほん
+えま
+えまき
+えもじ
+えもの
+えらい
+えらぶ
+えり
+えりあ
+える
+えん
+えんえん
+おきる
+おく
+おけ
+おこる
+おしえる
+おやゆび
+おらんだ
+かあつ
+かい
+かう
+かお
+かがし
+かき
+かく
+かこ
+かさ
+かす
+かち
+かつ
+かなざわし
+かに
+かね
+かのう
+かほう
+かほご
+かまぼこ
+かみ
+かむ
+かめれおん
+かも
+かゆい
+からい
+かるい
+かろう
+かわ
+かわら
+きあい
+きあつ
+きいろ
+ぎいん
+きうい
+きうん
+きえる
+きおう
+きおく
+きおち
+きおん
+きか
+きかい
+きかく
+きかん
+きかんしゃ
+きぎ
+ききて
+きく
+きくばり
+きくらげ
+きけん
+きけんせい
+きこう
+きこえる
+きこく
+きさい
+きさく
+きさま
+きさらぎ
+きし
+きしゅ
+きす
+きすう
+きせい
+きせき
+きせつ
+きそ
+きそう
+きそく
+きぞく
+ぎそく
+きぞん
+きた
+きたえる
+きち
+きちょう
+きつえん
+きつつき
+きつね
+きてい
+きどう
+きどく
+きない
+きなが
+きぬ
+きぬごし
+きねん
+きのう
+きはく
+きびしい
+きひん
+きふ
+ぎふ
+きふく
+ぎぼ
+きほう
+きぼう
+きほん
+きまる
+きみ
+きみつ
+ぎむ
+きむずかしい
+きめ
+きめる
+きもだめし
+きもち
+きやく
+きよう
+きらい
+きらく
+きり
+きる
+きれい
+きれつ
+きろく
+ぎろん
+きわめる
+ぐあい
+くい
+くいず
+くうかん
+くうき
+くうぐん
+くうこう
+くうそう
+くうふく
+くうぼ
+くかん
+くき
+くきょう
+くげん
+ぐこう
+くさ
+くさい
+くさき
+くさばな
+くさる
+くし
+くしゃみ
+くしょう
+くすのき
+くすり
+くすりゆび
+くせ
+くせげ
+くせん
+くたびれる
+くち
+くちこみ
+くちさき
+くつ
+くつした
+くつろぐ
+くとうてん
+くどく
+くなん
+くに
+くねくね
+くのう
+くふう
+くま
+くみあわせ
+くみたてる
+くむ
+くめる
+くやくしょ
+くらす
+くり
+くれる
+くろ
+くろう
+くわしい
+ぐんじょ
+けあな
+けいけん
+けいこ
+けいさい
+けいさつ
+げいのうじん
+けいれき
+けいれつ
+けいれん
+けいろ
+けおとす
+けおりもの
+けが
+げき
+げきか
+げきげん
+げきだん
+げきちん
+げきど
+げきは
+げきやく
+げこう
+げこくじょう
+けさ
+げざい
+けさき
+げざん
+けしき
+けしごむ
+けしょう
+けす
+げすと
+けた
+げた
+けたば
+けち
+けちゃっぷ
+けちらす
+けつ
+けつあつ
+けつい
+けつえき
+けっこん
+けつじょ
+けってい
+けつまつ
+げつようび
+げつれい
+けつろん
+げどく
+けとばす
+けとる
+けなげ
+けなす
+けなみ
+けぬき
+げねつ
+けねん
+けはい
+げひん
+けぶかい
+げぼく
+けまり
+けみかる
+けむし
+けむり
+けもの
+けらい
+ける
+げろ
+けろけろ
+けわしい
+けんい
+けんえつ
+けんお
+けんか
+げんき
+けんきゅう
+けんきょ
+けんけい
+けんけつ
+けんげん
+けんこう
+けんさ
+けんさく
+けんしゅう
+けんしゅつ
+けんしん
+けんすう
+けんそう
+げんそう
+けんそん
+げんち
+けんちく
+けんてい
+げんてい
+けんとう
+けんない
+けんにん
+げんぶつ
+けんま
+けんみん
+けんめい
+けんらん
+けんり
+けんりつ
+こあくま
+こい
+ごい
+こいびと
+こうい
+こうえん
+こうか
+こうかい
+こうかん
+こうさい
+こうさん
+こうしん
+こうず
+こうすい
+こうせん
+こうそう
+こうそく
+こうたい
+こうちゃ
+こうつう
+こうてい
+こうとうぶ
+こうない
+こうはい
+こうはん
+こうもく
+こえ
+こえる
+こおり
+ごがつ
+こかん
+こく
+こくご
+こくない
+こくはく
+こけい
+こける
+ここ
+こころ
+ごさ
+こさめ
+こし
+こしつ
+こす
+こすう
+こせい
+こせき
+こぜん
+こそだて
+こたい
+こたえる
+こたつ
+こちょう
+こっか
+こつこつ
+こつばん
+こつぶ
+こてい
+こてん
+こと
+ことがら
+ことし
+こなごな
+こねこね
+このまま
+このみ
+このよ
+こはん
+ごはん
+ごび
+こひつじ
+こふう
+こふん
+こぼれる
+ごま
+こまかい
+こまつし
+こまつな
+こまる
+こむ
+こむぎこ
+こめ
+こもじ
+こもち
+こもの
+こもん
+こや
+こやく
+こやま
+こゆう
+こゆび
+こよい
+こよう
+こりる
+こる
+これくしょん
+ころっけ
+こわもて
+こわれる
+こん
+こんいん
+こんかい
+こんき
+こんしゅう
+こんしゅん
+こんすい
+こんだて
+こんだん
+こんとん
+こんなん
+こんびに
+こんぽう
+こんぽん
+こんまけ
+こんや
+こんやく
+こんれい
+こんわく
+さいかい
+さいがい
+さいきん
+さいご
+さいこん
+さいしょ
+さうな
+さお
+さかいし
+さかな
+さかみち
+さき
+さく
+さくし
+さくじょ
+さくひん
+さくら
+さけ
+さこく
+さこつ
+さたん
+さつえい
+さっか
+さっきょく
+さつじん
+さつたば
+さつまいも
+さてい
+さといも
+さとう
+さとおや
+さとる
+さのう
+さば
+さばく
+さべつ
+さほう
+さほど
+さます
+さみしい
+さみだれ
+さむけ
+さめ
+さめる
+さやえんどう
+さゆう
+さよう
+さよく
+さら
+さらだ
+さる
+さわやか
+さわる
+さんいん
+さんか
+さんきゃく
+さんこう
+さんさい
+さんざん
+さんすう
+さんせい
+さんそ
+さんそん
+さんち
+さんちょう
+さんま
+さんみ
+さんらん
+しあい
+しあげ
+しあさって
+しあわせ
+しいく
+しいん
+しうち
+しえい
+しお
+しおけ
+しか
+しかい
+しかく
+じかん
+した
+したぎ
+したて
+したみ
+しちょう
+しちょうそん
+しちりん
+じつじ
+してい
+してき
+してつ
+してん
+しとう
+じどう
+しなぎれ
+しなもの
+しなん
+しねま
+しねん
+しのぐ
+しのぶ
+しはい
+しばかり
+しはつ
+じはつ
+しはらい
+しはん
+しひょう
+じふ
+しふく
+じぶん
+しへい
+しほう
+しほん
+しま
+しまう
+しまる
+しみ
+じみ
+しみん
+じむ
+しむける
+しめい
+しめる
+しもん
+しゃいん
+しゃうん
+しゃおん
+しゃかい
+じゃがいも
+しやくしょ
+しゃくほう
+しゃけん
+しゃこ
+しゃこう
+しゃざい
+しゃしん
+しゃせん
+しゃそう
+しゃたい
+しゃたく
+しゃちょう
+しゃっきん
+じゃま
+じゃり
+しゃりょう
+しゃりん
+しゃれい
+しゅうえん
+しゅうかい
+しゅうきん
+しゅうけい
+しゅうりょう
+しゅらば
+しょうか
+しょうかい
+しょうきん
+しょうじき
+しょくざい
+しょくたく
+しょっけん
+しょどう
+しょもつ
+しん
+しんか
+しんこう
+しんせいじ
+しんちく
+しんりん
+すあげ
+すあし
+すあな
+ずあん
+すいか
+すいとう
+すう
+すうがく
+すうじつ
+すうせん
+すおどり
+すき
+すきま
+すく
+すくう
+すくない
+すける
+すこし
+ずさん
+すし
+すずしい
+すすめる
+すそ
+ずっしり
+ずっと
+すで
+すてき
+すてる
+すな
+すなっく
+すなっぷ
+すね
+すねる
+すのこ
+すはだ
+すばらしい
+ずひょう
+ずぶぬれ
+すぶり
+すふれ
+すべて
+すべる
+ずほう
+すぼん
+すまい
+すみ
+すむ
+すめし
+すもう
+すやき
+すらいす
+すらいど
+すらすら
+すり
+する
+するめ
+すれちがう
+すろっと
+すわる
+すんぜん
+すんぽう
+せあぶら
+せいか
+せいかい
+せいかつ
+せおう
+せかい
+せかいかん
+せかいし
+せかいじゅう
+せき
+せきにん
+せきむ
+せきゆ
+せきらんうん
+せけん
+せこう
+せすじ
+せたい
+せたけ
+せっかい
+せっかく
+せっき
+せっきゃく
+せっきょく
+せっきん
+ぜっく
+せっけん
+せっこつ
+せっさたくま
+せつぞく
+せつだん
+せつでん
+せっぱん
+せつび
+せつぶん
+せつめい
+せつりつ
+せと
+せなか
+せのび
+せはば
+せぼね
+せまい
+せまる
+せみ
+せめる
+せもたれ
+せりふ
+せわ
+せん
+ぜんあく
+せんい
+せんえい
+せんか
+せんきょ
+せんく
+せんけつ
+せんげん
+ぜんご
+せんさい
+せんし
+せんしゅ
+せんす
+せんすい
+せんせい
+せんぞ
+せんそう
+せんたく
+せんち
+せんちゃ
+せんちゃく
+せんちょう
+せんてい
+せんとう
+せんぬき
+せんねん
+ぜんぶ
+せんぷうき
+せんぷく
+ぜんぽう
+せんむ
+せんめい
+せんめんじょ
+せんもん
+せんやく
+せんゆう
+せんよう
+ぜんら
+ぜんりゃく
+せんりょく
+せんれい
+せんろ
+そあく
+そいとげる
+そいね
+そう
+ぞう
+そうがんきょう
+そうき
+そうご
+そうなん
+そうび
+そうひょう
+そうめん
+そうり
+そうりょ
+そえもの
+そえん
+そかい
+そがい
+そぐ
+そげき
+そこう
+そこそこ
+そざい
+そし
+そしな
+そせい
+そせん
+そそぐ
+そだてる
+そつう
+そつえん
+そっかん
+そつぎょう
+そっけつ
+そっこう
+そっせん
+そっと
+そで
+そと
+そとがわ
+そとづら
+そなえる
+そなた
+そば
+そふ
+そふぼ
+そぼ
+そぼく
+そぼろ
+そまつ
+そまる
+そむく
+そむりえ
+そめる
+そもそも
+そよかぜ
+そら
+そらまめ
+そり
+そる
+そろう
+そんかい
+そんけい
+そんざい
+そんしつ
+そんしょう
+そんぞく
+そんちょう
+ぞんび
+ぞんぶん
+そんみん
+たあい
+たいいん
+たいうん
+たいえき
+たいおう
+だいおう
+たいか
+たいかい
+たいき
+たいきけん
+たいぐう
+たいくつ
+たいけい
+たいけつ
+たいけん
+たいこ
+たいこう
+たいさ
+たいさん
+たいしゅつ
+だいじょうぶ
+たいしょく
+だいず
+だいすき
+たいせい
+たいせつ
+たいせん
+たいそう
+たいちょう
+だいちょう
+たいとう
+たいない
+たいねつ
+たいのう
+たいは
+たいはん
+たいひ
+たいふう
+たいへん
+たいほ
+たいまつばな
+たいまん
+たいみんぐ
+たいむ
+たいめん
+たいやき
+たいやく
+たいよう
+たいら
+たいりょう
+たいりょく
+たいる
+たいわ
+たいわん
+たうえ
+たえる
+たおす
+たおる
+たかい
+たかね
+たき
+たきび
+たくさん
+たけ
+たこ
+たこく
+たこやき
+たさい
+ださい
+たしざん
+たす
+たすける
+たそがれ
+たたかう
+たたく
+たちば
+たちばな
+たつ
+だっかい
+だっきゃく
+だっこ
+だっしめん
+だっしゅつ
+だったい
+たて
+たてる
+たとえる
+たな
+たにん
+たぬき
+たね
+たのしみ
+たはつ
+たび
+たぶん
+たべる
+たぼう
+たほうめん
+たま
+たまご
+たまる
+だむる
+ためいき
+ためす
+ためる
+たもつ
+たやすい
+たよる
+たら
+たらす
+たりきほんがん
+たりょう
+たりる
+たる
+たると
+たれる
+たれんと
+たろっと
+たわむれる
+たん
+だんあつ
+たんい
+たんおん
+たんか
+たんき
+たんけん
+たんご
+たんさく
+たんさん
+たんし
+たんしゅく
+たんじょうび
+だんせい
+たんそく
+たんたい
+たんち
+だんち
+たんちょう
+たんてい
+たんてき
+たんとう
+だんな
+たんにん
+だんねつ
+たんのう
+たんぴん
+たんまつ
+たんめい
+だんれつ
+だんろ
+だんわ
+ちあい
+ちあん
+ちい
+ちいき
+ちいさい
+ちえ
+ちえん
+ちか
+ちかい
+ちきゅう
+ちきん
+ちけい
+ちけいず
+ちけん
+ちこく
+ちさい
+ちしき
+ちしりょう
+ちず
+ちせい
+ちそう
+ちたい
+ちたん
+ちちおや
+ちつじょ
+ちてき
+ちてん
+ちぬき
+ちぬり
+ちのう
+ちひょう
+ちへいせん
+ちほう
+ちまた
+ちみつ
+ちみどろ
+ちめいど
+ちゅうい
+ちゅうおう
+ちゅうおうく
+ちゅうがっこう
+ちゅうごく
+ちゆりょく
+ちょうさ
+ちょうし
+ちらし
+ちらみ
+ちり
+ちりがみ
+ちる
+ちるど
+ちわわ
+ちんたい
+ちんもく
+ついか
+つうか
+つうじょう
+つうじる
+つうはん
+つうわ
+つえ
+つかう
+つかれる
+つき
+つく
+つくね
+つくる
+つけね
+つける
+つごう
+つた
+つたえる
+つち
+つつじ
+つとめる
+つな
+つながる
+つなみ
+つねづね
+つの
+つのる
+つば
+つぶ
+つぶす
+つぼ
+つま
+つまらない
+つまる
+つみ
+つみき
+つむ
+つめたい
+つもる
+つや
+つよい
+つり
+つるぼ
+つるみく
+つわもの
+つわり
+てあし
+てあて
+てあみ
+ていか
+ていき
+ていけい
+ていけつ
+ていけつあつ
+ていこく
+ていさつ
+ていし
+ていしゃ
+ていせい
+ていたい
+ていど
+ていねい
+ていひょう
+ていへん
+ていぼう
+てうち
+ておくれ
+てき
+てくび
+てこ
+てさぎょう
+てさげ
+でし
+てすり
+てそう
+てちがい
+てちょう
+てつがく
+てつづき
+てつや
+でぬかえ
+てぬき
+てぬぐい
+てのひら
+てはい
+てふだ
+てほどき
+てほん
+てま
+てまえ
+てまきずし
+てみじか
+てみやげ
+てら
+てらす
+でる
+てれび
+てろ
+てわけ
+てわたし
+でんあつ
+てんい
+てんいん
+てんかい
+てんき
+てんぐ
+てんけん
+でんげん
+てんごく
+てんさい
+てんすう
+でんち
+てんてき
+てんとう
+てんない
+てんぷ
+てんぷら
+てんぼうだい
+てんめつ
+てんらく
+てんらんかい
+でんりゅう
+でんりょく
+でんわ
+どあ
+どあい
+といれ
+とうむぎ
+とおい
+とおす
+とかい
+とかす
+ときおり
+ときどき
+とくい
+とくてい
+とくてん
+とくべつ
+とけい
+とける
+とさか
+とし
+としょかん
+とそう
+とたん
+とち
+とちゅう
+とつぜん
+とつにゅう
+ととのえる
+とない
+となえる
+となり
+とのさま
+とばす
+とぶ
+とほ
+とほう
+どま
+とまる
+とら
+とり
+とる
+とんかつ
+ない
+ないか
+ないかく
+ないこう
+ないしょ
+ないす
+ないせん
+ないそう
+ないぞう
+なおす
+なく
+なこうど
+なさけ
+なし
+なす
+なぜ
+なぞ
+なたでここ
+なつ
+なっとう
+なつやすみ
+ななおし
+なにごと
+なにもの
+なにわ
+なは
+なび
+なふだ
+なべ
+なまいき
+なまえ
+なまみ
+なみ
+なみだ
+なめらか
+なめる
+なやむ
+ならぶ
+なる
+なれる
+なわ
+なわとび
+なわばり
+にあう
+にいがた
+にうけ
+におい
+にかい
+にがて
+にきび
+にく
+にくしみ
+にくまん
+にげる
+にさんかたんそ
+にし
+にしき
+にす
+にせもの
+にちじ
+にちじょう
+にちようび
+にっか
+にっき
+にっけい
+にっこう
+にっさん
+にっしょく
+にっすう
+にっせき
+にってい
+になう
+にほん
+にまめ
+にもつ
+にやり
+にゅういん
+にゅうか
+にゅうし
+にゅうしゃ
+にゅうだん
+にゅうぶ
+にら
+にりんしゃ
+にる
+にわ
+にわとり
+にんい
+にんか
+にんき
+にんげん
+にんしき
+にんしょう
+にんしん
+にんずう
+にんそう
+にんたい
+にんち
+にんてい
+にんにく
+にんぷ
+にんまり
+にんむ
+にんめい
+にんよう
+ぬう
+ぬか
+ぬく
+ぬくもり
+ぬし
+ぬの
+ぬま
+ぬめり
+ぬらす
+ぬる
+ぬんちゃく
+ねあげ
+ねいき
+ねいる
+ねいろ
+ねぎ
+ねぐせ
+ねくたい
+ねくら
+ねこ
+ねこぜ
+ねこむ
+ねさげ
+ねすごす
+ねそべる
+ねつい
+ねつぞう
+ねったい
+ねったいぎょ
+ねぶそく
+ねふだ
+ねぼう
+ねほりはほり
+ねまき
+ねまわし
+ねみみ
+ねむい
+ねもと
+ねらう
+ねる
+ねわざ
+ねんいり
+ねんおし
+ねんかん
+ねんき
+ねんきん
+ねんぐ
+ねんざ
+ねんし
+ねんちゃく
+ねんちょう
+ねんど
+ねんぴ
+ねんぶつ
+ねんまく
+ねんまつ
+ねんりき
+ねんりょう
+ねんれい
+のいず
+のう
+のおづま
+のがす
+のきなみ
+のこぎり
+のこす
+のせる
+のぞく
+のぞむ
+のたまう
+のちほど
+のっく
+のばす
+のはら
+のべる
+のぼる
+のむ
+のやま
+のらいぬ
+のらねこ
+のり
+のる
+のれん
+のんき
+ばあい
+はあく
+ばあさん
+はい
+ばいか
+ばいく
+はいけん
+はいご
+はいこう
+はいし
+はいしゅつ
+はいしん
+はいすい
+はいせつ
+はいせん
+はいそう
+はいち
+ばいばい
+はう
+はえ
+はえる
+はおる
+はか
+ばか
+はかい
+はかる
+はき
+はく
+はくしゅ
+はけん
+はこ
+はこぶ
+はさみ
+はさん
+はし
+はしご
+はしる
+ばす
+はせる
+ぱそこん
+はそん
+はたん
+はち
+はちみつ
+はっか
+はっかく
+はっき
+はっきり
+はっくつ
+はっけん
+はっこう
+はっさん
+はっしゃ
+はっしん
+はったつ
+はっちゃく
+はっちゅう
+はってん
+はっぴょう
+はっぽう
+はて
+はな
+はなす
+はなび
+はにかむ
+はね
+はは
+はぶらし
+はま
+はみがき
+はむ
+はむかう
+はめつ
+はやい
+はら
+はらう
+はり
+はる
+はれ
+はろうぃん
+はわい
+はんい
+はんえい
+はんえん
+はんおん
+はんかく
+はんかち
+はんきょう
+はんこ
+はんこう
+はんしゃ
+はんしん
+はんすう
+はんたい
+はんだん
+ぱんち
+ぱんつ
+はんてい
+はんてん
+はんとし
+はんのう
+はんぱ
+はんぶん
+はんぺん
+はんぼうき
+はんめい
+はんめん
+はんらん
+はんろん
+ひいき
+ひうん
+ひえる
+ひかく
+ひかり
+ひかん
+ひく
+ひくい
+ひけつ
+ひこうき
+ひこく
+ひざ
+ぴざ
+ひさい
+ひさしぶり
+ひさん
+ひし
+ひじ
+ひしょ
+ひじょう
+ひそか
+ひそむ
+ひたむき
+ひたる
+ひつぎ
+ひっこし
+ひっし
+ひっす
+ひつぜん
+ひつよう
+ひてい
+ひと
+ひとごみ
+ひな
+ひなん
+ひねる
+ひはん
+ひびく
+ひひょう
+ひふ
+ひほう
+ひま
+ひまん
+ひみつ
+ひめ
+ひめい
+ひめじし
+ひも
+ひやけ
+ひやす
+ひゆ
+ひよう
+びょうき
+ひらく
+ひりつ
+ひりょう
+ひる
+ひれい
+ひろい
+ひろう
+ひわ
+ひんかく
+ひんけつ
+ひんこん
+ひんし
+ひんしつ
+ひんしゅ
+ひんそう
+ぴんち
+ひんぱん
+びんぼう
+ふあん
+ふいうち
+ふうけい
+ふうせん
+ふうとう
+ふうふ
+ふえ
+ふえる
+ふおん
+ふか
+ふかい
+ふきん
+ふく
+ふくざつ
+ふこう
+ふさい
+ふざい
+ふしぎ
+ふじみ
+ふすま
+ふせい
+ふせぐ
+ふそく
+ふた
+ふたん
+ふち
+ふちょう
+ふつう
+ふっかつ
+ふっき
+ふっきん
+ふっこく
+ふとる
+ふとん
+ふね
+ふのう
+ふはい
+ふひょう
+ふへん
+ふまん
+ふみん
+ふむ
+ふめつ
+ふめん
+ふゆ
+ふよう
+ふりこ
+ふりる
+ふる
+ふるい
+ふろ
+ふんいき
+ふんか
+ぶんか
+ぶんぐ
+ふんしつ
+ぶんせき
+ふんそう
+へい
+へいき
+へいさ
+へいわ
+へきが
+へこむ
+へそ
+へた
+べつ
+べっど
+ぺっと
+へび
+へや
+へる
+へんか
+へんかん
+へんきゃく
+へんきん
+へんさい
+へんたい
+ほあん
+ほいく
+ほうほう
+ほえる
+ほおん
+ほかん
+ほきょう
+ぼきん
+ほくろ
+ほけつ
+ほけん
+ほこう
+ほこる
+ほさ
+ほし
+ほしつ
+ほしゅ
+ほしょう
+ほす
+ほせい
+ぼせい
+ほそい
+ほそく
+ほたて
+ほたる
+ぼち
+ほっきょく
+ほっさ
+ほったん
+ほとんど
+ほめる
+ほる
+ほんい
+ほんき
+ほんけ
+ほんしつ
+まいにち
+まう
+まかい
+まかせる
+まく
+まける
+まこと
+まさつ
+ますく
+まぜる
+まち
+まつ
+まつり
+まとめ
+まなぶ
+まぬけ
+まね
+まねく
+まひ
+まほう
+まめ
+まもる
+まゆげ
+まよう
+まる
+まろやか
+まわす
+まわり
+まんが
+まんかい
+まんきつ
+まんぞく
+みいら
+みうち
+みかた
+みかん
+みぎ
+みけん
+みこん
+みすい
+みすえる
+みせ
+みそ
+みち
+みてい
+みとめる
+みなみかさい
+みねらる
+みのう
+みほん
+みみ
+みもと
+みやげ
+みらい
+みりょく
+みる
+みわく
+むえき
+むえん
+むかし
+むく
+むこ
+むさぼる
+むし
+むすこ
+むすめ
+むせる
+むせん
+むだ
+むち
+むなしい
+むね
+むのう
+むやみ
+むよう
+むら
+むり
+むりょう
+むれ
+むろん
+もうどうけん
+もえる
+もぎ
+もくし
+もくてき
+もし
+もんく
+もんだい
+やすい
+やすみ
+やそう
+やたい
+やちん
+やね
+やぶる
+やま
+やみ
+やめる
+ややこしい
+やよい
+やり
+やわらかい
+ゆけつ
+ゆしゅつ
+ゆせん
+ゆそう
+ゆたか
+ゆちゃく
+ゆでる
+ゆび
+ゆびわ
+ゆめ
+ゆれる
+よう
+よかぜ
+よかん
+よきん
+よくせい
+よくぼう
+よけい
+よさん
+よそう
+よそく
+よち
+よてい
+よどがわく
+よねつ
+よむ
+よめ
+よやく
+よゆう
+よる
+よろこぶ
+らいう
+らくがき
+らくご
+らくさつ
+らくだ
+らくたん
+らしんばん
+らせん
+らぞく
+らたい
+らち
+らっか
+らっかせい
+られつ
+りえき
+りか
+りかい
+りきさく
+りきせつ
+りく
+りくぐん
+りくつ
+りけん
+りこう
+りし
+りす
+りせい
+りそう
+りそく
+りてん
+りねん
+りゅう
+りゆう
+りゅうがく
+りゅうこう
+りゅうし
+りゅうねん
+りよう
+りょうかい
+りょうきん
+りょうしん
+りょうて
+りょうど
+りょうほう
+りょうり
+りりく
+りれき
+りろん
+りんご
+るいじ
+るす
+れいかん
+れいぎ
+れいせい
+れいぞうこ
+れいとう
+れきし
+れきだい
+れんあい
+れんけい
+れんけつ
+れんこう
+れんこん
+れんさ
+れんさい
+れんさく
+れんしゃ
+れんしゅう
+れんぞく
+ろうか
+ろうご
+ろうじん
+ろうそく
+ろか
+ろくが
+ろこつ
+ろしゅつ
+ろせん
+ろてん
+ろめん
+ろれつ
+ろんぎ
+ろんぱ
+ろんぶん
+ろんり
+わじまし
diff --git a/src/mnemonics/wordlists/languages/portuguese b/src/mnemonics/wordlists/languages/portuguese
new file mode 100644
index 000000000..126fd2740
--- /dev/null
+++ b/src/mnemonics/wordlists/languages/portuguese
@@ -0,0 +1,1626 @@
+abaular
+abdominal
+abeto
+abissinio
+abjeto
+ablucao
+abnegar
+abotoar
+abrutalhar
+absurdo
+abutre
+acautelar
+accessorios
+acetona
+achocolatado
+acirrar
+acne
+acovardar
+acrostico
+actinomicete
+acustico
+adaptavel
+adeus
+adivinho
+adjunto
+admoestar
+adnominal
+adotivo
+adquirir
+adriatico
+adsorcao
+adutora
+advogar
+aerossol
+afazeres
+afetuoso
+afixo
+afluir
+afortunar
+afrouxar
+aftosa
+afunilar
+agentes
+agito
+aglutinar
+aiatola
+aimore
+aino
+aipo
+airoso
+ajeitar
+ajoelhar
+ajudante
+ajuste
+alazao
+albumina
+alcunha
+alegria
+alexandre
+alforriar
+alguns
+alhures
+alivio
+almoxarife
+alotropico
+alpiste
+alquimista
+alsaciano
+altura
+aluviao
+alvura
+amazonico
+ambulatorio
+ametodico
+amizades
+amniotico
+amovivel
+amurada
+anatomico
+ancorar
+anexo
+anfora
+aniversario
+anjo
+anotar
+ansioso
+anturio
+anuviar
+anverso
+anzol
+aonde
+apaziguar
+apito
+aplicavel
+apoteotico
+aprimorar
+aprumo
+apto
+apuros
+aquoso
+arauto
+arbusto
+arduo
+aresta
+arfar
+arguto
+aritmetico
+arlequim
+armisticio
+aromatizar
+arpoar
+arquivo
+arrumar
+arsenio
+arturiano
+aruaque
+arvores
+asbesto
+ascorbico
+aspirina
+asqueroso
+assustar
+astuto
+atazanar
+ativo
+atletismo
+atmosferico
+atormentar
+atroz
+aturdir
+audivel
+auferir
+augusto
+aula
+aumento
+aurora
+autuar
+avatar
+avexar
+avizinhar
+avolumar
+avulso
+axiomatico
+azerbaijano
+azimute
+azoto
+azulejo
+bacteriologista
+badulaque
+baforada
+baixote
+bajular
+balzaquiana
+bambuzal
+banzo
+baoba
+baqueta
+barulho
+bastonete
+batuta
+bauxita
+bavaro
+bazuca
+bcrepuscular
+beato
+beduino
+begonia
+behaviorista
+beisebol
+belzebu
+bemol
+benzido
+beocio
+bequer
+berro
+besuntar
+betume
+bexiga
+bezerro
+biatlon
+biboca
+bicuspide
+bidirecional
+bienio
+bifurcar
+bigorna
+bijuteria
+bimotor
+binormal
+bioxido
+bipolarizacao
+biquini
+birutice
+bisturi
+bituca
+biunivoco
+bivalve
+bizarro
+blasfemo
+blenorreia
+blindar
+bloqueio
+blusao
+boazuda
+bofete
+bojudo
+bolso
+bombordo
+bonzo
+botina
+boquiaberto
+bostoniano
+botulismo
+bourbon
+bovino
+boximane
+bravura
+brevidade
+britar
+broxar
+bruno
+bruxuleio
+bubonico
+bucolico
+buda
+budista
+bueiro
+buffer
+bugre
+bujao
+bumerangue
+burundines
+busto
+butique
+buzios
+caatinga
+cabuqui
+cacunda
+cafuzo
+cajueiro
+camurca
+canudo
+caquizeiro
+carvoeiro
+casulo
+catuaba
+cauterizar
+cebolinha
+cedula
+ceifeiro
+celulose
+cerzir
+cesto
+cetro
+ceus
+cevar
+chavena
+cheroqui
+chita
+chovido
+chuvoso
+ciatico
+cibernetico
+cicuta
+cidreira
+cientistas
+cifrar
+cigarro
+cilio
+cimo
+cinzento
+cioso
+cipriota
+cirurgico
+cisto
+citrico
+ciumento
+civismo
+clavicula
+clero
+clitoris
+cluster
+coaxial
+cobrir
+cocota
+codorniz
+coexistir
+cogumelo
+coito
+colusao
+compaixao
+comutativo
+contentamento
+convulsivo
+coordenativa
+coquetel
+correto
+corvo
+costureiro
+cotovia
+covil
+cozinheiro
+cretino
+cristo
+crivo
+crotalo
+cruzes
+cubo
+cucuia
+cueiro
+cuidar
+cujo
+cultural
+cunilingua
+cupula
+curvo
+custoso
+cutucar
+czarismo
+dablio
+dacota
+dados
+daguerreotipo
+daiquiri
+daltonismo
+damista
+dantesco
+daquilo
+darwinista
+dasein
+dativo
+deao
+debutantes
+decurso
+deduzir
+defunto
+degustar
+dejeto
+deltoide
+demover
+denunciar
+deputado
+deque
+dervixe
+desvirtuar
+deturpar
+deuteronomio
+devoto
+dextrose
+dezoito
+diatribe
+dicotomico
+didatico
+dietista
+difuso
+digressao
+diluvio
+diminuto
+dinheiro
+dinossauro
+dioxido
+diplomatico
+dique
+dirimivel
+disturbio
+diurno
+divulgar
+dizivel
+doar
+dobro
+docura
+dodoi
+doer
+dogue
+doloso
+domo
+donzela
+doping
+dorsal
+dossie
+dote
+doutro
+doze
+dravidico
+dreno
+driver
+dropes
+druso
+dubnio
+ducto
+dueto
+dulija
+dundum
+duodeno
+duquesa
+durou
+duvidoso
+duzia
+ebano
+ebrio
+eburneo
+echarpe
+eclusa
+ecossistema
+ectoplasma
+ecumenismo
+eczema
+eden
+editorial
+edredom
+edulcorar
+efetuar
+efigie
+efluvio
+egiptologo
+egresso
+egua
+einsteiniano
+eira
+eivar
+eixos
+ejetar
+elastomero
+eldorado
+elixir
+elmo
+eloquente
+elucidativo
+emaranhar
+embutir
+emerito
+emfa
+emitir
+emotivo
+empuxo
+emulsao
+enamorar
+encurvar
+enduro
+enevoar
+enfurnar
+enguico
+enho
+enigmista
+enlutar
+enormidade
+enpreendimento
+enquanto
+enriquecer
+enrugar
+entusiastico
+enunciar
+envolvimento
+enxuto
+enzimatico
+eolico
+epiteto
+epoxi
+epura
+equivoco
+erario
+erbio
+ereto
+erguido
+erisipela
+ermo
+erotizar
+erros
+erupcao
+ervilha
+esburacar
+escutar
+esfuziante
+esguio
+esloveno
+esmurrar
+esoterismo
+esperanca
+espirito
+espurio
+essencialmente
+esturricar
+esvoacar
+etario
+eterno
+etiquetar
+etnologo
+etos
+etrusco
+euclidiano
+euforico
+eugenico
+eunuco
+europio
+eustaquio
+eutanasia
+evasivo
+eventualidade
+evitavel
+evoluir
+exaustor
+excursionista
+exercito
+exfoliado
+exito
+exotico
+expurgo
+exsudar
+extrusora
+exumar
+fabuloso
+facultativo
+fado
+fagulha
+faixas
+fajuto
+faltoso
+famoso
+fanzine
+fapesp
+faquir
+fartura
+fastio
+faturista
+fausto
+favorito
+faxineira
+fazer
+fealdade
+febril
+fecundo
+fedorento
+feerico
+feixe
+felicidade
+felipe
+feltro
+femur
+fenotipo
+fervura
+festivo
+feto
+feudo
+fevereiro
+fezinha
+fiasco
+fibra
+ficticio
+fiduciario
+fiesp
+fifa
+figurino
+fijiano
+filtro
+finura
+fiorde
+fiquei
+firula
+fissurar
+fitoteca
+fivela
+fixo
+flavio
+flexor
+flibusteiro
+flotilha
+fluxograma
+fobos
+foco
+fofura
+foguista
+foie
+foliculo
+fominha
+fonte
+forum
+fosso
+fotossintese
+foxtrote
+fraudulento
+frevo
+frivolo
+frouxo
+frutose
+fuba
+fucsia
+fugitivo
+fuinha
+fujao
+fulustreco
+fumo
+funileiro
+furunculo
+fustigar
+futurologo
+fuxico
+fuzue
+gabriel
+gado
+gaelico
+gafieira
+gaguejo
+gaivota
+gajo
+galvanoplastico
+gamo
+ganso
+garrucha
+gastronomo
+gatuno
+gaussiano
+gaviao
+gaxeta
+gazeteiro
+gear
+geiser
+geminiano
+generoso
+genuino
+geossinclinal
+gerundio
+gestual
+getulista
+gibi
+gigolo
+gilete
+ginseng
+giroscopio
+glaucio
+glacial
+gleba
+glifo
+glote
+glutonia
+gnostico
+goela
+gogo
+goitaca
+golpista
+gomo
+gonzo
+gorro
+gostou
+goticula
+gourmet
+governo
+gozo
+graxo
+grevista
+grito
+grotesco
+gruta
+guaxinim
+gude
+gueto
+guizo
+guloso
+gume
+guru
+gustativo
+gustavo
+gutural
+habitue
+haitiano
+halterofilista
+hamburguer
+hanseniase
+happening
+harpista
+hastear
+haveres
+hebreu
+hectometro
+hedonista
+hegira
+helena
+helminto
+hemorroidas
+henrique
+heptassilabo
+hertziano
+hesitar
+heterossexual
+heuristico
+hexagono
+hiato
+hibrido
+hidrostatico
+hieroglifo
+hifenizar
+higienizar
+hilario
+himen
+hino
+hippie
+hirsuto
+historiografia
+hitlerista
+hodometro
+hoje
+holograma
+homus
+honroso
+hoquei
+horto
+hostilizar
+hotentote
+huguenote
+humilde
+huno
+hurra
+hutu
+iaia
+ialorixa
+iambico
+iansa
+iaque
+iara
+iatista
+iberico
+ibis
+icar
+iceberg
+icosagono
+idade
+ideologo
+idiotice
+idoso
+iemenita
+iene
+igarape
+iglu
+ignorar
+igreja
+iguaria
+iidiche
+ilativo
+iletrado
+ilharga
+ilimitado
+ilogismo
+ilustrissimo
+imaturo
+imbuzeiro
+imerso
+imitavel
+imovel
+imputar
+imutavel
+inaveriguavel
+incutir
+induzir
+inextricavel
+infusao
+ingua
+inhame
+iniquo
+injusto
+inning
+inoxidavel
+inquisitorial
+insustentavel
+intumescimento
+inutilizavel
+invulneravel
+inzoneiro
+iodo
+iogurte
+ioio
+ionosfera
+ioruba
+iota
+ipsilon
+irascivel
+iris
+irlandes
+irmaos
+iroques
+irrupcao
+isca
+isento
+islandes
+isotopo
+isqueiro
+israelita
+isso
+isto
+iterbio
+itinerario
+itrio
+iuane
+iugoslavo
+jabuticabeira
+jacutinga
+jade
+jagunco
+jainista
+jaleco
+jambo
+jantarada
+japones
+jaqueta
+jarro
+jasmim
+jato
+jaula
+javel
+jazz
+jegue
+jeitoso
+jejum
+jenipapo
+jeova
+jequitiba
+jersei
+jesus
+jetom
+jiboia
+jihad
+jilo
+jingle
+jipe
+jocoso
+joelho
+joguete
+joio
+jojoba
+jorro
+jota
+joule
+joviano
+jubiloso
+judoca
+jugular
+juizo
+jujuba
+juliano
+jumento
+junto
+jururu
+justo
+juta
+juventude
+labutar
+laguna
+laico
+lajota
+lanterninha
+lapso
+laquear
+lastro
+lauto
+lavrar
+laxativo
+lazer
+leasing
+lebre
+lecionar
+ledo
+leguminoso
+leitura
+lele
+lemure
+lento
+leonardo
+leopardo
+lepton
+leque
+leste
+letreiro
+leucocito
+levitico
+lexicologo
+lhama
+lhufas
+liame
+licoroso
+lidocaina
+liliputiano
+limusine
+linotipo
+lipoproteina
+liquidos
+lirismo
+lisura
+liturgico
+livros
+lixo
+lobulo
+locutor
+lodo
+logro
+lojista
+lombriga
+lontra
+loop
+loquaz
+lorota
+losango
+lotus
+louvor
+luar
+lubrificavel
+lucros
+lugubre
+luis
+luminoso
+luneta
+lustroso
+luto
+luvas
+luxuriante
+luzeiro
+maduro
+maestro
+mafioso
+magro
+maiuscula
+majoritario
+malvisto
+mamute
+manutencao
+mapoteca
+maquinista
+marzipa
+masturbar
+matuto
+mausoleu
+mavioso
+maxixe
+mazurca
+meandro
+mecha
+medusa
+mefistofelico
+megera
+meirinho
+melro
+memorizar
+menu
+mequetrefe
+mertiolate
+mestria
+metroviario
+mexilhao
+mezanino
+miau
+microssegundo
+midia
+migratorio
+mimosa
+minuto
+miosotis
+mirtilo
+misturar
+mitzvah
+miudos
+mixuruca
+mnemonico
+moagem
+mobilizar
+modulo
+moer
+mofo
+mogno
+moita
+molusco
+monumento
+moqueca
+morubixaba
+mostruario
+motriz
+mouse
+movivel
+mozarela
+muarra
+muculmano
+mudo
+mugir
+muitos
+mumunha
+munir
+muon
+muquira
+murros
+musselina
+nacoes
+nado
+naftalina
+nago
+naipe
+naja
+nalgum
+namoro
+nanquim
+napolitano
+naquilo
+nascimento
+nautilo
+navios
+nazista
+nebuloso
+nectarina
+nefrologo
+negus
+nelore
+nenufar
+nepotismo
+nervura
+neste
+netuno
+neutron
+nevoeiro
+newtoniano
+nexo
+nhenhenhem
+nhoque
+nigeriano
+niilista
+ninho
+niobio
+niponico
+niquelar
+nirvana
+nisto
+nitroglicerina
+nivoso
+nobreza
+nocivo
+noel
+nogueira
+noivo
+nojo
+nominativo
+nonuplo
+noruegues
+nostalgico
+noturno
+nouveau
+nuanca
+nublar
+nucleotideo
+nudista
+nulo
+numismatico
+nunquinha
+nupcias
+nutritivo
+nuvens
+oasis
+obcecar
+obeso
+obituario
+objetos
+oblongo
+obnoxio
+obrigatorio
+obstruir
+obtuso
+obus
+obvio
+ocaso
+occipital
+oceanografo
+ocioso
+oclusivo
+ocorrer
+ocre
+octogono
+odalisca
+odisseia
+odorifico
+oersted
+oeste
+ofertar
+ofidio
+oftalmologo
+ogiva
+ogum
+oigale
+oitavo
+oitocentos
+ojeriza
+olaria
+oleoso
+olfato
+olhos
+oliveira
+olmo
+olor
+olvidavel
+ombudsman
+omeleteira
+omitir
+omoplata
+onanismo
+ondular
+oneroso
+onomatopeico
+ontologico
+onus
+onze
+opalescente
+opcional
+operistico
+opio
+oposto
+oprobrio
+optometrista
+opusculo
+oratorio
+orbital
+orcar
+orfao
+orixa
+orla
+ornitologo
+orquidea
+ortorrombico
+orvalho
+osculo
+osmotico
+ossudo
+ostrogodo
+otario
+otite
+ouro
+ousar
+outubro
+ouvir
+ovario
+overnight
+oviparo
+ovni
+ovoviviparo
+ovulo
+oxala
+oxente
+oxiuro
+oxossi
+ozonizar
+paciente
+pactuar
+padronizar
+paete
+pagodeiro
+paixao
+pajem
+paludismo
+pampas
+panturrilha
+papudo
+paquistanes
+pastoso
+patua
+paulo
+pauzinhos
+pavoroso
+paxa
+pazes
+peao
+pecuniario
+pedunculo
+pegaso
+peixinho
+pejorativo
+pelvis
+penuria
+pequno
+petunia
+pezada
+piauiense
+pictorico
+pierro
+pigmeu
+pijama
+pilulas
+pimpolho
+pintura
+piorar
+pipocar
+piqueteiro
+pirulito
+pistoleiro
+pituitaria
+pivotar
+pixote
+pizzaria
+plistoceno
+plotar
+pluviometrico
+pneumonico
+poco
+podridao
+poetisa
+pogrom
+pois
+polvorosa
+pomposo
+ponderado
+pontudo
+populoso
+poquer
+porvir
+posudo
+potro
+pouso
+povoar
+prazo
+prezar
+privilegios
+proximo
+prussiano
+pseudopode
+psoriase
+pterossauros
+ptialina
+ptolemaico
+pudor
+pueril
+pufe
+pugilista
+puir
+pujante
+pulverizar
+pumba
+punk
+purulento
+pustula
+putsch
+puxe
+quatrocentos
+quetzal
+quixotesco
+quotizavel
+rabujice
+racista
+radonio
+rafia
+ragu
+rajado
+ralo
+rampeiro
+ranzinza
+raptor
+raquitismo
+raro
+rasurar
+ratoeira
+ravioli
+razoavel
+reavivar
+rebuscar
+recusavel
+reduzivel
+reexposicao
+refutavel
+regurgitar
+reivindicavel
+rejuvenescimento
+relva
+remuneravel
+renunciar
+reorientar
+repuxo
+requisito
+resumo
+returno
+reutilizar
+revolvido
+rezonear
+riacho
+ribossomo
+ricota
+ridiculo
+rifle
+rigoroso
+rijo
+rimel
+rins
+rios
+riqueza
+riquixa
+rissole
+ritualistico
+rivalizar
+rixa
+robusto
+rococo
+rodoviario
+roer
+rogo
+rojao
+rolo
+rompimento
+ronronar
+roqueiro
+rorqual
+rosto
+rotundo
+rouxinol
+roxo
+royal
+ruas
+rucula
+rudimentos
+ruela
+rufo
+rugoso
+ruivo
+rule
+rumoroso
+runico
+ruptura
+rural
+rustico
+rutilar
+saariano
+sabujo
+sacudir
+sadomasoquista
+safra
+sagui
+sais
+samurai
+santuario
+sapo
+saquear
+sartriano
+saturno
+saude
+sauva
+saveiro
+saxofonista
+sazonal
+scherzo
+script
+seara
+seborreia
+secura
+seduzir
+sefardim
+seguro
+seja
+selvas
+sempre
+senzala
+sepultura
+sequoia
+sestercio
+setuplo
+seus
+seviciar
+sezonismo
+shalom
+siames
+sibilante
+sicrano
+sidra
+sifilitico
+signos
+silvo
+simultaneo
+sinusite
+sionista
+sirio
+sisudo
+situar
+sivan
+slide
+slogan
+soar
+sobrio
+socratico
+sodomizar
+soerguer
+software
+sogro
+soja
+solver
+somente
+sonso
+sopro
+soquete
+sorveteiro
+sossego
+soturno
+sousafone
+sovinice
+sozinho
+suavizar
+subverter
+sucursal
+sudoriparo
+sufragio
+sugestoes
+suite
+sujo
+sultao
+sumula
+suntuoso
+suor
+supurar
+suruba
+susto
+suturar
+suvenir
+tabuleta
+taco
+tadjique
+tafeta
+tagarelice
+taitiano
+talvez
+tampouco
+tanzaniano
+taoista
+tapume
+taquion
+tarugo
+tascar
+tatuar
+tautologico
+tavola
+taxionomista
+tchecoslovaco
+teatrologo
+tectonismo
+tedioso
+teflon
+tegumento
+teixo
+telurio
+temporas
+tenue
+teosofico
+tepido
+tequila
+terrorista
+testosterona
+tetrico
+teutonico
+teve
+texugo
+tiara
+tibia
+tiete
+tifoide
+tigresa
+tijolo
+tilintar
+timpano
+tintureiro
+tiquete
+tiroteio
+tisico
+titulos
+tive
+toar
+toboga
+tofu
+togoles
+toicinho
+tolueno
+tomografo
+tontura
+toponimo
+toquio
+torvelinho
+tostar
+toto
+touro
+toxina
+trazer
+trezentos
+trivialidade
+trovoar
+truta
+tuaregue
+tubular
+tucano
+tudo
+tufo
+tuiste
+tulipa
+tumultuoso
+tunisino
+tupiniquim
+turvo
+tutu
+ucraniano
+udenista
+ufanista
+ufologo
+ugaritico
+uiste
+uivo
+ulceroso
+ulema
+ultravioleta
+umbilical
+umero
+umido
+umlaut
+unanimidade
+unesco
+ungulado
+unheiro
+univoco
+untuoso
+urano
+urbano
+urdir
+uretra
+urgente
+urinol
+urna
+urologo
+urro
+ursulina
+urtiga
+urupe
+usavel
+usbeque
+usei
+usineiro
+usurpar
+utero
+utilizar
+utopico
+uvular
+uxoricidio
+vacuo
+vadio
+vaguear
+vaivem
+valvula
+vampiro
+vantajoso
+vaporoso
+vaquinha
+varziano
+vasto
+vaticinio
+vaudeville
+vazio
+veado
+vedico
+veemente
+vegetativo
+veio
+veja
+veludo
+venusiano
+verdade
+verve
+vestuario
+vetusto
+vexatorio
+vezes
+viavel
+vibratorio
+victor
+vicunha
+vidros
+vietnamita
+vigoroso
+vilipendiar
+vime
+vintem
+violoncelo
+viquingue
+virus
+visualizar
+vituperio
+viuvo
+vivo
+vizir
+voar
+vociferar
+vodu
+vogar
+voile
+volver
+vomito
+vontade
+vortice
+vosso
+voto
+vovozinha
+voyeuse
+vozes
+vulva
+vupt
+western
+xadrez
+xale
+xampu
+xango
+xarope
+xaual
+xavante
+xaxim
+xenonio
+xepa
+xerox
+xicara
+xifopago
+xiita
+xilogravura
+xinxim
+xistoso
+xixi
+xodo
+xogum
+xucro
+zabumba
+zagueiro
+zambiano
+zanzar
+zarpar
+zebu
+zefiro
+zeloso
+zenite
+zumbi
diff --git a/src/mnemonics/wordlists/languages/spanish b/src/mnemonics/wordlists/languages/spanish
new file mode 100644
index 000000000..d0900c2c7
--- /dev/null
+++ b/src/mnemonics/wordlists/languages/spanish
@@ -0,0 +1,2048 @@
+ábaco
+abdomen
+abeja
+abierto
+abogado
+abono
+aborto
+abrazo
+abrir
+abuelo
+abuso
+acabar
+academia
+acceso
+acción
+aceite
+acelga
+acento
+aceptar
+ácido
+aclarar
+acné
+acoger
+acoso
+activo
+acto
+actriz
+actuar
+acudir
+acuerdo
+acusar
+adicto
+admitir
+adoptar
+adorno
+aduana
+adulto
+aéreo
+afectar
+afición
+afinar
+afirmar
+ágil
+agitar
+agonía
+agosto
+agotar
+agregar
+agrio
+agua
+agudo
+águila
+aguja
+ahogo
+ahorro
+aire
+aislar
+ajedrez
+ajeno
+ajuste
+alacrán
+alambre
+alarma
+alba
+álbum
+alcalde
+aldea
+alegre
+alejar
+alerta
+aleta
+alfiler
+alga
+algodón
+aliado
+aliento
+alivio
+alma
+almeja
+almíbar
+altar
+alteza
+altivo
+alto
+altura
+alumno
+alzar
+amable
+amante
+amapola
+amargo
+amasar
+ámbar
+ámbito
+ameno
+amigo
+amistad
+amor
+amparo
+amplio
+ancho
+anciano
+ancla
+andar
+andén
+anemia
+ángulo
+anillo
+ánimo
+anís
+anotar
+antena
+antiguo
+antojo
+anual
+anular
+anuncio
+añadir
+añejo
+año
+apagar
+aparato
+apetito
+apio
+aplicar
+apodo
+aporte
+apoyo
+aprender
+aprobar
+apuesta
+apuro
+arado
+araña
+arar
+árbitro
+árbol
+arbusto
+archivo
+arco
+arder
+ardilla
+arduo
+área
+árido
+aries
+armonía
+arnés
+aroma
+arpa
+arpón
+arreglo
+arroz
+arruga
+arte
+artista
+asa
+asado
+asalto
+ascenso
+asegurar
+aseo
+asesor
+asiento
+asilo
+asistir
+asno
+asombro
+áspero
+astilla
+astro
+astuto
+asumir
+asunto
+atajo
+ataque
+atar
+atento
+ateo
+ático
+atleta
+átomo
+atraer
+atroz
+atún
+audaz
+audio
+auge
+aula
+aumento
+ausente
+autor
+aval
+avance
+avaro
+ave
+avellana
+avena
+avestruz
+avión
+aviso
+ayer
+ayuda
+ayuno
+azafrán
+azar
+azote
+azúcar
+azufre
+azul
+baba
+babor
+bache
+bahía
+baile
+bajar
+balanza
+balcón
+balde
+bambú
+banco
+banda
+baño
+barba
+barco
+barniz
+barro
+báscula
+bastón
+basura
+batalla
+batería
+batir
+batuta
+baúl
+bazar
+bebé
+bebida
+bello
+besar
+beso
+bestia
+bicho
+bien
+bingo
+blanco
+bloque
+blusa
+boa
+bobina
+bobo
+boca
+bocina
+boda
+bodega
+boina
+bola
+bolero
+bolsa
+bomba
+bondad
+bonito
+bono
+bonsái
+borde
+borrar
+bosque
+bote
+botín
+bóveda
+bozal
+bravo
+brazo
+brecha
+breve
+brillo
+brinco
+brisa
+broca
+broma
+bronce
+brote
+bruja
+brusco
+bruto
+buceo
+bucle
+bueno
+buey
+bufanda
+bufón
+búho
+buitre
+bulto
+burbuja
+burla
+burro
+buscar
+butaca
+buzón
+caballo
+cabeza
+cabina
+cabra
+cacao
+cadáver
+cadena
+caer
+café
+caída
+caimán
+caja
+cajón
+cal
+calamar
+calcio
+caldo
+calidad
+calle
+calma
+calor
+calvo
+cama
+cambio
+camello
+camino
+campo
+cáncer
+candil
+canela
+canguro
+canica
+canto
+caña
+cañón
+caoba
+caos
+capaz
+capitán
+capote
+captar
+capucha
+cara
+carbón
+cárcel
+careta
+carga
+cariño
+carne
+carpeta
+carro
+carta
+casa
+casco
+casero
+caspa
+castor
+catorce
+catre
+caudal
+causa
+cazo
+cebolla
+ceder
+cedro
+celda
+célebre
+celoso
+célula
+cemento
+ceniza
+centro
+cerca
+cerdo
+cereza
+cero
+cerrar
+certeza
+césped
+cetro
+chacal
+chaleco
+champú
+chancla
+chapa
+charla
+chico
+chiste
+chivo
+choque
+choza
+chuleta
+chupar
+ciclón
+ciego
+cielo
+cien
+cierto
+cifra
+cigarro
+cima
+cinco
+cine
+cinta
+ciprés
+circo
+ciruela
+cisne
+cita
+ciudad
+clamor
+clan
+claro
+clase
+clave
+cliente
+clima
+clínica
+cobre
+cocción
+cochino
+cocina
+coco
+código
+codo
+cofre
+coger
+cohete
+cojín
+cojo
+cola
+colcha
+colegio
+colgar
+colina
+collar
+colmo
+columna
+combate
+comer
+comida
+cómodo
+compra
+conde
+conejo
+conga
+conocer
+consejo
+contar
+copa
+copia
+corazón
+corbata
+corcho
+cordón
+corona
+correr
+coser
+cosmos
+costa
+cráneo
+cráter
+crear
+crecer
+creído
+crema
+cría
+crimen
+cripta
+crisis
+cromo
+crónica
+croqueta
+crudo
+cruz
+cuadro
+cuarto
+cuatro
+cubo
+cubrir
+cuchara
+cuello
+cuento
+cuerda
+cuesta
+cueva
+cuidar
+culebra
+culpa
+culto
+cumbre
+cumplir
+cuna
+cuneta
+cuota
+cupón
+cúpula
+curar
+curioso
+curso
+curva
+cutis
+dama
+danza
+dar
+dardo
+dátil
+deber
+débil
+década
+decir
+dedo
+defensa
+definir
+dejar
+delfín
+delgado
+delito
+demora
+denso
+dental
+deporte
+derecho
+derrota
+desayuno
+deseo
+desfile
+desnudo
+destino
+desvío
+detalle
+detener
+deuda
+día
+diablo
+diadema
+diamante
+diana
+diario
+dibujo
+dictar
+diente
+dieta
+diez
+difícil
+digno
+dilema
+diluir
+dinero
+directo
+dirigir
+disco
+diseño
+disfraz
+diva
+divino
+doble
+doce
+dolor
+domingo
+don
+donar
+dorado
+dormir
+dorso
+dos
+dosis
+dragón
+droga
+ducha
+duda
+duelo
+dueño
+dulce
+dúo
+duque
+durar
+dureza
+duro
+ébano
+ebrio
+echar
+eco
+ecuador
+edad
+edición
+edificio
+editor
+educar
+efecto
+eficaz
+eje
+ejemplo
+elefante
+elegir
+elemento
+elevar
+elipse
+élite
+elixir
+elogio
+eludir
+embudo
+emitir
+emoción
+empate
+empeño
+empleo
+empresa
+enano
+encargo
+enchufe
+encía
+enemigo
+enero
+enfado
+enfermo
+engaño
+enigma
+enlace
+enorme
+enredo
+ensayo
+enseñar
+entero
+entrar
+envase
+envío
+época
+equipo
+erizo
+escala
+escena
+escolar
+escribir
+escudo
+esencia
+esfera
+esfuerzo
+espada
+espejo
+espía
+esposa
+espuma
+esquí
+estar
+este
+estilo
+estufa
+etapa
+eterno
+ética
+etnia
+evadir
+evaluar
+evento
+evitar
+exacto
+examen
+exceso
+excusa
+exento
+exigir
+exilio
+existir
+éxito
+experto
+explicar
+exponer
+extremo
+fábrica
+fábula
+fachada
+fácil
+factor
+faena
+faja
+falda
+fallo
+falso
+faltar
+fama
+familia
+famoso
+faraón
+farmacia
+farol
+farsa
+fase
+fatiga
+fauna
+favor
+fax
+febrero
+fecha
+feliz
+feo
+feria
+feroz
+fértil
+fervor
+festín
+fiable
+fianza
+fiar
+fibra
+ficción
+ficha
+fideo
+fiebre
+fiel
+fiera
+fiesta
+figura
+fijar
+fijo
+fila
+filete
+filial
+filtro
+fin
+finca
+fingir
+finito
+firma
+flaco
+flauta
+flecha
+flor
+flota
+fluir
+flujo
+flúor
+fobia
+foca
+fogata
+fogón
+folio
+folleto
+fondo
+forma
+forro
+fortuna
+forzar
+fosa
+foto
+fracaso
+frágil
+franja
+frase
+fraude
+freír
+freno
+fresa
+frío
+frito
+fruta
+fuego
+fuente
+fuerza
+fuga
+fumar
+función
+funda
+furgón
+furia
+fusil
+fútbol
+futuro
+gacela
+gafas
+gaita
+gajo
+gala
+galería
+gallo
+gamba
+ganar
+gancho
+ganga
+ganso
+garaje
+garza
+gasolina
+gastar
+gato
+gavilán
+gemelo
+gemir
+gen
+género
+genio
+gente
+geranio
+gerente
+germen
+gesto
+gigante
+gimnasio
+girar
+giro
+glaciar
+globo
+gloria
+gol
+golfo
+goloso
+golpe
+goma
+gordo
+gorila
+gorra
+gota
+goteo
+gozar
+grada
+gráfico
+grano
+grasa
+gratis
+grave
+grieta
+grillo
+gripe
+gris
+grito
+grosor
+grúa
+grueso
+grumo
+grupo
+guante
+guapo
+guardia
+guerra
+guía
+guiño
+guion
+guiso
+guitarra
+gusano
+gustar
+haber
+hábil
+hablar
+hacer
+hacha
+hada
+hallar
+hamaca
+harina
+haz
+hazaña
+hebilla
+hebra
+hecho
+helado
+helio
+hembra
+herir
+hermano
+héroe
+hervir
+hielo
+hierro
+hígado
+higiene
+hijo
+himno
+historia
+hocico
+hogar
+hoguera
+hoja
+hombre
+hongo
+honor
+honra
+hora
+hormiga
+horno
+hostil
+hoyo
+hueco
+huelga
+huerta
+hueso
+huevo
+huida
+huir
+humano
+húmedo
+humilde
+humo
+hundir
+huracán
+hurto
+icono
+ideal
+idioma
+ídolo
+iglesia
+iglú
+igual
+ilegal
+ilusión
+imagen
+imán
+imitar
+impar
+imperio
+imponer
+impulso
+incapaz
+índice
+inerte
+infiel
+informe
+ingenio
+inicio
+inmenso
+inmune
+innato
+insecto
+instante
+interés
+íntimo
+intuir
+inútil
+invierno
+ira
+iris
+ironía
+isla
+islote
+jabalí
+jabón
+jamón
+jarabe
+jardín
+jarra
+jaula
+jazmín
+jefe
+jeringa
+jinete
+jornada
+joroba
+joven
+joya
+juerga
+jueves
+juez
+jugador
+jugo
+juguete
+juicio
+junco
+jungla
+junio
+juntar
+júpiter
+jurar
+justo
+juvenil
+juzgar
+kilo
+koala
+labio
+lacio
+lacra
+lado
+ladrón
+lagarto
+lágrima
+laguna
+laico
+lamer
+lámina
+lámpara
+lana
+lancha
+langosta
+lanza
+lápiz
+largo
+larva
+lástima
+lata
+látex
+latir
+laurel
+lavar
+lazo
+leal
+lección
+leche
+lector
+leer
+legión
+legumbre
+lejano
+lengua
+lento
+leña
+león
+leopardo
+lesión
+letal
+letra
+leve
+leyenda
+libertad
+libro
+licor
+líder
+lidiar
+lienzo
+liga
+ligero
+lima
+límite
+limón
+limpio
+lince
+lindo
+línea
+lingote
+lino
+linterna
+líquido
+liso
+lista
+litera
+litio
+litro
+llaga
+llama
+llanto
+llave
+llegar
+llenar
+llevar
+llorar
+llover
+lluvia
+lobo
+loción
+loco
+locura
+lógica
+logro
+lombriz
+lomo
+lonja
+lote
+lucha
+lucir
+lugar
+lujo
+luna
+lunes
+lupa
+lustro
+luto
+luz
+maceta
+macho
+madera
+madre
+maduro
+maestro
+mafia
+magia
+mago
+maíz
+maldad
+maleta
+malla
+malo
+mamá
+mambo
+mamut
+manco
+mando
+manejar
+manga
+maniquí
+manjar
+mano
+manso
+manta
+mañana
+mapa
+máquina
+mar
+marco
+marea
+marfil
+margen
+marido
+mármol
+marrón
+martes
+marzo
+masa
+máscara
+masivo
+matar
+materia
+matiz
+matriz
+máximo
+mayor
+mazorca
+mecha
+medalla
+medio
+médula
+mejilla
+mejor
+melena
+melón
+memoria
+menor
+mensaje
+mente
+menú
+mercado
+merengue
+mérito
+mes
+mesón
+meta
+meter
+método
+metro
+mezcla
+miedo
+miel
+miembro
+miga
+mil
+milagro
+militar
+millón
+mimo
+mina
+minero
+mínimo
+minuto
+miope
+mirar
+misa
+miseria
+misil
+mismo
+mitad
+mito
+mochila
+moción
+moda
+modelo
+moho
+mojar
+molde
+moler
+molino
+momento
+momia
+monarca
+moneda
+monja
+monto
+moño
+morada
+morder
+moreno
+morir
+morro
+morsa
+mortal
+mosca
+mostrar
+motivo
+mover
+móvil
+mozo
+mucho
+mudar
+mueble
+muela
+muerte
+muestra
+mugre
+mujer
+mula
+muleta
+multa
+mundo
+muñeca
+mural
+muro
+músculo
+museo
+musgo
+música
+muslo
+nácar
+nación
+nadar
+naipe
+naranja
+nariz
+narrar
+nasal
+natal
+nativo
+natural
+náusea
+naval
+nave
+navidad
+necio
+néctar
+negar
+negocio
+negro
+neón
+nervio
+neto
+neutro
+nevar
+nevera
+nicho
+nido
+niebla
+nieto
+niñez
+niño
+nítido
+nivel
+nobleza
+noche
+nómina
+noria
+norma
+norte
+nota
+noticia
+novato
+novela
+novio
+nube
+nuca
+núcleo
+nudillo
+nudo
+nuera
+nueve
+nuez
+nulo
+número
+nutria
+oasis
+obeso
+obispo
+objeto
+obra
+obrero
+observar
+obtener
+obvio
+oca
+ocaso
+océano
+ochenta
+ocho
+ocio
+ocre
+octavo
+octubre
+oculto
+ocupar
+ocurrir
+odiar
+odio
+odisea
+oeste
+ofensa
+oferta
+oficio
+ofrecer
+ogro
+oído
+oír
+ojo
+ola
+oleada
+olfato
+olivo
+olla
+olmo
+olor
+olvido
+ombligo
+onda
+onza
+opaco
+opción
+ópera
+opinar
+oponer
+optar
+óptica
+opuesto
+oración
+orador
+oral
+órbita
+orca
+orden
+oreja
+órgano
+orgía
+orgullo
+oriente
+origen
+orilla
+oro
+orquesta
+oruga
+osadía
+oscuro
+osezno
+oso
+ostra
+otoño
+otro
+oveja
+óvulo
+óxido
+oxígeno
+oyente
+ozono
+pacto
+padre
+paella
+página
+pago
+país
+pájaro
+palabra
+palco
+paleta
+pálido
+palma
+paloma
+palpar
+pan
+panal
+pánico
+pantera
+pañuelo
+papá
+papel
+papilla
+paquete
+parar
+parcela
+pared
+parir
+paro
+párpado
+parque
+párrafo
+parte
+pasar
+paseo
+pasión
+paso
+pasta
+pata
+patio
+patria
+pausa
+pauta
+pavo
+payaso
+peatón
+pecado
+pecera
+pecho
+pedal
+pedir
+pegar
+peine
+pelar
+peldaño
+pelea
+peligro
+pellejo
+pelo
+peluca
+pena
+pensar
+peñón
+peón
+peor
+pepino
+pequeño
+pera
+percha
+perder
+pereza
+perfil
+perico
+perla
+permiso
+perro
+persona
+pesa
+pesca
+pésimo
+pestaña
+pétalo
+petróleo
+pez
+pezuña
+picar
+pichón
+pie
+piedra
+pierna
+pieza
+pijama
+pilar
+piloto
+pimienta
+pino
+pintor
+pinza
+piña
+piojo
+pipa
+pirata
+pisar
+piscina
+piso
+pista
+pitón
+pizca
+placa
+plan
+plata
+playa
+plaza
+pleito
+pleno
+plomo
+pluma
+plural
+pobre
+poco
+poder
+podio
+poema
+poesía
+poeta
+polen
+policía
+pollo
+polvo
+pomada
+pomelo
+pomo
+pompa
+poner
+porción
+portal
+posada
+poseer
+posible
+poste
+potencia
+potro
+pozo
+prado
+precoz
+pregunta
+premio
+prensa
+preso
+previo
+primo
+príncipe
+prisión
+privar
+proa
+probar
+proceso
+producto
+proeza
+profesor
+programa
+prole
+promesa
+pronto
+propio
+próximo
+prueba
+público
+puchero
+pudor
+pueblo
+puerta
+puesto
+pulga
+pulir
+pulmón
+pulpo
+pulso
+puma
+punto
+puñal
+puño
+pupa
+pupila
+puré
+quedar
+queja
+quemar
+querer
+queso
+quieto
+química
+quince
+quitar
+rábano
+rabia
+rabo
+ración
+radical
+raíz
+rama
+rampa
+rancho
+rango
+rapaz
+rápido
+rapto
+rasgo
+raspa
+rato
+rayo
+raza
+razón
+reacción
+realidad
+rebaño
+rebote
+recaer
+receta
+rechazo
+recoger
+recreo
+recto
+recurso
+red
+redondo
+reducir
+reflejo
+reforma
+refrán
+refugio
+regalo
+regir
+regla
+regreso
+rehén
+reino
+reír
+reja
+relato
+relevo
+relieve
+relleno
+reloj
+remar
+remedio
+remo
+rencor
+rendir
+renta
+reparto
+repetir
+reposo
+reptil
+res
+rescate
+resina
+respeto
+resto
+resumen
+retiro
+retorno
+retrato
+reunir
+revés
+revista
+rey
+rezar
+rico
+riego
+rienda
+riesgo
+rifa
+rígido
+rigor
+rincón
+riñón
+río
+riqueza
+risa
+ritmo
+rito
+rizo
+roble
+roce
+rociar
+rodar
+rodeo
+rodilla
+roer
+rojizo
+rojo
+romero
+romper
+ron
+ronco
+ronda
+ropa
+ropero
+rosa
+rosca
+rostro
+rotar
+rubí
+rubor
+rudo
+rueda
+rugir
+ruido
+ruina
+ruleta
+rulo
+rumbo
+rumor
+ruptura
+ruta
+rutina
+sábado
+saber
+sabio
+sable
+sacar
+sagaz
+sagrado
+sala
+saldo
+salero
+salir
+salmón
+salón
+salsa
+salto
+salud
+salvar
+samba
+sanción
+sandía
+sanear
+sangre
+sanidad
+sano
+santo
+sapo
+saque
+sardina
+sartén
+sastre
+satán
+sauna
+saxofón
+sección
+seco
+secreto
+secta
+sed
+seguir
+seis
+sello
+selva
+semana
+semilla
+senda
+sensor
+señal
+señor
+separar
+sepia
+sequía
+ser
+serie
+sermón
+servir
+sesenta
+sesión
+seta
+setenta
+severo
+sexo
+sexto
+sidra
+siesta
+siete
+siglo
+signo
+sílaba
+silbar
+silencio
+silla
+símbolo
+simio
+sirena
+sistema
+sitio
+situar
+sobre
+socio
+sodio
+sol
+solapa
+soldado
+soledad
+sólido
+soltar
+solución
+sombra
+sondeo
+sonido
+sonoro
+sonrisa
+sopa
+soplar
+soporte
+sordo
+sorpresa
+sorteo
+sostén
+sótano
+suave
+subir
+suceso
+sudor
+suegra
+suelo
+sueño
+suerte
+sufrir
+sujeto
+sultán
+sumar
+superar
+suplir
+suponer
+supremo
+sur
+surco
+sureño
+surgir
+susto
+sutil
+tabaco
+tabique
+tabla
+tabú
+taco
+tacto
+tajo
+talar
+talco
+talento
+talla
+talón
+tamaño
+tambor
+tango
+tanque
+tapa
+tapete
+tapia
+tapón
+taquilla
+tarde
+tarea
+tarifa
+tarjeta
+tarot
+tarro
+tarta
+tatuaje
+tauro
+taza
+tazón
+teatro
+techo
+tecla
+técnica
+tejado
+tejer
+tejido
+tela
+teléfono
+tema
+temor
+templo
+tenaz
+tender
+tener
+tenis
+tenso
+teoría
+terapia
+terco
+término
+ternura
+terror
+tesis
+tesoro
+testigo
+tetera
+texto
+tez
+tibio
+tiburón
+tiempo
+tienda
+tierra
+tieso
+tigre
+tijera
+tilde
+timbre
+tímido
+timo
+tinta
+tío
+típico
+tipo
+tira
+tirón
+titán
+títere
+título
+tiza
+toalla
+tobillo
+tocar
+tocino
+todo
+toga
+toldo
+tomar
+tono
+tonto
+topar
+tope
+toque
+tórax
+torero
+tormenta
+torneo
+toro
+torpedo
+torre
+torso
+tortuga
+tos
+tosco
+toser
+tóxico
+trabajo
+tractor
+traer
+tráfico
+trago
+traje
+tramo
+trance
+trato
+trauma
+trazar
+trébol
+tregua
+treinta
+tren
+trepar
+tres
+tribu
+trigo
+tripa
+triste
+triunfo
+trofeo
+trompa
+tronco
+tropa
+trote
+trozo
+truco
+trueno
+trufa
+tubería
+tubo
+tuerto
+tumba
+tumor
+túnel
+túnica
+turbina
+turismo
+turno
+tutor
+ubicar
+úlcera
+umbral
+unidad
+unir
+universo
+uno
+untar
+uña
+urbano
+urbe
+urgente
+urna
+usar
+usuario
+útil
+utopía
+uva
+vaca
+vacío
+vacuna
+vagar
+vago
+vaina
+vajilla
+vale
+válido
+valle
+valor
+válvula
+vampiro
+vara
+variar
+varón
+vaso
+vecino
+vector
+vehículo
+veinte
+vejez
+vela
+velero
+veloz
+vena
+vencer
+venda
+veneno
+vengar
+venir
+venta
+venus
+ver
+verano
+verbo
+verde
+vereda
+verja
+verso
+verter
+vía
+viaje
+vibrar
+vicio
+víctima
+vida
+vídeo
+vidrio
+viejo
+viernes
+vigor
+vil
+villa
+vinagre
+vino
+viñedo
+violín
+viral
+virgo
+virtud
+visor
+víspera
+vista
+vitamina
+viudo
+vivaz
+vivero
+vivir
+vivo
+volcán
+volumen
+volver
+voraz
+votar
+voto
+voz
+vuelo
+vulgar
+yacer
+yate
+yegua
+yema
+yerno
+yeso
+yodo
+yoga
+yogur
+zafiro
+zanja
+zapato
+zarza
+zona
+zorro
+zumo
+zurdo
diff --git a/src/mnemonics/wordlists/old-word-list b/src/mnemonics/wordlists/old-word-list
new file mode 100644
index 000000000..a5184a9ce
--- /dev/null
+++ b/src/mnemonics/wordlists/old-word-list
@@ -0,0 +1,1626 @@
+like
+just
+love
+know
+never
+want
+time
+out
+there
+make
+look
+eye
+down
+only
+think
+heart
+back
+then
+into
+about
+more
+away
+still
+them
+take
+thing
+even
+through
+long
+always
+world
+too
+friend
+tell
+try
+hand
+thought
+over
+here
+other
+need
+smile
+again
+much
+cry
+been
+night
+ever
+little
+said
+end
+some
+those
+around
+mind
+people
+girl
+leave
+dream
+left
+turn
+myself
+give
+nothing
+really
+off
+before
+something
+find
+walk
+wish
+good
+once
+place
+ask
+stop
+keep
+watch
+seem
+everything
+wait
+got
+yet
+made
+remember
+start
+alone
+run
+hope
+maybe
+believe
+body
+hate
+after
+close
+talk
+stand
+own
+each
+hurt
+help
+home
+god
+soul
+new
+many
+two
+inside
+should
+true
+first
+fear
+mean
+better
+play
+another
+gone
+change
+use
+wonder
+someone
+hair
+cold
+open
+best
+any
+behind
+happen
+water
+dark
+laugh
+stay
+forever
+name
+work
+show
+sky
+break
+came
+deep
+door
+put
+black
+together
+upon
+happy
+such
+great
+white
+matter
+fill
+past
+please
+burn
+cause
+enough
+touch
+moment
+soon
+voice
+scream
+anything
+stare
+sound
+red
+everyone
+hide
+kiss
+truth
+death
+beautiful
+mine
+blood
+broken
+very
+pass
+next
+forget
+tree
+wrong
+air
+mother
+understand
+lip
+hit
+wall
+memory
+sleep
+free
+high
+realize
+school
+might
+skin
+sweet
+perfect
+blue
+kill
+breath
+dance
+against
+fly
+between
+grow
+strong
+under
+listen
+bring
+sometimes
+speak
+pull
+person
+become
+family
+begin
+ground
+real
+small
+father
+sure
+feet
+rest
+young
+finally
+land
+across
+today
+different
+guy
+line
+fire
+reason
+reach
+second
+slowly
+write
+eat
+smell
+mouth
+step
+learn
+three
+floor
+promise
+breathe
+darkness
+push
+earth
+guess
+save
+song
+above
+along
+both
+color
+house
+almost
+sorry
+anymore
+brother
+okay
+dear
+game
+fade
+already
+apart
+warm
+beauty
+heard
+notice
+question
+shine
+began
+piece
+whole
+shadow
+secret
+street
+within
+finger
+point
+morning
+whisper
+child
+moon
+green
+story
+glass
+kid
+silence
+since
+soft
+yourself
+empty
+shall
+angel
+answer
+baby
+bright
+dad
+path
+worry
+hour
+drop
+follow
+power
+war
+half
+flow
+heaven
+act
+chance
+fact
+least
+tired
+children
+near
+quite
+afraid
+rise
+sea
+taste
+window
+cover
+nice
+trust
+lot
+sad
+cool
+force
+peace
+return
+blind
+easy
+ready
+roll
+rose
+drive
+held
+music
+beneath
+hang
+mom
+paint
+emotion
+quiet
+clear
+cloud
+few
+pretty
+bird
+outside
+paper
+picture
+front
+rock
+simple
+anyone
+meant
+reality
+road
+sense
+waste
+bit
+leaf
+thank
+happiness
+meet
+men
+smoke
+truly
+decide
+self
+age
+book
+form
+alive
+carry
+escape
+damn
+instead
+able
+ice
+minute
+throw
+catch
+leg
+ring
+course
+goodbye
+lead
+poem
+sick
+corner
+desire
+known
+problem
+remind
+shoulder
+suppose
+toward
+wave
+drink
+jump
+woman
+pretend
+sister
+week
+human
+joy
+crack
+grey
+pray
+surprise
+dry
+knee
+less
+search
+bleed
+caught
+clean
+embrace
+future
+king
+son
+sorrow
+chest
+hug
+remain
+sat
+worth
+blow
+daddy
+final
+parent
+tight
+also
+create
+lonely
+safe
+cross
+dress
+evil
+silent
+bone
+fate
+perhaps
+anger
+class
+scar
+snow
+tiny
+tonight
+continue
+control
+dog
+edge
+mirror
+month
+suddenly
+comfort
+given
+loud
+quickly
+gaze
+plan
+rush
+stone
+town
+battle
+ignore
+spirit
+stood
+stupid
+yours
+brown
+build
+dust
+hey
+kept
+pay
+phone
+twist
+although
+ball
+beyond
+hidden
+nose
+taken
+fail
+float
+pure
+somehow
+wash
+wrap
+angry
+cheek
+creature
+forgotten
+heat
+rip
+single
+space
+special
+weak
+whatever
+yell
+anyway
+blame
+job
+choose
+country
+curse
+drift
+echo
+figure
+grew
+laughter
+neck
+suffer
+worse
+yeah
+disappear
+foot
+forward
+knife
+mess
+somewhere
+stomach
+storm
+beg
+idea
+lift
+offer
+breeze
+field
+five
+often
+simply
+stuck
+win
+allow
+confuse
+enjoy
+except
+flower
+seek
+strength
+calm
+grin
+gun
+heavy
+hill
+large
+ocean
+shoe
+sigh
+straight
+summer
+tongue
+accept
+crazy
+everyday
+exist
+grass
+mistake
+sent
+shut
+surround
+table
+ache
+brain
+destroy
+heal
+nature
+shout
+sign
+stain
+choice
+doubt
+glance
+glow
+mountain
+queen
+stranger
+throat
+tomorrow
+city
+either
+fish
+flame
+rather
+shape
+spin
+spread
+ash
+distance
+finish
+image
+imagine
+important
+nobody
+shatter
+warmth
+became
+feed
+flesh
+funny
+lust
+shirt
+trouble
+yellow
+attention
+bare
+bite
+money
+protect
+amaze
+appear
+born
+choke
+completely
+daughter
+fresh
+friendship
+gentle
+probably
+six
+deserve
+expect
+grab
+middle
+nightmare
+river
+thousand
+weight
+worst
+wound
+barely
+bottle
+cream
+regret
+relationship
+stick
+test
+crush
+endless
+fault
+itself
+rule
+spill
+art
+circle
+join
+kick
+mask
+master
+passion
+quick
+raise
+smooth
+unless
+wander
+actually
+broke
+chair
+deal
+favorite
+gift
+note
+number
+sweat
+box
+chill
+clothes
+lady
+mark
+park
+poor
+sadness
+tie
+animal
+belong
+brush
+consume
+dawn
+forest
+innocent
+pen
+pride
+stream
+thick
+clay
+complete
+count
+draw
+faith
+press
+silver
+struggle
+surface
+taught
+teach
+wet
+bless
+chase
+climb
+enter
+letter
+melt
+metal
+movie
+stretch
+swing
+vision
+wife
+beside
+crash
+forgot
+guide
+haunt
+joke
+knock
+plant
+pour
+prove
+reveal
+steal
+stuff
+trip
+wood
+wrist
+bother
+bottom
+crawl
+crowd
+fix
+forgive
+frown
+grace
+loose
+lucky
+party
+release
+surely
+survive
+teacher
+gently
+grip
+speed
+suicide
+travel
+treat
+vein
+written
+cage
+chain
+conversation
+date
+enemy
+however
+interest
+million
+page
+pink
+proud
+sway
+themselves
+winter
+church
+cruel
+cup
+demon
+experience
+freedom
+pair
+pop
+purpose
+respect
+shoot
+softly
+state
+strange
+bar
+birth
+curl
+dirt
+excuse
+lord
+lovely
+monster
+order
+pack
+pants
+pool
+scene
+seven
+shame
+slide
+ugly
+among
+blade
+blonde
+closet
+creek
+deny
+drug
+eternity
+gain
+grade
+handle
+key
+linger
+pale
+prepare
+swallow
+swim
+tremble
+wheel
+won
+cast
+cigarette
+claim
+college
+direction
+dirty
+gather
+ghost
+hundred
+loss
+lung
+orange
+present
+swear
+swirl
+twice
+wild
+bitter
+blanket
+doctor
+everywhere
+flash
+grown
+knowledge
+numb
+pressure
+radio
+repeat
+ruin
+spend
+unknown
+buy
+clock
+devil
+early
+false
+fantasy
+pound
+precious
+refuse
+sheet
+teeth
+welcome
+add
+ahead
+block
+bury
+caress
+content
+depth
+despite
+distant
+marry
+purple
+threw
+whenever
+bomb
+dull
+easily
+grasp
+hospital
+innocence
+normal
+receive
+reply
+rhyme
+shade
+someday
+sword
+toe
+visit
+asleep
+bought
+center
+consider
+flat
+hero
+history
+ink
+insane
+muscle
+mystery
+pocket
+reflection
+shove
+silently
+smart
+soldier
+spot
+stress
+train
+type
+view
+whether
+bus
+energy
+explain
+holy
+hunger
+inch
+magic
+mix
+noise
+nowhere
+prayer
+presence
+shock
+snap
+spider
+study
+thunder
+trail
+admit
+agree
+bag
+bang
+bound
+butterfly
+cute
+exactly
+explode
+familiar
+fold
+further
+pierce
+reflect
+scent
+selfish
+sharp
+sink
+spring
+stumble
+universe
+weep
+women
+wonderful
+action
+ancient
+attempt
+avoid
+birthday
+branch
+chocolate
+core
+depress
+drunk
+especially
+focus
+fruit
+honest
+match
+palm
+perfectly
+pillow
+pity
+poison
+roar
+shift
+slightly
+thump
+truck
+tune
+twenty
+unable
+wipe
+wrote
+coat
+constant
+dinner
+drove
+egg
+eternal
+flight
+flood
+frame
+freak
+gasp
+glad
+hollow
+motion
+peer
+plastic
+root
+screen
+season
+sting
+strike
+team
+unlike
+victim
+volume
+warn
+weird
+attack
+await
+awake
+built
+charm
+crave
+despair
+fought
+grant
+grief
+horse
+limit
+message
+ripple
+sanity
+scatter
+serve
+split
+string
+trick
+annoy
+blur
+boat
+brave
+clearly
+cling
+connect
+fist
+forth
+imagination
+iron
+jock
+judge
+lesson
+milk
+misery
+nail
+naked
+ourselves
+poet
+possible
+princess
+sail
+size
+snake
+society
+stroke
+torture
+toss
+trace
+wise
+bloom
+bullet
+cell
+check
+cost
+darling
+during
+footstep
+fragile
+hallway
+hardly
+horizon
+invisible
+journey
+midnight
+mud
+nod
+pause
+relax
+shiver
+sudden
+value
+youth
+abuse
+admire
+blink
+breast
+bruise
+constantly
+couple
+creep
+curve
+difference
+dumb
+emptiness
+gotta
+honor
+plain
+planet
+recall
+rub
+ship
+slam
+soar
+somebody
+tightly
+weather
+adore
+approach
+bond
+bread
+burst
+candle
+coffee
+cousin
+crime
+desert
+flutter
+frozen
+grand
+heel
+hello
+language
+level
+movement
+pleasure
+powerful
+random
+rhythm
+settle
+silly
+slap
+sort
+spoken
+steel
+threaten
+tumble
+upset
+aside
+awkward
+bee
+blank
+board
+button
+card
+carefully
+complain
+crap
+deeply
+discover
+drag
+dread
+effort
+entire
+fairy
+giant
+gotten
+greet
+illusion
+jeans
+leap
+liquid
+march
+mend
+nervous
+nine
+replace
+rope
+spine
+stole
+terror
+accident
+apple
+balance
+boom
+childhood
+collect
+demand
+depression
+eventually
+faint
+glare
+goal
+group
+honey
+kitchen
+laid
+limb
+machine
+mere
+mold
+murder
+nerve
+painful
+poetry
+prince
+rabbit
+shelter
+shore
+shower
+soothe
+stair
+steady
+sunlight
+tangle
+tease
+treasure
+uncle
+begun
+bliss
+canvas
+cheer
+claw
+clutch
+commit
+crimson
+crystal
+delight
+doll
+existence
+express
+fog
+football
+gay
+goose
+guard
+hatred
+illuminate
+mass
+math
+mourn
+rich
+rough
+skip
+stir
+student
+style
+support
+thorn
+tough
+yard
+yearn
+yesterday
+advice
+appreciate
+autumn
+bank
+beam
+bowl
+capture
+carve
+collapse
+confusion
+creation
+dove
+feather
+girlfriend
+glory
+government
+harsh
+hop
+inner
+loser
+moonlight
+neighbor
+neither
+peach
+pig
+praise
+screw
+shield
+shimmer
+sneak
+stab
+subject
+throughout
+thrown
+tower
+twirl
+wow
+army
+arrive
+bathroom
+bump
+cease
+cookie
+couch
+courage
+dim
+guilt
+howl
+hum
+husband
+insult
+led
+lunch
+mock
+mostly
+natural
+nearly
+needle
+nerd
+peaceful
+perfection
+pile
+price
+remove
+roam
+sanctuary
+serious
+shiny
+shook
+sob
+stolen
+tap
+vain
+void
+warrior
+wrinkle
+affection
+apologize
+blossom
+bounce
+bridge
+cheap
+crumble
+decision
+descend
+desperately
+dig
+dot
+flip
+frighten
+heartbeat
+huge
+lazy
+lick
+odd
+opinion
+process
+puzzle
+quietly
+retreat
+score
+sentence
+separate
+situation
+skill
+soak
+square
+stray
+taint
+task
+tide
+underneath
+veil
+whistle
+anywhere
+bedroom
+bid
+bloody
+burden
+careful
+compare
+concern
+curtain
+decay
+defeat
+describe
+double
+dreamer
+driver
+dwell
+evening
+flare
+flicker
+grandma
+guitar
+harm
+horrible
+hungry
+indeed
+lace
+melody
+monkey
+nation
+object
+obviously
+rainbow
+salt
+scratch
+shown
+shy
+stage
+stun
+third
+tickle
+useless
+weakness
+worship
+worthless
+afternoon
+beard
+boyfriend
+bubble
+busy
+certain
+chin
+concrete
+desk
+diamond
+doom
+drawn
+due
+felicity
+freeze
+frost
+garden
+glide
+harmony
+hopefully
+hunt
+jealous
+lightning
+mama
+mercy
+peel
+physical
+position
+pulse
+punch
+quit
+rant
+respond
+salty
+sane
+satisfy
+savior
+sheep
+slept
+social
+sport
+tuck
+utter
+valley
+wolf
+aim
+alas
+alter
+arrow
+awaken
+beaten
+belief
+brand
+ceiling
+cheese
+clue
+confidence
+connection
+daily
+disguise
+eager
+erase
+essence
+everytime
+expression
+fan
+flag
+flirt
+foul
+fur
+giggle
+glorious
+ignorance
+law
+lifeless
+measure
+mighty
+muse
+north
+opposite
+paradise
+patience
+patient
+pencil
+petal
+plate
+ponder
+possibly
+practice
+slice
+spell
+stock
+strife
+strip
+suffocate
+suit
+tender
+tool
+trade
+velvet
+verse
+waist
+witch
+aunt
+bench
+bold
+cap
+certainly
+click
+companion
+creator
+dart
+delicate
+determine
+dish
+dragon
+drama
+drum
+dude
+everybody
+feast
+forehead
+former
+fright
+fully
+gas
+hook
+hurl
+invite
+juice
+manage
+moral
+possess
+raw
+rebel
+royal
+scale
+scary
+several
+slight
+stubborn
+swell
+talent
+tea
+terrible
+thread
+torment
+trickle
+usually
+vast
+violence
+weave
+acid
+agony
+ashamed
+awe
+belly
+blend
+blush
+character
+cheat
+common
+company
+coward
+creak
+danger
+deadly
+defense
+define
+depend
+desperate
+destination
+dew
+duck
+dusty
+embarrass
+engine
+example
+explore
+foe
+freely
+frustrate
+generation
+glove
+guilty
+health
+hurry
+idiot
+impossible
+inhale
+jaw
+kingdom
+mention
+mist
+moan
+mumble
+mutter
+observe
+ode
+pathetic
+pattern
+pie
+prefer
+puff
+rape
+rare
+revenge
+rude
+scrape
+spiral
+squeeze
+strain
+sunset
+suspend
+sympathy
+thigh
+throne
+total
+unseen
+weapon
+weary
diff --git a/src/simplewallet/simplewallet.cpp b/src/simplewallet/simplewallet.cpp
index 37974088a..b10feb929 100644
--- a/src/simplewallet/simplewallet.cpp
+++ b/src/simplewallet/simplewallet.cpp
@@ -28,6 +28,12 @@
//
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
+/*!
+ * \file simplewallet.cpp
+ *
+ * \brief Source file that defines simple_wallet class.
+ */
+
#include <thread>
#include <iostream>
#include <sstream>
@@ -46,7 +52,8 @@
#include "wallet/wallet_rpc_server.h"
#include "version.h"
#include "crypto/crypto.h" // for crypto::secret_key definition
-#include "crypto/electrum-words.h"
+#include "mnemonics/electrum-words.h"
+#include <stdexcept>
#if defined(WIN32)
#include <crtdbg.h>
@@ -380,10 +387,18 @@ bool simple_wallet::init(const boost::program_options::variables_map& vm)
}
}
- if (!crypto::ElectrumWords::words_to_bytes(m_electrum_seed, m_recovery_key))
+ try
{
- fail_msg_writer() << "electrum-style word list failed verification";
- return false;
+ if (!crypto::ElectrumWords::words_to_bytes(m_electrum_seed, m_recovery_key))
+ {
+ fail_msg_writer() << "electrum-style word list failed verification";
+ return false;
+ }
+ }
+ catch (std::runtime_error &e)
+ {
+ fail_msg_writer() << e.what() << std::endl;
+ return false;
}
}
bool r = new_wallet(m_wallet_file, pwd_container.password(), m_recovery_key, m_restore_deterministic_wallet, m_non_deterministic, testnet);
@@ -430,6 +445,46 @@ bool simple_wallet::try_connect_to_daemon()
return true;
}
+/*!
+ * \brief Gets the word seed language from the user.
+ *
+ * User is asked to choose from a list of supported languages.
+ *
+ * \return The chosen language.
+ */
+std::string simple_wallet::get_mnemonic_language()
+{
+ std::vector<std::string> language_list;
+ std::string language_choice;
+ int language_number = -1;
+ crypto::ElectrumWords::get_language_list(language_list);
+ std::cout << "List of available languages for your wallet's seed:" << std::endl;
+ int ii;
+ std::vector<std::string>::iterator it;
+ for (it = language_list.begin(), ii = 0; it != language_list.end(); it++, ii++)
+ {
+ std::cout << ii << " : " << *it << std::endl;
+ }
+ while (language_number < 0)
+ {
+ language_choice = command_line::input_line("Enter the number corresponding to the language of your choice: ");
+ try
+ {
+ language_number = std::stoi(language_choice);
+ if (!((language_number >= 0) && (static_cast<uint>(language_number) < language_list.size())))
+ {
+ language_number = -1;
+ fail_msg_writer() << "Invalid language choice passed. Please try again.\n";
+ }
+ }
+ catch (std::exception &e)
+ {
+ fail_msg_writer() << "Invalid language choice passed. Please try again.\n";
+ }
+ }
+ return language_list[language_number];
+}
+
//----------------------------------------------------------------------------------------------------
bool simple_wallet::new_wallet(const string &wallet_file, const std::string& password, const crypto::secret_key& recovery_key, bool recover, bool two_random, bool testnet)
{
@@ -456,7 +511,41 @@ bool simple_wallet::new_wallet(const string &wallet_file, const std::string& pas
// convert rng value to electrum-style word list
std::string electrum_words;
- crypto::ElectrumWords::bytes_to_words(recovery_val, electrum_words);
+
+ bool was_deprecated_wallet = m_restore_deterministic_wallet &&
+ (crypto::ElectrumWords::get_is_old_style_word_list() ||
+ crypto::ElectrumWords::get_is_old_style_seed(m_electrum_seed));
+
+ // Ask for seed language if it is not a wallet restore or if it was a deprecated wallet
+ // that was earlier used before this restore.
+ if (!m_restore_deterministic_wallet || was_deprecated_wallet)
+ {
+ if (was_deprecated_wallet)
+ {
+ // The user had used an older version of the wallet with old style mnemonics.
+ message_writer(epee::log_space::console_color_green, false) << "\nYou had been using " <<
+ "a deprecated version of the wallet. Please use the new seed that we provide.\n";
+ }
+ std::string mnemonic_language = get_mnemonic_language();
+ try
+ {
+ crypto::ElectrumWords::init(mnemonic_language);
+ }
+ catch (std::runtime_error &e)
+ {
+ fail_msg_writer() << e.what() << std::endl;
+ return false;
+ }
+ }
+ try
+ {
+ crypto::ElectrumWords::bytes_to_words(recovery_val, electrum_words);
+ }
+ catch (std::runtime_error &e)
+ {
+ fail_msg_writer() << e.what() << std::endl;
+ return false;
+ }
std::string print_electrum = "";
diff --git a/src/simplewallet/simplewallet.h b/src/simplewallet/simplewallet.h
index 17affd564..8567b2343 100644
--- a/src/simplewallet/simplewallet.h
+++ b/src/simplewallet/simplewallet.h
@@ -28,6 +28,11 @@
//
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
+/*!
+ * \file simplewallet.h
+ *
+ * \brief Header file that declares simple_wallet class.
+ */
#pragma once
#include <memory>
@@ -41,12 +46,15 @@
#include "password_container.h"
#include "crypto/crypto.h" // for definition of crypto::secret_key
-
+/*!
+ * \namespace cryptonote
+ * \brief Holds cryptonote related classes and helpers.
+ */
namespace cryptonote
{
- /************************************************************************/
- /* */
- /************************************************************************/
+ /*!
+ * \brief Manages wallet operations. This is the most abstracted wallet class.
+ */
class simple_wallet : public tools::i_wallet2_callback
{
public:
@@ -93,6 +101,15 @@ namespace cryptonote
bool try_connect_to_daemon();
bool ask_wallet_create_if_needed();
+ /*!
+ * \brief Gets the word seed language from the user.
+ *
+ * User is asked to choose from a list of supported languages.
+ *
+ * \return The chosen language.
+ */
+ std::string get_mnemonic_language();
+
//----------------- i_wallet2_callback ---------------------
virtual void on_new_block(uint64_t height, const cryptonote::block& block);
virtual void on_money_received(uint64_t height, const cryptonote::transaction& tx, size_t out_index);
diff --git a/src/wallet/wallet2.cpp b/src/wallet/wallet2.cpp
index 3161f3b16..b8f793d7c 100644
--- a/src/wallet/wallet2.cpp
+++ b/src/wallet/wallet2.cpp
@@ -46,7 +46,7 @@ using namespace epee;
#include "crypto/crypto.h"
#include "serialization/binary_utils.h"
#include "cryptonote_protocol/blobdatatype.h"
-#include "crypto/electrum-words.h"
+#include "mnemonics/electrum-words.h"
#include "common/dns_utils.h"
extern "C"