@theqrl/wallet.js 0.1.3 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +195 -1
  3. package/dist/cjs/package.json +1 -0
  4. package/dist/cjs/wallet.js +4856 -0
  5. package/dist/mjs/package.json +1 -0
  6. package/dist/mjs/wallet.js +4841 -0
  7. package/package.json +27 -7
  8. package/src/index.js +33 -13
  9. package/src/qrl/wordlist.js +11 -5
  10. package/src/utils/bytes.js +59 -0
  11. package/src/wallet/common/address.js +94 -0
  12. package/src/wallet/common/constants.js +16 -0
  13. package/src/wallet/common/descriptor.js +70 -0
  14. package/src/wallet/common/seed.js +123 -0
  15. package/src/wallet/common/wallettype.js +21 -0
  16. package/src/wallet/factory.js +39 -0
  17. package/src/wallet/misc/mnemonic.js +77 -0
  18. package/src/wallet/ml_dsa_87/crypto.js +90 -0
  19. package/src/wallet/ml_dsa_87/descriptor.js +18 -0
  20. package/src/wallet/ml_dsa_87/wallet.js +158 -0
  21. package/types/index.d.ts +12 -11
  22. package/types/qrl/wordlist.d.ts +9 -0
  23. package/types/qrl/wordlist.d.ts.map +1 -1
  24. package/types/utils/bytes.d.ts +27 -0
  25. package/types/utils/bytes.d.ts.map +1 -0
  26. package/types/wallet/common/address.d.ts +17 -0
  27. package/types/wallet/common/address.d.ts.map +1 -0
  28. package/types/wallet/common/constants.d.ts +13 -0
  29. package/types/wallet/common/constants.d.ts.map +1 -0
  30. package/types/wallet/common/descriptor.d.ts +32 -0
  31. package/types/wallet/common/descriptor.d.ts.map +1 -0
  32. package/types/wallet/common/seed.d.ts +67 -0
  33. package/types/wallet/common/seed.d.ts.map +1 -0
  34. package/types/wallet/common/wallettype.d.ts +19 -0
  35. package/types/wallet/common/wallettype.d.ts.map +1 -0
  36. package/types/wallet/factory.d.ts +9 -0
  37. package/types/wallet/factory.d.ts.map +1 -0
  38. package/types/wallet/misc/mnemonic.d.ts +13 -0
  39. package/types/wallet/misc/mnemonic.d.ts.map +1 -0
  40. package/types/wallet/ml_dsa_87/crypto.d.ts +24 -0
  41. package/types/wallet/ml_dsa_87/crypto.d.ts.map +1 -0
  42. package/types/wallet/ml_dsa_87/descriptor.d.ts +8 -0
  43. package/types/wallet/ml_dsa_87/descriptor.d.ts.map +1 -0
  44. package/types/wallet/ml_dsa_87/wallet.d.ts +74 -0
  45. package/types/wallet/ml_dsa_87/wallet.d.ts.map +1 -0
  46. package/src/dilithium.js +0 -158
  47. package/src/utils/mnemonic.js +0 -93
  48. package/types/dilithium.d.ts +0 -25
  49. package/types/dilithium.d.ts.map +0 -1
  50. package/types/utils/mnemonic.d.ts +0 -3
  51. package/types/utils/mnemonic.d.ts.map +0 -1
@@ -0,0 +1,4841 @@
1
+ import { shake256 } from '@noble/hashes/sha3';
2
+ import { CryptoPublicKeyBytes, cryptoSignKeypair, CryptoSecretKeyBytes, cryptoSign, CryptoBytes, cryptoSignVerify } from '@theqrl/mldsa87';
3
+ import { sha256 } from '@noble/hashes/sha2.js';
4
+ import { hexToBytes } from '@noble/hashes/utils';
5
+ import randomBytes from 'randombytes';
6
+ import { bytesToHex } from '@noble/hashes/utils.js';
7
+
8
+ /**
9
+ * Constants used across wallet components.
10
+ * @module wallet/common/constants
11
+ */
12
+
13
+ /** @type {number} Size in bytes of the 3-byte descriptor */
14
+ const DESCRIPTOR_SIZE = 3;
15
+
16
+ /** @type {number} Address length in bytes */
17
+ const ADDRESS_SIZE = 20;
18
+
19
+ /** @type {number} Seed length in bytes */
20
+ const SEED_SIZE = 48;
21
+
22
+ /** @type {number} Extended seed length in bytes */
23
+ const EXTENDED_SEED_SIZE = DESCRIPTOR_SIZE + SEED_SIZE;
24
+
25
+ /**
26
+ * Address helpers.
27
+ * @module wallet/common/address
28
+ */
29
+
30
+
31
+ /**
32
+ * Convert address bytes to string form.
33
+ * @param {Uint8Array} addrBytes
34
+ * @returns {string}
35
+ * @throws {Error} If length mismatch.
36
+ */
37
+ function addressToString(addrBytes) {
38
+ if (!addrBytes || addrBytes.length !== ADDRESS_SIZE) {
39
+ throw new Error(`address must be ${ADDRESS_SIZE} bytes`);
40
+ }
41
+ const hex = [...addrBytes].map((b) => b.toString(16).padStart(2, '0')).join('');
42
+ return `Q${hex}`;
43
+ }
44
+
45
+ /**
46
+ * Convert address string to bytes.
47
+ * @param {string} addrStr - Address string starting with 'Q' followed by 40 hex characters.
48
+ * @returns {Uint8Array} 20-byte address.
49
+ * @throws {Error} If address format is invalid.
50
+ */
51
+ function stringToAddress(addrStr) {
52
+ if (typeof addrStr !== 'string') {
53
+ throw new Error('address must be a string');
54
+ }
55
+ const trimmed = addrStr.trim();
56
+ if (!trimmed.startsWith('Q') && !trimmed.startsWith('q')) {
57
+ throw new Error('address must start with Q');
58
+ }
59
+ const hex = trimmed.slice(1);
60
+ if (hex.length !== ADDRESS_SIZE * 2) {
61
+ throw new Error(`address must be Q + ${ADDRESS_SIZE * 2} hex characters, got ${hex.length}`);
62
+ }
63
+ if (!/^[0-9a-fA-F]+$/.test(hex)) {
64
+ throw new Error('address contains invalid characters');
65
+ }
66
+ const bytes = new Uint8Array(ADDRESS_SIZE);
67
+ for (let i = 0; i < ADDRESS_SIZE; i += 1) {
68
+ bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);
69
+ }
70
+ return bytes;
71
+ }
72
+
73
+ /**
74
+ * Check if a string is a valid QRL address format.
75
+ * @param {string} addrStr - Address string to validate.
76
+ * @returns {boolean} True if valid address format.
77
+ */
78
+ function isValidAddress(addrStr) {
79
+ try {
80
+ stringToAddress(addrStr);
81
+ return true;
82
+ } catch {
83
+ return false;
84
+ }
85
+ }
86
+
87
+ /**
88
+ * Derive an address from a public key and descriptor.
89
+ * @param {Uint8Array} pk
90
+ * @param {Descriptor} descriptor
91
+ * @returns {Uint8Array} 20-byte address.
92
+ * @throws {Error} If pk length mismatch.
93
+ */
94
+ function getAddressFromPKAndDescriptor(pk, descriptor) {
95
+ if (!(pk instanceof Uint8Array)) throw new Error('pk must be Uint8Array');
96
+
97
+ const walletType = descriptor.type();
98
+ let expectedPKLen;
99
+ switch (walletType) {
100
+ default:
101
+ expectedPKLen = CryptoPublicKeyBytes;
102
+ }
103
+ if (pk.length !== expectedPKLen) {
104
+ throw new Error(`pk must be ${expectedPKLen} bytes for wallet type ${walletType}`);
105
+ }
106
+
107
+ const descBytes = descriptor.toBytes();
108
+ const input = new Uint8Array(descBytes.length + pk.length);
109
+ input.set(descBytes, 0);
110
+ input.set(pk, descBytes.length);
111
+ return shake256.create({ dkLen: ADDRESS_SIZE }).update(input).digest();
112
+ }
113
+
114
+ /**
115
+ * Shared byte/hex utils used across modules.
116
+ * @module utils/bytes
117
+ */
118
+
119
+
120
+ /**
121
+ * @param {unknown} input
122
+ * @returns {boolean}
123
+ */
124
+ function isUint8(input) {
125
+ return input instanceof Uint8Array;
126
+ }
127
+
128
+ /**
129
+ * Accepts strings with optional 0x/0X prefix and separators(space, :, _, -).
130
+ * @param {unknown} input
131
+ * @returns {boolean}
132
+ */
133
+ function isHexLike(input) {
134
+ if (typeof input !== 'string') return false;
135
+ const s = input.trim().replace(/^0x/i, '');
136
+ return /^[0-9a-fA-F\s:_-]*$/.test(s);
137
+ }
138
+
139
+ /**
140
+ * Remove 0x prefix and all non-hex chars.
141
+ * @param {string} hex
142
+ * @returns {string}
143
+ */
144
+ function cleanHex(hex) {
145
+ return hex.replace(/^0x/i, '').replace(/[^0-9a-fA-F]/g, '');
146
+ }
147
+
148
+ /**
149
+ * Convert various inputs to a fixed-length byte array.
150
+ * Supports hex string(with/without 0x), Uint8Array, Buffer, number[].
151
+ * @param {string|Uint8Array|Buffer|number[]} input
152
+ * @param {number} expectedLen
153
+ * @param {string} [label='bytes']
154
+ * @returns {Uint8Array}
155
+ */
156
+ function toFixedU8(input, expectedLen, label = 'bytes') {
157
+ let bytes;
158
+ if (isUint8(input)) {
159
+ bytes = new Uint8Array(input);
160
+ } else if (isHexLike(input)) {
161
+ bytes = hexToBytes(cleanHex(input));
162
+ } else if (Array.isArray(input)) {
163
+ bytes = Uint8Array.from(input);
164
+ } else {
165
+ throw new Error(`${label}: unsupported input type; pass hex string or Uint8Array/Buffer`);
166
+ }
167
+ if (bytes.length !== expectedLen) {
168
+ throw new Error(`${label}: expected ${expectedLen} bytes, got ${bytes.length}`);
169
+ }
170
+ return bytes;
171
+ }
172
+
173
+ /**
174
+ * Wallet type enumeration.
175
+ * @module wallet/common/wallettype
176
+ */
177
+
178
+ /**
179
+ * @readonly
180
+ * @enum {number}
181
+ */
182
+ const WalletType = Object.freeze({
183
+ SPHINCSPLUS_256S: 0,
184
+ ML_DSA_87: 1,
185
+ });
186
+
187
+ /**
188
+ * @param {number} t
189
+ * @return {boolean}
190
+ */
191
+ function isValidWalletType(t) {
192
+ return t === WalletType.ML_DSA_87;
193
+ }
194
+
195
+ /**
196
+ * 3-byte descriptor for a wallet:
197
+ * - byte 0: wallet type (e.g. ML_DSA_87)
198
+ * - bytes 1..2: 2 bytes metadata
199
+ * @module wallet/common/descriptor
200
+ */
201
+
202
+
203
+ class Descriptor {
204
+ /**
205
+ * @param {Uint8Array|number[]} bytes Must be exactly 3 bytes.
206
+ * @throws {Error} If size is not 3 or wallet type is invalid.
207
+ */
208
+ constructor(bytes) {
209
+ if (!bytes || bytes.length !== DESCRIPTOR_SIZE) {
210
+ throw new Error(`Descriptor must be ${DESCRIPTOR_SIZE} bytes`);
211
+ }
212
+ /** @private @type {Uint8Array} */
213
+ this.bytes = Uint8Array.from(bytes);
214
+ if (!isValidWalletType(this.bytes[0])) {
215
+ throw new Error('Invalid wallet type in descriptor');
216
+ }
217
+ }
218
+
219
+ /**
220
+ * @returns {number}
221
+ */
222
+ type() {
223
+ return this.bytes[0] >>> 0;
224
+ }
225
+
226
+ /**
227
+ * Copy of internal bytes.
228
+ * @returns {Uint8Array}
229
+ */
230
+ toBytes() {
231
+ return this.bytes.slice();
232
+ }
233
+
234
+ /**
235
+ * Constructor: accepts hex string / Uint8Array / Buffer / number[].
236
+ * @param {string|Uint8Array|Buffer|number[]} input
237
+ * @returns {Descriptor}
238
+ */
239
+ static from(input) {
240
+ return new Descriptor(toFixedU8(input, DESCRIPTOR_SIZE, 'Descriptor'));
241
+ }
242
+ }
243
+
244
+ /**
245
+ * Build descriptor bytes from parts.
246
+ * @param {number} walletType byte.
247
+ * @param {[number, number]} [metadata=[0,0]] Two metadata bytes.
248
+ * @returns {Uint8Array} 3 bytes.
249
+ */
250
+ function getDescriptorBytes(walletType, metadata = [0, 0]) {
251
+ if (!isValidWalletType(walletType)) {
252
+ throw new Error('Invalid wallet type in descriptor');
253
+ }
254
+ const out = new Uint8Array(DESCRIPTOR_SIZE);
255
+ out[0] = walletType >>> 0;
256
+ out[1] = (metadata?.[0] ?? 0) >>> 0;
257
+ out[2] = (metadata?.[1] ?? 0) >>> 0;
258
+ return out;
259
+ }
260
+
261
+ /**
262
+ * Seed(48 bytes) and ExtendedSeed(51 bytes) with constructors.
263
+ * @module wallet/common/seed
264
+ */
265
+
266
+
267
+ class Seed {
268
+ /**
269
+ * @param {Uint8Array} bytes Exactly 48 bytes.
270
+ * @throws {Error} If size mismatch.
271
+ */
272
+ constructor(bytes) {
273
+ if (!bytes || bytes.length !== SEED_SIZE) {
274
+ throw new Error(`Seed must be ${SEED_SIZE} bytes`);
275
+ }
276
+ this.bytes = Uint8Array.from(bytes);
277
+ }
278
+
279
+ /** @returns {Uint8Array} */
280
+ hashSHA256() {
281
+ return Uint8Array.from(sha256(this.bytes));
282
+ }
283
+
284
+ /**
285
+ * Copy of internal seed bytes.
286
+ * @returns {Uint8Array}
287
+ */
288
+ toBytes() {
289
+ return this.bytes.slice();
290
+ }
291
+
292
+ /**
293
+ * Constructor: accepts hex string / Uint8Array / Buffer / number[].
294
+ * @param {string|Uint8Array|Buffer|number[]} input
295
+ * @returns {Seed}
296
+ */
297
+ static from(input) {
298
+ return new Seed(toFixedU8(input, SEED_SIZE, 'Seed'));
299
+ }
300
+ }
301
+
302
+ class ExtendedSeed {
303
+ /**
304
+ * Layout: [3 bytes descriptor] || [48 bytes seed].
305
+ * @param {Uint8Array} bytes Exactly 51 bytes.
306
+ * @throws {Error} If size mismatch.
307
+ */
308
+ constructor(bytes) {
309
+ if (!bytes || bytes.length !== EXTENDED_SEED_SIZE) {
310
+ throw new Error(`ExtendedSeed must be ${EXTENDED_SEED_SIZE} bytes`);
311
+ }
312
+ /** @private @type {Uint8Array} */
313
+ this.bytes = Uint8Array.from(bytes);
314
+ if (!isValidWalletType(this.bytes[0])) {
315
+ throw new Error('Invalid wallet type in descriptor');
316
+ }
317
+ }
318
+
319
+ /**
320
+ * @returns {Descriptor}
321
+ */
322
+ getDescriptor() {
323
+ return new Descriptor(this.getDescriptorBytes());
324
+ }
325
+
326
+ /**
327
+ * @returns {Uint8Array} Descriptor(3 bytes).
328
+ */
329
+ getDescriptorBytes() {
330
+ return this.bytes.slice(0, DESCRIPTOR_SIZE);
331
+ }
332
+
333
+ /**
334
+ * @returns {Uint8Array} Seed bytes(48 bytes).
335
+ */
336
+ getSeedBytes() {
337
+ return this.bytes.slice(DESCRIPTOR_SIZE);
338
+ }
339
+
340
+ /**
341
+ * @returns {Seed}
342
+ */
343
+ getSeed() {
344
+ return new Seed(this.getSeedBytes());
345
+ }
346
+
347
+ /**
348
+ * Copy of internal seed bytes.
349
+ * @returns {Uint8Array}
350
+ */
351
+ toBytes() {
352
+ return this.bytes.slice();
353
+ }
354
+
355
+ /**
356
+ * Build from components.
357
+ * @param {Descriptor} desc
358
+ * @param {Seed} seed
359
+ * @returns {ExtendedSeed}
360
+ */
361
+ static newExtendedSeed(desc, seed) {
362
+ const out = new Uint8Array(EXTENDED_SEED_SIZE);
363
+ out.set(desc.toBytes(), 0);
364
+ out.set(seed.toBytes(), DESCRIPTOR_SIZE);
365
+ return new ExtendedSeed(out);
366
+ }
367
+
368
+ /**
369
+ * Constructor: accepts hex string / Uint8Array / Buffer / number[].
370
+ * @param {string|Uint8Array|Buffer|number[]} input
371
+ * @returns {ExtendedSeed}
372
+ */
373
+ static from(input) {
374
+ return new ExtendedSeed(toFixedU8(input, EXTENDED_SEED_SIZE, 'ExtendedSeed'));
375
+ }
376
+ }
377
+
378
+ /**
379
+ * ML-DSA-87-specific descriptor helpers.
380
+ * @module /wallet/ml_dsa_87/descriptor
381
+ */
382
+
383
+
384
+ /**
385
+ * New ML-DSA-87 descriptor with optional 2-byte metadata.
386
+ * @param {[number, number]} [metadata=[0,0]]
387
+ * @returns {Descriptor}
388
+ */
389
+ function newMLDSA87Descriptor(metadata = [0, 0]) {
390
+ return new Descriptor(getDescriptorBytes(WalletType.ML_DSA_87, metadata));
391
+ }
392
+
393
+ /**
394
+ * Mnemonic word list used by encoding/decoding utilities.
395
+ * @module qrl/wordlist
396
+ */
397
+
398
+ /**
399
+ * Ordered list of mnemonic words.
400
+ * @readonly
401
+ * @type {string[]}
402
+ */
403
+ const WordList = [
404
+ 'aback',
405
+ 'abbey',
406
+ 'abbot',
407
+ 'abide',
408
+ 'ablaze',
409
+ 'able',
410
+ 'aboard',
411
+ 'abode',
412
+ 'abort',
413
+ 'abound',
414
+ 'about',
415
+ 'above',
416
+ 'abra',
417
+ 'abroad',
418
+ 'abrupt',
419
+ 'absent',
420
+ 'absorb',
421
+ 'absurd',
422
+ 'accent',
423
+ 'accept',
424
+ 'access',
425
+ 'accord',
426
+ 'accuse',
427
+ 'ace',
428
+ 'ache',
429
+ 'aching',
430
+ 'acid',
431
+ 'acidic',
432
+ 'acorn',
433
+ 'acre',
434
+ 'across',
435
+ 'act',
436
+ 'action',
437
+ 'active',
438
+ 'actor',
439
+ 'actual',
440
+ 'acute',
441
+ 'adam',
442
+ 'adapt',
443
+ 'add',
444
+ 'added',
445
+ 'adept',
446
+ 'adhere',
447
+ 'adjust',
448
+ 'admire',
449
+ 'admit',
450
+ 'adobe',
451
+ 'adopt',
452
+ 'adrift',
453
+ 'adverb',
454
+ 'advert',
455
+ 'aedes',
456
+ 'aerial',
457
+ 'afar',
458
+ 'affair',
459
+ 'affect',
460
+ 'afford',
461
+ 'afghan',
462
+ 'afield',
463
+ 'afloat',
464
+ 'afraid',
465
+ 'afresh',
466
+ 'after',
467
+ 'again',
468
+ 'age',
469
+ 'agency',
470
+ 'agenda',
471
+ 'agent',
472
+ 'aghast',
473
+ 'agile',
474
+ 'ago',
475
+ 'agony',
476
+ 'agree',
477
+ 'agreed',
478
+ 'aha',
479
+ 'ahead',
480
+ 'aid',
481
+ 'aide',
482
+ 'aim',
483
+ 'air',
484
+ 'airman',
485
+ 'airy',
486
+ 'akin',
487
+ 'alarm',
488
+ 'alaska',
489
+ 'albeit',
490
+ 'album',
491
+ 'alert',
492
+ 'alibi',
493
+ 'alice',
494
+ 'alien',
495
+ 'alight',
496
+ 'align',
497
+ 'alike',
498
+ 'alive',
499
+ 'alkali',
500
+ 'all',
501
+ 'allars',
502
+ 'allay',
503
+ 'alley',
504
+ 'allied',
505
+ 'allot',
506
+ 'allow',
507
+ 'alloy',
508
+ 'ally',
509
+ 'almond',
510
+ 'almost',
511
+ 'aloft',
512
+ 'alone',
513
+ 'along',
514
+ 'aloof',
515
+ 'aloud',
516
+ 'alpha',
517
+ 'alpine',
518
+ 'also',
519
+ 'altar',
520
+ 'alter',
521
+ 'always',
522
+ 'amaze',
523
+ 'amazon',
524
+ 'amber',
525
+ 'ambush',
526
+ 'amen',
527
+ 'amend',
528
+ 'amid',
529
+ 'amidst',
530
+ 'amiss',
531
+ 'among',
532
+ 'amount',
533
+ 'ample',
534
+ 'amuse',
535
+ 'anchor',
536
+ 'and',
537
+ 'andrew',
538
+ 'anew',
539
+ 'angel',
540
+ 'anger',
541
+ 'angle',
542
+ 'anglo',
543
+ 'angola',
544
+ 'animal',
545
+ 'ankle',
546
+ 'annoy',
547
+ 'annual',
548
+ 'answer',
549
+ 'anthem',
550
+ 'anti',
551
+ 'antony',
552
+ 'anubis',
553
+ 'any',
554
+ 'anyhow',
555
+ 'anyway',
556
+ 'apart',
557
+ 'apathy',
558
+ 'apex',
559
+ 'apiece',
560
+ 'appeal',
561
+ 'appear',
562
+ 'apple',
563
+ 'apply',
564
+ 'april',
565
+ 'apron',
566
+ 'arcade',
567
+ 'arcane',
568
+ 'arch',
569
+ 'arctic',
570
+ 'ardent',
571
+ 'are',
572
+ 'area',
573
+ 'argue',
574
+ 'arid',
575
+ 'arise',
576
+ 'arm',
577
+ 'armful',
578
+ 'armpit',
579
+ 'army',
580
+ 'aroma',
581
+ 'around',
582
+ 'arouse',
583
+ 'array',
584
+ 'arrest',
585
+ 'arrive',
586
+ 'arrow',
587
+ 'arson',
588
+ 'art',
589
+ 'artery',
590
+ 'artful',
591
+ 'artist',
592
+ 'ascent',
593
+ 'ashen',
594
+ 'ashore',
595
+ 'aside',
596
+ 'ask',
597
+ 'asleep',
598
+ 'aspect',
599
+ 'assay',
600
+ 'assent',
601
+ 'assert',
602
+ 'assess',
603
+ 'asset',
604
+ 'assign',
605
+ 'assist',
606
+ 'assume',
607
+ 'assure',
608
+ 'asthma',
609
+ 'astute',
610
+ 'asylum',
611
+ 'ate',
612
+ 'athens',
613
+ 'atlas',
614
+ 'atom',
615
+ 'atomic',
616
+ 'atop',
617
+ 'attach',
618
+ 'attain',
619
+ 'attend',
620
+ 'attic',
621
+ 'auburn',
622
+ 'audio',
623
+ 'audit',
624
+ 'augite',
625
+ 'august',
626
+ 'aunt',
627
+ 'auntie',
628
+ 'aura',
629
+ 'austin',
630
+ 'auteur',
631
+ 'author',
632
+ 'auto',
633
+ 'autumn',
634
+ 'avail',
635
+ 'avenge',
636
+ 'avenue',
637
+ 'avert',
638
+ 'avid',
639
+ 'avoid',
640
+ 'await',
641
+ 'awake',
642
+ 'awaken',
643
+ 'award',
644
+ 'aware',
645
+ 'awash',
646
+ 'away',
647
+ 'awful',
648
+ 'awhile',
649
+ 'axes',
650
+ 'axiom',
651
+ 'axis',
652
+ 'axle',
653
+ 'aye',
654
+ 'baby',
655
+ 'bach',
656
+ 'back',
657
+ 'backup',
658
+ 'bacon',
659
+ 'bad',
660
+ 'badge',
661
+ 'badly',
662
+ 'bag',
663
+ 'baggy',
664
+ 'bail',
665
+ 'bait',
666
+ 'bake',
667
+ 'baker',
668
+ 'bakery',
669
+ 'bald',
670
+ 'ball',
671
+ 'ballad',
672
+ 'ballet',
673
+ 'ballot',
674
+ 'baltic',
675
+ 'bamboo',
676
+ 'ban',
677
+ 'banal',
678
+ 'banana',
679
+ 'band',
680
+ 'banjo',
681
+ 'bank',
682
+ 'bar',
683
+ 'barber',
684
+ 'bare',
685
+ 'barely',
686
+ 'barge',
687
+ 'baric',
688
+ 'bark',
689
+ 'barley',
690
+ 'barn',
691
+ 'baron',
692
+ 'barrel',
693
+ 'barren',
694
+ 'basalt',
695
+ 'base',
696
+ 'basic',
697
+ 'basil',
698
+ 'basin',
699
+ 'basis',
700
+ 'basket',
701
+ 'basque',
702
+ 'bass',
703
+ 'bat',
704
+ 'batch',
705
+ 'bath',
706
+ 'bathe',
707
+ 'baton',
708
+ 'battle',
709
+ 'bay',
710
+ 'beach',
711
+ 'beacon',
712
+ 'beak',
713
+ 'beam',
714
+ 'bean',
715
+ 'bear',
716
+ 'beard',
717
+ 'beat',
718
+ 'beauty',
719
+ 'become',
720
+ 'bed',
721
+ 'beech',
722
+ 'beef',
723
+ 'beefy',
724
+ 'beep',
725
+ 'beer',
726
+ 'beet',
727
+ 'beetle',
728
+ 'before',
729
+ 'beggar',
730
+ 'begin',
731
+ 'behalf',
732
+ 'behave',
733
+ 'behind',
734
+ 'beige',
735
+ 'being',
736
+ 'belfry',
737
+ 'belief',
738
+ 'bell',
739
+ 'belly',
740
+ 'belong',
741
+ 'below',
742
+ 'belt',
743
+ 'bench',
744
+ 'bend',
745
+ 'bended',
746
+ 'benign',
747
+ 'bent',
748
+ 'berlin',
749
+ 'berry',
750
+ 'berth',
751
+ 'beset',
752
+ 'beside',
753
+ 'best',
754
+ 'bestow',
755
+ 'bet',
756
+ 'beta',
757
+ 'betray',
758
+ 'better',
759
+ 'betty',
760
+ 'beware',
761
+ 'beyond',
762
+ 'bias',
763
+ 'biceps',
764
+ 'bicker',
765
+ 'bid',
766
+ 'big',
767
+ 'bike',
768
+ 'bile',
769
+ 'bill',
770
+ 'binary',
771
+ 'bind',
772
+ 'biopsy',
773
+ 'birch',
774
+ 'bird',
775
+ 'birdie',
776
+ 'birth',
777
+ 'bishop',
778
+ 'bit',
779
+ 'bite',
780
+ 'bitter',
781
+ 'blade',
782
+ 'blame',
783
+ 'bland',
784
+ 'blaser',
785
+ 'blast',
786
+ 'blaze',
787
+ 'bleak',
788
+ 'blend',
789
+ 'bless',
790
+ 'blew',
791
+ 'blink',
792
+ 'blip',
793
+ 'bliss',
794
+ 'blitz',
795
+ 'block',
796
+ 'blond',
797
+ 'blood',
798
+ 'bloom',
799
+ 'blot',
800
+ 'blouse',
801
+ 'blue',
802
+ 'bluff',
803
+ 'blunt',
804
+ 'blur',
805
+ 'blush',
806
+ 'boar',
807
+ 'board',
808
+ 'boast',
809
+ 'boat',
810
+ 'bocage',
811
+ 'bodily',
812
+ 'body',
813
+ 'bogus',
814
+ 'boil',
815
+ 'bold',
816
+ 'bolt',
817
+ 'bombay',
818
+ 'bond',
819
+ 'bone',
820
+ 'bonn',
821
+ 'bonnet',
822
+ 'bonus',
823
+ 'bony',
824
+ 'book',
825
+ 'boost',
826
+ 'boot',
827
+ 'booth',
828
+ 'booze',
829
+ 'bop',
830
+ 'border',
831
+ 'bore',
832
+ 'borrow',
833
+ 'bosom',
834
+ 'boss',
835
+ 'boston',
836
+ 'both',
837
+ 'bother',
838
+ 'bottle',
839
+ 'bottom',
840
+ 'bought',
841
+ 'bounce',
842
+ 'bound',
843
+ 'bounty',
844
+ 'bout',
845
+ 'bovine',
846
+ 'bow',
847
+ 'bowel',
848
+ 'bowl',
849
+ 'box',
850
+ 'boy',
851
+ 'boyish',
852
+ 'brace',
853
+ 'brain',
854
+ 'brainy',
855
+ 'brake',
856
+ 'bran',
857
+ 'branch',
858
+ 'brand',
859
+ 'brandy',
860
+ 'brass',
861
+ 'brave',
862
+ 'bravo',
863
+ 'brazil',
864
+ 'breach',
865
+ 'bread',
866
+ 'break',
867
+ 'breath',
868
+ 'bred',
869
+ 'breed',
870
+ 'breeze',
871
+ 'brew',
872
+ 'brick',
873
+ 'bride',
874
+ 'bridge',
875
+ 'brief',
876
+ 'bright',
877
+ 'brim',
878
+ 'brine',
879
+ 'bring',
880
+ 'brink',
881
+ 'brisk',
882
+ 'briton',
883
+ 'broad',
884
+ 'broke',
885
+ 'broken',
886
+ 'bronze',
887
+ 'brook',
888
+ 'broom',
889
+ 'brown',
890
+ 'bruise',
891
+ 'brush',
892
+ 'brutal',
893
+ 'brute',
894
+ 'bubble',
895
+ 'buck',
896
+ 'bucket',
897
+ 'buckle',
898
+ 'buddha',
899
+ 'budget',
900
+ 'buen',
901
+ 'buffet',
902
+ 'buggy',
903
+ 'build',
904
+ 'bulb',
905
+ 'bulge',
906
+ 'bulk',
907
+ 'bulky',
908
+ 'bull',
909
+ 'bullet',
910
+ 'bully',
911
+ 'bump',
912
+ 'bumpy',
913
+ 'bunch',
914
+ 'bundle',
915
+ 'bunk',
916
+ 'bunny',
917
+ 'burden',
918
+ 'bureau',
919
+ 'burial',
920
+ 'burly',
921
+ 'burma',
922
+ 'burned',
923
+ 'burnt',
924
+ 'burrow',
925
+ 'burst',
926
+ 'bury',
927
+ 'bus',
928
+ 'bush',
929
+ 'bust',
930
+ 'bustle',
931
+ 'busy',
932
+ 'but',
933
+ 'butler',
934
+ 'butter',
935
+ 'button',
936
+ 'buy',
937
+ 'buyer',
938
+ 'buzz',
939
+ 'bye',
940
+ 'byte',
941
+ 'byways',
942
+ 'cab',
943
+ 'cabin',
944
+ 'cable',
945
+ 'cache',
946
+ 'cactus',
947
+ 'caesar',
948
+ 'cage',
949
+ 'cagey',
950
+ 'cahot',
951
+ 'cain',
952
+ 'cairo',
953
+ 'cake',
954
+ 'cakile',
955
+ 'calf',
956
+ 'call',
957
+ 'caller',
958
+ 'calm',
959
+ 'calmly',
960
+ 'came',
961
+ 'camel',
962
+ 'camera',
963
+ 'camp',
964
+ 'campus',
965
+ 'can',
966
+ 'canada',
967
+ 'canary',
968
+ 'cancel',
969
+ 'candid',
970
+ 'candle',
971
+ 'candy',
972
+ 'cane',
973
+ 'canine',
974
+ 'canna',
975
+ 'canoe',
976
+ 'canopy',
977
+ 'canvas',
978
+ 'canyon',
979
+ 'cap',
980
+ 'cape',
981
+ 'car',
982
+ 'carbon',
983
+ 'card',
984
+ 'care',
985
+ 'career',
986
+ 'caress',
987
+ 'cargo',
988
+ 'carl',
989
+ 'carnal',
990
+ 'carol',
991
+ 'carp',
992
+ 'carpet',
993
+ 'carrot',
994
+ 'carry',
995
+ 'cart',
996
+ 'cartel',
997
+ 'case',
998
+ 'cash',
999
+ 'cask',
1000
+ 'cast',
1001
+ 'castle',
1002
+ 'casual',
1003
+ 'cat',
1004
+ 'catch',
1005
+ 'cater',
1006
+ 'cattle',
1007
+ 'caught',
1008
+ 'causal',
1009
+ 'cause',
1010
+ 'cave',
1011
+ 'cease',
1012
+ 'celery',
1013
+ 'cell',
1014
+ 'cellar',
1015
+ 'celtic',
1016
+ 'cement',
1017
+ 'censor',
1018
+ 'census',
1019
+ 'cereal',
1020
+ 'cervix',
1021
+ 'chain',
1022
+ 'chair',
1023
+ 'chalet',
1024
+ 'chalk',
1025
+ 'chalky',
1026
+ 'champ',
1027
+ 'chance',
1028
+ 'change',
1029
+ 'chant',
1030
+ 'chaos',
1031
+ 'chap',
1032
+ 'chapel',
1033
+ 'charge',
1034
+ 'charm',
1035
+ 'chart',
1036
+ 'chase',
1037
+ 'chat',
1038
+ 'cheap',
1039
+ 'cheat',
1040
+ 'check',
1041
+ 'cheek',
1042
+ 'cheeky',
1043
+ 'cheer',
1044
+ 'cheery',
1045
+ 'cheese',
1046
+ 'chef',
1047
+ 'cherry',
1048
+ 'chess',
1049
+ 'chest',
1050
+ 'chew',
1051
+ 'chic',
1052
+ 'chick',
1053
+ 'chief',
1054
+ 'child',
1055
+ 'chile',
1056
+ 'chill',
1057
+ 'chilly',
1058
+ 'china',
1059
+ 'chip',
1060
+ 'choice',
1061
+ 'choir',
1062
+ 'choose',
1063
+ 'chop',
1064
+ 'choppy',
1065
+ 'chord',
1066
+ 'chorus',
1067
+ 'chose',
1068
+ 'chosen',
1069
+ 'choux',
1070
+ 'chrome',
1071
+ 'chunk',
1072
+ 'chunky',
1073
+ 'cider',
1074
+ 'cigar',
1075
+ 'cinema',
1076
+ 'circa',
1077
+ 'circle',
1078
+ 'circus',
1079
+ 'cite',
1080
+ 'city',
1081
+ 'civic',
1082
+ 'civil',
1083
+ 'clad',
1084
+ 'claim',
1085
+ 'clammy',
1086
+ 'clan',
1087
+ 'clap',
1088
+ 'clash',
1089
+ 'clasp',
1090
+ 'class',
1091
+ 'clause',
1092
+ 'claw',
1093
+ 'clay',
1094
+ 'clean',
1095
+ 'clear',
1096
+ 'clergy',
1097
+ 'clerk',
1098
+ 'clever',
1099
+ 'click',
1100
+ 'client',
1101
+ 'cliff',
1102
+ 'climax',
1103
+ 'climb',
1104
+ 'clinch',
1105
+ 'cling',
1106
+ 'clinic',
1107
+ 'clip',
1108
+ 'cloak',
1109
+ 'clock',
1110
+ 'clone',
1111
+ 'close',
1112
+ 'closer',
1113
+ 'closet',
1114
+ 'cloth',
1115
+ 'cloud',
1116
+ 'cloudy',
1117
+ 'clout',
1118
+ 'clown',
1119
+ 'club',
1120
+ 'clue',
1121
+ 'clumsy',
1122
+ 'clung',
1123
+ 'clutch',
1124
+ 'coach',
1125
+ 'coal',
1126
+ 'coast',
1127
+ 'coat',
1128
+ 'coax',
1129
+ 'cobalt',
1130
+ 'cobble',
1131
+ 'cobra',
1132
+ 'coca',
1133
+ 'cocoa',
1134
+ 'code',
1135
+ 'coffee',
1136
+ 'coffin',
1137
+ 'cohort',
1138
+ 'coil',
1139
+ 'coin',
1140
+ 'coke',
1141
+ 'cold',
1142
+ 'collar',
1143
+ 'colon',
1144
+ 'colony',
1145
+ 'colt',
1146
+ 'column',
1147
+ 'comb',
1148
+ 'combat',
1149
+ 'come',
1150
+ 'comedy',
1151
+ 'comes',
1152
+ 'comic',
1153
+ 'commit',
1154
+ 'common',
1155
+ 'compel',
1156
+ 'comply',
1157
+ 'concur',
1158
+ 'cone',
1159
+ 'confer',
1160
+ 'congo',
1161
+ 'consul',
1162
+ 'convex',
1163
+ 'convey',
1164
+ 'convoy',
1165
+ 'cook',
1166
+ 'cool',
1167
+ 'cope',
1168
+ 'copper',
1169
+ 'copy',
1170
+ 'coral',
1171
+ 'cord',
1172
+ 'core',
1173
+ 'cork',
1174
+ 'corn',
1175
+ 'corner',
1176
+ 'corps',
1177
+ 'corpse',
1178
+ 'corpus',
1179
+ 'cortex',
1180
+ 'cosmic',
1181
+ 'cosmos',
1182
+ 'cost',
1183
+ 'costia',
1184
+ 'costly',
1185
+ 'cosy',
1186
+ 'cotton',
1187
+ 'couch',
1188
+ 'cough',
1189
+ 'could',
1190
+ 'count',
1191
+ 'county',
1192
+ 'coup',
1193
+ 'couple',
1194
+ 'coupon',
1195
+ 'course',
1196
+ 'court',
1197
+ 'cousin',
1198
+ 'cove',
1199
+ 'cover',
1200
+ 'covert',
1201
+ 'cow',
1202
+ 'coward',
1203
+ 'cowboy',
1204
+ 'crab',
1205
+ 'cradle',
1206
+ 'craft',
1207
+ 'crafty',
1208
+ 'crag',
1209
+ 'crane',
1210
+ 'crate',
1211
+ 'crater',
1212
+ 'crawl',
1213
+ 'crazy',
1214
+ 'creak',
1215
+ 'cream',
1216
+ 'create',
1217
+ 'credit',
1218
+ 'creed',
1219
+ 'creek',
1220
+ 'creep',
1221
+ 'creepy',
1222
+ 'creole',
1223
+ 'crept',
1224
+ 'crest',
1225
+ 'crew',
1226
+ 'cried',
1227
+ 'crisis',
1228
+ 'crisp',
1229
+ 'critic',
1230
+ 'croft',
1231
+ 'crook',
1232
+ 'crop',
1233
+ 'cross',
1234
+ 'crow',
1235
+ 'crowd',
1236
+ 'crown',
1237
+ 'crude',
1238
+ 'cruel',
1239
+ 'cruise',
1240
+ 'crunch',
1241
+ 'crush',
1242
+ 'crust',
1243
+ 'crux',
1244
+ 'cry',
1245
+ 'crypt',
1246
+ 'cuba',
1247
+ 'cube',
1248
+ 'cubic',
1249
+ 'cuckoo',
1250
+ 'cuff',
1251
+ 'cult',
1252
+ 'cup',
1253
+ 'curb',
1254
+ 'cure',
1255
+ 'curfew',
1256
+ 'curl',
1257
+ 'curlew',
1258
+ 'curry',
1259
+ 'curse',
1260
+ 'cursor',
1261
+ 'curve',
1262
+ 'custom',
1263
+ 'cut',
1264
+ 'cute',
1265
+ 'cycle',
1266
+ 'cyclic',
1267
+ 'cynic',
1268
+ 'cyprus',
1269
+ 'czech',
1270
+ 'dad',
1271
+ 'daddy',
1272
+ 'dagger',
1273
+ 'daily',
1274
+ 'dairy',
1275
+ 'daisy',
1276
+ 'dale',
1277
+ 'dallas',
1278
+ 'damage',
1279
+ 'damp',
1280
+ 'dampen',
1281
+ 'dance',
1282
+ 'danger',
1283
+ 'daniel',
1284
+ 'danish',
1285
+ 'dare',
1286
+ 'dark',
1287
+ 'darken',
1288
+ 'darwin',
1289
+ 'dash',
1290
+ 'data',
1291
+ 'date',
1292
+ 'david',
1293
+ 'dawn',
1294
+ 'day',
1295
+ 'deadly',
1296
+ 'deaf',
1297
+ 'deal',
1298
+ 'dealer',
1299
+ 'dean',
1300
+ 'dear',
1301
+ 'debar',
1302
+ 'debate',
1303
+ 'debit',
1304
+ 'debris',
1305
+ 'debt',
1306
+ 'debtor',
1307
+ 'decade',
1308
+ 'decay',
1309
+ 'decent',
1310
+ 'decide',
1311
+ 'deck',
1312
+ 'decor',
1313
+ 'decree',
1314
+ 'deduce',
1315
+ 'deed',
1316
+ 'deep',
1317
+ 'deeply',
1318
+ 'deer',
1319
+ 'defeat',
1320
+ 'defect',
1321
+ 'defend',
1322
+ 'defer',
1323
+ 'define',
1324
+ 'defy',
1325
+ 'degree',
1326
+ 'deity',
1327
+ 'delay',
1328
+ 'delete',
1329
+ 'delhi',
1330
+ 'delphi',
1331
+ 'delta',
1332
+ 'demand',
1333
+ 'demise',
1334
+ 'demo',
1335
+ 'demure',
1336
+ 'denial',
1337
+ 'denote',
1338
+ 'dense',
1339
+ 'dental',
1340
+ 'deny',
1341
+ 'depart',
1342
+ 'depend',
1343
+ 'depict',
1344
+ 'deploy',
1345
+ 'depot',
1346
+ 'depth',
1347
+ 'deputy',
1348
+ 'derby',
1349
+ 'derive',
1350
+ 'desert',
1351
+ 'design',
1352
+ 'desist',
1353
+ 'desk',
1354
+ 'detail',
1355
+ 'detect',
1356
+ 'deter',
1357
+ 'detest',
1358
+ 'detour',
1359
+ 'device',
1360
+ 'devise',
1361
+ 'devoid',
1362
+ 'devote',
1363
+ 'devour',
1364
+ 'dial',
1365
+ 'diana',
1366
+ 'diary',
1367
+ 'dice',
1368
+ 'dictum',
1369
+ 'did',
1370
+ 'diesel',
1371
+ 'diet',
1372
+ 'differ',
1373
+ 'digest',
1374
+ 'digit',
1375
+ 'dine',
1376
+ 'dinghy',
1377
+ 'dingus',
1378
+ 'dinner',
1379
+ 'diode',
1380
+ 'dire',
1381
+ 'direct',
1382
+ 'dirt',
1383
+ 'disc',
1384
+ 'disco',
1385
+ 'dish',
1386
+ 'disk',
1387
+ 'dismal',
1388
+ 'dispel',
1389
+ 'ditch',
1390
+ 'divert',
1391
+ 'divide',
1392
+ 'divine',
1393
+ 'dizzy',
1394
+ 'docile',
1395
+ 'dock',
1396
+ 'doctor',
1397
+ 'dog',
1398
+ 'dogger',
1399
+ 'dogma',
1400
+ 'dole',
1401
+ 'doll',
1402
+ 'dollar',
1403
+ 'dolly',
1404
+ 'domain',
1405
+ 'dome',
1406
+ 'domino',
1407
+ 'donate',
1408
+ 'done',
1409
+ 'donkey',
1410
+ 'donor',
1411
+ 'door',
1412
+ 'dorsal',
1413
+ 'dose',
1414
+ 'dote',
1415
+ 'double',
1416
+ 'doubt',
1417
+ 'dough',
1418
+ 'dour',
1419
+ 'dove',
1420
+ 'dower',
1421
+ 'down',
1422
+ 'dozen',
1423
+ 'draft',
1424
+ 'drag',
1425
+ 'dragon',
1426
+ 'drain',
1427
+ 'drama',
1428
+ 'drank',
1429
+ 'draper',
1430
+ 'draw',
1431
+ 'drawer',
1432
+ 'dread',
1433
+ 'dream',
1434
+ 'dreamy',
1435
+ 'dreary',
1436
+ 'dress',
1437
+ 'drew',
1438
+ 'dried',
1439
+ 'drift',
1440
+ 'drill',
1441
+ 'drink',
1442
+ 'drip',
1443
+ 'drive',
1444
+ 'driver',
1445
+ 'drool',
1446
+ 'drop',
1447
+ 'drove',
1448
+ 'drown',
1449
+ 'drum',
1450
+ 'dry',
1451
+ 'dual',
1452
+ 'dublin',
1453
+ 'duck',
1454
+ 'duct',
1455
+ 'due',
1456
+ 'duel',
1457
+ 'duet',
1458
+ 'duke',
1459
+ 'dull',
1460
+ 'duly',
1461
+ 'dummy',
1462
+ 'dump',
1463
+ 'dune',
1464
+ 'dung',
1465
+ 'duress',
1466
+ 'during',
1467
+ 'dusk',
1468
+ 'dust',
1469
+ 'dusty',
1470
+ 'dutch',
1471
+ 'duty',
1472
+ 'dwarf',
1473
+ 'dwell',
1474
+ 'dyer',
1475
+ 'dying',
1476
+ 'dynamo',
1477
+ 'each',
1478
+ 'eager',
1479
+ 'eagle',
1480
+ 'ear',
1481
+ 'earl',
1482
+ 'early',
1483
+ 'earn',
1484
+ 'earth',
1485
+ 'ease',
1486
+ 'easel',
1487
+ 'easily',
1488
+ 'east',
1489
+ 'easter',
1490
+ 'easy',
1491
+ 'eat',
1492
+ 'eaten',
1493
+ 'eater',
1494
+ 'echo',
1495
+ 'eddy',
1496
+ 'eden',
1497
+ 'edge',
1498
+ 'edible',
1499
+ 'edict',
1500
+ 'edit',
1501
+ 'editor',
1502
+ 'edward',
1503
+ 'eerie',
1504
+ 'eerily',
1505
+ 'effect',
1506
+ 'effort',
1507
+ 'egg',
1508
+ 'ego',
1509
+ 'egypt',
1510
+ 'eight',
1511
+ 'eighth',
1512
+ 'eighty',
1513
+ 'either',
1514
+ 'elbow',
1515
+ 'elder',
1516
+ 'eldest',
1517
+ 'elect',
1518
+ 'eleven',
1519
+ 'elicit',
1520
+ 'elite',
1521
+ 'eloge',
1522
+ 'else',
1523
+ 'elude',
1524
+ 'elves',
1525
+ 'embark',
1526
+ 'emblem',
1527
+ 'embryo',
1528
+ 'emerge',
1529
+ 'emit',
1530
+ 'empire',
1531
+ 'employ',
1532
+ 'empty',
1533
+ 'enable',
1534
+ 'enamel',
1535
+ 'end',
1536
+ 'endure',
1537
+ 'energy',
1538
+ 'engage',
1539
+ 'engine',
1540
+ 'enjoy',
1541
+ 'enlist',
1542
+ 'enough',
1543
+ 'ensure',
1544
+ 'entail',
1545
+ 'enter',
1546
+ 'entire',
1547
+ 'entre',
1548
+ 'entry',
1549
+ 'envoy',
1550
+ 'envy',
1551
+ 'enzyme',
1552
+ 'epic',
1553
+ 'epoch',
1554
+ 'equal',
1555
+ 'equate',
1556
+ 'equip',
1557
+ 'equity',
1558
+ 'era',
1559
+ 'erase',
1560
+ 'eric',
1561
+ 'erode',
1562
+ 'erotic',
1563
+ 'errant',
1564
+ 'error',
1565
+ 'escape',
1566
+ 'essay',
1567
+ 'essex',
1568
+ 'estate',
1569
+ 'esteem',
1570
+ 'ethic',
1571
+ 'etoile',
1572
+ 'eundo',
1573
+ 'europe',
1574
+ 'evade',
1575
+ 'eve',
1576
+ 'even',
1577
+ 'event',
1578
+ 'ever',
1579
+ 'every',
1580
+ 'evict',
1581
+ 'evil',
1582
+ 'evoke',
1583
+ 'evolve',
1584
+ 'exact',
1585
+ 'exam',
1586
+ 'exceed',
1587
+ 'excel',
1588
+ 'except',
1589
+ 'excess',
1590
+ 'excise',
1591
+ 'excite',
1592
+ 'excuse',
1593
+ 'exempt',
1594
+ 'exert',
1595
+ 'exile',
1596
+ 'exist',
1597
+ 'exit',
1598
+ 'exodus',
1599
+ 'exotic',
1600
+ 'expand',
1601
+ 'expect',
1602
+ 'expert',
1603
+ 'expire',
1604
+ 'export',
1605
+ 'expose',
1606
+ 'extend',
1607
+ 'extra',
1608
+ 'exulat',
1609
+ 'eye',
1610
+ 'eyed',
1611
+ 'fabric',
1612
+ 'face',
1613
+ 'facer',
1614
+ 'facial',
1615
+ 'fact',
1616
+ 'factor',
1617
+ 'fade',
1618
+ 'fail',
1619
+ 'faint',
1620
+ 'fair',
1621
+ 'fairly',
1622
+ 'fake',
1623
+ 'falcon',
1624
+ 'fall',
1625
+ 'false',
1626
+ 'falter',
1627
+ 'fame',
1628
+ 'family',
1629
+ 'famine',
1630
+ 'famous',
1631
+ 'fan',
1632
+ 'fancy',
1633
+ 'far',
1634
+ 'farce',
1635
+ 'fare',
1636
+ 'farm',
1637
+ 'farmer',
1638
+ 'fast',
1639
+ 'fasten',
1640
+ 'faster',
1641
+ 'fatal',
1642
+ 'fate',
1643
+ 'father',
1644
+ 'fatty',
1645
+ 'fault',
1646
+ 'faulty',
1647
+ 'fauna',
1648
+ 'feast',
1649
+ 'feat',
1650
+ 'fed',
1651
+ 'fee',
1652
+ 'feeble',
1653
+ 'feed',
1654
+ 'feel',
1655
+ 'feels',
1656
+ 'feet',
1657
+ 'fell',
1658
+ 'fellow',
1659
+ 'felt',
1660
+ 'female',
1661
+ 'femur',
1662
+ 'fence',
1663
+ 'fend',
1664
+ 'ferry',
1665
+ 'fetal',
1666
+ 'fetch',
1667
+ 'feudal',
1668
+ 'fever',
1669
+ 'few',
1670
+ 'fewer',
1671
+ 'fiance',
1672
+ 'fiasco',
1673
+ 'fiddle',
1674
+ 'field',
1675
+ 'fiend',
1676
+ 'fierce',
1677
+ 'fiery',
1678
+ 'fifth',
1679
+ 'fifty',
1680
+ 'fig',
1681
+ 'figure',
1682
+ 'file',
1683
+ 'fill',
1684
+ 'filled',
1685
+ 'filler',
1686
+ 'film',
1687
+ 'filter',
1688
+ 'filth',
1689
+ 'filthy',
1690
+ 'final',
1691
+ 'finale',
1692
+ 'find',
1693
+ 'fine',
1694
+ 'finish',
1695
+ 'finite',
1696
+ 'firm',
1697
+ 'firmly',
1698
+ 'first',
1699
+ 'fiscal',
1700
+ 'fish',
1701
+ 'fisher',
1702
+ 'fit',
1703
+ 'fitful',
1704
+ 'five',
1705
+ 'fix',
1706
+ 'flag',
1707
+ 'flair',
1708
+ 'flak',
1709
+ 'flame',
1710
+ 'flank',
1711
+ 'flare',
1712
+ 'flash',
1713
+ 'flask',
1714
+ 'flat',
1715
+ 'flaw',
1716
+ 'fled',
1717
+ 'flee',
1718
+ 'fleece',
1719
+ 'fleet',
1720
+ 'flesh',
1721
+ 'fleshy',
1722
+ 'flew',
1723
+ 'flick',
1724
+ 'flight',
1725
+ 'flimsy',
1726
+ 'flint',
1727
+ 'flirt',
1728
+ 'float',
1729
+ 'flock',
1730
+ 'floe',
1731
+ 'flood',
1732
+ 'floor',
1733
+ 'floppy',
1734
+ 'flora',
1735
+ 'floral',
1736
+ 'flour',
1737
+ 'flow',
1738
+ 'flower',
1739
+ 'fluent',
1740
+ 'fluffy',
1741
+ 'fluid',
1742
+ 'flung',
1743
+ 'flurry',
1744
+ 'flush',
1745
+ 'flute',
1746
+ 'flux',
1747
+ 'fly',
1748
+ 'flyer',
1749
+ 'foal',
1750
+ 'foam',
1751
+ 'foamy',
1752
+ 'focal',
1753
+ 'focus',
1754
+ 'fog',
1755
+ 'foil',
1756
+ 'foin',
1757
+ 'fold',
1758
+ 'folk',
1759
+ 'follow',
1760
+ 'folly',
1761
+ 'fond',
1762
+ 'fondly',
1763
+ 'font',
1764
+ 'food',
1765
+ 'fool',
1766
+ 'foot',
1767
+ 'for',
1768
+ 'forbid',
1769
+ 'force',
1770
+ 'ford',
1771
+ 'forest',
1772
+ 'forge',
1773
+ 'forget',
1774
+ 'fork',
1775
+ 'form',
1776
+ 'formal',
1777
+ 'format',
1778
+ 'former',
1779
+ 'fort',
1780
+ 'forth',
1781
+ 'forty',
1782
+ 'forum',
1783
+ 'fossil',
1784
+ 'foster',
1785
+ 'foul',
1786
+ 'found',
1787
+ 'four',
1788
+ 'fourth',
1789
+ 'fox',
1790
+ 'foyer',
1791
+ 'frail',
1792
+ 'frame',
1793
+ 'franc',
1794
+ 'france',
1795
+ 'frank',
1796
+ 'free',
1797
+ 'freed',
1798
+ 'freely',
1799
+ 'freer',
1800
+ 'freeze',
1801
+ 'french',
1802
+ 'frenzy',
1803
+ 'fresh',
1804
+ 'friar',
1805
+ 'friday',
1806
+ 'fridge',
1807
+ 'fried',
1808
+ 'friend',
1809
+ 'fright',
1810
+ 'fringe',
1811
+ 'frock',
1812
+ 'frog',
1813
+ 'from',
1814
+ 'front',
1815
+ 'frost',
1816
+ 'frosty',
1817
+ 'frown',
1818
+ 'frozen',
1819
+ 'frugal',
1820
+ 'fruit',
1821
+ 'fruity',
1822
+ 'fudge',
1823
+ 'fuel',
1824
+ 'fulfil',
1825
+ 'full',
1826
+ 'fully',
1827
+ 'fun',
1828
+ 'fund',
1829
+ 'funny',
1830
+ 'fur',
1831
+ 'furry',
1832
+ 'fury',
1833
+ 'fuse',
1834
+ 'fusion',
1835
+ 'fuss',
1836
+ 'fussy',
1837
+ 'futile',
1838
+ 'future',
1839
+ 'fuzzy',
1840
+ 'gadget',
1841
+ 'gag',
1842
+ 'gain',
1843
+ 'gala',
1844
+ 'galaxy',
1845
+ 'gale',
1846
+ 'gall',
1847
+ 'galley',
1848
+ 'gallon',
1849
+ 'gallop',
1850
+ 'gamble',
1851
+ 'game',
1852
+ 'gamma',
1853
+ 'gandhi',
1854
+ 'gap',
1855
+ 'garage',
1856
+ 'garden',
1857
+ 'garlic',
1858
+ 'gas',
1859
+ 'gasp',
1860
+ 'gate',
1861
+ 'gather',
1862
+ 'gaucho',
1863
+ 'gauge',
1864
+ 'gaul',
1865
+ 'gaunt',
1866
+ 'gave',
1867
+ 'gaze',
1868
+ 'gear',
1869
+ 'geese',
1870
+ 'gemini',
1871
+ 'gender',
1872
+ 'gene',
1873
+ 'geneva',
1874
+ 'genial',
1875
+ 'genius',
1876
+ 'genre',
1877
+ 'gentle',
1878
+ 'gently',
1879
+ 'gentry',
1880
+ 'genus',
1881
+ 'george',
1882
+ 'get',
1883
+ 'ghetto',
1884
+ 'ghost',
1885
+ 'giant',
1886
+ 'gift',
1887
+ 'giggle',
1888
+ 'gill',
1889
+ 'gilt',
1890
+ 'ginger',
1891
+ 'girl',
1892
+ 'give',
1893
+ 'given',
1894
+ 'glad',
1895
+ 'glade',
1896
+ 'glance',
1897
+ 'gland',
1898
+ 'glare',
1899
+ 'glass',
1900
+ 'glassy',
1901
+ 'gleam',
1902
+ 'glee',
1903
+ 'glib',
1904
+ 'glide',
1905
+ 'global',
1906
+ 'globe',
1907
+ 'gloom',
1908
+ 'gloomy',
1909
+ 'gloria',
1910
+ 'glory',
1911
+ 'gloss',
1912
+ 'glossy',
1913
+ 'glove',
1914
+ 'glow',
1915
+ 'glue',
1916
+ 'goal',
1917
+ 'goat',
1918
+ 'gold',
1919
+ 'golden',
1920
+ 'golf',
1921
+ 'gone',
1922
+ 'gong',
1923
+ 'good',
1924
+ 'goose',
1925
+ 'gorge',
1926
+ 'gory',
1927
+ 'gosh',
1928
+ 'gospel',
1929
+ 'gossip',
1930
+ 'got',
1931
+ 'gothic',
1932
+ 'govern',
1933
+ 'gown',
1934
+ 'grab',
1935
+ 'grace',
1936
+ 'grade',
1937
+ 'grain',
1938
+ 'grand',
1939
+ 'grant',
1940
+ 'grape',
1941
+ 'graph',
1942
+ 'grasp',
1943
+ 'grass',
1944
+ 'grassy',
1945
+ 'grate',
1946
+ 'grave',
1947
+ 'gravel',
1948
+ 'gravy',
1949
+ 'gray',
1950
+ 'grease',
1951
+ 'greasy',
1952
+ 'great',
1953
+ 'greece',
1954
+ 'greed',
1955
+ 'greedy',
1956
+ 'greek',
1957
+ 'green',
1958
+ 'greet',
1959
+ 'grew',
1960
+ 'grey',
1961
+ 'grid',
1962
+ 'grief',
1963
+ 'grill',
1964
+ 'grim',
1965
+ 'grin',
1966
+ 'grind',
1967
+ 'grip',
1968
+ 'grit',
1969
+ 'gritty',
1970
+ 'groan',
1971
+ 'groin',
1972
+ 'groom',
1973
+ 'groove',
1974
+ 'ground',
1975
+ 'group',
1976
+ 'grove',
1977
+ 'grow',
1978
+ 'grown',
1979
+ 'growth',
1980
+ 'grudge',
1981
+ 'grunt',
1982
+ 'guard',
1983
+ 'guess',
1984
+ 'guest',
1985
+ 'guide',
1986
+ 'guild',
1987
+ 'guilt',
1988
+ 'guilty',
1989
+ 'guise',
1990
+ 'guitar',
1991
+ 'gulf',
1992
+ 'gully',
1993
+ 'gunman',
1994
+ 'guru',
1995
+ 'gut',
1996
+ 'guy',
1997
+ 'gypsy',
1998
+ 'habit',
1999
+ 'hack',
2000
+ 'had',
2001
+ 'hague',
2002
+ 'hail',
2003
+ 'hair',
2004
+ 'hairy',
2005
+ 'haiti',
2006
+ 'hale',
2007
+ 'half',
2008
+ 'hall',
2009
+ 'halt',
2010
+ 'hamlet',
2011
+ 'hammer',
2012
+ 'hand',
2013
+ 'handle',
2014
+ 'handy',
2015
+ 'hang',
2016
+ 'hangar',
2017
+ 'hanoi',
2018
+ 'happen',
2019
+ 'happy',
2020
+ 'hard',
2021
+ 'hardly',
2022
+ 'hare',
2023
+ 'harm',
2024
+ 'harp',
2025
+ 'harry',
2026
+ 'harsh',
2027
+ 'has',
2028
+ 'hash',
2029
+ 'hassle',
2030
+ 'hasta',
2031
+ 'haste',
2032
+ 'hasten',
2033
+ 'hasty',
2034
+ 'hat',
2035
+ 'hatch',
2036
+ 'hate',
2037
+ 'haul',
2038
+ 'haunt',
2039
+ 'havana',
2040
+ 'have',
2041
+ 'haven',
2042
+ 'havoc',
2043
+ 'hawaii',
2044
+ 'hawk',
2045
+ 'hawse',
2046
+ 'hazard',
2047
+ 'haze',
2048
+ 'hazel',
2049
+ 'hazy',
2050
+ 'heal',
2051
+ 'health',
2052
+ 'heap',
2053
+ 'hear',
2054
+ 'heard',
2055
+ 'heart',
2056
+ 'hearth',
2057
+ 'hearty',
2058
+ 'heat',
2059
+ 'heater',
2060
+ 'heaven',
2061
+ 'heavy',
2062
+ 'hebrew',
2063
+ 'heck',
2064
+ 'hectic',
2065
+ 'hedge',
2066
+ 'heel',
2067
+ 'hefty',
2068
+ 'height',
2069
+ 'heil',
2070
+ 'heir',
2071
+ 'held',
2072
+ 'helium',
2073
+ 'helix',
2074
+ 'hello',
2075
+ 'helm',
2076
+ 'helmet',
2077
+ 'help',
2078
+ 'hemp',
2079
+ 'hence',
2080
+ 'henry',
2081
+ 'her',
2082
+ 'herald',
2083
+ 'herb',
2084
+ 'herd',
2085
+ 'here',
2086
+ 'hereby',
2087
+ 'hermes',
2088
+ 'hernia',
2089
+ 'hero',
2090
+ 'heroic',
2091
+ 'hest',
2092
+ 'hey',
2093
+ 'heyday',
2094
+ 'hick',
2095
+ 'hidden',
2096
+ 'hide',
2097
+ 'high',
2098
+ 'higher',
2099
+ 'highly',
2100
+ 'hill',
2101
+ 'him',
2102
+ 'hind',
2103
+ 'hindu',
2104
+ 'hint',
2105
+ 'hippy',
2106
+ 'hire',
2107
+ 'his',
2108
+ 'hiss',
2109
+ 'hit',
2110
+ 'hive',
2111
+ 'hoard',
2112
+ 'hoarse',
2113
+ 'hobby',
2114
+ 'hockey',
2115
+ 'hold',
2116
+ 'holder',
2117
+ 'hollow',
2118
+ 'holly',
2119
+ 'holy',
2120
+ 'home',
2121
+ 'honest',
2122
+ 'honey',
2123
+ 'hood',
2124
+ 'hope',
2125
+ 'hopple',
2126
+ 'horrid',
2127
+ 'horror',
2128
+ 'horse',
2129
+ 'hose',
2130
+ 'host',
2131
+ 'hotbox',
2132
+ 'hotel',
2133
+ 'hound',
2134
+ 'hour',
2135
+ 'house',
2136
+ 'hover',
2137
+ 'how',
2138
+ 'huck',
2139
+ 'huge',
2140
+ 'hull',
2141
+ 'human',
2142
+ 'humane',
2143
+ 'humble',
2144
+ 'humid',
2145
+ 'hung',
2146
+ 'hunger',
2147
+ 'hungry',
2148
+ 'hunt',
2149
+ 'hurdle',
2150
+ 'hurl',
2151
+ 'hurry',
2152
+ 'hurt',
2153
+ 'hush',
2154
+ 'hut',
2155
+ 'hybrid',
2156
+ 'hymn',
2157
+ 'hyphen',
2158
+ 'ice',
2159
+ 'icing',
2160
+ 'icon',
2161
+ 'idaho',
2162
+ 'idea',
2163
+ 'ideal',
2164
+ 'idiom',
2165
+ 'idle',
2166
+ 'idly',
2167
+ 'idol',
2168
+ 'ignite',
2169
+ 'ignore',
2170
+ 'ill',
2171
+ 'image',
2172
+ 'immune',
2173
+ 'impact',
2174
+ 'imply',
2175
+ 'import',
2176
+ 'impose',
2177
+ 'inca',
2178
+ 'inch',
2179
+ 'income',
2180
+ 'incur',
2181
+ 'indeed',
2182
+ 'index',
2183
+ 'india',
2184
+ 'indian',
2185
+ 'indoor',
2186
+ 'induce',
2187
+ 'inept',
2188
+ 'inert',
2189
+ 'infant',
2190
+ 'infect',
2191
+ 'infer',
2192
+ 'influx',
2193
+ 'inform',
2194
+ 'inhere',
2195
+ 'inject',
2196
+ 'injure',
2197
+ 'injury',
2198
+ 'ink',
2199
+ 'inlaid',
2200
+ 'inland',
2201
+ 'inlet',
2202
+ 'inmate',
2203
+ 'inn',
2204
+ 'innate',
2205
+ 'inner',
2206
+ 'input',
2207
+ 'insane',
2208
+ 'insect',
2209
+ 'insert',
2210
+ 'inset',
2211
+ 'inside',
2212
+ 'insist',
2213
+ 'insult',
2214
+ 'insure',
2215
+ 'intact',
2216
+ 'intake',
2217
+ 'intend',
2218
+ 'inter',
2219
+ 'into',
2220
+ 'invade',
2221
+ 'invent',
2222
+ 'invest',
2223
+ 'invite',
2224
+ 'invoke',
2225
+ 'inward',
2226
+ 'iowa',
2227
+ 'iran',
2228
+ 'iraq',
2229
+ 'irish',
2230
+ 'iron',
2231
+ 'ironic',
2232
+ 'irony',
2233
+ 'isaac',
2234
+ 'isabel',
2235
+ 'islam',
2236
+ 'island',
2237
+ 'isle',
2238
+ 'issue',
2239
+ 'italy',
2240
+ 'item',
2241
+ 'itself',
2242
+ 'ivan',
2243
+ 'ivory',
2244
+ 'ivy',
2245
+ 'jacket',
2246
+ 'jacob',
2247
+ 'jaguar',
2248
+ 'jail',
2249
+ 'james',
2250
+ 'japan',
2251
+ 'jargon',
2252
+ 'java',
2253
+ 'jaw',
2254
+ 'jazz',
2255
+ 'jeep',
2256
+ 'jelly',
2257
+ 'jerky',
2258
+ 'jersey',
2259
+ 'jest',
2260
+ 'jet',
2261
+ 'jewel',
2262
+ 'jim',
2263
+ 'jive',
2264
+ 'job',
2265
+ 'jock',
2266
+ 'jockey',
2267
+ 'john',
2268
+ 'join',
2269
+ 'joke',
2270
+ 'jolly',
2271
+ 'jolt',
2272
+ 'jordan',
2273
+ 'joseph',
2274
+ 'joy',
2275
+ 'joyful',
2276
+ 'joyous',
2277
+ 'judas',
2278
+ 'judge',
2279
+ 'judy',
2280
+ 'juice',
2281
+ 'juicy',
2282
+ 'july',
2283
+ 'jumble',
2284
+ 'jumbo',
2285
+ 'jump',
2286
+ 'june',
2287
+ 'jungle',
2288
+ 'junior',
2289
+ 'junk',
2290
+ 'junta',
2291
+ 'jury',
2292
+ 'just',
2293
+ 'kami',
2294
+ 'kansas',
2295
+ 'karate',
2296
+ 'karl',
2297
+ 'karma',
2298
+ 'kedge',
2299
+ 'keel',
2300
+ 'keen',
2301
+ 'keep',
2302
+ 'keeper',
2303
+ 'kenya',
2304
+ 'kept',
2305
+ 'kernel',
2306
+ 'kettle',
2307
+ 'key',
2308
+ 'khaki',
2309
+ 'khaya',
2310
+ 'khowar',
2311
+ 'kick',
2312
+ 'kidnap',
2313
+ 'kidney',
2314
+ 'kin',
2315
+ 'kind',
2316
+ 'kindly',
2317
+ 'king',
2318
+ 'kiss',
2319
+ 'kite',
2320
+ 'kitten',
2321
+ 'knack',
2322
+ 'knaggy',
2323
+ 'knee',
2324
+ 'knew',
2325
+ 'knight',
2326
+ 'knit',
2327
+ 'knock',
2328
+ 'knot',
2329
+ 'know',
2330
+ 'known',
2331
+ 'koran',
2332
+ 'korea',
2333
+ 'kusan',
2334
+ 'kuwait',
2335
+ 'label',
2336
+ 'lace',
2337
+ 'lack',
2338
+ 'lad',
2339
+ 'ladder',
2340
+ 'laden',
2341
+ 'lady',
2342
+ 'lagoon',
2343
+ 'laity',
2344
+ 'lake',
2345
+ 'lamb',
2346
+ 'lame',
2347
+ 'lamp',
2348
+ 'lance',
2349
+ 'land',
2350
+ 'lane',
2351
+ 'laos',
2352
+ 'lap',
2353
+ 'lapse',
2354
+ 'large',
2355
+ 'larval',
2356
+ 'laser',
2357
+ 'last',
2358
+ 'latch',
2359
+ 'late',
2360
+ 'lately',
2361
+ 'latent',
2362
+ 'later',
2363
+ 'latest',
2364
+ 'latter',
2365
+ 'laugh',
2366
+ 'launch',
2367
+ 'lava',
2368
+ 'lavish',
2369
+ 'law',
2370
+ 'lawful',
2371
+ 'lawn',
2372
+ 'laws',
2373
+ 'lawyer',
2374
+ 'lay',
2375
+ 'layer',
2376
+ 'layman',
2377
+ 'lazy',
2378
+ 'lead',
2379
+ 'leader',
2380
+ 'leaf',
2381
+ 'leafy',
2382
+ 'league',
2383
+ 'leak',
2384
+ 'leaky',
2385
+ 'lean',
2386
+ 'leap',
2387
+ 'learn',
2388
+ 'lease',
2389
+ 'leash',
2390
+ 'least',
2391
+ 'leave',
2392
+ 'led',
2393
+ 'ledge',
2394
+ 'left',
2395
+ 'leg',
2396
+ 'legacy',
2397
+ 'legal',
2398
+ 'legend',
2399
+ 'legion',
2400
+ 'lemon',
2401
+ 'lend',
2402
+ 'length',
2403
+ 'lens',
2404
+ 'lent',
2405
+ 'leo',
2406
+ 'leper',
2407
+ 'lese',
2408
+ 'lesion',
2409
+ 'less',
2410
+ 'lessen',
2411
+ 'lesser',
2412
+ 'lesson',
2413
+ 'lest',
2414
+ 'let',
2415
+ 'lethal',
2416
+ 'letter',
2417
+ 'letup',
2418
+ 'level',
2419
+ 'lever',
2420
+ 'levy',
2421
+ 'lewis',
2422
+ 'liable',
2423
+ 'liar',
2424
+ 'libel',
2425
+ 'libya',
2426
+ 'lice',
2427
+ 'lick',
2428
+ 'lid',
2429
+ 'lie',
2430
+ 'lied',
2431
+ 'life',
2432
+ 'lift',
2433
+ 'light',
2434
+ 'like',
2435
+ 'likely',
2436
+ 'lima',
2437
+ 'limb',
2438
+ 'lime',
2439
+ 'limit',
2440
+ 'limp',
2441
+ 'line',
2442
+ 'linear',
2443
+ 'linen',
2444
+ 'lineup',
2445
+ 'linger',
2446
+ 'link',
2447
+ 'lion',
2448
+ 'lip',
2449
+ 'liquid',
2450
+ 'lisbon',
2451
+ 'list',
2452
+ 'listen',
2453
+ 'lit',
2454
+ 'live',
2455
+ 'lively',
2456
+ 'liver',
2457
+ 'livy',
2458
+ 'liz',
2459
+ 'lizard',
2460
+ 'load',
2461
+ 'loaf',
2462
+ 'loan',
2463
+ 'lobby',
2464
+ 'lobe',
2465
+ 'local',
2466
+ 'locate',
2467
+ 'lock',
2468
+ 'locus',
2469
+ 'lodge',
2470
+ 'loft',
2471
+ 'lofty',
2472
+ 'log',
2473
+ 'logic',
2474
+ 'logo',
2475
+ 'london',
2476
+ 'lone',
2477
+ 'lonely',
2478
+ 'long',
2479
+ 'longer',
2480
+ 'look',
2481
+ 'loop',
2482
+ 'loose',
2483
+ 'loosen',
2484
+ 'loot',
2485
+ 'lord',
2486
+ 'lorry',
2487
+ 'lose',
2488
+ 'loss',
2489
+ 'lost',
2490
+ 'lot',
2491
+ 'lotus',
2492
+ 'loud',
2493
+ 'loudly',
2494
+ 'lounge',
2495
+ 'lousy',
2496
+ 'louvre',
2497
+ 'love',
2498
+ 'lovely',
2499
+ 'lover',
2500
+ 'low',
2501
+ 'lower',
2502
+ 'lowest',
2503
+ 'loyal',
2504
+ 'lucid',
2505
+ 'luck',
2506
+ 'lucky',
2507
+ 'lucy',
2508
+ 'lukes',
2509
+ 'lull',
2510
+ 'lump',
2511
+ 'lumpy',
2512
+ 'lunacy',
2513
+ 'lunar',
2514
+ 'lunch',
2515
+ 'lung',
2516
+ 'lure',
2517
+ 'lurid',
2518
+ 'lush',
2519
+ 'lusory',
2520
+ 'lute',
2521
+ 'luther',
2522
+ 'luxury',
2523
+ 'lying',
2524
+ 'lymph',
2525
+ 'lyric',
2526
+ 'macho',
2527
+ 'macro',
2528
+ 'macte',
2529
+ 'madam',
2530
+ 'madame',
2531
+ 'made',
2532
+ 'madrid',
2533
+ 'magic',
2534
+ 'magma',
2535
+ 'magnet',
2536
+ 'magnum',
2537
+ 'maid',
2538
+ 'maiden',
2539
+ 'mail',
2540
+ 'main',
2541
+ 'mainly',
2542
+ 'major',
2543
+ 'make',
2544
+ 'maker',
2545
+ 'male',
2546
+ 'malice',
2547
+ 'mall',
2548
+ 'malt',
2549
+ 'malta',
2550
+ 'mammal',
2551
+ 'manage',
2552
+ 'mane',
2553
+ 'mania',
2554
+ 'manic',
2555
+ 'manila',
2556
+ 'manner',
2557
+ 'manor',
2558
+ 'mantle',
2559
+ 'manual',
2560
+ 'manure',
2561
+ 'many',
2562
+ 'map',
2563
+ 'maple',
2564
+ 'marble',
2565
+ 'march',
2566
+ 'mare',
2567
+ 'margin',
2568
+ 'maria',
2569
+ 'marina',
2570
+ 'mark',
2571
+ 'market',
2572
+ 'marry',
2573
+ 'mars',
2574
+ 'marsh',
2575
+ 'martin',
2576
+ 'martyr',
2577
+ 'mary',
2578
+ 'mask',
2579
+ 'mason',
2580
+ 'mass',
2581
+ 'mast',
2582
+ 'match',
2583
+ 'mate',
2584
+ 'matrix',
2585
+ 'matter',
2586
+ 'mature',
2587
+ 'maxim',
2588
+ 'may',
2589
+ 'maya',
2590
+ 'maybe',
2591
+ 'mayor',
2592
+ 'maze',
2593
+ 'mead',
2594
+ 'meadow',
2595
+ 'meal',
2596
+ 'mean',
2597
+ 'meant',
2598
+ 'meat',
2599
+ 'mecca',
2600
+ 'medal',
2601
+ 'media',
2602
+ 'median',
2603
+ 'medic',
2604
+ 'medium',
2605
+ 'meet',
2606
+ 'mellow',
2607
+ 'melody',
2608
+ 'melon',
2609
+ 'melt',
2610
+ 'member',
2611
+ 'memo',
2612
+ 'memory',
2613
+ 'menace',
2614
+ 'mend',
2615
+ 'mental',
2616
+ 'mentor',
2617
+ 'menu',
2618
+ 'mercy',
2619
+ 'mere',
2620
+ 'merely',
2621
+ 'merge',
2622
+ 'merger',
2623
+ 'merit',
2624
+ 'merry',
2625
+ 'mesh',
2626
+ 'mess',
2627
+ 'messy',
2628
+ 'met',
2629
+ 'metal',
2630
+ 'meter',
2631
+ 'method',
2632
+ 'methyl',
2633
+ 'metric',
2634
+ 'metro',
2635
+ 'mexico',
2636
+ 'miami',
2637
+ 'mickey',
2638
+ 'mid',
2639
+ 'midas',
2640
+ 'midday',
2641
+ 'middle',
2642
+ 'midst',
2643
+ 'midway',
2644
+ 'might',
2645
+ 'mighty',
2646
+ 'milan',
2647
+ 'mild',
2648
+ 'mildew',
2649
+ 'mile',
2650
+ 'milk',
2651
+ 'milky',
2652
+ 'mill',
2653
+ 'mimic',
2654
+ 'mince',
2655
+ 'mind',
2656
+ 'mine',
2657
+ 'mini',
2658
+ 'mink',
2659
+ 'minor',
2660
+ 'mint',
2661
+ 'minus',
2662
+ 'minute',
2663
+ 'mirror',
2664
+ 'mirth',
2665
+ 'misery',
2666
+ 'miss',
2667
+ 'mist',
2668
+ 'misty',
2669
+ 'mite',
2670
+ 'mix',
2671
+ 'mizzle',
2672
+ 'moan',
2673
+ 'moat',
2674
+ 'mobile',
2675
+ 'mock',
2676
+ 'mode',
2677
+ 'model',
2678
+ 'modem',
2679
+ 'modern',
2680
+ 'modest',
2681
+ 'modify',
2682
+ 'module',
2683
+ 'moist',
2684
+ 'molar',
2685
+ 'mole',
2686
+ 'molten',
2687
+ 'moment',
2688
+ 'monaco',
2689
+ 'monday',
2690
+ 'money',
2691
+ 'monies',
2692
+ 'monk',
2693
+ 'monkey',
2694
+ 'month',
2695
+ 'mood',
2696
+ 'moody',
2697
+ 'moon',
2698
+ 'moor',
2699
+ 'moral',
2700
+ 'morale',
2701
+ 'morbid',
2702
+ 'more',
2703
+ 'morgue',
2704
+ 'mortal',
2705
+ 'mortar',
2706
+ 'mosaic',
2707
+ 'moscow',
2708
+ 'moses',
2709
+ 'mosque',
2710
+ 'moss',
2711
+ 'most',
2712
+ 'mostly',
2713
+ 'moth',
2714
+ 'mother',
2715
+ 'motion',
2716
+ 'motive',
2717
+ 'motor',
2718
+ 'mould',
2719
+ 'mount',
2720
+ 'mourn',
2721
+ 'mouse',
2722
+ 'mouth',
2723
+ 'move',
2724
+ 'movie',
2725
+ 'mrs',
2726
+ 'much',
2727
+ 'muck',
2728
+ 'mucky',
2729
+ 'mucus',
2730
+ 'mud',
2731
+ 'muddle',
2732
+ 'muddy',
2733
+ 'mule',
2734
+ 'mummy',
2735
+ 'munich',
2736
+ 'murky',
2737
+ 'murmur',
2738
+ 'muscle',
2739
+ 'museum',
2740
+ 'music',
2741
+ 'mussel',
2742
+ 'must',
2743
+ 'mutant',
2744
+ 'mute',
2745
+ 'mutiny',
2746
+ 'mutter',
2747
+ 'mutton',
2748
+ 'mutual',
2749
+ 'muzzle',
2750
+ 'myopic',
2751
+ 'myriad',
2752
+ 'myself',
2753
+ 'mystic',
2754
+ 'myth',
2755
+ 'nadir',
2756
+ 'nail',
2757
+ 'name',
2758
+ 'namely',
2759
+ 'nape',
2760
+ 'napkin',
2761
+ 'naples',
2762
+ 'narrow',
2763
+ 'nasal',
2764
+ 'nation',
2765
+ 'native',
2766
+ 'nature',
2767
+ 'nausea',
2768
+ 'naval',
2769
+ 'nave',
2770
+ 'navy',
2771
+ 'near',
2772
+ 'nearer',
2773
+ 'nearly',
2774
+ 'neat',
2775
+ 'neatly',
2776
+ 'neck',
2777
+ 'need',
2778
+ 'needle',
2779
+ 'needy',
2780
+ 'negate',
2781
+ 'nemo',
2782
+ 'neon',
2783
+ 'nepal',
2784
+ 'nephew',
2785
+ 'nerve',
2786
+ 'nest',
2787
+ 'neural',
2788
+ 'never',
2789
+ 'newark',
2790
+ 'newly',
2791
+ 'next',
2792
+ 'nice',
2793
+ 'nicely',
2794
+ 'niche',
2795
+ 'nickel',
2796
+ 'nidor',
2797
+ 'niece',
2798
+ 'night',
2799
+ 'nile',
2800
+ 'nimble',
2801
+ 'nine',
2802
+ 'ninety',
2803
+ 'ninth',
2804
+ 'nobel',
2805
+ 'noble',
2806
+ 'nobody',
2807
+ 'node',
2808
+ 'noise',
2809
+ 'noisy',
2810
+ 'non',
2811
+ 'none',
2812
+ 'noon',
2813
+ 'nor',
2814
+ 'norm',
2815
+ 'normal',
2816
+ 'north',
2817
+ 'norway',
2818
+ 'nose',
2819
+ 'nostoc',
2820
+ 'nosy',
2821
+ 'not',
2822
+ 'note',
2823
+ 'notice',
2824
+ 'notify',
2825
+ 'notion',
2826
+ 'nought',
2827
+ 'noun',
2828
+ 'novel',
2829
+ 'novice',
2830
+ 'now',
2831
+ 'nozzle',
2832
+ 'nubere',
2833
+ 'null',
2834
+ 'numb',
2835
+ 'number',
2836
+ 'nurse',
2837
+ 'nylon',
2838
+ 'oak',
2839
+ 'oasis',
2840
+ 'oath',
2841
+ 'obese',
2842
+ 'obey',
2843
+ 'object',
2844
+ 'oblige',
2845
+ 'oboe',
2846
+ 'obtain',
2847
+ 'occult',
2848
+ 'occupy',
2849
+ 'occur',
2850
+ 'ocean',
2851
+ 'octave',
2852
+ 'odd',
2853
+ 'off',
2854
+ 'offend',
2855
+ 'offer',
2856
+ 'office',
2857
+ 'offset',
2858
+ 'often',
2859
+ 'ohio',
2860
+ 'oil',
2861
+ 'oily',
2862
+ 'okay',
2863
+ 'old',
2864
+ 'older',
2865
+ 'oldest',
2866
+ 'olive',
2867
+ 'omega',
2868
+ 'omen',
2869
+ 'omit',
2870
+ 'once',
2871
+ 'one',
2872
+ 'onion',
2873
+ 'only',
2874
+ 'onset',
2875
+ 'onto',
2876
+ 'onus',
2877
+ 'onward',
2878
+ 'opaque',
2879
+ 'open',
2880
+ 'openly',
2881
+ 'opera',
2882
+ 'opium',
2883
+ 'oppose',
2884
+ 'optic',
2885
+ 'option',
2886
+ 'oracle',
2887
+ 'orange',
2888
+ 'orbit',
2889
+ 'orchid',
2890
+ 'orchil',
2891
+ 'ordeal',
2892
+ 'order',
2893
+ 'organ',
2894
+ 'orient',
2895
+ 'origin',
2896
+ 'ornate',
2897
+ 'orphan',
2898
+ 'oscar',
2899
+ 'oslo',
2900
+ 'other',
2901
+ 'otter',
2902
+ 'ought',
2903
+ 'ounce',
2904
+ 'our',
2905
+ 'out',
2906
+ 'outer',
2907
+ 'output',
2908
+ 'outset',
2909
+ 'oval',
2910
+ 'oven',
2911
+ 'over',
2912
+ 'overt',
2913
+ 'owe',
2914
+ 'owing',
2915
+ 'owl',
2916
+ 'own',
2917
+ 'owner',
2918
+ 'oxford',
2919
+ 'oxide',
2920
+ 'oxygen',
2921
+ 'oyster',
2922
+ 'ozone',
2923
+ 'pace',
2924
+ 'pack',
2925
+ 'packet',
2926
+ 'pact',
2927
+ 'paddle',
2928
+ 'paddy',
2929
+ 'pagan',
2930
+ 'page',
2931
+ 'paid',
2932
+ 'pain',
2933
+ 'paint',
2934
+ 'pair',
2935
+ 'palace',
2936
+ 'pale',
2937
+ 'palm',
2938
+ 'panama',
2939
+ 'panel',
2940
+ 'panic',
2941
+ 'papa',
2942
+ 'papal',
2943
+ 'paper',
2944
+ 'parade',
2945
+ 'parcel',
2946
+ 'pardon',
2947
+ 'parent',
2948
+ 'paris',
2949
+ 'parish',
2950
+ 'park',
2951
+ 'parody',
2952
+ 'parrot',
2953
+ 'part',
2954
+ 'partly',
2955
+ 'party',
2956
+ 'pascal',
2957
+ 'pass',
2958
+ 'past',
2959
+ 'paste',
2960
+ 'pastel',
2961
+ 'pastor',
2962
+ 'pastry',
2963
+ 'pat',
2964
+ 'patch',
2965
+ 'patent',
2966
+ 'path',
2967
+ 'patio',
2968
+ 'patrol',
2969
+ 'patron',
2970
+ 'paul',
2971
+ 'pause',
2972
+ 'pave',
2973
+ 'pay',
2974
+ 'peace',
2975
+ 'peach',
2976
+ 'peak',
2977
+ 'pear',
2978
+ 'pearl',
2979
+ 'pedal',
2980
+ 'peel',
2981
+ 'peer',
2982
+ 'peking',
2983
+ 'pelvic',
2984
+ 'pelvis',
2985
+ 'pen',
2986
+ 'penal',
2987
+ 'pence',
2988
+ 'pencil',
2989
+ 'pennon',
2990
+ 'penny',
2991
+ 'people',
2992
+ 'pepper',
2993
+ 'per',
2994
+ 'perch',
2995
+ 'peril',
2996
+ 'perish',
2997
+ 'permit',
2998
+ 'person',
2999
+ 'peru',
3000
+ 'pest',
3001
+ 'peter',
3002
+ 'petrol',
3003
+ 'petty',
3004
+ 'phage',
3005
+ 'phase',
3006
+ 'philip',
3007
+ 'phone',
3008
+ 'photo',
3009
+ 'phrase',
3010
+ 'piano',
3011
+ 'pick',
3012
+ 'picket',
3013
+ 'picnic',
3014
+ 'pie',
3015
+ 'piece',
3016
+ 'pier',
3017
+ 'pierce',
3018
+ 'piety',
3019
+ 'pig',
3020
+ 'pigeon',
3021
+ 'piggy',
3022
+ 'pigsty',
3023
+ 'pike',
3024
+ 'pile',
3025
+ 'pill',
3026
+ 'pillar',
3027
+ 'pillow',
3028
+ 'pilot',
3029
+ 'pin',
3030
+ 'pinch',
3031
+ 'pine',
3032
+ 'pink',
3033
+ 'pint',
3034
+ 'pious',
3035
+ 'pipe',
3036
+ 'pirate',
3037
+ 'piston',
3038
+ 'pit',
3039
+ 'pitch',
3040
+ 'pity',
3041
+ 'pivot',
3042
+ 'pixel',
3043
+ 'pizza',
3044
+ 'place',
3045
+ 'placid',
3046
+ 'plague',
3047
+ 'plaguy',
3048
+ 'plain',
3049
+ 'plan',
3050
+ 'plane',
3051
+ 'planet',
3052
+ 'plank',
3053
+ 'plant',
3054
+ 'plasma',
3055
+ 'plate',
3056
+ 'play',
3057
+ 'playa',
3058
+ 'player',
3059
+ 'plea',
3060
+ 'plead',
3061
+ 'please',
3062
+ 'pledge',
3063
+ 'plenty',
3064
+ 'plenum',
3065
+ 'plight',
3066
+ 'plot',
3067
+ 'ploy',
3068
+ 'plum',
3069
+ 'plump',
3070
+ 'plunge',
3071
+ 'plural',
3072
+ 'plus',
3073
+ 'plush',
3074
+ 'pocket',
3075
+ 'pod',
3076
+ 'poem',
3077
+ 'poet',
3078
+ 'poetic',
3079
+ 'poetry',
3080
+ 'point',
3081
+ 'poison',
3082
+ 'poland',
3083
+ 'polar',
3084
+ 'pole',
3085
+ 'police',
3086
+ 'policy',
3087
+ 'polish',
3088
+ 'polite',
3089
+ 'poll',
3090
+ 'pollen',
3091
+ 'polo',
3092
+ 'pond',
3093
+ 'ponder',
3094
+ 'pony',
3095
+ 'pool',
3096
+ 'poor',
3097
+ 'poorly',
3098
+ 'pop',
3099
+ 'pope',
3100
+ 'popery',
3101
+ 'poppy',
3102
+ 'pore',
3103
+ 'pork',
3104
+ 'port',
3105
+ 'portal',
3106
+ 'pose',
3107
+ 'posh',
3108
+ 'post',
3109
+ 'postal',
3110
+ 'potato',
3111
+ 'potent',
3112
+ 'pouch',
3113
+ 'pound',
3114
+ 'pour',
3115
+ 'powder',
3116
+ 'power',
3117
+ 'prague',
3118
+ 'praise',
3119
+ 'prate',
3120
+ 'pray',
3121
+ 'prayer',
3122
+ 'preach',
3123
+ 'prefer',
3124
+ 'prefix',
3125
+ 'press',
3126
+ 'pretty',
3127
+ 'price',
3128
+ 'pride',
3129
+ 'priest',
3130
+ 'primal',
3131
+ 'prime',
3132
+ 'prince',
3133
+ 'print',
3134
+ 'prior',
3135
+ 'prism',
3136
+ 'prison',
3137
+ 'privy',
3138
+ 'prize',
3139
+ 'probe',
3140
+ 'profit',
3141
+ 'prompt',
3142
+ 'prone',
3143
+ 'proof',
3144
+ 'propel',
3145
+ 'proper',
3146
+ 'prose',
3147
+ 'proton',
3148
+ 'proud',
3149
+ 'prove',
3150
+ 'proven',
3151
+ 'proxy',
3152
+ 'prune',
3153
+ 'psalm',
3154
+ 'pseudo',
3155
+ 'psyche',
3156
+ 'pub',
3157
+ 'public',
3158
+ 'puff',
3159
+ 'pull',
3160
+ 'pulp',
3161
+ 'pulpit',
3162
+ 'pulsar',
3163
+ 'pulse',
3164
+ 'pump',
3165
+ 'punch',
3166
+ 'pung',
3167
+ 'punish',
3168
+ 'punk',
3169
+ 'pupil',
3170
+ 'puppet',
3171
+ 'puppy',
3172
+ 'pure',
3173
+ 'purely',
3174
+ 'purge',
3175
+ 'purify',
3176
+ 'purple',
3177
+ 'purse',
3178
+ 'pursue',
3179
+ 'push',
3180
+ 'pushy',
3181
+ 'put',
3182
+ 'putt',
3183
+ 'puzzle',
3184
+ 'quaint',
3185
+ 'quake',
3186
+ 'quarry',
3187
+ 'quartz',
3188
+ 'quay',
3189
+ 'quebec',
3190
+ 'queen',
3191
+ 'query',
3192
+ 'quest',
3193
+ 'queue',
3194
+ 'quick',
3195
+ 'quid',
3196
+ 'quiet',
3197
+ 'quilt',
3198
+ 'quirk',
3199
+ 'quit',
3200
+ 'quite',
3201
+ 'quiver',
3202
+ 'quiz',
3203
+ 'quota',
3204
+ 'quote',
3205
+ 'rabato',
3206
+ 'rabbit',
3207
+ 'race',
3208
+ 'racism',
3209
+ 'rack',
3210
+ 'racket',
3211
+ 'radar',
3212
+ 'radio',
3213
+ 'radish',
3214
+ 'radius',
3215
+ 'raffle',
3216
+ 'raft',
3217
+ 'rage',
3218
+ 'raid',
3219
+ 'rail',
3220
+ 'rain',
3221
+ 'rainy',
3222
+ 'raise',
3223
+ 'rally',
3224
+ 'ramp',
3225
+ 'random',
3226
+ 'range',
3227
+ 'rank',
3228
+ 'ransom',
3229
+ 'rapid',
3230
+ 'rare',
3231
+ 'rarely',
3232
+ 'rarity',
3233
+ 'rash',
3234
+ 'rat',
3235
+ 'rate',
3236
+ 'rather',
3237
+ 'ratify',
3238
+ 'ratio',
3239
+ 'rattle',
3240
+ 'rave',
3241
+ 'raven',
3242
+ 'raw',
3243
+ 'ray',
3244
+ 'razor',
3245
+ 'reach',
3246
+ 'react',
3247
+ 'read',
3248
+ 'reader',
3249
+ 'ready',
3250
+ 'real',
3251
+ 'really',
3252
+ 'realm',
3253
+ 'reap',
3254
+ 'rear',
3255
+ 'reason',
3256
+ 'rebel',
3257
+ 'recall',
3258
+ 'recent',
3259
+ 'recess',
3260
+ 'recipe',
3261
+ 'reckon',
3262
+ 'record',
3263
+ 'recoup',
3264
+ 'rector',
3265
+ 'red',
3266
+ 'redeem',
3267
+ 'reduce',
3268
+ 'reed',
3269
+ 'reef',
3270
+ 'reefy',
3271
+ 'refer',
3272
+ 'reform',
3273
+ 'refuge',
3274
+ 'refuse',
3275
+ 'regal',
3276
+ 'regard',
3277
+ 'regent',
3278
+ 'regime',
3279
+ 'region',
3280
+ 'regret',
3281
+ 'reign',
3282
+ 'relate',
3283
+ 'relax',
3284
+ 'relay',
3285
+ 'relic',
3286
+ 'relief',
3287
+ 'relish',
3288
+ 'rely',
3289
+ 'remain',
3290
+ 'remark',
3291
+ 'remedy',
3292
+ 'remind',
3293
+ 'remit',
3294
+ 'remote',
3295
+ 'remove',
3296
+ 'renal',
3297
+ 'render',
3298
+ 'rent',
3299
+ 'rental',
3300
+ 'repair',
3301
+ 'repeal',
3302
+ 'repeat',
3303
+ 'repent',
3304
+ 'repine',
3305
+ 'reply',
3306
+ 'report',
3307
+ 'rescue',
3308
+ 'resent',
3309
+ 'reside',
3310
+ 'resign',
3311
+ 'resin',
3312
+ 'resist',
3313
+ 'resort',
3314
+ 'rest',
3315
+ 'result',
3316
+ 'resume',
3317
+ 'retail',
3318
+ 'retain',
3319
+ 'retina',
3320
+ 'retire',
3321
+ 'return',
3322
+ 'reveal',
3323
+ 'revest',
3324
+ 'review',
3325
+ 'revise',
3326
+ 'revive',
3327
+ 'revolt',
3328
+ 'reward',
3329
+ 'rex',
3330
+ 'rhexia',
3331
+ 'rhine',
3332
+ 'rhino',
3333
+ 'rho',
3334
+ 'rhyme',
3335
+ 'rhythm',
3336
+ 'ribbon',
3337
+ 'rice',
3338
+ 'rich',
3339
+ 'rick',
3340
+ 'rid',
3341
+ 'ride',
3342
+ 'rider',
3343
+ 'ridge',
3344
+ 'rife',
3345
+ 'rifle',
3346
+ 'rift',
3347
+ 'right',
3348
+ 'rigid',
3349
+ 'ring',
3350
+ 'rinse',
3351
+ 'riot',
3352
+ 'ripe',
3353
+ 'ripen',
3354
+ 'ripple',
3355
+ 'rise',
3356
+ 'risk',
3357
+ 'risky',
3358
+ 'rite',
3359
+ 'ritual',
3360
+ 'ritz',
3361
+ 'rival',
3362
+ 'river',
3363
+ 'road',
3364
+ 'roar',
3365
+ 'roast',
3366
+ 'rob',
3367
+ 'robe',
3368
+ 'robert',
3369
+ 'robin',
3370
+ 'robot',
3371
+ 'robust',
3372
+ 'rock',
3373
+ 'rocket',
3374
+ 'rocks',
3375
+ 'rocky',
3376
+ 'rod',
3377
+ 'rode',
3378
+ 'rodent',
3379
+ 'rogue',
3380
+ 'role',
3381
+ 'roll',
3382
+ 'roman',
3383
+ 'rome',
3384
+ 'roof',
3385
+ 'room',
3386
+ 'root',
3387
+ 'rope',
3388
+ 'rosa',
3389
+ 'rose',
3390
+ 'roseau',
3391
+ 'rosy',
3392
+ 'rotate',
3393
+ 'rotor',
3394
+ 'rotten',
3395
+ 'rouge',
3396
+ 'rough',
3397
+ 'round',
3398
+ 'route',
3399
+ 'rover',
3400
+ 'row',
3401
+ 'royal',
3402
+ 'rubble',
3403
+ 'ruby',
3404
+ 'rudder',
3405
+ 'rude',
3406
+ 'rugby',
3407
+ 'ruin',
3408
+ 'rule',
3409
+ 'ruler',
3410
+ 'rumble',
3411
+ 'run',
3412
+ 'rune',
3413
+ 'rung',
3414
+ 'runway',
3415
+ 'rural',
3416
+ 'rush',
3417
+ 'russia',
3418
+ 'rust',
3419
+ 'rustic',
3420
+ 'rusty',
3421
+ 'ruta',
3422
+ 'sabe',
3423
+ 'saber',
3424
+ 'sack',
3425
+ 'sacred',
3426
+ 'sad',
3427
+ 'saddle',
3428
+ 'sadism',
3429
+ 'sadly',
3430
+ 'safari',
3431
+ 'safe',
3432
+ 'safely',
3433
+ 'safer',
3434
+ 'safety',
3435
+ 'saga',
3436
+ 'sage',
3437
+ 'sahara',
3438
+ 'said',
3439
+ 'sail',
3440
+ 'sailor',
3441
+ 'saint',
3442
+ 'sake',
3443
+ 'salad',
3444
+ 'salary',
3445
+ 'sale',
3446
+ 'saline',
3447
+ 'saliva',
3448
+ 'salmon',
3449
+ 'saloon',
3450
+ 'salt',
3451
+ 'salty',
3452
+ 'salute',
3453
+ 'sam',
3454
+ 'same',
3455
+ 'sample',
3456
+ 'sand',
3457
+ 'sandy',
3458
+ 'sane',
3459
+ 'sarong',
3460
+ 'sash',
3461
+ 'satin',
3462
+ 'satire',
3463
+ 'saturn',
3464
+ 'sauce',
3465
+ 'saudi',
3466
+ 'sauna',
3467
+ 'savage',
3468
+ 'save',
3469
+ 'saxon',
3470
+ 'say',
3471
+ 'scale',
3472
+ 'scalp',
3473
+ 'scan',
3474
+ 'scant',
3475
+ 'scar',
3476
+ 'scarce',
3477
+ 'scare',
3478
+ 'scarf',
3479
+ 'scary',
3480
+ 'scene',
3481
+ 'scenic',
3482
+ 'scent',
3483
+ 'school',
3484
+ 'scope',
3485
+ 'score',
3486
+ 'scorn',
3487
+ 'scot',
3488
+ 'scotch',
3489
+ 'scout',
3490
+ 'scrap',
3491
+ 'scream',
3492
+ 'screen',
3493
+ 'script',
3494
+ 'scroll',
3495
+ 'scrub',
3496
+ 'scute',
3497
+ 'sea',
3498
+ 'seal',
3499
+ 'seam',
3500
+ 'seaman',
3501
+ 'search',
3502
+ 'season',
3503
+ 'seat',
3504
+ 'second',
3505
+ 'secret',
3506
+ 'sect',
3507
+ 'sector',
3508
+ 'secure',
3509
+ 'see',
3510
+ 'seed',
3511
+ 'seeing',
3512
+ 'seek',
3513
+ 'seem',
3514
+ 'seize',
3515
+ 'seldom',
3516
+ 'select',
3517
+ 'self',
3518
+ 'sell',
3519
+ 'seller',
3520
+ 'semi',
3521
+ 'senate',
3522
+ 'send',
3523
+ 'senile',
3524
+ 'senior',
3525
+ 'sense',
3526
+ 'sensor',
3527
+ 'sent',
3528
+ 'sentry',
3529
+ 'seoul',
3530
+ 'sequel',
3531
+ 'serene',
3532
+ 'serial',
3533
+ 'series',
3534
+ 'sermon',
3535
+ 'serum',
3536
+ 'serve',
3537
+ 'server',
3538
+ 'set',
3539
+ 'settle',
3540
+ 'seven',
3541
+ 'severe',
3542
+ 'sewage',
3543
+ 'shabby',
3544
+ 'shade',
3545
+ 'shadow',
3546
+ 'shady',
3547
+ 'shaft',
3548
+ 'shaggy',
3549
+ 'shah',
3550
+ 'shake',
3551
+ 'shaky',
3552
+ 'shall',
3553
+ 'sham',
3554
+ 'shame',
3555
+ 'shanks',
3556
+ 'shape',
3557
+ 'share',
3558
+ 'shark',
3559
+ 'sharp',
3560
+ 'shawl',
3561
+ 'she',
3562
+ 'shear',
3563
+ 'sheen',
3564
+ 'sheep',
3565
+ 'sheer',
3566
+ 'sheet',
3567
+ 'shelf',
3568
+ 'shell',
3569
+ 'sherry',
3570
+ 'shield',
3571
+ 'shift',
3572
+ 'shine',
3573
+ 'shiny',
3574
+ 'ship',
3575
+ 'shire',
3576
+ 'shirt',
3577
+ 'shiver',
3578
+ 'shock',
3579
+ 'shoe',
3580
+ 'shook',
3581
+ 'shop',
3582
+ 'shore',
3583
+ 'short',
3584
+ 'shot',
3585
+ 'should',
3586
+ 'shout',
3587
+ 'show',
3588
+ 'shower',
3589
+ 'shrank',
3590
+ 'shrewd',
3591
+ 'shrill',
3592
+ 'shrimp',
3593
+ 'shrine',
3594
+ 'shrink',
3595
+ 'shrub',
3596
+ 'shrug',
3597
+ 'shuha',
3598
+ 'shut',
3599
+ 'shy',
3600
+ 'shyly',
3601
+ 'side',
3602
+ 'sided',
3603
+ 'siege',
3604
+ 'sigh',
3605
+ 'sight',
3606
+ 'sigma',
3607
+ 'sign',
3608
+ 'signal',
3609
+ 'silent',
3610
+ 'silk',
3611
+ 'silken',
3612
+ 'silky',
3613
+ 'sill',
3614
+ 'silly',
3615
+ 'silver',
3616
+ 'simian',
3617
+ 'simple',
3618
+ 'simply',
3619
+ 'since',
3620
+ 'sinful',
3621
+ 'sing',
3622
+ 'singer',
3623
+ 'single',
3624
+ 'sink',
3625
+ 'sir',
3626
+ 'siren',
3627
+ 'sirius',
3628
+ 'sister',
3629
+ 'sit',
3630
+ 'site',
3631
+ 'six',
3632
+ 'sixth',
3633
+ 'sixty',
3634
+ 'size',
3635
+ 'sketch',
3636
+ 'skill',
3637
+ 'skin',
3638
+ 'skinny',
3639
+ 'skip',
3640
+ 'skirt',
3641
+ 'skull',
3642
+ 'sky',
3643
+ 'slab',
3644
+ 'slabby',
3645
+ 'slack',
3646
+ 'slain',
3647
+ 'slam',
3648
+ 'slang',
3649
+ 'slap',
3650
+ 'slate',
3651
+ 'slater',
3652
+ 'sleek',
3653
+ 'sleep',
3654
+ 'sleepy',
3655
+ 'sleeve',
3656
+ 'slice',
3657
+ 'slick',
3658
+ 'slid',
3659
+ 'slide',
3660
+ 'slight',
3661
+ 'slim',
3662
+ 'slimy',
3663
+ 'sling',
3664
+ 'slip',
3665
+ 'slit',
3666
+ 'slogan',
3667
+ 'slope',
3668
+ 'sloppy',
3669
+ 'slot',
3670
+ 'slow',
3671
+ 'slowly',
3672
+ 'slug',
3673
+ 'slum',
3674
+ 'slump',
3675
+ 'small',
3676
+ 'smart',
3677
+ 'smash',
3678
+ 'smear',
3679
+ 'smell',
3680
+ 'smelly',
3681
+ 'smelt',
3682
+ 'smile',
3683
+ 'smite',
3684
+ 'smoke',
3685
+ 'smoky',
3686
+ 'smooth',
3687
+ 'smug',
3688
+ 'snack',
3689
+ 'snail',
3690
+ 'snake',
3691
+ 'snap',
3692
+ 'sneak',
3693
+ 'snow',
3694
+ 'snowy',
3695
+ 'snug',
3696
+ 'soak',
3697
+ 'soap',
3698
+ 'sober',
3699
+ 'soccer',
3700
+ 'social',
3701
+ 'sock',
3702
+ 'socket',
3703
+ 'soda',
3704
+ 'sodden',
3705
+ 'sodium',
3706
+ 'sofa',
3707
+ 'soft',
3708
+ 'soften',
3709
+ 'softly',
3710
+ 'soggy',
3711
+ 'soil',
3712
+ 'solar',
3713
+ 'sold',
3714
+ 'sole',
3715
+ 'solely',
3716
+ 'solemn',
3717
+ 'solid',
3718
+ 'solo',
3719
+ 'solve',
3720
+ 'somali',
3721
+ 'some',
3722
+ 'son',
3723
+ 'sonar',
3724
+ 'sonata',
3725
+ 'song',
3726
+ 'sonic',
3727
+ 'sony',
3728
+ 'soon',
3729
+ 'sooner',
3730
+ 'soot',
3731
+ 'soothe',
3732
+ 'sordid',
3733
+ 'sore',
3734
+ 'sorrow',
3735
+ 'sorry',
3736
+ 'sort',
3737
+ 'soul',
3738
+ 'sound',
3739
+ 'soup',
3740
+ 'sour',
3741
+ 'source',
3742
+ 'space',
3743
+ 'spade',
3744
+ 'spain',
3745
+ 'span',
3746
+ 'spare',
3747
+ 'spark',
3748
+ 'sparse',
3749
+ 'spasm',
3750
+ 'spat',
3751
+ 'spate',
3752
+ 'speak',
3753
+ 'spear',
3754
+ 'speech',
3755
+ 'speed',
3756
+ 'speedy',
3757
+ 'spell',
3758
+ 'spend',
3759
+ 'sphere',
3760
+ 'spice',
3761
+ 'spicy',
3762
+ 'spider',
3763
+ 'spiky',
3764
+ 'spill',
3765
+ 'spin',
3766
+ 'spinal',
3767
+ 'spine',
3768
+ 'spinus',
3769
+ 'spiral',
3770
+ 'spirit',
3771
+ 'spite',
3772
+ 'splash',
3773
+ 'split',
3774
+ 'spoil',
3775
+ 'spoke',
3776
+ 'sponge',
3777
+ 'spoon',
3778
+ 'sport',
3779
+ 'spot',
3780
+ 'spouse',
3781
+ 'spout',
3782
+ 'spray',
3783
+ 'spread',
3784
+ 'spree',
3785
+ 'spring',
3786
+ 'sprint',
3787
+ 'spur',
3788
+ 'squad',
3789
+ 'square',
3790
+ 'squash',
3791
+ 'squat',
3792
+ 'squid',
3793
+ 'stab',
3794
+ 'stable',
3795
+ 'stack',
3796
+ 'staff',
3797
+ 'stage',
3798
+ 'stain',
3799
+ 'stair',
3800
+ 'stake',
3801
+ 'stale',
3802
+ 'stalin',
3803
+ 'stall',
3804
+ 'stamp',
3805
+ 'stance',
3806
+ 'stand',
3807
+ 'staple',
3808
+ 'star',
3809
+ 'starch',
3810
+ 'stare',
3811
+ 'stark',
3812
+ 'start',
3813
+ 'starve',
3814
+ 'state',
3815
+ 'static',
3816
+ 'statue',
3817
+ 'status',
3818
+ 'stay',
3819
+ 'stead',
3820
+ 'steady',
3821
+ 'steak',
3822
+ 'steal',
3823
+ 'steam',
3824
+ 'steel',
3825
+ 'steep',
3826
+ 'steer',
3827
+ 'stem',
3828
+ 'stench',
3829
+ 'step',
3830
+ 'steppe',
3831
+ 'stereo',
3832
+ 'stern',
3833
+ 'stew',
3834
+ 'stick',
3835
+ 'sticky',
3836
+ 'stiff',
3837
+ 'stifle',
3838
+ 'stigma',
3839
+ 'still',
3840
+ 'sting',
3841
+ 'stint',
3842
+ 'stir',
3843
+ 'stitch',
3844
+ 'stock',
3845
+ 'stocky',
3846
+ 'stone',
3847
+ 'stony',
3848
+ 'stool',
3849
+ 'stop',
3850
+ 'store',
3851
+ 'storm',
3852
+ 'stormy',
3853
+ 'story',
3854
+ 'stot',
3855
+ 'stout',
3856
+ 'stove',
3857
+ 'strain',
3858
+ 'strait',
3859
+ 'strand',
3860
+ 'strap',
3861
+ 'strata',
3862
+ 'straw',
3863
+ 'stray',
3864
+ 'streak',
3865
+ 'stream',
3866
+ 'street',
3867
+ 'stress',
3868
+ 'strict',
3869
+ 'stride',
3870
+ 'strife',
3871
+ 'strike',
3872
+ 'string',
3873
+ 'strip',
3874
+ 'strive',
3875
+ 'stroll',
3876
+ 'strong',
3877
+ 'stud',
3878
+ 'studio',
3879
+ 'study',
3880
+ 'stuff',
3881
+ 'stuffy',
3882
+ 'stunt',
3883
+ 'sturdy',
3884
+ 'style',
3885
+ 'submit',
3886
+ 'subset',
3887
+ 'subtle',
3888
+ 'subtly',
3889
+ 'suburb',
3890
+ 'such',
3891
+ 'sudan',
3892
+ 'sudden',
3893
+ 'sue',
3894
+ 'suez',
3895
+ 'suffer',
3896
+ 'sugar',
3897
+ 'suit',
3898
+ 'suite',
3899
+ 'suitor',
3900
+ 'sullen',
3901
+ 'sultan',
3902
+ 'sum',
3903
+ 'summer',
3904
+ 'summit',
3905
+ 'summon',
3906
+ 'sun',
3907
+ 'sunday',
3908
+ 'sunny',
3909
+ 'sunset',
3910
+ 'super',
3911
+ 'superb',
3912
+ 'supper',
3913
+ 'supple',
3914
+ 'supply',
3915
+ 'sure',
3916
+ 'surely',
3917
+ 'surf',
3918
+ 'surge',
3919
+ 'survey',
3920
+ 'suture',
3921
+ 'swamp',
3922
+ 'swan',
3923
+ 'swap',
3924
+ 'swarm',
3925
+ 'sway',
3926
+ 'swear',
3927
+ 'sweat',
3928
+ 'sweaty',
3929
+ 'sweden',
3930
+ 'sweep',
3931
+ 'sweet',
3932
+ 'swell',
3933
+ 'swift',
3934
+ 'swim',
3935
+ 'swine',
3936
+ 'swing',
3937
+ 'swirl',
3938
+ 'swiss',
3939
+ 'switch',
3940
+ 'sword',
3941
+ 'swore',
3942
+ 'sydney',
3943
+ 'symbol',
3944
+ 'synod',
3945
+ 'syntax',
3946
+ 'syria',
3947
+ 'syrup',
3948
+ 'system',
3949
+ 'table',
3950
+ 'tablet',
3951
+ 'tace',
3952
+ 'tacit',
3953
+ 'tackle',
3954
+ 'tact',
3955
+ 'tactic',
3956
+ 'tail',
3957
+ 'tailor',
3958
+ 'taiwan',
3959
+ 'take',
3960
+ 'tale',
3961
+ 'talent',
3962
+ 'talk',
3963
+ 'tall',
3964
+ 'tally',
3965
+ 'tame',
3966
+ 'tandem',
3967
+ 'tangle',
3968
+ 'tank',
3969
+ 'tap',
3970
+ 'tape',
3971
+ 'target',
3972
+ 'tariff',
3973
+ 'tart',
3974
+ 'tarzan',
3975
+ 'task',
3976
+ 'tasset',
3977
+ 'taste',
3978
+ 'tasty',
3979
+ 'tattoo',
3980
+ 'taurus',
3981
+ 'taut',
3982
+ 'tavern',
3983
+ 'tax',
3984
+ 'taxi',
3985
+ 'tea',
3986
+ 'teach',
3987
+ 'teak',
3988
+ 'team',
3989
+ 'tear',
3990
+ 'tease',
3991
+ 'tech',
3992
+ 'tecum',
3993
+ 'teeth',
3994
+ 'tehran',
3995
+ 'tel',
3996
+ 'tell',
3997
+ 'temper',
3998
+ 'temple',
3999
+ 'tempo',
4000
+ 'tempt',
4001
+ 'ten',
4002
+ 'tenant',
4003
+ 'tend',
4004
+ 'tender',
4005
+ 'tendon',
4006
+ 'tenet',
4007
+ 'tennis',
4008
+ 'tenor',
4009
+ 'tense',
4010
+ 'tensor',
4011
+ 'tent',
4012
+ 'tenth',
4013
+ 'tenure',
4014
+ 'tera',
4015
+ 'teresa',
4016
+ 'term',
4017
+ 'test',
4018
+ 'texas',
4019
+ 'text',
4020
+ 'than',
4021
+ 'thank',
4022
+ 'that',
4023
+ 'the',
4024
+ 'their',
4025
+ 'them',
4026
+ 'theme',
4027
+ 'then',
4028
+ 'thence',
4029
+ 'theory',
4030
+ 'there',
4031
+ 'these',
4032
+ 'thesis',
4033
+ 'they',
4034
+ 'thick',
4035
+ 'thief',
4036
+ 'thigh',
4037
+ 'thin',
4038
+ 'thing',
4039
+ 'think',
4040
+ 'third',
4041
+ 'thirst',
4042
+ 'thirty',
4043
+ 'this',
4044
+ 'thomas',
4045
+ 'thorn',
4046
+ 'those',
4047
+ 'though',
4048
+ 'thread',
4049
+ 'threat',
4050
+ 'three',
4051
+ 'thrill',
4052
+ 'thrive',
4053
+ 'throat',
4054
+ 'throne',
4055
+ 'throng',
4056
+ 'throw',
4057
+ 'thrust',
4058
+ 'thud',
4059
+ 'thug',
4060
+ 'thumb',
4061
+ 'thump',
4062
+ 'thus',
4063
+ 'thyme',
4064
+ 'tibet',
4065
+ 'tick',
4066
+ 'ticket',
4067
+ 'tidal',
4068
+ 'tide',
4069
+ 'tidy',
4070
+ 'tie',
4071
+ 'tier',
4072
+ 'tiger',
4073
+ 'tight',
4074
+ 'tile',
4075
+ 'tiling',
4076
+ 'till',
4077
+ 'tilt',
4078
+ 'timber',
4079
+ 'time',
4080
+ 'timid',
4081
+ 'tin',
4082
+ 'tiny',
4083
+ 'tip',
4084
+ 'tissue',
4085
+ 'title',
4086
+ 'toad',
4087
+ 'toast',
4088
+ 'today',
4089
+ 'token',
4090
+ 'tokyo',
4091
+ 'told',
4092
+ 'toll',
4093
+ 'tom',
4094
+ 'tomato',
4095
+ 'tomb',
4096
+ 'tonal',
4097
+ 'tone',
4098
+ 'tonic',
4099
+ 'too',
4100
+ 'took',
4101
+ 'tool',
4102
+ 'tooth',
4103
+ 'top',
4104
+ 'topaz',
4105
+ 'tophet',
4106
+ 'topic',
4107
+ 'torch',
4108
+ 'torque',
4109
+ 'torso',
4110
+ 'tort',
4111
+ 'toss',
4112
+ 'total',
4113
+ 'totem',
4114
+ 'touch',
4115
+ 'tough',
4116
+ 'tour',
4117
+ 'toward',
4118
+ 'towel',
4119
+ 'tower',
4120
+ 'town',
4121
+ 'toxic',
4122
+ 'toxin',
4123
+ 'trace',
4124
+ 'track',
4125
+ 'tract',
4126
+ 'trade',
4127
+ 'tragic',
4128
+ 'trail',
4129
+ 'train',
4130
+ 'trait',
4131
+ 'tram',
4132
+ 'trance',
4133
+ 'trap',
4134
+ 'trauma',
4135
+ 'travel',
4136
+ 'tray',
4137
+ 'tread',
4138
+ 'treat',
4139
+ 'treaty',
4140
+ 'treble',
4141
+ 'tree',
4142
+ 'trek',
4143
+ 'tremor',
4144
+ 'trench',
4145
+ 'trend',
4146
+ 'trendy',
4147
+ 'trial',
4148
+ 'tribal',
4149
+ 'tribe',
4150
+ 'trick',
4151
+ 'tricky',
4152
+ 'tried',
4153
+ 'trifle',
4154
+ 'trim',
4155
+ 'trio',
4156
+ 'trip',
4157
+ 'triple',
4158
+ 'troop',
4159
+ 'trophy',
4160
+ 'trot',
4161
+ 'trough',
4162
+ 'trout',
4163
+ 'truce',
4164
+ 'truck',
4165
+ 'true',
4166
+ 'truly',
4167
+ 'trunk',
4168
+ 'trust',
4169
+ 'truth',
4170
+ 'try',
4171
+ 'tsar',
4172
+ 'tube',
4173
+ 'tulle',
4174
+ 'tumble',
4175
+ 'tuna',
4176
+ 'tundra',
4177
+ 'tune',
4178
+ 'tung',
4179
+ 'tunic',
4180
+ 'tunis',
4181
+ 'tunnel',
4182
+ 'turban',
4183
+ 'turf',
4184
+ 'turk',
4185
+ 'turkey',
4186
+ 'turn',
4187
+ 'turtle',
4188
+ 'tutor',
4189
+ 'tweed',
4190
+ 'twelve',
4191
+ 'twenty',
4192
+ 'twice',
4193
+ 'twin',
4194
+ 'twist',
4195
+ 'two',
4196
+ 'tycoon',
4197
+ 'tying',
4198
+ 'type',
4199
+ 'tyrant',
4200
+ 'uganda',
4201
+ 'ugly',
4202
+ 'ulcer',
4203
+ 'ultra',
4204
+ 'umpire',
4205
+ 'unable',
4206
+ 'uncle',
4207
+ 'under',
4208
+ 'uneasy',
4209
+ 'unfair',
4210
+ 'unify',
4211
+ 'union',
4212
+ 'unique',
4213
+ 'unit',
4214
+ 'unite',
4215
+ 'unity',
4216
+ 'unkind',
4217
+ 'unlike',
4218
+ 'unrest',
4219
+ 'unruly',
4220
+ 'unship',
4221
+ 'until',
4222
+ 'unwary',
4223
+ 'update',
4224
+ 'upheld',
4225
+ 'uphill',
4226
+ 'uphold',
4227
+ 'upon',
4228
+ 'uproar',
4229
+ 'upset',
4230
+ 'upshot',
4231
+ 'uptake',
4232
+ 'upturn',
4233
+ 'upward',
4234
+ 'urban',
4235
+ 'urge',
4236
+ 'urgent',
4237
+ 'urging',
4238
+ 'usable',
4239
+ 'usage',
4240
+ 'use',
4241
+ 'useful',
4242
+ 'user',
4243
+ 'usual',
4244
+ 'utmost',
4245
+ 'utter',
4246
+ 'vacant',
4247
+ 'vacuum',
4248
+ 'vague',
4249
+ 'vain',
4250
+ 'valet',
4251
+ 'valid',
4252
+ 'valley',
4253
+ 'value',
4254
+ 'valve',
4255
+ 'van',
4256
+ 'vanish',
4257
+ 'vanity',
4258
+ 'vary',
4259
+ 'vase',
4260
+ 'vast',
4261
+ 'vat',
4262
+ 'vault',
4263
+ 'vector',
4264
+ 'vedic',
4265
+ 'veil',
4266
+ 'vein',
4267
+ 'velvet',
4268
+ 'vendor',
4269
+ 'veneer',
4270
+ 'venice',
4271
+ 'venom',
4272
+ 'vent',
4273
+ 'venue',
4274
+ 'venus',
4275
+ 'verb',
4276
+ 'verbal',
4277
+ 'verge',
4278
+ 'verify',
4279
+ 'verity',
4280
+ 'verse',
4281
+ 'versus',
4282
+ 'very',
4283
+ 'vessel',
4284
+ 'vest',
4285
+ 'veto',
4286
+ 'vex',
4287
+ 'via',
4288
+ 'viable',
4289
+ 'vicar',
4290
+ 'vice',
4291
+ 'victim',
4292
+ 'victor',
4293
+ 'video',
4294
+ 'vienna',
4295
+ 'view',
4296
+ 'vigil',
4297
+ 'vigor',
4298
+ 'viking',
4299
+ 'vile',
4300
+ 'villa',
4301
+ 'vine',
4302
+ 'vinyl',
4303
+ 'viola',
4304
+ 'violet',
4305
+ 'violin',
4306
+ 'viral',
4307
+ 'virgo',
4308
+ 'virtue',
4309
+ 'virus',
4310
+ 'visa',
4311
+ 'vision',
4312
+ 'visit',
4313
+ 'visual',
4314
+ 'vitae',
4315
+ 'vital',
4316
+ 'vivid',
4317
+ 'vocal',
4318
+ 'vodka',
4319
+ 'vogue',
4320
+ 'voice',
4321
+ 'void',
4322
+ 'volley',
4323
+ 'volume',
4324
+ 'vote',
4325
+ 'vowel',
4326
+ 'voyage',
4327
+ 'vulgar',
4328
+ 'wade',
4329
+ 'wage',
4330
+ 'waist',
4331
+ 'wait',
4332
+ 'waiter',
4333
+ 'wake',
4334
+ 'walk',
4335
+ 'walker',
4336
+ 'wall',
4337
+ 'wallet',
4338
+ 'walnut',
4339
+ 'wander',
4340
+ 'want',
4341
+ 'war',
4342
+ 'warden',
4343
+ 'warm',
4344
+ 'warmth',
4345
+ 'warn',
4346
+ 'warp',
4347
+ 'warsaw',
4348
+ 'wary',
4349
+ 'was',
4350
+ 'wash',
4351
+ 'wasp',
4352
+ 'waste',
4353
+ 'watch',
4354
+ 'water',
4355
+ 'watery',
4356
+ 'wave',
4357
+ 'way',
4358
+ 'weak',
4359
+ 'weaken',
4360
+ 'wealth',
4361
+ 'wear',
4362
+ 'weary',
4363
+ 'wedge',
4364
+ 'wee',
4365
+ 'weed',
4366
+ 'week',
4367
+ 'weekly',
4368
+ 'weep',
4369
+ 'weight',
4370
+ 'weird',
4371
+ 'well',
4372
+ 'were',
4373
+ 'west',
4374
+ 'wet',
4375
+ 'whale',
4376
+ 'wharf',
4377
+ 'what',
4378
+ 'wheat',
4379
+ 'wheel',
4380
+ 'wheeze',
4381
+ 'wheezy',
4382
+ 'when',
4383
+ 'whence',
4384
+ 'where',
4385
+ 'which',
4386
+ 'whiff',
4387
+ 'whig',
4388
+ 'while',
4389
+ 'whim',
4390
+ 'whip',
4391
+ 'whisky',
4392
+ 'white',
4393
+ 'who',
4394
+ 'whole',
4395
+ 'wholly',
4396
+ 'whom',
4397
+ 'whose',
4398
+ 'why',
4399
+ 'wide',
4400
+ 'widely',
4401
+ 'widen',
4402
+ 'wider',
4403
+ 'widow',
4404
+ 'width',
4405
+ 'wife',
4406
+ 'wild',
4407
+ 'wildly',
4408
+ 'wilful',
4409
+ 'will',
4410
+ 'willow',
4411
+ 'win',
4412
+ 'wind',
4413
+ 'window',
4414
+ 'windy',
4415
+ 'wine',
4416
+ 'winery',
4417
+ 'wing',
4418
+ 'wink',
4419
+ 'winner',
4420
+ 'winter',
4421
+ 'wipe',
4422
+ 'wire',
4423
+ 'wisdom',
4424
+ 'wise',
4425
+ 'wish',
4426
+ 'wit',
4427
+ 'witch',
4428
+ 'with',
4429
+ 'within',
4430
+ 'witty',
4431
+ 'wizard',
4432
+ 'woke',
4433
+ 'wolf',
4434
+ 'wolves',
4435
+ 'woman',
4436
+ 'womb',
4437
+ 'won',
4438
+ 'wonder',
4439
+ 'wood',
4440
+ 'wooden',
4441
+ 'woods',
4442
+ 'woody',
4443
+ 'wool',
4444
+ 'word',
4445
+ 'work',
4446
+ 'worker',
4447
+ 'world',
4448
+ 'worm',
4449
+ 'worry',
4450
+ 'worse',
4451
+ 'worst',
4452
+ 'worth',
4453
+ 'worthy',
4454
+ 'would',
4455
+ 'wound',
4456
+ 'wrap',
4457
+ 'wrath',
4458
+ 'wreath',
4459
+ 'wreck',
4460
+ 'wren',
4461
+ 'wright',
4462
+ 'wrist',
4463
+ 'writ',
4464
+ 'write',
4465
+ 'writer',
4466
+ 'wrong',
4467
+ 'xerox',
4468
+ 'yacht',
4469
+ 'yager',
4470
+ 'yale',
4471
+ 'yard',
4472
+ 'yarn',
4473
+ 'yeah',
4474
+ 'year',
4475
+ 'yeast',
4476
+ 'yellow',
4477
+ 'yemen',
4478
+ 'yet',
4479
+ 'yield',
4480
+ 'yogurt',
4481
+ 'yokel',
4482
+ 'yolk',
4483
+ 'york',
4484
+ 'you',
4485
+ 'young',
4486
+ 'your',
4487
+ 'youth',
4488
+ 'zaire',
4489
+ 'zeal',
4490
+ 'zebra',
4491
+ 'zenith',
4492
+ 'zero',
4493
+ 'zigzag',
4494
+ 'zinc',
4495
+ 'zing',
4496
+ 'zipper',
4497
+ 'zombie',
4498
+ 'zone',
4499
+ 'zurich',
4500
+ ];
4501
+
4502
+ /**
4503
+ * Minimal mnemonic adapters.
4504
+ * @module wallet/misc/mnemonic
4505
+ */
4506
+
4507
+
4508
+ const WORD_LOOKUP = WordList.reduce((acc, word, i) => {
4509
+ acc[word] = i;
4510
+ return acc;
4511
+ }, Object.create(null));
4512
+
4513
+ /**
4514
+ * Encode bytes to a spaced hex mnemonic string.
4515
+ * @param {Uint8Array} input
4516
+ * @returns {string}
4517
+ */
4518
+ function binToMnemonic(input) {
4519
+ if (input.length % 3 !== 0) {
4520
+ throw new Error('byte count needs to be a multiple of 3');
4521
+ }
4522
+
4523
+ const words = [];
4524
+ for (let nibble = 0; nibble < input.length * 2; nibble += 3) {
4525
+ const p = nibble >> 1;
4526
+ const b1 = input[p];
4527
+ const b2 = p + 1 < input.length ? input[p + 1] : 0;
4528
+ const idx = nibble % 2 === 0 ? (b1 << 4) + (b2 >> 4) : ((b1 & 0x0f) << 8) + b2;
4529
+
4530
+ if (idx >= WordList.length) {
4531
+ throw new Error('mnemonic index out of range');
4532
+ }
4533
+ words.push(WordList[idx]);
4534
+ }
4535
+
4536
+ return words.join(' ');
4537
+ }
4538
+
4539
+ /**
4540
+ * Decode spaced hex mnemonic to bytes.
4541
+ * @param {string} mnemonic
4542
+ * @returns {Uint8Array}
4543
+ */
4544
+ function mnemonicToBin(mnemonic) {
4545
+ const mnemonicWords = mnemonic.trim().toLowerCase().split(/\s+/);
4546
+ if (mnemonicWords.length % 2 !== 0) throw new Error('word count must be even');
4547
+
4548
+ const result = new Uint8Array((mnemonicWords.length * 15) / 10);
4549
+ let current = 0;
4550
+ let buffering = 0;
4551
+ let resultIndex = 0;
4552
+
4553
+ for (let i = 0; i < mnemonicWords.length; i += 1) {
4554
+ const w = mnemonicWords[i];
4555
+ const value = WORD_LOOKUP[w];
4556
+ if (value === undefined) throw new Error('invalid word in mnemonic');
4557
+
4558
+ buffering += 3;
4559
+ current = (current << 12) + value;
4560
+ for (; buffering > 2; ) {
4561
+ const shift = 4 * (buffering - 2);
4562
+ const mask = (1 << shift) - 1;
4563
+ const tmp = current >> shift;
4564
+ buffering -= 2;
4565
+ current &= mask;
4566
+ result[resultIndex++] = tmp;
4567
+ }
4568
+ }
4569
+
4570
+ if (buffering > 0) {
4571
+ result[resultIndex++] = current & 0xff;
4572
+ }
4573
+
4574
+ return result;
4575
+ }
4576
+
4577
+ /**
4578
+ * @module wallet/ml_dsa_87/crypto
4579
+ */
4580
+
4581
+
4582
+ /**
4583
+ * Generate a keypair.
4584
+ * @returns {{ pk: Uint8Array, sk: Uint8Array }}
4585
+ */
4586
+ function keygen(seed) {
4587
+ const pk = new Uint8Array(CryptoPublicKeyBytes);
4588
+ const sk = new Uint8Array(CryptoSecretKeyBytes);
4589
+ const seedBytes = new Uint8Array(seed.hashSHA256());
4590
+ cryptoSignKeypair(seedBytes, pk, sk);
4591
+ return { pk, sk };
4592
+ }
4593
+
4594
+ /**
4595
+ * Check if input is a valid byte array (Uint8Array or Buffer).
4596
+ * @param {unknown} input
4597
+ * @returns {boolean}
4598
+ */
4599
+ function isBytes(input) {
4600
+ return input instanceof Uint8Array;
4601
+ }
4602
+
4603
+ /**
4604
+ * Sign a message.
4605
+ * @param {Uint8Array} sk - Secret key (must be CryptoSecretKeyBytes bytes)
4606
+ * @param {Uint8Array} message - Message to sign
4607
+ * @returns {Uint8Array} signature
4608
+ * @throws {Error} If sk or message is invalid
4609
+ */
4610
+ function sign(sk, message) {
4611
+ if (!isBytes(sk)) {
4612
+ throw new Error('sk must be Uint8Array or Buffer');
4613
+ }
4614
+ if (sk.length !== CryptoSecretKeyBytes) {
4615
+ throw new Error(`sk must be ${CryptoSecretKeyBytes} bytes, got ${sk.length}`);
4616
+ }
4617
+ if (!isBytes(message)) {
4618
+ throw new Error('message must be Uint8Array or Buffer');
4619
+ }
4620
+
4621
+ const sm = cryptoSign(message, sk);
4622
+ let signature = new Uint8Array(CryptoBytes);
4623
+ signature = sm.slice(0, CryptoBytes);
4624
+ return signature;
4625
+ }
4626
+
4627
+ /**
4628
+ * Verify a signature.
4629
+ * @param {Uint8Array} signature - Signature to verify (must be CryptoBytes bytes)
4630
+ * @param {Uint8Array} message - Original message
4631
+ * @param {Uint8Array} pk - Public key (must be CryptoPublicKeyBytes bytes)
4632
+ * @returns {boolean}
4633
+ * @throws {Error} If signature, message, or pk is invalid
4634
+ */
4635
+ function verify(signature, message, pk) {
4636
+ if (!isBytes(signature)) {
4637
+ throw new Error('signature must be Uint8Array or Buffer');
4638
+ }
4639
+ if (signature.length !== CryptoBytes) {
4640
+ throw new Error(`signature must be ${CryptoBytes} bytes, got ${signature.length}`);
4641
+ }
4642
+ if (!isBytes(message)) {
4643
+ throw new Error('message must be Uint8Array or Buffer');
4644
+ }
4645
+ if (!isBytes(pk)) {
4646
+ throw new Error('pk must be Uint8Array or Buffer');
4647
+ }
4648
+ if (pk.length !== CryptoPublicKeyBytes) {
4649
+ throw new Error(`pk must be ${CryptoPublicKeyBytes} bytes, got ${pk.length}`);
4650
+ }
4651
+
4652
+ const sigBytes = new Uint8Array(signature);
4653
+ const msgBytes = new Uint8Array(message);
4654
+ const pkBytes = new Uint8Array(pk);
4655
+ return cryptoSignVerify(sigBytes, msgBytes, pkBytes);
4656
+ }
4657
+
4658
+ /**
4659
+ * ML-DSA-87 Wallet object encapsulating descriptor, seeds and keypair.
4660
+ * @module wallet/ml_dsa_87/wallet
4661
+ */
4662
+
4663
+
4664
+ class Wallet {
4665
+ /**
4666
+ * @param {{descriptor: Descriptor, seed: Seed, pk: Uint8Array, sk: Uint8Array}} opts
4667
+ */
4668
+ constructor({ descriptor, seed, pk, sk }) {
4669
+ this.descriptor = descriptor;
4670
+ this.seed = seed;
4671
+ this.pk = pk;
4672
+ this.sk = sk;
4673
+ this.extendedSeed = ExtendedSeed.newExtendedSeed(descriptor, seed);
4674
+ }
4675
+
4676
+ /**
4677
+ * Create a new random wallet(non-deterministic).
4678
+ * @param {[number, number]} [metadata=[0,0] ]
4679
+ * @returns {Wallet}
4680
+ */
4681
+ static newWallet(metadata = [0, 0]) {
4682
+ const descriptor = newMLDSA87Descriptor(metadata);
4683
+ const seedBytes = randomBytes(48);
4684
+ const seed = new Seed(seedBytes);
4685
+ const { pk, sk } = keygen(seed);
4686
+ return new Wallet({ descriptor, seed, pk, sk });
4687
+ }
4688
+
4689
+ /**
4690
+ * @param {Seed} seed
4691
+ * @param {[number, number]} [metadata=[0,0]]
4692
+ * @returns {Wallet}
4693
+ */
4694
+ static newWalletFromSeed(seed, metadata = [0, 0]) {
4695
+ const descriptor = newMLDSA87Descriptor(metadata);
4696
+ const { pk, sk } = keygen(seed);
4697
+ return new Wallet({ descriptor, seed, pk, sk });
4698
+ }
4699
+
4700
+ /**
4701
+ * @param {ExtendedSeed} extendedSeed
4702
+ * @returns {Wallet}
4703
+ */
4704
+ static newWalletFromExtendedSeed(extendedSeed) {
4705
+ const descriptor = extendedSeed.getDescriptor();
4706
+ const seed = extendedSeed.getSeed();
4707
+ const { pk, sk } = keygen(seed);
4708
+ return new Wallet({ descriptor, seed, pk, sk });
4709
+ }
4710
+
4711
+ /**
4712
+ * @param {string} mnemonic
4713
+ * @returns {Wallet}
4714
+ */
4715
+ static newWalletFromMnemonic(mnemonic) {
4716
+ const bin = mnemonicToBin(mnemonic);
4717
+ const extendedSeed = new ExtendedSeed(bin);
4718
+ return this.newWalletFromExtendedSeed(extendedSeed);
4719
+ }
4720
+
4721
+ /** @returns {Uint8Array} */
4722
+ getAddress() {
4723
+ return getAddressFromPKAndDescriptor(this.pk, this.descriptor);
4724
+ }
4725
+
4726
+ /** @returns {string} */
4727
+ getAddressStr() {
4728
+ return addressToString(this.getAddress());
4729
+ }
4730
+
4731
+ /** @returns {Descriptor} */
4732
+ getDescriptor() {
4733
+ return this.descriptor;
4734
+ }
4735
+
4736
+ /** @returns {ExtendedSeed} */
4737
+ getExtendedSeed() {
4738
+ return this.extendedSeed;
4739
+ }
4740
+
4741
+ /** @returns {Seed} */
4742
+ getSeed() {
4743
+ return this.seed;
4744
+ }
4745
+
4746
+ /** @returns {string} hex(ExtendedSeed) */
4747
+ getHexExtendedSeed() {
4748
+ return `0x${bytesToHex(this.extendedSeed.toBytes())}`;
4749
+ }
4750
+
4751
+ /** @returns {string} */
4752
+ getMnemonic() {
4753
+ return binToMnemonic(this.getExtendedSeed().toBytes());
4754
+ }
4755
+
4756
+ /** @returns {Uint8Array} */
4757
+ getPK() {
4758
+ return this.pk.slice();
4759
+ }
4760
+
4761
+ /** @returns {Uint8Array} */
4762
+ getSK() {
4763
+ return this.sk.slice();
4764
+ }
4765
+
4766
+ /**
4767
+ * Sign a message.
4768
+ * @param {Uint8Array} message
4769
+ * @returns {Uint8Array} Signature bytes.
4770
+ */
4771
+ sign(message) {
4772
+ return sign(this.sk, message);
4773
+ }
4774
+
4775
+ /**
4776
+ * Verify a signature.
4777
+ * @param {Uint8Array} signature
4778
+ * @param {Uint8Array} message
4779
+ * @param {Uint8Array} pk
4780
+ * @returns {boolean}
4781
+ */
4782
+ static verify(signature, message, pk) {
4783
+ return verify(signature, message, pk);
4784
+ }
4785
+
4786
+ /**
4787
+ * Securely zeroize sensitive key material.
4788
+ * Call this when the wallet is no longer needed to minimize
4789
+ * the window where secrets exist in memory.
4790
+ *
4791
+ * Note: JavaScript garbage collection may retain copies;
4792
+ * this provides best-effort zeroization.
4793
+ */
4794
+ zeroize() {
4795
+ if (this.sk) {
4796
+ this.sk.fill(0);
4797
+ }
4798
+ if (this.seed && this.seed.bytes) {
4799
+ this.seed.bytes.fill(0);
4800
+ }
4801
+ if (this.extendedSeed && this.extendedSeed.bytes) {
4802
+ this.extendedSeed.bytes.fill(0);
4803
+ }
4804
+ }
4805
+ }
4806
+
4807
+ /**
4808
+ * Auto-select wallet implementation based on the ExtendedSeed descriptor.
4809
+ * @module wallet/factory
4810
+ */
4811
+
4812
+
4813
+ /**
4814
+ * Construct a wallet from an ExtendedSeed by auto-selecting the correct implementation.
4815
+ *
4816
+ * @param {ExtendedSeed|Uint8Array|string} extendedSeed - ExtendedSeed instance, 51 bytes or hex string.
4817
+ * @returns {MLDSA87} Wallet instance
4818
+ * @throws {Error} If wallet type is unsupported
4819
+ */
4820
+ function newWalletFromExtendedSeed(extendedSeed) {
4821
+ let ext;
4822
+ if (extendedSeed instanceof Uint8Array || isHexLike(extendedSeed)) {
4823
+ ext = ExtendedSeed.from(extendedSeed);
4824
+ } else if (extendedSeed instanceof ExtendedSeed) {
4825
+ ext = extendedSeed;
4826
+ } else {
4827
+ throw new Error('Unsupported extendedSeed input');
4828
+ }
4829
+
4830
+ const desc = ext.getDescriptor();
4831
+ switch (desc.type()) {
4832
+ case WalletType.ML_DSA_87:
4833
+ return Wallet.newWalletFromExtendedSeed(ext);
4834
+ // case WalletType.SPHINCSPLUS_256S:
4835
+ // Not yet implemented - reserved for future use
4836
+ default:
4837
+ throw new Error(`Unsupported wallet type: ${desc.type()}`);
4838
+ }
4839
+ }
4840
+
4841
+ export { DESCRIPTOR_SIZE, Descriptor, EXTENDED_SEED_SIZE, ExtendedSeed, Wallet as MLDSA87, SEED_SIZE, Seed, WalletType, addressToString, getAddressFromPKAndDescriptor, isValidAddress, newMLDSA87Descriptor, newWalletFromExtendedSeed, stringToAddress };