Started working on mymonero seed support.

M committed Sep 24, 2020 at 17:03 UTC e4b5bcf07ef89262f71c64a6eb73c3bcd4421f36
1 file changed +1689
lib/monero/mymonero.dart new
+1689
@@ -0,0 +1,1689 @@
1 +const prefixLength = 3;
2 +
3 +String swapEndianBytes(String original) {
4 + if (original.length != 8) {
5 + return '';
6 + }
7 +
8 + return original[6] +
9 + original[7] +
10 + original[4] +
11 + original[5] +
12 + original[2] +
13 + original[3] +
14 + original[0] +
15 + original[1];
16 +}
17 +
18 +List<String> tructWords(List<String> wordSet) {
19 + final start = 0;
20 + final end = prefixLength;
21 +
22 + return wordSet.map((word) => word.substring(start, end)).toList();
23 +}
24 +
25 +String mnemonicDecode(String seed) {
26 + final n = englistWordSet.length;
27 + var out = '';
28 + var wlist = seed.split(' ');
29 + wlist.removeLast();
30 +
31 + for (var i = 0; i < wlist.length; i += 3) {
32 + final w1 =
33 + tructWords(englistWordSet).indexOf(wlist[i].substring(0, prefixLength));
34 + final w2 = tructWords(englistWordSet)
35 + .indexOf(wlist[i + 1].substring(0, prefixLength));
36 + final w3 = tructWords(englistWordSet)
37 + .indexOf(wlist[i + 2].substring(0, prefixLength));
38 +
39 + if (w1 == -1 || w2 == -1 || w3 == -1) {
40 + print("invalid word in mnemonic");
41 + return '';
42 + }
43 +
44 + final x = w1 + n * (((n - w1) + w2) % n) + n * n * (((n - w2) + w3) % n);
45 +
46 + if (x % n != w1) {
47 + print("Something went wrong when decoding your private key, please try again");
48 + return '';
49 + }
50 +
51 + final _res = '0000000' + x.toRadixString(16);
52 + final start = _res.length - 8;
53 + final end = _res.length;
54 + final res = _res.substring(start, end);
55 +
56 + out += swapEndianBytes(res);
57 + }
58 +
59 + return out;
60 +}
61 +
62 +final englistWordSet = [
63 + "abbey",
64 + "abducts",
65 + "ability",
66 + "ablaze",
67 + "abnormal",
68 + "abort",
69 + "abrasive",
70 + "absorb",
71 + "abyss",
72 + "academy",
73 + "aces",
74 + "aching",
75 + "acidic",
76 + "acoustic",
77 + "acquire",
78 + "across",
79 + "actress",
80 + "acumen",
81 + "adapt",
82 + "addicted",
83 + "adept",
84 + "adhesive",
85 + "adjust",
86 + "adopt",
87 + "adrenalin",
88 + "adult",
89 + "adventure",
90 + "aerial",
91 + "afar",
92 + "affair",
93 + "afield",
94 + "afloat",
95 + "afoot",
96 + "afraid",
97 + "after",
98 + "against",
99 + "agenda",
100 + "aggravate",
101 + "agile",
102 + "aglow",
103 + "agnostic",
104 + "agony",
105 + "agreed",
106 + "ahead",
107 + "aided",
108 + "ailments",
109 + "aimless",
110 + "airport",
111 + "aisle",
112 + "ajar",
113 + "akin",
114 + "alarms",
115 + "album",
116 + "alchemy",
117 + "alerts",
118 + "algebra",
119 + "alkaline",
120 + "alley",
121 + "almost",
122 + "aloof",
123 + "alpine",
124 + "already",
125 + "also",
126 + "altitude",
127 + "alumni",
128 + "always",
129 + "amaze",
130 + "ambush",
131 + "amended",
132 + "amidst",
133 + "ammo",
134 + "amnesty",
135 + "among",
136 + "amply",
137 + "amused",
138 + "anchor",
139 + "android",
140 + "anecdote",
141 + "angled",
142 + "ankle",
143 + "annoyed",
144 + "answers",
145 + "antics",
146 + "anvil",
147 + "anxiety",
148 + "anybody",
149 + "apart",
150 + "apex",
151 + "aphid",
152 + "aplomb",
153 + "apology",
154 + "apply",
155 + "apricot",
156 + "aptitude",
157 + "aquarium",
158 + "arbitrary",
159 + "archer",
160 + "ardent",
161 + "arena",
162 + "argue",
163 + "arises",
164 + "army",
165 + "around",
166 + "arrow",
167 + "arsenic",
168 + "artistic",
169 + "ascend",
170 + "ashtray",
171 + "aside",
172 + "asked",
173 + "asleep",
174 + "aspire",
175 + "assorted",
176 + "asylum",
177 + "athlete",
178 + "atlas",
179 + "atom",
180 + "atrium",
181 + "attire",
182 + "auburn",
183 + "auctions",
184 + "audio",
185 + "august",
186 + "aunt",
187 + "austere",
188 + "autumn",
189 + "avatar",
190 + "avidly",
191 + "avoid",
192 + "awakened",
193 + "awesome",
194 + "awful",
195 + "awkward",
196 + "awning",
197 + "awoken",
198 + "axes",
199 + "axis",
200 + "axle",
201 + "aztec",
202 + "azure",
203 + "baby",
204 + "bacon",
205 + "badge",
206 + "baffles",
207 + "bagpipe",
208 + "bailed",
209 + "bakery",
210 + "balding",
211 + "bamboo",
212 + "banjo",
213 + "baptism",
214 + "basin",
215 + "batch",
216 + "bawled",
217 + "bays",
218 + "because",
219 + "beer",
220 + "befit",
221 + "begun",
222 + "behind",
223 + "being",
224 + "below",
225 + "bemused",
226 + "benches",
227 + "berries",
228 + "bested",
229 + "betting",
230 + "bevel",
231 + "beware",
232 + "beyond",
233 + "bias",
234 + "bicycle",
235 + "bids",
236 + "bifocals",
237 + "biggest",
238 + "bikini",
239 + "bimonthly",
240 + "binocular",
241 + "biology",
242 + "biplane",
243 + "birth",
244 + "biscuit",
245 + "bite",
246 + "biweekly",
247 + "blender",
248 + "blip",
249 + "bluntly",
250 + "boat",
251 + "bobsled",
252 + "bodies",
253 + "bogeys",
254 + "boil",
255 + "boldly",
256 + "bomb",
257 + "border",
258 + "boss",
259 + "both",
260 + "bounced",
261 + "bovine",
262 + "bowling",
263 + "boxes",
264 + "boyfriend",
265 + "broken",
266 + "brunt",
267 + "bubble",
268 + "buckets",
269 + "budget",
270 + "buffet",
271 + "bugs",
272 + "building",
273 + "bulb",
274 + "bumper",
275 + "bunch",
276 + "business",
277 + "butter",
278 + "buying",
279 + "buzzer",
280 + "bygones",
281 + "byline",
282 + "bypass",
283 + "cabin",
284 + "cactus",
285 + "cadets",
286 + "cafe",
287 + "cage",
288 + "cajun",
289 + "cake",
290 + "calamity",
291 + "camp",
292 + "candy",
293 + "casket",
294 + "catch",
295 + "cause",
296 + "cavernous",
297 + "cease",
298 + "cedar",
299 + "ceiling",
300 + "cell",
301 + "cement",
302 + "cent",
303 + "certain",
304 + "chlorine",
305 + "chrome",
306 + "cider",
307 + "cigar",
308 + "cinema",
309 + "circle",
310 + "cistern",
311 + "citadel",
312 + "civilian",
313 + "claim",
314 + "click",
315 + "clue",
316 + "coal",
317 + "cobra",
318 + "cocoa",
319 + "code",
320 + "coexist",
321 + "coffee",
322 + "cogs",
323 + "cohesive",
324 + "coils",
325 + "colony",
326 + "comb",
327 + "cool",
328 + "copy",
329 + "corrode",
330 + "costume",
331 + "cottage",
332 + "cousin",
333 + "cowl",
334 + "criminal",
335 + "cube",
336 + "cucumber",
337 + "cuddled",
338 + "cuffs",
339 + "cuisine",
340 + "cunning",
341 + "cupcake",
342 + "custom",
343 + "cycling",
344 + "cylinder",
345 + "cynical",
346 + "dabbing",
347 + "dads",
348 + "daft",
349 + "dagger",
350 + "daily",
351 + "damp",
352 + "dangerous",
353 + "dapper",
354 + "darted",
355 + "dash",
356 + "dating",
357 + "dauntless",
358 + "dawn",
359 + "daytime",
360 + "dazed",
361 + "debut",
362 + "decay",
363 + "dedicated",
364 + "deepest",
365 + "deftly",
366 + "degrees",
367 + "dehydrate",
368 + "deity",
369 + "dejected",
370 + "delayed",
371 + "demonstrate",
372 + "dented",
373 + "deodorant",
374 + "depth",
375 + "desk",
376 + "devoid",
377 + "dewdrop",
378 + "dexterity",
379 + "dialect",
380 + "dice",
381 + "diet",
382 + "different",
383 + "digit",
384 + "dilute",
385 + "dime",
386 + "dinner",
387 + "diode",
388 + "diplomat",
389 + "directed",
390 + "distance",
391 + "ditch",
392 + "divers",
393 + "dizzy",
394 + "doctor",
395 + "dodge",
396 + "does",
397 + "dogs",
398 + "doing",
399 + "dolphin",
400 + "domestic",
401 + "donuts",
402 + "doorway",
403 + "dormant",
404 + "dosage",
405 + "dotted",
406 + "double",
407 + "dove",
408 + "down",
409 + "dozen",
410 + "dreams",
411 + "drinks",
412 + "drowning",
413 + "drunk",
414 + "drying",
415 + "dual",
416 + "dubbed",
417 + "duckling",
418 + "dude",
419 + "duets",
420 + "duke",
421 + "dullness",
422 + "dummy",
423 + "dunes",
424 + "duplex",
425 + "duration",
426 + "dusted",
427 + "duties",
428 + "dwarf",
429 + "dwelt",
430 + "dwindling",
431 + "dying",
432 + "dynamite",
433 + "dyslexic",
434 + "each",
435 + "eagle",
436 + "earth",
437 + "easy",
438 + "eating",
439 + "eavesdrop",
440 + "eccentric",
441 + "echo",
442 + "eclipse",
443 + "economics",
444 + "ecstatic",
445 + "eden",
446 + "edgy",
447 + "edited",
448 + "educated",
449 + "eels",
450 + "efficient",
451 + "eggs",
452 + "egotistic",
453 + "eight",
454 + "either",
455 + "eject",
456 + "elapse",
457 + "elbow",
458 + "eldest",
459 + "eleven",
460 + "elite",
461 + "elope",
462 + "else",
463 + "eluded",
464 + "emails",
465 + "ember",
466 + "emerge",
467 + "emit",
468 + "emotion",
469 + "empty",
470 + "emulate",
471 + "energy",
472 + "enforce",
473 + "enhanced",
474 + "enigma",
475 + "enjoy",
476 + "enlist",
477 + "enmity",
478 + "enough",
479 + "enraged",
480 + "ensign",
481 + "entrance",
482 + "envy",
483 + "epoxy",
484 + "equip",
485 + "erase",
486 + "erected",
487 + "erosion",
488 + "error",
489 + "eskimos",
490 + "espionage",
491 + "essential",
492 + "estate",
493 + "etched",
494 + "eternal",
495 + "ethics",
496 + "etiquette",
497 + "evaluate",
498 + "evenings",
499 + "evicted",
500 + "evolved",
501 + "examine",
502 + "excess",
503 + "exhale",
504 + "exit",
505 + "exotic",
506 + "exquisite",
507 + "extra",
508 + "exult",
509 + "fabrics",
510 + "factual",
511 + "fading",
512 + "fainted",
513 + "faked",
514 + "fall",
515 + "family",
516 + "fancy",
517 + "farming",
518 + "fatal",
519 + "faulty",
520 + "fawns",
521 + "faxed",
522 + "fazed",
523 + "feast",
524 + "february",
525 + "federal",
526 + "feel",
527 + "feline",
528 + "females",
529 + "fences",
530 + "ferry",
531 + "festival",
532 + "fetches",
533 + "fever",
534 + "fewest",
535 + "fiat",
536 + "fibula",
537 + "fictional",
538 + "fidget",
539 + "fierce",
540 + "fifteen",
541 + "fight",
542 + "films",
543 + "firm",
544 + "fishing",
545 + "fitting",
546 + "five",
547 + "fixate",
548 + "fizzle",
549 + "fleet",
550 + "flippant",
551 + "flying",
552 + "foamy",
553 + "focus",
554 + "foes",
555 + "foggy",
556 + "foiled",
557 + "folding",
558 + "fonts",
559 + "foolish",
560 + "fossil",
561 + "fountain",
562 + "fowls",
563 + "foxes",
564 + "foyer",
565 + "framed",
566 + "friendly",
567 + "frown",
568 + "fruit",
569 + "frying",
570 + "fudge",
571 + "fuel",
572 + "fugitive",
573 + "fully",
574 + "fuming",
575 + "fungal",
576 + "furnished",
577 + "fuselage",
578 + "future",
579 + "fuzzy",
580 + "gables",
581 + "gadget",
582 + "gags",
583 + "gained",
584 + "galaxy",
585 + "gambit",
586 + "gang",
587 + "gasp",
588 + "gather",
589 + "gauze",
590 + "gave",
591 + "gawk",
592 + "gaze",
593 + "gearbox",
594 + "gecko",
595 + "geek",
596 + "gels",
597 + "gemstone",
598 + "general",
599 + "geometry",
600 + "germs",
601 + "gesture",
602 + "getting",
603 + "geyser",
604 + "ghetto",
605 + "ghost",
606 + "giant",
607 + "giddy",
608 + "gifts",
609 + "gigantic",
610 + "gills",
611 + "gimmick",
612 + "ginger",
613 + "girth",
614 + "giving",
615 + "glass",
616 + "gleeful",
617 + "glide",
618 + "gnaw",
619 + "gnome",
620 + "goat",
621 + "goblet",
622 + "godfather",
623 + "goes",
624 + "goggles",
625 + "going",
626 + "goldfish",
627 + "gone",
628 + "goodbye",
629 + "gopher",
630 + "gorilla",
631 + "gossip",
632 + "gotten",
633 + "gourmet",
634 + "governing",
635 + "gown",
636 + "greater",
637 + "grunt",
638 + "guarded",
639 + "guest",
640 + "guide",
641 + "gulp",
642 + "gumball",
643 + "guru",
644 + "gusts",
645 + "gutter",
646 + "guys",
647 + "gymnast",
648 + "gypsy",
649 + "gyrate",
650 + "habitat",
651 + "hacksaw",
652 + "haggled",
653 + "hairy",
654 + "hamburger",
655 + "happens",
656 + "hashing",
657 + "hatchet",
658 + "haunted",
659 + "having",
660 + "hawk",
661 + "haystack",
662 + "hazard",
663 + "hectare",
664 + "hedgehog",
665 + "heels",
666 + "hefty",
667 + "height",
668 + "hemlock",
669 + "hence",
670 + "heron",
671 + "hesitate",
672 + "hexagon",
673 + "hickory",
674 + "hiding",
675 + "highway",
676 + "hijack",
677 + "hiker",
678 + "hills",
679 + "himself",
680 + "hinder",
681 + "hippo",
682 + "hire",
683 + "history",
684 + "hitched",
685 + "hive",
686 + "hoax",
687 + "hobby",
688 + "hockey",
689 + "hoisting",
690 + "hold",
691 + "honked",
692 + "hookup",
693 + "hope",
694 + "hornet",
695 + "hospital",
696 + "hotel",
697 + "hounded",
698 + "hover",
699 + "howls",
700 + "hubcaps",
701 + "huddle",
702 + "huge",
703 + "hull",
704 + "humid",
705 + "hunter",
706 + "hurried",
707 + "husband",
708 + "huts",
709 + "hybrid",
710 + "hydrogen",
711 + "hyper",
712 + "iceberg",
713 + "icing",
714 + "icon",
715 + "identity",
716 + "idiom",
717 + "idled",
718 + "idols",
719 + "igloo",
720 + "ignore",
721 + "iguana",
722 + "illness",
723 + "imagine",
724 + "imbalance",
725 + "imitate",
726 + "impel",
727 + "inactive",
728 + "inbound",
729 + "incur",
730 + "industrial",
731 + "inexact",
732 + "inflamed",
733 + "ingested",
734 + "initiate",
735 + "injury",
736 + "inkling",
737 + "inline",
738 + "inmate",
739 + "innocent",
740 + "inorganic",
741 + "input",
742 + "inquest",
743 + "inroads",
744 + "insult",
745 + "intended",
746 + "inundate",
747 + "invoke",
748 + "inwardly",
749 + "ionic",
750 + "irate",
751 + "iris",
752 + "irony",
753 + "irritate",
754 + "island",
755 + "isolated",
756 + "issued",
757 + "italics",
758 + "itches",
759 + "items",
760 + "itinerary",
761 + "itself",
762 + "ivory",
763 + "jabbed",
764 + "jackets",
765 + "jaded",
766 + "jagged",
767 + "jailed",
768 + "jamming",
769 + "january",
770 + "jargon",
771 + "jaunt",
772 + "javelin",
773 + "jaws",
774 + "jazz",
775 + "jeans",
776 + "jeers",
777 + "jellyfish",
778 + "jeopardy",
779 + "jerseys",
780 + "jester",
781 + "jetting",
782 + "jewels",
783 + "jigsaw",
784 + "jingle",
785 + "jittery",
786 + "jive",
787 + "jobs",
788 + "jockey",
789 + "jogger",
790 + "joining",
791 + "joking",
792 + "jolted",
793 + "jostle",
794 + "journal",
795 + "joyous",
796 + "jubilee",
797 + "judge",
798 + "juggled",
799 + "juicy",
800 + "jukebox",
801 + "july",
802 + "jump",
803 + "junk",
804 + "jury",
805 + "justice",
806 + "juvenile",
807 + "kangaroo",
808 + "karate",
809 + "keep",
810 + "kennel",
811 + "kept",
812 + "kernels",
813 + "kettle",
814 + "keyboard",
815 + "kickoff",
816 + "kidneys",
817 + "king",
818 + "kiosk",
819 + "kisses",
820 + "kitchens",
821 + "kiwi",
822 + "knapsack",
823 + "knee",
824 + "knife",
825 + "knowledge",
826 + "knuckle",
827 + "koala",
828 + "laboratory",
829 + "ladder",
830 + "lagoon",
831 + "lair",
832 + "lakes",
833 + "lamb",
834 + "language",
835 + "laptop",
836 + "large",
837 + "last",
838 + "later",
839 + "launching",
840 + "lava",
841 + "lawsuit",
842 + "layout",
843 + "lazy",
844 + "lectures",
845 + "ledge",
846 + "leech",
847 + "left",
848 + "legion",
849 + "leisure",
850 + "lemon",
851 + "lending",
852 + "leopard",
853 + "lesson",
854 + "lettuce",
855 + "lexicon",
856 + "liar",
857 + "library",
858 + "licks",
859 + "lids",
860 + "lied",
861 + "lifestyle",
862 + "light",
863 + "likewise",
864 + "lilac",
865 + "limits",
866 + "linen",
867 + "lion",
868 + "lipstick",
869 + "liquid",
870 + "listen",
871 + "lively",
872 + "loaded",
873 + "lobster",
874 + "locker",
875 + "lodge",
876 + "lofty",
877 + "logic",
878 + "loincloth",
879 + "long",
880 + "looking",
881 + "lopped",
882 + "lordship",
883 + "losing",
884 + "lottery",
885 + "loudly",
886 + "love",
887 + "lower",
888 + "loyal",
889 + "lucky",
890 + "luggage",
891 + "lukewarm",
892 + "lullaby",
893 + "lumber",
894 + "lunar",
895 + "lurk",
896 + "lush",
897 + "luxury",
898 + "lymph",
899 + "lynx",
900 + "lyrics",
901 + "macro",
902 + "madness",
903 + "magically",
904 + "mailed",
905 + "major",
906 + "makeup",
907 + "malady",
908 + "mammal",
909 + "maps",
910 + "masterful",
911 + "match",
912 + "maul",
913 + "maverick",
914 + "maximum",
915 + "mayor",
916 + "maze",
917 + "meant",
918 + "mechanic",
919 + "medicate",
920 + "meeting",
921 + "megabyte",
922 + "melting",
923 + "memoir",
924 + "menu",
925 + "merger",
926 + "mesh",
927 + "metro",
928 + "mews",
929 + "mice",
930 + "midst",
931 + "mighty",
932 + "mime",
933 + "mirror",
934 + "misery",
935 + "mittens",
936 + "mixture",
937 + "moat",
938 + "mobile",
939 + "mocked",
940 + "mohawk",
941 + "moisture",
942 + "molten",
943 + "moment",
944 + "money",
945 + "moon",
946 + "mops",
947 + "morsel",
948 + "mostly",
949 + "motherly",
950 + "mouth",
951 + "movement",
952 + "mowing",
953 + "much",
954 + "muddy",
955 + "muffin",
956 + "mugged",
957 + "mullet",
958 + "mumble",
959 + "mundane",
960 + "muppet",
961 + "mural",
962 + "musical",
963 + "muzzle",
964 + "myriad",
965 + "mystery",
966 + "myth",
967 + "nabbing",
968 + "nagged",
969 + "nail",
970 + "names",
971 + "nanny",
972 + "napkin",
973 + "narrate",
974 + "nasty",
975 + "natural",
976 + "nautical",
977 + "navy",
978 + "nearby",
979 + "necklace",
980 + "needed",
981 + "negative",
982 + "neither",
983 + "neon",
984 + "nephew",
985 + "nerves",
986 + "nestle",
987 + "network",
988 + "neutral",
989 + "never",
990 + "newt",
991 + "nexus",
992 + "nibs",
993 + "niche",
994 + "niece",
995 + "nifty",
996 + "nightly",
997 + "nimbly",
998 + "nineteen",
999 + "nirvana",
1000 + "nitrogen",
1001 + "nobody",
1002 + "nocturnal",
1003 + "nodes",
1004 + "noises",
1005 + "nomad",
1006 + "noodles",
1007 + "northern",
1008 + "nostril",
1009 + "noted",
1010 + "nouns",
1011 + "novelty",
1012 + "nowhere",
1013 + "nozzle",
1014 + "nuance",
1015 + "nucleus",
1016 + "nudged",
1017 + "nugget",
1018 + "nuisance",
1019 + "null",
1020 + "number",
1021 + "nuns",
1022 + "nurse",
1023 + "nutshell",
1024 + "nylon",
1025 + "oaks",
1026 + "oars",
1027 + "oasis",
1028 + "oatmeal",
1029 + "obedient",
1030 + "object",
1031 + "obliged",
1032 + "obnoxious",
1033 + "observant",
1034 + "obtains",
1035 + "obvious",
1036 + "occur",
1037 + "ocean",
1038 + "october",
1039 + "odds",
1040 + "odometer",
1041 + "offend",
1042 + "often",
1043 + "oilfield",
1044 + "ointment",
1045 + "okay",
1046 + "older",
1047 + "olive",
1048 + "olympics",
1049 + "omega",
1050 + "omission",
1051 + "omnibus",
1052 + "onboard",
1053 + "oncoming",
1054 + "oneself",
1055 + "ongoing",
1056 + "onion",
1057 + "online",
1058 + "onslaught",
1059 + "onto",
1060 + "onward",
1061 + "oozed",
1062 + "opacity",
1063 + "opened",
1064 + "opposite",
1065 + "optical",
1066 + "opus",
1067 + "orange",
1068 + "orbit",
1069 + "orchid",
1070 + "orders",
1071 + "organs",
1072 + "origin",
1073 + "ornament",
1074 + "orphans",
1075 + "oscar",
1076 + "ostrich",
1077 + "otherwise",
1078 + "otter",
1079 + "ouch",
1080 + "ought",
1081 + "ounce",
1082 + "ourselves",
1083 + "oust",
1084 + "outbreak",
1085 + "oval",
1086 + "oven",
1087 + "owed",
1088 + "owls",
1089 + "owner",
1090 + "oxidant",
1091 + "oxygen",
1092 + "oyster",
1093 + "ozone",
1094 + "pact",
1095 + "paddles",
1096 + "pager",
1097 + "pairing",
1098 + "palace",
1099 + "pamphlet",
1100 + "pancakes",
1101 + "paper",
1102 + "paradise",
1103 + "pastry",
1104 + "patio",
1105 + "pause",
1106 + "pavements",
1107 + "pawnshop",
1108 + "payment",
1109 + "peaches",
1110 + "pebbles",
1111 + "peculiar",
1112 + "pedantic",
1113 + "peeled",
1114 + "pegs",
1115 + "pelican",
1116 + "pencil",
1117 + "people",
1118 + "pepper",
1119 + "perfect",
1120 + "pests",
1121 + "petals",
1122 + "phase",
1123 + "pheasants",
1124 + "phone",
1125 + "phrases",
1126 + "physics",
1127 + "piano",
1128 + "picked",
1129 + "pierce",
1130 + "pigment",
1131 + "piloted",
1132 + "pimple",
1133 + "pinched",
1134 + "pioneer",
1135 + "pipeline",
1136 + "pirate",
1137 + "pistons",
1138 + "pitched",
1139 + "pivot",
1140 + "pixels",
1141 + "pizza",
1142 + "playful",
1143 + "pledge",
1144 + "pliers",
1145 + "plotting",
1146 + "plus",
1147 + "plywood",
1148 + "poaching",
1149 + "pockets",
1150 + "podcast",
1151 + "poetry",
1152 + "point",
1153 + "poker",
1154 + "polar",
1155 + "ponies",
1156 + "pool",
1157 + "popular",
1158 + "portents",
1159 + "possible",
1160 + "potato",
1161 + "pouch",
1162 + "poverty",
1163 + "powder",
1164 + "pram",
1165 + "present",
1166 + "pride",
1167 + "problems",
1168 + "pruned",
1169 + "prying",
1170 + "psychic",
1171 + "public",
1172 + "puck",
1173 + "puddle",
1174 + "puffin",
1175 + "pulp",
1176 + "pumpkins",
1177 + "punch",
1178 + "puppy",
1179 + "purged",
1180 + "push",
1181 + "putty",
1182 + "puzzled",
1183 + "pylons",
1184 + "pyramid",
1185 + "python",
1186 + "queen",
1187 + "quick",
1188 + "quote",
1189 + "rabbits",
1190 + "racetrack",
1191 + "radar",
1192 + "rafts",
1193 + "rage",
1194 + "railway",
1195 + "raking",
1196 + "rally",
1197 + "ramped",
1198 + "randomly",
1199 + "rapid",
1200 + "rarest",
1201 + "rash",
1202 + "rated",
1203 + "ravine",
1204 + "rays",
1205 + "razor",
1206 + "react",
1207 + "rebel",
1208 + "recipe",
1209 + "reduce",
1210 + "reef",
1211 + "refer",
1212 + "regular",
1213 + "reheat",
1214 + "reinvest",
1215 + "rejoices",
1216 + "rekindle",
1217 + "relic",
1218 + "remedy",
1219 + "renting",
1220 + "reorder",
1221 + "repent",
1222 + "request",
1223 + "reruns",
1224 + "rest",
1225 + "return",
1226 + "reunion",
1227 + "revamp",
1228 + "rewind",
1229 + "rhino",
1230 + "rhythm",
1231 + "ribbon",
1232 + "richly",
1233 + "ridges",
1234 + "rift",
1235 + "rigid",
1236 + "rims",
1237 + "ringing",
1238 + "riots",
1239 + "ripped",
1240 + "rising",
1241 + "ritual",
1242 + "river",
1243 + "roared",
1244 + "robot",
1245 + "rockets",
1246 + "rodent",
1247 + "rogue",
1248 + "roles",
1249 + "romance",
1250 + "roomy",
1251 + "roped",
1252 + "roster",
1253 + "rotate",
1254 + "rounded",
1255 + "rover",
1256 + "rowboat",
1257 + "royal",
1258 + "ruby",
1259 + "rudely",
1260 + "ruffled",
1261 + "rugged",
1262 + "ruined",
1263 + "ruling",
1264 + "rumble",
1265 + "runway",
1266 + "rural",
1267 + "rustled",
1268 + "ruthless",
1269 + "sabotage",
1270 + "sack",
1271 + "sadness",
1272 + "safety",
1273 + "saga",
1274 + "sailor",
1275 + "sake",
1276 + "salads",
1277 + "sample",
1278 + "sanity",
1279 + "sapling",
1280 + "sarcasm",
1281 + "sash",
1282 + "satin",
1283 + "saucepan",
1284 + "saved",
1285 + "sawmill",
1286 + "saxophone",
1287 + "sayings",
1288 + "scamper",
1289 + "scenic",
1290 + "school",
1291 + "science",
1292 + "scoop",
1293 + "scrub",
1294 + "scuba",
1295 + "seasons",
1296 + "second",
1297 + "sedan",
1298 + "seeded",
1299 + "segments",
1300 + "seismic",
1301 + "selfish",
1302 + "semifinal",
1303 + "sensible",
1304 + "september",
1305 + "sequence",
1306 + "serving",
1307 + "session",
1308 + "setup",
1309 + "seventh",
1310 + "sewage",
1311 + "shackles",
1312 + "shelter",
1313 + "shipped",
1314 + "shocking",
1315 + "shrugged",
1316 + "shuffled",
1317 + "shyness",
1318 + "siblings",
1319 + "sickness",
1320 + "sidekick",
1321 + "sieve",
1322 + "sifting",
1323 + "sighting",
1324 + "silk",
1325 + "simplest",
1326 + "sincerely",
1327 + "sipped",
1328 + "siren",
1329 + "situated",
1330 + "sixteen",
1331 + "sizes",
1332 + "skater",
1333 + "skew",
1334 + "skirting",
1335 + "skulls",
1336 + "skydive",
1337 + "slackens",
1338 + "sleepless",
1339 + "slid",
1340 + "slower",
1341 + "slug",
1342 + "smash",
1343 + "smelting",
1344 + "smidgen",
1345 + "smog",
1346 + "smuggled",
1347 + "snake",
1348 + "sneeze",
1349 + "sniff",
1350 + "snout",
1351 + "snug",
1352 + "soapy",
1353 + "sober",
1354 + "soccer",
1355 + "soda",
1356 + "software",
1357 + "soggy",
1358 + "soil",
1359 + "solved",
1360 + "somewhere",
1361 + "sonic",
1362 + "soothe",
1363 + "soprano",
1364 + "sorry",
1365 + "southern",
1366 + "sovereign",
1367 + "sowed",
1368 + "soya",
1369 + "space",
1370 + "speedy",
1371 + "sphere",
1372 + "spiders",
1373 + "splendid",
1374 + "spout",
1375 + "sprig",
1376 + "spud",
1377 + "spying",
1378 + "square",
1379 + "stacking",
1380 + "stellar",
1381 + "stick",
1382 + "stockpile",
1383 + "strained",
1384 + "stunning",
1385 + "stylishly",
1386 + "subtly",
1387 + "succeed",
1388 + "suddenly",
1389 + "suede",
1390 + "suffice",
1391 + "sugar",
1392 + "suitcase",
1393 + "sulking",
1394 + "summon",
1395 + "sunken",
1396 + "superior",
1397 + "surfer",
1398 + "sushi",
1399 + "suture",
1400 + "swagger",
1401 + "swept",
1402 + "swiftly",
1403 + "sword",
1404 + "swung",
1405 + "syllabus",
1406 + "symptoms",
1407 + "syndrome",
1408 + "syringe",
1409 + "system",
1410 + "taboo",
1411 + "tacit",
1412 + "tadpoles",
1413 + "tagged",
1414 + "tail",
1415 + "taken",
1416 + "talent",
1417 + "tamper",
1418 + "tanks",
1419 + "tapestry",
1420 + "tarnished",
1421 + "tasked",
1422 + "tattoo",
1423 + "taunts",
1424 + "tavern",
1425 + "tawny",
1426 + "taxi",
1427 + "teardrop",
1428 + "technical",
1429 + "tedious",
1430 + "teeming",
1431 + "tell",
1432 + "template",
1433 + "tender",
1434 + "tepid",
1435 + "tequila",
1436 + "terminal",
1437 + "testing",
1438 + "tether",
1439 + "textbook",
1440 + "thaw",
1441 + "theatrics",
1442 + "thirsty",
1443 + "thorn",
1444 + "threaten",
1445 + "thumbs",
1446 + "thwart",
1447 + "ticket",
1448 + "tidy",
1449 + "tiers",
1450 + "tiger",
1451 + "tilt",
1452 + "timber",
1453 + "tinted",
1454 + "tipsy",
1455 + "tirade",
1456 + "tissue",
1457 + "titans",
1458 + "toaster",
1459 + "tobacco",
1460 + "today",
1461 + "toenail",
1462 + "toffee",
1463 + "together",
1464 + "toilet",
1465 + "token",
1466 + "tolerant",
1467 + "tomorrow",
1468 + "tonic",
1469 + "toolbox",
1470 + "topic",
1471 + "torch",
1472 + "tossed",
1473 + "total",
1474 + "touchy",
1475 + "towel",
1476 + "toxic",
1477 + "toyed",
1478 + "trash",
1479 + "trendy",
1480 + "tribal",
1481 + "trolling",
1482 + "truth",
1483 + "trying",
1484 + "tsunami",
1485 + "tubes",
1486 + "tucks",
1487 + "tudor",
1488 + "tuesday",
1489 + "tufts",
1490 + "tugs",
1491 + "tuition",
1492 + "tulips",
1493 + "tumbling",
1494 + "tunnel",
1495 + "turnip",
1496 + "tusks",
1497 + "tutor",
1498 + "tuxedo",
1499 + "twang",
1500 + "tweezers",
1501 + "twice",
1502 + "twofold",
1503 + "tycoon",
1504 + "typist",
1505 + "tyrant",
1506 + "ugly",
1507 + "ulcers",
1508 + "ultimate",
1509 + "umbrella",
1510 + "umpire",
1511 + "unafraid",
1512 + "unbending",
1513 + "uncle",
1514 + "under",
1515 + "uneven",
1516 + "unfit",
1517 + "ungainly",
1518 + "unhappy",
1519 + "union",
1520 + "unjustly",
1521 + "unknown",
1522 + "unlikely",
1523 + "unmask",
1524 + "unnoticed",
1525 + "unopened",
1526 + "unplugs",
1527 + "unquoted",
1528 + "unrest",
1529 + "unsafe",
1530 + "until",
1531 + "unusual",
1532 + "unveil",
1533 + "unwind",
1534 + "unzip",
1535 + "upbeat",
1536 + "upcoming",
1537 + "update",
1538 + "upgrade",
1539 + "uphill",
1540 + "upkeep",
1541 + "upload",
1542 + "upon",
1543 + "upper",
1544 + "upright",
1545 + "upstairs",
1546 + "uptight",
1547 + "upwards",
1548 + "urban",
1549 + "urchins",
1550 + "urgent",
1551 + "usage",
1552 + "useful",
1553 + "usher",
1554 + "using",
1555 + "usual",
1556 + "utensils",
1557 + "utility",
1558 + "utmost",
1559 + "utopia",
1560 + "uttered",
1561 + "vacation",
1562 + "vague",
1563 + "vain",
1564 + "value",
1565 + "vampire",
1566 + "vane",
1567 + "vapidly",
1568 + "vary",
1569 + "vastness",
1570 + "vats",
1571 + "vaults",
1572 + "vector",
1573 + "veered",
1574 + "vegan",
1575 + "vehicle",
1576 + "vein",
1577 + "velvet",
1578 + "venomous",
1579 + "verification",
1580 + "vessel",
1581 + "veteran",
1582 + "vexed",
1583 + "vials",
1584 + "vibrate",
1585 + "victim",
1586 + "video",
1587 + "viewpoint",
1588 + "vigilant",
1589 + "viking",
1590 + "village",
1591 + "vinegar",
1592 + "violin",
1593 + "vipers",
1594 + "virtual",
1595 + "visited",
1596 + "vitals",
1597 + "vivid",
1598 + "vixen",
1599 + "vocal",
1600 + "vogue",
1601 + "voice",
1602 + "volcano",
1603 + "vortex",
1604 + "voted",
1605 + "voucher",
1606 + "vowels",
1607 + "voyage",
1608 + "vulture",
1609 + "wade",
1610 + "waffle",
1611 + "wagtail",
1612 + "waist",
1613 + "waking",
1614 + "wallets",
1615 + "wanted",
1616 + "warped",
1617 + "washing",
1618 + "water",
1619 + "waveform",
1620 + "waxing",
1621 + "wayside",
1622 + "weavers",
1623 + "website",
1624 + "wedge",
1625 + "weekday",
1626 + "weird",
1627 + "welders",
1628 + "went",
1629 + "wept",
1630 + "were",
1631 + "western",
1632 + "wetsuit",
1633 + "whale",
1634 + "when",
1635 + "whipped",
1636 + "whole",
1637 + "wickets",
1638 + "width",
1639 + "wield",
1640 + "wife",
1641 + "wiggle",
1642 + "wildly",
1643 + "winter",
1644 + "wipeout",
1645 + "wiring",
1646 + "wise",
1647 + "withdrawn",
1648 + "wives",
1649 + "wizard",
1650 + "wobbly",
1651 + "woes",
1652 + "woken",
1653 + "wolf",
1654 + "womanly",
1655 + "wonders",
1656 + "woozy",
1657 + "worry",
1658 + "wounded",
1659 + "woven",
1660 + "wrap",
1661 + "wrist",
1662 + "wrong",
1663 + "yacht",
1664 + "yahoo",
1665 + "yanks",
1666 + "yard",
1667 + "yawning",
1668 + "yearbook",
1669 + "yellow",
1670 + "yesterday",
1671 + "yeti",
1672 + "yields",
1673 + "yodel",
1674 + "yoga",
1675 + "younger",
1676 + "yoyo",
1677 + "zapped",
1678 + "zeal",
1679 + "zebra",
1680 + "zero",
1681 + "zesty",
1682 + "zigzags",
1683 + "zinger",
1684 + "zippers",
1685 + "zodiac",
1686 + "zombie",
1687 + "zones",
1688 + "zoom"
1689 +];