@theqrl/wallet.js 0.1.2 → 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.
- package/README.md +195 -1
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/wallet.js +4856 -0
- package/dist/mjs/package.json +1 -0
- package/dist/mjs/wallet.js +4841 -0
- package/package.json +22 -8
- package/src/index.js +33 -13
- package/src/qrl/wordlist.js +11 -5
- package/src/utils/bytes.js +59 -0
- package/src/wallet/common/address.js +94 -0
- package/src/wallet/common/constants.js +16 -0
- package/src/wallet/common/descriptor.js +70 -0
- package/src/wallet/common/seed.js +123 -0
- package/src/wallet/common/wallettype.js +21 -0
- package/src/wallet/factory.js +39 -0
- package/src/wallet/misc/mnemonic.js +77 -0
- package/src/wallet/ml_dsa_87/crypto.js +90 -0
- package/src/wallet/ml_dsa_87/descriptor.js +18 -0
- package/src/wallet/ml_dsa_87/wallet.js +158 -0
- package/types/index.d.ts +13 -0
- package/types/index.d.ts.map +1 -0
- package/types/qrl/wordlist.d.ts +11 -0
- package/types/qrl/wordlist.d.ts.map +1 -0
- package/types/utils/bytes.d.ts +27 -0
- package/types/utils/bytes.d.ts.map +1 -0
- package/types/wallet/common/address.d.ts +17 -0
- package/types/wallet/common/address.d.ts.map +1 -0
- package/types/wallet/common/constants.d.ts +13 -0
- package/types/wallet/common/constants.d.ts.map +1 -0
- package/types/wallet/common/descriptor.d.ts +32 -0
- package/types/wallet/common/descriptor.d.ts.map +1 -0
- package/types/wallet/common/seed.d.ts +67 -0
- package/types/wallet/common/seed.d.ts.map +1 -0
- package/types/wallet/common/wallettype.d.ts +19 -0
- package/types/wallet/common/wallettype.d.ts.map +1 -0
- package/types/wallet/factory.d.ts +9 -0
- package/types/wallet/factory.d.ts.map +1 -0
- package/types/wallet/misc/mnemonic.d.ts +13 -0
- package/types/wallet/misc/mnemonic.d.ts.map +1 -0
- package/types/wallet/ml_dsa_87/crypto.d.ts +24 -0
- package/types/wallet/ml_dsa_87/crypto.d.ts.map +1 -0
- package/types/wallet/ml_dsa_87/descriptor.d.ts +8 -0
- package/types/wallet/ml_dsa_87/descriptor.d.ts.map +1 -0
- package/types/wallet/ml_dsa_87/wallet.d.ts +74 -0
- package/types/wallet/ml_dsa_87/wallet.d.ts.map +1 -0
- package/src/dilithium.js +0 -158
- package/src/utils/mnemonic.js +0 -93
|
@@ -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;
|