diff options
Diffstat (limited to 'src/mnemonics')
-rw-r--r-- | src/mnemonics/electrum-words.cpp | 375 | ||||
-rw-r--r-- | src/mnemonics/electrum-words.h | 98 | ||||
-rw-r--r-- | src/mnemonics/english.h | 1691 | ||||
-rw-r--r-- | src/mnemonics/japanese.h | 1691 | ||||
-rw-r--r-- | src/mnemonics/language_base.h | 95 | ||||
-rw-r--r-- | src/mnemonics/old_english.h | 1691 | ||||
-rw-r--r-- | src/mnemonics/portuguese.h | 1690 | ||||
-rw-r--r-- | src/mnemonics/singleton.h | 62 | ||||
-rw-r--r-- | src/mnemonics/spanish.h | 1691 |
9 files changed, 9084 insertions, 0 deletions
diff --git a/src/mnemonics/electrum-words.cpp b/src/mnemonics/electrum-words.cpp new file mode 100644 index 000000000..b204e81cf --- /dev/null +++ b/src/mnemonics/electrum-words.cpp @@ -0,0 +1,375 @@ +// 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 <unordered_map> +#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> + +#include "english.h" +#include "spanish.h" +#include "portuguese.h" +#include "japanese.h" +#include "old_english.h" +#include "language_base.h" +#include "singleton.h" + +namespace +{ + const int seed_length = 24; + + /*! + * \brief Finds the word list that contains the seed words and puts the indices + * where matches occured in matched_indices. + * \param seed List of words to match. + * \param has_checksum If word list passed checksum test, we need to only do a prefix check. + * \param matched_indices The indices where the seed words were found are added to this. + * \return true if all the words were present in some language false if not. + */ + bool find_seed_language(const std::vector<std::string> &seed, + bool has_checksum, std::vector<uint32_t> &matched_indices, uint32_t &word_list_length, + std::string &language_name) + { + // If there's a new language added, add an instance of it here. + std::vector<Language::Base*> language_instances({ + Language::Singleton<Language::English>::instance(), + Language::Singleton<Language::Spanish>::instance(), + Language::Singleton<Language::Portuguese>::instance(), + Language::Singleton<Language::Japanese>::instance(), + Language::Singleton<Language::OldEnglish>::instance() + }); + // To hold trimmed seed words in case of a checksum being present. + std::vector<std::string> trimmed_seed; + if (has_checksum) + { + // If it had a checksum, we'll just compare the unique prefix + // So we create a list of trimmed seed words + for (std::vector<std::string>::const_iterator it = seed.begin(); it != seed.end(); it++) + { + trimmed_seed.push_back(it->length() > Language::unique_prefix_length ? + it->substr(0, Language::unique_prefix_length) : *it); + } + } + + // Iterate through all the languages and find a match + for (std::vector<Language::Base*>::iterator it1 = language_instances.begin(); + it1 != language_instances.end(); it1++) + { + const std::unordered_map<std::string, uint32_t> &word_map = (*it1)->get_word_map(); + const std::unordered_map<std::string, uint32_t> &trimmed_word_map = (*it1)->get_trimmed_word_map(); + // To iterate through seed words + std::vector<std::string>::const_iterator it2; + // To iterate through trimmed seed words + std::vector<std::string>::iterator it3; + bool full_match = true; + + // Iterate through all the words and see if they're all present + for (it2 = seed.begin(), it3 = trimmed_seed.begin(); + it2 != seed.end(); it2++, it3++) + { + if (has_checksum) + { + // Use the trimmed words and map + if (trimmed_word_map.count(*it3) == 0) + { + full_match = false; + break; + } + matched_indices.push_back(trimmed_word_map.at(*it3)); + } + else + { + if (word_map.count(*it2) == 0) + { + full_match = false; + break; + } + matched_indices.push_back(word_map.at(*it2)); + } + } + if (full_match) + { + word_list_length = (*it1)->get_word_list().size(); + language_name = (*it1)->get_language_name(); + return true; + } + // Some didn't match. Clear the index array. + matched_indices.clear(); + } + return false; + } + + /*! + * \brief Creates a checksum index in the word list array on the list of words. + * \param word_list Vector of words + * \return Checksum index + */ + uint32_t create_checksum_index(const std::vector<std::string> &word_list) + { + std::string trimmed_words = ""; + + for (std::vector<std::string>::const_iterator it = word_list.begin(); it != word_list.end(); it++) + { + if (it->length() > 4) + { + trimmed_words += it->substr(0, Language::unique_prefix_length); + } + else + { + trimmed_words += *it; + } + } + boost::crc_32_type result; + result.process_bytes(trimmed_words.data(), trimmed_words.length()); + return result.checksum() % seed_length; + } + + /*! + * \brief Does the checksum test on the seed passed. + * \param seed Vector of seed words + * \return True if the test passed false if not. + */ + bool checksum_test(std::vector<std::string> seed) + { + // The last word is the checksum. + std::string last_word = seed.back(); + seed.pop_back(); + + std::string checksum = seed[create_checksum_index(seed)]; + + std::string trimmed_checksum = checksum.length() > 4 ? checksum.substr(0, Language::unique_prefix_length) : + checksum; + std::string trimmed_last_word = checksum.length() > 4 ? last_word.substr(0, Language::unique_prefix_length) : + last_word; + return trimmed_checksum == trimmed_last_word; + } +} + +/*! + * \namespace crypto + * + * \brief crypto namespace. + */ +namespace crypto +{ + /*! + * \namespace crypto::ElectrumWords + * + * \brief Mnemonic seed word generation and wallet restoration helper functions. + */ + namespace ElectrumWords + { + /*! + * \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. + * \param language_name Language of the seed as found gets written here. + * \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::string &language_name) + { + std::vector<std::string> seed; + + boost::split(seed, words, boost::is_any_of(" ")); + + // error on non-compliant word list + if (seed.size() != seed_length/2 && seed.size() != seed_length && + seed.size() != seed_length + 1) + { + return false; + } + + // If it is seed with a checksum. + bool has_checksum = seed.size() == (seed_length + 1); + if (has_checksum) + { + if (!checksum_test(seed)) + { + // Checksum fail + return false; + } + seed.pop_back(); + } + + std::vector<uint32_t> matched_indices; + uint32_t word_list_length = 0; + if (!find_seed_language(seed, has_checksum, matched_indices, word_list_length, language_name)) + { + return false; + } + + for (unsigned int i=0; i < seed.size() / 3; i++) + { + uint32_t val; + uint32_t w1, w2, w3; + w1 = matched_indices[i*3]; + w2 = matched_indices[i*3 + 1]; + w3 = matched_indices[i*3 + 2]; + + val = w1 + word_list_length * (((word_list_length - w1) + w2) % word_list_length) + + word_list_length * word_list_length * (((word_list_length - w2) + w3) % word_list_length); + + if (!(val % word_list_length == w1)) return false; + + memcpy(dst.data + i * 4, &val, 4); // copy 4 bytes to position + } + + std::string wlist_copy = words; + if (seed.size() == seed_length/2) + { + 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. + * \param language_name Seed language name + * \return true if successful false if not. Unsuccessful if wrong key size. + */ + bool bytes_to_words(const crypto::secret_key& src, std::string& words, + const std::string &language_name) + { + + if (sizeof(src.data) % 4 != 0 || sizeof(src.data) == 0) return false; + + Language::Base *language; + if (language_name == "English") + { + language = Language::Singleton<Language::English>::instance(); + } + else if (language_name == "Spanish") + { + language = Language::Singleton<Language::Spanish>::instance(); + } + else if (language_name == "Portuguese") + { + language = Language::Singleton<Language::Portuguese>::instance(); + } + else if (language_name == "Japanese") + { + language = Language::Singleton<Language::Japanese>::instance(); + } + else + { + return false; + } + const std::vector<std::string> &word_list = language->get_word_list(); + // To store the words for random access to add the checksum word later. + std::vector<std::string> words_store; + + uint32_t word_list_length = word_list.size(); + // 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 % word_list_length; + w2 = ((val / word_list_length) + w1) % word_list_length; + w3 = (((val / word_list_length) / word_list_length) + w2) % word_list_length; + + words += word_list[w1]; + words += ' '; + words += word_list[w2]; + words += ' '; + words += word_list[w3]; + + words_store.push_back(word_list[w1]); + words_store.push_back(word_list[w2]); + words_store.push_back(word_list[w3]); + } + + words.pop_back(); + words += (' ' + words_store[create_checksum_index(words_store)]); + 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) + { + std::vector<Language::Base*> language_instances({ + Language::Singleton<Language::English>::instance(), + Language::Singleton<Language::Spanish>::instance(), + Language::Singleton<Language::Portuguese>::instance(), + Language::Singleton<Language::Japanese>::instance() + }); + for (std::vector<Language::Base*>::iterator it = language_instances.begin(); + it != language_instances.end(); it++) + { + languages.push_back((*it)->get_language_name()); + } + } + + /*! + * \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> word_list; + boost::split(word_list, seed, boost::is_any_of(" ")); + return word_list.size() != (seed_length + 1); + } + + } + +} diff --git a/src/mnemonics/electrum-words.h b/src/mnemonics/electrum-words.h new file mode 100644 index 000000000..b822e7740 --- /dev/null +++ b/src/mnemonics/electrum-words.h @@ -0,0 +1,98 @@ +// 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. + */ + +#ifndef ELECTRUM_WORDS_H +#define ELECTRUM_WORDS_H + +#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 + { + + const std::string old_language_name = "OldEnglish"; + /*! + * \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. + * \param language_name Language of the seed as found gets written here. + * \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::string &language_name); + + /*! + * \brief Converts bytes (secret key) to seed words. + * \param src Secret key + * \param words Space delimited concatenated words get written here. + * \param language_name Seed language name + * \return true if successful false if not. Unsuccessful if wrong key size. + */ + bool bytes_to_words(const crypto::secret_key& src, std::string& words, + const std::string &language_name); + + /*! + * \brief Gets a list of seed languages that are supported. + * \param languages A vector is set to the list of languages. + */ + void get_language_list(std::vector<std::string> &languages); + + /*! + * \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); + } +} + +#endif diff --git a/src/mnemonics/english.h b/src/mnemonics/english.h new file mode 100644 index 000000000..1b08e08d5 --- /dev/null +++ b/src/mnemonics/english.h @@ -0,0 +1,1691 @@ +// Word list originally created as part of the Electrum project, Copyright (C) 2014 Thomas Voegtlin
+// 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 english.h
+ *
+ * \brief English word list and map.
+ */
+
+#ifndef ENGLISH_H
+#define ENGLISH_H
+
+#include <vector>
+#include <unordered_map>
+#include "language_base.h"
+#include <string>
+
+/*!
+ * \namespace Language
+ * \brief Mnemonic language related namespace.
+ */
+namespace Language
+{
+ class English: public Base
+ {
+ public:
+ English()
+ {
+ word_list = new std::vector<std::string>({
+ "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"
+ });
+ word_map = new std::unordered_map<std::string, uint32_t>;
+ trimmed_word_map = new std::unordered_map<std::string, uint32_t>;
+ language_name = "English";
+ populate_maps();
+ }
+ };
+}
+
+#endif
diff --git a/src/mnemonics/japanese.h b/src/mnemonics/japanese.h new file mode 100644 index 000000000..84d7f56f5 --- /dev/null +++ b/src/mnemonics/japanese.h @@ -0,0 +1,1691 @@ +// Word list originally created by dabura667,
+// 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 japanese.h
+ *
+ * \brief Japanese word list and map.
+ */
+
+#ifndef JAPANESE_H
+#define JAPANESE_H
+
+#include <vector>
+#include <unordered_map>
+#include "language_base.h"
+#include <string>
+
+/*!
+ * \namespace Language
+ * \brief Mnemonic language related namespace.
+ */
+namespace Language
+{
+ class Japanese: public Base
+ {
+ public:
+ Japanese()
+ {
+ word_list = new std::vector<std::string>({
+ "あいこくしん",
+ "あいさつ",
+ "あいだ",
+ "あおぞら",
+ "あかちゃん",
+ "あきる",
+ "あけがた",
+ "あける",
+ "あこがれる",
+ "あさい",
+ "あさひ",
+ "あしあと",
+ "あじわう",
+ "あずかる",
+ "あずき",
+ "あそぶ",
+ "あたえる",
+ "あたためる",
+ "あたりまえ",
+ "あたる",
+ "あつい",
+ "あつかう",
+ "あっしゅく",
+ "あつまり",
+ "あつめる",
+ "あてな",
+ "あてはまる",
+ "あひる",
+ "あぶら",
+ "あぶる",
+ "あふれる",
+ "あまい",
+ "あまど",
+ "あまやかす",
+ "あまり",
+ "あみもの",
+ "あめりか",
+ "あやまる",
+ "あゆむ",
+ "あらいぐま",
+ "あらし",
+ "あらすじ",
+ "あらためる",
+ "あらゆる",
+ "あらわす",
+ "ありがとう",
+ "あわせる",
+ "あわてる",
+ "あんい",
+ "あんがい",
+ "あんこ",
+ "あんぜん",
+ "あんてい",
+ "あんない",
+ "あんまり",
+ "いいだす",
+ "いおん",
+ "いがい",
+ "いがく",
+ "いきおい",
+ "いきなり",
+ "いきもの",
+ "いきる",
+ "いくじ",
+ "いくぶん",
+ "いけばな",
+ "いけん",
+ "いこう",
+ "いこく",
+ "いこつ",
+ "いさましい",
+ "いさん",
+ "いしき",
+ "いじゅう",
+ "いじょう",
+ "いじわる",
+ "いずみ",
+ "いずれ",
+ "いせい",
+ "いせえび",
+ "いせかい",
+ "いせき",
+ "いぜん",
+ "いそうろう",
+ "いそがしい",
+ "いだい",
+ "いだく",
+ "いたずら",
+ "いたみ",
+ "いたりあ",
+ "いちおう",
+ "いちじ",
+ "いちど",
+ "いちば",
+ "いちぶ",
+ "いちりゅう",
+ "いつか",
+ "いっしゅん",
+ "いっせい",
+ "いっそう",
+ "いったん",
+ "いっち",
+ "いってい",
+ "いっぽう",
+ "いてざ",
+ "いてん",
+ "いどう",
+ "いとこ",
+ "いない",
+ "いなか",
+ "いねむり",
+ "いのち",
+ "いのる",
+ "いはつ",
+ "いばる",
+ "いはん",
+ "いびき",
+ "いひん",
+ "いふく",
+ "いへん",
+ "いほう",
+ "いみん",
+ "いもうと",
+ "いもたれ",
+ "いもり",
+ "いやがる",
+ "いやす",
+ "いよかん",
+ "いよく",
+ "いらい",
+ "いらすと",
+ "いりぐち",
+ "いりょう",
+ "いれい",
+ "いれもの",
+ "いれる",
+ "いろえんぴつ",
+ "いわい",
+ "いわう",
+ "いわかん",
+ "いわば",
+ "いわゆる",
+ "いんげんまめ",
+ "いんさつ",
+ "いんしょう",
+ "いんよう",
+ "うえき",
+ "うえる",
+ "うおざ",
+ "うがい",
+ "うかぶ",
+ "うかべる",
+ "うきわ",
+ "うくらいな",
+ "うくれれ",
+ "うけたまわる",
+ "うけつけ",
+ "うけとる",
+ "うけもつ",
+ "うける",
+ "うごかす",
+ "うごく",
+ "うこん",
+ "うさぎ",
+ "うしなう",
+ "うしろがみ",
+ "うすい",
+ "うすぎ",
+ "うすぐらい",
+ "うすめる",
+ "うせつ",
+ "うちあわせ",
+ "うちがわ",
+ "うちき",
+ "うちゅう",
+ "うっかり",
+ "うつくしい",
+ "うったえる",
+ "うつる",
+ "うどん",
+ "うなぎ",
+ "うなじ",
+ "うなずく",
+ "うなる",
+ "うねる",
+ "うのう",
+ "うぶげ",
+ "うぶごえ",
+ "うまれる",
+ "うめる",
+ "うもう",
+ "うやまう",
+ "うよく",
+ "うらがえす",
+ "うらぐち",
+ "うらない",
+ "うりあげ",
+ "うりきれ",
+ "うるさい",
+ "うれしい",
+ "うれゆき",
+ "うれる",
+ "うろこ",
+ "うわき",
+ "うわさ",
+ "うんこう",
+ "うんちん",
+ "うんてん",
+ "うんどう",
+ "えいえん",
+ "えいが",
+ "えいきょう",
+ "えいご",
+ "えいせい",
+ "えいぶん",
+ "えいよう",
+ "えいわ",
+ "えおり",
+ "えがお",
+ "えがく",
+ "えきたい",
+ "えくせる",
+ "えしゃく",
+ "えすて",
+ "えつらん",
+ "えのぐ",
+ "えほうまき",
+ "えほん",
+ "えまき",
+ "えもじ",
+ "えもの",
+ "えらい",
+ "えらぶ",
+ "えりあ",
+ "えんえん",
+ "えんかい",
+ "えんぎ",
+ "えんげき",
+ "えんしゅう",
+ "えんぜつ",
+ "えんそく",
+ "えんちょう",
+ "えんとつ",
+ "おいかける",
+ "おいこす",
+ "おいしい",
+ "おいつく",
+ "おうえん",
+ "おうさま",
+ "おうじ",
+ "おうせつ",
+ "おうたい",
+ "おうふく",
+ "おうべい",
+ "おうよう",
+ "おえる",
+ "おおい",
+ "おおう",
+ "おおどおり",
+ "おおや",
+ "おおよそ",
+ "おかえり",
+ "おかず",
+ "おがむ",
+ "おかわり",
+ "おぎなう",
+ "おきる",
+ "おくさま",
+ "おくじょう",
+ "おくりがな",
+ "おくる",
+ "おくれる",
+ "おこす",
+ "おこなう",
+ "おこる",
+ "おさえる",
+ "おさない",
+ "おさめる",
+ "おしいれ",
+ "おしえる",
+ "おじぎ",
+ "おじさん",
+ "おしゃれ",
+ "おそらく",
+ "おそわる",
+ "おたがい",
+ "おたく",
+ "おだやか",
+ "おちつく",
+ "おっと",
+ "おつり",
+ "おでかけ",
+ "おとしもの",
+ "おとなしい",
+ "おどり",
+ "おどろかす",
+ "おばさん",
+ "おまいり",
+ "おめでとう",
+ "おもいで",
+ "おもう",
+ "おもたい",
+ "おもちゃ",
+ "おやつ",
+ "おやゆび",
+ "およぼす",
+ "おらんだ",
+ "おろす",
+ "おんがく",
+ "おんけい",
+ "おんしゃ",
+ "おんせん",
+ "おんだん",
+ "おんちゅう",
+ "おんどけい",
+ "かあつ",
+ "かいが",
+ "がいき",
+ "がいけん",
+ "がいこう",
+ "かいさつ",
+ "かいしゃ",
+ "かいすいよく",
+ "かいぜん",
+ "かいぞうど",
+ "かいつう",
+ "かいてん",
+ "かいとう",
+ "かいふく",
+ "がいへき",
+ "かいほう",
+ "かいよう",
+ "がいらい",
+ "かいわ",
+ "かえる",
+ "かおり",
+ "かかえる",
+ "かがく",
+ "かがし",
+ "かがみ",
+ "かくご",
+ "かくとく",
+ "かざる",
+ "がぞう",
+ "かたい",
+ "かたち",
+ "がちょう",
+ "がっきゅう",
+ "がっこう",
+ "がっさん",
+ "がっしょう",
+ "かなざわし",
+ "かのう",
+ "がはく",
+ "かぶか",
+ "かほう",
+ "かほご",
+ "かまう",
+ "かまぼこ",
+ "かめれおん",
+ "かゆい",
+ "かようび",
+ "からい",
+ "かるい",
+ "かろう",
+ "かわく",
+ "かわら",
+ "がんか",
+ "かんけい",
+ "かんこう",
+ "かんしゃ",
+ "かんそう",
+ "かんたん",
+ "かんち",
+ "がんばる",
+ "きあい",
+ "きあつ",
+ "きいろ",
+ "ぎいん",
+ "きうい",
+ "きうん",
+ "きえる",
+ "きおう",
+ "きおく",
+ "きおち",
+ "きおん",
+ "きかい",
+ "きかく",
+ "きかんしゃ",
+ "ききて",
+ "きくばり",
+ "きくらげ",
+ "きけんせい",
+ "きこう",
+ "きこえる",
+ "きこく",
+ "きさい",
+ "きさく",
+ "きさま",
+ "きさらぎ",
+ "ぎじかがく",
+ "ぎしき",
+ "ぎじたいけん",
+ "ぎじにってい",
+ "ぎじゅつしゃ",
+ "きすう",
+ "きせい",
+ "きせき",
+ "きせつ",
+ "きそう",
+ "きぞく",
+ "きぞん",
+ "きたえる",
+ "きちょう",
+ "きつえん",
+ "ぎっちり",
+ "きつつき",
+ "きつね",
+ "きてい",
+ "きどう",
+ "きどく",
+ "きない",
+ "きなが",
+ "きなこ",
+ "きぬごし",
+ "きねん",
+ "きのう",
+ "きのした",
+ "きはく",
+ "きびしい",
+ "きひん",
+ "きふく",
+ "きぶん",
+ "きぼう",
+ "きほん",
+ "きまる",
+ "きみつ",
+ "きむずかしい",
+ "きめる",
+ "きもだめし",
+ "きもち",
+ "きもの",
+ "きゃく",
+ "きやく",
+ "ぎゅうにく",
+ "きよう",
+ "きょうりゅう",
+ "きらい",
+ "きらく",
+ "きりん",
+ "きれい",
+ "きれつ",
+ "きろく",
+ "ぎろん",
+ "きわめる",
+ "ぎんいろ",
+ "きんかくじ",
+ "きんじょ",
+ "きんようび",
+ "ぐあい",
+ "くいず",
+ "くうかん",
+ "くうき",
+ "くうぐん",
+ "くうこう",
+ "ぐうせい",
+ "くうそう",
+ "ぐうたら",
+ "くうふく",
+ "くうぼ",
+ "くかん",
+ "くきょう",
+ "くげん",
+ "ぐこう",
+ "くさい",
+ "くさき",
+ "くさばな",
+ "くさる",
+ "くしゃみ",
+ "くしょう",
+ "くすのき",
+ "くすりゆび",
+ "くせげ",
+ "くせん",
+ "ぐたいてき",
+ "くださる",
+ "くたびれる",
+ "くちこみ",
+ "くちさき",
+ "くつした",
+ "ぐっすり",
+ "くつろぐ",
+ "くとうてん",
+ "くどく",
+ "くなん",
+ "くねくね",
+ "くのう",
+ "くふう",
+ "くみあわせ",
+ "くみたてる",
+ "くめる",
+ "くやくしょ",
+ "くらす",
+ "くらべる",
+ "くるま",
+ "くれる",
+ "くろう",
+ "くわしい",
+ "ぐんかん",
+ "ぐんしょく",
+ "ぐんたい",
+ "ぐんて",
+ "けあな",
+ "けいかく",
+ "けいけん",
+ "けいこ",
+ "けいさつ",
+ "げいじゅつ",
+ "けいたい",
+ "げいのうじん",
+ "けいれき",
+ "けいろ",
+ "けおとす",
+ "けおりもの",
+ "げきか",
+ "げきげん",
+ "げきだん",
+ "げきちん",
+ "げきとつ",
+ "げきは",
+ "げきやく",
+ "げこう",
+ "げこくじょう",
+ "げざい",
+ "けさき",
+ "げざん",
+ "けしき",
+ "けしごむ",
+ "けしょう",
+ "げすと",
+ "けたば",
+ "けちゃっぷ",
+ "けちらす",
+ "けつあつ",
+ "けつい",
+ "けつえき",
+ "けっこん",
+ "けつじょ",
+ "けっせき",
+ "けってい",
+ "けつまつ",
+ "げつようび",
+ "げつれい",
+ "けつろん",
+ "げどく",
+ "けとばす",
+ "けとる",
+ "けなげ",
+ "けなす",
+ "けなみ",
+ "けぬき",
+ "げねつ",
+ "けねん",
+ "けはい",
+ "げひん",
+ "けぶかい",
+ "げぼく",
+ "けまり",
+ "けみかる",
+ "けむし",
+ "けむり",
+ "けもの",
+ "けらい",
+ "けろけろ",
+ "けわしい",
+ "けんい",
+ "けんえつ",
+ "けんお",
+ "けんか",
+ "げんき",
+ "けんげん",
+ "けんこう",
+ "けんさく",
+ "けんしゅう",
+ "けんすう",
+ "げんそう",
+ "けんちく",
+ "けんてい",
+ "けんとう",
+ "けんない",
+ "けんにん",
+ "げんぶつ",
+ "けんま",
+ "けんみん",
+ "けんめい",
+ "けんらん",
+ "けんり",
+ "こあくま",
+ "こいぬ",
+ "こいびと",
+ "ごうい",
+ "こうえん",
+ "こうおん",
+ "こうかん",
+ "ごうきゅう",
+ "ごうけい",
+ "こうこう",
+ "こうさい",
+ "こうじ",
+ "こうすい",
+ "ごうせい",
+ "こうそく",
+ "こうたい",
+ "こうちゃ",
+ "こうつう",
+ "こうてい",
+ "こうどう",
+ "こうない",
+ "こうはい",
+ "ごうほう",
+ "ごうまん",
+ "こうもく",
+ "こうりつ",
+ "こえる",
+ "こおり",
+ "ごかい",
+ "ごがつ",
+ "ごかん",
+ "こくご",
+ "こくさい",
+ "こくとう",
+ "こくない",
+ "こくはく",
+ "こぐま",
+ "こけい",
+ "こける",
+ "ここのか",
+ "こころ",
+ "こさめ",
+ "こしつ",
+ "こすう",
+ "こせい",
+ "こせき",
+ "こぜん",
+ "こそだて",
+ "こたい",
+ "こたえる",
+ "こたつ",
+ "こちょう",
+ "こっか",
+ "こつこつ",
+ "こつばん",
+ "こつぶ",
+ "こてい",
+ "こてん",
+ "ことがら",
+ "ことし",
+ "ことば",
+ "ことり",
+ "こなごな",
+ "こねこね",
+ "このまま",
+ "このみ",
+ "このよ",
+ "ごはん",
+ "こひつじ",
+ "こふう",
+ "こふん",
+ "こぼれる",
+ "ごまあぶら",
+ "こまかい",
+ "ごますり",
+ "こまつな",
+ "こまる",
+ "こむぎこ",
+ "こもじ",
+ "こもち",
+ "こもの",
+ "こもん",
+ "こやく",
+ "こやま",
+ "こゆう",
+ "こゆび",
+ "こよい",
+ "こよう",
+ "こりる",
+ "これくしょん",
+ "ころっけ",
+ "こわもて",
+ "こわれる",
+ "こんいん",
+ "こんかい",
+ "こんき",
+ "こんしゅう",
+ "こんすい",
+ "こんだて",
+ "こんとん",
+ "こんなん",
+ "こんびに",
+ "こんぽん",
+ "こんまけ",
+ "こんや",
+ "こんれい",
+ "こんわく",
+ "ざいえき",
+ "さいかい",
+ "さいきん",
+ "ざいげん",
+ "ざいこ",
+ "さいしょ",
+ "さいせい",
+ "ざいたく",
+ "ざいちゅう",
+ "さいてき",
+ "ざいりょう",
+ "さうな",
+ "さかいし",
+ "さがす",
+ "さかな",
+ "さかみち",
+ "さがる",
+ "さぎょう",
+ "さくし",
+ "さくひん",
+ "さくら",
+ "さこく",
+ "さこつ",
+ "さずかる",
+ "ざせき",
+ "さたん",
+ "さつえい",
+ "ざつおん",
+ "ざっか",
+ "ざつがく",
+ "さっきょく",
+ "ざっし",
+ "さつじん",
+ "ざっそう",
+ "さつたば",
+ "さつまいも",
+ "さてい",
+ "さといも",
+ "さとう",
+ "さとおや",
+ "さとし",
+ "さとる",
+ "さのう",
+ "さばく",
+ "さびしい",
+ "さべつ",
+ "さほう",
+ "さほど",
+ "さます",
+ "さみしい",
+ "さみだれ",
+ "さむけ",
+ "さめる",
+ "さやえんどう",
+ "さゆう",
+ "さよう",
+ "さよく",
+ "さらだ",
+ "ざるそば",
+ "さわやか",
+ "さわる",
+ "さんいん",
+ "さんか",
+ "さんきゃく",
+ "さんこう",
+ "さんさい",
+ "ざんしょ",
+ "さんすう",
+ "さんせい",
+ "さんそ",
+ "さんち",
+ "さんま",
+ "さんみ",
+ "さんらん",
+ "しあい",
+ "しあげ",
+ "しあさって",
+ "しあわせ",
+ "しいく",
+ "しいん",
+ "しうち",
+ "しえい",
+ "しおけ",
+ "しかい",
+ "しかく",
+ "じかん",
+ "しごと",
+ "しすう",
+ "じだい",
+ "したうけ",
+ "したぎ",
+ "したて",
+ "したみ",
+ "しちょう",
+ "しちりん",
+ "しっかり",
+ "しつじ",
+ "しつもん",
+ "してい",
+ "してき",
+ "してつ",
+ "じてん",
+ "じどう",
+ "しなぎれ",
+ "しなもの",
+ "しなん",
+ "しねま",
+ "しねん",
+ "しのぐ",
+ "しのぶ",
+ "しはい",
+ "しばかり",
+ "しはつ",
+ "しはらい",
+ "しはん",
+ "しひょう",
+ "しふく",
+ "じぶん",
+ "しへい",
+ "しほう",
+ "しほん",
+ "しまう",
+ "しまる",
+ "しみん",
+ "しむける",
+ "じむしょ",
+ "しめい",
+ "しめる",
+ "しもん",
+ "しゃいん",
+ "しゃうん",
+ "しゃおん",
+ "じゃがいも",
+ "しやくしょ",
+ "しゃくほう",
+ "しゃけん",
+ "しゃこ",
+ "しゃざい",
+ "しゃしん",
+ "しゃせん",
+ "しゃそう",
+ "しゃたい",
+ "しゃちょう",
+ "しゃっきん",
+ "じゃま",
+ "しゃりん",
+ "しゃれい",
+ "じゆう",
+ "じゅうしょ",
+ "しゅくはく",
+ "じゅしん",
+ "しゅっせき",
+ "しゅみ",
+ "しゅらば",
+ "じゅんばん",
+ "しょうかい",
+ "しょくたく",
+ "しょっけん",
+ "しょどう",
+ "しょもつ",
+ "しらせる",
+ "しらべる",
+ "しんか",
+ "しんこう",
+ "じんじゃ",
+ "しんせいじ",
+ "しんちく",
+ "しんりん",
+ "すあげ",
+ "すあし",
+ "すあな",
+ "ずあん",
+ "すいえい",
+ "すいか",
+ "すいとう",
+ "ずいぶん",
+ "すいようび",
+ "すうがく",
+ "すうじつ",
+ "すうせん",
+ "すおどり",
+ "すきま",
+ "すくう",
+ "すくない",
+ "すける",
+ "すごい",
+ "すこし",
+ "ずさん",
+ "すずしい",
+ "すすむ",
+ "すすめる",
+ "すっかり",
+ "ずっしり",
+ "ずっと",
+ "すてき",
+ "すてる",
+ "すねる",
+ "すのこ",
+ "すはだ",
+ "すばらしい",
+ "ずひょう",
+ "ずぶぬれ",
+ "すぶり",
+ "すふれ",
+ "すべて",
+ "すべる",
+ "ずほう",
+ "すぼん",
+ "すまい",
+ "すめし",
+ "すもう",
+ "すやき",
+ "すらすら",
+ "するめ",
+ "すれちがう",
+ "すろっと",
+ "すわる",
+ "すんぜん",
+ "すんぽう",
+ "せあぶら",
+ "せいかつ",
+ "せいげん",
+ "せいじ",
+ "せいよう",
+ "せおう",
+ "せかいかん",
+ "せきにん",
+ "せきむ",
+ "せきゆ",
+ "せきらんうん",
+ "せけん",
+ "せこう",
+ "せすじ",
+ "せたい",
+ "せたけ",
+ "せっかく",
+ "せっきゃく",
+ "ぜっく",
+ "せっけん",
+ "せっこつ",
+ "せっさたくま",
+ "せつぞく",
+ "せつだん",
+ "せつでん",
+ "せっぱん",
+ "せつび",
+ "せつぶん",
+ "せつめい",
+ "せつりつ",
+ "せなか",
+ "せのび",
+ "せはば",
+ "せびろ",
+ "せぼね",
+ "せまい",
+ "せまる",
+ "せめる",
+ "せもたれ",
+ "せりふ",
+ "ぜんあく",
+ "せんい",
+ "せんえい",
+ "せんか",
+ "せんきょ",
+ "せんく",
+ "せんげん",
+ "ぜんご",
+ "せんさい",
+ "せんしゅ",
+ "せんすい",
+ "せんせい",
+ "せんぞ",
+ "せんたく",
+ "せんちょう",
+ "せんてい",
+ "せんとう",
+ "せんぬき",
+ "せんねん",
+ "せんぱい",
+ "ぜんぶ",
+ "ぜんぽう",
+ "せんむ",
+ "せんめんじょ",
+ "せんもん",
+ "せんやく",
+ "せんゆう",
+ "せんよう",
+ "ぜんら",
+ "ぜんりゃく",
+ "せんれい",
+ "せんろ",
+ "そあく",
+ "そいとげる",
+ "そいね",
+ "そうがんきょう",
+ "そうき",
+ "そうご",
+ "そうしん",
+ "そうだん",
+ "そうなん",
+ "そうび",
+ "そうめん",
+ "そうり",
+ "そえもの",
+ "そえん",
+ "そがい",
+ "そげき",
+ "そこう",
+ "そこそこ",
+ "そざい",
+ "そしな",
+ "そせい",
+ "そせん",
+ "そそぐ",
+ "そだてる",
+ "そつう",
+ "そつえん",
+ "そっかん",
+ "そつぎょう",
+ "そっけつ",
+ "そっこう",
+ "そっせん",
+ "そっと",
+ "そとがわ",
+ "そとづら",
+ "そなえる",
+ "そなた",
+ "そふぼ",
+ "そぼく",
+ "そぼろ",
+ "そまつ",
+ "そまる",
+ "そむく",
+ "そむりえ",
+ "そめる",
+ "そもそも",
+ "そよかぜ",
+ "そらまめ",
+ "そろう",
+ "そんかい",
+ "そんけい",
+ "そんざい",
+ "そんしつ",
+ "そんぞく",
+ "そんちょう",
+ "ぞんび",
+ "ぞんぶん",
+ "そんみん",
+ "たあい",
+ "たいいん",
+ "たいうん",
+ "たいえき",
+ "たいおう",
+ "だいがく",
+ "たいき",
+ "たいぐう",
+ "たいけん",
+ "たいこ",
+ "たいざい",
+ "だいじょうぶ",
+ "だいすき",
+ "たいせつ",
+ "たいそう",
+ "だいたい",
+ "たいちょう",
+ "たいてい",
+ "だいどころ",
+ "たいない",
+ "たいねつ",
+ "たいのう",
+ "たいはん",
+ "だいひょう",
+ "たいふう",
+ "たいへん",
+ "たいほ",
+ "たいまつばな",
+ "たいみんぐ",
+ "たいむ",
+ "たいめん",
+ "たいやき",
+ "たいよう",
+ "たいら",
+ "たいりょく",
+ "たいる",
+ "たいわん",
+ "たうえ",
+ "たえる",
+ "たおす",
+ "たおる",
+ "たおれる",
+ "たかい",
+ "たかね",
+ "たきび",
+ "たくさん",
+ "たこく",
+ "たこやき",
+ "たさい",
+ "たしざん",
+ "だじゃれ",
+ "たすける",
+ "たずさわる",
+ "たそがれ",
+ "たたかう",
+ "たたく",
+ "ただしい",
+ "たたみ",
+ "たちばな",
+ "だっかい",
+ "だっきゃく",
+ "だっこ",
+ "だっしゅつ",
+ "だったい",
+ "たてる",
+ "たとえる",
+ "たなばた",
+ "たにん",
+ "たぬき",
+ "たのしみ",
+ "たはつ",
+ "たぶん",
+ "たべる",
+ "たぼう",
+ "たまご",
+ "たまる",
+ "だむる",
+ "ためいき",
+ "ためす",
+ "ためる",
+ "たもつ",
+ "たやすい",
+ "たよる",
+ "たらす",
+ "たりきほんがん",
+ "たりょう",
+ "たりる",
+ "たると",
+ "たれる",
+ "たれんと",
+ "たろっと",
+ "たわむれる",
+ "だんあつ",
+ "たんい",
+ "たんおん",
+ "たんか",
+ "たんき",
+ "たんけん",
+ "たんご",
+ "たんさん",
+ "たんじょうび",
+ "だんせい",
+ "たんそく",
+ "たんたい",
+ "だんち",
+ "たんてい",
+ "たんとう",
+ "だんな",
+ "たんにん",
+ "だんねつ",
+ "たんのう",
+ "たんぴん",
+ "だんぼう",
+ "たんまつ",
+ "たんめい",
+ "だんれつ",
+ "だんろ",
+ "だんわ",
+ "ちあい",
+ "ちあん",
+ "ちいき",
+ "ちいさい",
+ "ちえん",
+ "ちかい",
+ "ちから",
+ "ちきゅう",
+ "ちきん",
+ "ちけいず",
+ "ちけん",
+ "ちこく",
+ "ちさい",
+ "ちしき",
+ "ちしりょう",
+ "ちせい",
+ "ちそう",
+ "ちたい",
+ "ちたん",
+ "ちちおや",
+ "ちつじょ",
+ "ちてき",
+ "ちてん",
+ "ちぬき",
+ "ちぬり",
+ "ちのう",
+ "ちひょう",
+ "ちへいせん",
+ "ちほう",
+ "ちまた",
+ "ちみつ",
+ "ちみどろ",
+ "ちめいど",
+ "ちゃんこなべ",
+ "ちゅうい",
+ "ちゆりょく",
+ "ちょうし",
+ "ちょさくけん",
+ "ちらし",
+ "ちらみ",
+ "ちりがみ",
+ "ちりょう",
+ "ちるど",
+ "ちわわ",
+ "ちんたい",
+ "ちんもく",
+ "ついか",
+ "ついたち",
+ "つうか",
+ "つうじょう",
+ "つうはん",
+ "つうわ",
+ "つかう",
+ "つかれる",
+ "つくね",
+ "つくる",
+ "つけね",
+ "つける",
+ "つごう",
+ "つたえる",
+ "つづく",
+ "つつじ",
+ "つつむ",
+ "つとめる",
+ "つながる",
+ "つなみ",
+ "つねづね",
+ "つのる",
+ "つぶす",
+ "つまらない",
+ "つまる",
+ "つみき",
+ "つめたい",
+ "つもり",
+ "つもる",
+ "つよい",
+ "つるぼ",
+ "つるみく",
+ "つわもの",
+ "つわり",
+ "てあし",
+ "てあて",
+ "てあみ",
+ "ていおん",
+ "ていか",
+ "ていき",
+ "ていけい",
+ "ていこく",
+ "ていさつ",
+ "ていし",
+ "ていせい",
+ "ていたい",
+ "ていど",
+ "ていねい",
+ "ていひょう",
+ "ていへん",
+ "ていぼう",
+ "てうち",
+ "ておくれ",
+ "てきとう",
+ "てくび",
+ "でこぼこ",
+ "てさぎょう",
+ "てさげ",
+ "てすり",
+ "てそう",
+ "てちがい",
+ "てちょう",
+ "てつがく",
+ "てつづき",
+ "でっぱ",
+ "てつぼう",
+ "てつや",
+ "でぬかえ",
+ "てぬき",
+ "てぬぐい",
+ "てのひら",
+ "てはい",
+ "てぶくろ",
+ "てふだ",
+ "てほどき",
+ "てほん",
+ "てまえ",
+ "てまきずし",
+ "てみじか",
+ "てみやげ",
+ "てらす",
+ "てれび",
+ "てわけ",
+ "てわたし",
+ "でんあつ",
+ "てんいん",
+ "てんかい",
+ "てんき",
+ "てんぐ",
+ "てんけん",
+ "てんごく",
+ "てんさい",
+ "てんし",
+ "てんすう",
+ "でんち",
+ "てんてき",
+ "てんとう",
+ "てんない",
+ "てんぷら",
+ "てんぼうだい",
+ "てんめつ",
+ "てんらんかい",
+ "でんりょく",
+ "でんわ",
+ "どあい",
+ "といれ",
+ "どうかん",
+ "とうきゅう",
+ "どうぐ",
+ "とうし",
+ "とうむぎ",
+ "とおい",
+ "とおか",
+ "とおく",
+ "とおす",
+ "とおる",
+ "とかい",
+ "とかす",
+ "ときおり",
+ "ときどき",
+ "とくい",
+ "とくしゅう",
+ "とくてん",
+ "とくに",
+ "とくべつ",
+ "とけい",
+ "とける",
+ "とこや",
+ "とさか",
+ "としょかん",
+ "とそう",
+ "とたん",
+ "とちゅう",
+ "とっきゅう",
+ "とっくん",
+ "とつぜん",
+ "とつにゅう",
+ "とどける",
+ "ととのえる",
+ "とない",
+ "となえる",
+ "となり",
+ "とのさま",
+ "とばす",
+ "どぶがわ",
+ "とほう",
+ "とまる",
+ "とめる",
+ "ともだち",
+ "ともる",
+ "どようび",
+ "とらえる",
+ "とんかつ",
+ "どんぶり",
+ "ないかく",
+ "ないこう",
+ "ないしょ",
+ "ないす",
+ "ないせん",
+ "ないそう",
+ "なおす",
+ "ながい",
+ "なくす",
+ "なげる",
+ "なこうど",
+ "なさけ",
+ "なたでここ",
+ "なっとう",
+ "なつやすみ",
+ "ななおし",
+ "なにごと",
+ "なにもの",
+ "なにわ",
+ "なのか",
+ "なふだ",
+ "なまいき",
+ "なまえ",
+ "なまみ",
+ "なみだ",
+ "なめらか",
+ "なめる",
+ "なやむ",
+ "ならう",
+ "ならび",
+ "ならぶ",
+ "なれる",
+ "なわとび",
+ "なわばり",
+ "にあう",
+ "にいがた",
+ "にうけ",
+ "におい",
+ "にかい",
+ "にがて",
+ "にきび",
+ "にくしみ",
+ "にくまん",
+ "にげる",
+ "にさんかたんそ",
+ "にしき",
+ "にせもの",
+ "にちじょう",
+ "にちようび",
+ "にっか",
+ "にっき",
+ "にっけい",
+ "にっこう",
+ "にっさん",
+ "にっしょく",
+ "にっすう",
+ "にっせき",
+ "にってい",
+ "になう",
+ "にほん",
+ "にまめ",
+ "にもつ",
+ "にやり",
+ "にゅういん",
+ "にりんしゃ",
+ "にわとり",
+ "にんい",
+ "にんか",
+ "にんき",
+ "にんげん",
+ "にんしき",
+ "にんずう",
+ "にんそう",
+ "にんたい",
+ "にんち",
+ "にんてい",
+ "にんにく",
+ "にんぷ",
+ "にんまり",
+ "にんむ",
+ "にんめい",
+ "にんよう",
+ "ぬいくぎ",
+ "ぬかす",
+ "ぬぐいとる",
+ "ぬぐう",
+ "ぬくもり",
+ "ぬすむ",
+ "ぬまえび",
+ "ぬめり",
+ "ぬらす",
+ "ぬんちゃく",
+ "ねあげ",
+ "ねいき",
+ "ねいる",
+ "ねいろ",
+ "ねぐせ",
+ "ねくたい",
+ "ねくら",
+ "ねこぜ",
+ "ねこむ",
+ "ねさげ",
+ "ねすごす",
+ "ねそべる",
+ "ねだん",
+ "ねつい",
+ "ねっしん",
+ "ねつぞう",
+ "ねったいぎょ",
+ "ねぶそく",
+ "ねふだ",
+ "ねぼう",
+ "ねほりはほり",
+ "ねまき",
+ "ねまわし",
+ "ねみみ",
+ "ねむい",
+ "ねむたい",
+ "ねもと",
+ "ねらう",
+ "ねわざ",
+ "ねんいり",
+ "ねんおし",
+ "ねんかん",
+ "ねんきん",
+ "ねんぐ",
+ "ねんざ",
+ "ねんし",
+ "ねんちゃく",
+ "ねんど",
+ "ねんぴ",
+ "ねんぶつ",
+ "ねんまつ",
+ "ねんりょう",
+ "ねんれい",
+ "のいず",
+ "のおづま",
+ "のがす",
+ "のきなみ",
+ "のこぎり",
+ "のこす",
+ "のこる",
+ "のせる",
+ "のぞく",
+ "のぞむ",
+ "のたまう",
+ "のちほど",
+ "のっく",
+ "のばす",
+ "のはら",
+ "のべる",
+ "のぼる",
+ "のみもの",
+ "のやま",
+ "のらいぬ",
+ "のらねこ",
+ "のりもの",
+ "のりゆき",
+ "のれん",
+ "のんき",
+ "ばあい",
+ "はあく",
+ "ばあさん",
+ "ばいか",
+ "ばいく",
+ "はいけん",
+ "はいご",
+ "はいしん",
+ "はいすい",
+ "はいせん",
+ "はいそう",
+ "はいち",
+ "ばいばい",
+ "はいれつ",
+ "はえる",
+ "はおる",
+ "はかい",
+ "ばかり",
+ "はかる",
+ "はくしゅ",
+ "はけん",
+ "はこぶ",
+ "はさみ",
+ "はさん",
+ "はしご",
+ "ばしょ",
+ "はしる",
+ "はせる",
+ "ぱそこん",
+ "はそん",
+ "はたん",
+ "はちみつ",
+ "はつおん",
+ "はっかく",
+ "はづき",
+ "はっきり",
+ "はっくつ",
+ "はっけん",
+ "はっこう",
+ "はっさん",
+ "はっしん",
+ "はったつ",
+ "はっちゅう",
+ "はってん",
+ "はっぴょう",
+ "はっぽう",
+ "はなす",
+ "はなび",
+ "はにかむ",
+ "はぶらし",
+ "はみがき",
+ "はむかう",
+ "はめつ",
+ "はやい",
+ "はやし",
+ "はらう",
+ "はろうぃん",
+ "はわい",
+ "はんい",
+ "はんえい",
+ "はんおん",
+ "はんかく",
+ "はんきょう",
+ "ばんぐみ",
+ "はんこ",
+ "はんしゃ",
+ "はんすう",
+ "はんだん",
+ "ぱんち",
+ "ぱんつ",
+ "はんてい",
+ "はんとし",
+ "はんのう",
+ "はんぱ",
+ "はんぶん",
+ "はんぺん",
+ "はんぼうき",
+ "はんめい",
+ "はんらん",
+ "はんろん",
+ "ひいき",
+ "ひうん",
+ "ひえる",
+ "ひかく",
+ "ひかり",
+ "ひかる",
+ "ひかん",
+ "ひくい",
+ "ひけつ",
+ "ひこうき",
+ "ひこく",
+ "ひさい",
+ "ひさしぶり",
+ "ひさん",
+ "びじゅつかん",
+ "ひしょ"
+ });
+ word_map = new std::unordered_map<std::string, uint32_t>;
+ trimmed_word_map = new std::unordered_map<std::string, uint32_t>;
+ language_name = "Japanese";
+ populate_maps();
+ }
+ };
+}
+
+#endif
diff --git a/src/mnemonics/language_base.h b/src/mnemonics/language_base.h new file mode 100644 index 000000000..5c988a436 --- /dev/null +++ b/src/mnemonics/language_base.h @@ -0,0 +1,95 @@ +/*!
+ * \file language_base.h
+ *
+ * \brief Language Base class for Polymorphism.
+ */
+
+#ifndef LANGUAGE_BASE_H
+#define LANGUAGE_BASE_H
+
+#include <vector>
+#include <unordered_map>
+#include <string>
+
+/*!
+ * \namespace Language
+ * \brief Mnemonic language related namespace.
+ */
+namespace Language
+{
+ const int unique_prefix_length = 4; /*!< Length of the prefix of all words guaranteed to be unique */
+ /*!
+ * \class Base
+ * \brief A base language class which all languages have to inherit from for
+ * Polymorphism.
+ */
+ class Base
+ {
+ protected:
+ std::vector<std::string> *word_list; /*!< A pointer to the array of words */
+ std::unordered_map<std::string, uint32_t> *word_map; /*!< hash table to find word's index */
+ std::unordered_map<std::string, uint32_t> *trimmed_word_map; /*!< hash table to find word's trimmed index */
+ std::string language_name; /*!< Name of language */
+ /*!
+ * \brief Populates the word maps after the list is ready.
+ */
+ void populate_maps()
+ {
+ int ii;
+ std::vector<std::string>::iterator it;
+ for (it = word_list->begin(), ii = 0; it != word_list->end(); it++, ii++)
+ {
+ (*word_map)[*it] = ii;
+ if (it->length() > unique_prefix_length)
+ {
+ (*trimmed_word_map)[it->substr(0, unique_prefix_length)] = ii;
+ }
+ else
+ {
+ (*trimmed_word_map)[*it] = ii;
+ }
+ }
+ }
+ public:
+ Base()
+ {
+ word_list = new std::vector<std::string>;
+ word_map = new std::unordered_map<std::string, uint32_t>;
+ trimmed_word_map = new std::unordered_map<std::string, uint32_t>;
+ }
+ /*!
+ * \brief Returns a pointer to the word list.
+ * \return A pointer to the word list.
+ */
+ const std::vector<std::string>& get_word_list() const
+ {
+ return *word_list;
+ }
+ /*!
+ * \brief Returns a pointer to the word map.
+ * \return A pointer to the word map.
+ */
+ const std::unordered_map<std::string, uint32_t>& get_word_map() const
+ {
+ return *word_map;
+ }
+ /*!
+ * \brief Returns a pointer to the trimmed word map.
+ * \return A pointer to the trimmed word map.
+ */
+ const std::unordered_map<std::string, uint32_t>& get_trimmed_word_map() const
+ {
+ return *trimmed_word_map;
+ }
+ /*!
+ * \brief Returns the name of the language.
+ * \return Name of the language.
+ */
+ std::string get_language_name() const
+ {
+ return language_name;
+ }
+ };
+}
+
+#endif
diff --git a/src/mnemonics/old_english.h b/src/mnemonics/old_english.h new file mode 100644 index 000000000..f62e3edeb --- /dev/null +++ b/src/mnemonics/old_english.h @@ -0,0 +1,1691 @@ +// Word list originally created as part of the Electrum project, Copyright (C) 2014 Thomas Voegtlin
+// 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 old_english.h
+ *
+ * \brief Old English word list and map.
+ */
+
+#ifndef OLD_ENGLISH_H
+#define OLD_ENGLISH_H
+
+#include <vector>
+#include <unordered_map>
+#include "language_base.h"
+#include <string>
+
+/*!
+ * \namespace Language
+ * \brief Mnemonic language related namespace.
+ */
+namespace Language
+{
+ class OldEnglish: public Base
+ {
+ public:
+ OldEnglish()
+ {
+ word_list = new std::vector<std::string>({
+ "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"
+ });
+ word_map = new std::unordered_map<std::string, uint32_t>;
+ trimmed_word_map = new std::unordered_map<std::string, uint32_t>;
+ language_name = "OldEnglish";
+ populate_maps();
+ }
+ };
+}
+
+#endif
diff --git a/src/mnemonics/portuguese.h b/src/mnemonics/portuguese.h new file mode 100644 index 000000000..c040a0415 --- /dev/null +++ b/src/mnemonics/portuguese.h @@ -0,0 +1,1690 @@ +// 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 portuguese.h
+ *
+ * \brief Portuguese word list and map.
+ */
+
+#ifndef PORTUGUESE_H
+#define PORTUGUESE_H
+
+#include <vector>
+#include <unordered_map>
+#include "language_base.h"
+#include <string>
+
+/*!
+ * \namespace Language
+ * \brief Mnemonic language related namespace.
+ */
+namespace Language
+{
+ class Portuguese: public Base
+ {
+ public:
+ Portuguese()
+ {
+ word_list = new std::vector<std::string>({
+ "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"
+ });
+ word_map = new std::unordered_map<std::string, uint32_t>;
+ trimmed_word_map = new std::unordered_map<std::string, uint32_t>;
+ language_name = "Portuguese";
+ populate_maps();
+ }
+ };
+}
+
+#endif
diff --git a/src/mnemonics/singleton.h b/src/mnemonics/singleton.h new file mode 100644 index 000000000..74e121e4e --- /dev/null +++ b/src/mnemonics/singleton.h @@ -0,0 +1,62 @@ +// 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 singleton.h
+ *
+ * \brief A singleton helper class based on template.
+ */
+
+/*!
+ * \namespace Language
+ * \brief Mnemonic language related namespace.
+ */
+namespace Language
+{
+ /*!
+ * \class Singleton
+ *
+ * \brief Single helper class.
+ *
+ * Do Language::Singleton<YourClass>::instance() to create a singleton instance
+ * of `YourClass`.
+ */
+ template <class T>
+ class Singleton
+ {
+ Singleton() {}
+ Singleton(Singleton &s) {}
+ Singleton& operator=(const Singleton&) {}
+ public:
+ static T* instance()
+ {
+ static T* obj = new T;
+ return obj;
+ }
+ };
+}
diff --git a/src/mnemonics/spanish.h b/src/mnemonics/spanish.h new file mode 100644 index 000000000..36fcf74da --- /dev/null +++ b/src/mnemonics/spanish.h @@ -0,0 +1,1691 @@ +// Word list originally created as part of the Electrum project, Copyright (C) 2014 Thomas Voegtlin
+// 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 spanish.h
+ *
+ * \brief Spanish word list and map.
+ */
+
+#ifndef SPANISH_H
+#define SPANISH_H
+
+#include <vector>
+#include <unordered_map>
+#include "language_base.h"
+#include <string>
+
+/*!
+ * \namespace Language
+ * \brief Mnemonic language related namespace.
+ */
+namespace Language
+{
+ class Spanish: public Base
+ {
+ public:
+ Spanish()
+ {
+ word_list = new std::vector<std::string>({
+ "á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"
+ });
+ word_map = new std::unordered_map<std::string, uint32_t>;
+ trimmed_word_map = new std::unordered_map<std::string, uint32_t>;
+ language_name = "Spanish";
+ populate_maps();
+ }
+ };
+}
+
+#endif
\ No newline at end of file |