@theqrl/wallet.js 0.1.3 → 0.2.0

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