├── LICENSE ├── README.md ├── bower.json ├── package.json └── src ├── dictionary.js └── passwdqc_check.js /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Parallels, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Passwdqc-js 2 | ## About 3 | 4 | The [passwdqc](http://openwall.com/passwdqc/) is the brilliant password quality checker library made by [Openwall](http://openwall.com/). **Passwdqc-js** is a JavaScript port of [passwdqc](http://openwall.com/passwdqc/), made by [Parallels](https://www.parallels.com/). **Passwdqc-js** supports AMD and NodeJS/CommonJS module format. So it runs on both client and server. 5 | 6 | ## Demo page (Limited functionality) 7 | 8 | http://doc.apsstandard.org/7.2/apsfiddle/?file=7.2/_static/examples/password/calcStrength.html 9 | 10 | ## Compatibilty with Passwdqc 11 | 12 | Passwdqc-js was tested for compatibility with original passwdqc. We used following password databases in order to guarantee that both accept nearly the same subset of passwords: 13 | 14 | * 14M unique RockYou passwords from 2009 leak (99.99% match with passwdqc) 15 | * 10K random 10-character symbolic passwords (100% match with passwdqc) 16 | * 10K random pass phrases, generated by passwdqc/pwqgen (100% match with passwdqc) 17 | 18 | ## Usage 19 | Use `passwdqc.check(newpass, [oldpass], [login], [gecos], [params])` function to check password quality. 20 | 21 | **Parameters** 22 | 23 | * **newpass**: password to check 24 | * **oldpass**: old password to check if new password is based on it 25 | * **login**: user's login name to check that password is not based on it 26 | * **gecos**: any other personal information to check 27 | * **params**: custom parameters for passwdqc algorithm, [see](http://www.openwall.com/passwdqc/README.shtml) 28 | 29 | **Return value** 30 | 31 | * Empty string if password is considered good; 32 | * The reason why password is considered weak, otherwise. 33 | 34 | ### Examples 35 | **NodeJS** 36 | ```js 37 | var passwdqc = require('passwdqc'); 38 | 39 | var rv = passwdqc.check(password, old_password); 40 | 41 | if (!rv) { 42 | // Password is of good quality 43 | // ... 44 | } else { 45 | // The "rv" now contains reason why password considered weak 46 | } 47 | ``` 48 | 49 | **Client-Side** 50 | ```js 51 | // Declare security policy 52 | var lowParams = { min: [6, 6, 6, 6, 6], max: 40, passphrase_words: 3, match_length: 4, similar_deny: 1, random_bits: 47, flags: 3, retry: 3 }, 53 | mediumParams = { min: [8, 8, 8, 7, 6], max: 40, passphrase_words: 3, match_length: 4, similar_deny: 1, random_bits: 47, flags: 3, retry: 3 }; 54 | 55 | // Checking value 56 | function check(val){ 57 | if(val.length == 0) return 0; 58 | if(!passwdqc_check(val)) return 4; 59 | if(!passwdqc_check(val, undefined, undefined, undefined, mediumParams)) return 3; 60 | if(!passwdqc_check(val, undefined, undefined, undefined, lowParams)) return 2; 61 | return 1; 62 | } 63 | ``` 64 | [Live full example](http://jsfiddle.net/burashka/mdhs4/2/embedded/result/) 65 | 66 | ### Distribution 67 | **NPM** 68 | ```shell 69 | npm install passwdqc 70 | ``` 71 | 72 | **Bower** 73 | More info about [Bower](http://bower.io/) 74 | ```shell 75 | bower install passwdqc 76 | ``` 77 | 78 | ## TODO 79 | * More examples 80 | * Random password/passphrase generator 81 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "passwdqc", 3 | "version": "0.0.2", 4 | "description": "JavaScript port of Openwall passwdqc, a password/passphrase strength checking and policy enforcement toolset.", 5 | "main": "src/passwdqc_check.js", 6 | "moduleType": [ 7 | "amd", 8 | "node" 9 | ], 10 | "keywords": [ 11 | "javascript", 12 | "security", 13 | "password", 14 | "passwdqc" 15 | ], 16 | "authors": [ 17 | "Evgeny Uspenskiy" 18 | ], 19 | "license": "MIT", 20 | "homepage": "https://github.com/PA-Platform/passwdqc-js/", 21 | "ignore": [ 22 | "**/.*", 23 | "package.json" 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "passwdqc", 3 | "version": "1.0.2", 4 | "homepage": "https://github.com/odin-public/passwdqc-js/", 5 | "description": "JavaScript port of Openwall passwdqc, a password/passphrase strength checking and policy enforcement toolset.", 6 | 7 | "author": { 8 | "name": "Evgeny Uspenskiy", 9 | "email": "burashka-lcme@yandex.ru" 10 | }, 11 | 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/odin-public/passwdqc-js.git" 15 | }, 16 | 17 | "bugs": { 18 | "url": "https://github.com/odin-public/passwdqc-js/issues" 19 | }, 20 | 21 | "main": "./src/passwdqc_check.js", 22 | 23 | "licenses": [{ 24 | "type": "MIT", 25 | "url": "https://github.com/odin-public/passwdqc-js/blob/master/LICENSE" 26 | }] 27 | } 28 | -------------------------------------------------------------------------------- /src/dictionary.js: -------------------------------------------------------------------------------- 1 | /* 2 | * 4096 English words for generation of easy to memorize random passphrases. 3 | * This list comes from the MakePass passphrase generator developed by 4 | * Dianelos Georgoudis , which was announced on 5 | * sci.crypt on 1997/10/24. Here's a relevant excerpt from that posting: 6 | * 7 | * > The 4096 words in the word list were chosen according to the following 8 | * > criteria: 9 | * > - each word must contain between 3 and 6 characters 10 | * > - each word must be a common English word 11 | * > - each word should be clearly different from each other 12 | * > word, orthographically or semantically 13 | * > 14 | * > The MakePass word list has been placed in the public domain 15 | * 16 | * At least two other sci.crypt postings by Dianelos Georgoudis also state 17 | * that the word list is in the public domain, and so did the web page at: 18 | * 19 | * http://web.archive.org/web/%2a/http://www.tecapro.com/makepass.html 20 | * 21 | * which existed until 2006 and is available from the Wayback Machine as of 22 | * this writing (March 2010). Specifically, the web page said: 23 | * 24 | * > The MakePass word list has been placed in the public domain. To download 25 | * > a copy click here. You can use the MakePass word list for many other 26 | * > purposes. 27 | * 28 | * "To download a copy click here" was a link to free/makepass.lst, which is 29 | * currently available via the Wayback Machine: 30 | * 31 | * http://web.archive.org/web/%2a/http://www.tecapro.com/free/makepass.lst 32 | * 33 | * Even though the original description of the list stated that "each word 34 | * must contain between 3 and 6 characters", there were two 7-character words: 35 | * "England" and "Germany". For use in passwdqc, these have been replaced 36 | * with "erase" and "gag". 37 | * 38 | * The code in passwdqc_check.c and passwdqc_random.c makes the following 39 | * assumptions about this list: 40 | * 41 | * - there are exactly 4096 words; 42 | * - the words are of up to 6 characters long; 43 | * - although some words may contain capital letters, no two words differ by 44 | * the case of characters alone (e.g., converting the list to all-lowercase 45 | * would yield a list of 4096 unique words); 46 | * - the words contain alphabetical characters only; 47 | * - if an entire word on this list matches the initial substring of other 48 | * word(s) on the list, it is placed immediately before those words (e.g., 49 | * "bake", "baker", "bakery"). 50 | * 51 | * Additionally, the default minimum passphrase length of 11 characters 52 | * specified in passwdqc_parse.c has been chosen such that a passphrase 53 | * consisting of any three words from this list with two separator 54 | * characters will pass the minimum length check. In other words, this 55 | * default assumes that no word is shorter than 3 characters. 56 | */ 57 | ({define:typeof define!="undefined"?define:function(deps, factory){module.exports = factory(exports);}}). 58 | define(["exports"], function(exports){ 59 | 60 | exports.dictionary = [ 61 | "Adam", 62 | "Afghan", 63 | "Alaska", 64 | "Alice", 65 | "Allah", 66 | "Amazon", 67 | "Andrew", 68 | "Anglo", 69 | "Angola", 70 | "Antony", 71 | "April", 72 | "Arab", 73 | "Arctic", 74 | "Athens", 75 | "Austin", 76 | "Bach", 77 | "Baltic", 78 | "Basque", 79 | "Berlin", 80 | "Bible", 81 | "Bombay", 82 | "Bonn", 83 | "Boston", 84 | "Brazil", 85 | "Briton", 86 | "Buddha", 87 | "Burma", 88 | "Caesar", 89 | "Cairo", 90 | "Canada", 91 | "Carl", 92 | "Carol", 93 | "Celtic", 94 | "Chile", 95 | "China", 96 | "Christ", 97 | "Congo", 98 | "Cuba", 99 | "Cyprus", 100 | "Czech", 101 | "Dallas", 102 | "Danish", 103 | "Darwin", 104 | "David", 105 | "Delhi", 106 | "Derby", 107 | "Diana", 108 | "Dublin", 109 | "Dutch", 110 | "East", 111 | "Eden", 112 | "Edward", 113 | "Eric", 114 | "Essex", 115 | "Europe", 116 | "Eve", 117 | "Exodus", 118 | "France", 119 | "French", 120 | "Friday", 121 | "Gandhi", 122 | "Gaul", 123 | "Gemini", 124 | "Geneva", 125 | "George", 126 | "German", 127 | "Gloria", 128 | "God", 129 | "Gothic", 130 | "Greece", 131 | "Greek", 132 | "Hague", 133 | "Haiti", 134 | "Hanoi", 135 | "Harry", 136 | "Havana", 137 | "Hawaii", 138 | "Hebrew", 139 | "Henry", 140 | "Hermes", 141 | "Hindu", 142 | "Hitler", 143 | "Idaho", 144 | "Inca", 145 | "India", 146 | "Indian", 147 | "Iowa", 148 | "Iran", 149 | "Iraq", 150 | "Irish", 151 | "Isaac", 152 | "Isabel", 153 | "Islam", 154 | "Israel", 155 | "Italy", 156 | "Ivan", 157 | "Jack", 158 | "Jacob", 159 | "James", 160 | "Japan", 161 | "Java", 162 | "Jersey", 163 | "Jesus", 164 | "Jewish", 165 | "Jim", 166 | "John", 167 | "Jordan", 168 | "Joseph", 169 | "Judas", 170 | "Judy", 171 | "July", 172 | "June", 173 | "Kansas", 174 | "Karl", 175 | "Kenya", 176 | "Koran", 177 | "Korea", 178 | "Kuwait", 179 | "Laos", 180 | "Latin", 181 | "Leo", 182 | "Libya", 183 | "Lima", 184 | "Lisbon", 185 | "Liz", 186 | "London", 187 | "Louvre", 188 | "Lucy", 189 | "Luther", 190 | "Madame", 191 | "Madrid", 192 | "Malta", 193 | "Maria", 194 | "Mars", 195 | "Mary", 196 | "Maya", 197 | "Mecca", 198 | "Mexico", 199 | "Miami", 200 | "Mickey", 201 | "Milan", 202 | "Monaco", 203 | "Monday", 204 | "Moscow", 205 | "Moses", 206 | "Moslem", 207 | "Mrs", 208 | "Munich", 209 | "Muslim", 210 | "Naples", 211 | "Nazi", 212 | "Nepal", 213 | "Newark", 214 | "Nile", 215 | "Nobel", 216 | "North", 217 | "Norway", 218 | "Ohio", 219 | "Oscar", 220 | "Oslo", 221 | "Oxford", 222 | "Panama", 223 | "Paris", 224 | "Pascal", 225 | "Paul", 226 | "Peking", 227 | "Peru", 228 | "Peter", 229 | "Philip", 230 | "Poland", 231 | "Polish", 232 | "Prague", 233 | "Quebec", 234 | "Rex", 235 | "Rhine", 236 | "Ritz", 237 | "Robert", 238 | "Roman", 239 | "Rome", 240 | "Rosa", 241 | "Russia", 242 | "Sahara", 243 | "Sam", 244 | "Saturn", 245 | "Saudi", 246 | "Saxon", 247 | "Scot", 248 | "Seoul", 249 | "Somali", 250 | "Sony", 251 | "Soviet", 252 | "Spain", 253 | "Stalin", 254 | "Sudan", 255 | "Suez", 256 | "Sunday", 257 | "Sweden", 258 | "Swiss", 259 | "Sydney", 260 | "Syria", 261 | "Taiwan", 262 | "Tarzan", 263 | "Taurus", 264 | "Tehran", 265 | "Teresa", 266 | "Texas", 267 | "Thomas", 268 | "Tibet", 269 | "Tokyo", 270 | "Tom", 271 | "Turk", 272 | "Turkey", 273 | "Uganda", 274 | "Venice", 275 | "Venus", 276 | "Vienna", 277 | "Viking", 278 | "Virgo", 279 | "Warsaw", 280 | "West", 281 | "Yale", 282 | "Yemen", 283 | "York", 284 | "Zaire", 285 | "Zurich", 286 | "aback", 287 | "abbey", 288 | "abbot", 289 | "abide", 290 | "ablaze", 291 | "able", 292 | "aboard", 293 | "abode", 294 | "abort", 295 | "abound", 296 | "about", 297 | "above", 298 | "abroad", 299 | "abrupt", 300 | "absent", 301 | "absorb", 302 | "absurd", 303 | "abuse", 304 | "accent", 305 | "accept", 306 | "access", 307 | "accord", 308 | "accuse", 309 | "ace", 310 | "ache", 311 | "aching", 312 | "acid", 313 | "acidic", 314 | "acorn", 315 | "acre", 316 | "across", 317 | "act", 318 | "action", 319 | "active", 320 | "actor", 321 | "actual", 322 | "acute", 323 | "adapt", 324 | "add", 325 | "added", 326 | "addict", 327 | "adept", 328 | "adhere", 329 | "adjust", 330 | "admire", 331 | "admit", 332 | "adobe", 333 | "adopt", 334 | "adrift", 335 | "adult", 336 | "adverb", 337 | "advert", 338 | "aerial", 339 | "afar", 340 | "affair", 341 | "affect", 342 | "afford", 343 | "afield", 344 | "afloat", 345 | "afraid", 346 | "afresh", 347 | "after", 348 | "again", 349 | "age", 350 | "agency", 351 | "agenda", 352 | "agent", 353 | "aghast", 354 | "agile", 355 | "ago", 356 | "agony", 357 | "agree", 358 | "agreed", 359 | "ahead", 360 | "aid", 361 | "aide", 362 | "aim", 363 | "air", 364 | "airman", 365 | "airy", 366 | "akin", 367 | "alarm", 368 | "albeit", 369 | "album", 370 | "alert", 371 | "alibi", 372 | "alien", 373 | "alight", 374 | "align", 375 | "alike", 376 | "alive", 377 | "alkali", 378 | "all", 379 | "alley", 380 | "allied", 381 | "allow", 382 | "alloy", 383 | "ally", 384 | "almond", 385 | "almost", 386 | "aloft", 387 | "alone", 388 | "along", 389 | "aloof", 390 | "aloud", 391 | "alpha", 392 | "alpine", 393 | "also", 394 | "altar", 395 | "alter", 396 | "always", 397 | "amaze", 398 | "amber", 399 | "ambush", 400 | "amen", 401 | "amend", 402 | "amid", 403 | "amidst", 404 | "amiss", 405 | "among", 406 | "amount", 407 | "ample", 408 | "amuse", 409 | "anchor", 410 | "and", 411 | "anew", 412 | "angel", 413 | "anger", 414 | "angle", 415 | "angry", 416 | "animal", 417 | "ankle", 418 | "annoy", 419 | "annual", 420 | "answer", 421 | "anthem", 422 | "anti", 423 | "any", 424 | "anyhow", 425 | "anyway", 426 | "apart", 427 | "apathy", 428 | "apex", 429 | "apiece", 430 | "appeal", 431 | "appear", 432 | "apple", 433 | "apply", 434 | "apron", 435 | "arcade", 436 | "arcane", 437 | "arch", 438 | "ardent", 439 | "are", 440 | "area", 441 | "argue", 442 | "arid", 443 | "arise", 444 | "arm", 445 | "armful", 446 | "armpit", 447 | "army", 448 | "aroma", 449 | "around", 450 | "arouse", 451 | "array", 452 | "arrest", 453 | "arrive", 454 | "arrow", 455 | "arson", 456 | "art", 457 | "artery", 458 | "artful", 459 | "artist", 460 | "ascent", 461 | "ashen", 462 | "ashore", 463 | "aside", 464 | "ask", 465 | "asleep", 466 | "aspect", 467 | "assay", 468 | "assent", 469 | "assert", 470 | "assess", 471 | "asset", 472 | "assign", 473 | "assist", 474 | "assume", 475 | "assure", 476 | "asthma", 477 | "astute", 478 | "asylum", 479 | "ate", 480 | "atlas", 481 | "atom", 482 | "atomic", 483 | "attach", 484 | "attack", 485 | "attain", 486 | "attend", 487 | "attic", 488 | "auburn", 489 | "audio", 490 | "audit", 491 | "august", 492 | "aunt", 493 | "auntie", 494 | "aura", 495 | "author", 496 | "auto", 497 | "autumn", 498 | "avail", 499 | "avenge", 500 | "avenue", 501 | "avert", 502 | "avid", 503 | "avoid", 504 | "await", 505 | "awake", 506 | "awaken", 507 | "award", 508 | "aware", 509 | "awash", 510 | "away", 511 | "awful", 512 | "awhile", 513 | "axes", 514 | "axiom", 515 | "axis", 516 | "axle", 517 | "aye", 518 | "babe", 519 | "baby", 520 | "back", 521 | "backup", 522 | "bacon", 523 | "bad", 524 | "badge", 525 | "badly", 526 | "bag", 527 | "baggy", 528 | "bail", 529 | "bait", 530 | "bake", 531 | "baker", 532 | "bakery", 533 | "bald", 534 | "ball", 535 | "ballad", 536 | "ballet", 537 | "ballot", 538 | "bamboo", 539 | "ban", 540 | "banal", 541 | "banana", 542 | "band", 543 | "bang", 544 | "bank", 545 | "bar", 546 | "barber", 547 | "bare", 548 | "barely", 549 | "barge", 550 | "bark", 551 | "barley", 552 | "barn", 553 | "baron", 554 | "barrel", 555 | "barren", 556 | "basalt", 557 | "base", 558 | "basic", 559 | "basil", 560 | "basin", 561 | "basis", 562 | "basket", 563 | "bass", 564 | "bat", 565 | "batch", 566 | "bath", 567 | "baton", 568 | "battle", 569 | "bay", 570 | "beach", 571 | "beacon", 572 | "beak", 573 | "beam", 574 | "bean", 575 | "bear", 576 | "beard", 577 | "beast", 578 | "beat", 579 | "beauty", 580 | "become", 581 | "bed", 582 | "beech", 583 | "beef", 584 | "beefy", 585 | "beep", 586 | "beer", 587 | "beet", 588 | "beetle", 589 | "before", 590 | "beggar", 591 | "begin", 592 | "behalf", 593 | "behave", 594 | "behind", 595 | "beige", 596 | "being", 597 | "belief", 598 | "bell", 599 | "belly", 600 | "belong", 601 | "below", 602 | "belt", 603 | "bench", 604 | "bend", 605 | "benign", 606 | "bent", 607 | "berry", 608 | "berth", 609 | "beset", 610 | "beside", 611 | "best", 612 | "bestow", 613 | "bet", 614 | "beta", 615 | "betray", 616 | "better", 617 | "beware", 618 | "beyond", 619 | "bias", 620 | "biceps", 621 | "bicker", 622 | "bid", 623 | "big", 624 | "bigger", 625 | "bike", 626 | "bile", 627 | "bill", 628 | "binary", 629 | "bind", 630 | "biopsy", 631 | "birch", 632 | "bird", 633 | "birdie", 634 | "birth", 635 | "bishop", 636 | "bit", 637 | "bitch", 638 | "bite", 639 | "bitter", 640 | "black", 641 | "blade", 642 | "blame", 643 | "bland", 644 | "blast", 645 | "blaze", 646 | "bleak", 647 | "blend", 648 | "bless", 649 | "blew", 650 | "blind", 651 | "blink", 652 | "blip", 653 | "bliss", 654 | "blitz", 655 | "block", 656 | "blond", 657 | "blood", 658 | "bloody", 659 | "bloom", 660 | "blot", 661 | "blouse", 662 | "blow", 663 | "blue", 664 | "bluff", 665 | "blunt", 666 | "blur", 667 | "blush", 668 | "boar", 669 | "board", 670 | "boast", 671 | "boat", 672 | "bodily", 673 | "body", 674 | "bogus", 675 | "boil", 676 | "bold", 677 | "bolt", 678 | "bomb", 679 | "bond", 680 | "bone", 681 | "bonnet", 682 | "bonus", 683 | "bony", 684 | "book", 685 | "boom", 686 | "boost", 687 | "boot", 688 | "booth", 689 | "booze", 690 | "border", 691 | "bore", 692 | "borrow", 693 | "bosom", 694 | "boss", 695 | "both", 696 | "bother", 697 | "bottle", 698 | "bottom", 699 | "bought", 700 | "bounce", 701 | "bound", 702 | "bounty", 703 | "bout", 704 | "bovine", 705 | "bow", 706 | "bowel", 707 | "bowl", 708 | "box", 709 | "boy", 710 | "boyish", 711 | "brace", 712 | "brain", 713 | "brainy", 714 | "brake", 715 | "bran", 716 | "branch", 717 | "brand", 718 | "brandy", 719 | "brass", 720 | "brave", 721 | "bravo", 722 | "breach", 723 | "bread", 724 | "break", 725 | "breast", 726 | "breath", 727 | "bred", 728 | "breed", 729 | "breeze", 730 | "brew", 731 | "brick", 732 | "bride", 733 | "bridge", 734 | "brief", 735 | "bright", 736 | "brim", 737 | "brine", 738 | "bring", 739 | "brink", 740 | "brisk", 741 | "broad", 742 | "broke", 743 | "broken", 744 | "bronze", 745 | "brook", 746 | "broom", 747 | "brown", 748 | "bruise", 749 | "brush", 750 | "brutal", 751 | "brute", 752 | "bubble", 753 | "buck", 754 | "bucket", 755 | "buckle", 756 | "budget", 757 | "buffet", 758 | "buggy", 759 | "build", 760 | "bulb", 761 | "bulge", 762 | "bulk", 763 | "bulky", 764 | "bull", 765 | "bullet", 766 | "bully", 767 | "bump", 768 | "bumpy", 769 | "bunch", 770 | "bundle", 771 | "bunk", 772 | "bunny", 773 | "burden", 774 | "bureau", 775 | "burial", 776 | "buried", 777 | "burly", 778 | "burn", 779 | "burnt", 780 | "burrow", 781 | "burst", 782 | "bury", 783 | "bus", 784 | "bush", 785 | "bust", 786 | "bustle", 787 | "busy", 788 | "but", 789 | "butler", 790 | "butt", 791 | "butter", 792 | "button", 793 | "buy", 794 | "buyer", 795 | "buzz", 796 | "bye", 797 | "byte", 798 | "cab", 799 | "cabin", 800 | "cable", 801 | "cache", 802 | "cactus", 803 | "cage", 804 | "cake", 805 | "calf", 806 | "call", 807 | "caller", 808 | "calm", 809 | "calmly", 810 | "came", 811 | "camel", 812 | "camera", 813 | "camp", 814 | "campus", 815 | "can", 816 | "canal", 817 | "canary", 818 | "cancel", 819 | "cancer", 820 | "candid", 821 | "candle", 822 | "candy", 823 | "cane", 824 | "canine", 825 | "canoe", 826 | "canopy", 827 | "canvas", 828 | "canyon", 829 | "cap", 830 | "cape", 831 | "car", 832 | "carbon", 833 | "card", 834 | "care", 835 | "career", 836 | "caress", 837 | "cargo", 838 | "carnal", 839 | "carp", 840 | "carpet", 841 | "carrot", 842 | "carry", 843 | "cart", 844 | "cartel", 845 | "case", 846 | "cash", 847 | "cask", 848 | "cast", 849 | "castle", 850 | "casual", 851 | "cat", 852 | "catch", 853 | "cater", 854 | "cattle", 855 | "caught", 856 | "causal", 857 | "cause", 858 | "cave", 859 | "cease", 860 | "celery", 861 | "cell", 862 | "cellar", 863 | "cement", 864 | "censor", 865 | "census", 866 | "cereal", 867 | "cervix", 868 | "chain", 869 | "chair", 870 | "chalk", 871 | "chalky", 872 | "champ", 873 | "chance", 874 | "change", 875 | "chant", 876 | "chaos", 877 | "chap", 878 | "chapel", 879 | "charge", 880 | "charm", 881 | "chart", 882 | "chase", 883 | "chat", 884 | "cheap", 885 | "cheat", 886 | "check", 887 | "cheek", 888 | "cheeky", 889 | "cheer", 890 | "cheery", 891 | "cheese", 892 | "chef", 893 | "cherry", 894 | "chess", 895 | "chest", 896 | "chew", 897 | "chic", 898 | "chick", 899 | "chief", 900 | "child", 901 | "chill", 902 | "chilly", 903 | "chin", 904 | "chip", 905 | "choice", 906 | "choir", 907 | "choose", 908 | "chop", 909 | "choppy", 910 | "chord", 911 | "chorus", 912 | "chose", 913 | "chosen", 914 | "chrome", 915 | "chunk", 916 | "chunky", 917 | "church", 918 | "cider", 919 | "cigar", 920 | "cinema", 921 | "circa", 922 | "circle", 923 | "circus", 924 | "cite", 925 | "city", 926 | "civic", 927 | "civil", 928 | "clad", 929 | "claim", 930 | "clammy", 931 | "clan", 932 | "clap", 933 | "clash", 934 | "clasp", 935 | "class", 936 | "clause", 937 | "claw", 938 | "clay", 939 | "clean", 940 | "clear", 941 | "clergy", 942 | "clerk", 943 | "clever", 944 | "click", 945 | "client", 946 | "cliff", 947 | "climax", 948 | "climb", 949 | "clinch", 950 | "cling", 951 | "clinic", 952 | "clip", 953 | "cloak", 954 | "clock", 955 | "clone", 956 | "close", 957 | "closer", 958 | "closet", 959 | "cloth", 960 | "cloud", 961 | "cloudy", 962 | "clout", 963 | "clown", 964 | "club", 965 | "clue", 966 | "clumsy", 967 | "clung", 968 | "clutch", 969 | "coach", 970 | "coal", 971 | "coarse", 972 | "coast", 973 | "coat", 974 | "coax", 975 | "cobalt", 976 | "cobra", 977 | "coca", 978 | "cock", 979 | "cocoa", 980 | "code", 981 | "coffee", 982 | "coffin", 983 | "cohort", 984 | "coil", 985 | "coin", 986 | "coke", 987 | "cold", 988 | "collar", 989 | "colon", 990 | "colony", 991 | "colt", 992 | "column", 993 | "comb", 994 | "combat", 995 | "come", 996 | "comedy", 997 | "comic", 998 | "commit", 999 | "common", 1000 | "compel", 1001 | "comply", 1002 | "concur", 1003 | "cone", 1004 | "confer", 1005 | "consul", 1006 | "convex", 1007 | "convey", 1008 | "convoy", 1009 | "cook", 1010 | "cool", 1011 | "cope", 1012 | "copper", 1013 | "copy", 1014 | "coral", 1015 | "cord", 1016 | "core", 1017 | "cork", 1018 | "corn", 1019 | "corner", 1020 | "corps", 1021 | "corpse", 1022 | "corpus", 1023 | "cortex", 1024 | "cosmic", 1025 | "cosmos", 1026 | "cost", 1027 | "costly", 1028 | "cosy", 1029 | "cotton", 1030 | "couch", 1031 | "cough", 1032 | "could", 1033 | "count", 1034 | "county", 1035 | "coup", 1036 | "couple", 1037 | "coupon", 1038 | "course", 1039 | "court", 1040 | "cousin", 1041 | "cove", 1042 | "cover", 1043 | "covert", 1044 | "cow", 1045 | "coward", 1046 | "cowboy", 1047 | "crab", 1048 | "crack", 1049 | "cradle", 1050 | "craft", 1051 | "crafty", 1052 | "crag", 1053 | "crane", 1054 | "crap", 1055 | "crash", 1056 | "crate", 1057 | "crater", 1058 | "crawl", 1059 | "crazy", 1060 | "creak", 1061 | "cream", 1062 | "creamy", 1063 | "create", 1064 | "credit", 1065 | "creed", 1066 | "creek", 1067 | "creep", 1068 | "creepy", 1069 | "crept", 1070 | "crest", 1071 | "crew", 1072 | "cried", 1073 | "crime", 1074 | "crisis", 1075 | "crisp", 1076 | "critic", 1077 | "croft", 1078 | "crook", 1079 | "crop", 1080 | "cross", 1081 | "crow", 1082 | "crowd", 1083 | "crown", 1084 | "crude", 1085 | "cruel", 1086 | "cruise", 1087 | "crunch", 1088 | "crush", 1089 | "crust", 1090 | "crux", 1091 | "cry", 1092 | "crypt", 1093 | "cube", 1094 | "cubic", 1095 | "cuckoo", 1096 | "cuff", 1097 | "cult", 1098 | "cup", 1099 | "curb", 1100 | "cure", 1101 | "curfew", 1102 | "curl", 1103 | "curry", 1104 | "curse", 1105 | "cursor", 1106 | "curve", 1107 | "custom", 1108 | "cut", 1109 | "cute", 1110 | "cycle", 1111 | "cyclic", 1112 | "cynic", 1113 | "dad", 1114 | "daddy", 1115 | "dagger", 1116 | "daily", 1117 | "dairy", 1118 | "daisy", 1119 | "dale", 1120 | "damage", 1121 | "damn", 1122 | "damp", 1123 | "dampen", 1124 | "dance", 1125 | "danger", 1126 | "dare", 1127 | "dark", 1128 | "darken", 1129 | "dash", 1130 | "data", 1131 | "date", 1132 | "dawn", 1133 | "day", 1134 | "dead", 1135 | "deadly", 1136 | "deaf", 1137 | "deal", 1138 | "dealer", 1139 | "dean", 1140 | "dear", 1141 | "death", 1142 | "debate", 1143 | "debit", 1144 | "debris", 1145 | "debt", 1146 | "debtor", 1147 | "decade", 1148 | "decay", 1149 | "decent", 1150 | "decide", 1151 | "deck", 1152 | "decor", 1153 | "decree", 1154 | "deduce", 1155 | "deed", 1156 | "deep", 1157 | "deeply", 1158 | "deer", 1159 | "defeat", 1160 | "defect", 1161 | "defend", 1162 | "defer", 1163 | "define", 1164 | "defy", 1165 | "degree", 1166 | "deity", 1167 | "delay", 1168 | "delete", 1169 | "delta", 1170 | "demand", 1171 | "demise", 1172 | "demo", 1173 | "demon", 1174 | "demure", 1175 | "denial", 1176 | "denote", 1177 | "dense", 1178 | "dental", 1179 | "deny", 1180 | "depart", 1181 | "depend", 1182 | "depict", 1183 | "deploy", 1184 | "depot", 1185 | "depth", 1186 | "deputy", 1187 | "derive", 1188 | "desert", 1189 | "design", 1190 | "desire", 1191 | "desist", 1192 | "desk", 1193 | "detail", 1194 | "detect", 1195 | "deter", 1196 | "detest", 1197 | "detour", 1198 | "device", 1199 | "devil", 1200 | "devise", 1201 | "devoid", 1202 | "devote", 1203 | "devour", 1204 | "dial", 1205 | "diary", 1206 | "dice", 1207 | "dictum", 1208 | "did", 1209 | "die", 1210 | "diesel", 1211 | "diet", 1212 | "differ", 1213 | "digest", 1214 | "digit", 1215 | "dine", 1216 | "dinghy", 1217 | "dinner", 1218 | "diode", 1219 | "dire", 1220 | "direct", 1221 | "dirt", 1222 | "dirty", 1223 | "disc", 1224 | "disco", 1225 | "dish", 1226 | "disk", 1227 | "dismal", 1228 | "dispel", 1229 | "ditch", 1230 | "dive", 1231 | "divert", 1232 | "divide", 1233 | "divine", 1234 | "dizzy", 1235 | "docile", 1236 | "dock", 1237 | "doctor", 1238 | "dog", 1239 | "dogma", 1240 | "dole", 1241 | "doll", 1242 | "dollar", 1243 | "dolly", 1244 | "domain", 1245 | "dome", 1246 | "domino", 1247 | "donate", 1248 | "done", 1249 | "donkey", 1250 | "donor", 1251 | "doom", 1252 | "door", 1253 | "dorsal", 1254 | "dose", 1255 | "double", 1256 | "doubt", 1257 | "dough", 1258 | "dour", 1259 | "dove", 1260 | "down", 1261 | "dozen", 1262 | "draft", 1263 | "drag", 1264 | "dragon", 1265 | "drain", 1266 | "drama", 1267 | "drank", 1268 | "draw", 1269 | "drawer", 1270 | "dread", 1271 | "dream", 1272 | "dreary", 1273 | "dress", 1274 | "drew", 1275 | "dried", 1276 | "drift", 1277 | "drill", 1278 | "drink", 1279 | "drip", 1280 | "drive", 1281 | "driver", 1282 | "drop", 1283 | "drove", 1284 | "drown", 1285 | "drug", 1286 | "drum", 1287 | "drunk", 1288 | "dry", 1289 | "dual", 1290 | "duck", 1291 | "duct", 1292 | "due", 1293 | "duel", 1294 | "duet", 1295 | "duke", 1296 | "dull", 1297 | "duly", 1298 | "dumb", 1299 | "dummy", 1300 | "dump", 1301 | "dune", 1302 | "dung", 1303 | "duress", 1304 | "during", 1305 | "dusk", 1306 | "dust", 1307 | "dusty", 1308 | "duty", 1309 | "dwarf", 1310 | "dwell", 1311 | "dyer", 1312 | "dying", 1313 | "dynamo", 1314 | "each", 1315 | "eager", 1316 | "eagle", 1317 | "ear", 1318 | "earl", 1319 | "early", 1320 | "earn", 1321 | "earth", 1322 | "ease", 1323 | "easel", 1324 | "easily", 1325 | "easter", 1326 | "easy", 1327 | "eat", 1328 | "eaten", 1329 | "eater", 1330 | "echo", 1331 | "eddy", 1332 | "edge", 1333 | "edible", 1334 | "edict", 1335 | "edit", 1336 | "editor", 1337 | "eerie", 1338 | "eerily", 1339 | "effect", 1340 | "effort", 1341 | "egg", 1342 | "ego", 1343 | "eight", 1344 | "eighth", 1345 | "eighty", 1346 | "either", 1347 | "elbow", 1348 | "elder", 1349 | "eldest", 1350 | "elect", 1351 | "eleven", 1352 | "elicit", 1353 | "elite", 1354 | "else", 1355 | "elude", 1356 | "elves", 1357 | "embark", 1358 | "emblem", 1359 | "embryo", 1360 | "emerge", 1361 | "emit", 1362 | "empire", 1363 | "employ", 1364 | "empty", 1365 | "enable", 1366 | "enamel", 1367 | "end", 1368 | "endure", 1369 | "enemy", 1370 | "energy", 1371 | "engage", 1372 | "engine", 1373 | "enjoy", 1374 | "enlist", 1375 | "enough", 1376 | "ensure", 1377 | "entail", 1378 | "enter", 1379 | "entire", 1380 | "entry", 1381 | "envoy", 1382 | "envy", 1383 | "enzyme", 1384 | "epic", 1385 | "epoch", 1386 | "equal", 1387 | "equate", 1388 | "equip", 1389 | "equity", 1390 | "era", 1391 | "erase", 1392 | "erect", 1393 | "erode", 1394 | "erotic", 1395 | "errant", 1396 | "error", 1397 | "escape", 1398 | "escort", 1399 | "essay", 1400 | "estate", 1401 | "esteem", 1402 | "ethic", 1403 | "ethnic", 1404 | "evade", 1405 | "even", 1406 | "event", 1407 | "ever", 1408 | "every", 1409 | "evict", 1410 | "evil", 1411 | "evoke", 1412 | "evolve", 1413 | "exact", 1414 | "exam", 1415 | "exceed", 1416 | "excel", 1417 | "except", 1418 | "excess", 1419 | "excise", 1420 | "excite", 1421 | "excuse", 1422 | "exempt", 1423 | "exert", 1424 | "exile", 1425 | "exist", 1426 | "exit", 1427 | "exotic", 1428 | "expand", 1429 | "expect", 1430 | "expert", 1431 | "expire", 1432 | "export", 1433 | "expose", 1434 | "extend", 1435 | "extra", 1436 | "eye", 1437 | "eyed", 1438 | "fabric", 1439 | "face", 1440 | "facial", 1441 | "fact", 1442 | "factor", 1443 | "fade", 1444 | "fail", 1445 | "faint", 1446 | "fair", 1447 | "fairly", 1448 | "fairy", 1449 | "faith", 1450 | "fake", 1451 | "falcon", 1452 | "fall", 1453 | "false", 1454 | "falter", 1455 | "fame", 1456 | "family", 1457 | "famine", 1458 | "famous", 1459 | "fan", 1460 | "fancy", 1461 | "far", 1462 | "farce", 1463 | "fare", 1464 | "farm", 1465 | "farmer", 1466 | "fast", 1467 | "fasten", 1468 | "faster", 1469 | "fat", 1470 | "fatal", 1471 | "fate", 1472 | "father", 1473 | "fatty", 1474 | "fault", 1475 | "faulty", 1476 | "fauna", 1477 | "fear", 1478 | "feast", 1479 | "feat", 1480 | "fed", 1481 | "fee", 1482 | "feeble", 1483 | "feed", 1484 | "feel", 1485 | "feet", 1486 | "fell", 1487 | "fellow", 1488 | "felt", 1489 | "female", 1490 | "fence", 1491 | "fend", 1492 | "ferry", 1493 | "fetal", 1494 | "fetch", 1495 | "feudal", 1496 | "fever", 1497 | "few", 1498 | "fewer", 1499 | "fiance", 1500 | "fiasco", 1501 | "fiddle", 1502 | "field", 1503 | "fiend", 1504 | "fierce", 1505 | "fiery", 1506 | "fifth", 1507 | "fifty", 1508 | "fig", 1509 | "fight", 1510 | "figure", 1511 | "file", 1512 | "fill", 1513 | "filled", 1514 | "filler", 1515 | "film", 1516 | "filter", 1517 | "filth", 1518 | "filthy", 1519 | "final", 1520 | "finale", 1521 | "find", 1522 | "fine", 1523 | "finger", 1524 | "finish", 1525 | "finite", 1526 | "fire", 1527 | "firm", 1528 | "firmly", 1529 | "first", 1530 | "fiscal", 1531 | "fish", 1532 | "fisher", 1533 | "fist", 1534 | "fit", 1535 | "fitful", 1536 | "five", 1537 | "fix", 1538 | "flag", 1539 | "flair", 1540 | "flak", 1541 | "flame", 1542 | "flank", 1543 | "flap", 1544 | "flare", 1545 | "flash", 1546 | "flask", 1547 | "flat", 1548 | "flaw", 1549 | "fled", 1550 | "flee", 1551 | "fleece", 1552 | "fleet", 1553 | "flesh", 1554 | "fleshy", 1555 | "flew", 1556 | "flick", 1557 | "flight", 1558 | "flimsy", 1559 | "flint", 1560 | "flirt", 1561 | "float", 1562 | "flock", 1563 | "flood", 1564 | "floor", 1565 | "floppy", 1566 | "flora", 1567 | "floral", 1568 | "flour", 1569 | "flow", 1570 | "flower", 1571 | "fluent", 1572 | "fluffy", 1573 | "fluid", 1574 | "flung", 1575 | "flurry", 1576 | "flush", 1577 | "flute", 1578 | "flux", 1579 | "fly", 1580 | "flyer", 1581 | "foal", 1582 | "foam", 1583 | "focal", 1584 | "focus", 1585 | "fog", 1586 | "foil", 1587 | "fold", 1588 | "folk", 1589 | "follow", 1590 | "folly", 1591 | "fond", 1592 | "fondly", 1593 | "font", 1594 | "food", 1595 | "fool", 1596 | "foot", 1597 | "for", 1598 | "forbid", 1599 | "force", 1600 | "ford", 1601 | "forest", 1602 | "forge", 1603 | "forget", 1604 | "fork", 1605 | "form", 1606 | "formal", 1607 | "format", 1608 | "former", 1609 | "fort", 1610 | "forth", 1611 | "forty", 1612 | "forum", 1613 | "fossil", 1614 | "foster", 1615 | "foul", 1616 | "found", 1617 | "four", 1618 | "fourth", 1619 | "fox", 1620 | "foyer", 1621 | "frail", 1622 | "frame", 1623 | "franc", 1624 | "frank", 1625 | "fraud", 1626 | "free", 1627 | "freed", 1628 | "freely", 1629 | "freer", 1630 | "freeze", 1631 | "frenzy", 1632 | "fresh", 1633 | "friar", 1634 | "fridge", 1635 | "fried", 1636 | "friend", 1637 | "fright", 1638 | "fringe", 1639 | "frock", 1640 | "frog", 1641 | "from", 1642 | "front", 1643 | "frost", 1644 | "frosty", 1645 | "frown", 1646 | "frozen", 1647 | "frugal", 1648 | "fruit", 1649 | "fudge", 1650 | "fuel", 1651 | "fulfil", 1652 | "full", 1653 | "fully", 1654 | "fun", 1655 | "fund", 1656 | "funny", 1657 | "fur", 1658 | "furry", 1659 | "fury", 1660 | "fuse", 1661 | "fusion", 1662 | "fuss", 1663 | "fussy", 1664 | "futile", 1665 | "future", 1666 | "fuzzy", 1667 | "gadget", 1668 | "gag", 1669 | "gain", 1670 | "gala", 1671 | "galaxy", 1672 | "gale", 1673 | "gall", 1674 | "galley", 1675 | "gallon", 1676 | "gallop", 1677 | "gamble", 1678 | "game", 1679 | "gamma", 1680 | "gang", 1681 | "gap", 1682 | "garage", 1683 | "garden", 1684 | "garlic", 1685 | "gas", 1686 | "gasp", 1687 | "gate", 1688 | "gather", 1689 | "gauge", 1690 | "gaunt", 1691 | "gave", 1692 | "gay", 1693 | "gaze", 1694 | "gear", 1695 | "geese", 1696 | "gender", 1697 | "gene", 1698 | "genial", 1699 | "genius", 1700 | "genre", 1701 | "gentle", 1702 | "gently", 1703 | "gentry", 1704 | "genus", 1705 | "get", 1706 | "ghetto", 1707 | "ghost", 1708 | "giant", 1709 | "gift", 1710 | "giggle", 1711 | "gill", 1712 | "gilt", 1713 | "ginger", 1714 | "girl", 1715 | "give", 1716 | "given", 1717 | "glad", 1718 | "glade", 1719 | "glance", 1720 | "gland", 1721 | "glare", 1722 | "glass", 1723 | "glassy", 1724 | "gleam", 1725 | "glee", 1726 | "glide", 1727 | "global", 1728 | "globe", 1729 | "gloom", 1730 | "gloomy", 1731 | "glory", 1732 | "gloss", 1733 | "glossy", 1734 | "glove", 1735 | "glow", 1736 | "glue", 1737 | "goal", 1738 | "goat", 1739 | "gold", 1740 | "golden", 1741 | "golf", 1742 | "gone", 1743 | "gong", 1744 | "good", 1745 | "goose", 1746 | "gorge", 1747 | "gory", 1748 | "gosh", 1749 | "gospel", 1750 | "gossip", 1751 | "got", 1752 | "govern", 1753 | "gown", 1754 | "grab", 1755 | "grace", 1756 | "grade", 1757 | "grain", 1758 | "grand", 1759 | "grant", 1760 | "grape", 1761 | "graph", 1762 | "grasp", 1763 | "grass", 1764 | "grassy", 1765 | "grate", 1766 | "grave", 1767 | "gravel", 1768 | "gravy", 1769 | "gray", 1770 | "grease", 1771 | "greasy", 1772 | "great", 1773 | "greed", 1774 | "greedy", 1775 | "green", 1776 | "greet", 1777 | "grew", 1778 | "grey", 1779 | "grid", 1780 | "grief", 1781 | "grill", 1782 | "grim", 1783 | "grin", 1784 | "grind", 1785 | "grip", 1786 | "grit", 1787 | "gritty", 1788 | "groan", 1789 | "groin", 1790 | "groom", 1791 | "groove", 1792 | "gross", 1793 | "ground", 1794 | "group", 1795 | "grove", 1796 | "grow", 1797 | "grown", 1798 | "growth", 1799 | "grudge", 1800 | "grunt", 1801 | "guard", 1802 | "guess", 1803 | "guest", 1804 | "guide", 1805 | "guild", 1806 | "guilt", 1807 | "guilty", 1808 | "guise", 1809 | "guitar", 1810 | "gulf", 1811 | "gully", 1812 | "gun", 1813 | "gunman", 1814 | "guru", 1815 | "gut", 1816 | "guy", 1817 | "gypsy", 1818 | "habit", 1819 | "hack", 1820 | "had", 1821 | "hail", 1822 | "hair", 1823 | "hairy", 1824 | "hale", 1825 | "half", 1826 | "hall", 1827 | "halt", 1828 | "hamlet", 1829 | "hammer", 1830 | "hand", 1831 | "handle", 1832 | "handy", 1833 | "hang", 1834 | "hangar", 1835 | "happen", 1836 | "happy", 1837 | "harass", 1838 | "hard", 1839 | "harder", 1840 | "hardly", 1841 | "hare", 1842 | "harem", 1843 | "harm", 1844 | "harp", 1845 | "harsh", 1846 | "has", 1847 | "hash", 1848 | "hassle", 1849 | "haste", 1850 | "hasten", 1851 | "hasty", 1852 | "hat", 1853 | "hatch", 1854 | "hate", 1855 | "haul", 1856 | "haunt", 1857 | "have", 1858 | "haven", 1859 | "havoc", 1860 | "hawk", 1861 | "hazard", 1862 | "haze", 1863 | "hazel", 1864 | "hazy", 1865 | "head", 1866 | "heal", 1867 | "health", 1868 | "heap", 1869 | "hear", 1870 | "heard", 1871 | "heart", 1872 | "hearth", 1873 | "hearty", 1874 | "heat", 1875 | "heater", 1876 | "heaven", 1877 | "heavy", 1878 | "heck", 1879 | "hectic", 1880 | "hedge", 1881 | "heel", 1882 | "hefty", 1883 | "height", 1884 | "heir", 1885 | "held", 1886 | "helium", 1887 | "helix", 1888 | "hell", 1889 | "hello", 1890 | "helm", 1891 | "helmet", 1892 | "help", 1893 | "hemp", 1894 | "hence", 1895 | "her", 1896 | "herald", 1897 | "herb", 1898 | "herd", 1899 | "here", 1900 | "hereby", 1901 | "hernia", 1902 | "hero", 1903 | "heroic", 1904 | "heroin", 1905 | "hey", 1906 | "heyday", 1907 | "hick", 1908 | "hidden", 1909 | "hide", 1910 | "high", 1911 | "higher", 1912 | "highly", 1913 | "hill", 1914 | "him", 1915 | "hind", 1916 | "hint", 1917 | "hippy", 1918 | "hire", 1919 | "his", 1920 | "hiss", 1921 | "hit", 1922 | "hive", 1923 | "hoard", 1924 | "hoarse", 1925 | "hobby", 1926 | "hockey", 1927 | "hold", 1928 | "holder", 1929 | "hole", 1930 | "hollow", 1931 | "holly", 1932 | "holy", 1933 | "home", 1934 | "honest", 1935 | "honey", 1936 | "hood", 1937 | "hook", 1938 | "hope", 1939 | "horn", 1940 | "horny", 1941 | "horrid", 1942 | "horror", 1943 | "horse", 1944 | "hose", 1945 | "host", 1946 | "hot", 1947 | "hotel", 1948 | "hound", 1949 | "hour", 1950 | "house", 1951 | "hover", 1952 | "how", 1953 | "huge", 1954 | "hull", 1955 | "human", 1956 | "humane", 1957 | "humble", 1958 | "humid", 1959 | "hung", 1960 | "hunger", 1961 | "hungry", 1962 | "hunt", 1963 | "hurdle", 1964 | "hurl", 1965 | "hurry", 1966 | "hurt", 1967 | "hush", 1968 | "hut", 1969 | "hybrid", 1970 | "hymn", 1971 | "hyphen", 1972 | "ice", 1973 | "icing", 1974 | "icon", 1975 | "idea", 1976 | "ideal", 1977 | "idiom", 1978 | "idiot", 1979 | "idle", 1980 | "idly", 1981 | "idol", 1982 | "ignite", 1983 | "ignore", 1984 | "ill", 1985 | "image", 1986 | "immune", 1987 | "impact", 1988 | "imply", 1989 | "import", 1990 | "impose", 1991 | "incest", 1992 | "inch", 1993 | "income", 1994 | "incur", 1995 | "indeed", 1996 | "index", 1997 | "indoor", 1998 | "induce", 1999 | "inept", 2000 | "inert", 2001 | "infant", 2002 | "infect", 2003 | "infer", 2004 | "influx", 2005 | "inform", 2006 | "inject", 2007 | "injure", 2008 | "injury", 2009 | "inlaid", 2010 | "inland", 2011 | "inlet", 2012 | "inmate", 2013 | "inn", 2014 | "innate", 2015 | "inner", 2016 | "input", 2017 | "insane", 2018 | "insect", 2019 | "insert", 2020 | "inset", 2021 | "inside", 2022 | "insist", 2023 | "insult", 2024 | "insure", 2025 | "intact", 2026 | "intake", 2027 | "intend", 2028 | "inter", 2029 | "into", 2030 | "invade", 2031 | "invent", 2032 | "invest", 2033 | "invite", 2034 | "invoke", 2035 | "inward", 2036 | "iron", 2037 | "ironic", 2038 | "irony", 2039 | "island", 2040 | "isle", 2041 | "issue", 2042 | "itch", 2043 | "item", 2044 | "itself", 2045 | "ivory", 2046 | "jacket", 2047 | "jade", 2048 | "jaguar", 2049 | "jail", 2050 | "jargon", 2051 | "jaw", 2052 | "jazz", 2053 | "jeep", 2054 | "jelly", 2055 | "jerky", 2056 | "jest", 2057 | "jet", 2058 | "jewel", 2059 | "job", 2060 | "jock", 2061 | "jockey", 2062 | "join", 2063 | "joint", 2064 | "joke", 2065 | "jolly", 2066 | "jolt", 2067 | "joy", 2068 | "joyful", 2069 | "joyous", 2070 | "judge", 2071 | "juice", 2072 | "juicy", 2073 | "jumble", 2074 | "jumbo", 2075 | "jump", 2076 | "jungle", 2077 | "junior", 2078 | "junk", 2079 | "junta", 2080 | "jury", 2081 | "just", 2082 | "karate", 2083 | "keel", 2084 | "keen", 2085 | "keep", 2086 | "keeper", 2087 | "kept", 2088 | "kernel", 2089 | "kettle", 2090 | "key", 2091 | "khaki", 2092 | "kick", 2093 | "kid", 2094 | "kidnap", 2095 | "kidney", 2096 | "kill", 2097 | "killer", 2098 | "kin", 2099 | "kind", 2100 | "kindly", 2101 | "king", 2102 | "kiss", 2103 | "kite", 2104 | "kitten", 2105 | "knack", 2106 | "knee", 2107 | "knew", 2108 | "knife", 2109 | "knight", 2110 | "knit", 2111 | "knob", 2112 | "knock", 2113 | "knot", 2114 | "know", 2115 | "known", 2116 | "label", 2117 | "lace", 2118 | "lack", 2119 | "lad", 2120 | "ladder", 2121 | "laden", 2122 | "lady", 2123 | "lagoon", 2124 | "laity", 2125 | "lake", 2126 | "lamb", 2127 | "lame", 2128 | "lamp", 2129 | "lance", 2130 | "land", 2131 | "lane", 2132 | "lap", 2133 | "lapse", 2134 | "large", 2135 | "larval", 2136 | "laser", 2137 | "last", 2138 | "latch", 2139 | "late", 2140 | "lately", 2141 | "latent", 2142 | "later", 2143 | "latest", 2144 | "latter", 2145 | "laugh", 2146 | "launch", 2147 | "lava", 2148 | "lavish", 2149 | "law", 2150 | "lawful", 2151 | "lawn", 2152 | "lawyer", 2153 | "lay", 2154 | "layer", 2155 | "layman", 2156 | "lazy", 2157 | "lead", 2158 | "leader", 2159 | "leaf", 2160 | "leafy", 2161 | "league", 2162 | "leak", 2163 | "leaky", 2164 | "lean", 2165 | "leap", 2166 | "learn", 2167 | "lease", 2168 | "leash", 2169 | "least", 2170 | "leave", 2171 | "led", 2172 | "ledge", 2173 | "left", 2174 | "leg", 2175 | "legacy", 2176 | "legal", 2177 | "legend", 2178 | "legion", 2179 | "lemon", 2180 | "lend", 2181 | "length", 2182 | "lens", 2183 | "lent", 2184 | "leper", 2185 | "lesion", 2186 | "less", 2187 | "lessen", 2188 | "lesser", 2189 | "lesson", 2190 | "lest", 2191 | "let", 2192 | "lethal", 2193 | "letter", 2194 | "level", 2195 | "lever", 2196 | "levy", 2197 | "lewis", 2198 | "liable", 2199 | "liar", 2200 | "libel", 2201 | "lice", 2202 | "lick", 2203 | "lid", 2204 | "lie", 2205 | "lied", 2206 | "life", 2207 | "lift", 2208 | "light", 2209 | "like", 2210 | "likely", 2211 | "limb", 2212 | "lime", 2213 | "limit", 2214 | "limp", 2215 | "line", 2216 | "linear", 2217 | "linen", 2218 | "linger", 2219 | "link", 2220 | "lion", 2221 | "lip", 2222 | "liquid", 2223 | "liquor", 2224 | "list", 2225 | "listen", 2226 | "lit", 2227 | "live", 2228 | "lively", 2229 | "liver", 2230 | "lizard", 2231 | "load", 2232 | "loaf", 2233 | "loan", 2234 | "lobby", 2235 | "lobe", 2236 | "local", 2237 | "locate", 2238 | "lock", 2239 | "locus", 2240 | "lodge", 2241 | "loft", 2242 | "lofty", 2243 | "log", 2244 | "logic", 2245 | "logo", 2246 | "lone", 2247 | "lonely", 2248 | "long", 2249 | "longer", 2250 | "look", 2251 | "loop", 2252 | "loose", 2253 | "loosen", 2254 | "loot", 2255 | "lord", 2256 | "lorry", 2257 | "lose", 2258 | "loss", 2259 | "lost", 2260 | "lot", 2261 | "lotion", 2262 | "lotus", 2263 | "loud", 2264 | "loudly", 2265 | "lounge", 2266 | "lousy", 2267 | "love", 2268 | "lovely", 2269 | "lover", 2270 | "low", 2271 | "lower", 2272 | "lowest", 2273 | "loyal", 2274 | "lucid", 2275 | "luck", 2276 | "lucky", 2277 | "lull", 2278 | "lump", 2279 | "lumpy", 2280 | "lunacy", 2281 | "lunar", 2282 | "lunch", 2283 | "lung", 2284 | "lure", 2285 | "lurid", 2286 | "lush", 2287 | "lust", 2288 | "lute", 2289 | "luxury", 2290 | "lying", 2291 | "lymph", 2292 | "lynch", 2293 | "lyric", 2294 | "macho", 2295 | "macro", 2296 | "mad", 2297 | "madam", 2298 | "made", 2299 | "mafia", 2300 | "magic", 2301 | "magma", 2302 | "magnet", 2303 | "magnum", 2304 | "maid", 2305 | "maiden", 2306 | "mail", 2307 | "main", 2308 | "mainly", 2309 | "major", 2310 | "make", 2311 | "maker", 2312 | "male", 2313 | "malice", 2314 | "mall", 2315 | "malt", 2316 | "mammal", 2317 | "manage", 2318 | "mane", 2319 | "mania", 2320 | "manic", 2321 | "manner", 2322 | "manor", 2323 | "mantle", 2324 | "manual", 2325 | "manure", 2326 | "many", 2327 | "map", 2328 | "maple", 2329 | "marble", 2330 | "march", 2331 | "mare", 2332 | "margin", 2333 | "marina", 2334 | "mark", 2335 | "market", 2336 | "marry", 2337 | "marsh", 2338 | "martin", 2339 | "martyr", 2340 | "mask", 2341 | "mason", 2342 | "mass", 2343 | "mast", 2344 | "master", 2345 | "match", 2346 | "mate", 2347 | "matrix", 2348 | "matter", 2349 | "mature", 2350 | "maxim", 2351 | "may", 2352 | "maybe", 2353 | "mayor", 2354 | "maze", 2355 | "mead", 2356 | "meadow", 2357 | "meal", 2358 | "mean", 2359 | "meant", 2360 | "meat", 2361 | "medal", 2362 | "media", 2363 | "median", 2364 | "medic", 2365 | "medium", 2366 | "meet", 2367 | "mellow", 2368 | "melody", 2369 | "melon", 2370 | "melt", 2371 | "member", 2372 | "memo", 2373 | "memory", 2374 | "menace", 2375 | "mend", 2376 | "mental", 2377 | "mentor", 2378 | "menu", 2379 | "mercy", 2380 | "mere", 2381 | "merely", 2382 | "merge", 2383 | "merger", 2384 | "merit", 2385 | "merry", 2386 | "mesh", 2387 | "mess", 2388 | "messy", 2389 | "met", 2390 | "metal", 2391 | "meter", 2392 | "method", 2393 | "methyl", 2394 | "metric", 2395 | "metro", 2396 | "mid", 2397 | "midday", 2398 | "middle", 2399 | "midst", 2400 | "midway", 2401 | "might", 2402 | "mighty", 2403 | "mild", 2404 | "mildew", 2405 | "mile", 2406 | "milk", 2407 | "milky", 2408 | "mill", 2409 | "mimic", 2410 | "mince", 2411 | "mind", 2412 | "mine", 2413 | "mini", 2414 | "mink", 2415 | "minor", 2416 | "mint", 2417 | "minus", 2418 | "minute", 2419 | "mirror", 2420 | "mirth", 2421 | "misery", 2422 | "miss", 2423 | "mist", 2424 | "misty", 2425 | "mite", 2426 | "mix", 2427 | "moan", 2428 | "moat", 2429 | "mobile", 2430 | "mock", 2431 | "mode", 2432 | "model", 2433 | "modem", 2434 | "modern", 2435 | "modest", 2436 | "modify", 2437 | "module", 2438 | "moist", 2439 | "molar", 2440 | "mole", 2441 | "molten", 2442 | "moment", 2443 | "money", 2444 | "monies", 2445 | "monk", 2446 | "monkey", 2447 | "month", 2448 | "mood", 2449 | "moody", 2450 | "moon", 2451 | "moor", 2452 | "moral", 2453 | "morale", 2454 | "morbid", 2455 | "more", 2456 | "morgue", 2457 | "mortal", 2458 | "mortar", 2459 | "mosaic", 2460 | "mosque", 2461 | "moss", 2462 | "most", 2463 | "mostly", 2464 | "moth", 2465 | "mother", 2466 | "motion", 2467 | "motive", 2468 | "motor", 2469 | "mould", 2470 | "mount", 2471 | "mourn", 2472 | "mouse", 2473 | "mouth", 2474 | "move", 2475 | "movie", 2476 | "much", 2477 | "muck", 2478 | "mucus", 2479 | "mud", 2480 | "muddle", 2481 | "muddy", 2482 | "mule", 2483 | "mummy", 2484 | "murder", 2485 | "murky", 2486 | "murmur", 2487 | "muscle", 2488 | "museum", 2489 | "music", 2490 | "mussel", 2491 | "must", 2492 | "mutant", 2493 | "mute", 2494 | "mutiny", 2495 | "mutter", 2496 | "mutton", 2497 | "mutual", 2498 | "muzzle", 2499 | "myopic", 2500 | "myriad", 2501 | "myself", 2502 | "mystic", 2503 | "myth", 2504 | "nadir", 2505 | "nail", 2506 | "naked", 2507 | "name", 2508 | "namely", 2509 | "nape", 2510 | "napkin", 2511 | "narrow", 2512 | "nasal", 2513 | "nasty", 2514 | "nation", 2515 | "native", 2516 | "nature", 2517 | "nausea", 2518 | "naval", 2519 | "nave", 2520 | "navy", 2521 | "near", 2522 | "nearer", 2523 | "nearly", 2524 | "neat", 2525 | "neatly", 2526 | "neck", 2527 | "need", 2528 | "needle", 2529 | "needy", 2530 | "negate", 2531 | "neon", 2532 | "nephew", 2533 | "nerve", 2534 | "nest", 2535 | "neural", 2536 | "never", 2537 | "newly", 2538 | "next", 2539 | "nice", 2540 | "nicely", 2541 | "niche", 2542 | "nickel", 2543 | "niece", 2544 | "night", 2545 | "nimble", 2546 | "nine", 2547 | "ninety", 2548 | "ninth", 2549 | "noble", 2550 | "nobody", 2551 | "node", 2552 | "noise", 2553 | "noisy", 2554 | "non", 2555 | "none", 2556 | "noon", 2557 | "nor", 2558 | "norm", 2559 | "normal", 2560 | "nose", 2561 | "nosy", 2562 | "not", 2563 | "note", 2564 | "notice", 2565 | "notify", 2566 | "notion", 2567 | "nought", 2568 | "noun", 2569 | "novel", 2570 | "novice", 2571 | "now", 2572 | "nozzle", 2573 | "nude", 2574 | "null", 2575 | "numb", 2576 | "number", 2577 | "nurse", 2578 | "nylon", 2579 | "nymph", 2580 | "oak", 2581 | "oasis", 2582 | "oath", 2583 | "obese", 2584 | "obey", 2585 | "object", 2586 | "oblige", 2587 | "oboe", 2588 | "obtain", 2589 | "occult", 2590 | "occupy", 2591 | "occur", 2592 | "ocean", 2593 | "octave", 2594 | "odd", 2595 | "off", 2596 | "offend", 2597 | "offer", 2598 | "office", 2599 | "offset", 2600 | "often", 2601 | "oil", 2602 | "oily", 2603 | "okay", 2604 | "old", 2605 | "older", 2606 | "oldest", 2607 | "olive", 2608 | "omega", 2609 | "omen", 2610 | "omit", 2611 | "once", 2612 | "one", 2613 | "onion", 2614 | "only", 2615 | "onset", 2616 | "onto", 2617 | "onus", 2618 | "onward", 2619 | "opaque", 2620 | "open", 2621 | "openly", 2622 | "opera", 2623 | "opium", 2624 | "oppose", 2625 | "optic", 2626 | "option", 2627 | "oracle", 2628 | "oral", 2629 | "orange", 2630 | "orbit", 2631 | "orchid", 2632 | "ordeal", 2633 | "order", 2634 | "organ", 2635 | "orgasm", 2636 | "orient", 2637 | "origin", 2638 | "ornate", 2639 | "orphan", 2640 | "other", 2641 | "otter", 2642 | "ought", 2643 | "ounce", 2644 | "our", 2645 | "out", 2646 | "outer", 2647 | "output", 2648 | "outset", 2649 | "oval", 2650 | "oven", 2651 | "over", 2652 | "overt", 2653 | "owe", 2654 | "owing", 2655 | "owl", 2656 | "own", 2657 | "owner", 2658 | "oxide", 2659 | "oxygen", 2660 | "oyster", 2661 | "ozone", 2662 | "pace", 2663 | "pack", 2664 | "packet", 2665 | "pact", 2666 | "paddle", 2667 | "paddy", 2668 | "pagan", 2669 | "page", 2670 | "paid", 2671 | "pain", 2672 | "paint", 2673 | "pair", 2674 | "palace", 2675 | "pale", 2676 | "palm", 2677 | "panel", 2678 | "panic", 2679 | "papa", 2680 | "papal", 2681 | "paper", 2682 | "parade", 2683 | "parcel", 2684 | "pardon", 2685 | "parent", 2686 | "parish", 2687 | "park", 2688 | "parody", 2689 | "parrot", 2690 | "part", 2691 | "partly", 2692 | "party", 2693 | "pass", 2694 | "past", 2695 | "paste", 2696 | "pastel", 2697 | "pastor", 2698 | "pastry", 2699 | "pat", 2700 | "patch", 2701 | "patent", 2702 | "path", 2703 | "patio", 2704 | "patrol", 2705 | "patron", 2706 | "pause", 2707 | "pave", 2708 | "pawn", 2709 | "pay", 2710 | "peace", 2711 | "peach", 2712 | "peak", 2713 | "pear", 2714 | "pearl", 2715 | "pedal", 2716 | "peel", 2717 | "peer", 2718 | "pelvic", 2719 | "pelvis", 2720 | "pen", 2721 | "penal", 2722 | "pence", 2723 | "pencil", 2724 | "penis", 2725 | "penny", 2726 | "people", 2727 | "pepper", 2728 | "per", 2729 | "perch", 2730 | "peril", 2731 | "period", 2732 | "perish", 2733 | "permit", 2734 | "person", 2735 | "pest", 2736 | "petite", 2737 | "petrol", 2738 | "petty", 2739 | "phase", 2740 | "phone", 2741 | "photo", 2742 | "phrase", 2743 | "piano", 2744 | "pick", 2745 | "picket", 2746 | "picnic", 2747 | "pie", 2748 | "piece", 2749 | "pier", 2750 | "pierce", 2751 | "piety", 2752 | "pig", 2753 | "pigeon", 2754 | "piggy", 2755 | "pike", 2756 | "pile", 2757 | "pill", 2758 | "pillar", 2759 | "pillow", 2760 | "pilot", 2761 | "pin", 2762 | "pinch", 2763 | "pine", 2764 | "pink", 2765 | "pint", 2766 | "pious", 2767 | "pipe", 2768 | "pirate", 2769 | "piss", 2770 | "pistol", 2771 | "piston", 2772 | "pit", 2773 | "pitch", 2774 | "pity", 2775 | "pivot", 2776 | "pixel", 2777 | "pizza", 2778 | "place", 2779 | "placid", 2780 | "plague", 2781 | "plain", 2782 | "plan", 2783 | "plane", 2784 | "planet", 2785 | "plank", 2786 | "plant", 2787 | "plasma", 2788 | "plate", 2789 | "play", 2790 | "player", 2791 | "plea", 2792 | "plead", 2793 | "please", 2794 | "pledge", 2795 | "plenty", 2796 | "plenum", 2797 | "plight", 2798 | "plot", 2799 | "ploy", 2800 | "plug", 2801 | "plum", 2802 | "plump", 2803 | "plunge", 2804 | "plural", 2805 | "plus", 2806 | "plush", 2807 | "pocket", 2808 | "poem", 2809 | "poet", 2810 | "poetic", 2811 | "poetry", 2812 | "point", 2813 | "poison", 2814 | "polar", 2815 | "pole", 2816 | "police", 2817 | "policy", 2818 | "polite", 2819 | "poll", 2820 | "pollen", 2821 | "polo", 2822 | "pond", 2823 | "ponder", 2824 | "pony", 2825 | "pool", 2826 | "poor", 2827 | "poorly", 2828 | "pop", 2829 | "pope", 2830 | "poppy", 2831 | "pore", 2832 | "pork", 2833 | "port", 2834 | "portal", 2835 | "pose", 2836 | "posh", 2837 | "post", 2838 | "postal", 2839 | "pot", 2840 | "potato", 2841 | "potent", 2842 | "pouch", 2843 | "pound", 2844 | "pour", 2845 | "powder", 2846 | "power", 2847 | "praise", 2848 | "pray", 2849 | "prayer", 2850 | "preach", 2851 | "prefer", 2852 | "prefix", 2853 | "press", 2854 | "pretty", 2855 | "price", 2856 | "pride", 2857 | "priest", 2858 | "primal", 2859 | "prime", 2860 | "prince", 2861 | "print", 2862 | "prior", 2863 | "prism", 2864 | "prison", 2865 | "privy", 2866 | "prize", 2867 | "probe", 2868 | "profit", 2869 | "prompt", 2870 | "prone", 2871 | "proof", 2872 | "propel", 2873 | "proper", 2874 | "prose", 2875 | "proton", 2876 | "proud", 2877 | "prove", 2878 | "proven", 2879 | "proxy", 2880 | "prune", 2881 | "psalm", 2882 | "pseudo", 2883 | "psyche", 2884 | "pub", 2885 | "public", 2886 | "puff", 2887 | "pull", 2888 | "pulp", 2889 | "pulpit", 2890 | "pulsar", 2891 | "pulse", 2892 | "pump", 2893 | "punch", 2894 | "punish", 2895 | "punk", 2896 | "pupil", 2897 | "puppet", 2898 | "puppy", 2899 | "pure", 2900 | "purely", 2901 | "purge", 2902 | "purify", 2903 | "purple", 2904 | "purse", 2905 | "pursue", 2906 | "push", 2907 | "pushy", 2908 | "pussy", 2909 | "put", 2910 | "putt", 2911 | "puzzle", 2912 | "quaint", 2913 | "quake", 2914 | "quarry", 2915 | "quartz", 2916 | "quay", 2917 | "queen", 2918 | "queer", 2919 | "query", 2920 | "quest", 2921 | "queue", 2922 | "quick", 2923 | "quid", 2924 | "quiet", 2925 | "quilt", 2926 | "quirk", 2927 | "quit", 2928 | "quite", 2929 | "quiver", 2930 | "quiz", 2931 | "quota", 2932 | "quote", 2933 | "rabbit", 2934 | "race", 2935 | "racial", 2936 | "racism", 2937 | "rack", 2938 | "racket", 2939 | "radar", 2940 | "radio", 2941 | "radish", 2942 | "radius", 2943 | "raffle", 2944 | "raft", 2945 | "rage", 2946 | "raid", 2947 | "rail", 2948 | "rain", 2949 | "rainy", 2950 | "raise", 2951 | "rally", 2952 | "ramp", 2953 | "random", 2954 | "range", 2955 | "rank", 2956 | "ransom", 2957 | "rape", 2958 | "rapid", 2959 | "rare", 2960 | "rarely", 2961 | "rarity", 2962 | "rash", 2963 | "rat", 2964 | "rate", 2965 | "rather", 2966 | "ratify", 2967 | "ratio", 2968 | "rattle", 2969 | "rave", 2970 | "raven", 2971 | "raw", 2972 | "ray", 2973 | "razor", 2974 | "reach", 2975 | "react", 2976 | "read", 2977 | "reader", 2978 | "ready", 2979 | "real", 2980 | "really", 2981 | "realm", 2982 | "reap", 2983 | "rear", 2984 | "reason", 2985 | "rebel", 2986 | "recall", 2987 | "recent", 2988 | "recess", 2989 | "recipe", 2990 | "reckon", 2991 | "record", 2992 | "recoup", 2993 | "rector", 2994 | "red", 2995 | "redeem", 2996 | "reduce", 2997 | "reed", 2998 | "reef", 2999 | "refer", 3000 | "reform", 3001 | "refuge", 3002 | "refuse", 3003 | "regal", 3004 | "regard", 3005 | "regent", 3006 | "regime", 3007 | "region", 3008 | "regret", 3009 | "reign", 3010 | "reject", 3011 | "relate", 3012 | "relax", 3013 | "relay", 3014 | "relic", 3015 | "relief", 3016 | "relish", 3017 | "rely", 3018 | "remain", 3019 | "remark", 3020 | "remedy", 3021 | "remind", 3022 | "remit", 3023 | "remote", 3024 | "remove", 3025 | "renal", 3026 | "render", 3027 | "rent", 3028 | "rental", 3029 | "repair", 3030 | "repeal", 3031 | "repeat", 3032 | "repent", 3033 | "reply", 3034 | "report", 3035 | "rescue", 3036 | "resent", 3037 | "reside", 3038 | "resign", 3039 | "resin", 3040 | "resist", 3041 | "resort", 3042 | "rest", 3043 | "result", 3044 | "resume", 3045 | "retail", 3046 | "retain", 3047 | "retina", 3048 | "retire", 3049 | "return", 3050 | "reveal", 3051 | "review", 3052 | "revise", 3053 | "revive", 3054 | "revolt", 3055 | "reward", 3056 | "rhino", 3057 | "rhyme", 3058 | "rhythm", 3059 | "ribbon", 3060 | "rice", 3061 | "rich", 3062 | "rick", 3063 | "rid", 3064 | "ride", 3065 | "rider", 3066 | "ridge", 3067 | "rife", 3068 | "rifle", 3069 | "rift", 3070 | "right", 3071 | "rigid", 3072 | "ring", 3073 | "rinse", 3074 | "riot", 3075 | "ripe", 3076 | "ripen", 3077 | "ripple", 3078 | "rise", 3079 | "risk", 3080 | "risky", 3081 | "rite", 3082 | "ritual", 3083 | "rival", 3084 | "river", 3085 | "road", 3086 | "roar", 3087 | "roast", 3088 | "rob", 3089 | "robe", 3090 | "robin", 3091 | "robot", 3092 | "robust", 3093 | "rock", 3094 | "rocket", 3095 | "rocky", 3096 | "rod", 3097 | "rode", 3098 | "rodent", 3099 | "rogue", 3100 | "role", 3101 | "roll", 3102 | "roof", 3103 | "room", 3104 | "root", 3105 | "rope", 3106 | "rose", 3107 | "rosy", 3108 | "rotate", 3109 | "rotor", 3110 | "rotten", 3111 | "rouge", 3112 | "rough", 3113 | "round", 3114 | "route", 3115 | "rover", 3116 | "row", 3117 | "royal", 3118 | "rubble", 3119 | "ruby", 3120 | "rudder", 3121 | "rude", 3122 | "rugby", 3123 | "ruin", 3124 | "rule", 3125 | "ruler", 3126 | "rumble", 3127 | "rump", 3128 | "run", 3129 | "rune", 3130 | "rung", 3131 | "runway", 3132 | "rural", 3133 | "rush", 3134 | "rust", 3135 | "rustic", 3136 | "rusty", 3137 | "sack", 3138 | "sacred", 3139 | "sad", 3140 | "saddle", 3141 | "sadism", 3142 | "sadly", 3143 | "safari", 3144 | "safe", 3145 | "safely", 3146 | "safer", 3147 | "safety", 3148 | "saga", 3149 | "sage", 3150 | "said", 3151 | "sail", 3152 | "sailor", 3153 | "saint", 3154 | "sake", 3155 | "salad", 3156 | "salary", 3157 | "sale", 3158 | "saline", 3159 | "saliva", 3160 | "salmon", 3161 | "saloon", 3162 | "salt", 3163 | "salty", 3164 | "salute", 3165 | "same", 3166 | "sample", 3167 | "sand", 3168 | "sandy", 3169 | "sane", 3170 | "sash", 3171 | "satan", 3172 | "satin", 3173 | "satire", 3174 | "sauce", 3175 | "sauna", 3176 | "savage", 3177 | "save", 3178 | "say", 3179 | "scale", 3180 | "scalp", 3181 | "scan", 3182 | "scant", 3183 | "scar", 3184 | "scarce", 3185 | "scare", 3186 | "scarf", 3187 | "scary", 3188 | "scene", 3189 | "scenic", 3190 | "scent", 3191 | "school", 3192 | "scope", 3193 | "score", 3194 | "scorn", 3195 | "scotch", 3196 | "scout", 3197 | "scrap", 3198 | "scream", 3199 | "screen", 3200 | "screw", 3201 | "script", 3202 | "scroll", 3203 | "scrub", 3204 | "scum", 3205 | "sea", 3206 | "seal", 3207 | "seam", 3208 | "seaman", 3209 | "search", 3210 | "season", 3211 | "seat", 3212 | "second", 3213 | "secret", 3214 | "sect", 3215 | "sector", 3216 | "secure", 3217 | "see", 3218 | "seed", 3219 | "seeing", 3220 | "seek", 3221 | "seem", 3222 | "seize", 3223 | "seldom", 3224 | "select", 3225 | "self", 3226 | "sell", 3227 | "seller", 3228 | "semi", 3229 | "senate", 3230 | "send", 3231 | "senile", 3232 | "senior", 3233 | "sense", 3234 | "sensor", 3235 | "sent", 3236 | "sentry", 3237 | "sequel", 3238 | "serene", 3239 | "serial", 3240 | "series", 3241 | "sermon", 3242 | "serum", 3243 | "serve", 3244 | "server", 3245 | "set", 3246 | "settle", 3247 | "seven", 3248 | "severe", 3249 | "sewage", 3250 | "sex", 3251 | "sexual", 3252 | "sexy", 3253 | "shabby", 3254 | "shade", 3255 | "shadow", 3256 | "shady", 3257 | "shaft", 3258 | "shaggy", 3259 | "shah", 3260 | "shake", 3261 | "shaky", 3262 | "shall", 3263 | "sham", 3264 | "shame", 3265 | "shape", 3266 | "share", 3267 | "shark", 3268 | "sharp", 3269 | "shawl", 3270 | "she", 3271 | "shear", 3272 | "sheen", 3273 | "sheep", 3274 | "sheer", 3275 | "sheet", 3276 | "shelf", 3277 | "shell", 3278 | "sherry", 3279 | "shield", 3280 | "shift", 3281 | "shine", 3282 | "shiny", 3283 | "ship", 3284 | "shire", 3285 | "shirt", 3286 | "shit", 3287 | "shiver", 3288 | "shock", 3289 | "shoe", 3290 | "shook", 3291 | "shoot", 3292 | "shop", 3293 | "shore", 3294 | "short", 3295 | "shot", 3296 | "should", 3297 | "shout", 3298 | "show", 3299 | "shower", 3300 | "shrank", 3301 | "shrewd", 3302 | "shrill", 3303 | "shrimp", 3304 | "shrine", 3305 | "shrink", 3306 | "shrub", 3307 | "shrug", 3308 | "shut", 3309 | "shy", 3310 | "shyly", 3311 | "sick", 3312 | "side", 3313 | "siege", 3314 | "sigh", 3315 | "sight", 3316 | "sigma", 3317 | "sign", 3318 | "signal", 3319 | "silent", 3320 | "silk", 3321 | "silken", 3322 | "silky", 3323 | "sill", 3324 | "silly", 3325 | "silver", 3326 | "simple", 3327 | "simply", 3328 | "since", 3329 | "sinful", 3330 | "sing", 3331 | "singer", 3332 | "single", 3333 | "sink", 3334 | "sir", 3335 | "siren", 3336 | "sister", 3337 | "sit", 3338 | "site", 3339 | "six", 3340 | "sixth", 3341 | "sixty", 3342 | "size", 3343 | "sketch", 3344 | "skill", 3345 | "skin", 3346 | "skinny", 3347 | "skip", 3348 | "skirt", 3349 | "skull", 3350 | "sky", 3351 | "slab", 3352 | "slack", 3353 | "slain", 3354 | "slam", 3355 | "slang", 3356 | "slap", 3357 | "slate", 3358 | "slater", 3359 | "slave", 3360 | "sleek", 3361 | "sleep", 3362 | "sleepy", 3363 | "sleeve", 3364 | "slice", 3365 | "slick", 3366 | "slid", 3367 | "slide", 3368 | "slight", 3369 | "slim", 3370 | "slimy", 3371 | "sling", 3372 | "slip", 3373 | "slit", 3374 | "slogan", 3375 | "slope", 3376 | "sloppy", 3377 | "slot", 3378 | "slow", 3379 | "slowly", 3380 | "slug", 3381 | "slum", 3382 | "slump", 3383 | "smack", 3384 | "small", 3385 | "smart", 3386 | "smash", 3387 | "smear", 3388 | "smell", 3389 | "smelly", 3390 | "smelt", 3391 | "smile", 3392 | "smoke", 3393 | "smoky", 3394 | "smooth", 3395 | "smug", 3396 | "snack", 3397 | "snail", 3398 | "snake", 3399 | "snap", 3400 | "snatch", 3401 | "sneak", 3402 | "snow", 3403 | "snowy", 3404 | "snug", 3405 | "soak", 3406 | "soap", 3407 | "sober", 3408 | "soccer", 3409 | "social", 3410 | "sock", 3411 | "socket", 3412 | "soda", 3413 | "sodden", 3414 | "sodium", 3415 | "sofa", 3416 | "soft", 3417 | "soften", 3418 | "softly", 3419 | "soggy", 3420 | "soil", 3421 | "solar", 3422 | "sold", 3423 | "sole", 3424 | "solely", 3425 | "solemn", 3426 | "solid", 3427 | "solo", 3428 | "solve", 3429 | "some", 3430 | "son", 3431 | "sonar", 3432 | "sonata", 3433 | "song", 3434 | "sonic", 3435 | "soon", 3436 | "sooner", 3437 | "soot", 3438 | "soothe", 3439 | "sordid", 3440 | "sore", 3441 | "sorrow", 3442 | "sorry", 3443 | "sort", 3444 | "soul", 3445 | "sound", 3446 | "soup", 3447 | "sour", 3448 | "source", 3449 | "space", 3450 | "spade", 3451 | "span", 3452 | "spare", 3453 | "spark", 3454 | "sparse", 3455 | "spasm", 3456 | "spat", 3457 | "spate", 3458 | "speak", 3459 | "spear", 3460 | "speech", 3461 | "speed", 3462 | "speedy", 3463 | "spell", 3464 | "spend", 3465 | "sperm", 3466 | "sphere", 3467 | "spice", 3468 | "spicy", 3469 | "spider", 3470 | "spiky", 3471 | "spill", 3472 | "spin", 3473 | "spinal", 3474 | "spine", 3475 | "spiral", 3476 | "spirit", 3477 | "spit", 3478 | "spite", 3479 | "splash", 3480 | "split", 3481 | "spoil", 3482 | "spoke", 3483 | "sponge", 3484 | "spoon", 3485 | "sport", 3486 | "spot", 3487 | "spouse", 3488 | "spray", 3489 | "spread", 3490 | "spree", 3491 | "spring", 3492 | "sprint", 3493 | "spur", 3494 | "squad", 3495 | "square", 3496 | "squash", 3497 | "squat", 3498 | "squid", 3499 | "stab", 3500 | "stable", 3501 | "stack", 3502 | "staff", 3503 | "stage", 3504 | "stain", 3505 | "stair", 3506 | "stake", 3507 | "stale", 3508 | "stall", 3509 | "stamp", 3510 | "stance", 3511 | "stand", 3512 | "staple", 3513 | "star", 3514 | "starch", 3515 | "stare", 3516 | "stark", 3517 | "start", 3518 | "starve", 3519 | "state", 3520 | "static", 3521 | "statue", 3522 | "status", 3523 | "stay", 3524 | "stead", 3525 | "steady", 3526 | "steak", 3527 | "steal", 3528 | "steam", 3529 | "steel", 3530 | "steep", 3531 | "steer", 3532 | "stem", 3533 | "stench", 3534 | "step", 3535 | "stereo", 3536 | "stern", 3537 | "stew", 3538 | "stick", 3539 | "sticky", 3540 | "stiff", 3541 | "stifle", 3542 | "stigma", 3543 | "still", 3544 | "sting", 3545 | "stint", 3546 | "stir", 3547 | "stitch", 3548 | "stock", 3549 | "stocky", 3550 | "stone", 3551 | "stony", 3552 | "stool", 3553 | "stop", 3554 | "store", 3555 | "storm", 3556 | "stormy", 3557 | "story", 3558 | "stout", 3559 | "stove", 3560 | "strain", 3561 | "strait", 3562 | "strand", 3563 | "strap", 3564 | "strata", 3565 | "straw", 3566 | "stray", 3567 | "streak", 3568 | "stream", 3569 | "street", 3570 | "stress", 3571 | "strict", 3572 | "stride", 3573 | "strife", 3574 | "strike", 3575 | "string", 3576 | "strip", 3577 | "strive", 3578 | "stroke", 3579 | "stroll", 3580 | "strong", 3581 | "stud", 3582 | "studio", 3583 | "study", 3584 | "stuff", 3585 | "stuffy", 3586 | "stunt", 3587 | "stupid", 3588 | "sturdy", 3589 | "style", 3590 | "submit", 3591 | "subtle", 3592 | "subtly", 3593 | "suburb", 3594 | "such", 3595 | "suck", 3596 | "sudden", 3597 | "sue", 3598 | "suffer", 3599 | "sugar", 3600 | "suit", 3601 | "suite", 3602 | "suitor", 3603 | "sullen", 3604 | "sultan", 3605 | "sum", 3606 | "summer", 3607 | "summit", 3608 | "summon", 3609 | "sun", 3610 | "sunny", 3611 | "sunset", 3612 | "super", 3613 | "superb", 3614 | "supper", 3615 | "supple", 3616 | "supply", 3617 | "sure", 3618 | "surely", 3619 | "surf", 3620 | "surge", 3621 | "survey", 3622 | "suture", 3623 | "swamp", 3624 | "swan", 3625 | "swap", 3626 | "swarm", 3627 | "sway", 3628 | "swear", 3629 | "sweat", 3630 | "sweaty", 3631 | "sweep", 3632 | "sweet", 3633 | "swell", 3634 | "swift", 3635 | "swim", 3636 | "swine", 3637 | "swing", 3638 | "swirl", 3639 | "switch", 3640 | "sword", 3641 | "swore", 3642 | "symbol", 3643 | "synod", 3644 | "syntax", 3645 | "syrup", 3646 | "system", 3647 | "table", 3648 | "tablet", 3649 | "taboo", 3650 | "tacit", 3651 | "tackle", 3652 | "tact", 3653 | "tactic", 3654 | "tail", 3655 | "tailor", 3656 | "take", 3657 | "tale", 3658 | "talent", 3659 | "talk", 3660 | "tall", 3661 | "tally", 3662 | "tame", 3663 | "tandem", 3664 | "tangle", 3665 | "tank", 3666 | "tap", 3667 | "tape", 3668 | "target", 3669 | "tariff", 3670 | "tart", 3671 | "task", 3672 | "taste", 3673 | "tasty", 3674 | "tattoo", 3675 | "taut", 3676 | "tavern", 3677 | "tax", 3678 | "taxi", 3679 | "tea", 3680 | "teach", 3681 | "teak", 3682 | "team", 3683 | "tear", 3684 | "tease", 3685 | "tech", 3686 | "teeth", 3687 | "tell", 3688 | "temper", 3689 | "temple", 3690 | "tempo", 3691 | "tempt", 3692 | "ten", 3693 | "tenant", 3694 | "tend", 3695 | "tender", 3696 | "tendon", 3697 | "tennis", 3698 | "tenor", 3699 | "tense", 3700 | "tensor", 3701 | "tent", 3702 | "tenth", 3703 | "tenure", 3704 | "term", 3705 | "terror", 3706 | "test", 3707 | "text", 3708 | "than", 3709 | "thank", 3710 | "that", 3711 | "the", 3712 | "their", 3713 | "them", 3714 | "theme", 3715 | "then", 3716 | "thence", 3717 | "theory", 3718 | "there", 3719 | "these", 3720 | "thesis", 3721 | "they", 3722 | "thick", 3723 | "thief", 3724 | "thigh", 3725 | "thin", 3726 | "thing", 3727 | "think", 3728 | "third", 3729 | "thirst", 3730 | "thirty", 3731 | "this", 3732 | "thorn", 3733 | "those", 3734 | "though", 3735 | "thread", 3736 | "threat", 3737 | "three", 3738 | "thrill", 3739 | "thrive", 3740 | "throat", 3741 | "throne", 3742 | "throng", 3743 | "throw", 3744 | "thrust", 3745 | "thud", 3746 | "thug", 3747 | "thumb", 3748 | "thus", 3749 | "thyme", 3750 | "tick", 3751 | "ticket", 3752 | "tidal", 3753 | "tide", 3754 | "tidy", 3755 | "tie", 3756 | "tier", 3757 | "tiger", 3758 | "tight", 3759 | "tile", 3760 | "till", 3761 | "tilt", 3762 | "timber", 3763 | "time", 3764 | "timid", 3765 | "tin", 3766 | "tiny", 3767 | "tip", 3768 | "tissue", 3769 | "title", 3770 | "toad", 3771 | "toast", 3772 | "today", 3773 | "toilet", 3774 | "token", 3775 | "told", 3776 | "toll", 3777 | "tomato", 3778 | "tomb", 3779 | "tonal", 3780 | "tone", 3781 | "tongue", 3782 | "tonic", 3783 | "too", 3784 | "took", 3785 | "tool", 3786 | "tooth", 3787 | "top", 3788 | "topaz", 3789 | "topic", 3790 | "torch", 3791 | "torque", 3792 | "torso", 3793 | "tort", 3794 | "toss", 3795 | "total", 3796 | "touch", 3797 | "tough", 3798 | "tour", 3799 | "toward", 3800 | "towel", 3801 | "tower", 3802 | "town", 3803 | "toxic", 3804 | "toxin", 3805 | "trace", 3806 | "track", 3807 | "tract", 3808 | "trade", 3809 | "tragic", 3810 | "trail", 3811 | "train", 3812 | "trait", 3813 | "tram", 3814 | "trance", 3815 | "trap", 3816 | "trauma", 3817 | "travel", 3818 | "tray", 3819 | "tread", 3820 | "treat", 3821 | "treaty", 3822 | "treble", 3823 | "tree", 3824 | "trek", 3825 | "tremor", 3826 | "trench", 3827 | "trend", 3828 | "trendy", 3829 | "trial", 3830 | "tribal", 3831 | "tribe", 3832 | "trick", 3833 | "tricky", 3834 | "tried", 3835 | "trifle", 3836 | "trim", 3837 | "trio", 3838 | "trip", 3839 | "triple", 3840 | "troop", 3841 | "trophy", 3842 | "trot", 3843 | "trough", 3844 | "trout", 3845 | "truce", 3846 | "truck", 3847 | "true", 3848 | "truly", 3849 | "trunk", 3850 | "trust", 3851 | "truth", 3852 | "try", 3853 | "tsar", 3854 | "tube", 3855 | "tumble", 3856 | "tuna", 3857 | "tundra", 3858 | "tune", 3859 | "tung", 3860 | "tunic", 3861 | "tunnel", 3862 | "turban", 3863 | "turf", 3864 | "turn", 3865 | "turtle", 3866 | "tutor", 3867 | "tweed", 3868 | "twelve", 3869 | "twenty", 3870 | "twice", 3871 | "twin", 3872 | "twist", 3873 | "two", 3874 | "tycoon", 3875 | "tying", 3876 | "type", 3877 | "tyrant", 3878 | "ugly", 3879 | "ulcer", 3880 | "ultra", 3881 | "umpire", 3882 | "unable", 3883 | "uncle", 3884 | "under", 3885 | "uneasy", 3886 | "unfair", 3887 | "unify", 3888 | "union", 3889 | "unique", 3890 | "unit", 3891 | "unite", 3892 | "unity", 3893 | "unlike", 3894 | "unrest", 3895 | "unruly", 3896 | "until", 3897 | "update", 3898 | "upheld", 3899 | "uphill", 3900 | "uphold", 3901 | "upon", 3902 | "uproar", 3903 | "upset", 3904 | "upshot", 3905 | "uptake", 3906 | "upturn", 3907 | "upward", 3908 | "urban", 3909 | "urge", 3910 | "urgent", 3911 | "urging", 3912 | "urine", 3913 | "usable", 3914 | "usage", 3915 | "use", 3916 | "useful", 3917 | "user", 3918 | "usual", 3919 | "uterus", 3920 | "utmost", 3921 | "utter", 3922 | "vacant", 3923 | "vacuum", 3924 | "vagina", 3925 | "vague", 3926 | "vain", 3927 | "valet", 3928 | "valid", 3929 | "valley", 3930 | "value", 3931 | "valve", 3932 | "van", 3933 | "vanish", 3934 | "vanity", 3935 | "vary", 3936 | "vase", 3937 | "vast", 3938 | "vat", 3939 | "vault", 3940 | "vector", 3941 | "veil", 3942 | "vein", 3943 | "velvet", 3944 | "vendor", 3945 | "veneer", 3946 | "venom", 3947 | "vent", 3948 | "venue", 3949 | "verb", 3950 | "verbal", 3951 | "verge", 3952 | "verify", 3953 | "verity", 3954 | "verse", 3955 | "versus", 3956 | "very", 3957 | "vessel", 3958 | "vest", 3959 | "veto", 3960 | "via", 3961 | "viable", 3962 | "vicar", 3963 | "vice", 3964 | "victim", 3965 | "victor", 3966 | "video", 3967 | "view", 3968 | "vigil", 3969 | "vile", 3970 | "villa", 3971 | "vine", 3972 | "vinyl", 3973 | "viola", 3974 | "violet", 3975 | "violin", 3976 | "viral", 3977 | "virgin", 3978 | "virtue", 3979 | "virus", 3980 | "visa", 3981 | "vision", 3982 | "visit", 3983 | "visual", 3984 | "vital", 3985 | "vivid", 3986 | "vocal", 3987 | "vodka", 3988 | "vogue", 3989 | "voice", 3990 | "void", 3991 | "volley", 3992 | "volume", 3993 | "vomit", 3994 | "vote", 3995 | "vowel", 3996 | "voyage", 3997 | "vulgar", 3998 | "wade", 3999 | "wage", 4000 | "waist", 4001 | "wait", 4002 | "waiter", 4003 | "wake", 4004 | "walk", 4005 | "walker", 4006 | "wall", 4007 | "wallet", 4008 | "walnut", 4009 | "wander", 4010 | "want", 4011 | "war", 4012 | "warden", 4013 | "warm", 4014 | "warmth", 4015 | "warn", 4016 | "warp", 4017 | "wary", 4018 | "was", 4019 | "wash", 4020 | "wasp", 4021 | "waste", 4022 | "watch", 4023 | "water", 4024 | "watery", 4025 | "wave", 4026 | "way", 4027 | "weak", 4028 | "weaken", 4029 | "wealth", 4030 | "weapon", 4031 | "wear", 4032 | "weary", 4033 | "wedge", 4034 | "wee", 4035 | "weed", 4036 | "week", 4037 | "weekly", 4038 | "weep", 4039 | "weight", 4040 | "weird", 4041 | "well", 4042 | "were", 4043 | "wet", 4044 | "whale", 4045 | "wharf", 4046 | "what", 4047 | "wheat", 4048 | "wheel", 4049 | "when", 4050 | "whence", 4051 | "where", 4052 | "which", 4053 | "whiff", 4054 | "whig", 4055 | "while", 4056 | "whim", 4057 | "whip", 4058 | "whisky", 4059 | "white", 4060 | "who", 4061 | "whole", 4062 | "wholly", 4063 | "whom", 4064 | "whore", 4065 | "whose", 4066 | "why", 4067 | "wide", 4068 | "widely", 4069 | "widen", 4070 | "wider", 4071 | "widow", 4072 | "width", 4073 | "wife", 4074 | "wild", 4075 | "wildly", 4076 | "wilful", 4077 | "will", 4078 | "willow", 4079 | "win", 4080 | "wind", 4081 | "window", 4082 | "windy", 4083 | "wine", 4084 | "wing", 4085 | "wink", 4086 | "winner", 4087 | "winter", 4088 | "wipe", 4089 | "wire", 4090 | "wisdom", 4091 | "wise", 4092 | "wish", 4093 | "wit", 4094 | "witch", 4095 | "with", 4096 | "within", 4097 | "witty", 4098 | "wizard", 4099 | "woke", 4100 | "wolf", 4101 | "wolves", 4102 | "woman", 4103 | "womb", 4104 | "won", 4105 | "wonder", 4106 | "wood", 4107 | "wooden", 4108 | "woods", 4109 | "woody", 4110 | "wool", 4111 | "word", 4112 | "work", 4113 | "worker", 4114 | "world", 4115 | "worm", 4116 | "worry", 4117 | "worse", 4118 | "worst", 4119 | "worth", 4120 | "worthy", 4121 | "would", 4122 | "wound", 4123 | "wrap", 4124 | "wrath", 4125 | "wreath", 4126 | "wreck", 4127 | "wright", 4128 | "wrist", 4129 | "writ", 4130 | "write", 4131 | "writer", 4132 | "wrong", 4133 | "xerox", 4134 | "yacht", 4135 | "yard", 4136 | "yarn", 4137 | "yeah", 4138 | "year", 4139 | "yeast", 4140 | "yellow", 4141 | "yet", 4142 | "yield", 4143 | "yogurt", 4144 | "yolk", 4145 | "you", 4146 | "young", 4147 | "your", 4148 | "youth", 4149 | "zeal", 4150 | "zebra", 4151 | "zenith", 4152 | "zero", 4153 | "zigzag", 4154 | "zinc", 4155 | "zombie", 4156 | "zone" 4157 | ]; 4158 | 4159 | return exports; 4160 | }); -------------------------------------------------------------------------------- /src/passwdqc_check.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2000-2002,2010,2013 by Solar Designer. See LICENSE. 3 | * Copyright (c) 2014 Parallels, Inc. 4 | */ 5 | ({define:typeof define!="undefined"?define:function(deps, factory){module.exports = factory(exports, require("./dictionary"));}}). 6 | define(["exports", "./dictionary"], function(exports, dict){ 7 | var dictionary = dict.dictionary; 8 | 9 | var FIXED_BITS = 15; 10 | 11 | /* 12 | * Calculates the expected number of different characters for a random 13 | * password of a given length. The result is rounded down. We use this 14 | * with the _requested_ minimum length (so longer passwords don't have 15 | * to meet this strict requirement for their length). 16 | */ 17 | function expected_different(charset, length){ 18 | var x, y, z; 19 | 20 | x = ((charset - 1) << FIXED_BITS) / charset; 21 | y = x; 22 | while (--length > 0) 23 | y = (y * x) >> FIXED_BITS; 24 | z = charset * ((1 << FIXED_BITS) - y); 25 | 26 | return (z >> FIXED_BITS)|0; 27 | } 28 | 29 | /* 30 | * A password is too simple if it is too short for its class, or doesn't 31 | * contain enough different characters for its class, or doesn't contain 32 | * enough words for a passphrase. 33 | * 34 | * The biases are added to the length, and they may be positive or negative. 35 | * The passphrase length check uses passphrase_bias instead of bias so that 36 | * zero may be passed for this parameter when the (other) bias is non-zero 37 | * because of a dictionary word, which is perfectly normal for a passphrase. 38 | * The biases do not affect the number of different characters, character 39 | * classes, and word count. 40 | */ 41 | function is_simple(params, newpass, bias, passphrase_bias){ 42 | var length, classes, words, chars, 43 | digits, lowers, uppers, others, unknowns, 44 | c, p; 45 | 46 | length = classes = words = chars = 0; 47 | digits = lowers = uppers = others = unknowns = 0; 48 | p = ' '; 49 | while (c = newpass[length]) { 50 | length++; 51 | 52 | if (!isascii(c)) 53 | unknowns++; 54 | else if (isdigit(c)) 55 | digits++; 56 | else if (islower(c)) 57 | lowers++; 58 | else if (isupper(c)) 59 | uppers++; 60 | else 61 | others++; 62 | /* A word starts when a letter follows a non-letter or when a non-ASCII 63 | * character follows a space character. We treat all non-ASCII characters 64 | * as non-spaces, which is not entirely correct (there's the non-breaking 65 | * space character at 0xa0, 0x9a, or 0xff), but it should not hurt. */ 66 | if (isascii(p)) { 67 | if (isascii(c)) { 68 | if (isalpha(c) && !isalpha(p)) 69 | words++; 70 | } else if (isspace(p)) 71 | words++; 72 | } 73 | p = c; 74 | 75 | /* Count this character just once: when we're not going to see it anymore */ 76 | if(newpass.slice(length).indexOf(c) === -1) 77 | chars++; 78 | } 79 | 80 | length = strlen(newpass); 81 | 82 | if (!length) 83 | return 1; 84 | 85 | /* Upper case characters and digits used in common ways don't increase the 86 | * strength of a password */ 87 | c = newpass[0]; 88 | if (uppers && isascii(c) && isupper(c)) 89 | uppers--; 90 | c = newpass[length - 1]; 91 | if (digits && isascii(c) && isdigit(c)) 92 | digits--; 93 | 94 | /* Count the number of different character classes we've seen. We assume 95 | * that there are no non-ASCII characters for digits. */ 96 | classes = 0; 97 | if (digits) 98 | classes++; 99 | if (lowers) 100 | classes++; 101 | if (uppers) 102 | classes++; 103 | if (others) 104 | classes++; 105 | if (unknowns && classes <= 1 && (!classes || digits || words >= 2)) 106 | classes++; 107 | 108 | for (var min = params.min; classes > 0; classes--) 109 | switch (classes) { 110 | case 1: 111 | if (length + bias >= min[0] && 112 | chars >= expected_different(10, min[0]) - 1) 113 | return 0; 114 | return 1; 115 | 116 | case 2: 117 | if (length + bias >= min[1] && 118 | chars >= expected_different(36, min[1]) - 1) 119 | return 0; 120 | if (!params.passphrase_words || 121 | words < params.passphrase_words) 122 | continue; 123 | if (length + passphrase_bias >= min[2] && 124 | chars >= expected_different(27, min[2]) - 1) 125 | return 0; 126 | continue; 127 | 128 | case 3: 129 | if (length + bias >= min[3] && 130 | chars >= expected_different(62, min[3]) - 1) 131 | return 0; 132 | continue; 133 | 134 | case 4: 135 | if (length + bias >= min[4] && 136 | chars >= expected_different(95, min[4]) - 1) 137 | return 0; 138 | continue; 139 | } 140 | 141 | return 1; 142 | } 143 | 144 | function unify(dst, src){ 145 | for (var i = 0; i < src.length; i++){ 146 | var c = src.charAt(i); 147 | if (isascii(c) && isupper(c)) 148 | c = c.toLowerCase(); 149 | switch (c) { 150 | case 'a': case '@': 151 | c = '4'; break; 152 | case 'e': 153 | c = '3'; break; 154 | /* Unfortunately, if we translate both 'i' and 'l' to '1', this would 155 | * associate these two letters with each other - e.g., "mile" would 156 | * match "MLLE", which is undesired. To solve this, we'd need to test 157 | * different translations separately, which is not implemented yet. */ 158 | case 'i': case '|': 159 | c = '!'; break; 160 | case 'l': 161 | c = '1'; break; 162 | case 'o': 163 | c = '0'; break; 164 | case 's': case '$': 165 | c = '5'; break; 166 | case 't': case '+': 167 | c = '7'; break; 168 | } 169 | dst += c; 170 | } 171 | 172 | return dst; 173 | } 174 | 175 | function reverse(src){ 176 | return src.split("").reverse().join(""); 177 | } 178 | 179 | /* 180 | * Needle is based on haystack if both contain a long enough common 181 | * substring and needle would be too simple for a password with the 182 | * substring either removed with partial length credit for it added 183 | * or partially discounted for the purpose of the length check. 184 | */ 185 | function is_based(params, haystack, needle, original, mode){ 186 | var scratch, length, i, j, p, worst_bias; 187 | 188 | if (!params.match_length) // disabled 189 | return 0; 190 | 191 | if (params.match_length < 0) // misconfigured 192 | return 1; 193 | 194 | scratch = null; 195 | worst_bias = 0; 196 | 197 | length = needle.length; 198 | for (i = 0; i <= length - params.match_length; i++) 199 | for (j = params.match_length; i + j <= length; j++) { 200 | var bias = 0, j1 = j - 1; 201 | var q0 = needle[i], q1 = needle.slice(i+1); 202 | 203 | for (var k=0; k?", 284 | "qwertyuiopasdfghjklzxcvbnm", 285 | "1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik,9ol.0p;/-['=]\\", 286 | "!qaz@wsx#edc$rfv%tgb^yhn&ujm*ik<(ol>)p:?_{\"+}|", 287 | "qazwsxedcrfvtgbyhnujmikolp", 288 | "1q2w3e4r5t6y7u8i9o0p-[=]", 289 | "q1w2e3r4t5y6u7i8o9p0[-]=\\", 290 | "1qaz1qaz", 291 | "1qaz!qaz", /* can't unify '1' and '!' - see comment in unify() */ 292 | "1qazzaq1", 293 | "zaq!1qaz", 294 | "zaq!2wsx" 295 | ]; 296 | 297 | /* 298 | * This wordlist check is now the least important given the checks above 299 | * and the support for passphrases (which are based on dictionary words, 300 | * and checked by other means). It is still useful to trap simple short 301 | * passwords (if short passwords are allowed) that are word-based, but 302 | * passed the other checks due to uncommon capitalization, digits, and 303 | * special characters. We (mis)use the same set of words that are used 304 | * to generate random passwords. This list is much smaller than those 305 | * used for password crackers, and it doesn't contain common passwords 306 | * that aren't short English words. Perhaps support for large wordlists 307 | * should still be added, even though this is now of little importance. 308 | */ 309 | function is_word_based(params, needle, original, is_reversed){ 310 | var word, unified, i, length, mode; 311 | 312 | if (!params.match_length) /* disabled */ 313 | return null; 314 | 315 | mode = is_reversed | 1; 316 | word = ""; 317 | for (i = 0; i < 0x1000; i++) { 318 | word = dictionary[i]; 319 | length = strlen(word); 320 | if (length < params.match_length) 321 | continue; 322 | 323 | word = unify("", word); 324 | if (is_based(params, word, needle, original, mode)) 325 | return REASON_WORD; 326 | } 327 | 328 | mode = is_reversed | 2; 329 | for (i = 0; i < seq.length; i++) { 330 | unified = unify("", seq[i]); 331 | if (!unified) 332 | return REASON_ERROR; 333 | if (is_based(params, unified, needle, original, mode)) 334 | return REASON_SEQ; 335 | } 336 | 337 | if (params.match_length <= 4) 338 | for (i = 1900; i <= 2039; i++) { 339 | if (is_based(params, i.toString(), needle, original, mode)) 340 | return REASON_SEQ; 341 | } 342 | 343 | return null; 344 | } 345 | 346 | function passwdqc_check(params, newpass, oldpass, pw){ 347 | var truncated, u_newpass, u_reversed, u_oldpass, 348 | u_name, u_gecos, u_dir, reason, length; 349 | 350 | u_newpass = u_reversed = null; 351 | u_oldpass = null; 352 | u_name = u_gecos = u_dir = null; 353 | 354 | reason = REASON_ERROR; 355 | 356 | if (oldpass && oldpass == newpass) 357 | return REASON_SAME; 358 | 359 | length = strlen(newpass); 360 | 361 | if (length < params.min[4]) 362 | return REASON_SHORT; 363 | 364 | if (length > params.max) { 365 | if (params.max == 8) { 366 | truncated = newpass.substr(0, 8); 367 | newpass = truncated; 368 | if (oldpass && !oldpass.substr(0, 8) !== newpass.substr(0, 8)) 369 | return REASON_SAME; 370 | } else { 371 | return REASON_LONG; 372 | } 373 | } 374 | 375 | if (is_simple(params, newpass, 0, 0)) { 376 | reason = REASON_SIMPLE; 377 | if (length < params.min[1] && params.min[1] <= params.max) 378 | reason = REASON_SIMPLESHORT; 379 | return reason; 380 | } 381 | 382 | if (!(u_newpass = unify("", newpass))) 383 | return reason; /* REASON_ERROR */ 384 | if (!(u_reversed = reverse(u_newpass))) 385 | return reason; 386 | if (oldpass && !(u_oldpass = unify("", oldpass))) 387 | return reason; 388 | if (pw) { 389 | if (!(u_name = unify("", pw.pw_name)) || 390 | !(u_gecos = unify("", pw.pw_gecos)) || 391 | !(u_dir = unify("", pw.pw_dir))) 392 | return reason; 393 | } 394 | 395 | if (oldpass && params.similar_deny && 396 | (is_based(params, u_oldpass, u_newpass, newpass, 0) || 397 | is_based(params, u_oldpass, u_reversed, newpass, 0x100))) 398 | return REASON_SIMILAR; 399 | 400 | if (pw && 401 | (is_based(params, u_name, u_newpass, newpass, 0) || 402 | is_based(params, u_name, u_reversed, newpass, 0x100) || 403 | is_based(params, u_gecos, u_newpass, newpass, 0) || 404 | is_based(params, u_gecos, u_reversed, newpass, 0x100) || 405 | is_based(params, u_dir, u_newpass, newpass, 0) || 406 | is_based(params, u_dir, u_reversed, newpass, 0x100))) 407 | return REASON_PERSONAL; 408 | 409 | reason = is_word_based(params, u_newpass, newpass, 0); 410 | if (!reason) 411 | reason = is_word_based(params, u_reversed, newpass, 0x100); 412 | 413 | return reason; 414 | } 415 | 416 | function isascii(c){ 417 | return /^[\x00-\x7F]?$/.test(c); 418 | } 419 | 420 | function isdigit(c){ 421 | return /^\d?$/.test(c); 422 | } 423 | 424 | function islower(c){ 425 | return isalpha(c) && c.toLowerCase() === c; 426 | } 427 | 428 | function isupper(c){ 429 | return isalpha(c) && c.toUpperCase() === c; 430 | } 431 | 432 | function isalpha(c){ 433 | return /^\w?$/.test(c) && c != '_' && /^\D?$/.test(c); 434 | } 435 | 436 | function isspace(c){ 437 | return /^\s?$/.test(c); 438 | } 439 | 440 | function strlen(str){ 441 | var length = str.length, count = 0, ch = 0; 442 | for(var i=0; i < length; i++){ 443 | ch = str.charCodeAt(i); 444 | if(ch <= 127){ 445 | count++; 446 | }else if(ch <= 2047){ 447 | count += 2; 448 | }else if(ch <= 65535){ 449 | count += 3; 450 | }else if(ch <= 2097151){ 451 | count += 4; 452 | }else if(ch <= 67108863){ 453 | count += 5; 454 | }else{ 455 | count += 6; 456 | } 457 | } 458 | 459 | return count; 460 | } 461 | 462 | var REASON_ERROR = "check failed", 463 | REASON_SAME = "is the same as the old one", 464 | REASON_SIMILAR = "is based on the old one", 465 | REASON_SHORT = "too short", 466 | REASON_LONG = "too long", 467 | REASON_SIMPLESHORT = "not enough different characters or classes for this length", 468 | REASON_SIMPLE = "not enough different characters or classes", 469 | REASON_PERSONAL = "based on personal login information", 470 | REASON_WORD = "based on a dictionary word and not a passphrase", 471 | REASON_SEQ = "based on a common sequence of characters and not a passphrase", 472 | INT_MAX = 2147483647; 473 | 474 | var params = { 475 | min: [INT_MAX, 24, 11, 8, 7], 476 | max: 40, 477 | passphrase_words: 3, 478 | match_length: 4, 479 | similar_deny: 1, 480 | random_bits: 47, 481 | flags: 3, 482 | retry: 3 483 | } 484 | 485 | function check(newpass, oldpass, login, gecos, pms){ 486 | return passwdqc_check(pms || params, newpass, oldpass, login ? { pw_name: login, pw_gecos: gecos } : login); 487 | } 488 | 489 | exports.check = check; 490 | 491 | return exports; 492 | }); --------------------------------------------------------------------------------