Breaking the Playfair Cipher
Playfair defeated single-letter frequency analysis by encrypting pairs of letters through a 5×5 key square. But the same simulated-annealing idea that cracks the substitution cipher still works here too, once you swap in quadgram statistics and a richer set of moves.
Interactive Playfair Cipher Breaker
🔐 Playfair Cipher Breaker
Step 1: Why Simple Frequency Analysis Doesn't Work
Every ciphertext letter's value depends on which key-square letter sits beside its partner, not on a fixed one-to-one substitution. So unlike the substitution breaker's chart, single-letter frequency counts come out nearly flat and give almost no starting guess.
Step 2: Simulated Annealing Over Key Squares
Starting from several random 5×5 key squares, repeatedly nudge the candidate: usually a single letter swap, occasionally swapping two whole rows or columns, flipping row/column order, or reversing the whole square. Keep the change whenever it makes the decryption score higher against real English quadgram statistics. Sometimes accept a slightly worse change early on to avoid getting stuck.
Step 3: Recovered Key Square
The best-scoring key square found by the search.
Breaking the Playfair Cipher: Flat Letter Frequencies Don’t Mean Safe
Introduction
The Playfair cipher earned its long service record (Boer War, both World Wars) by defeating the one attack every earlier cipher on this site eventually falls to: simple letter-frequency counting. By encrypting pairs of letters through a 5×5 key square instead of substituting one letter for another, Playfair scrambles single-letter statistics almost flat. That’s exactly what let it pass for secure well into the era of mechanized cryptanalysis. The base guide’s own rundown of cryptanalytic approaches lists “digraph frequency analysis,” “pattern recognition,” and “probable word attacks” as real historical techniques, without spelling out a concrete, working algorithm for any of them. This post builds one.
The key square has 25! (about 1.55 × 10²⁵) possible arrangements, nowhere near brute-forceable, in the same league as the Substitution cipher’s 26!. That breaker’s answer to a keyspace that large was simulated annealing: hill-climb toward the highest-scoring decryption, using digram statistics and common-word matches as the fitness signal. The natural question is whether that same idea just transfers to Playfair. It turns out it needs two real upgrades to actually converge. Along the way, it also surfaces a genuine structural quirk of the cipher itself, in the same spirit as the Enigma breaker’s double-stepping tie and the Autokey breaker’s cascading collapse.
Table of Contents
- Why Frequency Analysis Doesn’t Work Directly
- The Attack: Simulated Annealing Over Key Squares
- A Genuine Playfair Quirk: Row and Column Permutations
- A Worked Example
- Python Implementation
- Interactive Visualizer
- Playfair vs. Substitution: What Actually Changes
- Limitations of This Attack
- FAQ
- References
Why Frequency Analysis Doesn’t Work Directly
The Substitution breaker starts with a real head start: count ciphertext letter frequencies, match the most common ones to English’s most common letters (E, T, A, O, I, N…), and that rough guess is already most of the way to a working key. Playfair denies the search that head start on purpose. That’s the entire point of the design.
Every ciphertext letter’s value depends on where its partner letter happens to sit in the key square, not on a fixed one-to-one mapping. The same plaintext letter, paired with different neighbors across a message, ends up substituted a different way almost every time. Count up single-letter frequencies in a Playfair ciphertext and the result is close to flat. Nothing like the distinctive E-heavy skew that makes ordinary substitution crackable by eye. The visualizer above renders this chart first for exactly that reason: watch it next to the Substitution breaker’s spiky one. The contrast is the whole story of why Playfair resisted casual code-breaking for as long as it did.
Digraph-level frequency counting doesn’t hand over a simple answer either. A wrong-length-Vigenère-style trick, assuming “the most common ciphertext digraph is probably TH or HE,” doesn’t hold up. The same plaintext digraph encrypts differently depending on which specific two letters it is, and how they happen to sit relative to each other in the key square. There’s no fixed lookup table to invert. What’s left is a search problem: guess a key square, decrypt, and score how convincingly English the result looks.
The Attack: Simulated Annealing Over Key Squares
The core idea is unchanged from the Substitution breaker: hill-climb through candidate keys, scoring each decryption against real English statistics, accepting improving moves always and occasionally accepting a worse one to avoid getting stuck. Two things had to change before it actually worked reliably against Playfair, and both were verified empirically while building this breaker, not assumed from theory.
Digram statistics turn out to be too weak a signal. The Substitution breaker’s letter-pair frequency table works well there because a monoalphabetic substitution preserves digram structure almost directly. Playfair’s key-square geometry mixes that structure up enough that plain digram scoring plateaus a long way from the true key, restart after restart, no matter how many steps it’s given. Switching to quadgram (four-letter) statistics, the same choice made by practicalcryptography.com’s own published Playfair cryptanalysis and by the handful of open-source Playfair-breaking implementations that exist, gives the search a sharp enough gradient to actually find its way to the optimum. It doesn’t just land somewhere plausible-looking nearby.
Single-letter swaps alone aren’t enough moves. Swapping two letters in the key square, the same move the Substitution breaker uses, reliably nudges Playfair’s search close to the right answer and then leaves it stuck there. That’s the exact behavior observed while tuning this breaker. The fix, confirmed against published implementations that hit the same wall, is a richer, weighted set of moves: mostly single-letter swaps, but occasionally something more structural:
- 90%: swap two individual letters
- 2%: swap two entire rows
- 2%: swap two entire columns
- 2%: flip the row order (reverse top-to-bottom)
- 2%: flip the column order (reverse left-to-right)
- 2%: reverse the whole key square
Letter swaps handle fine local adjustments. The occasional structural move lets the search relocate a whole block of letters in one step, something single swaps essentially never stumble into on their own.
Two more pieces round out the search this breaker actually runs:
- A deterministic polish pass. After each round of annealing, the breaker exhaustively tries all 300 possible letter-pair swaps against the current best square, applies whichever improves the score the most, and repeats until no swap helps at all. It’s cheap, just a few hundred extra evaluations, and it reliably mops up the last letter or two the annealing phase left slightly out of place.
- Multiple independent restarts. Any single annealing run has a real chance of settling into a strong-looking but wrong local optimum. This breaker runs 12 independent restarts of 150,000 annealing steps each and keeps whichever polished result scores highest across all of them.
A Genuine Playfair Quirk: Row and Column Permutations
Verifying this breaker turned up something worth knowing on its own: the key square the search recovers is not always byte-for-byte identical to the one used to encrypt, and that’s not a search failure.
Playfair’s row rule only cares about which letters share a row and their cyclic order within it. The column rule works the same way for columns. And the rectangle rule only ever asks “which letter sits in this row and that column,” a relationship that doesn’t care what numeric index either row or column happens to carry. Reorder the five rows of a key square as whole blocks (keeping each row’s own internal letter order intact) and every single digraph still encrypts and decrypts exactly the same way. The same holds for reordering the five columns as whole blocks. The key square’s labeling of which row is “row 0” is arbitrary; only the relative structure matters.
This breaker’s own test runs confirmed it directly: searching against a demo ciphertext built from the classic keyword MONARCHY (key square MONARCHYBDEFGIKLPQSTUVWXZ), one successful run recovered UVWXZMONARCHYBDEFGIKLPQST instead. That’s a different-looking square whose five rows (UVWXZ, MONAR, CHYBD, EFGIK, LPQST) are exactly the true square’s five rows, cyclically rotated. Side by side:
| Row | Canonical (MONARCHY) |
Recovered |
|---|---|---|
| 1 | M O N A R | U V W X Z |
| 2 | C H Y B D | M O N A R |
| 3 | E F G I K | C H Y B D |
| 4 | L P Q S T | E F G I K |
| 5 | U V W X Z | L P Q S T |
Same five rows, same internal letter order within each row, just relabeled which one is “row 1.” Both decrypt the ciphertext to the identical plaintext, letter for letter. It’s Playfair’s own version of the ambiguity this site’s other breakers keep running into: the Enigma breaker’s double-stepping tie, the Autokey breaker’s cascading corruption. It’s a genuine property of the cipher, not a bug in the search.
It also means the effective key space is smaller than the nominal 25!. Permuting 5 rows and 5 columns independently gives (5!)² = 14,400 behaviorally-identical squares for every one distinct cipher, bringing the real count down to roughly 1.08 × 10²¹. Still utterly out of brute-force range, just not quite as astronomical as the headline number suggests.
A Worked Example
Using the visualizer’s default ciphertext (740 letters, keyword MONARCHY):
-
The search runs 12 independent restarts of 150,000 annealing steps each, polishing the result of every restart before comparing.
-
5 of the 12 restarts converge to the exact same score, -5051.24, the global optimum. The other 7 restarts land between -7425.81 and -7690.63, at least 2,374 points worse. There’s no ambiguity in which result wins. The gap between “found the real key” and “didn’t” is enormous and unmistakable, sharper than either the Enigma or Autokey breaker’s margins.
-
The winning square decrypts the ciphertext to a coherent passage: the one this article uses to describe its own attack:
“The Playfair cipher encrypts pairs of letters instead of single letters by looking up each pair inside a five by five key square built from a keyword. Because every plaintext letter now depends on which letter sits beside it, the usual trick of counting how often each ciphertext letter appears barely helps, since that single letter frequency distribution ends up almost flat, which is exactly why this cipher held up so well against casual code-breaking for decades…”
-
Note the two inserted
Xs in the recovered text (LETXTERSfor “letters,”BECAUSEXbefore “every”). That’s Playfair’s own filler-letter rule for doubled letters inside a digraph, exactly as described in the base cipher guide. They’re a normal, expected artifact of the encoding, not search errors.
Python Implementation
The interactive visualizer above runs this exact pipeline in JavaScript: same quadgram table, same weighted move set, same polish pass. Here’s the same attack in Python.
Key Features
- Same two upgrades as the JS breaker: quadgram scoring via
quadgram_score, and the weightedrandom_movefunction mixing single-letter swaps with occasional row/column swaps and flips. These are reproduced faithfully, not simplified, since the “Attack” section above is specifically about why the simpler versions of both don’t work. - Exhaustive polish, not just annealing:
polishtries all 300 possible letter-pair swaps every round, matching the same steepest-ascent cleanup step the visualizer runs after each restart. - No shortcuts on restarts:
break_playfairdefaults to the same 12 restarts × 150,000 steps the visualizer uses. This is pure Python with no array-level optimization, so budget several minutes for it to run to completion, unlike this site’s smaller brute-force breakers.
Code
# playfair_breaker.py
#
# Breaks a Playfair cipher via simulated annealing over 5x5 key squares,
# scored with English quadgram (four-letter) statistics. The key space
# (25! ~= 1.55e25) is far too large to brute-force, so this borrows the
# same core idea as the substitution breaker -- hill-climb/anneal toward
# the highest-scoring decryption -- but needs two upgrades to actually
# converge: quadgram statistics instead of digram statistics (digrams
# turn out to be too weak a signal here), and a richer move set that
# occasionally swaps or flips whole rows/columns, not just single
# letters (single-swap moves alone reliably get the search stuck near,
# but not at, the true key square).
import math
import random
import re
ALPHA = 'ABCDEFGHIKLMNOPQRSTUVWXYZ' # J is omitted (merged into I)
# Top 8,000 English quadgrams by frequency, out of ~341,000 total, computed
# from the same public-domain corpus as practicalcryptography.com's own
# quadgram statistics resource. Stored as a plain concatenated
# "CODE+count" string -- a 4-letter code and a digit-only count are
# already self-delimiting by character class, so no punctuation is needed
# between entries. Truncated to the top 8,000 purely to keep this file a
# reasonable size; the search below still converges reliably from just
# this subset.
QUADGRAM_DATA = "TION13168375NTHE11234972THER10218035THAT8980536OFTH8132597FTHE8100836THES7717675WITH7627991INTH7261789ATIO7104943OTHE6900574TTHE6553056DTHE6470280INGT6461147ETHE6135216SAND5996705STHE5748611HERE5630500THEC5466071MENT4968019THEM4911484RTHE4862875THEP4458634FROM4361347THIS4344608TING4291641THEI4217321NGTH4162753IONS4045101ANDT4020364ONTH3976144TOTH3911094EDTO3886447THEF3873133THEY3809433HAVE3735139EDTH3699013INGA3675933NDTH3619148THET3597105OULD3545483ORTH3527649EVER3497988THEN3493040IGHT3484797EAND3469701ATTH3465933THEB3427984OVER3423259DING3292159IONA3238994GTHE3206535FORT3183884THEA3166891RING3085444ALLY3058124ANDS2964994EFOR2911043INGS2907686EDIN2898263ANDA2846852THIN2846753OUGH2836766WERE2833510ERTH2823153YEAR2760359WILL2730404THEL2685880SAID2672546HEIR2630839NTER2617394ENTS2616976ECON2602363NING2595587COMP2558839TAND2556578SION2544046TIME2541680OUND2540743FORM2531586NAND2512199LAND2500203THEW2495941KING2486033PORT2481535YTHE2479794HTHE2474333HECO2463161ATED2450352ANDI2435091THED2432283INTE2421896HING2415926NGTO2346029SOME2318831THEE2296331ALSO2272179ENTI2266151ONAL2251550CTIO2238788MORE2226699ANCE2222056EWAS2221574STAT2193875SIDE2178067PART2177409THAN2172227STHA2147392EOFT2146633HESE2140673SARE2136673THEO2122303RAND2121925CENT2100779EDBY2089468THEG2079308PLAY2076384ENCE2070719HICH2066009SING2058168WHIC2056153CONT2051639EVEN2044936AFTE2010597FTER2003476WHEN1998236MBER1995047ESTO1978644INGI1961244ICAL1957590NDER1950266TIVE1949528PRES1942885COMM1940274INGO1932406ABOU1931491IONO1920745STAN1918197HEWA1911604ASTH1910727SFOR1907495IRST1904773INTO1902177ECOM1898652BOUT1883527ESTA1871911DENT1867605WORK1861950HATT1855838ABLE1853875OUNT1851478TOBE1850003REAT1842708INST1834447HEST1826166NDIN1824758DAND1823795ETHA1820247TERS1819470FIRS1819270WOUL1816261BEEN1805388THTH1803360ITHT1802652ESTH1794688HESA1789360SINT1784676ESAN1784502TURE1774845VERS1761482VERY1752004ONOF1741624TWAS1737095RETH1732151YAND1728503STER1721754COUN1720141THEH1713125LING1706713SOFT1704206FORE1703219ENTA1699782STOR1697886CONS1692766TATE1684321ITIO1682234ATHE1679355ITHA1678384ENTH1674269EARS1674228TEDT1672432ATES1671091HEFI1669464ERAL1663096ATER1658140ERIN1647306NATI1646197ERES1646142LIKE1645573RATI1639591EINT1637991NGIN1629144UTTH1626574ANDW1617469ROMT1612822REST1611309ESTI1602216UGHT1598911ERED1592912ANDC1591317ANDH1584076THOU1575289MTHE1570742ASON1557925ECTI1554504EMEN1547678ERAN1542995CALL1542368ERSA1540494WHAT1537708DINT1534038NTIN1533224WASA1521114LATE1517775EREA1502648ALLE1498817DFOR1498486CIAL1496185TOFT1493341UNDE1492863ERSI1490158ANDE1489807ENTO1480948ILLI1474587ERAT1472424ERSO1462656NFOR1460850RENT1450481ESIN1448933SERV1448589RATE1446541STRA1442405BECA1441510CHAN1439212MOST1438813ANDO1434745ANGE1433384ITIS1428100GAME1413581EARE1406547ICAN1405493BACK1405245RECO1403742OMTH1397332HEMA1391989VING1386608IDEN1383820IVER1382092HEPR1379329VENT1378744RESS1376015REAL1373867AREA1371458OINT1369665DTHA1365459STAR1363805HAND1354970EACH1350272ENTE1343108RIES1335429OPLE1323708EROF1318205COME1317743ANDP1315447AINS1313653EDAN1309134INES1308946EPRO1307814ISTH1306902EDON1306416THEU1306228FORA1303370ONLY1303135GAIN1297562ARTI1296805HERS1296238RESE1296098SWIT1294553INGF1294255SPEC1293633ANDM1293038EOPL1292222TTER1290823PEOP1290562THRE1290472DWIT1289963KNOW1288808ERST1288580INAL1288381EMBE1283314INAN1282357SINC1279484ACTI1277906STIN1272931LONG1264155AUSE1263485CAUS1253323VERA1252583ESOF1250232EREN1249439FFIC1246165INGH1245879LINE1244889VERT1244237THRO1239338ROUG1236673YING1235516EASO1234486ANDR1231102IONT1226708LLOW1218687URIN1218178ONAN1217217SWER1216771HIST1212167ROUN1208483CESS1208310BYTH1205765TAIN1203509ETHI1202933SCHO1202417LECT1202081ATIN1200538LAST1199613ONST1199002SNOT1195698YOUR1194475REAS1192018RICA1185515NGAN1180633CHAR1178631ESSI1175244HIGH1170524TORE1169727COND1169174MANY1162938IONI1162499TERT1159942ONTO1157438TFOR1156596TEAM1156191HEMO1153252CTOR1153219HATS1152311TAKE1151598EPAR1146846DERS1145928LATI1145577NAME1145492ORMA1145460ANDF1143755SEAS1141342CHOO1140139UNIT1137054HENE1136900OUTH1136709LLIN1133017TERA1132451FFER1132285HATI1130043EPLA1129006NOTH1128390WELL1124457ALLO1123307TIES1117015DONT1114470TERN1113295PROV1111766INGW1111745RACT1111263SEVE1107565ONSI1107532USIN1103635NESS1101247WHER1093648CHIN1086159LLED1086147ITWA1085399MAKE1084610INGC1083696ENDE1082242SSIO1081298AGAI1080316RESI1080184POIN1078898POLI1077325SIGN1077199EDWI1073054OWER1072176NTOF1069820OUTT1066713CTED1065574DOWN1064961MAND1061275EFIR1060749SHOW1059043EWIT1057301TATI1055867EPRE1055185STRI1050277ARGE1049660HOOL1048757OFFI1046599CREA1046376RFOR1045762ISTO1043207MPLE1042473HECA1042403ECAU1041538ANDB1040570TEST1038285ATTE1037532HELA1037227FERE1036911ATUR1035140LAYE1035020HERA1034185TURN1030325NTHA1029560SENT1029164RTHA1028595METH1023960LTHE1023518APPE1023319COUL1022978SECO1022624WAST1021947USED1020459EASE1018866EWOR1017076ILIT1016662ORET1014721NCLU1014356OUSE1013530ALTH1013296INED1012296UBLI1010170EAST1010081IOUS1008946OMPA1008219OPER1006891ERTO1005645ONTR1005452ANDD1003476HATH1001520HOWE1000854INCL999134OMET998665EING997998EVEL994339HEHA993952STRE992953PERS991550HETH991522BEIN990614SHIP988418TORY986800HOUG986072INCE985675NTOT985616HEWO985283TEDA985062HOSE984347AMER983492ESTE983134MAIN982912EDFO982639ISTE978544HEAR977695ECOU977384PUBL977275TINT976998INGP976226RMAN975603ESTR975031INGL971985CLUD971923LACE970783HEDE965888EARL964297INDI962230CATI958962NDED958694ERIC958584TTLE955989HOUS954540CAME954135LEAS952946ONIN952752ENER950939ONEO948987RSON948659READ947103HEIN946407GAND944505HROU943587WARD941311ESSE940493TERI938496LITY937945EATE937864HREE937263WING935975PLAC934972TART934952ESID933920EXPE933792FORC932108GROU932038HEAD931609CORD931083OWIN930092STOF930023HERI929568BEFO929506ISTI926564PLAN925437HILE924953HATW924847DURI924442SOUT923939TTHA923833ISHE922312WHIL921043DITI920330ESEN919874AMES919873ANDL918600RECE918150HOME916835EDAS916610LESS915764HISS912143NINT911927SFRO911881ODUC910520RODU910277MEAN908002CITY906015ENTT905488ERVI904845OING903926ARTE903798NEOF902480FINA901889ISTR900560ISCO898284ARCH898233ININ896839EALL894740ESAI894501HEBA894451WORL893791MING891799ASSE890585NMEN890406NTED888714NDRE888517WEVE887299INGE887174FOUR886653INGB886547ANIN885369ONSA883984HERO883718SHED883116ERFO881627TERE878104RIGH877847ILLE874214HEPA871438NERA869691SIST869376LEAD869140STRU868622HEDI868517ARDS868032ASED867037IVES866924ITED866837MARK866238ARLY865234ASSI863503MERI863422AREN861675ORLD861177BUTT861155INIS857935OURS857791ONCE857035MEDI854628ATIV853230TSAN851747ENIN851357NEED851094ARES850611ASIN850136ATCH850058MADE847016VERN846808ICAT845339STUD843876DEVE843522LLBE843417PECT843412REDI842726NALL842196EDIT840952HEAL839490BALL837896NNIN837493ULDB837288NGER836784HANG836602GREE836348NCES835273LLTH834676RDIN834494EART834430CTIV834085GOVE832621ERMA832280ELEC832154AMIL829534ESEA829048RIVE827118SCON826453LDBE825826INAT823798NTTO823180TILL822687ITHI821434ENTL820661ENTR820028GOOD818735AINT817185SETH816841TORS816437TWEE814938EMAN813859IONW813535OMIN813476TICA812574INGM812460ALLT811759DHIS811139TEDI810869VISI810762LION810350ETIM810243ERET809649SHOU809516ELEA808794TENT808513SHAV807822ORDE806848ERSE806730NDAN805285VETH804375NTRA803278ASTE802441HEIS801178RIEN798453AVET798089TERM798088ARRI797482ESPE796481GENE794619THEV794492OGRA794344TRAN793747COLL792896RSAN791930ELAT791658EREI791414ILLB791012MISS790619WANT789032VEST788289HEPO787853VIDE787070MONT785313HERT780922DTOT780815OWEV780683SITI780488HEBE779293RITI779061PERI778764OLLE778560SUPP778517COUR775717VICE775699HENA774827ECTE773724NTLY773145ENSE772933HEMI770993MPAN770702STIL770686ERIE769815SEOF768175LEAR767830SONT767667WEEK766068AKIN765701ECHA764682LISH764499BLIC764417ECOR763055ASBE762447TYOF760948NIST760688ISTA760180ONSO759125LOCA758979ITIE758752ETER758521NOFT758122AYIN757940UALL757870LIVE757583LOOK757441ITAL756095PROD756038ORME754828TANT754818THOS754252DIST752794IMES751601NDOF751115LYTH750761REDT749433ISIN749328SONA748704TOCO748071TORI746197REIN746032MEMB745866PECI745611REMA745382ARTO744074TSIN743014ISSI742525SEDT741284BOTH740387NSTA740242ERNA739769HINK739742SURE738814ERSH738421LETO738365TABL738206TOMA737967EHAS737805DIFF737505AYER735828TRAC735394ULAR735297BUIL735108STTH735057ANTS733854HATA732912RAIN732821NEDT732566LITI732516MATE732508LLIO731449YFOR731341HECH731329TALL729176EDAT728973ESSA728671TRIC728513SAME728014PERA727806GHTH727642ORDI725616BUTI725177TREA724789NHIS724574MUCH724183LIST723535ICES723102REVE722117MANA721865RANC721603OURT720508ONES720283EMOR719542MOVE719363TRAT718681SUCH718280ERCE717595TRAI716028BASE714858HEFO714820ARED714432NEVE714087TWIT713369ATOR711887GOIN711292TSOF710558SELF710103HENT709802RECT708410GREA708363NCET707916RENC707316CARE706877THAS706509STRO705635CHAS704941AAND704810OMAN704728VELO704001STED703407TSTH702849OUTO702834ENSI702704RSTO702359ERVE701979RINT701951NDCO701759EFRO701096ASAN700718ALLI699950TTIN699899INCO699198ESHO699063FAMI698400TSTO698247ANOT698205OFFE698190EMAI697613LASS697204EENT697048ETTE696464HISC696400WEST696374ALIT696027DBYT695948HOUL695509ACCO695208NGOF694856OMPL694572RTER692713HISP692441TOGE692377NEAR691815SIVE691197TEND690309INGD689798RTED689287YSTE688393GIVE688253HETO688136ALON687872GEST687831ISIO687715EATH687274OWTH687169CETH687142RANS686028NTRO685530TEDB685496EDHI685448CEOF685271DINA684943AINE684513SCOM684219ISNO683973EFIN683749HELP683380ETOT682693RDER682581AVEA682487ORTA682305RESP682065ILLA681450SOCI680245INDE679690INGR678824RTOF678406FOUN678236ITHO677669ENTU677586HASB677399SSIN676913NDIT676584SHES675771ROMA675502DNOT675469OGET675232HISF675038IELD674589NDSO674425DOES674349RIST673820EUNI673148CHIL673123ROVE672544IESA672491NTTH671847RSIN671269ONSE671204SPRO670834EREC670354SBEE669930MILL668898LYIN668062PPOR668025NTSA667533STON666435HEME665834ERRE665678NWAS665603OMES665537ROFT665504ORES665184USTR664907SALS664813URES664335ARIN664047OLIC663033TMEN662993ECAM662562ROVI662359MINI662322ETWE662278RELA662015HESO661759NGFO661337EIGH661249NSTR660898HEUN660673SONS659537CATE659234ESER657537DUCT657034HEEN656630EYOU656545ASTO656479NORT656235LDIN655806ALAN655785LIFE655334SSES655053HELE654479ERSW654431HISW654125BLET654021ALLA653208STIC652763RALL652414MUNI652270NTHI652141MATI651722ONTI650736STOP650514ITYO650393OPEN650155ARKE648697PERC648243EATT647683ISON647451ITIC646549NSAN646104CHES645447DEDT645362ALIN644376MALL644138ASTA644037ORCE643310UEST642113LOWE641632WEEN640619TRUC640382ANTH640196HASA639774IDER639593AKES639553ITTE639330ACHE638921IVED638877STEM638623DEFE638159DERA637452VEBE637396ULAT637394REPO637338ENAT636759ESAR635982IFIC635759DAYS635317POSI634278IREC633394UMBE632936RNIN632864UNTI631961NDON631437CONC631326STOT631222EPOR631002ORAN630606BECO630597ESSO630148ERNM629840ARET629777TUAL629662RNED629486OMEO629033ENEW628934ANTI628801NDST627935LARG627836ESAM627649OSIT627046OLLO626894UCHA626348EALS626307BERS626197PROG626017ARTH625984OREA625586ANDN625272PING625193RELE625131PROB624899ALLS624816ALRE624686TTHI624455CONF624044RSOF624021INIT623717ROGR623505ERCO623389BETW623197OFHI623129ANDG622983ROAD621871EHAD621626NTAN620660RSTA620558HISI620556TONE620524CHED619847SONE619810FACT619149HEFA618465GFOR617512PASS616913NGWI616865NATE616254WASS615133ATEA614770MINA613582EWHO612266HILD612146SINE611815ELIN610829HETE610582DFRO610220COVE609431ROPE609361SHIN609328AROU608136URRE607758ELLI607612IBLE607595TIST607242ESEC606818RESU606718NGON606646SEAR606266NWIT606036DISC604649EBEE604459ROUP603458EALT603434PROP603355ISSU602442ETUR602388ECEN601985SWHO601020LIGH600834POWE600424ESPO600419RNME600358UPPO599898NTEN599546UCTI599295LOSE598757AVEB598365TIAL596712HESU596262EQUI596037REAR595955AVER595740CANT595734LEAN594971UTIO594951HETR594740TOWN594473DIDN593387SERI593049NEXT592494PPEA592321ORAT592082ITIN591988ACHI591971HELO591813ONIS591787ISTS591520INFO591389NDAR591119PEAR590608FICE590105STEA590051HEGR589612BILI588945ANAN588788EYEA588737PLET588464RTIC588292ENOT588007LEDT587934YINT587681TETH587491GING587248IENC587052ETRA586801LETH586799RAGE586568ICIA586179ALCO586084KETH585491GRAM585066ORTS584799EDIS584693OCAL584293FIEL584146RVIC583992ATHA583331DIRE583326OTHI583095BEST582850NAGE582488PARE581953UNTR581171PEND580659MMUN580335DONE579803OFCO579718UNDA579570HOUT579538OSTA579513ELOP578952ESST578803ORIT578716SSED577989ORTE576910FECT576759OLOG576343TELY575294HESI574677ANTA574381LICA574292NUMB574257OACH573934ECTO573930AINI573839NSIN573485HALL573402SHAR573401OSTO573328ORED573032UTOF572999ECAN572035CAND571919OMMU571858IFFE571656BAND571424ESON571412SYST571183NGRE570944EREW570711SHER570625ANYO570528VETO570047PERF569951CLOS569890NSID569775REDA569674ALIS569344HARD569303GHTS568865EENA568706ORIN568697VIEW568655ATEL568240FICI567700REQU567670PRIN567537NTST567342ENAN567105FOLL567082IEVE566924REAC566680TTEN566545RADI566500NALS566462REAN565691HEBO565620WAYS565425NCEA564788DSTA564211HEHO564144NSOF563939IENT563922ITHE563905SCOR563904ROWN563784ETWO563585CCES563519RITY563421EADE563256TUDE563022NIVE563016IFTH562843REME562827IEST562487EMON561904NGST561479FORS561212ESHA560524YOFT560370NCOM560027OMEN559905EOFF559675ANAG559387ENDI559243NERS559193YTHI559128REPR559125ESIG558994HEYA558933EMIN558676TEMP558667HESH558175VERE557923WASN557705NDHE557190HELI556179HEDA555765CEAN555629ONSH555546RCEN555338SWAS555050TOSE554963NIGH554392DUCE553705EWER553067TCHE552869RSIT552795RTIN552337TERR551842NDIS551715EWIL551437LDRE551140DOFT550746ESHE550355ELIE550056RENO549584ETIN549509TOTA549154ADIN549064SPLA548707RESO548605FHIS547901ERHA547666ELLA546545NCER546117NITY545918ATIS545537TEVE544490ASAL544331IDTH544076NSTO543965RSTH543636NOWN543028FORD542828SWHI542306ISIS541764ECIA541640ISLA541487DERT541302ERIO541138HEYW540174NGLE540045GWIT540000IRED539950CURR539137ERTA538776EDST538088TAGE537994GETH537681IONF537442ERIS537240LOVE537217ILLS536888NDMA536761ENDO536269AYTH536097NDTO536014HISA535943CEPT535713ASSO535629LEVE535272LLEG535019RREN534819AGES534450EMAR533305YARE533257REIS532761CLEA532657ASHI532488IVIN532298NGHI532287REET532212DTOB532193STIM532120DWAS531932EPER531835FORH531791FREE531469NTRY531110NCON530864BERO530355FIND530305AMET529910AIDT529826OFIN529661SWIL529353RCHA528811EONE528428TEDS528390AVIN527360EQUE527196EDFR526567LUDE526495SITY526321CANA525249NITE524689FALL524680REEN524503GETT524210RMIN524099RYIN524040CLAS524035EBUT523892HEGA523693TRAD523663ONTA523656LEFT523517NDHA523320EDUC523189QUES522944SPAR522859NEWS521403OURC521399ANTT521104INGU520925ONTE520524OUTS520420MEOF520300ADER519703HENO519640HETI519585AMON519562DESI519524SAYS519296UNIV519057EISA518892NSTH518306LEOF517776DEST517552NISH517015RKIN516113ICUL516044SPRE515944URNE515797ESWI515421METO515255ENDS515058UILD514896TINU514258TWOR514110EARN514075UTHE513889OLIT513656RIAL513480YERS513394SBUT513296INVE513235MONE513058CTUR512680YONE512476FULL512471BOOK512465THAV512376INTS512073KAND512048EEND511759RONT511369EREP511219NCED510412REOF510357EGAM509288IATE509208OVED508551FEAT508275OPUL508217IALS507957RTAN507655NOTA507131RUCT507127ONEY506971ERMI506812BUSI506684HISM506671ANBE506475HEPL506031ARAN505851NCRE505375ASRE505246OFTE504534REGI504428ITHH503780HATC503721INNI503690MILY503609NTIL502685PULA502347NITI502290RMAT502221ISAN502016ANTE501811DIVI501698KILL501202RETU499787NTON499737IALL499643POSE499635PTIO499235OUTA499056NDWA498491EWHE498473ERWA498093ELAN497944ASWE497160WTHE497101EARC496535ATTA496479HENI496316CAMP496059NTAL495906TYEA495630CULT495548GINA495097DOUT494824ANSA494782ROSS494729ONOM494622ATET494412HEAT494230CIDE494226LEGE494103SHOR494004ITSA493655EGRE493541CKIN493354WRIT493131TELL493083ERWH493001TOFI492945IANS492642STHI492486OCIA492335DECI492308BILL492217INHI491946SULT491862LICE491549SITE491224TERO490857URCH490218ESTS490159NDEN490086CROS490074INNE489627SPER489501ONFO489462NDSA488934NOVE488807ICHA488762HADA488428OHAV488363ISSE488328PANY488193GTHA488170SIBL488087UDEN487921RANT487555BELI486771SOFA486734EMOS486629ESFO486584EHAV486275NSHI486088THEK486061BERT485814ICHI485709ACKS485462YTHA485227ASTR485054FRIE484994SWEL484692NCEO484348OUNC483991GHTE483861RELI483763GEOF483258GINT483227TECH483109TCOM483058ESCO483006ANCI482378UDIN482358AGRE482151POPU482087ESOU481689ENTW480885QUAR480877ECRE480393ONDE479782TOHA479528NGCO479200EREM479070STOC479067MODE478843DCON478565RKET478032HEGO477980TOUR477493SPON476992LEST476691ISAL476616SMAL476460ISRE476190WATE476168SINA476097REVI475930RNAT475915LACK475564APPR475155ORGA474976DRIV474922TOPR474920DATE474314APER473835USET473336RADE473167TOFA473038REFO472874HEDO472580OMMI472488URSE472455CANB472352ANTO472199ANIS472112NWHI472044TROL471945LITT471235TYOU469955TREE469818EALI469684IDEA469624ECTS469585LEIN469566SCAN469373OWED469207AYED469093ROTE468850SWOR468577GANI467582ULDN467562SSTH467440OMME467425NTRE467412IMAT467147CASE466666NDHI466285SDAY465986GRAN465927MUSI465874USES465785OTHA465664LUDI465363URTH465011EARA464953OWNA464738CING464665PTHE464561HESC464430OSED464299DICA464274AVES464085RYAN463765RANG463408THIR462605HAPP462336IONE461817KERS461635RIED461573LLEN461122EHIS461011RMER460965USEO460785YOUN460777USTO460596INDO460003ITHS459537ADDI459494FACE459095RGAN458939CEIV458835SUCC458533MILI458475EWHI458356HAST458242NFRO457971OVID457929URED457321EREL457155MPOR456871DHAV456847AMED456624CORE456507EDIA456300IEND456256EINS456097SOFF456072ORTO456056SLAT455996EFEN455967CONO455953EADI455716INCR455678HEPE455289SATT455214TARY455186ALWA455073OWNT454499ASNO453566PAND453531MMER452757ECUR452476SPEN452185NTAI451695OCAT451691NTIO451664SEDA451645ETOP451534SMAN451409TRON451295HOLD450841NDAL450390CEIN450217HONE449816NEDA449787SEST449771EHEA449695USIC449515AMEN449424SCRI449399UCCE449326SWHE449061ARSA448724ASHE448599LOWI448429TLEA448166HEUS447883HARE447874WASH447597SPIT447392WENT447073HEWE446942HEWI446662AWAY446318ANAL446312BLEM446282IMPO445887FYOU445843OSSI445393TICE445315LLER445292FINI445278IZED445089HATM445074FIVE444490LETE444406NDSE444319GERS444264AMEA443941SIMP443391CHER443301OFIT443146DERE443007ECEI442689DEMO442597BLIS442522NTUR442264NTIA442256EINC442055HESP442013ONGT441999PROF441691STIT441528ERWI441302KTHE441240ACTE441222NTRI441129TRIE440902ALES440788LTHO440513NTOA440284ONCO439986AREC439656AREE439395IONC439152EEVE438898EYAR438387PROC438348IDES438016EPUB438005TCON437581OESN437331EATI437182DHER436824FENS436532DOTH436299REMO436144SLIK435959ANNO435797IDED435794SCOU435781CIEN435633POSS435545ASSA435367NANC435329GHTT435255OPPO435235ITTL434754CONV434361SPOR434067EDIC434015AUGH433471TRAL433392NSTE433020HECI432615FRAN432243VILL432223STOB432188EOFA432092TOST431835WHOW431825DITS431468PPRO431451RONG431187YOUT431078PARK431054BETT431046EOTH430847DPRO430725OREC430677ELLE430199ITCH429868SHEW429717OFAN429290TITU429235EOUT429191SABO429034ASMA428552COMI428403ONNE428324XPER428200SSTA428077USTA428070PLEA427991ECIT427796UNDS427629ARTS427208ORKI426969UTIN426091ANNE425889TICI425648KEEP425390DREN425007TISA424959SHAD424896POST424172ERTI424070PARA423685RACE423605IVEN423134EPRI422946OURN422546BREA422154ICKE422110ASCO421766ONWI421633ONET421487ERNE421211ORSE421044ITYA420752LANT420703EIVE420569HERW420536NGAS420451HEBR420202ORRE419542OBLE419425ARAC419346PPED419006TERW418933RTHI418931OREI418611WASC418583ETIT417985TICS417751YWIT417426RMED417230DRES416803ISED416477TOOK416444ONED416149OCON415326SETO415112HEON415079SSUE414888HEOR414857TTOT414689YWAS414439RYTH414375ETTI413915HERC413786NOTE413739ELAS413720SHIS413582ESCH413382ULTI413330MSEL413255ORKE413156OMPE413135IONB412818CHAM412603RWAS412562QUIR412508ITYT412387ESWE412323ABIL412049ERAG412006TFRO411932HAVI411867LWAY411207ROCE411113CKED410929ETEA410479NCEI410197AVEN410178LOCK410151ORNI410148LYRE410109SOTH410038WASR409708CERT409611REFE409212CANS409134ONWA408658ERHE408636UTHO408559MEST408334OARD408082CHRI407891ITOR407812VERI407719TWIL407658FIRE407467NVES407378HRIS407368ETTH406618DSTO406559ONAT406332SEDO406328CULA406313PONS406231MEIN406221TODE406219AMIN406214BOAR406173RITE405893ASES405640EREF405429IVEA405403ERSC405381HORT405368NALI405202SSHO405165NETH405032NDFO404972TACK404924RERE404615DIAN404489RIAN404320TRIB404176ATIC404114TOHI403993TIRE403984ILDR403935ORMO403807NSON403666TEDF403477ISIT403358STOM403340INHE403330NOMI403283RCHI403265LIEV403151EWIN403032OUNG402978RIOU402856UNDT402688IKET402553EADY402371STAL402188OTTO401923ENED401915TPRO401821OBER401811IESO401775COST401756ANAD401714FFOR401559TONT401512NDAT401357CETO401323LLAS401303LENT401038OAND400964INEA400733DTOA400271HADT400231INSI400129ESIT399777UNTY399709LINT399590FFEC399569SFIR399554INUE399494AGUE399414ORTI399413ARDE399347EMPL398885SEEM398866MERS398777ESUL398741IMPL398723MITT398557TODO398534IDEO398452TEDO398320NTSO398212REHE398141LIES398104INDU397863RESA397731ASTI397729SEDI397722STEN397612FICA397498RRIE397410LLOF397388ONWH397259OWNS397138ACCE397069DSAN396674FTEN396563OPRO396521SSUC396479RWIT396460ATIT396265NSTI396148NCOU395931TANC395823SHEA395798IVEL395516AGEO395436TALI395125TODA395002NPRO394922DTOS394643ICLE394588ECAR394151EONT394123ETHR393962TOAN393950ACTU393744HANT393728ESWH393689LESA393554DETH393521ULDH393176OTAL393165WASI392891HIRD392783ERPR392741LLAN392680RETO392364ESNO392271NGAT392154DSOF391866ANST391802LEAG391576HITE391574STAB391418LDER391402ONEW391250LIAN391250RICE391134RICT391099AYBE391023EASI391022NOTT390751ENDA390691OWNE390383PANI390345THOR390157APPL390116GRAD389973YHAV389753OMAK389749DCOM389512DEAL389332INMA389040DISA389011REWA388993SECU388987EFER388254EARO388232INSO388193HARA388069ENTF388062IMPR387321SINS387282BANK387277EARI387165PROM386873ANEW386816HISB386674EONL386413NNER386328VICT386323IATI386161ONSU385955TITI385720ERBE385697EFOU385207MOUN385169NYOU384963HEBU384914OMEA384909FOOT384773RSHI384687NDUS384259NDPR384026DTHI384020SPRI384002SALL383967HERN383854CHIS383646HAMP383267NDLE382966BATT382653ILDI382644CAST382574PROT382433TSTA382419EUSE382370ALST382236ROBL382207ESCA382047GHTO381889RSAR381737TSHE381687MEET381616OCOM381511VOTE381359NGIT381076RSHA381064AWAR380976ADMI380910IVET380749COLO380698EAVE380462VARI380285BETH380223ACTO380058OSTE379920HISO379759NDAY379714EWOU379565EDOU379383TOHE378743SSIS378629NGSO378143CHTH377969HALF377968ATHI377905ORIG377833URAL377805OOKI377690EGRO377688LFOR377653TEIN377584MINE377560EDAL377542INAS377483TRES377372ARTY377128ALMO376791HEHE376760OLVE376740ERON376740HENH376618SOUR376538EGAN376527DENC376311RAVE376218LDHA376206FILM375524UNTE375409NENT375393DEAT375267PRIS375185EPEN375047GROW374945SSIB374589HERM374209SAPP374193TYAN373941NITS373921ENCO373751COAC373622SUND373573TTAC373245PAST373192AMPL372943ISHA372745ACOM372613UTIT372341ARDI372305NDIA372182EANS372174FORW371997IGNE371781WASO371610HERP371601LEME371600PITA371596SCAR371411ETOW371386LYTO371318PERT371308TWOU371119SYOU371065CCOR370873ENHE370806UETO370665EINA370626YCON370592ROOM370482NDWH370206OVEM370123NDWI370008TESA369961ONAS369902TERF369878CESA369597TEDW369567SCEN369499SSAI369354OURE369316ONDI369263HISD369210RTAI368447RHIS368427TORA368380HEAN368332LLYA368321SETT368281RCON367930OMER367592RACK367585WASP366930ORTU366644NGLI366513BODY366373ASAS366178EAMS366161REDE366107RAFT366052NTAT365984GHTI365848REAK365266NGSA365085ISST365028ORAL364188DATT364161ODAY364087IGIN364082TOME363989EXAM363558RIGI363498ROTH363468TBAL363434ERAS363390ORDS363275GRES363107EDHE362711ANCH362653HERF362612TOFF362503NEST362478ENOU362215TERB361951IMIN361870IMET361839UART361827ACKT361765EATU361650AINA361606MANC361172HATE361154HINT361054ERSS360542GHTA360424TERC360202FUND359933ONEA359923OSET359134NDAS359015UNDI359007ETOS358968ARLI358896MATT358836NICA358662ILES358289ISHI358254LEGA358079AREP358038TERP358021ESOM358001SHEL357938EAGU357834RALI357803CTIN357690HISR357560GHER357404UMAN357283OMMO357272EDOF357269UIRE357191FIGH357154ALAR357006ITER356891RCOM356779EIND356498INGG356415AGEN356414VEDT356317TARE356117NONE355940EMOV355678TTIM355578ETHO355561TELE355405OROF355184YOUC355161NDDE354944ALOT354690ANYT354581ICTI354564RETA354333EENS354096EREH353968AGED353597INAR353566ISCA353476ACHA353445ERNO353136PREV353132SCRE353014OBEA352921RINC352901HEEX352554NDSH352340URNA352264ECUT352177NDMO352148ERYO351874PLOY351864ENTC351671SCHA351662ASKE351621MANS351518REPL351483EREG351081ERGE351044TINA351002OMIC350951TECT350926ORKS350820MUST350628ARRE350449EITH350426ITLE350409FTHI350369EEXP350156MARI350042ORNE349990CTIC349973ESAL349953EADO349924SOLD349794PLES349776HEEA349739REPU349695MONG349594TALS349586RESH349393ENOR349338OOKS349295BLES348932LAIN348459AVEL348430GION348226TALK348041OFRE347929ITSE347926HEBI347767ITAR347612CHIE347401AMPI347401REPA347286ATHO347209ELLS346958SESS346575ITST346506STIO346460DHIM346455TERH346357HECL346297TOWA346166OTIN345936ISMA345895DERI345873ESCR345815SICA345801HASE345770GHIS345635SUAL345557OOLS345451HISL345410SSEN345286WASB345255SSTO345239LYBE345075ECHN344749ACON344630ILED344595PMEN344436IONP344375THOF344181DESP344160NDBE344088DEDI343953ENCY343877RRES343587HILL343363INWH343331ONGE343287EXPL343276WHIT343063PENS342955OKIN342824FITS342524DONA342395DASA342059ESMA341876MAYB341875WHOS341807ONDA341764EDCO341739NAST341541RIBU341504TEAC341353ANIM341239XPEC341164ORHI340945EDAY340880TSAR340404EWAY340389ERAC340371INSA340170ARAT340145ACED339938NDWE339914GOAL339678ATAL339575PRIC339527EWAR339384RYOF339369HEVI339090OCKE339081NHER339076SCAL338964UREA338944IDNT338880HEYE338860ORST338854GTOT338731YARD338655EACT338558QUAL338503WOOD338238METI338226LYAN338145NGHE337826DAYA337675OUSL337636CIAT337565EEDS337493VEAN337403ERIT337352SANA337272EEDT337217REDO337017FORI336888HECR336747STOS336656UARY336200CTER336060ICTO335964ESAS335908MPET335666INGN335556MMON335233HATP335213CEST335208CARR335062ATAN334947ITHM334691EDSO334623WASF334542ATLE334424ACKE334322ISMO334248AROL334229REED334160WASD334008ESHI333973USTI333926INSU333890ITES333817CTTH333715OLDE333679TINC333522ELEV333502ECOL333470RTIS333409VEDI333371UALI333338LCOM333335UPER333282VATI333117ITAN333103ABLY332878ETRI332594ARDT332276LCON332275SEIN332156LOFT332127INCI332035RISE331811REER331808EDER331731RPRO331668INRE331232FEEL331227AILA331215ESPI331141MARC331045LEDA330916EURO330845LLYT330705HANA330610FATH330580LEAV330527PION330490INCH330265EORG330153RIVA329974ENGL329946HOPE329823ARIS329818OLDI329567SEAN329559EDUP329401NEAN329334ARNE329135TOLE329115MESA329041NSIV328814MPRO328697ANDU328620HADB328619IWAS328540NDCA328500ONMA328366MIGH328270NION328245ONFI328045INTR327920HASS327876APRO327814EBAC327781LAYI327760DDIT327697AREF327668DUST327407IBUT327287APAR327257EBAL327170EYHA327134DGET327110ROLL326987NTHO326978HEHI326930NESE326889OSTS326825ANIE326821ACES326735ARTM326679ATTL326476SAST326454VEME326192ENGE326049NGES325969NCHA325911AMAN325818HIND325792AKER325699LREA325606EHOU325414ERIA325393HOUR325109SELE325081HERH325031RDAY325020STRY324944ECAL324854YWER324689ANDY324689DALL324570TSHO324492BUTA324437ERSP323987ERCA323917LLAR323689INOR323683CLAI323468SONG323407AGER323394OUTI323381WHOH323265LITA323235ANAT323124VEDA323102EHER322712ELES322629APRI322617CKET322611BLAC322190EDES322172SESA322131SNOW321948REES321850ANCO321767TOIN321721ATWA321627IFYO321582AYTO321421REAM321253EMIS321144CANC320964WAYT320960TEAN320953STOO320926ORSA320849MAKI320837DYOU320833ADES320742AREO320663EAPP320569EGIN320460NCHE320135VIOU319969OSEE319953ISPR319894YCOM319731ADBE319588SUPE319572NARE319357NSWE319204ENEX319193EGRA319144LOGY319120NEDI319046PHON318931BEGI318833URET318483ONDO318407EFFE318386ENCH318369CTUA318349SALE318326DELI318223RCES318201TITL318186ONVE318169FRON318093HENS318070BRIT318023WORD317975FORP317936CHOF317778SMOR317650ENTB317558ASSU317546ORYO317505HTER317296NKIN317251LIMI317140ONOR317114HISH317075OFMA316963BUTW316856EMPT316840ECLA316801REWE316759SSAN316743ALOF316655USAN316628IESI316542ERRI316489HERB316423SSOC316304ALTE316298LLST316293OLLA316250SITS316070ECHI315607HEYH315530WIDE315506NGAR315377ISFA315289CKTO315263RAIS315200EBEC314982VEIN314955EPEO314893EINF314832HEOT314825BEGA314814AKEA314747CLIN314644ELLO314513MPLO314497ISHO314476ALIF314237CHUR314180CADE314149AREL313918GTON313862MEON313641HISE313578GRAP313558DEDA313549IFIE313546NOTB313368WEAR313248ESSU313014ALIA312946ERMO312852OWAS312820EDGE312686RANK311983ONON311982NALA311905LENG311874CIPA311796HOWA311590NWHO311559ITUT311551ROMI311520LYCO311351DBEE311302NTSI311253ADTO311104THHI311024AMOU310658TENS310550AYST310550ERUN310542YFRO310391ESTU310267VEAL310190NGAL310000ADTH309726OPLA309274TYTO309267LOGI309254AKEN309214ACKA309144NDNO309028OVIN309015UNIO308966ORIE308959ATWE308904INSE308759ERSF308598ATRI308545EDED308508EROU308461MOTH308424ONSW308411ITYI308202SSOM307986ASHA307939REDB307865WARE307850GULA307791NIOR307713LERS307682ESEE307636HATD307461EGUL307079ASAR306930ONFE306818EFAC306616GATI306607ELON306562EXTE306381SEEN306380CLUB306293RATH306117DBYA306117TOUT306102DEPA305920MERC305849RAPH305731ISDE305695EPOS305691HANC305654OCTO305615DESC305562VELY305538HETA305525DWHE305515TEOF305417OUSA305255LSAN305253PPEN305219MINU305127MANI304985DSIN304746QUEN304614RMOR304587CEDT304543GERM304484RSQU304283STHR304163ENTP304158YORK304056UTES303885MOVI303856DATA303755LPRO303754AKET303733GINE303708ISSO303662TEAD303620ETAL303510TIMA303427MFOR303420OREP303367RIDA303284SHOT303221TURA303049RTME302967ETOB302939EPAS302924DOFF302658HATO302571FORN302548EETI302468REBE302422SEAT302400ALFO302172ASAC302160BAMA302152NGAB302113THAD302101AUST302019OSTI301930OCES301866STCO301520OFAL301473ONAR301388RIME301123DUCA301121IESW300943URAN300922SHOP300844TCAN300737VOLV300726UCAT300706EETH300672BERA300670PHIL300305HURC300272ONGR300022TCHA300015TONA299962TORO299929MMIT299799OTOF299631ANSW299418EDAR299314ESDA299185EIST299132TISH299115SONW299072LAIM299014ISAS298921ALEN298829TCHI298827GNED298789CALI298754HINE298504IGNI298476TWHE298442ALSA298296HOLE298278NOLO298211TPLA298099ATEO298023ONGS297884IZAT297865UMEN297855ASTY297714RICH297424WERS297418AMPA297344RICK297304INKI297193ZATI297096DMAN297009RYEA297004ANES296998REGU296968EANI296658ARSO296369TOLD296331HIMS296261EEAR296261DINS296259ARIO296255ALBU296038ERBA295924SCHE295879SQUO295511HEYC295475ORGE295392EEDE295325RTUN295208AFEW295180ITSO295107NGPR295055NSAI294995HARG294974INTA294917YSTA294817EBAN294815CHAL294809OODS294470RKED294383UTTO294170DTHR294124ORSO294082ILLH294056LOST293885IVAL293650PACE293555ASAP293542ACKI293532YPRO293478WIND293468ROMO293377NGFR293332ATRE293262DEPE293191HEFR293183ROCK293182EMAT293101USLY292920DSOM292910SSOF292860FAIR292780ASTS292644SLAN292455CONN292434ANSI292403ENAM292377NEWY292253AYAN292248RSTT292246INAD292062EOFH292041BUTH291922SBEC291865DARE291677MMEN291493ECAS291475NEIN291368MPIO291252SHAN290981TCOU290969EQUA290663UNCH290616TATT290530ASST290519UDGE290478GEAN290392RGES290315HOWT290299OWAR290270HERD290118EVIS290118HUMA290066MEMO290011STYE289907DPLA289899ESIS289783UILT289755EGIO289715WONT289684SENS289657SISA289561HELD289446ETOA289254EDRE289237OURA288882CRED288828USSI288463NOTI288450WALK288388DTOH288370ESAT288368TSON288152OTBE288120SOFS287914OUBL287899NTHS287818OLUT287795NMAR287683VALU287621NTIS287478VESA287425EREB287421ARIA287392SATI287306MAGE287274INTI287232DTOP287230DSTH287190EGEN287126GEOR287029HOHA287002STEP286995UCED286943LLIA286924ETRE286916SOVE286911REDU286782RPRI286744ATEI286579NGED286352FIED286305ESFR286244IGHE286186XAMP286156EMED286107IEDT286067SYEA286059OTES285999HEFE285992ISFI285983PENE285977NGLA285830AUTH285797ANEX285754PORA285720EYWE285559UBLE285444ETAI285420TOPA285339WINN285289PRIM285234RIOR285195LOPE285100HEAS285099ESUP284991ALIZ284944ORCO284834ASPR284811ORWA284641IDIN284637SONL284549NALT284524ETOF284482STAK284420ICER284380NOUG284319NOFF284120ONEI283962EISS283936RPOR283929GENC283743MEAS283639THAL283512ANKS283478NATU283335HANI283252CARD283210ASHO283090ROFE283069ENGI282909ERRO282831LTER282757ITTH282727LABO282705MEDA282520GENT282491NDOT282322WEHA282284WOME282269UATI282219BEAT281957CALS281808EDEV281514DTOC281360ICEA281123ICHW280991TIFI280832FORG280801IVAT280796EABO280793ANIZ280620GGES280533EXTR280453IONH280357PPOS280311PPIN280291ASTT280170LEDI280100NGMA280023TITS280011EOVE280002EMEM279936STST279860ROLE279852LVES279732PPLI279701ASFO279591VENI279516NTCO279432TOMO279414LDTH279406TSWH279398VOLU279241OURI279221DSHE279149ESBE279054ASUR278999ONHI278989SOWN278980INVO278952KIND278921TLES278912LIAM278792NTAR278787NTFO278779NWHE278754BERE278711SHAS278608PETI278506STOA278495CRAT278392ASPE278388INUT278353TSHA278317TOFO278317URCE278315VEHI278054PLAI278024ITTO277976IGHS277890NVOL277773OCRA277769ISAP277760EAME277730ONEN277721ONHA277720EELE277666GARD277657ATEN277598HEAC277473EBRA277469ARST277357DISP277343RUNN277223STTO277026ECES276980UROP276927ERVA276801EPOL276794EXCE276745OLIN276716ONGA276600AYOF276544EWYO276432LTUR276339PLEW276305DREA276292ILLT276280ADDE276275CORP276204LLYI276177ATCO276170ETOR276099RSWH276093TRYI276036LEFO275892UPTO275890NSHE275828TYIN275654RGEN275280IVID275217OFOR275030SUMM275027HOFT274951FORB274890SSUR274876RECA274827AGEA274650NGIS274601ATSH274369ELIG274344ITAT274060MPER274045OFFA273953EDEC273914RGET273864PENT273795UNCE273712REMI273606CITI273404INET273368NALC273340RVED273250ERSU273214NGOU273086NSIS273048STSE272963LIZE272889ROUT272799NDCH272712NSFO272668LYON272613NIES272610DABO272597ACKO272594HOST272351TYLE272336DIED272275OTTH271954EAGE271949SRES271909LARS271757HEEL271698UREO271671ONRE271626NUTE271565NSER271506IMIT271490NGEL271434NPAR271433SPAC271356PAIN271215AILE271146ECTR271098ARIE271040OSIN270844DMIN270790PEAK270741NATT270737EHIG270717NPLA270559ATMA270465EYRE270332YOFF270275ALTO270234OUCA270151FESS270049IANA269904STSA269811WYOR269804DOUB269776MASS269753NTSW269748TACT269645ERDE269605VAIL269603ALPR269603ETAN269490LLHA269165PRAC269028AFOR268967LTIM268964MIND268851OBAM268690EDID268647USUA268616NGSI268565SUBS268318SECT268306ONFR268185SAGE268118TYPE268030EBES267987NOWT267836EITS267782OYOU267780REDS267710ADEA267632DEFI267596GUES267572ANAR267437DAVI267348ESUR267341NVER267337HEPU267281LETT267114EBAS267097HETW267065RAIL266955ETOO266927ISPA266919ROPO266911AREI266811REGA266740LLEC266740ELIV266702RETI266650RTHO266627LTHA266608ESSF266568MESS266545IRON266506OLON266489YWHE266450IDNO266421ATWO266311ODEL266107RDAN265971TSCO265873DVAN265871AREM265853ATEM265787USEI265690TBUT265595ERYT265574OVIE265504ACRO265372IGNA265359LLYS265300INFA265106TSFO265096OFHE265062INNO265013HEYR264935RPLA264830THOM264749HHIS264596WHOL264578TONS264405ATAR264364IDET264157NSUR263926RWHO263834HINA263704SPEA263599OFST263571TRIA263448NEWH263391MART263340DWAR263339SAVE263316HWAS263168ONSC263108EPTI262983SMAR262907SONI262861ORPO262787UCAN262755EFUL262752MICH262710TICU262697ERTE262494EDAB262415TAIL262392ERCH262388BORN262281SELL262242IALI262218WASE262185INER261892MOTI261731EFRE261727EBRI261580TIVI261396TINE261346INCA261343RYTO261304OFWH261295AYSA261183LOTO261100DMOR260834ARDA260754BRIN260725MOND260654YOUA260596USTH260441WATC260399ESET260393ONGW260271RNAL260254ATTO260202EASS260073OICE259971PLIC259959RGER259894EGOV259536ETOU259527SEDB259416HIMT259397ECID259347EASU259255ULTU259231TOAS259215IMEA259210HERU259133OFAR259099OHIS258883NHAS258792SWOU258661SREA258552GETS258413STAG258349RISO258319ROBA258272ARRA258225WALL258170CALC258122INFL258046NDSI258013EDEA258007OREM257983HTIN257885IMSE257839ADOF257818RRED257788HEAV257705MARR257628NTOR257599VATE257533ALSE257508EDBE257505CRIT257493ANON257460TSOM257332FEDE257304ATEC257225OWOR257214SOFC257022RSIO256950NYTH256784TWHI256740OPME256671RARE256631EOFS256626EGIS256482NGHA256326TOAC256165DECE256011ECIS255994MATC255975ILAB255929ONME255867EALE255795SREC255790SPIR255789EBAT255739HECE255728OFES255699SAFE255693NSAR255651HAIR255629ADVA255615OTAK255494ISBE255412SAGO255292SANE255063DDLE255040BLEA254959HIMA254918ETIC254811NCIA254800ESNT254744ILET254739HATR254705UTHI254599TUNI254434NCHI254310ATST254221ITHC254016TOGO253916AVAI253697SOON253645EASA253573DETE253529LOPM253497CELL253462MEDT253460DOIN253341LANE253294RWAR253233LAYS253044STBE252857TRAV252745ASDE252744SQUA252712OWIT252624RIBE252607KETS252334ONIT252265RSTR252255ICHH252135NEWA252134TPER252113SDIS252113RATO252059OSSE252026BEHI251945OPIN251940IDON251916RIOD251818EEKS251800SSHE251757ERPA251705ESRE251679LLCO251653ICIP251647DTOD251571COMB251319HTHA251159ISPO251134NOTS251133UTSI251078STAF251063EIRS251029TTRA250747PICK250741HIPS250593TNOT250512SSTI250500ONER250496BRAN250469VERH250320TSID250211EMAD250144UNCI250076NBUT250068DBEC250054LUTI249966NGSE249933YOUW249764UARE249752ONBE249750EEME249736NGUP249656TTEM249652NTAG249552LABL249528TERD249520EKIN249442DUET249343NCIL249321FORF249251CIES249119NDID249107INSP248971TTOB248962HEYD248962RYON248958OOKA248946IETY248913ORMI248827HEDU248812TTED248773SREP248770ENRE248717ADIT248703UNNI248697TOPE248556ETRO248502DTOR248404TRIP248296NDDI248169LESO248138UTHA248098HEDT248089APAN248089SCIE248029RALS247974IDGE247943IRES247866EGAL247833EIMP247628OPPE247597AISE247591EFEA247582OMMA247581SPEE247534EMER247481ANSF247464IVIS247386NTWA247348GETA247326LMOS247302OUTE247174TOSA247083EOPE247079EMOC247035ERIG246918EDMA246897PATI246845RULE246819FAIL246796UENC246695ERTY246572TBEC246569NDRA246546OTED246446ELVE246344DIES246336RISI246216LOSS246160HERR246120ARRY246084IGAT246030IVEI246012ISWA245857ONCA245800HISY245623ROUS245484ITYS245364STOL245110NDFI245091NTOS245090GIST245046EVIC245006NTBE244966EGOT244931ATEG244850DEOF244719ITHP244695TEDH244661FORO244528NNEC244381EAGA244294WINT244230RCHE244182ONOT244159KFOR244020PTED243974GFRO243973GOLD243783CUTI243719HEOP243716DINC243684ISCU243619ERAR243589DAST243489SEQU243480TMAN243414EREV243386MIST243317ELOW243250SASS243123IOND243104UPTH243097EPTE243093FAST242987TTOM242881LEWI242828IDAY242815AIDH242815GETO242746IANC242530CKER242484LSTA242448NCEW242401STOD241997ADEM241984RMAL241839INDA241674REGO241671RETR241669TSWI241530ESPR241421MOCR241390PITE241232DUAL241122HEDR241062NGMO240991SALO240967SUSE240917EDWH240889ENSO240811RSWI240771OVET240750ANSP240749CANN240734GATE240723NGWH240722EDNE240699EMUS240690ASAT240642SIAN240597ERCI240578ISAT240567EHIN240538SSER240449BELO240422OTEC240399UMME240384ITUA240383FOOD240365UENT240306SEXP240288NGCA240202OUCH240128LANG240083IAND240076CISI239965EISN239897ONPR239880SSON239781OLEA239713INFR239698EMIL239663REFU239602LOWS239490NABL239446ANWH239435RYOU239380CELE239377GUAR239311HSCH239233OSER239156HASN239156DBUT239062SREL239049CURI238919ERHI238655OPTI238489ACHO238456NTIT238438LECO238325BUTE238321ILAR238254REEM238189HECU238083ANDK238078MILA238066NDPA238050OFFT238038YHAS237959GIRL237943FINE237743GOFT237740NDEV237727YCOU237626EGAT237607RPAR237584ORDA237581IKEL237476SENA237272DPER237060HEMU236663EBEL236641DAMA236533ULLY236460MAST236360IDAT236359CALA236320MILE236266RONE236227NONT236220UTUR236189DAYT236144FORY236135LSOA236124ROLD236110HATB235929RDED235880ROMH235835ATSA235819IKEA235812ITSS235801QUIT235718ITIA235627RETT235593INDS235537THCA235524ANGU235414ALDE235336RENA235249LSOF235204EBRO235140TAFF235127NGWA235118URIT234963GOUT234880DHAS234688ELOC234560RFRO234510OFPR234491SSOR234449ISPL234439ESOR234411PRIV234259RSHE234192YWIL234093AGIN234090RELY234083TOPL234041ISES233970BLEF233950ERLA233916LONE233901ECTA233843ONHE233772RTOT233761KEDT233727RIDE233694ENDT233655RTRA233615HEYS233553MARY233443TREM233349ERDA233233OAST233173HEGE233114NDTR233113ADAN233085INEN233042SHEH232991EATS232987NTWO232940TALO232720STMA232655ONIC232573LARE232553REWI232520ASIT232485ADED232446NGBE232439LSON232381UATE232368OBEC232367NDSU232315CAPT232304LSIN232286AYEA232274OMIS232133ISWI232047AMEO231992IANT231976DTOM231894TOCA231796ALMA231787ASAM231786FTHA231745ERSB231656RLIN231580CRIM231552ESTT231547ESPA231534SONO231521UNTA231508ECTT231478EANT231426ENTM231391IMIL231243FURT231177ELYT231140LOYE231118EIRC230987ABLI230978ENSU230955SCAP230941SEWH230921ENSA230915ISYE230914STAY230883IMEN230869ASTW230812STYL230772INLA230720SPOS230627EAMO230546DDED230544ORIA230469ROFI230443SOUN230373WASM230344DOVE230335ANEN230249ENAS230224NOFA230191ISAB230189CORR230178PETE230044IONM229994DWOR229977OCCU229935NOUN229917OREL229911SIMI229854SSEE229840TONI229813EDMO229775NLYT229661NNOT229643RENE229601NGDO229486INAC229484OTBA229457OSES229431NDLA229425TTOS229418EIRO229402NINC229395HEAP229227CEME229208HATY229206HELL229130AMEI228989NSTT228889LEGI228797ANDV228771NCTI228762ERLI228757EHEL228741NISA228739SFUL228625AREG228588SUME228517ERME228485NIND228425DONO228422VERB228410NSHA228400IBER228390YCAN228257RREC228199NOWI228166ERWO228154TAKI228083CKAN227962ASAB227934NTAC227879LLYW227827LANC227823NGAG227801FERR227746CHAI227638RSWE227600NSOM227500TEMS227491TIAN227490DEAN227309RIDG227299TOPO227255CLES227250XTEN227242EWAN227068FUTU227001EAUT226993TTHR226877DCHA226670HEAM226600ARSH226597UTAN226593ENEE226543ENIT226540PWIT226534CRET226466TINS226452FISH226445TSEE226442NDOW226442EVOL226372ETOC226226RUSS226221HOWS226203LAKE226117ANOF226114TABO226085NSHO226076HISN226029NESA226002TLAN225988NDOU225973TSEA225930ERRA225922REIG225854NEDB225752GALL225751AMAT225735PAPE225584NINS225479RAMA225440SORT225416EOFC225403GEME225388RUST225306HFOR225239SSTR225156ESOL225009BENE224994NMAN224979MERG224912REON224900OONE224830NECT224714WAND224676ASOF224670NADD224587OFCA224562EADS224537ESAY224516PRET224465ANNI224447SOFP224375HEKI224326TAST224237STHO224232ERFI224199PLEO224188EVIO224173NTOW224045AGET224041PPER224038APIT223994NYOF223918RWHE223798ICIN223705YSHO223699ARYA223677OUTW223673FERS223670RDSA223638EDPR223609OLDS223536EXIS223528RKER223438UTER223359EGAR223318NGBA223300YHAD223298EALO223222REND223219EDSE223213NTOP223133MONS223094SEPT222894DSON222872RSEA222843GHTB222752OFPE222672UPON222629ETOD222617NSIO222500IMAG222487LITE222416LEDO222406EINV222375NIFI222357ANYS222186CKOF222129HORI222004EHOL221992NANT221980HEFU221972OMAT221947DANC221947ASEA221907GTHI221775EVIE221695OUST221638BROT221635IERS221443AWAS221377AGOO221333ONDS221168ORIS221143CHWA221125NCEN221039LYST220845LYFO220844MOUS220747ERER220707RARY220700MPAI220700ROSE220643ITWI220603ESTM220597EBET220567EWHA220526VINC220505STOH220470RATT220456NDIV220453LDNO220440VENU220434SENI220398OSPE220374ELSE220354MPAR220305SWEE220288ATTR220273CUST220183ONSF220141OMPO220122ERFR220086HANN220066RNAM220059TICL220054IVIT219966SKIN219955EDIF219920BASI219799MTHA219769DWHI219727ITIV219695CREE219692NINE219666NGEN219662METE219522SURV219390OOTB219354ATON219294MMAN219288NSWI219281FARM219228ROMS219109SFOU219076ICEO219071NORM219056VERW219053ENON219049HEVE218973OFCH218905FAND218848IFOR218829NDHO218799UDIE218688PERM218667LEVI218520EEPI218497GHSC218319NSIT218118OMTO218098SAFT218018ENTD217955EORI217926DPRE217906YOUH217726CESO217642RESC217633ENST217558EENC217520NDWO217350LAGE217348NDPO217347SSIV217315ODES217281NDLI217224DERO217199SASA217180TENC217170BROA217147OREX217103EROR216974TURY216966EANA216966RGIN216878LYHA216869NATO216866WNTO216829TONL216761SANI216727GUST216709CIFI216698ISAC216690KEDA216676UICK216635DICT216574LEDB216566OMBI216514RWOR216388TUDI216373ACOU216371CHNO216343OFSE216324CAPI216317TROU216316INGY216016LDNT215934XIST215847HERL215846DIAT215784MESI215601ASPA215561ARER215557APLA215490LIER215446IDDL215440NGAM215404IHAV215350LINA215331URDA215268EDRA215212DEMA215189ATTI215044LVED214968NTWI214920MINT214793RPER214788STAS214705ELIK214649WNAS214571LWIT214473EOFM214446AFRI214321DATI214175ISLI214144EEAS214063ABOR214053QUIC214051EBIG214012HEMS214006ILIN213926FTHO213921NORD213899TTOR213897ADET213894OFAC213865PUTE213857EPOI213742OSEA213679LLSA213581DTRA213410PENI213398ENSH213393GONE213376OMEW213364TERV213326THAP213266TSWE213218SGOI213206CTLY213159EACC213124BURG213115EDEF213029RAST213010ELEG212945EEST212922STOW212890ERFE212826CALE212739ASNT212714ENUM212702NSAT212694SHEI212673SAGA212646NTIM212579AREB212516DEDB212489EBUI212469REHA212464RIMA212450HEBL212410LEWH212391HISG212324RINE212302FFEN212174DROP212148BLOC212145BUTS212101ALLC212014REPE211989UNIC211956PAIG211850ADIS211795DTOG211753STLE211707NNEL211646NDEX211624HEMT211604HITS211587EMTO211581AIGN211575ISEA211515SIND211472ODER211448UGGE211420DECL211405IDHE211393FELL211377NDLO211357ETAR211342WNER211288SACO211222IGUR211187TALE211166WASL211118STME211112EDEP211108NDEP211065OTEN211058ECLI211057NERG211016GAVE210925NDRO210895RADU210893NETO210888ITCO210886SOFM210846MERA210845TOEN210801EEDI210797MPOS210771ASCA210636FIRM210634EADT210608ERFA210562OREV210552RMON210548UGHO210482TREN210294OWAN210243HASI210241STSO210194RLIE210149RHER210122ILLC210112TOSU209982ILTH209982SATU209976ATYO209960TEEN209915NIMA209885GEDT209813EENI209748CRIB209708HOTO209685SLEA209679DIDA209642ULDS209583EMET209577KINT209533ENNE209478UDED209439STFO209345ARIT209331AINL209306USTT209299OMED209276CONG209169WOMA209153TOCK209153ITWO209039EENE209013HOLI208946TPAR208848ANAS208839MPLI208800FIGU208798COUP208756USEA208745IFFI208633OFDE208607OCUS208543OBAB208523RALA208522TLED208519RSEL208423BRID208233HOTH208188ISFO208157GINS208155TETO208130SANO208099ETTO208044RUNS208012HOWI207860SVER207856TOCH207840YBUT207815ODIS207791ITYC207749INEE207745BROW207701ATSO207677PRIL207606EIRP207606BLED207573MIDD207466RPRE207452ORON207446SCOT207422NDME207419STWO207405ARNI207379LARI207368OMOT207276IONR207135GEIN207110ERDI207090DMAR207006HEIM206987ETED206969ANUA206774NGSH206751NOTO206723ROKE206708ICHT206707ACET206669THLE206649SMAD206591METR206550OFMO206511ORAR206502ERAB206467DAFT206416NLIN206414ATCA206373FRES206363UGHA206318LWAS206256ACEA206225TEDP206224ORTT206195INPR206092NTEL206038ILLN206013TISN205960NTAS205920TKNO205873ARDO205822ULTS205783ENFO205752EIRF205718HEQU205691IVEP205580OREO205563NTIC205549HOSP205519ERLE205511URNI205406MANT205392URGE205352EATA205342ANRE205319LLYC205317UTED205277ITSP205272ORYA205186TISS205169RDIS205109EFIL205094MBIN205041RSCO205039AMAS205032EVIL204938MESO204905AMEW204862EDAF204844USTB204827TOFH204597TSNO204588OHEL204561ETOL204547SDES204534TSEL204528PREC204523EUND204447TUAT204365FAVO204333ERBU204035LLRE204023RABL204011NETW203945NGUA203914NTHR203895INEI203837ENVI203800ERHO203738ITHD203690LYDE203611INPA203610EMID203534NFER203520NASA203506ONLI203458NCEP203439RAME203409THUR203360TARI203310HEPI203296NALO203291IVEO203276EWES203273AGEM203252ENHA203246SECR203226RILL203205IQUE203172RSAI203106OMOR203089LSTO203079ITSN202944ISAR202914SKED202895OPOS202883LLAG202816EDWA202745AUDI202741AUGU202679VENO202567TESO202566RNER202563ANIC202546DBEA202512NEXP202507UMER202487ENIO202484EFFO202479OCKS202433FACI202380NAPP202366TOSH202323RLEA202319OUSI202315AMEM202299SAWA202235PEAN202210NGRA202191SEIT202023INKT201947ESLI201936CLAR201907ARME201898SEND201888EDAM201885YATT201858TOLO201835OUPL201809MALE201694DRAW201634HEWH201572IRIN201523NDIC201439DOOR201436ASCH201431WHET201312ANKE201290ATEF201285TENA201273LSTH201261ITSC201255INHA201129CIRC201100ATRA201078TAPP201075NSCO201058FFTH200997IALA200989EVAL200983UTWH200941LKIN200902NIZA200901EBOO200840NDNE200766IVEC200740ATEW200713MULT200704OLUM200668BOUN200651WHOA200622GERA200562CEFO200516IGGE200515NOWA200396KELY200381ITHF200279MERE200226ETON200212ICET200189ELOS200165YSTH200139ALUE200081DARD200058LANS200050RRIV200026CERN199969ETEL199941LLIS199893NWIL199857OMPU199822ASER199804ERSM199757NADA199688DERN199672LORI199670ROMP199529ERNI199522DANI199521TODI199510LESI199475NTOB199377ONEC199317OFFO199257EDAC199172NGLY199138SAYI199118HATF199083HIEF199054NGAC199026TOPU198967ADUA198889ARMY198878GICA198863DEVI198850HATL198805OARE198777SCOV198766STWE198749EIGN198730ORCH198712ACTS198676ETOG198582SACT198445NDPE198400OLIS198399ORSH198369TICK198257EMAL198190GONT198181NSPO198115RINA198076STIG198069ANAC198067NDOR198060ANYA198021OWNI197959HTTH197936NVEN197726EFAM197667ISSA197662PHER197545WAIT197460VECO197455NECO197423EREO197415TOAL197395TOUC197361TOWI197354NTSE197205ANFO197203INDT197157OLES197113EKNO197075LINS196982SINF196892HEFL196815YNOT196782TSAL196714SOFH196705RAMS196587ETSA196585ARSI196575NKTH196388SESO196384GOTT196370ILIA196365FORR196363NGPO196359ANUN196329MPRE196277AUTO196234ARYS196219DSHO196205LEDG196125ANSO195933YMOR195910LBUM195892NINA195817EDRI195734NDEC195712NNEW195676MENS195604LIVI195581RDTO195553ESSH195520YTOT195466SITU195457ORIC195424INON195348ERBO195342ANYW195298EMOT195287ESEV195267NDBA195262IEDA195212EHIM195163TOTR195125NIAN195064AVID195033SLOW195029LLYO195029GABO194973THEQ194896TEMB194861DASH194835THIM194826CCUR194815SBAN194807IMME194752THCE194744ALEX194675ENAL194627EABL194495ITEA194463INAP194440DTWO194368SMOS194352HEOL194293NCAN194247OTTE194244ORMS194176SFIN194128MANU194113SKIL194096TERL194078OTIO193968AILS193877ALAS193857ETOM193829PATR193737OURP193706ITSH193570EADA193496BABL193460OLOR193456RSAT193400EMIC193341ERGY193336ITYW193286OFAS193277LEMS193258THAR193235HCEN193211ONWE193175ISRA193101TOFS193069TMOR192923OFOU192843OLDT192819UPLE192814OUTP192778NDAC192767GPRO192759WNTH192753STOG192729OSPI192698RITT192693NDSC192630LOSI192606WTHA192549NDMI192511ATWI192463AHEA192438CCOM192412OUHA192409RISH192355RITA192260EEIN192256RHEA192241PITC192241SONC192234LICI192229EARM192194OPEA192151OBET192140GRAT192078CCOU192055OFSO192048NDSP192024OLAT191991ROWI191978ASEC191965GHOU191956ANTR191954REDF191915LEMA191867NEFI191866HEAU191838UITE191809RASS191780EANY191780IMEI191774ERRY191761GLIS191728ICKS191726TANY191705ANAM191606YPLA191598FOCU191591ALKI191576VANC191573SODE191539VESO191534NIZE191524SDON191475NGET191377PARI191356SELV191308ONVI191298ONEE191291ORHE191276GHAN191256ILLO191221ENGT191104NEWI191088NTUA191022ELIS190870ERYS190842HNOL190834LEON190812ETOH190777ARLE190774RWHI190728UTON190698RSHO190694TOPP190685TONO190549YBEC190474NTSH190474TITW190437OSST190415SOLU190375ORNO190374BELL190367BLUE190343DSTR190327MECO190326ALLB190292ALCA190292NGRO190280ERPO190253ANHA190146OWHE190138EECO190113WIFE190107OHAS190032TTWO190025PREP190009MEND189956THUS189955SUFF189940PLAT189932NOON189904THON189896USTE189887CERS189828ALLP189791TEDM189771ROME189727OTEL189691SIZE189622OLAN189593ERPE189549NTIR189512THOL189495VENA189486NTIF189472DVER189420LYAS189340THAM189329DANA189264CIAN189246EAMA189191ANNA189141TLIK189125HOMA189106ARKS189010NGDE188996LARL188995GLES188983IMTO188928FCON188899ENUE188833RSAL188759EDBA188721LATT188709ACIN188423EVED188409EXEC188386SSET188337EGET188273ONGO188224LSOS188214GTOB188214OOTH188150ARTA188045PHYS188018SHIM187966MPUT187965HENC187949TEXT187914OUTF187820RITS187762ITSF187762NYON187729RTST187605LLEA187597YMEN187591NANA187585LLEY187578SSEC187532ILAN187514RVAT187482NNED187447DTOW187431NDFR187422RECI187394OMEI187368FRID187315TERY187263HREA187261APPO187244EAVI187118IPLE187112EENO187036SONH187028AVEH186968AVOR186878OREF186724TYTH186676SMAY186664AIDI186620ELAR186619HCAR186579STSI186501DPAR186492EOFP186444USEH186321MERO186250NALP186217OPED186197MAGI186192SSFU186148OSEC186127AVED186056FILL186013DAUG186009ECLO186003IMAL185980ALED185937OFMI185923OTON185906IMAR185860UGUS185815UARD185733EDEM185719TURD185622ESBU185614RINS185591ABIT185582TANA185569NPRE185425NRES185422DWIL185402SBUR185352OWLE185327ACTT185278RCOU185241DECA185120ORTR185101RIPT185037RTHR184997UREI184961ITHB184919LLYB184861EAFT184832EENG184829OURO184775SEPA184751CHIC184747RREL184745XECU184676DLES184638LSOC184636NARY184575EDEN184574TUTI184564IDUA184560LIND184539LDIS184492FRIC184373ORAS184353YOUD184319MEWH184271OOKE184224LLYD184167CHHA184151EPUT184143TLIN184137EDUN184026ITTI183942ASET183859SMIT183828TOFC183822ZING183791TOGR183751RTSA183746EPIN183734RRAN183714OUPS183705UCTU183690TROD183685LOOD183683YWHI183675TOWO183602RONM183591PPOI183579RGED183558EAPO183531ISNE183530TECO183512LEBR183495ANEA183494HEEV183407OMAS183395ITHR183370NOMY183365GHTW183336INWA183301DERW183280EELI183262HEOF183231NDAM183212UNTO183118ATFO183100RDEN182987NDFA182962TSRE182932RBUT182915IREA182870ERSD182849SCUS182831ISWE182811USER182807EARD182792MEFO182670ALTI182636RROR182542ERWE182507NGBU182504BARR182462AIRS182443TOVE182417TTOO182385GLAN182294NALD182167HICA182127TSTR182037UNCT182036APOL182033ANOR182010ICHE181972NEIG181938VIDU181937CKSO181888LETI181877OTRE181873REDW181850ORDO181792BEAR181771MANN181765SBEI181759DBET181682MANW181643CERE181632HARL181621PROS181564LDAN181508ANSE181485UNDR181369NWOR181360ARDW181319EDBU181314RDST181306BIGG181277RTWO181247PREM181242EPOP181228OFPO181224ENES181194THST181179RASH181149GURE181139VANT181096ANTL181003LLTO180990LERA180990OSTP180897LIGI180873ASIS180868ONDU180830ECOV180830OSEW180815TEDC180810FEST180674ESTC180672URPR180671SNEW180655DIND180552TOBA180525OPRE180411NCOL180407DLEA180380YOUS180268MMIS180229HART180179EWAL180132EPIS180132HROW180109ITET180108ICIE180080TOBU180072IBIL180031NREC180013ERAP180012ENAR180006ISOF179997OLLI179988MMED179955TSBE179897ORFO179866ANIA179764ICED179761LIBE179730OFAM179728MACH179723ENTY179715SUIT179678INAM179670RTTH179637IKES179629ISMI179594NUAR179576ORRI179575SSEA179497PONE179491DALS179476SHAP179401ANIT179363TLET179348ESTP179340NSUM179334THCO179315HENU179311NNOU179309SSPE179304ONSP179257SPOT179256ASPO179250SBET179211HECK179111ORER179107RROW179093ATLA179093CROW179085SBEF179021RONI179014TOEX179009IVIL178975EMEA178891GNIF178889NGHO178887LYDI178855FHER178843SBRO178827RAPP178790RMAR178767NDTE178732AFFI178667NOTR178638TWIN178529DEAD178376REXA178300SNAM178296NGTE178295EATO178275ECEM178248EWAT178187OSTT178146TIVA178104DREC178094SACR178052HYSI177952TIGA177923TOKE177916NGAP177809WORT177709TYCO177683OYED177605ARGU177589DLIN177577UTIV177554PACK177504ASAD177425OFLA177354VERC177311EAKI177308OMEB177273TSPE177236EANE177228YWOU177199EANO177173LHAV177105KSAN177088ALEA177057ECAP177019CUSS176997RFAC176994CORN176950TOUS176894NCEF176880META176858NLYA176850EYCA176846NSPE176731ICKL176708NSET176622EWIS176600CHEC176595TREC176553ENEF176497NOWW176452OFFS176440OSHO176386ORWH176301YPER176300SSAY176236EDDI176147NSEC176072ELLT176041OODA176016HEPH175972ERGR175954EMSE175888RPOS175879PANE175860ONAB175858CESI175842EFOL175725TOLI175694ALPA175632ENOW175549ESCE175537CENE175509PUTT175330YSAI175313RLDW175297TEDE175293COTT175217OWNO175208UDES175204FICU175193INMO175109OMEP175061DONL175061TTOA175028NCIN174998ATME174991OKED174841ANGI174832ANYP174831NCEB174807ENBE174761PICA174727AREW174698LANN174689NSOR174676SORE174668HONO174647TCAR174640NSAS174627NSIB174621ISPE174594OLEN174572NABO174566IMED174545UAGE174534TEME174471TSAT174460HEND174452ISCH174438RLAN174434AYSI174422STEV174396NVIR174384LTIN174366SWHA174354SSIA174342UFFE174308IAAN174222DHEA174129DDIS174115TESI174093INWI173963SSCO173931IALC173915SUES173908ALLW173893ARRO173810SSAG173809CEDA173804RNET173793ENEV173771SINV173566CIVI173512NOUT173478EELS173469FLOO173458EOFI173458NGPE173364HORE173329HTTO173306NOWS173274SOPE173255OFLI173231EVID173170OSTR173162GUAG173129ERNS173048OFPA172976ULDA172891NESO172848OOPE172760RSPE172716LSOH172700VIOL172693KEIT172683EBRU172675SUGG172663CALP172582NEDO172572PIRE172565OFTW172543PTEM172538NUAL172485PLIE172481SANT172475EDDE172473AMAG172467OMEC172350RTON172334TMAK172333CTOB172308NDDO172285WASW172188ORRO172151ERLO172143INAB171966EALW171905VERM171902AIDS171897YRES171867SERS171863RSTS171793RCED171726INAF171626ETIR171593UPAN171588HADS171579ATEV171577VEDO171519TDOE171466BEAC171360ESUN171334THIT171181ALAC171177URDE171128CHOL171055EFIT171011ISLO170960TENE170921SHIR170827GESA170786SOLI170784UGHI170763TOAD170755TSAI170671NCEM170646ALLF170627CHAE170579FREN170541OCIE170511CEIS170508TEXA170497VESI170456CIET170412DEGR170326FLOW170315SSAR170298SSEL170287DOMI170287NDEA170276AREH170234CUSE170221WHOM170146ISWO170100HASC170093ICIT170079DANE170079WORS170043FORL170030OVES170025LAYO170025RVIE169912ISLE169877NPER169869EMAY169798NMOR169796ONSS169784TMAR169753EPAI169721RHAS169647MSOF169644RSFO169625CCEP169546MSAN169524MBLE169480EREE169454ISUN169418ENEA169383INVI169358YSIC169355ARYT169293GINN169285OGIC169261TLYA169195THSO169124ISWH169077HMAN169060ENET168967WISH168958ETAK168956ALSI168893EDRO168886EETS168856TEFO168842CYCL168834LSOT168828PHOT168809PICT168782IPAT168754YAFT168613YSHE168555NDYO168516TOFR168453OSTL168443TWAR168432UPIN168409RSTE168406EIRA168393ROBE168373RSOM168361FEND168343EBEA168319OWTO168298GOTH168285MWIT168189UHAV168153ESSC168081FILE168066SEET168063HEVA168060TURI168003EBEG167959OMEF167951TWER167860DNES167785SAMA167674SINH167637UPPL167633RALO167625ESUS167604MSTO167569EDLI167543NSEA167531YSTO167483MENA167428DEAS167392SHOO167313OKEE167268ESUB167183ERLY167153STTI167140OCHA167055POND167019EEMS166989IREM166953BUTN166923DINF166900NTMA166834EERS166832HOOD166831TEDL166800CKTH166765ANYC166731STEE166729EDPO166671OHAD166615ICEI166577KSON166569HENR166552WASG166531NGPA166471HANK166471NFRA166459LART166455TRYT166453CTOF166439ITHL166412EBUS166402CAPE166391TPRE166361WHOI166328AMAR166260CART166237ERUS166227EADD166207IECE166199NSEN166197PERH166164ERTS166105IESS166100ASAF166090XPLO166036EFUN166023OHNS165929CILI165927RUPT165906GAGE165896ERFU165888ERAD165861ERAI165839BURN165827DCAR165824IGHB165813RTNE165735LTON165632MITH165630ANWA165589ESUM165578DESA165574REBU165546ADIA165546RUSH165538SACC165482AGEI165368CAPA165349DOCT165291ROWT165284ANSH165260ONBU165206CEMB165169VEMB165133INSH165123NUED165102LCHA165098RDTH165085REAB165063EYAN165027ASSH164990IREL164950ORUN164949SESI164868RNOR164867CEED164832MISE164823XPLA164816YCHA164804USPE164784ROAC164780ARMA164769NAPR164760SSUP164709NASS164643ATIE164623UNDO164621ALDI164549LYWI164515OREH164512BROU164484NESI164481ORLE164456DECO164437NTSF164345DCOU164336SUSP164287DTOL164270EAWA164243CEDE164207DSPE164196ESEL164180LLYR164170TOFP164091OROU164049FANS163869EDME163843ASLO163837GSAN163825NEER163824ANCA163812CEWI163805ORSI163784ESSW163751EISL163733ETEN163727ETTY163723TOMI163712RTSO163646BROK163570PEED163547PLEI163509RDOF163464NOTC163436ADIO163427ELYA163411LOND163312TSPR163301NCEC163290NDES163211ITCA163211LOWT163208REIT163177OLAR163104AYFO163038IVEM163030NSOU162984ITSI162963EHOM162936SPAN162904REBO162882MEWI162857URNS162834IVEB162763NADI162759DTOO162747GTOS162737OLID162736SEDF162677EALA162676BLOO162639LPLA162527SMIS162474PROA162455HEAG162360DDIN162287RLES162283DETA162205VENE162177MANO162173ONEM162115QUOS162111MPLA162083EENP162070EFIE162068NSWH162034IGHL161966RISK161963LSOB161936UTAL161903EGOI161812NBEC161798KSTO161789LUEN161784REFI161779CHEL161739TWOS161708ADVE161658DTOF161625GCOM161578MONI161551YMAN161500NDBR161498WEIG161491EHAR161465RISA161409HASP161389SBAS161334ROMM161313MINO161310CATH161306OTOR161272BERG161231OYAL161200NERO161163GHBO161152CEDI161127ERPL161103HATN161100INIA161082OSAN161011EDOW160956NGCH160933IPPE160933EDOE160872NDUC160836NTOC160824USSE160732ALCH160708ILLR160654AZIN160630EVEA160611EARB160593ATEP160586TOIT160583OSEN160580KIDS160570ERSL160554NNOV160535AWIN160525DUAT160458YSIN160444AVEM160368OFME160327ECIF160287POKE160214OWNF160208URVI160203SURP160179NTOH160169ENYO160168OTIC160156ALKE160139AKEI160083NTES159963YPEO159962EIDE159953ROMC159872OALS159859GANT159855BULL159780ILEA159733NFLU159730STOU159727CECO159721ERTR159720ITOF159692NMAY159664HEGU159656FLUE159646EWEL159634HORS159623LINK159622REFR159615EMAS159600ORKA159597IGIO159544ROFF159513OWST159476PAIR159439EAIR159427BLIN159370SBAC159346BOUR159307HIRE159279ATRO159188ANMA159143ITHW159138TSMA159059HATG159055RBAC159032VELS159026HENW159017PIEC159013LTHI159012DRED159006AIDA159003MWAS158963LYSE158918DELA158889SALA158852HTHI158844LIED158840LESC158799RFUL158768TWAN158679RYCO158667ETTL158636TRUE158627VELI158542ILLP158535LETS158510LLIE158464BEAN158459ESWA158444NALY158417STIA158386OTER158348NACT158314REYO158265HASH158261SAGR158242REEA158151TWOO158120ITEM158092TTOP158034RECR158008GWAS157993DLIK157951TOBR157925LMAN157894SWIN157876RWAY157866TSAS157749ULDE157743ARAS157726GGER157709ROMB157706THHE157683LAME157667DAGA157656UALS157534ESTW157504ESES157503EOLD157494ISNT157379NYEA157359NOWL157335ICSA157314LPAR157299BEHA157291EHIC157283TMON157254CHNI157174INEW157147KETO157110CRIP157093ESTL157079HENY157058SEMI157041RSDA156971ISDI156961ORTW156959ASGO156935IRTH156902YINC156808EAMI156807HICL156782HARM156751LESH156714GHIM156592ACEI156531USHE156475GCON156423TILT156367LLON156323CHIT156308FCOU156288CRAF156277HUND156267EHOW156265EATR156259TGET156249HOOT156189OINE156182OUTB156146TRUS156126TORM156063MANE155973TUDY155942TORT155942XTRA155918ORAC155916PISO155915NOUR155891ITHN155871OGRE155865GOTO155796ERYE155742ATOF155692CHEM155683NAFT155563CHTO155546OFLO155534HURS155527SALI155519VIRO155517AWHI155509SOFI155446PAGE155415EWON155349EPAT155311LINC155262SLAS155259ONNO155254EATM155249ESUC155232EDCA155196ATMO155120PEDI155109NGSU155095NTLE155089GSTO155044FLOR155038NTEE155016NFAC155004PLEM154989ICEN154972HANO154901STLI154883EDAP154883WNIN154881AFFE154862TTEE154798TIAT154696NDUN154694ESEP154663TTOD154661OSEP154660WAYF154646OFHO154637OKNO154613NDPL154608BOVE154606ESWO154526LYMA154519PPLE154487INME154462EROA154459MOME154456NDRI154446ASEN154440NANY154309MAIL154309OUTM154288COGN154265ETRU154239ESMO154234ENMA154228CHOI154196AVEC154180OMAR154174OFRO154151NDBU154125SCHI154105NCEH154098IRCU154066IESF154058ISBA154048TLYT154018DFIN154012NGME153970NALE153905YHIS153895CEDB153894OSEL153874ASMO153846ELFA153838EBOT153837AYSO153812IRAN153809UTNO153800PAUL153676ACHT153647ALPO153646ACAD153526ANNU153493TROY153426OREN153414ELAW153392CHCO153360APRE153308RIVI153307ALBA153296ARTN153289NHEW153271TARG153200ARSE153168SEMB153062ISOD153040PREA153015NESD153003LDWA152995NATH152963KWIT152961HANE152932OREG152886SCOL152863NSPI152841TOWE152798ETST152790LLYH152788IONL152710AMMA152708OURF152658TNER152646CTRI152630FORU152629SDEA152576ELIM152567ONMO152549EBOA152535SINO152474OGNI152454ORAD152444RELO152432TOFM152419PATE152387VERO152385ELEF152351DEEP152347LEIS152248ERIV152217ELPE152209HITT152185ELIT152168ILIE152137NTOM152120INGV152113ABOV152104AINC152091INLO152087ETEC152065YDIS152042ATAS152018EDIR152014NFIR151951SOBE151907ONSB151750EINH151707TSFR151683LBEA151650INKS151645DSER151640SHEC151595LOFF151594ERBR151582LSOR151478NGLO151473ENGA151433ELDE151427OFTR151386ARYO151363EXPA151305TWOM151247REWO151229ENWI151193EDOR151189RBAN151170NEWE151149RSCH151143ONEP151138AYSH151096GIAN151076RALP150982ORPR150966RSTP150911MPLY150879ENWE150847YTHR150820TWHA150811ACCU150802DOLL150750PRED150676PATH150651GOES150634NGOV150627RSAG150562HADN150533SBOR150518ECHE150398NEDF150396VESE150355DEAR150320ESAC150240SOFO150229SMIL150225GHTF150206EARR150206OINC150159RRIS150141OFNE150112POTE150082EYCO150047KEAN150045ONAP150041TONC150018SEEI150006URIE149965LAUN149939SITT149933OOKT149897GHTL149889NHAD149876DALO149863OFBE149835EHES149822DDEN149808PINT149803IMAN149792SPOK149777ENCA149774ALME149749FUSE149732MICR149706EMPE149684ASEO149683WINS149671NDAD149651TALA149636NANE149455ELEB149429YLEA149424EAKE149408STWI149360TOFE149350PEDT149313SDEC149187SOFE149180RFIR149127KINS149092ORBE149060SORS149047RCAR149012TOSP149010EDDO149004ITEC148992ERGA148989RENG148950INBE148923NGOR148900NCIE148900INFI148880INLY148806BINE148800MOUT148789VEOF148761EBEI148752TOAP148750VELA148748ANEL148738INVA148713RANA148700RTIM148697FCOM148649UGHS148638HAEL148567ORHO148541NIQU148527PFOR148521EENR148485RSEC148466HEAI148449ALSC148436LYOU148432ARMO148399LLAT148393RAIG148375ISEX148371RNEY148306NOWH148297CKSA148272SERT148271UTAT148250ENCI148238LASH148214NACC148083MSTH148064TEMA148049EFOO148043EERI148022FEAR147985SKNO147967RACI147963LAWS147915NTWH147843ENNI147616IVEW147608WASU147605SOFD147581TBAC147524ISGO147517IMEO147471WHOC147453SISS147333MORN147322LERE147238AMOR147231IMPA147181ETBA147154TEAS147117TDOW147099NCEL147073NDGR146981DSHA146955EPTH146909SACH146869ETES146845OFSU146787SAYT146761ALAT146755ENWH146728HUNT146685ICHS146676SONF146662YWOR146572ISOW146565OBES146478NDTA146461CARS146436ISOR146432ICHC146404LYWO146376UNGE146361NEIS146349NGFI146284TOSO146275ULDT146267OTHO146247NSLA146217ANYM146172ERSR146168LTRA146162RNIA146124OSTC146114ANUM146110ELOO146044WEDT146012TOAT146000EDAG145978SHAL145925IBRA145924IESH145898ITYF145897NAGA145893DITW145884OFWA145850THWE145838ROFA145813SEME145734SEBA145731CENS145686STPR145677FAME145675ACEO145650RSES145621GLAS145570NORE145561INFE145512EDPE145448EHAN145417YPIC145414GLOB145403RTIE145382CTAN145312EMBL145297TUTE145293IGNS145285RVIV145279STPA145204KEST145175BOTT145171NLEA145160YREA145145NIMP145125STLY145122XPAN145117STWA145101NGDI145045AULT145031ONEL144993EMST144964WROT144910ARBO144901TILI144879EATL144789ECOG144771CHEN144770LUSI144765REUN144733ATOU144722DCAS144701CHHE144691ESEM144689EDIE144688THOD144642DDOW144639LEND144596ARON144554NFIN144541OLDA144473EDNO144464EDUR144459ESSS144454YONT144451DAME144449ALLH144406KEND144396ASIM144343DHAD144330NALM144295SINI144273TUES144215FLAT144206ALWI144196NCAL144188CHAP144163SKET144141CEON144097ASEI144055EFLE144054OFFR144044SURR144027TSCA143913OMUC143911DAYI143875NTOU143866GISL143843SAMO143834ORKO143832VENS143829ASBO143783RLYS143762LIFO143726EDOM143724VITY143720NGWO143695RETE143685EDSI143675TTOC143652ASIO143627OOSE143523LRES143493OUDO143477STMO143429TBET143414TSOU143371SFAT143361ALYS143344OYEA143327SOFB143291CKLE143283LOAD143281FUNC143227UESD143198SARO143194RWIL143124THSA143116EPEA143115MITS143068ULES142989OTEA142986WEBS142985ICTE142938SORI142921PTUR142916DANG142893ITSB142886DRUG142881GERO142869ADVI142844UNTS142827NEWC142793INMI142793AMEF142742URIS142738OURM142713UNNE142699NECE142694TROO142669EEFF142646CASI142631ROPP142604RALC142595ESSM142595TRIK142591INBO142557OWHA142525TISI142524STAI142515ICCO142505LELE142398KTHA142391ASKI142375NEMA142323NCAR142307OALL142282EDLA142245IEDI142212ESDE142205TOPI142147IGRA142145TOTE142117SDUR142100TSCH142032ISAM142011DNEW141967SATA141952GTOA141942FEBR141913ASTF141913DWIN141879HASM141845TBEA141835KEDO141818EOFW141812LLYF141802VERL141788ICRO141754AYAT141722OBIL141710TYIS141699DCAN141684WILD141567ATHL141545AUNC141544DITO141513SESH141494RNOT141479SMUC141457AKEO141450GYOU141419IRMA141359RSFR141357DBAC141325RANO141321FINT141309RVES141307YOTH141299VALL141299ULDC141298HESW141261TNOW141255TISE141251HMEN141226EACO141205EPOW141158TDIS141035NNES140992DDRE140978MORA140953TOCR140943OMPR140931HHER140920OUTC140879ADEC140879NDAB140876CEAS140858DANO140809CANP140794ANKI140769EHEW140754UPWI140734TANE140731LLSE140687ULLE140682NDGE140675ONEB140668BEAB140665ADEL140589DELE140552VERP140551INHO140548ATSE140539OTRA140534BLEI140479OBAL140462USTS140447EASY140402OOLA140373LORE140363OMEM140351RYST140306EMAK140294AIRC140288MSIN140266NGYO140176GHTN140156URSD140138NTPR140135ESSP140122EDSA140058URNT140052ELEM140023OUTL140011OHER140001STUR139970ESTF139955RUAR139936LVER139913AMIS139905GHES139904HAME139860THTO139854LYSI139839RCIA139732NDAF139660IALT139656FERI139655IDEL139639OFAP139638NGNE139638RALE139628ALBE139622YPRE139621STAD139592ISER139583BUDG139567EFIG139532MITE139512SMEN139466NTSC139456PULL139432SDEF139424BUTO139420NANO139401RALT139325DASS139316ANET139300ACQU139295YPAR139236SSIG139236ARKI139183OWWH139172OTAT139165GANA139112YALL139095SIBI139094OVEL139078NGSW139061LICY139046OLIV139029ATIM139019NAWA139011NDGO139007RKAN139006BYAN139004BRUA138983ISUS138962FAMO138929ARKA138925REDH138924ANGL138913OODT138880EONA138857ECRO138849HANS138835LEWA138822LLFO138799TIEN138765RSCA138764HCON138758OURB138749ORAB138731LOTH138709ISME138686TTOG138679FEET138657RSAS138625REWH138571PACT138566ERMS138566PHAS138514LENC138513NEDW138475TAGA138443CTSA138425ASDI138424IROW138414IMEW138407LLMA138381NALR138321GERT138314SEHE138289ADEI138286RINK138285ASLI138224AYFR138149TIZE138142URPO138138OUAR138110VEAS138097SAPR138087ECTL138072SCAM138056SSHA138013SASW137997NGTI137968IRRE137966COAS137931EWEE137930HEHU137907STPO137861SENC137843WEAL137761KSIN137755NACO137748EBLA137740IPAL137714DTOE137712EKEN137705ESLA137675IALP137654NHEA137650DINH137646GOFF137568LLNO137501TSHI137479EARW137468EGOO137466XAND137461EVAN137457SOPH137431INPO137391NDSW137356SSOU137331GARE137319SGRE137307ABET137296RSEN137288TREP137235AMME137230NALB137219TTON137192LESW137112NSEP137100NGWE137081NTOO137068DCHI137061NREA137023DOFA137022EDHO137002EEDA136952PURC136945DINN136925ISAG136895POOR136886DIUM136874IVEF136868NGTR136864YTOS136798SERE136793RSER136783RAMM136770OUSS136766OITS136748LBER136731SOHA136719LYPR136718DFOU136713RTTO136703HIEV136700SOFW136663NDEM136659TORN136627SABL136572YYEA136563RIZE136549DESE136500TENI136498NEAS136449NCHO136423LINI136420OEST136358RUCK136352LLIT136340ACIL136321URFA136316ATUS136293SLOC136273SSUM136260SINP136234NICE136227ECAD136215BLEO136191EDEL136171ONAC136149ALLM136108ERIM136100SMUS136082TASA136028RALD135982ATEH135982EMOD135949OSUR135947STAU135941EIRL135888ASFI135831NALF135810DENS135773SLON135761VIET135758DEXP135749LLAL135740EBOU135739ROOK135714NUES135706EXPO135703INSC135699VEFO135696GSTA135683EDSH135575ORID135556EBAR135545HOIS135492ENMO135492ATEB135471VERF135461NTSS135454UTTI135449OFTO135443YSAN135420DBYS135419ASEB135379STAC135310SCLO135303WECA135276EIRR135272NSCH135266ASLA135258TEXP135233TYPI135201PACI135186RREA135180NNUA135159GSIN135158EXPR135155TMAY135121NCOR135106OREB135103NTOD135086LYWA135070XCEP135066ORPE134992KOUT134986ITRE134955SONB134944NNOR134911SANG134910RANI134909TOOL134890EWEA134851DULE134844BRAT134834TYFO134821PIRI134807RSMA134805REEX134709FPRO134678TATU134637NDBO134633GEND134629EEDO134623DSAI134569ERGO134562OFDI134540HAPE134540NTME134516SCUR134464TAFT134458HARR134444EBRE134441ESYS134440ENAB134329ONEF134312USBA134298STOE134285HTOF134283HBOR134282NDAP134269URAG134256NEWT134255EPHO134234GIVI134219ECRI134187TWHO134152SHIG134088IGNO134057NORA134042TESW133939ANSC133919APPA133901TEWI133898KESA133854THMA133841FIFT133836SHOM133811AREU133787ONEH133782CANE133741RHAP133665ARTT133664XPRE133657ICHO133622LORD133559LYWH133532PENA133509LDCO133490TTAK133474ATAM133414CKLY133376ISET133305SWIF133301DETO133281MAYO133249SGRA133212ARIL133171MEWA133122ATSW133106ELED133087EEXT133053LFIN132964ACIT132960EFLO132938NTEX132911AYOR132906SGIV132903ATAB132893GNAT132849BERI132839ORYE132825YDON132808NGSC132782CHEA132769ARMS132680NDEL132675ITSM132675SINM132651PEAC132649LPED132632ICIS132629ANOP132612TRET132598INEM132577EVES132536DUND132503EVET132499ETYO132491RIAT132483OEXP132476NWER132467ILWA132457ICKI132444OGIV132412REVO132387RALM132381UCHO132376TIND132376KEDI132334EYON132311INBU132290CARO132286SGRO132276IMTH132215RAEL132212REEL132182ASAG132132SFAM132128NPRI132127OMEE132084WLED132057MALA132048RCAN131991EWEN131979WAYA131977STCA131975ASTM131970EDPA131939IWOU131924OATT131902ACAR131896LAYA131890REEK131795TOHO131729CEBE131654HTAN131648SOFR131623HARI131622YYOU131603ONPA131590ICST131572MEFR131552ISHT131532HLET131529GITS131529OMFO131519ILLW131506FFIN131496ALTR131491ATPR131438MEAT131407OTAN131336OOLI131336NLYO131330NBET131327YSTR131302VERD131282HOWM131247NGEO131236YCLE131215WOND131175ANAP131173TPEO131159ELDA131156ELDS131139KSTH131107ABIG131089ADAM131080UGGL131062EITW131054LEHA131029ONDT131000ARAB130984ALFA130977TDAY130956YABO130955ASNE130950HEYO130904ETCH130882DTHO130871HPRO130853OWNW130841YWHO130810TRIN130793LEMO130789ITMA130785CRIS130773RDON130762YOFA130731DSHI130669LSOP130619ANSL130586KICK130585AVIS130584IDAN130507RSTI130490MPAC130472TLER130462AHAS130448SSMA130443ATWH130413SURG130398RVER130392CTST130390PAID130382SSIC130371EDLY130368ERDO130344YOUL130307TEAR130304YTRA130276HEAB130261ABAN130261SREM130221EVIN130191LISA130188TOFL130185EACE130158DQUA130130SABI130124THSE130112NGEA130072RILY130044IAMS130039POUN130035RSRE130032NDDA130013NOVA129962UGHH129949EEKE129924ILLF129856LSOI129806SMON129714AIME129706SRAE129685PEDA129626DALE129585ISSH129577TOON129571VOCA129560LLYP129560PUSH129559UTST129540RSBE129453YALS129442ULDR129435YREC129421EOFB129388OPIC129383NAUG129367GETI129366BOYS129360EINI129353LYCA129349MAGA129347HERG129347TEWA129337HASR129330EADV129293ILTO129285ORUS129240YEVE129233EBLO129220ITBE129204URST129152TTOH129150AYOU129142ORCA129141NELE129140TRYA129085DISS129046EDFI129045HOIC129043DHEW129041NANI128994AYHA128974YINS128967ECTU128951SEFO128859ADDR128834NSUL128824BOWL128805WSTH128720NETI128720SMIN128694RATU128681YINA128650ERYD128571ASLE128536IMMI128532FARE128505NOPE128459NEUR128450KNEW128419ANGA128411NGAF128399MICA128397WEDN128391TMEA128310NMON128298EOPP128284SASI128276OSAY128271GATT128266BING128230DEMI128220LIBR128175LIEN128169ASTL128163DISE128151ESAF128143NLIK128122DAYW128119OFSA128009ABRI127956FANT127949ELSA127938INAU127921DGES127920VOIC127904ICTU127891HADO127874THAF127869RANE127828ITNE127808COLU127788ETSO127728LWOR127680INOF127652ANGO127613EROO127612ESLO127611IPPI127602LLSH127578UPOF127556ARDL127552CEWA127543ANTW127479UTWI127460SEIS127456YDID127455TOWH127447BSIT127416NOFS127413CKST127397ETWI127382CESW127371ISEN127337ASIC127324SPAS127278RRIN127256OBSE127224DEIN127222DMAK127203LSTR127189LLSO127189IDIT127188LDST127184DTOI127181SOMA127170EPIC127153SARY127136CHAT127101RAFF127052ODAN127041ATAT127040IHAD127023MICS126983ECHO126979BUSH126947EDUL126936ASIL126924NGSP126878CESH126858RDSO126789ROYA126781INEO126750RONA126699GINI126692DPRI126666NTSP126639POLL126634EENB126632ESOC126624EYWO126612ASUN126570EVOT126569ECUL126560ULDL126544MOTE126543NNAT126483RUGG126477TOGI126473XPEN126457WERT126454DHEL126370OYEE126357APHI126353EBSI126350UTFO126341AINW126318CLIM126294ARYC126242LLNE126226MESE126225OREE126182ROLI126162ONHO126156ECOS126153MESH126125VETE126110EENM126080TINF126079RROU126073OFYO126048TIMP126046MOTO126039LNOT126016UITA125992RVIN125905TROP125888OMON125848USHI125831LADE125829OURH125801DSEV125770LLET125756SEDW125729OPAR125723MUSE125698MATH125687ANYI125686ERAM125633CEWH125623ISCL125614ILLM125600CATC125593ROWS125563GHLY125519OFGO125511YLIN125506ACRE125501ORKT125495THOW125484SENG125469CUME125464DREP125443SSCH125434EDSU125434DREW125407LEAT125382UCHD125378IGER125342RTIO125329IONN125300DHOW125252TWOY125237UCTS125210ARDF125187LLAB125146TLEM125102WNED125094MESW125074EIRH125038OLDM125026DWHA124979CANO124977FWHI124950YSCH124943RSET124917DIEN124908AURA124897TANO124876PRIO124859EIRD124859OMBA124852AVEI124805MEIS124777DVIS124752ISHM124726ATHR124710EXAS124675SATE124622TEDD124618ATDO124591NDIF124568AMEP124548RHAD124527ITHG124518ARMI124507GTOD124471LESE124464HNIC124436ASAW124397NEWO124370ORTF124336LUNT124329AINF124250GERI124233LATO124210UREW124202GREG124201NERE124176ICHM124171TANI124155ESIM124150ITIZ124132EFRA124118IRLI124114SETS124037IRLS124006AFET123984VEGO123963NOTP123953ULTO123941AMSA123939RNTO123929CHDO123891GTOG123886EIRT123858NSES123842ALSH123830ASEL123804DSUP123785YOFS123776DAYO123735HABI123665ALOR123649ADCA123636DSOU123621ATDE123617MECH123611OREW123602DINB123563ASWI123551INBA123538MORI123478NLAN123447NUSE123444NTFR123441OCUM123417PONT123403NORI123305EWED123256TERG123210EECH123209MIGR123189ISAD123186URER123172INKA123127HOCK123096REHO123092SPOI123091ELSO123090TESE123081SEMA123074STPE123071BORD123062HEYM123058EDHA123053DENO123012SOFL122998ENIS122992ESAB122977AUTI122969CHMO122952OFNO122941RIET122915NINV122910TARS122902SHEE122837DIER122820LYAF122755LYHE122721CEPR122689LOBA122649KEPT122614DOCU122566URAT122559DAPP122535ARCO122498AGON122445NICK122370ISCR122343TLOO122317ABEL122312PELL122311ONCL122285ONGI122273MORT122273ETAB122240OKEN122158DTIM122152APON122133CALT122113TDID122112PANT122108ASFA122089PPLY122086YTIM122061SSIM122045EROL122018OURD122007LLYE121972ELTH121965DINM121937OSCO121935ECOA121916EYTO121893IZEN121875RIND121870ENIG121856HEEC121827ILER121747LBUT121733TFIR121619TSBU121613ACKL121581SBES121570HWIT121563IESB121480TENO121473EYWI121441ICEW121406VELE121367EHAL121332ORSW121295EMPO121270QUOT121251TAWA121246HEID121238PHIC121230ERAF121157ITSW121142AVEP121106GESO121095SEEA121086NGBO121077NGUN121054URBA121051OPRI121050IFEA121042WRON121029ONTW121022EENH121015DEDO121008NINF120984ORGI120974LLPR120955EEYE120924ALGO120924ILLG120902REUS120885FELT120877ITFO120866DTAK120857ERYA120839LORA120829ATBE120824ESTB120791OADS120778AMEC120761ELCO120760EIRM120751INLI120721NOTG120718NTCA120656SICI120639EMES120615OFBA120614HAPS120603TEER120595TRUM120571BASK120570OFHA120566OTAB120505RTEA120478OUTR120473RLYA120465EETO120464INEF120459RIKE120456FIDE120444YBET120418LEDE120414CODE120406WHOD120375WARR120271FLIG120156EITI120126LARA120080BRIE120079TSPO120044OMHI120014ESLE120011NAMA119997CHMA119989DMIL119974YUSE119957UTIF119867EENW119849LDWI119834SQUI119823LDEN119799DWHO119792KENT119790LEDW119783EDOV119777KTOT119765BEAU119749AHIG119732EYES119729LTAN119690ANPR119678PURP119675DWER119675ELYS119646SBEL119643NARR119621AIRE119612AYWI119598AITI119591IRPO119584ECAT119582EINN119574SFAC119551INEC119550LEVA119531ILLU119500DINE119457OURL119433ZENS119419AIGH119401ENBY119390RITO119388LYMO119342DSCO119312OOKO119268NEIT119252DMON119241NHOU119232SALT119231ENOV119180OODI119148VERR119124OLOF119107UEDT119043LIZA119027ASSP118986PPAR118977SURA118969XTRE118936ELIC118900SISO118865ABUS118812LICT118782ICEC118763BALA118747LEDF118731ONBO118705YEDA118671DERB118652IMON118647TMOS118636ONBY118621RSIS118616AIRP118607PLED118596RTFO118589CTSO118563MALS118544NTYO118525IESC118479DENI118417IOLE118412ONAF118361NDCR118345DEBA118341IANI118339NGAD118333RYFO118326GELE118301RCRA118258ILLD118179GTHR118170EEMP118146DERC118122AINM118110EYSA118104HEEM118070DRAI118017POFT117992EIRB117978GHTC117976LEHE117966LISM117959DAYN117959OLET117933SSIT117894GUYS117893PSAN117865ROMW117817NEDH117786ARWI117752IVEH117746SLIM117728MONA117699BLEW117695DRUN117688ITDO117686FREQ117647OUIS117558CAIN117553REHI117526UTCO117493OTSO117492RIMI117488BOMB117464TTOW117458WNAN117449RNAN117425TOUG117414EOFO117410VOID117394DARK117392NCAM117366YCAR117314WOYE117301OMBE117214GUID117157LOAN117139EENF117138CREW117138EDCH117136DINI117135ADCO117122DACO117067YTOB117053IGAN117035GEDI117032EINP117032YISA117029LDIE117018ONWO117006RAMI116995TINI116983NDPU116979APPY116946REFL116920NEAT116914AINO116878DSWI116816EANN116814DBEF116760DOYO116758REEC116745SCLA116726ENOF116722CLUS116709ASMU116709ONCH116701DANT116700ATSU116695NPOL116688ECLU116676HTBE116671TWOT116654NAMI116609NECA116599EMOU116589MCCA116586NTOL116576RLDS116555ULDP116543AGEW116539INEV116528ADAL116525PATT116515OTHT116512LYUN116502HIBI116475ILLL116466LYEA116459PENN116434ANHO116427IEWS116401TEDR116376ICEP116298LSAR116243OWNP116187UDIO116172SHTH116168IRAT116165OUSC116122TOSI116100SLIF116096EDET116088DTOU116087ORTL116067SIXT116066OWNB116039NOTW116038MMIN116037RSTC116025AVOI116023HUSB115994GPLA115992DSAR115959ORWI115956EDMI115939HENB115920OSOM115916EOFR115877ACKW115874WISE115845SMAK115831STEL115813ANLE115801THSI115768NDUR115744GBAC115700ICAG115687AIDO115680IAME115667RFIN115647EFUS115618ATOT115590AILI115569IGEN115542ONOU115534EINM115518NISS115462AWHO115456ONIA115422RUIT115421APTA115417EGIV115408YOUM115309OBRI115308IALE115293LTEA115292AGRA115286YEST115280IORS115280OFUS115231NCIP115217FSTA115208NASI115205SOIN115202UNIS115180ISGR115172TOLA115128SUNI115070PIRA115044LIDA115012EFED114985ITSR114973DBYH114972LDON114969LOUI114967EOFD114966TOPS114961IRCO114940ASIA114915TOYO114895OFWO114830LDMA114820OTHR114795EEXC114789RNEW114779EYWA114756SDOW114753SITW114738ETOE114736ACEW114725OMEL114721NMIN114715OFIL114691OPES114690LLHE114681HESM114659BATE114587TACH114572ESTY114551HHAS114535CKON114531SREG114516ARLO114514CIOU114496EYDO114485STCH114484SAVA114473HEYL114468ERIF114460CHRE114450LLYM114436UCTE114426LLSI114370EMTH114321GSTH114310ATPE114301GBUT114293ESAG114191IVEE114145NUME114118HUGE114107TONW114099TBEE114068EWSP114025OSEO114022ITSL113983TRUG113980MULA113946NITA113932OWHI113928TTHO113921NDCL113902GTIM113901OFAT113888ADST113858QUIP113822MOBI113815LYNO113742STTW113719MHIS113708TEAL113643HOTE113643GTOH113599CHOT113598TRAS113570YNIG113536KETB113534HOLA113525AVAL113506SEDS113472HWES113453NBER113435TASK113433STDE113433CHOS113420URRO113416ERYW113410UCHT113379DSEE113337EDWE113324AVEF113320ALSW113304SESP113300OFAB113300IDTO113298SDEP113271GMOR113247SONM113243RYIS113227STAM113220HOAR113202AGRO113189RASA113176TISC113158TESS113156URRI113134EESA113099HEVO113095NART113094HASD113063NSAL113057DEDW113056MEHE113030ICRE113006IRIT112992TLEO112991EAMT112969RCHO112950ROFS112894NSPA112889IFHE112865OBEI112856HEGI112852NGPL112837LYOF112833ANEM112824RMEN112812ELEN112779HMOR112771OHOL112717IANO112664SGEN112644RMIS112635OLUN112620DINO112616AMBE112607NEMP112588RGRA112574MOFT112574ITYH112547AVEO112545VESH112542RHIM112532ATFI112503CALM112495OADC112458DDUR112437NHOW112370REEO112362USEW112342NKNO112341SEAC112334ITYB112324SSTU112320BEYO112310OUSP112306ERBY112276EDLE112272NEFO112261SAVI112214SEEK112211SPUT112160TADI112103AMTH112090ISFR112082TTEA112065DERG112056NUND112053YMAR112025OPPI112017TESH112007SARA112004NEGA111993UTCH111925OAPP111924TBEF111918NICI111904HEDB111874ANTC111867URVE111866QUEE111859LTHC111848INEB111833URCO111813SASE111787TSTE111786CHFO111765TSST111763NKED111761ULED111733DEDF111722HINS111718NORS111709CQUI111701YTHO111693TESC111633TSER111630DONS111620ATNO111612SFAR111604UMIN111592ENTG111532STOI111515NHAV111489LICS111479THWA111473GMEN111451FEMA111450UTTE111403ERYB111376NSEL111359UBST111354OBEL111350EBEN111321OPOF111315ELDI111311NBOT111305SCLE111289ICEF111265ACLE111263REEW111257DBYM111242RTOR111230ANHE111219DDES111064OURG111059HOLO111034ARYI111023RUNI111006ASTU111001ACCI110988LMAR110977TASI110975OWHO110941BORA110909LLWA110900GATH110898EINE110892NGNO110879DULT110879EITA110875SEWI110858RTAT110855RRIC110815OSTH110814ISDO110742TOAR110736RFEC110713ATPM110654NDDR110650STSH110648ONBA110648EWTH110646RGAM110625LOTS110612WEDO110607REDR110587DOPT110579HADE110551WEAT110527NDEF110524REEP110458EFEE110403DRAM110393OFBO110329ACAN110328OCKI110325ISBO110302NENG110299SALW110298FERT110285TRAF110284ADAS110266VEON110258HCOM110228MURD110183OFRA110174TWEN110170ZINE110157TRIG110148HOLL110134HYOU110080VEHA110057LLUS110047NHAN110042ORSC110034KWAS110032NOIS110006OPOL110004SURF109955RSTU109943IBIT109920TATO109902CHOR109889EXIC109874OCRE109867ITEL109859UNLI109856OSTU109838NONL109834FMAN109834NUET109801ENDU109798RATS109787MIKE109786NGFA109757SNOR109755NERI109747UNAT109729HOWO109727"
TOTAL_QUADGRAMS = 4224127912 # sum of ALL ~341,000 counts, not just the top 8,000 kept here
FLOOR_Q = math.log10(0.01 / TOTAL_QUADGRAMS)
QLOG = {}
for m in re.finditer(r'([A-Z]{4})(\d+)', QUADGRAM_DATA):
QLOG[m.group(1)] = math.log10(int(m.group(2)) / TOTAL_QUADGRAMS)
def quadgram_score(text):
return sum(QLOG.get(text[i:i + 4], FLOOR_Q) for i in range(len(text) - 3))
def generate_key_square(keyword):
keyword = re.sub(r'[^A-Z]', '', keyword.upper().replace('J', 'I'))
seen = []
for ch in keyword:
if ch not in seen:
seen.append(ch)
for ch in ALPHA:
if ch not in seen:
seen.append(ch)
return seen
def pos_of(square, ch):
idx = square.index(ch)
return idx // 5, idx % 5
# Decryption applies the inverse of each Playfair rule: same row moves one
# step left instead of right, same column moves one step up instead of
# down, and the rectangle rule is its own inverse.
def playfair_decrypt(ciphertext, square):
out = []
for i in range(0, len(ciphertext), 2):
r1, c1 = pos_of(square, ciphertext[i])
r2, c2 = pos_of(square, ciphertext[i + 1])
if r1 == r2:
out.append(square[r1 * 5 + (c1 - 1) % 5])
out.append(square[r2 * 5 + (c2 - 1) % 5])
elif c1 == c2:
out.append(square[((r1 - 1) % 5) * 5 + c1])
out.append(square[((r2 - 1) % 5) * 5 + c2])
else:
out.append(square[r1 * 5 + c2])
out.append(square[r2 * 5 + c1])
return ''.join(out)
def random_square():
sq = list(ALPHA)
random.shuffle(sq)
return sq
def swap_letters(sq):
a, b = random.sample(range(25), 2)
sq = sq[:]
sq[a], sq[b] = sq[b], sq[a]
return sq
def swap_rows(sq):
r1, r2 = random.sample(range(5), 2)
sq = sq[:]
sq[r1 * 5:r1 * 5 + 5], sq[r2 * 5:r2 * 5 + 5] = sq[r2 * 5:r2 * 5 + 5], sq[r1 * 5:r1 * 5 + 5]
return sq
def swap_cols(sq):
c1, c2 = random.sample(range(5), 2)
sq = sq[:]
for r in range(5):
sq[r * 5 + c1], sq[r * 5 + c2] = sq[r * 5 + c2], sq[r * 5 + c1]
return sq
def flip_rows(sq):
return [sq[(4 - r) * 5 + c] for r in range(5) for c in range(5)]
def flip_cols(sq):
return [sq[r * 5 + (4 - c)] for r in range(5) for c in range(5)]
def reverse_key(sq):
return sq[::-1]
# Weighted move set: mostly single-letter swaps, occasionally a structural
# move. See the module docstring above for why the structural moves matter.
def random_move(sq):
r = random.random()
if r < 0.90:
return swap_letters(sq)
if r < 0.92:
return swap_rows(sq)
if r < 0.94:
return swap_cols(sq)
if r < 0.96:
return flip_rows(sq)
if r < 0.98:
return flip_cols(sq)
return reverse_key(sq)
def anneal(ciphertext, steps):
sq = random_square()
score = quadgram_score(playfair_decrypt(ciphertext, sq))
best_sq, best_score = sq[:], score
for step in range(steps):
t = 150 * (0.3 / 150) ** (step / steps)
cand = random_move(sq)
cand_score = quadgram_score(playfair_decrypt(ciphertext, cand))
delta = cand_score - score
if delta > 0 or random.random() < math.exp(delta / t):
sq, score = cand, cand_score
if score > best_score:
best_score, best_sq = score, sq[:]
return best_sq, best_score
# Exhaustive steepest-ascent polish: try every one of the 300 possible
# letter-pair swaps, apply whichever improves the score the most, repeat
# until no swap helps. Cheap, and reliably cleans up the last few letters
# the annealing phase left slightly out of place.
def polish(ciphertext, square):
sq, score = square[:], quadgram_score(playfair_decrypt(ciphertext, square))
improved = True
while improved:
improved = False
best_cand, best_score = None, score
for a in range(25):
for b in range(a + 1, 25):
cand = sq[:]
cand[a], cand[b] = cand[b], cand[a]
cand_score = quadgram_score(playfair_decrypt(ciphertext, cand))
if cand_score > best_score:
best_score, best_cand = cand_score, cand
if best_cand:
sq, score, improved = best_cand, best_score, True
return sq, score
def break_playfair(ciphertext, restarts=12, steps=150000):
best_sq, best_score = None, float('-inf')
for _ in range(restarts):
sq, _ = anneal(ciphertext, steps)
sq, score = polish(ciphertext, sq)
if score > best_score:
best_score, best_sq = score, sq
return best_sq, best_score
if __name__ == '__main__':
ciphertext = "PDFLSMHGBSMDFSCFMKMYNDQLTQBSATHPULSZLKATGATLIMHRIPGAEQLUKLLKATDBPMRFGAEWLFMBFVBSAKAQKBIMGKUFDBGKUFEFBQLWRMICXEPLKONORIGCVNDKCIBMXLIUFUKMHQSMGALKZSULSZLKMANVCKLFRYPAYNBFHYULSZLKATKSXIILKBFKSZPDLMLXMSZDEBFREHMVRQGAFYNVHPLKMGMBYHFSCFDZIULPKLLKMRSVLFRMXIRMLUBYLUQTXSMYKLBOLTGAEQLUKLLKOKMKLWGMHBBKTLAKCXSKNAGMBTVLMSONTLEPRSVYEBBFLIABDLQCVYDQBFLBFSCFODLUCZQTNVLUSMINGATLBMLXMSHMCKDAIMEKYQPHDKLERBILMKHMUFAKYQPDFEGCTSXMMKGATLIMCRIMAQEWILXSYQRAGMSKMKRMMRYQLCGMPRKPUGRQHGFXLUKLLKATPDGMMWYKGAIKLPKLLKADCQKLLKMZXSYQXSCMSMLKBRAWMGMSGAIQHMAKYQFUKMBHRABKBRLKDBFHUYNAXFMYGAEQBGLTCKDMHQLKHRZLLVZDIMBTSEEFMKMSGMEQSXFHMGQXOSRSRSEALMRQESPDILIMMDFPGAMSQCLISZLPILNABXLWRMGUFHLIBKKNOSDOMUILLZMAPDILDMROCSKCBEVFKMLKZSIBDEGAPRNMBKARNDMKRBBIULTOAPFGMNALSRDZPRGKAGPB"
square, score = break_playfair(ciphertext)
plaintext = playfair_decrypt(ciphertext, square)
print('Recovered key square:')
for r in range(5):
print(' '.join(square[r * 5:r * 5 + 5]))
print(f"Best fit score: {score:.2f}")
print()
print('Recovered plaintext:')
print(plaintext)
Running this against the same demo ciphertext as the visualizer (budget several minutes; this took a little under 7 minutes on the machine this was verified on) produces:
Recovered key square:
Z U V W X
R M O N A
D C H Y B
K E F G I
T L P Q S
Best fit score: -5051.24
Recovered plaintext:
THEPLAYFAIRCIPHERENCRYPTSPAIRSOFLETXTERSINSTEADOFSINGLELETTERSBYLOOKINGUPEACHPAIRINSIDEAFIVEBYFIVEKEYSQUAREBUILTFROMAKEYWORDBECAUSEXEVERYPLAINTEXTLETXTERNOWDEPENDSONWHICHLETXTERSITSBESIDEITXTHEUSUALTRICKOFCOUNTINGHOWOFTENEACHCIPHERTEXTLETTERAPXPEARSBARELYHELPSSINCETHATSINGLELETTERFREQUENCYDISTRIBUTIONENDSUPALMOSTFLATWHICHISEXACTLYWHYTHISCIPHERHELDUPSOWELLAGAINSTCASUALCODEBREAKINGFORDECADESRECOVERINGTHEKEYSQUAREINSTEADMEANSGUESSINGANENTIREARRANGEMENTOFTWENTYFIVELETTERSTHENNUDGINGITLETTERBYLETTERUSINGSIMULATEDANXNEALINGSCORINGEVERYCANDIDATEBYHOWCONVINCINGLYITSDECRYPTEDOUTPUTREADSLIKEREALENGLISHONESWAPATATIMEUNTILTHESEARCHFINALLYSETXTLESONASQUAREWHOSEDIGRAPHRULESTURNTHESCRAMBLEDCIPHERTEXTBACKINTOORDINARYREADABLEPROSEFROMSTARTTOFINISH
Same score, same recovered plaintext as the visualizer, and yet another concrete example of the row/column permutation quirk from the section above. This run’s key square (ZUVWX / RMONA / DCHYB / KEFGI / TLPQS) is neither the original MONARCHY... square nor the specific permuted square the JavaScript visualizer happened to land on earlier. It’s a third, independently-shifted arrangement of the same five rows and five columns, decrypting to the identical plaintext regardless.
Unlike the Vigenère breaker’s three-stage pipeline, there’s no golfed “for fun” tier of this one. Vigenère’s own guide made the same call for the same reason: collapsing the move set, annealing loop, and polish pass into a one-liner would trade away the very logic that makes this breaker work, not just whitespace. The 80KB quadgram table also dominates the file’s size regardless of how tightly the code around it is written, so golfing the logic wouldn’t meaningfully shrink anything anyway.
Interactive Visualizer
Try it above: paste any ciphertext produced by the classic Playfair model (or use the default), and watch the search work through its 12 restarts. A live preview updates as each one anneals, and the frequency chart up top stays visibly flat throughout. That’s a reminder of exactly why this cipher needed a fundamentally different attack than Caesar or Substitution. When the search finishes, the recovered 5×5 key square fills in letter by letter.
Playfair vs. Substitution: What Actually Changes
| Substitution | Playfair (this breaker) | |
|---|---|---|
| Key structure | A single letter-for-letter mapping (26 letters) | A 5×5 spatial arrangement of 25 letters |
| Nominal key space | 26! (~4.03 × 10²⁶) | 25! (~1.55 × 10²⁵) |
| Effective key space | Same as nominal | ~1.08 × 10²¹ once row/column permutation equivalence is accounted for |
| Starting frequency guess | Useful: most-common-letter matching gives a real head start | Not useful: digraph substitution flattens single-letter frequencies almost completely |
| Scoring statistic | Digram frequencies + common-word bonus | Quadgram frequencies (digrams proved too weak a signal) |
| Search moves | Single letter-pair swaps | Mostly single-letter swaps, plus row/column swaps and flips |
| Known ambiguity | None: the recovered key is the key | Row and column block permutations of the true square are behaviorally identical |
Playfair’s headline defense, hiding single-letter frequency, turns out to matter less than the underlying search technique. Once the right statistic (quadgrams) and the right moves (structural, not just letter-level) are in place, the same simulated-annealing idea that cracks Substitution closes this cipher too.
Limitations of This Attack
This breaker’s parameters (12 restarts, 150,000 annealing steps each, an 8,000-entry quadgram table) were tuned against a 740-letter demo message and verified to converge reliably at that scale. Shorter ciphertexts give the quadgram scorer less signal per candidate and may need more restarts, more steps, or simply more ciphertext to work with before the search reliably finds the true optimum rather than a strong-looking local one. In practice, texts under roughly 200-300 letters often need substantially more restarts to converge reliably, if they converge at all; quadgram statistics need enough repetitions of common four-letter patterns to reliably separate the true key from a merely plausible-looking one.
This breaker also assumes the classic Playfair rules: the same double-letter-splitting and merged I/J conventions the base cipher guide uses. Variant rule sets exist historically (different padding-letter choices, keeping I and J separate with a 6×6 or 36-cell square, and so on), and any of them would need the decryption logic here updated to match before this breaker could be pointed at ciphertext produced by those variants.
The quadgram table itself is a truncated top-8,000 slice of a roughly 341,000-entry public corpus (excluding entries containing J, since this cipher’s alphabet omits it). It was chosen because embedding the full table inline would make the page enormous for no real gain in accuracy. The empirical testing behind this breaker found the smaller table converges just as reliably as the full one.
Finally, like the Substitution breaker’s simulated annealing, this is a randomized search, not an exhaustive one. No individual run is mathematically guaranteed to find the global optimum, only very likely to across enough restarts. The 5-out-of-12 success rate observed in the worked example above is typical, not a floor. Running more restarts pushes the odds of at least one success closer to certain, at the cost of more time.
FAQ
Why doesn’t simple frequency analysis work against Playfair the way it does against Caesar or Substitution?
Because Playfair substitutes letter pairs, not individual letters, and a given letter’s ciphertext value depends on which letter it’s paired with. That mixes single-letter frequencies down to nearly flat, denying the search the same head-start a monoalphabetic substitution cipher hands over for free.
Why does this breaker need quadgram statistics instead of the digram statistics used elsewhere on this site?
Digram scoring was tested first and reliably plateaued a long way short of the true key square, regardless of how many restarts or steps it was given. Quadgram statistics give the search a sharper, more specific signal per candidate. That’s the same choice made by published Playfair cryptanalysis resources this breaker was checked against.
Why does the search sometimes recover a different-looking key square than the one used to encrypt?
Because permuting the five rows of a key square as whole blocks, or the five columns, produces a cipher that behaves identically in every respect: same encryption, same decryption, for every possible digraph. It’s a genuine structural property of Playfair, not a bug. Any recovered square that decrypts the ciphertext correctly is a legitimate answer, whether or not it’s letter-for-letter identical to the original.
How long does the ciphertext need to be for this to work reliably?
The visualizer’s default example runs to 740 letters (370 digraphs), long enough that the correct key square’s score separates decisively from every restart that lands somewhere else. That’s a gap of well over 2,000 points in the worked example above. Much shorter messages give quadgram statistics less to work with and may need a larger restart budget to converge reliably.
Could this attack be adapted to break the Four-Square or Two-Square ciphers too?
The same core idea, quadgram-scored simulated annealing with a richer move set than plain letter swaps, should transfer, since both are close relatives of Playfair built from multiple key squares. The move set and scoring would need to account for two (or four) squares’ worth of structure rather than one, which this breaker doesn’t attempt.
References
-
Practical Cryptography. “Cryptanalysis of the Playfair Cipher.” Available at: http://practicalcryptography.com/cryptanalysis/stochastic-searching/cryptanalysis-playfair/
-
Practical Cryptography. “Quadgram Statistics as a Fitness Measure.” Available at: http://practicalcryptography.com/cryptanalysis/text-characterisation/quadgrams/
-
Wikipedia. “Playfair cipher.” Available at: https://en.wikipedia.org/wiki/Playfair_cipher
-
Singh, Simon. “The Code Book.” Doubleday, 1999.